Merge "Allow specifying full component names in sysui plugin whitelist" into qt-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
a9ac86f679
@@ -151,19 +151,34 @@ public class PluginInstanceManager<T extends Plugin> {
|
||||
return plugins.size() != 0;
|
||||
}
|
||||
|
||||
private void disable(PluginInfo info,
|
||||
@PluginEnabler.DisableReason int reason) {
|
||||
private boolean isPluginWhitelisted(ComponentName pluginName) {
|
||||
for (String componentNameOrPackage : mWhitelistedPlugins) {
|
||||
ComponentName componentName = ComponentName.unflattenFromString(componentNameOrPackage);
|
||||
if (componentName == null) {
|
||||
if (componentNameOrPackage.equals(pluginName.getPackageName())) {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
if (componentName.equals(pluginName)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void disable(PluginInfo info, @PluginEnabler.DisableReason int reason) {
|
||||
// Live by the sword, die by the sword.
|
||||
// Misbehaving plugins get disabled and won't come back until uninstall/reinstall.
|
||||
|
||||
ComponentName pluginComponent = new ComponentName(info.mPackage, info.mClass);
|
||||
// If a plugin is detected in the stack of a crash then this will be called for that
|
||||
// plugin, if the plugin causing a crash cannot be identified, they are all disabled
|
||||
// assuming one of them must be bad.
|
||||
if (mWhitelistedPlugins.contains(info.mPackage)) {
|
||||
if (isPluginWhitelisted(pluginComponent)) {
|
||||
// Don't disable whitelisted plugins as they are a part of the OS.
|
||||
return;
|
||||
}
|
||||
ComponentName pluginComponent = new ComponentName(info.mPackage, info.mClass);
|
||||
Log.w(TAG, "Disabling plugin " + pluginComponent.flattenToShortString());
|
||||
mManager.getPluginEnabler().setDisabled(pluginComponent, reason);
|
||||
}
|
||||
@@ -288,6 +303,13 @@ public class PluginInstanceManager<T extends Plugin> {
|
||||
if (result.size() > 1 && !mAllowMultiple) {
|
||||
// TODO: Show warning.
|
||||
Log.w(TAG, "Multiple plugins found for " + mAction);
|
||||
if (DEBUG) {
|
||||
for (ResolveInfo info : result) {
|
||||
ComponentName name = new ComponentName(info.serviceInfo.packageName,
|
||||
info.serviceInfo.name);
|
||||
Log.w(TAG, " " + name);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
for (ResolveInfo info : result) {
|
||||
@@ -305,7 +327,7 @@ public class PluginInstanceManager<T extends Plugin> {
|
||||
protected PluginInfo<T> handleLoadPlugin(ComponentName component) {
|
||||
// This was already checked, but do it again here to make extra extra sure, we don't
|
||||
// use these on production builds.
|
||||
if (!isDebuggable && !mWhitelistedPlugins.contains(component.getPackageName())) {
|
||||
if (!isDebuggable && !isPluginWhitelisted(component)) {
|
||||
// Never ever ever allow these on production builds, they are only for prototyping.
|
||||
Log.w(TAG, "Plugin cannot be loaded on production build: " + component);
|
||||
return null;
|
||||
|
||||
@@ -413,6 +413,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
|
||||
},
|
||||
mKeyguardManager.isDeviceLocked())
|
||||
: null;
|
||||
|
||||
ActionsDialog dialog = new ActionsDialog(mContext, mAdapter, panelViewController);
|
||||
dialog.setCanceledOnTouchOutside(false); // Handled by the custom class.
|
||||
dialog.setKeyguardShowing(mKeyguardShowing);
|
||||
|
||||
Reference in New Issue
Block a user