From 3f15af6a7cc3eb5db52e88831e7fd51203fe1145 Mon Sep 17 00:00:00 2001 From: Akash Yadav Date: Wed, 20 Dec 2023 22:24:41 +0530 Subject: [PATCH] fix(logsender): run LogSenderService in foreground to avoid being killed by system (#1385) --- logsender/build.gradle.kts | 4 + logsender/src/main/AndroidManifest.xml | 1 + .../logsender/LogSenderService.java | 116 +++++++++++++++++- .../logsender/utils/LogSenderInstaller.java | 9 +- .../androidide/logsender/utils/Logger.java | 2 +- .../main/res/drawable/ic_androidide_log.xml | 26 ++++ logsender/src/main/res/values/strings.xml | 1 + 7 files changed, 155 insertions(+), 4 deletions(-) create mode 100644 logsender/src/main/res/drawable/ic_androidide_log.xml diff --git a/logsender/build.gradle.kts b/logsender/build.gradle.kts index f0e82d1b5..6a278a57d 100644 --- a/logsender/build.gradle.kts +++ b/logsender/build.gradle.kts @@ -27,6 +27,10 @@ android { defaultConfig { minSdk = 16 + + vectorDrawables { + useSupportLibrary = true + } } compileOptions { diff --git a/logsender/src/main/AndroidManifest.xml b/logsender/src/main/AndroidManifest.xml index 9b62c8398..bf856f024 100644 --- a/logsender/src/main/AndroidManifest.xml +++ b/logsender/src/main/AndroidManifest.xml @@ -23,6 +23,7 @@ + = VERSION_CODES.O) { + builder.setChannelId(NOTIFICATION_CHANNEL_ID); + } + + if (VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN_MR1) { + builder.setShowWhen(false); + } + + builder.setSmallIcon(R.drawable.ic_androidide_log); + + if (VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP) { + builder.setColor(0xFF607D8B); + } + + builder.setOngoing(true); + + // Set Exit button action + Intent exitIntent = new Intent(this, LogSenderService.class).setAction(ACTION_STOP_SERVICE); + builder.addAction(android.R.drawable.ic_delete, + res.getString(R.string.notification_action_exit), + PendingIntent.getService(this, 0, exitIntent, PendingIntent.FLAG_IMMUTABLE)); + + return builder.build(); + } } diff --git a/logsender/src/main/java/com/itsaky/androidide/logsender/utils/LogSenderInstaller.java b/logsender/src/main/java/com/itsaky/androidide/logsender/utils/LogSenderInstaller.java index 4d2f1a8c2..79520d26b 100644 --- a/logsender/src/main/java/com/itsaky/androidide/logsender/utils/LogSenderInstaller.java +++ b/logsender/src/main/java/com/itsaky/androidide/logsender/utils/LogSenderInstaller.java @@ -26,6 +26,7 @@ import android.content.ContentValues; import android.content.Intent; import android.database.Cursor; import android.net.Uri; +import android.os.Build; import android.os.Build.VERSION; import android.os.Build.VERSION_CODES; import com.itsaky.androidide.logsender.LogSender; @@ -54,7 +55,13 @@ public class LogSenderInstaller extends ContentProvider { try { final Intent intent = new Intent(application, LogSenderService.class); - application.startService(intent); + intent.setAction(LogSenderService.ACTION_START_SERVICE); + + if (VERSION.SDK_INT >= VERSION_CODES.O) { + application.startForegroundService(intent); + } else { + application.startService(intent); + } } catch (Exception e) { // starting a background service is not allowed on Android 12+ diff --git a/logsender/src/main/java/com/itsaky/androidide/logsender/utils/Logger.java b/logsender/src/main/java/com/itsaky/androidide/logsender/utils/Logger.java index 5984fc30e..2c911f5a5 100644 --- a/logsender/src/main/java/com/itsaky/androidide/logsender/utils/Logger.java +++ b/logsender/src/main/java/com/itsaky/androidide/logsender/utils/Logger.java @@ -25,7 +25,7 @@ import com.itsaky.androidide.utils.ILogger; * @author Akash Yadav */ public class Logger { - private static final ILogger LOG = ILogger.newInstance("LogSender"); + public static final ILogger LOG = ILogger.newInstance("LogSender"); public static void error(Object... messages) { LOG.error(messages); diff --git a/logsender/src/main/res/drawable/ic_androidide_log.xml b/logsender/src/main/res/drawable/ic_androidide_log.xml new file mode 100644 index 000000000..9e1877ad0 --- /dev/null +++ b/logsender/src/main/res/drawable/ic_androidide_log.xml @@ -0,0 +1,26 @@ + + + + + diff --git a/logsender/src/main/res/values/strings.xml b/logsender/src/main/res/values/strings.xml index b3d56aad6..7c5c4a505 100644 --- a/logsender/src/main/res/values/strings.xml +++ b/logsender/src/main/res/values/strings.xml @@ -17,4 +17,5 @@ Failed to bind to AndroidIDE + Exit \ No newline at end of file