Loading packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginInitializer.java +7 −3 Original line number Original line Diff line number Diff line Loading @@ -14,7 +14,6 @@ package com.android.systemui.shared.plugins; package com.android.systemui.shared.plugins; import android.annotation.Nullable; import android.content.Context; import android.content.Context; import android.os.Looper; import android.os.Looper; Loading @@ -26,11 +25,16 @@ public interface PluginInitializer { Looper getBgLooper(); Looper getBgLooper(); /** /** * This Runnable is run on the bg looper during initialization of {@link PluginManagerImpl}. * Called from the bg looper during initialization of {@link PluginManagerImpl}. */ */ @Nullable Runnable getBgInitCallback(); void onPluginManagerInit(); String[] getWhitelistedPlugins(Context context); String[] getWhitelistedPlugins(Context context); PluginEnabler getPluginEnabler(Context context); PluginEnabler getPluginEnabler(Context context); /** * Called from {@link PluginManagerImpl#handleWtfs()}. */ void handleWtfs(); } } packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginManagerImpl.java +11 −17 Original line number Original line Diff line number Diff line Loading @@ -74,11 +74,11 @@ public class PluginManagerImpl extends BroadcastReceiver implements PluginManage private final boolean isDebuggable; private final boolean isDebuggable; private final PluginPrefs mPluginPrefs; private final PluginPrefs mPluginPrefs; private final PluginEnabler mPluginEnabler; private final PluginEnabler mPluginEnabler; private final PluginInitializer mPluginInitializer; private ClassLoaderFilter mParentClassLoader; private ClassLoaderFilter mParentClassLoader; private boolean mListening; private boolean mListening; private boolean mHasOneShot; private boolean mHasOneShot; private Looper mLooper; private Looper mLooper; private boolean mWtfsSet; public PluginManagerImpl(Context context, PluginInitializer initializer) { public PluginManagerImpl(Context context, PluginInitializer initializer) { this(context, new PluginInstanceManagerFactory(), Build.IS_DEBUGGABLE, this(context, new PluginInstanceManagerFactory(), Build.IS_DEBUGGABLE, Loading @@ -87,7 +87,7 @@ public class PluginManagerImpl extends BroadcastReceiver implements PluginManage @VisibleForTesting @VisibleForTesting PluginManagerImpl(Context context, PluginInstanceManagerFactory factory, boolean debuggable, PluginManagerImpl(Context context, PluginInstanceManagerFactory factory, boolean debuggable, UncaughtExceptionHandler defaultHandler, PluginInitializer initializer) { UncaughtExceptionHandler defaultHandler, final PluginInitializer initializer) { mContext = context; mContext = context; mFactory = factory; mFactory = factory; mLooper = initializer.getBgLooper(); mLooper = initializer.getBgLooper(); Loading @@ -95,15 +95,18 @@ public class PluginManagerImpl extends BroadcastReceiver implements PluginManage mWhitelistedPlugins.addAll(Arrays.asList(initializer.getWhitelistedPlugins(mContext))); mWhitelistedPlugins.addAll(Arrays.asList(initializer.getWhitelistedPlugins(mContext))); mPluginPrefs = new PluginPrefs(mContext); mPluginPrefs = new PluginPrefs(mContext); mPluginEnabler = initializer.getPluginEnabler(mContext); mPluginEnabler = initializer.getPluginEnabler(mContext); mPluginInitializer = initializer; PluginExceptionHandler uncaughtExceptionHandler = new PluginExceptionHandler( PluginExceptionHandler uncaughtExceptionHandler = new PluginExceptionHandler( defaultHandler); defaultHandler); Thread.setUncaughtExceptionPreHandler(uncaughtExceptionHandler); Thread.setUncaughtExceptionPreHandler(uncaughtExceptionHandler); Runnable bgRunnable = initializer.getBgInitCallback(); new Handler(mLooper).post(new Runnable() { if (bgRunnable != null) { @Override new Handler(mLooper).post(bgRunnable); public void run() { initializer.onPluginManagerInit(); } } }); } } public String[] getWhitelistedPlugins() { public String[] getWhitelistedPlugins() { Loading Loading @@ -299,16 +302,7 @@ public class PluginManagerImpl extends BroadcastReceiver implements PluginManage } } public void handleWtfs() { public void handleWtfs() { if (!mWtfsSet) { mPluginInitializer.handleWtfs(); mWtfsSet = true; Log.setWtfHandler(new Log.TerribleFailureHandler() { @Override public void onTerribleFailure(String tag, Log.TerribleFailure what, boolean system) { throw new CrashWhilePluginActiveException(what); } }); } } } public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { Loading Loading @@ -391,7 +385,7 @@ public class PluginManagerImpl extends BroadcastReceiver implements PluginManage } } } } private class CrashWhilePluginActiveException extends RuntimeException { public static class CrashWhilePluginActiveException extends RuntimeException { public CrashWhilePluginActiveException(Throwable throwable) { public CrashWhilePluginActiveException(Throwable throwable) { super(throwable); super(throwable); } } Loading packages/SystemUI/src/com/android/systemui/plugins/PluginInitializerImpl.java +25 −11 Original line number Original line Diff line number Diff line Loading @@ -16,30 +16,30 @@ package com.android.systemui.plugins; import android.content.Context; import android.content.Context; import android.os.Looper; import android.os.Looper; import android.util.Log; import com.android.systemui.Dependency; import com.android.systemui.Dependency; import com.android.systemui.R; import com.android.systemui.shared.plugins.PluginEnabler; import com.android.systemui.shared.plugins.PluginEnabler; import com.android.systemui.shared.plugins.PluginInitializer; import com.android.systemui.shared.plugins.PluginInitializer; import com.android.systemui.R; import com.android.systemui.shared.plugins.PluginManagerImpl; public class PluginInitializerImpl implements PluginInitializer { public class PluginInitializerImpl implements PluginInitializer { private boolean mWtfsSet; @Override @Override public Looper getBgLooper() { public Looper getBgLooper() { return Dependency.get(Dependency.BG_LOOPER); return Dependency.get(Dependency.BG_LOOPER); } } @Override @Override public Runnable getBgInitCallback() { public void onPluginManagerInit() { return new Runnable() { @Override public void run() { // Plugin dependencies that don't have another good home can go here, but // Plugin dependencies that don't have another good home can go here, but // dependencies that have better places to init can happen elsewhere. // dependencies that have better places to init can happen elsewhere. Dependency.get(PluginDependencyProvider.class) Dependency.get(PluginDependencyProvider.class) .allowPluginDependency(ActivityStarter.class); .allowPluginDependency(ActivityStarter.class); } } }; } @Override @Override public String[] getWhitelistedPlugins(Context context) { public String[] getWhitelistedPlugins(Context context) { Loading @@ -49,4 +49,18 @@ public class PluginInitializerImpl implements PluginInitializer { public PluginEnabler getPluginEnabler(Context context) { public PluginEnabler getPluginEnabler(Context context) { return new PluginEnablerImpl(context); return new PluginEnablerImpl(context); } } @Override public void handleWtfs() { if (!mWtfsSet) { mWtfsSet = true; Log.setWtfHandler(new Log.TerribleFailureHandler() { @Override public void onTerribleFailure(String tag, Log.TerribleFailure what, boolean system) { throw new PluginManagerImpl.CrashWhilePluginActiveException(what); } }); } } } } Loading
packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginInitializer.java +7 −3 Original line number Original line Diff line number Diff line Loading @@ -14,7 +14,6 @@ package com.android.systemui.shared.plugins; package com.android.systemui.shared.plugins; import android.annotation.Nullable; import android.content.Context; import android.content.Context; import android.os.Looper; import android.os.Looper; Loading @@ -26,11 +25,16 @@ public interface PluginInitializer { Looper getBgLooper(); Looper getBgLooper(); /** /** * This Runnable is run on the bg looper during initialization of {@link PluginManagerImpl}. * Called from the bg looper during initialization of {@link PluginManagerImpl}. */ */ @Nullable Runnable getBgInitCallback(); void onPluginManagerInit(); String[] getWhitelistedPlugins(Context context); String[] getWhitelistedPlugins(Context context); PluginEnabler getPluginEnabler(Context context); PluginEnabler getPluginEnabler(Context context); /** * Called from {@link PluginManagerImpl#handleWtfs()}. */ void handleWtfs(); } }
packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginManagerImpl.java +11 −17 Original line number Original line Diff line number Diff line Loading @@ -74,11 +74,11 @@ public class PluginManagerImpl extends BroadcastReceiver implements PluginManage private final boolean isDebuggable; private final boolean isDebuggable; private final PluginPrefs mPluginPrefs; private final PluginPrefs mPluginPrefs; private final PluginEnabler mPluginEnabler; private final PluginEnabler mPluginEnabler; private final PluginInitializer mPluginInitializer; private ClassLoaderFilter mParentClassLoader; private ClassLoaderFilter mParentClassLoader; private boolean mListening; private boolean mListening; private boolean mHasOneShot; private boolean mHasOneShot; private Looper mLooper; private Looper mLooper; private boolean mWtfsSet; public PluginManagerImpl(Context context, PluginInitializer initializer) { public PluginManagerImpl(Context context, PluginInitializer initializer) { this(context, new PluginInstanceManagerFactory(), Build.IS_DEBUGGABLE, this(context, new PluginInstanceManagerFactory(), Build.IS_DEBUGGABLE, Loading @@ -87,7 +87,7 @@ public class PluginManagerImpl extends BroadcastReceiver implements PluginManage @VisibleForTesting @VisibleForTesting PluginManagerImpl(Context context, PluginInstanceManagerFactory factory, boolean debuggable, PluginManagerImpl(Context context, PluginInstanceManagerFactory factory, boolean debuggable, UncaughtExceptionHandler defaultHandler, PluginInitializer initializer) { UncaughtExceptionHandler defaultHandler, final PluginInitializer initializer) { mContext = context; mContext = context; mFactory = factory; mFactory = factory; mLooper = initializer.getBgLooper(); mLooper = initializer.getBgLooper(); Loading @@ -95,15 +95,18 @@ public class PluginManagerImpl extends BroadcastReceiver implements PluginManage mWhitelistedPlugins.addAll(Arrays.asList(initializer.getWhitelistedPlugins(mContext))); mWhitelistedPlugins.addAll(Arrays.asList(initializer.getWhitelistedPlugins(mContext))); mPluginPrefs = new PluginPrefs(mContext); mPluginPrefs = new PluginPrefs(mContext); mPluginEnabler = initializer.getPluginEnabler(mContext); mPluginEnabler = initializer.getPluginEnabler(mContext); mPluginInitializer = initializer; PluginExceptionHandler uncaughtExceptionHandler = new PluginExceptionHandler( PluginExceptionHandler uncaughtExceptionHandler = new PluginExceptionHandler( defaultHandler); defaultHandler); Thread.setUncaughtExceptionPreHandler(uncaughtExceptionHandler); Thread.setUncaughtExceptionPreHandler(uncaughtExceptionHandler); Runnable bgRunnable = initializer.getBgInitCallback(); new Handler(mLooper).post(new Runnable() { if (bgRunnable != null) { @Override new Handler(mLooper).post(bgRunnable); public void run() { initializer.onPluginManagerInit(); } } }); } } public String[] getWhitelistedPlugins() { public String[] getWhitelistedPlugins() { Loading Loading @@ -299,16 +302,7 @@ public class PluginManagerImpl extends BroadcastReceiver implements PluginManage } } public void handleWtfs() { public void handleWtfs() { if (!mWtfsSet) { mPluginInitializer.handleWtfs(); mWtfsSet = true; Log.setWtfHandler(new Log.TerribleFailureHandler() { @Override public void onTerribleFailure(String tag, Log.TerribleFailure what, boolean system) { throw new CrashWhilePluginActiveException(what); } }); } } } public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { Loading Loading @@ -391,7 +385,7 @@ public class PluginManagerImpl extends BroadcastReceiver implements PluginManage } } } } private class CrashWhilePluginActiveException extends RuntimeException { public static class CrashWhilePluginActiveException extends RuntimeException { public CrashWhilePluginActiveException(Throwable throwable) { public CrashWhilePluginActiveException(Throwable throwable) { super(throwable); super(throwable); } } Loading
packages/SystemUI/src/com/android/systemui/plugins/PluginInitializerImpl.java +25 −11 Original line number Original line Diff line number Diff line Loading @@ -16,30 +16,30 @@ package com.android.systemui.plugins; import android.content.Context; import android.content.Context; import android.os.Looper; import android.os.Looper; import android.util.Log; import com.android.systemui.Dependency; import com.android.systemui.Dependency; import com.android.systemui.R; import com.android.systemui.shared.plugins.PluginEnabler; import com.android.systemui.shared.plugins.PluginEnabler; import com.android.systemui.shared.plugins.PluginInitializer; import com.android.systemui.shared.plugins.PluginInitializer; import com.android.systemui.R; import com.android.systemui.shared.plugins.PluginManagerImpl; public class PluginInitializerImpl implements PluginInitializer { public class PluginInitializerImpl implements PluginInitializer { private boolean mWtfsSet; @Override @Override public Looper getBgLooper() { public Looper getBgLooper() { return Dependency.get(Dependency.BG_LOOPER); return Dependency.get(Dependency.BG_LOOPER); } } @Override @Override public Runnable getBgInitCallback() { public void onPluginManagerInit() { return new Runnable() { @Override public void run() { // Plugin dependencies that don't have another good home can go here, but // Plugin dependencies that don't have another good home can go here, but // dependencies that have better places to init can happen elsewhere. // dependencies that have better places to init can happen elsewhere. Dependency.get(PluginDependencyProvider.class) Dependency.get(PluginDependencyProvider.class) .allowPluginDependency(ActivityStarter.class); .allowPluginDependency(ActivityStarter.class); } } }; } @Override @Override public String[] getWhitelistedPlugins(Context context) { public String[] getWhitelistedPlugins(Context context) { Loading @@ -49,4 +49,18 @@ public class PluginInitializerImpl implements PluginInitializer { public PluginEnabler getPluginEnabler(Context context) { public PluginEnabler getPluginEnabler(Context context) { return new PluginEnablerImpl(context); return new PluginEnablerImpl(context); } } @Override public void handleWtfs() { if (!mWtfsSet) { mWtfsSet = true; Log.setWtfHandler(new Log.TerribleFailureHandler() { @Override public void onTerribleFailure(String tag, Log.TerribleFailure what, boolean system) { throw new PluginManagerImpl.CrashWhilePluginActiveException(what); } }); } } } }