OSDN Git Service

Fix plugin reloading
authorJason Monk <jmonk@google.com>
Thu, 1 Jun 2017 19:20:33 +0000 (15:20 -0400)
committerJason Monk <jmonk@google.com>
Thu, 1 Jun 2017 19:21:18 +0000 (15:21 -0400)
Change-Id: I2209e98628b50416b910cda7ace10a06dbdceaa9
Test: manual
Fixes: 38424850

packages/SystemUI/src/com/android/systemui/plugins/PluginManagerImpl.java

index ec5f9e7..493d244 100644 (file)
@@ -30,13 +30,13 @@ import android.content.res.Resources;
 import android.net.Uri;
 import android.os.Build;
 import android.os.Handler;
-import android.os.HandlerThread;
 import android.os.Looper;
 import android.os.SystemProperties;
 import android.os.UserHandle;
 import android.text.TextUtils;
 import android.util.ArrayMap;
 import android.util.ArraySet;
+import android.widget.Toast;
 
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
@@ -166,7 +166,9 @@ public class PluginManagerImpl extends BroadcastReceiver implements PluginManage
         }
         if (!mPluginMap.containsKey(listener)) return;
         mPluginMap.remove(listener).destroy();
-        stopListening();
+        if (mPluginMap.size() == 0) {
+            stopListening();
+        }
     }
 
     private void startListening() {
@@ -237,7 +239,9 @@ public class PluginManagerImpl extends BroadcastReceiver implements PluginManage
                 mContext.getSystemService(NotificationManager.class).notifyAsUser(pkg,
                         SystemMessage.NOTE_PLUGIN, nb.build(), UserHandle.ALL);
             }
-            clearClassLoader(pkg);
+            if (clearClassLoader(pkg)) {
+                Toast.makeText(mContext, "Reloading " + pkg, Toast.LENGTH_LONG).show();
+            }
             if (!Intent.ACTION_PACKAGE_REMOVED.equals(intent.getAction())) {
                 for (PluginInstanceManager manager : mPluginMap.values()) {
                     manager.onPackageChange(pkg);
@@ -259,8 +263,8 @@ public class PluginManagerImpl extends BroadcastReceiver implements PluginManage
         return classLoader;
     }
 
-    private void clearClassLoader(String pkg) {
-        mClassLoaders.remove(pkg);
+    private boolean clearClassLoader(String pkg) {
+        return mClassLoaders.remove(pkg) != null;
     }
 
     ClassLoader getParentClassLoader() {