From 33b5bb3d66cbc9c761e119ed6c6833fe32d18bde Mon Sep 17 00:00:00 2001 From: Hawkwood Glazier Date: Thu, 27 Apr 2023 22:32:28 +0000 Subject: [PATCH] Support additional dynamically linked library in plugins Bug: 279941949 Test: atest LauncherIronwoodIntegrationTests:android.platform.test.scenario.launcher.integration_tests.HomescreenCustomizationTests#testChangeDynamicColor Change-Id: If677095288936f682350fb47ea19ea48fba5218f --- .../systemui/shared/plugins/PluginInstance.java | 2 +- .../systemui/shared/plugins/PluginManagerImpl.java | 14 +++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginInstance.java b/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginInstance.java index 016d573930e8c..4a665621b3fe7 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginInstance.java +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginInstance.java @@ -230,7 +230,7 @@ public class PluginInstance implements PluginLifecycleManager private ClassLoader getParentClassLoader(ClassLoader baseClassLoader) { return new PluginManagerImpl.ClassLoaderFilter( - baseClassLoader, "com.android.systemui.plugin"); + baseClassLoader, "com.android.systemui.log", "com.android.systemui.plugin"); } /** Returns class loader specific for the given plugin. */ 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 2f9f5b2ac9388..1e668b84cdc69 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 @@ -248,19 +248,23 @@ public class PluginManagerImpl extends BroadcastReceiver implements PluginManage // This allows plugins to include any libraries or copied code they want by only including // classes from the plugin library. static class ClassLoaderFilter extends ClassLoader { - private final String mPackage; + private final String[] mPackages; private final ClassLoader mBase; - public ClassLoaderFilter(ClassLoader base, String pkg) { + ClassLoaderFilter(ClassLoader base, String... pkgs) { super(ClassLoader.getSystemClassLoader()); mBase = base; - mPackage = pkg; + mPackages = pkgs; } @Override protected Class loadClass(String name, boolean resolve) throws ClassNotFoundException { - if (!name.startsWith(mPackage)) super.loadClass(name, resolve); - return mBase.loadClass(name); + for (String pkg : mPackages) { + if (name.startsWith(pkg)) { + return mBase.loadClass(name); + } + } + return super.loadClass(name, resolve); } }