Added: Add support for sending terminal cursor position to accessibility apps like brltty

This commit is contained in:
agnostic-apollo 2022-06-16 18:31:08 +05:00
parent 82b1580312
commit bd6347ddda
2 changed files with 46 additions and 2 deletions

View File

@ -23,6 +23,7 @@ import android.view.MotionEvent;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewTreeObserver;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityManager;
import android.view.autofill.AutofillValue;
import android.view.inputmethod.BaseInputConnection;
@ -35,6 +36,7 @@ import androidx.annotation.RequiresApi;
import com.termux.terminal.KeyHandler;
import com.termux.terminal.TerminalEmulator;
import com.termux.terminal.TerminalSession;
import com.termux.view.accessibility.TerminalAccessibilityDelegate;
import com.termux.view.textselection.TextSelectionCursorController;
/** View displaying and interacting with a {@link TerminalSession}. */
@ -217,6 +219,7 @@ public final class TerminalView extends View {
mScroller = new Scroller(context);
AccessibilityManager am = (AccessibilityManager) context.getSystemService(Context.ACCESSIBILITY_SERVICE);
mAccessibilityEnabled = am.isEnabled();
setAccessibilityDelegate(new TerminalAccessibilityDelegate(this));
}
@ -443,7 +446,9 @@ public final class TerminalView extends View {
mEmulator.clearScrollCounter();
invalidate();
if (mAccessibilityEnabled) setContentDescription(getText());
if (mAccessibilityEnabled)
sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED);
}
/**
@ -938,7 +943,7 @@ public final class TerminalView extends View {
return mTermSession;
}
private CharSequence getText() {
public CharSequence getText() {
return mEmulator.getScreen().getSelectedText(0, mTopRow, mEmulator.mColumns, mTopRow + mEmulator.mRows);
}

View File

@ -0,0 +1,39 @@
package com.termux.view.accessibility;
import android.os.Bundle;
import android.view.View;
import android.view.accessibility.AccessibilityNodeInfo;
import androidx.annotation.NonNull;
import com.termux.view.TerminalView;
public class TerminalAccessibilityDelegate extends View.AccessibilityDelegate {
private static final String LOG_TAG = "TerminalAccessibilityDelegate";
public static String EXTRA_ACCESSIBILITY_NODE_TYPE = "accessibility-node-type";
public static String EXTRA_TERMINAL_CURSOR_COL = "terminal-cursor-col";
public static String EXTRA_TERMINAL_CURSOR_ROW = "terminal-cursor-row";
private final TerminalView mTerminalView;
public TerminalAccessibilityDelegate(@NonNull TerminalView terminalView) {
mTerminalView = terminalView;
}
@Override
public void onInitializeAccessibilityNodeInfo(@NonNull View host, @NonNull AccessibilityNodeInfo info) {
mTerminalView.mClient.logInfo(LOG_TAG, "onInitializeAccessibilityNodeInfo");
super.onInitializeAccessibilityNodeInfo(host, info);
Bundle extra = info.getExtras();
if (mTerminalView.mEmulator != null) {
extra.putString(EXTRA_ACCESSIBILITY_NODE_TYPE, "terminal");
extra.putInt(EXTRA_TERMINAL_CURSOR_COL, mTerminalView.mEmulator.getCursorCol());
extra.putInt(EXTRA_TERMINAL_CURSOR_ROW, mTerminalView.mEmulator.getCursorRow());
mTerminalView.mClient.logInfo(LOG_TAG, "col=" + mTerminalView.mEmulator.getCursorCol() + ", row=" + mTerminalView.mEmulator.getCursorRow());
}
info.setContentDescription(mTerminalView.getText());
}
}