Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5d74763e authored by Jacky Wang's avatar Jacky Wang
Browse files

[Catalyst] Avoid PreferenceAvailabilityProvider for ambient wallpaper

The availability is effectively constant on the device. Move the
condition check to hierarchy, which improves settings search.

NO_IFTTT=Catalyst only

Bug: 396630828
Flag: com.android.systemui.shared.ambient_aod
Test: manual
Change-Id: I1141796b73d637dce4fcaf79f026636bd353990f
parent 0f92f1bd
Loading
Loading
Loading
Loading
+11 −3
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.hardware.display.AmbientDisplayConfiguration
import android.os.SystemProperties
import android.os.UserHandle
import android.os.UserManager
import com.android.internal.R.bool.config_dozeSupportsAodWallpaper
import com.android.settings.CatalystFragment
import com.android.settings.CatalystSettingsActivity
import com.android.settings.R
@@ -31,7 +32,6 @@ import com.android.settings.display.AmbientDisplayAlwaysOnPreferenceController.i
import com.android.settings.display.ambient.AmbientDisplayMainSwitchPreference
import com.android.settings.display.ambient.AmbientDisplayStorage
import com.android.settings.display.ambient.AmbientDisplayTopIntroPreference
import com.android.settings.display.ambient.AmbientWallpaperOptionsCategory
import com.android.settings.display.ambient.AmbientWallpaperPreference
import com.android.settings.metrics.PreferenceActionMetricsProvider
import com.android.settings.restriction.PreferenceRestrictionMixin
@@ -41,6 +41,7 @@ import com.android.settingslib.datastore.KeyValueStore
import com.android.settingslib.datastore.SettingsSecureStore
import com.android.settingslib.metadata.BooleanValuePreference
import com.android.settingslib.metadata.PreferenceAvailabilityProvider
import com.android.settingslib.metadata.PreferenceCategory as Category
import com.android.settingslib.metadata.PreferenceLifecycleContext
import com.android.settingslib.metadata.PreferenceLifecycleProvider
import com.android.settingslib.metadata.PreferenceMetadata
@@ -105,7 +106,7 @@ open class AmbientDisplayAlwaysOnPreferenceScreen :
        context.getText(
            if (isAodSuppressedByBedtime(context)) {
                R.string.aware_summary_when_bedtime_on
            } else if (ambientWallpaperPreference.isAvailable(context)) {
            } else if (context.isAmbientWallpaperOptionsAvailable) {
                if (ambientWallpaperPreference.isChecked(context)) {
                    R.string.doze_always_on_summary_with_wallpaper
                } else {
@@ -133,7 +134,11 @@ open class AmbientDisplayAlwaysOnPreferenceScreen :
        preferenceHierarchy(context, this) {
            +AmbientDisplayTopIntroPreference()
            +AmbientDisplayMainSwitchPreference()
            +AmbientWallpaperOptionsCategory() += { +ambientWallpaperPreference }
            if (context.isAmbientWallpaperOptionsAvailable) {
                +Category("ambient_wallpaperGroup", R.string.doze_always_on_wallpaper_options) += {
                    +ambientWallpaperPreference
                }
            }
        }

    override fun storage(context: Context): KeyValueStore = AmbientDisplayStorage(context)
@@ -154,6 +159,9 @@ open class AmbientDisplayAlwaysOnPreferenceScreen :
    companion object {
        const val KEY = "ambient_display_always_on_screen"
        const val PROP_AWARE_AVAILABLE = "ro.vendor.aware_available"

        private val Context.isAmbientWallpaperOptionsAvailable: Boolean
            get() = ambientAod() && resources.getBoolean(config_dozeSupportsAodWallpaper)
    }
}

+0 −31
Original line number Diff line number Diff line
/*
 * Copyright (C) 2025 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.display.ambient

import android.content.Context
import com.android.internal.R as InternalR
import com.android.settings.R
import com.android.settingslib.metadata.PreferenceAvailabilityProvider
import com.android.settingslib.metadata.PreferenceCategory
import com.android.systemui.shared.Flags.ambientAod

class AmbientWallpaperOptionsCategory :
    PreferenceCategory("ambient_wallpaperGroup", R.string.doze_always_on_wallpaper_options),
    PreferenceAvailabilityProvider {

    override fun isAvailable(context: Context): Boolean =
        ambientAod() && context.resources.getBoolean(InternalR.bool.config_dozeSupportsAodWallpaper)
}
+2 −9
Original line number Diff line number Diff line
@@ -17,32 +17,25 @@ package com.android.settings.display.ambient

import android.content.Context
import android.provider.Settings.Secure.DOZE_ALWAYS_ON_WALLPAPER_ENABLED
import com.android.internal.R as InternalR
import com.android.settings.R
import com.android.settings.display.AmbientDisplayAlwaysOnPreference
import com.android.settingslib.datastore.KeyValueStore
import com.android.settingslib.datastore.KeyValueStoreDelegate
import com.android.settingslib.datastore.KeyedObserver
import com.android.settingslib.datastore.SettingsSecureStore
import com.android.settingslib.metadata.PreferenceAvailabilityProvider
import com.android.settingslib.metadata.SwitchPreference
import com.android.systemui.shared.Flags.ambientAod

class AmbientWallpaperPreference :
    SwitchPreference(
        KEY,
        R.string.doze_always_on_wallpaper_title,
        R.string.doze_always_on_wallpaper_description,
    ),
    PreferenceAvailabilityProvider {

    override fun isAvailable(context: Context): Boolean =
        ambientAod() && context.resources.getBoolean(InternalR.bool.config_dozeSupportsAodWallpaper)
    ) {

    override fun storage(context: Context): KeyValueStore =
        Storage(SettingsSecureStore.get(context))

    fun isChecked(context: Context) = isAvailable(context) && storage(context).getBoolean(KEY)!!
    fun isChecked(context: Context) = storage(context).getBoolean(KEY)!!

    @Suppress("UNCHECKED_CAST")
    private class Storage(private val settingsStore: KeyValueStore) :