diff --git a/packages/SystemUI/res/values/arrays_tv.xml b/packages/SystemUI/res/values/arrays_tv.xml
new file mode 100644
index 0000000000000..08b1ab14ad083
--- /dev/null
+++ b/packages/SystemUI/res/values/arrays_tv.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+ - com.android.tv.settings
+ - com.google.android.leanbacklauncher/.settings.HomeScreenSettingsActivity
+ - com.google.android.apps.mediashell/.settings.CastSettingsActivity
+ - com.google.android.katniss.setting/.SpeechSettingsActivity
+ - com.google.android.katniss.setting/.SearchSettingsActivity
+ - com.google.android.gsf.notouch/.UsageDiagnosticsSettingActivity
+
+
diff --git a/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java b/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java
index 376a0b6bdcbcf..df01aab94a1ec 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java
@@ -68,34 +68,10 @@ public class PipManager implements BasePipManager {
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
private static final boolean DEBUG_FORCE_ONBOARDING =
SystemProperties.getBoolean("debug.tv.pip_force_onboarding", false);
+ private static final String SETTINGS_PACKAGE_AND_CLASS_DELIMITER = "/";
private static PipManager sPipManager;
-
- /**
- * List of package and class name which are considered as Settings,
- * so PIP location should be adjusted to the left of the side panel.
- */
- private static final List> sSettingsPackageAndClassNamePairList;
- static {
- sSettingsPackageAndClassNamePairList = new ArrayList<>();
- sSettingsPackageAndClassNamePairList.add(new Pair(
- "com.android.tv.settings", null));
- sSettingsPackageAndClassNamePairList.add(new Pair(
- "com.google.android.leanbacklauncher",
- "com.google.android.leanbacklauncher.settings.HomeScreenSettingsActivity"));
- sSettingsPackageAndClassNamePairList.add(new Pair(
- "com.google.android.apps.mediashell",
- "com.google.android.apps.mediashell.settings.CastSettingsActivity"));
- sSettingsPackageAndClassNamePairList.add(new Pair(
- "com.google.android.katniss",
- "com.google.android.katniss.setting.SpeechSettingsActivity"));
- sSettingsPackageAndClassNamePairList.add(new Pair(
- "com.google.android.katniss",
- "com.google.android.katniss.setting.SearchSettingsActivity"));
- sSettingsPackageAndClassNamePairList.add(new Pair(
- "com.google.android.gsf.notouch",
- "com.google.android.gsf.notouch.UsageDiagnosticsSettingActivity"));
- }
+ private static List> sSettingsPackageAndClassNamePairList;
/**
* State when there's no PIP.
@@ -252,6 +228,31 @@ public class PipManager implements BasePipManager {
mOnboardingShown = Prefs.getBoolean(
mContext, TV_PICTURE_IN_PICTURE_ONBOARDING_SHOWN, false);
+ if (sSettingsPackageAndClassNamePairList == null) {
+ String[] settings = mContext.getResources().getStringArray(
+ R.array.tv_pip_settings_class_name);
+ sSettingsPackageAndClassNamePairList = new ArrayList<>();
+ if (settings != null) {
+ for (int i = 0; i < settings.length; i++) {
+ Pair entry = null;
+ String[] packageAndClassName =
+ settings[i].split(SETTINGS_PACKAGE_AND_CLASS_DELIMITER);
+ switch (packageAndClassName.length) {
+ case 1:
+ entry = Pair.create(packageAndClassName[0], null);
+ break;
+ case 2:
+ entry = Pair.create(
+ packageAndClassName[0],
+ packageAndClassName[0] + packageAndClassName[1]);
+ }
+ if (entry != null) {
+ sSettingsPackageAndClassNamePairList.add(entry);
+ }
+ }
+ }
+ }
+
loadConfigurationsAndApply();
mPipRecentsOverlayManager = new PipRecentsOverlayManager(context);
mMediaSessionManager =