[Catalyst] Use hybrid mode for display screen

Bug: 368359268
Flag: com.android.settings.flags.catalyst_display_settings_screen
Test: atest DisplayScreenTest
Change-Id: I5eed12ee5c596bee4c21c6e3aa9f3db0e0227bff
diff --git a/src/com/android/settings/display/DisplayScreen.kt b/src/com/android/settings/display/DisplayScreen.kt
index fceb18a..9886e4a 100644
--- a/src/com/android/settings/display/DisplayScreen.kt
+++ b/src/com/android/settings/display/DisplayScreen.kt
@@ -34,6 +34,8 @@
 
     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 50c706f..d869b84 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 @@
 
 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<Resources>()
 
-    private val context =
-        object : ContextWrapper(ApplicationProvider.getApplicationContext()) {
+    private val contextWrapper =
+        object : ContextWrapper(context) {
             override fun getResources(): Resources = mockResources
         }
 
@@ -47,13 +55,25 @@
     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<LockPatternUtils> { on { isSecure(anyInt()) } doReturn true }
+        FakeFeatureFactory.setupForTest().securityFeatureProvider.stub {
+            on { getLockPatternUtils(any()) } doReturn lockPatternUtils
+        }
+
+        super.migration()
     }
 }