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

Commit ffb6e7e2 authored by chengfeitao's avatar chengfeitao
Browse files

SettingsGoogle: Add ContextualScreenTimeout

Store contextual screen timeout preference when the
corresponding switch is toggled.

Bug: 295232527

Test: atest ExternalSettingsProviderTest
Test: atest ContextualTimeoutPreferenceControllerTest
Change-Id: I093d180f4b11ebb806c4b1949ff5428520c8f40f
parent 1e6e14c2
Loading
Loading
Loading
Loading
+39 −0
Original line number Diff line number Diff line
/*
 * 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.display;

import android.content.Context;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.preference.PreferenceScreen;

import com.android.settings.core.TogglePreferenceController;

/** Feature provider for display settings */
public interface DisplayFeatureProvider {

    /** Create toggle preference */
    @Nullable
    TogglePreferenceController createAdditionalPreference(@NonNull Context context);

    /** Update toggle preference */
    void updatePreference(@Nullable TogglePreferenceController togglePreferenceController);

    /** Add toggle preference to PreferenceScreen */
    void addToScreen(@Nullable TogglePreferenceController togglePreferenceController,
            @NonNull PreferenceScreen screen);
}
+44 −0
Original line number Diff line number Diff line
/*
 * 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.display;

import android.content.Context;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.preference.PreferenceScreen;

import com.android.settings.core.TogglePreferenceController;

public class DisplayFeatureProviderImpl implements DisplayFeatureProvider {

    @Override
    @Nullable
    public TogglePreferenceController createAdditionalPreference(@NonNull Context context) {
        return null;
    }

    @Override
    public void updatePreference(@Nullable TogglePreferenceController togglePreferenceController) {

    }

    @Override
    public void addToScreen(@Nullable TogglePreferenceController togglePreferenceController,
            @NonNull PreferenceScreen screen) {

    }
}
+12 −0
Original line number Diff line number Diff line
@@ -34,9 +34,11 @@ import android.os.UserHandle;
import android.provider.Settings;
import android.util.Log;

import androidx.annotation.Nullable;
import androidx.preference.PreferenceScreen;

import com.android.settings.R;
import com.android.settings.core.TogglePreferenceController;
import com.android.settings.flags.Flags;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.BaseSearchIndexProvider;
@@ -106,6 +108,9 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment
    @VisibleForTesting
    AdaptiveSleepBatterySaverPreferenceController mAdaptiveSleepBatterySaverPreferenceController;

    @Nullable
    TogglePreferenceController mAdditionalTogglePreferenceController;

    public ScreenTimeoutSettings() {
        super();
        mMetricsFeatureProvider = FeatureFactory.getFeatureFactory().getMetricsFeatureProvider();
@@ -133,6 +138,8 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment
                com.android.settingslib.widget.preference.footer.R.layout.preference_footer);
        mPrivacyManager = SensorPrivacyManager.getInstance(context);
        mPrivacyChangedListener = (sensor, enabled) -> mAdaptiveSleepController.updatePreference();
        mAdditionalTogglePreferenceController = FeatureFactory.getFeatureFactory()
                .getDisplayFeatureProvider().createAdditionalPreference(context);
    }

    @Override
@@ -164,6 +171,8 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment
                mReceiver, new IntentFilter(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED));
        mPrivacyManager.addSensorPrivacyListener(CAMERA, mPrivacyChangedListener);
        mIsUserAuthenticated = false;
        FeatureFactory.getFeatureFactory().getDisplayFeatureProvider().updatePreference(
                mAdditionalTogglePreferenceController);
    }

    @Override
@@ -210,6 +219,9 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment
        mPrivacyPreference.setLayoutResource(
                com.android.settingslib.widget.preference.footer.R.layout.preference_footer);

        FeatureFactory.getFeatureFactory().getDisplayFeatureProvider()
                .addToScreen(mAdditionalTogglePreferenceController, screen);

        if (isScreenAttentionAvailable(getContext())) {
            mAdaptiveSleepPermissionController.addToScreen(screen);
            mAdaptiveSleepCameraStatePreferenceController.addToScreen(screen);
+6 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import com.android.settings.connecteddevice.stylus.StylusFeatureProvider
import com.android.settings.dashboard.DashboardFeatureProvider
import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider
import com.android.settings.deviceinfo.hardwareinfo.HardwareInfoFeatureProvider
import com.android.settings.display.DisplayFeatureProvider
import com.android.settings.enterprise.EnterprisePrivacyFeatureProvider
import com.android.settings.fuelgauge.BatterySettingsFeatureProvider
import com.android.settings.fuelgauge.BatteryStatusFeatureProvider
@@ -176,6 +177,11 @@ abstract class FeatureFactory {
     */
    abstract val privateSpaceLoginFeatureProvider: PrivateSpaceLoginFeatureProvider

    /**
     * Gets implementation for Display feature.
     */
    abstract val displayFeatureProvider: DisplayFeatureProvider

    companion object {
        private var _factory: FeatureFactory? = null

+5 −0
Original line number Diff line number Diff line
@@ -45,6 +45,8 @@ import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider
import com.android.settings.dashboard.suggestions.SuggestionFeatureProviderImpl
import com.android.settings.deviceinfo.hardwareinfo.HardwareInfoFeatureProvider
import com.android.settings.deviceinfo.hardwareinfo.HardwareInfoFeatureProviderImpl
import com.android.settings.display.DisplayFeatureProvider
import com.android.settings.display.DisplayFeatureProviderImpl
import com.android.settings.enterprise.EnterprisePrivacyFeatureProviderImpl
import com.android.settings.fuelgauge.BatterySettingsFeatureProviderImpl
import com.android.settings.fuelgauge.BatteryStatusFeatureProviderImpl
@@ -190,4 +192,7 @@ open class FeatureFactoryImpl : FeatureFactory() {
    override val privateSpaceLoginFeatureProvider: PrivateSpaceLoginFeatureProvider by lazy {
        PrivateSpaceLoginFeatureProviderImpl()
    }
    override val displayFeatureProvider: DisplayFeatureProvider by lazy {
        DisplayFeatureProviderImpl()
    }
}
Loading