summaryrefslogtreecommitdiff
path: root/java/org/gnu/emacs/EmacsWindowManager.java
diff options
context:
space:
mode:
authorPo Lu <luangruo@yahoo.com>2024-04-14 10:36:50 +0800
committerPo Lu <luangruo@yahoo.com>2024-04-14 10:36:50 +0800
commit2823eae0b7cb3bd3f2472fde9e13016a8d406a9a (patch)
tree5dfc53e8389ee6cbb8ac96e0a4259d8af5e9ed33 /java/org/gnu/emacs/EmacsWindowManager.java
parent845246093f8ae88db1061a9beaff04184685f8f4 (diff)
Remove leftover tasks from previous Emacs sessions on startup
* java/org/gnu/emacs/EmacsService.java (onCreate): Call removeOldTasks. * java/org/gnu/emacs/EmacsWindowManager.java (removeOldTasks): New function. * java/proguard.conf: Optimize optimizer configuration.
Diffstat (limited to 'java/org/gnu/emacs/EmacsWindowManager.java')
-rw-r--r--java/org/gnu/emacs/EmacsWindowManager.java41
1 files changed, 41 insertions, 0 deletions
diff --git a/java/org/gnu/emacs/EmacsWindowManager.java b/java/org/gnu/emacs/EmacsWindowManager.java
index a193d49d0ec..49f0ebd5841 100644
--- a/java/org/gnu/emacs/EmacsWindowManager.java
+++ b/java/org/gnu/emacs/EmacsWindowManager.java
@@ -27,6 +27,7 @@ import android.app.ActivityManager.RecentTaskInfo;
import android.app.ActivityManager;
import android.app.ActivityOptions;
+import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -385,4 +386,44 @@ public final class EmacsWindowManager
window.onActivityDetached ();
}
}
+
+ /* Iterate over each of Emacs's tasks to delete such as belong to a
+ previous Emacs session, i.e., tasks created for a previous
+ session's non-initial frames. CONTEXT should be a context from
+ which to obtain a reference to the activity manager. */
+
+ public void
+ removeOldTasks (Context context)
+ {
+ List<AppTask> appTasks;
+ RecentTaskInfo info;
+ ComponentName name;
+ String target;
+ Object object;
+
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP)
+ return;
+
+ if (activityManager == null)
+ {
+ object = context.getSystemService (Context.ACTIVITY_SERVICE);
+ activityManager = (ActivityManager) object;
+ }
+
+ appTasks = activityManager.getAppTasks ();
+ target = ".EmacsMultitaskActivity";
+
+ for (AppTask task : appTasks)
+ {
+ info = task.getTaskInfo ();
+
+ /* Test whether info is a reference to
+ EmacsMultitaskActivity. */
+ if (info.baseIntent != null
+ && (name = info.baseIntent.getComponent ()) != null
+ && name.getShortClassName ().equals (target))
+ /* Delete the task. */
+ task.finishAndRemoveTask ();
+ }
+ }
};