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

Commit 9523510a authored by Nergi Rahardi's avatar Nergi Rahardi
Browse files

Exit resolution settings page when display is disconnected

Recording: http://shortn/_s1GqJGJzFb

Bug: 407007697
Test: atest ResolutionPreferenceFragmentTest
Flag: EXEMPT bug fix
Change-Id: I86fee02e8a4fa5ff3dc047fd87e01c9230739533
parent c010e304
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -163,9 +163,7 @@ public class ResolutionPreferenceFragment extends SettingsPreferenceFragmentBase
        }
        var display = mInjector.getDisplay(getDisplayIdArg());
        if (display == null) {
            screen.removeAll();
            mTopOptionsPreference = null;
            mMoreOptionsPreference = null;
            finishFragment();
            return;
        }
        mResolutionPreferences.clear();
+28 −1
Original line number Diff line number Diff line
@@ -20,10 +20,12 @@ import android.content.Context
import android.content.res.Resources
import android.view.View
import android.widget.TextView
import androidx.fragment.app.testing.EmptyFragmentActivity
import androidx.preference.Preference
import androidx.preference.PreferenceCategory
import androidx.preference.PreferenceScreen
import androidx.test.annotation.UiThreadTest
import androidx.test.ext.junit.rules.ActivityScenarioRule
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.android.settings.connecteddevice.display.ResolutionPreferenceFragment.DISPLAY_MODE_LIMIT_OVERRIDE_PROP
import com.android.settings.connecteddevice.display.ResolutionPreferenceFragment.EXTERNAL_DISPLAY_RESOLUTION_SETTINGS_RESOURCE
@@ -31,16 +33,22 @@ import com.android.settings.connecteddevice.display.ResolutionPreferenceFragment
import com.android.settings.connecteddevice.display.ResolutionPreferenceFragment.TOP_OPTIONS_KEY
import com.android.settingslib.widget.SelectorWithWidgetPreference
import com.google.common.truth.Truth.assertThat
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mockito.doReturn
import org.mockito.Mockito.mock
import org.mockito.Mockito.verify
import org.mockito.Mockito.`when`

/** Unit tests for [ResolutionPreferenceFragment]. */
@RunWith(AndroidJUnit4::class)
class ResolutionPreferenceFragmentTest : ExternalDisplayTestBase() {

    @get:Rule
    val activityScenario: ActivityScenarioRule<EmptyFragmentActivity> =
        ActivityScenarioRule(EmptyFragmentActivity::class.java)

    private lateinit var fragment: TestableResolutionPreferenceFragment
    private val metricsLogger: MetricsLogger = mock(MetricsLogger::class.java)

@@ -114,6 +122,22 @@ class ResolutionPreferenceFragmentTest : ExternalDisplayTestBase() {
        verify(mMockedInjector).setUserPreferredDisplayMode(displayId, mode)
    }

    @Test
    @UiThreadTest
    fun testDisplayRemoved_activityIsFinishing() {
        val displayId = mDisplays[0].id
        initFragment(displayId)
        mHandler.flush()

        `when`(mMockedInjector.getDisplay(displayId)).thenReturn(null)
        mListener.update(displayId)
        mHandler.flush()

        activityScenario.scenario.onActivity { activity: EmptyFragmentActivity ->
            assertThat(activity.isFinishing).isTrue()
        }
    }

    private fun runTestModePreferences(): Pair<PreferenceCategory, PreferenceCategory> {
        initFragment(mDisplays[0].id)
        mHandler.flush()
@@ -136,12 +160,15 @@ class ResolutionPreferenceFragmentTest : ExternalDisplayTestBase() {
                mMockedInjector,
                metricsLogger,
            )
        activityScenario.scenario.onActivity { activity: EmptyFragmentActivity ->
            activity.supportFragmentManager.beginTransaction().add(fragment, "tag").commitNow()
        }
        fragment.onCreateCallback(null)
        fragment.onActivityCreatedCallback(null)
        fragment.onStartCallback()
    }

    private class TestableResolutionPreferenceFragment(
    class TestableResolutionPreferenceFragment(
        private val displayId: Int,
        private val preferenceScreen: PreferenceScreen,
        context: Context,