summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2018-11-03 06:49:01 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2018-11-03 06:49:01 +0000
commit6d79c13f62f40a7994aaa608e9cab3d5b45f66bc (patch)
treeb2210070361e5beab4dc57b990ec2e9cd1d3ff2a
parent260307b3c32b3effe88b517d8edaabd2578f42f9 (diff)
parentda08f5462ef07e515b540e2f1579bc4f032435d3 (diff)
Merge "Don't manage whitelisted plugins"
-rw-r--r--packages/SystemUI/res/values/config.xml4
-rw-r--r--packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginInstanceManager.java4
-rw-r--r--packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginManager.java2
-rw-r--r--packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginManagerImpl.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/tuner/PluginFragment.java7
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/shared/plugins/PluginInstanceManagerTest.java24
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakePluginManager.java5
7 files changed, 45 insertions, 5 deletions
diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml
index b31dc50be5d1..c61b1d2c094c 100644
--- a/packages/SystemUI/res/values/config.xml
+++ b/packages/SystemUI/res/values/config.xml
@@ -461,5 +461,7 @@
<bool name="config_pipEnableDismissDragToEdge">true</bool>
<!-- SystemUI Plugins that can be loaded on user builds. -->
- <string-array name="config_pluginWhitelist" translatable="false" />
+ <string-array name="config_pluginWhitelist" translatable="false">
+ <item>com.android.systemui</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginInstanceManager.java b/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginInstanceManager.java
index 8cc6091f52f5..8e7fadb5c7cb 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginInstanceManager.java
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginInstanceManager.java
@@ -158,6 +158,10 @@ public class PluginInstanceManager<T extends Plugin> {
// 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)) {
+ // Don't disable whitelisted plugins as they are a part of the OS.
+ return;
+ }
Log.w(TAG, "Disabling plugin " + info.mPackage + "/" + info.mClass);
mManager.getPluginEnabler().setEnabled(new ComponentName(info.mPackage, info.mClass),
false);
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginManager.java b/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginManager.java
index 208f4fedfe27..3f907a8aa348 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginManager.java
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginManager.java
@@ -27,6 +27,8 @@ public interface PluginManager {
// must be one of the channels created in NotificationChannels.java
String NOTIFICATION_CHANNEL_ID = "ALR";
+ String[] getWhitelistedPlugins();
+
<T extends Plugin> T getOneShotPlugin(Class<T> cls);
<T extends Plugin> T getOneShotPlugin(String action, Class<?> cls);
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 82e8b3e48cfc..dc2a9bd5105b 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
@@ -210,6 +210,10 @@ public class PluginManagerImpl extends BroadcastReceiver implements PluginManage
Uri uri = intent.getData();
ComponentName component = ComponentName.unflattenFromString(
uri.toString().substring(10));
+ if (mWhitelistedPlugins.contains(component.getPackageName())) {
+ // Don't disable whitelisted plugins as they are a part of the OS.
+ return;
+ }
getPluginEnabler().setEnabled(component, false);
mContext.getSystemService(NotificationManager.class).cancel(component.getClassName(),
SystemMessage.NOTE_PLUGIN);
diff --git a/packages/SystemUI/src/com/android/systemui/tuner/PluginFragment.java b/packages/SystemUI/src/com/android/systemui/tuner/PluginFragment.java
index 0826054f3740..ecb830c48ccc 100644
--- a/packages/SystemUI/src/com/android/systemui/tuner/PluginFragment.java
+++ b/packages/SystemUI/src/com/android/systemui/tuner/PluginFragment.java
@@ -29,6 +29,8 @@ import android.util.ArrayMap;
import android.util.ArraySet;
import android.view.View;
+import com.android.internal.util.ArrayUtils;
+import com.android.systemui.Dependency;
import com.android.systemui.R;
import com.android.systemui.plugins.PluginEnablerImpl;
import com.android.systemui.shared.plugins.PluginEnabler;
@@ -77,6 +79,7 @@ public class PluginFragment extends PreferenceFragment {
}
private void loadPrefs() {
+ PluginManager manager = Dependency.get(PluginManager.class);
PreferenceScreen screen = getPreferenceManager().createPreferenceScreen(getContext());
screen.setOrderingAsAdded(false);
Context prefContext = getPreferenceManager().getContext();
@@ -103,6 +106,10 @@ public class PluginFragment extends PreferenceFragment {
PackageManager.MATCH_DISABLED_COMPONENTS | PackageManager.GET_SERVICES);
apps.forEach(app -> {
if (!plugins.containsKey(app.packageName)) return;
+ if (ArrayUtils.contains(manager.getWhitelistedPlugins(), app.packageName)) {
+ // Don't manage whitelisted plugins, they are part of the OS.
+ return;
+ }
SwitchPreference pref = new PluginPreference(prefContext, app, mPluginEnabler);
pref.setSummary("Plugins: " + toString(plugins.get(app.packageName)));
screen.addPreference(pref);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shared/plugins/PluginInstanceManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/shared/plugins/PluginInstanceManagerTest.java
index 5bf60400089b..5cc3b3c7823b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shared/plugins/PluginInstanceManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/shared/plugins/PluginInstanceManagerTest.java
@@ -22,6 +22,7 @@ import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -122,7 +123,7 @@ public class PluginInstanceManagerTest extends SysuiTestCase {
waitForIdleSync(mPluginInstanceManager.mPluginHandler);
waitForIdleSync(mPluginInstanceManager.mMainHandler);
- verify(mMockListener, Mockito.never()).onPluginConnected(any(), any());
+ verify(mMockListener, never()).onPluginConnected(any(), any());
}
@Test
@@ -162,7 +163,7 @@ public class PluginInstanceManagerTest extends SysuiTestCase {
waitForIdleSync(mPluginInstanceManager.mMainHandler);
// Plugin shouldn't be connected because it is the wrong version.
- verify(mMockListener, Mockito.never()).onPluginConnected(any(), any());
+ verify(mMockListener, never()).onPluginConnected(any(), any());
verify(nm).notifyAsUser(eq(TestPlugin.class.getName()), eq(SystemMessage.NOTE_PLUGIN),
any(), eq(UserHandle.ALL));
}
@@ -200,7 +201,7 @@ public class PluginInstanceManagerTest extends SysuiTestCase {
waitForIdleSync(mPluginInstanceManager.mMainHandler);;
// Non-debuggable build should receive no plugins.
- verify(mMockListener, Mockito.never()).onPluginConnected(any(), any());
+ verify(mMockListener, never()).onPluginConnected(any(), any());
}
@Test
@@ -229,7 +230,7 @@ public class PluginInstanceManagerTest extends SysuiTestCase {
// Start with an unrelated class.
boolean result = mPluginInstanceManager.checkAndDisable(Activity.class.getName());
assertFalse(result);
- verify(mMockPm, Mockito.never()).setComponentEnabledSetting(
+ verify(mMockPm, never()).setComponentEnabledSetting(
ArgumentCaptor.forClass(ComponentName.class).capture(),
ArgumentCaptor.forClass(int.class).capture(),
ArgumentCaptor.forClass(int.class).capture());
@@ -255,6 +256,21 @@ public class PluginInstanceManagerTest extends SysuiTestCase {
ArgumentCaptor.forClass(int.class).capture());
}
+ @Test
+ public void testDisableWhitelisted() throws Exception {
+ mPluginInstanceManager = new PluginInstanceManager(mContextWrapper, mMockPm, "myAction",
+ mMockListener, true, mHandlerThread.getLooper(), mMockVersionInfo,
+ mMockManager, false, new String[] {WHITELISTED_PACKAGE});
+ createPlugin(); // Get into valid created state.
+
+ mPluginInstanceManager.disableAll();
+
+ verify(mMockPm, never()).setComponentEnabledSetting(
+ ArgumentCaptor.forClass(ComponentName.class).capture(),
+ ArgumentCaptor.forClass(int.class).capture(),
+ ArgumentCaptor.forClass(int.class).capture());
+ }
+
private void setupFakePmQuery() throws Exception {
List<ResolveInfo> list = new ArrayList<>();
ResolveInfo info = new ResolveInfo();
diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakePluginManager.java b/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakePluginManager.java
index 5f54bceb6b9b..6d1e6ce9ea33 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakePluginManager.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakePluginManager.java
@@ -62,6 +62,11 @@ public class FakePluginManager implements PluginManager {
}
@Override
+ public String[] getWhitelistedPlugins() {
+ return new String[0];
+ }
+
+ @Override
public <T extends Plugin> T getOneShotPlugin(Class<T> cls) {
return null;
}