Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0a61c39f authored by Hawkwood Glazier's avatar Hawkwood Glazier Committed by Automerger Merge Worker
Browse files

Merge "Support additional dynamically linked library in plugins" into udc-dev am: 2aa4ac32

parents c595536a 2aa4ac32
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -230,7 +230,7 @@ public class PluginInstance<T extends Plugin> implements PluginLifecycleManager


        private ClassLoader getParentClassLoader(ClassLoader baseClassLoader) {
        private ClassLoader getParentClassLoader(ClassLoader baseClassLoader) {
            return new PluginManagerImpl.ClassLoaderFilter(
            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. */
        /** Returns class loader specific for the given plugin. */
+9 −5
Original line number Original line Diff line number Diff line
@@ -248,21 +248,25 @@ public class PluginManagerImpl extends BroadcastReceiver implements PluginManage
    // This allows plugins to include any libraries or copied code they want by only including
    // This allows plugins to include any libraries or copied code they want by only including
    // classes from the plugin library.
    // classes from the plugin library.
    static class ClassLoaderFilter extends ClassLoader {
    static class ClassLoaderFilter extends ClassLoader {
        private final String mPackage;
        private final String[] mPackages;
        private final ClassLoader mBase;
        private final ClassLoader mBase;


        public ClassLoaderFilter(ClassLoader base, String pkg) {
        ClassLoaderFilter(ClassLoader base, String... pkgs) {
            super(ClassLoader.getSystemClassLoader());
            super(ClassLoader.getSystemClassLoader());
            mBase = base;
            mBase = base;
            mPackage = pkg;
            mPackages = pkgs;
        }
        }


        @Override
        @Override
        protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
        protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
            if (!name.startsWith(mPackage)) super.loadClass(name, resolve);
            for (String pkg : mPackages) {
                if (name.startsWith(pkg)) {
                    return mBase.loadClass(name);
                    return mBase.loadClass(name);
                }
                }
            }
            }
            return super.loadClass(name, resolve);
        }
    }


    private class PluginExceptionHandler implements UncaughtExceptionHandler {
    private class PluginExceptionHandler implements UncaughtExceptionHandler {