mirror of
https://github.com/termux/termux-app
synced 2024-06-14 13:26:39 +00:00
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.View;
|
||||||
import android.view.ViewConfiguration;
|
import android.view.ViewConfiguration;
|
||||||
import android.view.ViewTreeObserver;
|
import android.view.ViewTreeObserver;
|
||||||
|
import android.view.accessibility.AccessibilityEvent;
|
||||||
import android.view.accessibility.AccessibilityManager;
|
import android.view.accessibility.AccessibilityManager;
|
||||||
import android.view.autofill.AutofillValue;
|
import android.view.autofill.AutofillValue;
|
||||||
import android.view.inputmethod.BaseInputConnection;
|
import android.view.inputmethod.BaseInputConnection;
|
||||||
|
@ -35,6 +36,7 @@ import androidx.annotation.RequiresApi;
|
||||||
import com.termux.terminal.KeyHandler;
|
import com.termux.terminal.KeyHandler;
|
||||||
import com.termux.terminal.TerminalEmulator;
|
import com.termux.terminal.TerminalEmulator;
|
||||||
import com.termux.terminal.TerminalSession;
|
import com.termux.terminal.TerminalSession;
|
||||||
|
import com.termux.view.accessibility.TerminalAccessibilityDelegate;
|
||||||
import com.termux.view.textselection.TextSelectionCursorController;
|
import com.termux.view.textselection.TextSelectionCursorController;
|
||||||
|
|
||||||
/** View displaying and interacting with a {@link TerminalSession}. */
|
/** View displaying and interacting with a {@link TerminalSession}. */
|
||||||
|
@ -217,6 +219,7 @@ public final class TerminalView extends View {
|
||||||
mScroller = new Scroller(context);
|
mScroller = new Scroller(context);
|
||||||
AccessibilityManager am = (AccessibilityManager) context.getSystemService(Context.ACCESSIBILITY_SERVICE);
|
AccessibilityManager am = (AccessibilityManager) context.getSystemService(Context.ACCESSIBILITY_SERVICE);
|
||||||
mAccessibilityEnabled = am.isEnabled();
|
mAccessibilityEnabled = am.isEnabled();
|
||||||
|
setAccessibilityDelegate(new TerminalAccessibilityDelegate(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -443,7 +446,9 @@ public final class TerminalView extends View {
|
||||||
mEmulator.clearScrollCounter();
|
mEmulator.clearScrollCounter();
|
||||||
|
|
||||||
invalidate();
|
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;
|
return mTermSession;
|
||||||
}
|
}
|
||||||
|
|
||||||
private CharSequence getText() {
|
public CharSequence getText() {
|
||||||
return mEmulator.getScreen().getSelectedText(0, mTopRow, mEmulator.mColumns, mTopRow + mEmulator.mRows);
|
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
Block a user