Skip to content

Commit

Permalink
Fix issue where terminal cursor blinking would not automatically star…
Browse files Browse the repository at this point in the history
…t again if termux activity is started after device display timeout with double tap and not power button.

Fixes termux#2138
  • Loading branch information
agnostic-apollo committed Jun 20, 2021
1 parent f4fba9b commit d8b50c6
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,15 @@ public void onResume() {
setSoftKeyboardState(true, 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;
}
}

/**
Expand Down
17 changes: 10 additions & 7 deletions terminal-view/src/main/java/com/termux/view/TerminalView.java
Original file line number Diff line number Diff line change
Expand Up @@ -881,13 +881,16 @@ public synchronized boolean setTerminalCursorBlinkerRate(int blinkRate) {
* {@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
* cursor blinker does not run when activity is not visible. Ensure that {@link #mEmulator}
* is set when you call this to start cursor blinking by waiting for {@link TerminalViewClient#onEmulatorSet()}
* event after calling {@link #attachSession(TerminalSession)} for the first session added in the
* activity, otherwise blinking will not start. Do not call this directly after
* {@link #attachSession(TerminalSession)} since {@link #updateSize()} may return without
* setting {@link #mEmulator} since width/height may be 0. Its called again in
* {@link #onSizeChanged(int, int, int, int)}.
* cursor blinker does not run when activity is not visible. If you call this on onResume()
* to start cursor blinking, then ensure that {@link #mEmulator} is set, otherwise wait for the
* {@link TerminalViewClient#onEmulatorSet()} event after calling {@link #attachSession(TerminalSession)}
* for the first session added in the activity since blinking will not start if {@link #mEmulator}
* is not set, like if activity is started again after exiting it with double back press. Do not
* call this directly after {@link #attachSession(TerminalSession)} since {@link #updateSize()}
* 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
* {@link com.termux.terminal.TerminalSessionClient#onTerminalCursorStateChange(boolean)}
Expand Down

0 comments on commit d8b50c6

Please sign in to comment.