OSDN Git Service

Improve reliability of updating quick settings tiles
authorBraden Farmer <farmerbb@gmail.com>
Mon, 20 Apr 2020 17:33:16 +0000 (11:33 -0600)
committerBraden Farmer <farmerbb@gmail.com>
Mon, 20 Apr 2020 18:20:06 +0000 (12:20 -0600)
app/src/lib/java/com/farmerbb/taskbar/util/ShortcutUtils.java
app/src/main/java/com/farmerbb/taskbar/receiver/BootReceiver.java
app/src/nonlib/java/com/farmerbb/taskbar/activity/PersistentShortcutSelectAppActivity.java
app/src/nonlib/java/com/farmerbb/taskbar/service/FavoriteAppTileService.java
app/src/nonlib/java/com/farmerbb/taskbar/util/ShortcutUtils.java

index 0d4a0f6..8b0f5ae 100644 (file)
@@ -29,4 +29,6 @@ public class ShortcutUtils {
     public static Intent getStartStopIntent(Context context) {
         return null;
     }
+
+    public static void initFavoriteAppTiles(Context context) {}
 }
index c564660..87b0fc4 100644 (file)
@@ -22,6 +22,7 @@ import android.content.SharedPreferences;
 
 import com.farmerbb.taskbar.activity.DummyActivity;
 import com.farmerbb.taskbar.service.NotificationService;
+import com.farmerbb.taskbar.util.ShortcutUtils;
 import com.farmerbb.taskbar.util.U;
 
 public class BootReceiver extends BroadcastReceiver {
@@ -65,6 +66,8 @@ public class BootReceiver extends BroadcastReceiver {
                 editor.putBoolean("taskbar_active", U.isServiceRunning(context, NotificationService.class));
                 editor.apply();
             }
+
+            ShortcutUtils.initFavoriteAppTiles(context);
         }
     }
 }
index cb34177..9cfc87d 100644 (file)
@@ -15,7 +15,9 @@
 
 package com.farmerbb.taskbar.activity;
 
+import android.annotation.TargetApi;
 import android.app.AlertDialog;
+import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.content.SharedPreferences;
@@ -24,6 +26,7 @@ import android.content.pm.PackageManager;
 import android.graphics.drawable.Drawable;
 import android.os.Build;
 import android.os.Handler;
+import android.service.quicksettings.TileService;
 import android.view.View;
 import android.widget.CheckBox;
 import android.widget.ImageView;
@@ -33,7 +36,6 @@ import android.widget.Spinner;
 
 import com.farmerbb.taskbar.R;
 import com.farmerbb.taskbar.util.AppEntry;
-import com.farmerbb.taskbar.util.TaskbarIntent;
 import com.farmerbb.taskbar.util.U;
 
 public class PersistentShortcutSelectAppActivity extends AbstractSelectAppActivity {
@@ -168,6 +170,7 @@ public class PersistentShortcutSelectAppActivity extends AbstractSelectAppActivi
         } catch (PackageManager.NameNotFoundException e) { /* Gracefully fail */ }
     }
 
+    @TargetApi(Build.VERSION_CODES.N)
     private void createQuickSettingTileShortcut(String windowSize, int num) {
         String prefix = "qs_tile_" + num + "_";
 
@@ -183,6 +186,9 @@ public class PersistentShortcutSelectAppActivity extends AbstractSelectAppActivi
         editor.putBoolean(prefix + "added", true);
         editor.apply();
 
-        U.sendBroadcast(this, TaskbarIntent.ACTION_UPDATE_FAVORITE_APP_TILE);
+        try {
+            Class clazz = Class.forName("com.farmerbb.taskbar.service.FavoriteApp" + num);
+            TileService.requestListeningState(this, new ComponentName(this, clazz));
+        } catch (ClassNotFoundException e) { /* Gracefully fail */ }
     }
 }
\ No newline at end of file
index 46bbef7..c5cf915 100644 (file)
@@ -16,9 +16,7 @@
 package com.farmerbb.taskbar.service;
 
 import android.annotation.TargetApi;
-import android.content.BroadcastReceiver;
 import android.content.ComponentName;
-import android.content.Context;
 import android.content.Intent;
 import android.content.SharedPreferences;
 import android.content.pm.LauncherActivityInfo;
@@ -35,7 +33,6 @@ import com.farmerbb.taskbar.R;
 import com.farmerbb.taskbar.activity.PersistentShortcutLaunchActivity;
 import com.farmerbb.taskbar.activity.PersistentShortcutSelectAppActivity;
 import com.farmerbb.taskbar.util.IconCache;
-import com.farmerbb.taskbar.util.TaskbarIntent;
 import com.farmerbb.taskbar.util.U;
 
 @TargetApi(Build.VERSION_CODES.N)
@@ -45,25 +42,6 @@ public abstract class FavoriteAppTileService extends TileService {
 
     private String prefix = "qs_tile_" + tileNumber() + "_";
 
-    private BroadcastReceiver tileUpdateReceiver = new BroadcastReceiver() {
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            updateState();
-        }
-    };
-
-    @Override
-    public void onCreate() {
-        super.onCreate();
-        U.registerReceiver(this, tileUpdateReceiver, TaskbarIntent.ACTION_UPDATE_FAVORITE_APP_TILE);
-    }
-
-    @Override
-    public void onDestroy() {
-        U.unregisterReceiver(this, tileUpdateReceiver);
-        super.onDestroy();
-    }
-
     @Override
     public void onStartListening() {
         updateState();
index 50e5482..9895bc5 100644 (file)
 
 package com.farmerbb.taskbar.util;
 
+import android.annotation.TargetApi;
+import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
+import android.os.Build;
+import android.service.quicksettings.TileService;
 
 import com.farmerbb.taskbar.R;
 import com.farmerbb.taskbar.activity.ShortcutActivity;
 import com.farmerbb.taskbar.activity.StartTaskbarActivity;
+import com.farmerbb.taskbar.service.FavoriteApp1;
+import com.farmerbb.taskbar.service.FavoriteApp2;
+import com.farmerbb.taskbar.service.FavoriteApp3;
+import com.farmerbb.taskbar.service.FavoriteApp4;
+import com.farmerbb.taskbar.service.FavoriteApp5;
+import com.farmerbb.taskbar.service.QuickSettingsTileService;
 
 public class ShortcutUtils {
 
@@ -51,4 +61,20 @@ public class ShortcutUtils {
 
         return intent;
     }
+
+    public static void initFavoriteAppTiles(Context context) {
+        if(Build.VERSION.SDK_INT < Build.VERSION_CODES.N) return;
+
+        Class[] tiles = new Class[] {
+                FavoriteApp1.class,
+                FavoriteApp2.class,
+                FavoriteApp3.class,
+                FavoriteApp4.class,
+                FavoriteApp5.class
+        };
+
+        for(Class tile : tiles) {
+            TileService.requestListeningState(context, new ComponentName(context, tile));
+        }
+    }
 }