summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
authorPo Lu <luangruo@yahoo.com>2024-03-25 15:42:23 +0800
committerPo Lu <luangruo@yahoo.com>2024-03-25 15:42:23 +0800
commitba96c4ec56a9978fce155c0af34a0412aee817b2 (patch)
treeb3371bd73fe7c423fd9e183ef885245e819dcd8e /java
parentc5de73a95a6ecefe46fe1ac07da8e83032be7f5b (diff)
downloademacs-ba96c4ec56a9978fce155c0af34a0412aee817b2.tar.gz
Port restart-emacs to Android 4.3 and earlier
* java/org/gnu/emacs/EmacsService.java (restartEmacs): Run Emacs from an alarm if required.
Diffstat (limited to 'java')
-rw-r--r--java/org/gnu/emacs/EmacsService.java24
1 files changed, 22 insertions, 2 deletions
diff --git a/java/org/gnu/emacs/EmacsService.java b/java/org/gnu/emacs/EmacsService.java
index 07bfb525be9..4e863c750d3 100644
--- a/java/org/gnu/emacs/EmacsService.java
+++ b/java/org/gnu/emacs/EmacsService.java
@@ -46,9 +46,11 @@ import android.view.KeyEvent;
import android.view.inputmethod.CursorAnchorInfo;
import android.view.inputmethod.ExtractedText;
+import android.app.AlarmManager;
import android.app.Notification;
-import android.app.NotificationManager;
import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
import android.app.Service;
import android.content.ClipboardManager;
@@ -724,11 +726,29 @@ public final class EmacsService extends Service
restartEmacs ()
{
Intent intent;
+ PendingIntent pending;
+ AlarmManager manager;
intent = new Intent (this, EmacsActivity.class);
intent.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_CLEAR_TASK);
- startActivity (intent);
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
+ startActivity (intent);
+ else
+ {
+ /* Experimentation has established that Android 4.3 and earlier
+ versions do not attempt to recreate a process when it crashes
+ immediately after requesting that an intent for itself be
+ started. Schedule an intent to start some time after Emacs
+ exits instead. */
+
+ pending = PendingIntent.getActivity (this, 0, intent, 0);
+ manager = (AlarmManager) getSystemService (Context.ALARM_SERVICE);
+ manager.set (AlarmManager.RTC, System.currentTimeMillis () + 100,
+ pending);
+ }
+
System.exit (0);
}