From 9c92251595615411da38817401d5cbf7b7ea5c0e Mon Sep 17 00:00:00 2001 From: agnostic-apollo Date: Mon, 28 Jun 2021 09:26:42 +0500 Subject: [PATCH] Fixed issue where back button would not exit the activity if bootstrap installation failed and users dismissed the error dialog, --- .../com/termux/app/terminal/TermuxTerminalViewClient.java | 7 +++++++ .../src/main/java/com/termux/view/TerminalView.java | 5 ++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/termux/app/terminal/TermuxTerminalViewClient.java b/app/src/main/java/com/termux/app/terminal/TermuxTerminalViewClient.java index 41574ce0..88c75852 100644 --- a/app/src/main/java/com/termux/app/terminal/TermuxTerminalViewClient.java +++ b/app/src/main/java/com/termux/app/terminal/TermuxTerminalViewClient.java @@ -245,6 +245,13 @@ public class TermuxTerminalViewClient extends TermuxTerminalViewClientBase { @Override public boolean onKeyUp(int keyCode, KeyEvent e) { + // If emulator is not set, like if bootstrap installation failed and user dismissed the error + // dialog, then just exit the activity, otherwise they will be stuck in a broken state. + if (keyCode == KeyEvent.KEYCODE_BACK && mActivity.getTerminalView().mEmulator == null) { + mActivity.finishActivityIfNotFinishing(); + return true; + } + return handleVirtualKeys(keyCode, e, false); } diff --git a/terminal-view/src/main/java/com/termux/view/TerminalView.java b/terminal-view/src/main/java/com/termux/view/TerminalView.java index dc86207c..7fa8d513 100644 --- a/terminal-view/src/main/java/com/termux/view/TerminalView.java +++ b/terminal-view/src/main/java/com/termux/view/TerminalView.java @@ -720,7 +720,10 @@ public final class TerminalView extends View { public boolean onKeyUp(int keyCode, KeyEvent event) { if (TERMINAL_VIEW_KEY_LOGGING_ENABLED) mClient.logInfo(LOG_TAG, "onKeyUp(keyCode=" + keyCode + ", event=" + event + ")"); - if (mEmulator == null) return true; + + // Do not return for KEYCODE_BACK and send it to the client since user may be trying + // to exit the activity. + if (mEmulator == null && keyCode != KeyEvent.KEYCODE_BACK) return true; if (mClient.onKeyUp(keyCode, event)) { invalidate();