From 33c580ec458282ecde721741d5f80bb9902fe026 Mon Sep 17 00:00:00 2001 From: Jacky Wang Date: Wed, 6 Nov 2024 16:49:27 +0800 Subject: [PATCH] [Catalyst] Support restriction for Display settings NO_IFTTT=Catalyst only Bug: 377600992 Flag: com.android.settings.flags.catalyst_display_settings_screen Test: testdpc Change-Id: I0a9a125a24614ea8d93e870891c7db6f73f4ac9e --- .../settings/display/AutoBrightnessScreen.kt | 23 ++++----- .../BrightnessLevelRestrictedPreference.kt | 48 ++++++++----------- .../display/AutoBrightnessScreenTest.kt | 11 ++--- 3 files changed, 32 insertions(+), 50 deletions(-) diff --git a/src/com/android/settings/display/AutoBrightnessScreen.kt b/src/com/android/settings/display/AutoBrightnessScreen.kt index 0e682ff92df..5d08b1dfed1 100644 --- a/src/com/android/settings/display/AutoBrightnessScreen.kt +++ b/src/com/android/settings/display/AutoBrightnessScreen.kt @@ -16,17 +16,15 @@ package com.android.settings.display import android.content.Context -import android.os.Process -import android.os.UserHandle import android.os.UserManager import android.provider.Settings import android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC import android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL import androidx.preference.Preference +import com.android.settings.PreferenceRestrictionMixin import com.android.settings.R import com.android.settings.flags.Flags import com.android.settingslib.PrimarySwitchPreference -import com.android.settingslib.RestrictedLockUtilsInternal import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.KeyedObservableDelegate import com.android.settingslib.datastore.SettingsStore @@ -35,7 +33,6 @@ import com.android.settingslib.metadata.BooleanValue import com.android.settingslib.metadata.PersistentPreference import com.android.settingslib.metadata.PreferenceAvailabilityProvider import com.android.settingslib.metadata.PreferenceMetadata -import com.android.settingslib.metadata.PreferenceRestrictionProvider import com.android.settingslib.metadata.ProvidePreferenceScreen import com.android.settingslib.metadata.ReadWritePermit import com.android.settingslib.metadata.preferenceHierarchy @@ -47,7 +44,7 @@ class AutoBrightnessScreen : PreferenceScreenCreator, PreferenceScreenBinding, PreferenceAvailabilityProvider, - PreferenceRestrictionProvider, + PreferenceRestrictionMixin, PersistentPreference, BooleanValue { override val key: String @@ -75,23 +72,19 @@ class AutoBrightnessScreen : com.android.internal.R.bool.config_automatic_brightness_available ) - override fun isEnabled(context: Context) = - !UserManager.get(context) - .hasBaseUserRestriction(UserManager.DISALLOW_CONFIG_BRIGHTNESS, Process.myUserHandle()) + override fun isEnabled(context: Context) = super.isEnabled(context) - override fun isRestricted(context: Context) = - RestrictedLockUtilsInternal.checkIfRestrictionEnforced( - context, - UserManager.DISALLOW_CONFIG_BRIGHTNESS, - UserHandle.myUserId(), - ) != null + override val restrictionKey: String + get() = UserManager.DISALLOW_CONFIG_BRIGHTNESS + + override val useAdminDisabledSummary: Boolean + get() = true override fun createWidget(context: Context) = PrimarySwitchPreference(context) override fun bind(preference: Preference, metadata: PreferenceMetadata) { super.bind(preference, metadata) (preference as PrimarySwitchPreference).apply { - useAdminDisabledSummary(true) isSwitchEnabled = isEnabled // "true" is not the real default value (it is provided by AutoBrightnessDataStore) isChecked = preferenceDataStore!!.getBoolean(key, true) diff --git a/src/com/android/settings/display/BrightnessLevelRestrictedPreference.kt b/src/com/android/settings/display/BrightnessLevelRestrictedPreference.kt index a412b8cb310..09d92ebeee8 100644 --- a/src/com/android/settings/display/BrightnessLevelRestrictedPreference.kt +++ b/src/com/android/settings/display/BrightnessLevelRestrictedPreference.kt @@ -23,15 +23,13 @@ import android.content.Intent.EXTRA_BRIGHTNESS_DIALOG_IS_FULL_WIDTH import android.hardware.display.BrightnessInfo import android.hardware.display.DisplayManager import android.hardware.display.DisplayManager.DisplayListener -import android.os.Process -import android.os.UserHandle import android.os.UserManager import android.provider.Settings.System import androidx.preference.Preference +import com.android.settings.PreferenceRestrictionMixin import com.android.settings.R import com.android.settings.Utils import com.android.settings.core.SettingsBaseActivity -import com.android.settingslib.RestrictedLockUtilsInternal import com.android.settingslib.RestrictedPreference import com.android.settingslib.datastore.HandlerExecutor import com.android.settingslib.datastore.KeyedObserver @@ -42,7 +40,6 @@ import com.android.settingslib.display.BrightnessUtils.convertLinearToGammaFloat import com.android.settingslib.metadata.PreferenceLifecycleContext import com.android.settingslib.metadata.PreferenceLifecycleProvider import com.android.settingslib.metadata.PreferenceMetadata -import com.android.settingslib.metadata.PreferenceRestrictionProvider import com.android.settingslib.metadata.PreferenceSummaryProvider import com.android.settingslib.preference.PreferenceBinding import com.android.settingslib.transition.SettingsTransitionHelper @@ -52,7 +49,7 @@ import java.text.NumberFormat class BrightnessLevelRestrictedPreference : PreferenceMetadata, PreferenceBinding, - PreferenceRestrictionProvider, + PreferenceRestrictionMixin, PreferenceSummaryProvider, PreferenceLifecycleProvider, Preference.OnPreferenceClickListener { @@ -69,34 +66,28 @@ class BrightnessLevelRestrictedPreference : override val keywords: Int get() = R.string.keywords_display_brightness_level - override fun getSummary(context: Context) = + override fun getSummary(context: Context): CharSequence? = NumberFormat.getPercentInstance().format(getCurrentBrightness(context)) - override fun isEnabled(context: Context) = - !UserManager.get(context) - .hasBaseUserRestriction(UserManager.DISALLOW_CONFIG_BRIGHTNESS, Process.myUserHandle()) + override fun isEnabled(context: Context) = super.isEnabled(context) - override fun isRestricted(context: Context) = - RestrictedLockUtilsInternal.checkIfRestrictionEnforced( - context, - UserManager.DISALLOW_CONFIG_BRIGHTNESS, - UserHandle.myUserId(), - ) != null + override val restrictionKey: String + get() = UserManager.DISALLOW_CONFIG_BRIGHTNESS + + override val useAdminDisabledSummary: Boolean + get() = true override fun createWidget(context: Context) = RestrictedPreference(context) override fun bind(preference: Preference, metadata: PreferenceMetadata) { super.bind(preference, metadata) - if (preference is RestrictedPreference) preference.useAdminDisabledSummary(true) preference.onPreferenceClickListener = this } override fun onStart(context: PreferenceLifecycleContext) { val observer = - object : KeyedObserver { - override fun onKeyChanged(key: String, reason: Int) { - context.notifyPreferenceChange(this@BrightnessLevelRestrictedPreference) - } + KeyedObserver { _, _ -> + context.notifyPreferenceChange(this@BrightnessLevelRestrictedPreference) } brightnessObserver = observer SettingsSystemStore.get(context) @@ -113,13 +104,11 @@ class BrightnessLevelRestrictedPreference : } } displayListener = listener - context - .getSystemService(DisplayManager::class.java) - .registerDisplayListener( - listener, - HandlerExecutor.main, - DisplayManager.EVENT_FLAG_DISPLAY_BRIGHTNESS, - ) + context.displayManager.registerDisplayListener( + listener, + HandlerExecutor.main, + DisplayManager.EVENT_FLAG_DISPLAY_BRIGHTNESS, + ) } override fun onStop(context: PreferenceLifecycleContext) { @@ -129,11 +118,14 @@ class BrightnessLevelRestrictedPreference : } displayListener?.let { - context.getSystemService(DisplayManager::class.java).unregisterDisplayListener(it) + context.displayManager.unregisterDisplayListener(it) displayListener = null } } + private val Context.displayManager: DisplayManager + get() = getSystemService(DisplayManager::class.java)!! + override fun onPreferenceClick(preference: Preference): Boolean { val context = preference.context val intent = diff --git a/tests/robotests/src/com/android/settings/display/AutoBrightnessScreenTest.kt b/tests/robotests/src/com/android/settings/display/AutoBrightnessScreenTest.kt index d05b258574d..ab2d9bd29d9 100644 --- a/tests/robotests/src/com/android/settings/display/AutoBrightnessScreenTest.kt +++ b/tests/robotests/src/com/android/settings/display/AutoBrightnessScreenTest.kt @@ -25,7 +25,7 @@ import androidx.preference.PreferenceViewHolder import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 import com.android.settingslib.PrimarySwitchPreference -import com.android.settingslib.preference.PreferenceDataStoreAdapter +import com.android.settingslib.preference.createAndBindWidget import com.android.settingslib.widget.SettingsThemeHelper.isExpressiveTheme import com.android.settingslib.widget.theme.R import com.google.common.truth.Truth.assertThat @@ -117,17 +117,14 @@ class AutoBrightnessScreenTest { assertThat(preferenceScreenCreator.isAvailable(context)).isFalse() } - private fun getPrimarySwitchPreference(): PrimarySwitchPreference = - preferenceScreenCreator.run { - val preference = createWidget(context) - preference.preferenceDataStore = PreferenceDataStoreAdapter(storage(context)) - bind(preference, this) + private fun getPrimarySwitchPreference() = + preferenceScreenCreator.createAndBindWidget(context).also { val holder = PreferenceViewHolder.createInstanceForTests( LayoutInflater.from(context).inflate(getResId(), /* root= */ null) ) .apply { findViewById(androidx.preference.R.id.switchWidget) } - preference.apply { onBindViewHolder(holder) } + it.onBindViewHolder(holder) } private fun setScreenBrightnessMode(value: Int) =