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

Commit 497e4e4e authored by Xiaomiao Zhang's avatar Xiaomiao Zhang Committed by Android (Google) Code Review
Browse files

Merge "Update to use the inherited registerForActivityResult function in safesitess." into main

parents ba40639b 55f3c9d8
Loading
Loading
Loading
Loading
+12 −25
Original line number Diff line number Diff line
@@ -18,6 +18,10 @@ package com.android.settings.supervision
import android.app.Activity
import android.content.Context
import android.content.Intent
import androidx.activity.result.ActivityResult
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult
import androidx.annotation.VisibleForTesting
import androidx.preference.Preference
import com.android.settings.R
import com.android.settingslib.datastore.Permissions
@@ -41,7 +45,7 @@ sealed class SupervisionSafeSitesPreference(
    PreferenceLifecycleProvider {
    private lateinit var lifeCycleContext: PreferenceLifecycleContext

    abstract val supervisionCredentialRequestCode: Int
    private lateinit var supervisionCredentialLauncher: ActivityResultLauncher<Intent>

    override fun storage(context: Context) = dataStore

@@ -66,16 +70,13 @@ sealed class SupervisionSafeSitesPreference(

    override fun onCreate(context: PreferenceLifecycleContext) {
        lifeCycleContext = context
        supervisionCredentialLauncher =
            context.registerForActivityResult(StartActivityForResult(), ::onConfirmCredentials)
    }

    override fun onRadioButtonClicked(emitter: SelectorWithWidgetPreference) {
        val intent = Intent(lifeCycleContext, ConfirmSupervisionCredentialsActivity::class.java)

        lifeCycleContext.startActivityForResult(
            intent,
            supervisionCredentialRequestCode,
            /* options= */ null,
        )
        supervisionCredentialLauncher.launch(intent)
    }

    override fun bind(preference: Preference, metadata: PreferenceMetadata) {
@@ -86,24 +87,16 @@ sealed class SupervisionSafeSitesPreference(
        }
    }

    override fun onActivityResult(
        context: PreferenceLifecycleContext,
        requestCode: Int,
        resultCode: Int,
        data: Intent?,
    ): Boolean {
        if (requestCode != supervisionCredentialRequestCode) return false
        if (resultCode == Activity.RESULT_OK) {
            val preference = context.findPreference<SelectorWithWidgetPreference>(key)
            // Iterate through the SafeSites options and update the checked status.
    @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
    fun onConfirmCredentials(result: ActivityResult) {
        if (result.resultCode == Activity.RESULT_OK) {
            val preference = lifeCycleContext.findPreference<SelectorWithWidgetPreference>(key)
            preference?.parent?.forEachRecursively {
                if (it is SelectorWithWidgetPreference) {
                    it.isChecked = it.key == key
                }
            }
            return true
        }
        return false
    }
}

@@ -119,11 +112,8 @@ class SupervisionBlockExplicitSitesPreference(dataStore: SupervisionSafeSitesDat
    override val summary
        get() = R.string.supervision_web_content_filters_browser_block_explicit_sites_summary

    override val supervisionCredentialRequestCode = REQUEST_CODE_SUPERVISION_CREDENTIALS

    companion object {
        const val KEY = "web_content_filters_browser_block_explicit_sites"
        const val REQUEST_CODE_SUPERVISION_CREDENTIALS = 10
    }
}

@@ -136,10 +126,7 @@ class SupervisionAllowAllSitesPreference(dataStore: SupervisionSafeSitesDataStor
    override val title
        get() = R.string.supervision_web_content_filters_browser_allow_all_sites_title

    override val supervisionCredentialRequestCode = REQUEST_CODE_SUPERVISION_CREDENTIALS

    companion object {
        const val KEY = "web_content_filters_browser_allow_all_sites"
        const val REQUEST_CODE_SUPERVISION_CREDENTIALS = 11
    }
}
+33 −41
Original line number Diff line number Diff line
@@ -21,6 +21,9 @@ import android.content.Intent
import android.provider.Settings
import android.provider.Settings.Secure.BROWSER_CONTENT_FILTERS_ENABLED
import android.provider.Settings.SettingNotFoundException
import androidx.activity.result.ActivityResult
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult
import androidx.preference.Preference
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
@@ -34,16 +37,19 @@ import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mockito.mock
import org.mockito.Mockito.`when`
import org.mockito.kotlin.any
import org.mockito.kotlin.argumentCaptor
import org.mockito.kotlin.doReturn
import org.mockito.kotlin.eq
import org.mockito.kotlin.stub
import org.mockito.kotlin.verify

@RunWith(AndroidJUnit4::class)
class SupervisionSafeSitesPreferenceTest {
    private val mockLifeCycleContext = mock(PreferenceLifecycleContext::class.java)
    private val context: Context = ApplicationProvider.getApplicationContext()

    private lateinit var mockLifeCycleContext: PreferenceLifecycleContext
    private lateinit var mockActivityResultLauncher: ActivityResultLauncher<Intent>
    private lateinit var dataStore: SupervisionSafeSitesDataStore
    private lateinit var allowAllSitesPreference: SupervisionAllowAllSitesPreference
    private lateinit var blockExplicitSitesPreference: SupervisionBlockExplicitSitesPreference
@@ -51,6 +57,10 @@ class SupervisionSafeSitesPreferenceTest {
    @Before
    fun setUp() {
        dataStore = SupervisionSafeSitesDataStore(context)
        mockLifeCycleContext = mock(PreferenceLifecycleContext::class.java)
        mockActivityResultLauncher =
            mock(ActivityResultLauncher::class.java) as ActivityResultLauncher<Intent>
        mockConfirmSupervisionCredentialsActivity()
        allowAllSitesPreference = SupervisionAllowAllSitesPreference(dataStore)
        allowAllSitesPreference.onCreate(mockLifeCycleContext)
        blockExplicitSitesPreference = SupervisionBlockExplicitSitesPreference(dataStore)
@@ -101,19 +111,19 @@ class SupervisionSafeSitesPreferenceTest {

        blockExplicitSitesWidget.performClick()

        verifyConfirmSupervisionCredentialsActivityStarted(
            SupervisionBlockExplicitSitesPreference.REQUEST_CODE_SUPERVISION_CREDENTIALS
        verifyConfirmSupervisionCredentialsActivity()
        blockExplicitSitesPreference.onConfirmCredentials(
            ActivityResult(Activity.RESULT_CANCELED, null)
        )

        val result =
            blockExplicitSitesPreference.onActivityResult(
                mockLifeCycleContext,
                SupervisionBlockExplicitSitesPreference.REQUEST_CODE_SUPERVISION_CREDENTIALS,
                Activity.RESULT_CANCELED,
                null,
        assertThat(blockExplicitSitesWidget.isChecked).isFalse()
        assertThat(
                Settings.Secure.getInt(
                    context.getContentResolver(),
                    BROWSER_CONTENT_FILTERS_ENABLED,
                )

        assertThat(result).isFalse()
            )
            .isEqualTo(0)
    }

    @Test
@@ -124,19 +134,9 @@ class SupervisionSafeSitesPreferenceTest {

        blockExplicitSitesWidget.performClick()

        verifyConfirmSupervisionCredentialsActivityStarted(
            SupervisionBlockExplicitSitesPreference.REQUEST_CODE_SUPERVISION_CREDENTIALS
        )
        verifyConfirmSupervisionCredentialsActivity()
        blockExplicitSitesPreference.onConfirmCredentials(ActivityResult(Activity.RESULT_OK, null))

        val result =
            blockExplicitSitesPreference.onActivityResult(
                mockLifeCycleContext,
                SupervisionBlockExplicitSitesPreference.REQUEST_CODE_SUPERVISION_CREDENTIALS,
                Activity.RESULT_OK,
                null,
            )

        assertThat(result).isTrue()
        assertThat(blockExplicitSitesWidget.isChecked).isTrue()
        assertThat(
                Settings.Secure.getInt(
@@ -154,19 +154,9 @@ class SupervisionSafeSitesPreferenceTest {
        assertThat(allowAllSitesWidget.isChecked).isFalse()
        allowAllSitesWidget.performClick()

        verifyConfirmSupervisionCredentialsActivityStarted(
            SupervisionAllowAllSitesPreference.REQUEST_CODE_SUPERVISION_CREDENTIALS
        )

        val result =
            allowAllSitesPreference.onActivityResult(
                mockLifeCycleContext,
                SupervisionAllowAllSitesPreference.REQUEST_CODE_SUPERVISION_CREDENTIALS,
                Activity.RESULT_OK,
                null,
            )
        verifyConfirmSupervisionCredentialsActivity()
        allowAllSitesPreference.onConfirmCredentials(ActivityResult(Activity.RESULT_OK, null))

        assertThat(result).isTrue()
        assertThat(allowAllSitesWidget.isChecked).isTrue()
        assertThat(
                Settings.Secure.getInt(
@@ -202,14 +192,16 @@ class SupervisionSafeSitesPreferenceTest {
        return widget
    }

    private fun verifyConfirmSupervisionCredentialsActivityStarted(requestCode: Int) {
        val intentCaptor = argumentCaptor<Intent>()
    private fun mockConfirmSupervisionCredentialsActivity() {
        `when`(mockLifeCycleContext.registerForActivityResult(any<StartActivityForResult>(), any()))
            .thenReturn(mockActivityResultLauncher)
    }

        verify(mockLifeCycleContext)
            .startActivityForResult(intentCaptor.capture(), eq(requestCode), eq(null))
    private fun verifyConfirmSupervisionCredentialsActivity() {
        val intentCaptor = argumentCaptor<Intent>()
        verify(mockActivityResultLauncher).launch(intentCaptor.capture())

        assertThat(intentCaptor.allValues.size).isEqualTo(1)

        assertThat(intentCaptor.firstValue.component?.className)
            .isEqualTo(ConfirmSupervisionCredentialsActivity::class.java.name)
    }
+11 −11
Original line number Diff line number Diff line
@@ -81,18 +81,18 @@ class SupervisionWebContentFiltersScreenTest {
                    fragment.findPreference<SelectorWithWidgetPreference>(
                        SupervisionBlockExplicitSitesPreference.KEY
                    )!!

                assertThat(allowAllSitesPreference.isChecked).isTrue()
                assertThat(blockExplicitSitesPreference.isChecked).isFalse()

                blockExplicitSitesPreference.performClick()

                // Pretend the PIN verification succeeded.
                fragment.onActivityResult(
                    requestCode =
                        SupervisionBlockExplicitSitesPreference
                            .REQUEST_CODE_SUPERVISION_CREDENTIALS,
                    resultCode = Activity.RESULT_OK,
                    data = null,
                val activity = shadowOf(fragment.activity)
                activity.receiveResult(
                    activity.nextStartedActivityForResult.intent,
                    Activity.RESULT_OK,
                    null,
                )

                assertThat(blockExplicitSitesPreference.isChecked).isTrue()
@@ -120,11 +120,11 @@ class SupervisionWebContentFiltersScreenTest {
                blockExplicitSitesPreference.performClick()

                // Pretend the PIN verification succeeded.
                fragment.onActivityResult(
                    requestCode =
                        SupervisionAllowAllSitesPreference.REQUEST_CODE_SUPERVISION_CREDENTIALS,
                    resultCode = Activity.RESULT_CANCELED,
                    data = null,
                val activity = shadowOf(fragment.activity)
                activity.receiveResult(
                    activity.nextStartedActivityForResult.intent,
                    Activity.RESULT_CANCELED,
                    null,
                )

                assertThat(blockExplicitSitesPreference.isChecked).isFalse()