ActiveEdge: Use SmartPackageMonitor to clear out stale intent actions

Change-Id: Id88b79d82a8ebc0cdf3ca0090dd0ff7994f43902
diff --git a/src/com/android/systemui/elmyra/ElmyraService.java b/src/com/android/systemui/elmyra/ElmyraService.java
index 1fb06be..5d9f6e1 100644
--- a/src/com/android/systemui/elmyra/ElmyraService.java
+++ b/src/com/android/systemui/elmyra/ElmyraService.java
@@ -2,10 +2,21 @@
 
 import android.content.Context;
 import android.metrics.LogMaker;
+import android.os.Handler;
 import android.os.PowerManager;
+import android.os.Process;
 import android.os.PowerManager.WakeLock;
+import android.provider.Settings;
+import android.text.TextUtils;
 import android.os.SystemClock;
+import android.os.UserHandle;
+
 import com.android.internal.logging.MetricsLogger;
+import com.android.internal.utils.ActionHandler;
+import com.android.internal.utils.ActionUtils;
+import com.android.internal.utils.SmartPackageMonitor;
+import com.android.internal.utils.Config.ActionConfig;
+import com.android.internal.utils.SmartPackageMonitor.PackageState;
 import com.google.android.systemui.elmyra.actions.Action;
 import com.google.android.systemui.elmyra.actions.Action.Listener;
 import com.google.android.systemui.elmyra.feedback.FeedbackEffect;
@@ -33,6 +44,61 @@
     private final MetricsLogger mLogger;
     private final PowerManager mPowerManager;
     private final WakeLock mWakeLock;
+    private final SmartPackageMonitor mPackageMonitor = new SmartPackageMonitor();
+
+    private SmartPackageMonitor.PackageChangedListener mPackageListener = new SmartPackageMonitor.PackageChangedListener() {
+        @Override
+        public void onPackageChanged(String pkg, PackageState state) {
+            if (state == PackageState.PACKAGE_REMOVED
+                    || state == PackageState.PACKAGE_CHANGED) {
+                final Context ctx = mContext;
+                final Thread thread = new Thread(new Runnable() {
+                    @Override
+                    public void run() {
+                String shortConfig = Settings.Secure.getStringForUser(ctx.getContentResolver(),
+                        Settings.Secure.SQUEEZE_SELECTION_SMART_ACTIONS, UserHandle.USER_CURRENT);
+                String shortAction = ActionConfig.getActionFromDelimitedString(ctx, shortConfig,
+                        ActionHandler.SYSTEMUI_TASK_NO_ACTION);
+                String longConfig = Settings.Secure.getStringForUser(ctx.getContentResolver(),
+                        Settings.Secure.LONG_SQUEEZE_SELECTION_SMART_ACTIONS, UserHandle.USER_CURRENT);
+                String longAction = ActionConfig.getActionFromDelimitedString(ctx, longConfig,
+                        ActionHandler.SYSTEMUI_TASK_NO_ACTION);
+                if (!shortAction.startsWith(ActionHandler.SYSTEM_PREFIX)) {
+                    if (intentActionNeedsClearing(ctx, shortAction)) {
+                        ActionConfig shortActionConfig = new ActionConfig(ctx,
+                                ActionHandler.SYSTEMUI_TASK_NO_ACTION);
+                        Settings.Secure.putStringForUser(ctx.getContentResolver(),
+                                Settings.Secure.SQUEEZE_SELECTION_SMART_ACTIONS,
+                                shortActionConfig.toDelimitedString(), UserHandle.USER_CURRENT);
+                    }
+                }
+                if (!longAction.startsWith(ActionHandler.SYSTEM_PREFIX)) {
+                    if (intentActionNeedsClearing(ctx, longAction)) {
+                        ActionConfig longActionConfig = new ActionConfig(ctx,
+                                ActionHandler.SYSTEMUI_TASK_NO_ACTION);
+                        Settings.Secure.putStringForUser(ctx.getContentResolver(),
+                                Settings.Secure.LONG_SQUEEZE_SELECTION_SMART_ACTIONS,
+                                longActionConfig.toDelimitedString(), UserHandle.USER_CURRENT);
+                    }
+                }
+                    }
+                });
+                thread.setPriority(Process.THREAD_PRIORITY_BACKGROUND);
+                thread.start();
+            }
+        }
+    };
+
+    private static boolean intentActionNeedsClearing(Context ctx, String action) {
+        if (action.startsWith(ActionHandler.SYSTEM_PREFIX)) {
+            return false;
+        }
+        String resolvedName = ActionUtils.getFriendlyNameForUri(ctx, action);
+        if (resolvedName == null || TextUtils.equals(resolvedName, action)) {
+            return true;
+        }
+        return false;
+    }
 
     /* renamed from: com.google.android.systemui.elmyra.ElmyraService$1 */
     class C15821 implements Listener {
@@ -116,6 +182,8 @@
             mGestureSensor.setGestureListener(mGestureListener);
         }
         updateSensorListener();
+        mPackageMonitor.register(mContext, new Handler());
+        mPackageMonitor.addListener(mPackageListener);
     }
 
     private Gate getBlockingGate() {