diff options
| author | 2019-06-04 12:36:12 +0000 | |
|---|---|---|
| committer | 2019-06-04 12:36:12 +0000 | |
| commit | b730e365969587f8abc9ce0641d4484d8f3f4ff1 (patch) | |
| tree | b0a6098ca24d3a1db142a042526554754aca418d | |
| parent | 8b865cd7d984335150f2a3c45f522312221f319a (diff) | |
| parent | 66109771d34abdc8298e8b1153a95cf3c5621d84 (diff) | |
Merge "Fix loading classloader for plugins whitelisted by component name" into qt-dev
| -rw-r--r-- | packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginManagerImpl.java | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginManagerImpl.java b/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginManagerImpl.java index 7139708b65b9..53403aa4dbf1 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginManagerImpl.java +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginManagerImpl.java @@ -215,7 +215,7 @@ public class PluginManagerImpl extends BroadcastReceiver implements PluginManage Uri uri = intent.getData(); ComponentName component = ComponentName.unflattenFromString( uri.toString().substring(10)); - if (mWhitelistedPlugins.contains(component.getPackageName())) { + if (isPluginWhitelisted(component)) { // Don't disable whitelisted plugins as they are a part of the OS. return; } @@ -288,7 +288,7 @@ public class PluginManagerImpl extends BroadcastReceiver implements PluginManage /** Returns class loader specific for the given plugin. */ public ClassLoader getClassLoader(ApplicationInfo appInfo) { - if (!isDebuggable && !mWhitelistedPlugins.contains(appInfo.packageName)) { + if (!isDebuggable && !isPluginPackageWhitelisted(appInfo.packageName)) { Log.w(TAG, "Cannot get class loader for non-whitelisted plugin. Src:" + appInfo.sourceDir + ", pkg: " + appInfo.packageName); return null; @@ -352,6 +352,34 @@ public class PluginManagerImpl extends BroadcastReceiver implements PluginManage } } + private boolean isPluginPackageWhitelisted(String packageName) { + for (String componentNameOrPackage : mWhitelistedPlugins) { + ComponentName componentName = ComponentName.unflattenFromString(componentNameOrPackage); + if (componentName != null) { + if (componentName.getPackageName().equals(packageName)) { + return true; + } + } else if (componentNameOrPackage.equals(packageName)) { + return true; + } + } + return false; + } + + private boolean isPluginWhitelisted(ComponentName pluginName) { + for (String componentNameOrPackage : mWhitelistedPlugins) { + ComponentName componentName = ComponentName.unflattenFromString(componentNameOrPackage); + if (componentName != null) { + if (componentName.equals(pluginName)) { + return true; + } + } else if (componentNameOrPackage.equals(pluginName.getPackageName())) { + return true; + } + } + return false; + } + // This allows plugins to include any libraries or copied code they want by only including // classes from the plugin library. private static class ClassLoaderFilter extends ClassLoader { |