Support additional dynamically linked library in plugins
Bug: 279941949 Test: atest LauncherIronwoodIntegrationTests:android.platform.test.scenario.launcher.integration_tests.HomescreenCustomizationTests#testChangeDynamicColor Change-Id: If677095288936f682350fb47ea19ea48fba5218f
This commit is contained in:
@@ -230,7 +230,7 @@ public class PluginInstance<T extends Plugin> 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. */
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user