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.
This commit is contained in:
parent
845246093f
commit
2823eae0b7
3 changed files with 66 additions and 19 deletions
|
|
@ -234,6 +234,8 @@ public final class EmacsService extends Service
|
||||||
final double scaledDensity;
|
final double scaledDensity;
|
||||||
double tempScaledDensity;
|
double tempScaledDensity;
|
||||||
|
|
||||||
|
super.onCreate ();
|
||||||
|
|
||||||
SERVICE = this;
|
SERVICE = this;
|
||||||
handler = new Handler (Looper.getMainLooper ());
|
handler = new Handler (Looper.getMainLooper ());
|
||||||
manager = getAssets ();
|
manager = getAssets ();
|
||||||
|
|
@ -247,9 +249,9 @@ public final class EmacsService extends Service
|
||||||
resolver = getContentResolver ();
|
resolver = getContentResolver ();
|
||||||
mainThread = Thread.currentThread ();
|
mainThread = Thread.currentThread ();
|
||||||
|
|
||||||
/* If the density used to compute the text size is lesser than
|
/* If the density used to compute the text size is smaller than 160,
|
||||||
160, there's likely a bug with display density computation.
|
there's likely a bug with display density computation. Reset it
|
||||||
Reset it to 160 in that case.
|
to 160 in that case.
|
||||||
|
|
||||||
Note that Android uses 160 ``dpi'' as the density where 1 point
|
Note that Android uses 160 ``dpi'' as the density where 1 point
|
||||||
corresponds to 1 pixel, not 72 or 96 as used elsewhere. This
|
corresponds to 1 pixel, not 72 or 96 as used elsewhere. This
|
||||||
|
|
@ -262,6 +264,10 @@ public final class EmacsService extends Service
|
||||||
the nested function below. */
|
the nested function below. */
|
||||||
scaledDensity = tempScaledDensity;
|
scaledDensity = tempScaledDensity;
|
||||||
|
|
||||||
|
/* Remove all tasks from previous Emacs sessions but the task
|
||||||
|
created by the system at startup. */
|
||||||
|
EmacsWindowManager.MANAGER.removeOldTasks (this);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
/* Configure Emacs with the asset manager and other necessary
|
/* Configure Emacs with the asset manager and other necessary
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@ import android.app.ActivityManager.RecentTaskInfo;
|
||||||
import android.app.ActivityManager;
|
import android.app.ActivityManager;
|
||||||
import android.app.ActivityOptions;
|
import android.app.ActivityOptions;
|
||||||
|
|
||||||
|
import android.content.ComponentName;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
|
||||||
|
|
@ -385,4 +386,44 @@ public final class EmacsWindowManager
|
||||||
window.onActivityDetached ();
|
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 ();
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -20,22 +20,22 @@
|
||||||
# The effect of the following lines is to inhibit the removal of variable or
|
# The effect of the following lines is to inhibit the removal of variable or
|
||||||
# method symbol names from symbols referenced from C.
|
# method symbol names from symbols referenced from C.
|
||||||
|
|
||||||
-keep,allowoptimization class org.gnu.emacs.EmacsClipboard { <methods>; }
|
-keep,allowoptimization class org.gnu.emacs.EmacsClipboard { public <methods>; }
|
||||||
-keep,allowoptimization class org.gnu.emacs.EmacsContextMenu { <methods>; }
|
-keep,allowoptimization class org.gnu.emacs.EmacsContextMenu { public <methods>; }
|
||||||
-keep,allowoptimization class org.gnu.emacs.EmacsCursor { <methods>; }
|
-keep,allowoptimization class org.gnu.emacs.EmacsCursor { public <methods>; }
|
||||||
-keep,allowoptimization class org.gnu.emacs.EmacsDesktopNotification { <methods>; }
|
-keep,allowoptimization class org.gnu.emacs.EmacsDesktopNotification { public <methods>; }
|
||||||
-keep,allowoptimization class org.gnu.emacs.EmacsDialog { <methods>; }
|
-keep,allowoptimization class org.gnu.emacs.EmacsDialog { public <methods>; }
|
||||||
-keep,allowoptimization class org.gnu.emacs.EmacsDirectoryEntry { <fields>; }
|
-keep,allowoptimization class org.gnu.emacs.EmacsDirectoryEntry { public <fields>; }
|
||||||
-keep,allowoptimization class org.gnu.emacs.EmacsFontDriver { <methods>; }
|
-keep,allowoptimization class org.gnu.emacs.EmacsFontDriver { public <methods>; }
|
||||||
-keep,allowoptimization class org.gnu.emacs.EmacsFontDriver$* { <fields>; }
|
-keep,allowoptimization class org.gnu.emacs.EmacsFontDriver$* { public <fields>; }
|
||||||
-keep,allowoptimization class org.gnu.emacs.EmacsGC { <methods>; <fields>; }
|
-keep,allowoptimization class org.gnu.emacs.EmacsGC { public <methods>; public <fields>; }
|
||||||
-keep,allowoptimization class org.gnu.emacs.EmacsHandleObject { <methods>; }
|
-keep,allowoptimization class org.gnu.emacs.EmacsHandleObject { public <methods>; }
|
||||||
-keep,allowoptimization class org.gnu.emacs.EmacsPixmap { <methods>; }
|
-keep,allowoptimization class org.gnu.emacs.EmacsPixmap { public <methods>; }
|
||||||
-keep,allowoptimization class org.gnu.emacs.EmacsService { <methods>; }
|
-keep,allowoptimization class org.gnu.emacs.EmacsService { public <methods>; }
|
||||||
-keep,allowoptimization class org.gnu.emacs.EmacsWindow { <methods>; }
|
-keep,allowoptimization class org.gnu.emacs.EmacsWindow { public <methods>; }
|
||||||
-keep,allowoptimization class org.gnu.emacs.EmacsNative { <methods>; }
|
-keep,allowoptimization class org.gnu.emacs.EmacsNative { public <methods>; }
|
||||||
-keep,allowoptimization class org.gnu.emacs.EmacsNoninteractive { <methods>; }
|
-keep,allowoptimization class org.gnu.emacs.EmacsNoninteractive { public <methods>; }
|
||||||
-keep,allowoptimization interface org.gnu.emacs.EmacsDrawable { <methods>; }
|
-keep,allowoptimization interface org.gnu.emacs.EmacsDrawable { public <methods>; }
|
||||||
|
|
||||||
# And these lines inhibit the deletion of symbols that are referenced by
|
# And these lines inhibit the deletion of symbols that are referenced by
|
||||||
# the operating system while enabling the compiler to minify or delete
|
# the operating system while enabling the compiler to minify or delete
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue