This commit is contained in:
agnostic-apollo 2024-04-26 07:28:37 +08:00 committed by GitHub
commit 00cf466a45
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 46 additions and 2 deletions

View File

@ -26,6 +26,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;
@ -39,6 +40,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}. */
@ -221,6 +223,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));
}
@ -457,7 +460,9 @@ public final class TerminalView extends View {
mEmulator.clearScrollCounter();
invalidate();
if (mAccessibilityEnabled) setContentDescription(getText());
if (mAccessibilityEnabled)
sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED);
}
/** This must be called by the hosting activity in {@link Activity#onContextMenuClosed(Menu)}
@ -986,7 +991,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());
}
}