Merge "SettingsGoogle: Add ContextualScreenTimeout" into main

This commit is contained in:
Chengfei Tao
2024-02-13 01:44:06 +00:00
committed by Android (Google) Code Review
8 changed files with 125 additions and 0 deletions

View File

@@ -0,0 +1,39 @@
/*
* 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);
}

View File

@@ -0,0 +1,44 @@
/*
* 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) {
}
}

View File

@@ -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);

View File

@@ -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

View File

@@ -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()
}
}

View File

@@ -33,6 +33,7 @@ import com.android.settings.dashboard.DashboardFeatureProvider;
import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider;
import com.android.settings.deviceinfo.hardwareinfo.HardwareInfoFeatureProvider;
import com.android.settings.deviceinfo.hardwareinfo.HardwareInfoFeatureProviderImpl;
import com.android.settings.display.DisplayFeatureProvider;
import com.android.settings.enterprise.EnterprisePrivacyFeatureProvider;
import com.android.settings.fuelgauge.BatterySettingsFeatureProvider;
import com.android.settings.fuelgauge.BatteryStatusFeatureProvider;
@@ -101,6 +102,7 @@ public class FakeFeatureFactory extends FeatureFactory {
public OnboardingFeatureProvider mOnboardingFeatureProvider;
public FastPairFeatureProvider mFastPairFeatureProvider;
public PrivateSpaceLoginFeatureProvider mPrivateSpaceLoginFeatureProvider;
public DisplayFeatureProvider mDisplayFeatureProvider;
/**
* Call this in {@code @Before} method of the test class to use fake factory.
@@ -149,6 +151,7 @@ public class FakeFeatureFactory extends FeatureFactory {
mOnboardingFeatureProvider = mock(OnboardingFeatureProvider.class);
mFastPairFeatureProvider = mock(FastPairFeatureProvider.class);
mPrivateSpaceLoginFeatureProvider = mock(PrivateSpaceLoginFeatureProvider.class);
mDisplayFeatureProvider = mock(DisplayFeatureProvider.class);
}
@Override
@@ -331,5 +334,10 @@ public class FakeFeatureFactory extends FeatureFactory {
public PrivateSpaceLoginFeatureProvider getPrivateSpaceLoginFeatureProvider() {
return mPrivateSpaceLoginFeatureProvider;
}
@Override
public DisplayFeatureProvider getDisplayFeatureProvider() {
return mDisplayFeatureProvider;
}
}

View File

@@ -30,6 +30,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
@@ -146,4 +147,6 @@ class FakeFeatureFactory : FeatureFactory() {
get() = TODO("Not yet implemented")
override val privateSpaceLoginFeatureProvider: PrivateSpaceLoginFeatureProvider
get() = TODO("Not yet implemented")
override val displayFeatureProvider: DisplayFeatureProvider
get() = TODO("Not yet implemented")
}

View File

@@ -33,6 +33,7 @@ import com.android.settings.dashboard.DashboardFeatureProvider;
import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider;
import com.android.settings.deviceinfo.hardwareinfo.HardwareInfoFeatureProvider;
import com.android.settings.deviceinfo.hardwareinfo.HardwareInfoFeatureProviderImpl;
import com.android.settings.display.DisplayFeatureProvider;
import com.android.settings.enterprise.EnterprisePrivacyFeatureProvider;
import com.android.settings.fuelgauge.BatterySettingsFeatureProvider;
import com.android.settings.fuelgauge.BatteryStatusFeatureProvider;
@@ -100,6 +101,7 @@ public class FakeFeatureFactory extends FeatureFactory {
public OnboardingFeatureProvider mOnboardingFeatureProvider;
public FastPairFeatureProvider mFastPairFeatureProvider;
public PrivateSpaceLoginFeatureProvider mPrivateSpaceLoginFeatureProvider;
public DisplayFeatureProvider mDisplayFeatureProvider;
/** Call this in {@code @Before} method of the test class to use fake factory. */
public static FakeFeatureFactory setupForTest() {
@@ -150,6 +152,7 @@ public class FakeFeatureFactory extends FeatureFactory {
mOnboardingFeatureProvider = mock(OnboardingFeatureProvider.class);
mFastPairFeatureProvider = mock(FastPairFeatureProvider.class);
mPrivateSpaceLoginFeatureProvider = mock(PrivateSpaceLoginFeatureProvider.class);
mDisplayFeatureProvider = mock(DisplayFeatureProvider.class);
}
@Override
@@ -332,4 +335,9 @@ public class FakeFeatureFactory extends FeatureFactory {
public PrivateSpaceLoginFeatureProvider getPrivateSpaceLoginFeatureProvider() {
return mPrivateSpaceLoginFeatureProvider;
}
@Override
public DisplayFeatureProvider getDisplayFeatureProvider() {
return mDisplayFeatureProvider;
}
}