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

Commit 69c4f2df authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Make ColorAndMotionFragment fully in Catalyst" into main

parents e6b79083 0f84b652
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@
     limitations under the License.
-->

<!-- LINT.IfChange -->
<PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:settings="http://schemas.android.com/apk/res-auto"
@@ -40,16 +41,16 @@
        settings:controller="com.android.settings.accessibility.ColorInversionPreferenceController"/>

    <!-- DarkModePreference is searchable in the Display & Touch setting.
         Therefore, we set searchable = false here to avoid duplicate search results. -->
         With catalyst, we're reusing the same preference. Will let the SettingsSearch
          to determine how to resolve multi-entry on same preference. -->
    <com.android.settings.display.darkmode.DarkModePreference
        android:key="dark_ui_mode_accessibility"
        android:key="dark_ui_mode"
        android:icon="@drawable/ic_dark_ui"
        android:title="@string/dark_ui_mode"
        android:fragment="com.android.settings.display.darkmode.DarkModeSettingsFragment"
        android:widgetLayout="@null"
        settings:widgetLayout="@null"
        settings:controller="com.android.settings.display.DarkUIPreferenceController"
        settings:searchable="false"/>
        settings:controller="com.android.settings.display.DarkUIPreferenceController" />

    <SwitchPreferenceCompat
        android:icon="@drawable/ic_accessibility_animation"
@@ -64,3 +65,4 @@
        android:title="@string/experimental_category_title">
    </PreferenceCategory>
