From fe41cd486fcd45555996a0f834a63583a0e698fd Mon Sep 17 00:00:00 2001 From: Leonid Plyushch Date: Mon, 11 Feb 2019 20:10:33 +0200 Subject: [PATCH] sessions: failsafe session is now accessible via separate launcher icon Also enables session autoclosing so no more "annoying" messages about "process completed - press enter". There autoclosing will be performed on exit codes '0' and '130'. On Android TV devices old behaviour will be used - auto close enabled for all sessions when amount of running sessions >1. --- app/src/main/AndroidManifest.xml | 11 ++++++++ .../java/com/termux/app/TermuxActivity.java | 25 +++++++++++++++---- .../termux/app/TermuxFailsafeActivity.java | 19 ++++++++++++++ app/src/main/res/values/strings.xml | 1 + 4 files changed, 51 insertions(+), 5 deletions(-) create mode 100644 app/src/main/java/com/termux/app/TermuxFailsafeActivity.java diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 8fbf334b..b66995cb 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -37,14 +37,25 @@ + + + + + + + + + 1) { - removeFinishedSession(finishedSession); + if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_LEANBACK)) { + // On Android TV devices we need to use older behaviour because we may + // not be able to have multiple launcher icons. + if (mTermService.getSessions().size() > 1) { + removeFinishedSession(finishedSession); + } + } else { + // Once we have a separate launcher icon for the failsafe session, it + // should be safe to auto-close session on exit code '0' or '130'. + if (finishedSession.getExitStatus() == 0 || finishedSession.getExitStatus() == 130) { + removeFinishedSession(finishedSession); + } } mListViewAdapter.notifyDataSetChanged(); @@ -465,8 +475,13 @@ public final class TermuxActivity extends Activity implements ServiceConnection TermuxInstaller.setupIfNeeded(TermuxActivity.this, () -> { if (mTermService == null) return; // Activity might have been destroyed. try { + Bundle bundle = getIntent().getExtras(); + boolean launchFailsafe = false; + if (bundle != null) { + launchFailsafe = bundle.getBoolean(TermuxFailsafeActivity.TERMUX_FAILSAFE_SESSION_ACTION, false); + } clearTemporaryDirectory(); - addNewSession(false, null); + addNewSession(launchFailsafe, null); } catch (WindowManager.BadTokenException e) { // Activity finished - ignore. } diff --git a/app/src/main/java/com/termux/app/TermuxFailsafeActivity.java b/app/src/main/java/com/termux/app/TermuxFailsafeActivity.java new file mode 100644 index 00000000..7d588388 --- /dev/null +++ b/app/src/main/java/com/termux/app/TermuxFailsafeActivity.java @@ -0,0 +1,19 @@ +package com.termux.app; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; + +public final class TermuxFailsafeActivity extends Activity { + + public static final String TERMUX_FAILSAFE_SESSION_ACTION = "com.termux.app.failsafe_session"; + + @Override + public void onCreate(Bundle bundle) { + super.onCreate(bundle); + Intent intent = new Intent(TermuxFailsafeActivity.this, TermuxActivity.class); + intent.putExtra(TERMUX_FAILSAFE_SESSION_ACTION, true); + startActivity(intent); + finish(); + } +} diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1e634468..938f3d9d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -2,6 +2,7 @@ Termux Termux user + Termux (failsafe) New session Failsafe Keyboard