diff options
Diffstat (limited to 'src/com/android/settings/development/EmulateDisplayCutoutPreferenceController.java')
-rw-r--r-- | src/com/android/settings/development/EmulateDisplayCutoutPreferenceController.java | 140 |
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); - } - } |