From c1fdb758ea9247e5d9410233585150bd0f34e941 Mon Sep 17 00:00:00 2001 From: Patrick Schneider Date: Sat, 1 Oct 2022 17:59:38 +0200 Subject: [PATCH] Adapted service GeneratorService to be a job. Since Android 8.0 background execution is limited, therefore Context.startService may throw an IllegalStateException if the service is not permitted to run as a background service. --- app/src/main/AndroidManifest.xml | 1 + .../controller/GeneratorService.java | 22 ++++++++++++------- .../controller/NewLevelManager.java | 3 ++- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 43a0057..6f5159f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -73,6 +73,7 @@ diff --git a/app/src/main/java/org/secuso/privacyfriendlysudoku/controller/GeneratorService.java b/app/src/main/java/org/secuso/privacyfriendlysudoku/controller/GeneratorService.java index 79435b1..303345f 100644 --- a/app/src/main/java/org/secuso/privacyfriendlysudoku/controller/GeneratorService.java +++ b/app/src/main/java/org/secuso/privacyfriendlysudoku/controller/GeneratorService.java @@ -18,8 +18,10 @@ import android.app.IntentService; import android.app.PendingIntent; +import android.content.Context; import android.content.Intent; import androidx.annotation.Nullable; +import androidx.core.app.JobIntentService; import androidx.core.app.NotificationCompat; import androidx.core.content.ContextCompat; import android.util.Log; @@ -49,7 +51,7 @@ * * @author Christopher Beckmann */ -public class GeneratorService extends IntentService { +public class GeneratorService extends JobIntentService { private static final String TAG = GeneratorService.class.getSimpleName(); public static final String ACTION_GENERATE = TAG + " ACTION_GENERATE"; @@ -64,11 +66,11 @@ public class GeneratorService extends IntentService { //private Handler mHandler = new Handler(); - public GeneratorService() { - super("Generator Service"); - } + //public GeneratorService() { + // super("Generator Service"); + //} - public GeneratorService(String name) { super(name); } + //public GeneratorService(String name) { super(name); } private void buildGenerationList() { @@ -120,12 +122,11 @@ private void generateLevels() { // if we start this service multiple times while we are already generating... // we ignore this call and just keep generating buildGenerationList(); - // generate from the list if(generationList.size() > 0) { // generate 1 level and wait for it to be done. - Pair dataPair = generationList.get(0); + Pair dataPair = generationList.remove(0); GameType type = dataPair.first; GameDifficulty diff = dataPair.second; @@ -275,8 +276,13 @@ private void showNotification(GameType gameType, GameDifficulty gameDifficulty) builder.setSmallIcon(R.drawable.splash_icon); startForeground(50, builder.build()); } + + static void enqueueWork(Context context, Intent intent) { + enqueueWork(context, GeneratorService.class, 1000, intent); + } + @Override - protected void onHandleIntent(@Nullable Intent intent) { + protected void onHandleWork(@Nullable Intent intent) { if (intent != null) { String action = intent.getAction(); diff --git a/app/src/main/java/org/secuso/privacyfriendlysudoku/controller/NewLevelManager.java b/app/src/main/java/org/secuso/privacyfriendlysudoku/controller/NewLevelManager.java index 6e9464d..32d23ac 100644 --- a/app/src/main/java/org/secuso/privacyfriendlysudoku/controller/NewLevelManager.java +++ b/app/src/main/java/org/secuso/privacyfriendlysudoku/controller/NewLevelManager.java @@ -217,7 +217,8 @@ public void checkAndRestock() { Intent i = new Intent(context, GeneratorService.class); i.setAction(GeneratorService.ACTION_GENERATE); //i.putExtra(ProtocolService.EXTRA_PROTOCOL, current.componentName().flattenToString()); - context.startService(i); + //context.startService(i); + GeneratorService.enqueueWork(context, i); //new AsyncGenerationTask().execute(); }