Fix issue where terminal cursor blinking would not automatically start again if termux activity is started after device display timeout with double tap and not power button.

Fixes #2138
This commit is contained in:
agnostic-apollo
2021-06-20 05:57:57 +05:00
parent 5f2ccca423
commit f77c88633e
2 changed files with 19 additions and 7 deletions

View File

@@ -98,6 +98,15 @@ public class TermuxTerminalViewClient extends TermuxTerminalViewClientBase {
setSoftKeyboardState(true, false); setSoftKeyboardState(true, false);
mTerminalCursorBlinkerStateAlreadySet = false; mTerminalCursorBlinkerStateAlreadySet = false;
if (mActivity.getTerminalView().mEmulator != null) {
// Start terminal cursor blinking if enabled
// If emulator is already set, then start blinker now, otherwise wait for onEmulatorSet()
// event to start it. This is needed since onEmulatorSet() may not be called after
// TermuxActivity is started after device display timeout with double tap and not power button.
setTerminalCursorBlinkerState(true);
mTerminalCursorBlinkerStateAlreadySet = true;
}
} }
/** /**

View File

@@ -881,13 +881,16 @@ public final class TerminalView extends View {
* {@link #TERMINAL_CURSOR_BLINK_RATE_MIN} and {@link #TERMINAL_CURSOR_BLINK_RATE_MAX}. * {@link #TERMINAL_CURSOR_BLINK_RATE_MIN} and {@link #TERMINAL_CURSOR_BLINK_RATE_MAX}.
* *
* This should be called when the view holding this activity is resumed or stopped so that * This should be called when the view holding this activity is resumed or stopped so that
* cursor blinker does not run when activity is not visible. Ensure that {@link #mEmulator} * cursor blinker does not run when activity is not visible. If you call this on onResume()
* is set when you call this to start cursor blinking by waiting for {@link TerminalViewClient#onEmulatorSet()} * to start cursor blinking, then ensure that {@link #mEmulator} is set, otherwise wait for the
* event after calling {@link #attachSession(TerminalSession)} for the first session added in the * {@link TerminalViewClient#onEmulatorSet()} event after calling {@link #attachSession(TerminalSession)}
* activity, otherwise blinking will not start. Do not call this directly after * for the first session added in the activity since blinking will not start if {@link #mEmulator}
* {@link #attachSession(TerminalSession)} since {@link #updateSize()} may return without * is not set, like if activity is started again after exiting it with double back press. Do not
* setting {@link #mEmulator} since width/height may be 0. Its called again in * call this directly after {@link #attachSession(TerminalSession)} since {@link #updateSize()}
* {@link #onSizeChanged(int, int, int, int)}. * may return without setting {@link #mEmulator} since width/height may be 0. Its called again in
* {@link #onSizeChanged(int, int, int, int)}. Calling on onResume() if emulator is already set
* is necessary, since onEmulatorSet() may not be called after activity is started after device
* display timeout with double tap and not power button.
* *
* It should also be called on the * It should also be called on the
* {@link com.termux.terminal.TerminalSessionClient#onTerminalCursorStateChange(boolean)} * {@link com.termux.terminal.TerminalSessionClient#onTerminalCursorStateChange(boolean)}