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