summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2019-06-04 12:36:12 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2019-06-04 12:36:12 +0000
commitb730e365969587f8abc9ce0641d4484d8f3f4ff1 (patch)
treeb0a6098ca24d3a1db142a042526554754aca418d
parent8b865cd7d984335150f2a3c45f522312221f319a (diff)
parent66109771d34abdc8298e8b1153a95cf3c5621d84 (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.java32
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 {