From 2823eae0b7cb3bd3f2472fde9e13016a8d406a9a Mon Sep 17 00:00:00 2001 From: Po Lu Date: Sun, 14 Apr 2024 10:36:50 +0800 Subject: 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. --- java/org/gnu/emacs/EmacsWindowManager.java | 41 ++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'java/org/gnu/emacs/EmacsWindowManager.java') 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 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 (); + } + } }; -- cgit v1.3