summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/development/EmulateDisplayCutoutPreferenceController.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/settings/development/EmulateDisplayCutoutPreferenceController.java')
-rw-r--r--src/com/android/settings/development/EmulateDisplayCutoutPreferenceController.java140
1 files changed, 8 insertions, 132 deletions
diff --git a/src/com/android/settings/development/EmulateDisplayCutoutPreferenceController.java b/src/com/android/settings/development/EmulateDisplayCutoutPreferenceController.java
index c9bb9b76bd..ef88baa134 100644
--- a/src/com/android/settings/development/EmulateDisplayCutoutPreferenceController.java
+++ b/src/com/android/settings/development/EmulateDisplayCutoutPreferenceController.java
@@ -16,155 +16,31 @@
package com.android.settings.development;
-import static android.os.UserHandle.USER_SYSTEM;
-
import android.content.Context;
+import android.content.om.IOverlayManager;
import android.content.pm.PackageManager;
-import androidx.annotation.VisibleForTesting;
-import androidx.preference.ListPreference;
-import androidx.preference.Preference;
-import androidx.preference.PreferenceScreen;
-import android.text.TextUtils;
+import android.os.ServiceManager;
import android.view.DisplayCutout;
-import com.android.settings.R;
-import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settings.wrapper.OverlayManagerWrapper;
-import com.android.settings.wrapper.OverlayManagerWrapper.OverlayInfo;
-import com.android.settingslib.development.DeveloperOptionsPreferenceController;
-
-import java.util.Comparator;
-import java.util.List;
+import androidx.annotation.VisibleForTesting;
-public class EmulateDisplayCutoutPreferenceController extends
- DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
- PreferenceControllerMixin {
+public class EmulateDisplayCutoutPreferenceController extends OverlayCategoryPreferenceController {
private static final String KEY = "display_cutout_emulation";
- private static final Comparator<OverlayInfo> OVERLAY_INFO_COMPARATOR =
- Comparator.comparingInt(a -> a.priority);
-
- private final OverlayManagerWrapper mOverlayManager;
- private final boolean mAvailable;
-
- private ListPreference mPreference;
- private PackageManager mPackageManager;
@VisibleForTesting
EmulateDisplayCutoutPreferenceController(Context context, PackageManager packageManager,
- OverlayManagerWrapper overlayManager) {
- super(context);
- mOverlayManager = overlayManager;
- mPackageManager = packageManager;
- mAvailable = overlayManager != null && getOverlayInfos().length > 0;
+ IOverlayManager overlayManager) {
+ super(context, packageManager, overlayManager, DisplayCutout.EMULATION_OVERLAY_CATEGORY);
}
public EmulateDisplayCutoutPreferenceController(Context context) {
- this(context, context.getPackageManager(), new OverlayManagerWrapper());
- }
-
- @Override
- public boolean isAvailable() {
- return mAvailable;
+ this(context, context.getPackageManager(), IOverlayManager.Stub
+ .asInterface(ServiceManager.getService(Context.OVERLAY_SERVICE)));
}
@Override
public String getPreferenceKey() {
return KEY;
}
-
- @Override
- public void displayPreference(PreferenceScreen screen) {
- super.displayPreference(screen);
- setPreference((ListPreference) screen.findPreference(getPreferenceKey()));
- }
-
- @VisibleForTesting
- void setPreference(ListPreference preference) {
- mPreference = preference;
- }
-
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- return setEmulationOverlay((String) newValue);
- }
-
- private boolean setEmulationOverlay(String packageName) {
- OverlayInfo[] overlays = getOverlayInfos();
- String currentPackageName = null;
- for (OverlayInfo o : overlays) {
- if (o.isEnabled()) {
- currentPackageName = o.packageName;
- }
- }
-
- if (TextUtils.isEmpty(packageName) && TextUtils.isEmpty(currentPackageName)
- || TextUtils.equals(packageName, currentPackageName)) {
- // Already set.
- return true;
- }
-
- final boolean result;
- if (TextUtils.isEmpty(packageName)) {
- result = mOverlayManager.setEnabled(currentPackageName, false, USER_SYSTEM);
- } else {
- result = mOverlayManager.setEnabledExclusiveInCategory(packageName, USER_SYSTEM);
- }
- updateState(mPreference);
- return result;
- }
-
- @Override
- public void updateState(Preference preference) {
- OverlayInfo[] overlays = getOverlayInfos();
-
- CharSequence[] pkgs = new CharSequence[overlays.length + 1];
- CharSequence[] labels = new CharSequence[pkgs.length];
-
- int current = 0;
- pkgs[0] = "";
- labels[0] = mContext.getString(R.string.display_cutout_emulation_device_default);
-
- for (int i = 0; i < overlays.length; i++) {
- OverlayInfo o = overlays[i];
- pkgs[i+1] = o.packageName;
- if (o.isEnabled()) {
- current = i+1;
- }
- }
- for (int i = 1; i < pkgs.length; i++) {
- try {
- labels[i] = mPackageManager.getApplicationInfo(pkgs[i].toString(), 0)
- .loadLabel(mPackageManager);
- } catch (PackageManager.NameNotFoundException e) {
- labels[i] = pkgs[i];
- }
- }
-
- mPreference.setEntries(labels);
- mPreference.setEntryValues(pkgs);
- mPreference.setValueIndex(current);
- mPreference.setSummary(labels[current]);
- }
-
- private OverlayInfo[] getOverlayInfos() {
- @SuppressWarnings("unchecked") List<OverlayInfo> overlayInfos =
- mOverlayManager.getOverlayInfosForTarget("android", USER_SYSTEM);
- for (int i = overlayInfos.size() - 1; i >= 0; i--) {
- if (!DisplayCutout.EMULATION_OVERLAY_CATEGORY.equals(
- overlayInfos.get(i).category)) {
- overlayInfos.remove(i);
- }
- }
- overlayInfos.sort(OVERLAY_INFO_COMPARATOR);
- return overlayInfos.toArray(new OverlayInfo[overlayInfos.size()]);
- }
-
- @Override
- protected void onDeveloperOptionsSwitchDisabled() {
- super.onDeveloperOptionsSwitchDisabled();
- setEmulationOverlay("");
- updateState(mPreference);
- }
-
}