OSDN Git Service

Faster plugin updating from UI control
authorJason Monk <jmonk@google.com>
Wed, 26 Oct 2016 19:05:42 +0000 (15:05 -0400)
committerJason Monk <jmonk@google.com>
Fri, 28 Oct 2016 14:13:56 +0000 (10:13 -0400)
Send a broadcast back and forth to speed up the rate at which plugins
are enabled or disabled.

Also update make files to handle exclude tests better.

Test: Manual
Change-Id: Ic8f45c663c3a5e5fd4b3e9e2f79480e155845c14

packages/SystemUI/Android.mk
packages/SystemUI/plugin/Android.mk
packages/SystemUI/plugin/src/com/android/systemui/plugins/PluginInstanceManager.java
packages/SystemUI/plugin/src/com/android/systemui/plugins/PluginManager.java
packages/SystemUI/src/com/android/systemui/tuner/PluginFragment.java
packages/SystemUI/tests/Android.mk

index ffddf02..d1e1060 100644 (file)
@@ -54,6 +54,4 @@ include frameworks/base/packages/SettingsLib/common.mk
 
 include $(BUILD_PACKAGE)
 
-ifeq ($(EXCLUDE_SYSTEMUI_TESTS),)
-    include $(call all-makefiles-under,$(LOCAL_PATH))
-endif
+include $(call all-makefiles-under,$(LOCAL_PATH))
index 86527db..5e6dcc0 100644 (file)
@@ -27,3 +27,7 @@ LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
 LOCAL_JAR_EXCLUDE_FILES := none
 
 include $(BUILD_STATIC_JAVA_LIBRARY)
+
+ifeq ($(EXCLUDE_SYSTEMUI_TESTS),)
+    include $(call all-makefiles-under,$(LOCAL_PATH))
+endif
index 75a5434..ca18f31 100644 (file)
@@ -131,6 +131,10 @@ public class PluginInstanceManager<T extends Plugin> {
                 new ComponentName(info.mPackage, info.mClass),
                 PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                 PackageManager.DONT_KILL_APP);
+        final String pkg = info.mPackage;
+        final Intent intent = new Intent(PluginManager.PLUGIN_CHANGED,
+                pkg != null ? Uri.fromParts("package", pkg, null) : null);
+        mContext.sendBroadcast(intent);
     }
 
     private class MainHandler extends Handler {
index 686b4d4..5ec94b6 100644 (file)
@@ -36,6 +36,8 @@ import java.util.Map;
  */
 public class PluginManager extends BroadcastReceiver {
 
+    public static final String PLUGIN_CHANGED = "com.android.systemui.action.PLUGIN_CHANGED";
+
     private static PluginManager sInstance;
 
     private final HandlerThread mBackgroundThread;
@@ -105,6 +107,7 @@ public class PluginManager extends BroadcastReceiver {
         IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);
         filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
         filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
+        filter.addAction(PLUGIN_CHANGED);
         filter.addDataScheme("package");
         mContext.registerReceiver(this, filter);
         filter = new IntentFilter(Intent.ACTION_USER_UNLOCKED);
index 132a6dd..f6b8891 100644 (file)
 
 package com.android.systemui.tuner;
 
+import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
+import android.content.IntentFilter;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
+import android.net.Uri;
 import android.os.Bundle;
 import android.support.v14.preference.PreferenceFragment;
 import android.support.v14.preference.SwitchPreference;
@@ -27,6 +30,7 @@ import android.support.v7.preference.PreferenceScreen;
 import android.support.v7.preference.PreferenceViewHolder;
 import android.view.View;
 
+import com.android.systemui.plugins.PluginManager;
 import com.android.systemui.plugins.PluginPrefs;
 import com.android.systemui.R;
 
@@ -41,7 +45,30 @@ public class PluginFragment extends PreferenceFragment {
     private PluginPrefs mPluginPrefs;
 
     @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);
+        filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
+        filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
+        filter.addAction(PluginManager.PLUGIN_CHANGED);
+        filter.addDataScheme("package");
+        getContext().registerReceiver(mReceiver, filter);
+        filter = new IntentFilter(Intent.ACTION_USER_UNLOCKED);
+        getContext().registerReceiver(mReceiver, filter);
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        getContext().unregisterReceiver(mReceiver);
+    }
+
+    @Override
     public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
+        loadPrefs();
+    }
+
+    private void loadPrefs() {
         PreferenceScreen screen = getPreferenceManager().createPreferenceScreen(getContext());
         screen.setOrderingAsAdded(false);
         Context prefContext = getPreferenceManager().getContext();
@@ -64,6 +91,13 @@ public class PluginFragment extends PreferenceFragment {
         setPreferenceScreen(screen);
     }
 
+    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            loadPrefs();
+        }
+    };
+
     private static class PluginPreference extends SwitchPreference {
         private final ComponentName mComponent;
         private final boolean mHasSettings;
@@ -82,10 +116,17 @@ public class PluginFragment extends PreferenceFragment {
 
         @Override
         protected boolean persistBoolean(boolean value) {
-            getContext().getPackageManager().setComponentEnabledSetting(mComponent,
-                    value ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
-                            : PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
+            PackageManager pm = getContext().getPackageManager();
+            final int desiredState = value ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
+                    : PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
+            if (pm.getComponentEnabledSetting(mComponent) == desiredState) return true;
+            pm.setComponentEnabledSetting(mComponent,
+                    desiredState,
                     PackageManager.DONT_KILL_APP);
+            final String pkg = mComponent.getPackageName();
+            final Intent intent = new Intent(PluginManager.PLUGIN_CHANGED,
+                    pkg != null ? Uri.fromParts("package", pkg, null) : null);
+            getContext().sendBroadcast(intent);
             return true;
         }
 
index 6038171..ecf174f 100644 (file)
@@ -87,7 +87,9 @@ LOCAL_JACK_COVERAGE_EXCLUDE_FILTER := com.android.systemui.tests.*,$(jacoco_excl
 
 include frameworks/base/packages/SettingsLib/common.mk
 
-include $(BUILD_PACKAGE)
+ifeq ($(EXCLUDE_SYSTEMUI_TESTS),)
+    include $(BUILD_PACKAGE)
+endif
 
 # Reset variables
 local_java_files :=