From e657ae66da4c4ed12a12afeb86cbfeee0b95024d Mon Sep 17 00:00:00 2001 From: dakinola Date: Wed, 4 Dec 2024 18:32:25 +0000 Subject: [PATCH] Add Shade display position dev option Adding new developer option which update the policy for shade location when connected to an external display Bug: 379278693 Test: manual testing Flag: com.android.systemui.shade_window_goes_around Change-Id: I1d9886f76983972dc12073326a89d928af7be475 --- res/xml/development_settings.xml | 7 ++ .../DevelopmentSettingsDashboardFragment.java | 1 + ...eDisplayAwarenessPreferenceController.java | 89 +++++++++++++++++++ 3 files changed, 97 insertions(+) create mode 100644 src/com/android/settings/development/ShadeDisplayAwarenessPreferenceController.java diff --git a/res/xml/development_settings.xml b/res/xml/development_settings.xml index 25bc062e10c..28492380f32 100644 --- a/res/xml/development_settings.xml +++ b/res/xml/development_settings.xml @@ -569,6 +569,13 @@ android:entries="@array/overlay_display_devices_entries" android:entryValues="@array/overlay_display_devices_values" /> + + diff --git a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java index 9c1379473cf..605f3bbcdd8 100644 --- a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java +++ b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java @@ -837,6 +837,7 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra controllers.add(new ForceEnableNotesRolePreferenceController(context)); controllers.add(new GrammaticalGenderPreferenceController(context)); controllers.add(new SensitiveContentProtectionPreferenceController(context)); + controllers.add(new ShadeDisplayAwarenessPreferenceController(context)); return controllers; } diff --git a/src/com/android/settings/development/ShadeDisplayAwarenessPreferenceController.java b/src/com/android/settings/development/ShadeDisplayAwarenessPreferenceController.java new file mode 100644 index 00000000000..0551112fd19 --- /dev/null +++ b/src/com/android/settings/development/ShadeDisplayAwarenessPreferenceController.java @@ -0,0 +1,89 @@ +/* + * Copyright (C) 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.development; + +import android.content.Context; +import android.provider.Settings; +import android.text.TextUtils; + +import androidx.annotation.NonNull; +import androidx.preference.ListPreference; +import androidx.preference.Preference; + +import com.android.settings.core.PreferenceControllerMixin; +import com.android.settingslib.R; +import com.android.settingslib.development.DeveloperOptionsPreferenceController; + +public class ShadeDisplayAwarenessPreferenceController extends DeveloperOptionsPreferenceController + implements Preference.OnPreferenceChangeListener, PreferenceControllerMixin, + RebootConfirmationDialogHost { + + private static final int SHADE_DISPLAY_AWARENESS_DEFAULT = 0; + private static final String SHADE_DISPLAY_AWARENESS_KEY = "shade_display_awareness"; + + private final String[] mListValues; + private final String[] mListSummaries; + + public ShadeDisplayAwarenessPreferenceController(Context context) { + super(context); + + mListValues = mContext.getResources().getStringArray( + R.array.shade_display_awareness_values); + mListSummaries = mContext.getResources().getStringArray( + R.array.shade_display_awareness_summaries); + } + + @Override + public String getPreferenceKey() { + return SHADE_DISPLAY_AWARENESS_KEY; + } + + @Override + public boolean onPreferenceChange(@NonNull Preference preference, Object newValue) { + Settings.Global.putString(mContext.getContentResolver(), + Settings.Global.DEVELOPMENT_SHADE_DISPLAY_AWARENESS, newValue.toString()); + updateShadeDisplayAwareness((ListPreference) mPreference); + return true; + } + + @Override + public void updateState(Preference preference) { + updateShadeDisplayAwareness((ListPreference) mPreference); + } + + private void updateShadeDisplayAwareness(ListPreference preference) { + String currentValue = Settings.Global.getString(mContext.getContentResolver(), + Settings.Global.DEVELOPMENT_SHADE_DISPLAY_AWARENESS); + int index = SHADE_DISPLAY_AWARENESS_DEFAULT; // Defaults to value is device-display (0) + for (int i = 0; i < mListValues.length; i++) { + if (TextUtils.equals(currentValue, mListValues[i])) { + index = i; + break; + } + } + preference.setValue(mListValues[index]); + preference.setSummary(mListSummaries[index]); + } + + @Override + protected void onDeveloperOptionsSwitchDisabled() { + super.onDeveloperOptionsSwitchDisabled(); + Settings.Global.putString(mContext.getContentResolver(), + Settings.Global.DEVELOPMENT_SHADE_DISPLAY_AWARENESS, + mListValues[SHADE_DISPLAY_AWARENESS_DEFAULT]); + } +}