From b31c54b6f4065161245e97e07c650aa46c70a679 Mon Sep 17 00:00:00 2001 From: Sunny Shao Date: Mon, 7 Oct 2024 16:41:24 +0800 Subject: [PATCH] Migrate DisplayScreen Add the skeleton of the DisplayScreen Test: atest DisplayScreenTest Bug: 368359268 Flag: com.android.settings.flags.catalyst_display_settings_screen Change-Id: I806504ae839ba0a53320fd94fb4fe21a52dc249b --- src/com/android/settings/DisplaySettings.java | 10 ++++ .../android/settings/display/DisplayScreen.kt | 47 +++++++++++++++ .../settings/display/DisplayScreenTest.kt | 59 +++++++++++++++++++ 3 files changed, 116 insertions(+) create mode 100644 src/com/android/settings/display/DisplayScreen.kt create mode 100644 tests/robotests/src/com/android/settings/display/DisplayScreenTest.kt diff --git a/src/com/android/settings/DisplaySettings.java b/src/com/android/settings/DisplaySettings.java index 97b9aae0cd1..a0950066770 100644 --- a/src/com/android/settings/DisplaySettings.java +++ b/src/com/android/settings/DisplaySettings.java @@ -20,9 +20,13 @@ import android.app.settings.SettingsEnums; import android.content.Context; import android.os.Bundle; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + import com.android.settings.dashboard.DashboardFragment; import com.android.settings.display.BrightnessLevelPreferenceController; import com.android.settings.display.CameraGesturePreferenceController; +import com.android.settings.display.DisplayScreen; import com.android.settings.display.LiftToWakePreferenceController; import com.android.settings.display.ShowOperatorNamePreferenceController; import com.android.settings.display.TapToWakePreferenceController; @@ -92,4 +96,10 @@ public class DisplaySettings extends DashboardFragment { return buildPreferenceControllers(context, null); } }; + + @Nullable + @Override + public String getPreferenceScreenBindingKey(@NonNull Context context) { + return DisplayScreen.KEY; + } } diff --git a/src/com/android/settings/display/DisplayScreen.kt b/src/com/android/settings/display/DisplayScreen.kt new file mode 100644 index 00000000000..fceb18ae2d6 --- /dev/null +++ b/src/com/android/settings/display/DisplayScreen.kt @@ -0,0 +1,47 @@ +/* + * 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 com.android.settings.DisplaySettings +import com.android.settings.R +import com.android.settings.flags.Flags +import com.android.settingslib.metadata.PreferenceAvailabilityProvider +import com.android.settingslib.metadata.ProvidePreferenceScreen +import com.android.settingslib.metadata.preferenceHierarchy +import com.android.settingslib.preference.PreferenceScreenCreator + +@ProvidePreferenceScreen +class DisplayScreen : PreferenceScreenCreator, PreferenceAvailabilityProvider { + override val key: String + get() = KEY + + override val title: Int + get() = R.string.display_settings + + override fun isFlagEnabled(context: Context) = Flags.catalystDisplaySettingsScreen() + + override fun fragmentClass() = DisplaySettings::class.java + + override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {} + + override fun isAvailable(context: Context) = + context.resources.getBoolean(R.bool.config_show_top_level_display) + + companion object { + const val KEY = "display_settings_screen" + } +} diff --git a/tests/robotests/src/com/android/settings/display/DisplayScreenTest.kt b/tests/robotests/src/com/android/settings/display/DisplayScreenTest.kt new file mode 100644 index 00000000000..50c706fa0bb --- /dev/null +++ b/tests/robotests/src/com/android/settings/display/DisplayScreenTest.kt @@ -0,0 +1,59 @@ +/* + * 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.ContextWrapper +import android.content.res.Resources +import androidx.test.core.app.ApplicationProvider +import androidx.test.ext.junit.runners.AndroidJUnit4 +import com.google.common.truth.Truth.assertThat +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.ArgumentMatchers.anyInt +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.mock +import org.mockito.kotlin.stub + +@RunWith(AndroidJUnit4::class) +class DisplayScreenTest { + val preferenceScreenCreator = DisplayScreen() + + private val mockResources = mock() + + private val context = + object : ContextWrapper(ApplicationProvider.getApplicationContext()) { + override fun getResources(): Resources = mockResources + } + + @Test + fun key() { + assertThat(preferenceScreenCreator.key).isEqualTo(DisplayScreen.KEY) + } + + @Test + fun isAvailable_configTrue_shouldReturnTrue() { + mockResources.stub { on { getBoolean(anyInt()) } doReturn true } + + assertThat(preferenceScreenCreator.isAvailable(context)).isTrue() + } + + @Test + fun isAvailable_configFalse_shouldReturnFalse() { + mockResources.stub { on { getBoolean(anyInt()) } doReturn false } + + assertThat(preferenceScreenCreator.isAvailable(context)).isFalse() + } +}