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