mirror of https://github.com/termux/termux-app
Added: Add support for sending terminal cursor position to accessibility apps like brltty
This commit is contained in:
parent
82b1580312
commit
bd6347ddda
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue