From 92ce82809ee81fe21d58f9531fa29b0b091eb816 Mon Sep 17 00:00:00 2001 From: Jacky Wang Date: Sat, 12 Oct 2024 16:16:44 +0800 Subject: [PATCH] [Catalyst] Use hybrid mode for display screen Bug: 368359268 Flag: com.android.settings.flags.catalyst_display_settings_screen Test: atest DisplayScreenTest Change-Id: I5eed12ee5c596bee4c21c6e3aa9f3db0e0227bff --- .../android/settings/display/DisplayScreen.kt | 2 ++ .../settings/display/DisplayScreenTest.kt | 34 +++++++++++++++---- 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/com/android/settings/display/DisplayScreen.kt b/src/com/android/settings/display/DisplayScreen.kt index fceb18ae2d6..9886e4ae727 100644 --- a/src/com/android/settings/display/DisplayScreen.kt +++ b/src/com/android/settings/display/DisplayScreen.kt @@ -34,6 +34,8 @@ class DisplayScreen : PreferenceScreenCreator, PreferenceAvailabilityProvider { override fun isFlagEnabled(context: Context) = Flags.catalystDisplaySettingsScreen() + override fun hasCompleteHierarchy() = false + override fun fragmentClass() = DisplaySettings::class.java override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {} diff --git a/tests/robotests/src/com/android/settings/display/DisplayScreenTest.kt b/tests/robotests/src/com/android/settings/display/DisplayScreenTest.kt index 50c706fa0bb..d869b84da4b 100644 --- a/tests/robotests/src/com/android/settings/display/DisplayScreenTest.kt +++ b/tests/robotests/src/com/android/settings/display/DisplayScreenTest.kt @@ -17,24 +17,32 @@ 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.android.internal.widget.LockPatternUtils +import com.android.settings.flags.Flags +import com.android.settings.testutils.FakeFeatureFactory +import com.android.settingslib.preference.CatalystScreenTestCase 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.any import org.mockito.kotlin.doReturn import org.mockito.kotlin.mock import org.mockito.kotlin.stub @RunWith(AndroidJUnit4::class) -class DisplayScreenTest { - val preferenceScreenCreator = DisplayScreen() +class DisplayScreenTest : CatalystScreenTestCase() { + + override val preferenceScreenCreator = DisplayScreen() + + override val flagName: String + get() = Flags.FLAG_CATALYST_DISPLAY_SETTINGS_SCREEN private val mockResources = mock() - private val context = - object : ContextWrapper(ApplicationProvider.getApplicationContext()) { + private val contextWrapper = + object : ContextWrapper(context) { override fun getResources(): Resources = mockResources } @@ -47,13 +55,25 @@ class DisplayScreenTest { fun isAvailable_configTrue_shouldReturnTrue() { mockResources.stub { on { getBoolean(anyInt()) } doReturn true } - assertThat(preferenceScreenCreator.isAvailable(context)).isTrue() + assertThat(preferenceScreenCreator.isAvailable(contextWrapper)).isTrue() } @Test fun isAvailable_configFalse_shouldReturnFalse() { mockResources.stub { on { getBoolean(anyInt()) } doReturn false } - assertThat(preferenceScreenCreator.isAvailable(context)).isFalse() + assertThat(preferenceScreenCreator.isAvailable(contextWrapper)).isFalse() + } + + override fun migration() { + // avoid UnsupportedOperationException when getDisplay from context + System.setProperty("robolectric.createActivityContexts", "true") + + val lockPatternUtils = mock { on { isSecure(anyInt()) } doReturn true } + FakeFeatureFactory.setupForTest().securityFeatureProvider.stub { + on { getLockPatternUtils(any()) } doReturn lockPatternUtils + } + + super.migration() } }