</PreferenceScreen>
<!-- LINT.ThenChange(/src/com/android/settings/accessibility/ColorAndMotionScreen.kt:ui_hierarchy) -->
+18 −11
Original line number Diff line number Diff line
@@ -63,9 +63,10 @@ public class ColorAndMotionFragment extends DashboardFragment {
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);

        if (!isCatalystEnabled()) {
            initializeAllPreferences();
            updateSystemPreferences();

            mShortcutFeatureKeys.add(Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED);
            mShortcutFeatureKeys.add(Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED);

@@ -73,6 +74,7 @@ public class ColorAndMotionFragment extends DashboardFragment {
            mSettingsContentObserver.registerKeysToObserverCallback(mShortcutFeatureKeys,
                    key -> updatePreferencesState());
        }
    }

    private void updatePreferencesState() {
        final List<AbstractPreferenceController> controllers = new ArrayList<>();
@@ -84,16 +86,18 @@ public class ColorAndMotionFragment extends DashboardFragment {
    @Override
    public void onStart() {
        super.onStart();

        if (!isCatalystEnabled()) {
            mSettingsContentObserver.register(getContentResolver());
        }
    }

    @Override
    public void onStop() {
        super.onStop();

        if (!isCatalystEnabled()) {
            mSettingsContentObserver.unregister(getContentResolver());
        }
    }

    @Override
    protected int getPreferenceScreenResId() {
@@ -116,9 +120,11 @@ public class ColorAndMotionFragment extends DashboardFragment {
    /**
     * Updates preferences related to system configurations.
     */
    // LINT.IfChange(ui_hierarchy)
    private void updateSystemPreferences() {
        final PreferenceCategory experimentalCategory = getPreferenceScreen().findPreference(
                CATEGORY_EXPERIMENTAL);

        if (ColorDisplayManager.isColorTransformAccelerated(getContext())) {
            getPreferenceScreen().removePreference(experimentalCategory);
        } else {
@@ -130,6 +136,7 @@ public class ColorAndMotionFragment extends DashboardFragment {
            experimentalCategory.addPreference(mToggleDisableAnimationsPreference);
        }
    }
    // LINT.ThenChange(/src/com/android/settings/accessibility/ColorAndMotionScreen.kt:ui_hierarchy)

    @Nullable
    @Override
+29 −4
Original line number Diff line number Diff line
@@ -17,10 +17,15 @@
package com.android.settings.accessibility

import android.content.Context
import android.hardware.display.ColorDisplayManager
import com.android.settings.R
import com.android.settings.Settings.ColorAndMotionActivity
import com.android.settings.display.darkmode.DarkModeScreen
import com.android.settings.flags.Flags
import com.android.settings.utils.makeLaunchIntent
import com.android.settingslib.metadata.PreferenceCategory
import com.android.settingslib.metadata.PreferenceGroup
import com.android.settingslib.metadata.PreferenceHierarchy
import com.android.settingslib.metadata.PreferenceMetadata
import com.android.settingslib.metadata.ProvidePreferenceScreen
import com.android.settingslib.metadata.preferenceHierarchy
@@ -39,14 +44,34 @@ class ColorAndMotionScreen : PreferenceScreenCreator {

    override fun isFlagEnabled(context: Context) = Flags.catalystAccessibilityColorAndMotion()

    override fun hasCompleteHierarchy(): Boolean = false
    override fun hasCompleteHierarchy(): Boolean = true

    override fun fragmentClass() = ColorAndMotionFragment::class.java

    override fun getPreferenceHierarchy(context: Context) =
        preferenceHierarchy(context, this) {
    override fun getPreferenceHierarchy(context: Context): PreferenceHierarchy {
        // LINT.IfChange(ui_hierarchy)
        if (ColorDisplayManager.isColorTransformAccelerated(context)) {
            return preferenceHierarchy(context, this) {
                +DaltonizerPreference()
                +ColorInversionPreference()
                +DarkModeScreen.KEY
                +RemoveAnimationsPreference()
            }
        } else {
            return preferenceHierarchy(context, this) {
                +ColorInversionPreference()
                +DarkModeScreen.KEY
                +PreferenceCategory(
                    "experimental_category",
                    R.string.experimental_category_title
                ) += {
                    +DaltonizerPreference()
                    +RemoveAnimationsPreference()
                }
            }
        }
        // LINT.ThenChange(/res/xml/accessibility_color_and_motion.xml, /src/com/android/settings/accessibility/ColorAndMotionFragment.java:ui_hierarchy)
    }

    override fun getLaunchIntent(context: Context, metadata: PreferenceMetadata?) =
        makeLaunchIntent(context, ColorAndMotionActivity::class.java, metadata?.key)
+81 −0
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.accessibility

import android.app.settings.SettingsEnums
import android.content.Context
import android.provider.Settings
import com.android.settings.R
import com.android.settings.core.SubSettingLauncher
import com.android.settingslib.datastore.HandlerExecutor
import com.android.settingslib.datastore.KeyedObserver
import com.android.settingslib.datastore.SettingsSecureStore
import com.android.settingslib.metadata.PreferenceLifecycleContext
import com.android.settingslib.metadata.PreferenceLifecycleProvider
import com.android.settingslib.metadata.PreferenceMetadata
import com.android.settingslib.metadata.PreferenceSummaryProvider

class ColorInversionPreference : PreferenceMetadata, PreferenceSummaryProvider,
    PreferenceLifecycleProvider {
    override val key: String
        get() = PREFERENCE_KEY
    override val title: Int
        get() = R.string.accessibility_display_inversion_preference_title

    override val icon: Int
        get() = R.drawable.ic_color_inversion

    override val keywords: Int
        get() = R.string.keywords_color_inversion

    private var mSettingsKeyedObserver: KeyedObserver<String>? = null

    override fun intent(context: Context) =
        SubSettingLauncher(context)
            .setDestination(ToggleColorInversionPreferenceFragment::class.java.name)
            .setSourceMetricsCategory(SettingsEnums.ACCESSIBILITY_COLOR_AND_MOTION)
            .toIntent()

    override fun getSummary(context: Context): CharSequence? {
        return AccessibilityUtil.getSummary(
            context,
            SETTING_KEY,
            R.string.color_inversion_state_on, R.string.color_inversion_state_off
        )
    }

    override fun onStart(context: PreferenceLifecycleContext) {
        val observer =
            KeyedObserver<String> { _, _ -> context.notifyPreferenceChange(PREFERENCE_KEY) }
        mSettingsKeyedObserver = observer
        val storage = SettingsSecureStore.get(context)
        storage.addObserver(SETTING_KEY, observer, HandlerExecutor.main)
    }

    override fun onStop(context: PreferenceLifecycleContext) {
        mSettingsKeyedObserver?.let {
            val storage = SettingsSecureStore.get(context)
            storage.removeObserver(SETTING_KEY, it)
            mSettingsKeyedObserver = null
        }
    }

    companion object {
        const val PREFERENCE_KEY = "toggle_inversion_preference"
        const val SETTING_KEY = Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED
    }
}
+2 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.provider.Settings;
import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;

// LINT.IfChange
/** Controller that shows the color inversion summary. */
public class ColorInversionPreferenceController extends BasePreferenceController {

@@ -45,3 +46,4 @@ public class ColorInversionPreferenceController extends BasePreferenceController
        return AVAILABLE;
    }
}
// LINT.ThenChange(/src/com/android/settings/accessibility/ColorInversionPreference.kt)
Loading