Merge "[Device Supervision] Implement createConfirmSupervisionCredentialsIntent API" into main
This commit is contained in:
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.android.settings.supervision
|
||||
|
||||
import android.app.Activity
|
||||
import android.app.supervision.flags.Flags
|
||||
import android.content.Context
|
||||
import android.platform.test.annotations.DisableFlags
|
||||
@@ -24,6 +25,7 @@ import androidx.fragment.app.testing.FragmentScenario
|
||||
import androidx.preference.Preference
|
||||
import androidx.test.core.app.ApplicationProvider
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import com.android.settings.supervision.SupervisionMainSwitchPreference.Companion.REQUEST_CODE_CONFIRM_SUPERVISION_CREDENTIALS
|
||||
import com.android.settingslib.widget.MainSwitchPreference
|
||||
import com.google.common.truth.Truth.assertThat
|
||||
import org.junit.Rule
|
||||
@@ -57,7 +59,7 @@ class SupervisionDashboardScreenTest {
|
||||
|
||||
@Test
|
||||
@EnableFlags(Flags.FLAG_ENABLE_SUPERVISION_SETTINGS_SCREEN)
|
||||
fun toggleMainSwitch_disablesChildPreferences() {
|
||||
fun toggleMainSwitch_pinVerificationSucceeded_enablesChildPreferences() {
|
||||
FragmentScenario.launchInContainer(preferenceScreenCreator.fragmentClass()).onFragment {
|
||||
fragment ->
|
||||
val mainSwitchPreference =
|
||||
@@ -68,8 +70,38 @@ class SupervisionDashboardScreenTest {
|
||||
assertThat(childPreference.isEnabled).isFalse()
|
||||
|
||||
mainSwitchPreference.performClick()
|
||||
// Pretend the PIN verification succeeded.
|
||||
fragment.onActivityResult(
|
||||
requestCode = REQUEST_CODE_CONFIRM_SUPERVISION_CREDENTIALS,
|
||||
resultCode = Activity.RESULT_OK,
|
||||
data = null,
|
||||
)
|
||||
|
||||
assertThat(childPreference.isEnabled).isTrue()
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
@EnableFlags(Flags.FLAG_ENABLE_SUPERVISION_SETTINGS_SCREEN)
|
||||
fun toggleMainSwitch_pinVerificationFailed_childPreferencesRemainDisabled() {
|
||||
FragmentScenario.launchInContainer(preferenceScreenCreator.fragmentClass()).onFragment {
|
||||
fragment ->
|
||||
val mainSwitchPreference =
|
||||
fragment.findPreference<MainSwitchPreference>(SupervisionMainSwitchPreference.KEY)!!
|
||||
val childPreference =
|
||||
fragment.findPreference<Preference>(SupervisionPinManagementScreen.KEY)!!
|
||||
|
||||
assertThat(childPreference.isEnabled).isFalse()
|
||||
|
||||
mainSwitchPreference.performClick()
|
||||
// Pretend the PIN verification failed.
|
||||
fragment.onActivityResult(
|
||||
requestCode = REQUEST_CODE_CONFIRM_SUPERVISION_CREDENTIALS,
|
||||
resultCode = Activity.RESULT_CANCELED,
|
||||
data = null,
|
||||
)
|
||||
|
||||
assertThat(childPreference.isEnabled).isFalse()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -15,25 +15,33 @@
|
||||
*/
|
||||
package com.android.settings.supervision
|
||||
|
||||
import android.app.Activity
|
||||
import android.app.supervision.SupervisionManager
|
||||
import android.content.Context
|
||||
import android.content.ContextWrapper
|
||||
import android.content.Intent
|
||||
import androidx.preference.Preference
|
||||
import androidx.test.core.app.ApplicationProvider
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import com.android.settings.supervision.SupervisionMainSwitchPreference.Companion.REQUEST_CODE_CONFIRM_SUPERVISION_CREDENTIALS
|
||||
import com.android.settingslib.metadata.PreferenceLifecycleContext
|
||||
import com.android.settingslib.preference.createAndBindWidget
|
||||
import com.android.settingslib.widget.MainSwitchPreference
|
||||
import com.google.common.truth.Truth.assertThat
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.mockito.kotlin.argumentCaptor
|
||||
import org.mockito.kotlin.doReturn
|
||||
import org.mockito.kotlin.eq
|
||||
import org.mockito.kotlin.mock
|
||||
import org.mockito.kotlin.never
|
||||
import org.mockito.kotlin.stub
|
||||
import org.mockito.kotlin.verify
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class SupervisionMainSwitchPreferenceTest {
|
||||
private val preference = SupervisionMainSwitchPreference()
|
||||
|
||||
private val mockLifeCycleContext = mock<PreferenceLifecycleContext>()
|
||||
private val mockSupervisionManager = mock<SupervisionManager>()
|
||||
|
||||
private val appContext: Context = ApplicationProvider.getApplicationContext()
|
||||
@@ -46,6 +54,13 @@ class SupervisionMainSwitchPreferenceTest {
|
||||
}
|
||||
}
|
||||
|
||||
private val preference = SupervisionMainSwitchPreference(context)
|
||||
|
||||
@Before
|
||||
fun setUp() {
|
||||
preference.onCreate(mockLifeCycleContext)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun checked_supervisionEnabled_returnTrue() {
|
||||
setSupervisionEnabled(true)
|
||||
@@ -61,7 +76,7 @@ class SupervisionMainSwitchPreferenceTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
fun toggleOn() {
|
||||
fun toggleOn_triggersPinVerification() {
|
||||
setSupervisionEnabled(false)
|
||||
val widget = getMainSwitchPreference()
|
||||
|
||||
@@ -69,26 +84,90 @@ class SupervisionMainSwitchPreferenceTest {
|
||||
|
||||
widget.performClick()
|
||||
|
||||
verifyConfirmSupervisionCredentialsActivityStarted()
|
||||
assertThat(widget.isChecked).isFalse()
|
||||
verify(mockSupervisionManager, never()).setSupervisionEnabled(false)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun toggleOn_pinVerificationSucceeded_supervisionEnabled() {
|
||||
setSupervisionEnabled(false)
|
||||
val widget = getMainSwitchPreference()
|
||||
|
||||
assertThat(widget.isChecked).isFalse()
|
||||
|
||||
preference.onActivityResult(
|
||||
mockLifeCycleContext,
|
||||
REQUEST_CODE_CONFIRM_SUPERVISION_CREDENTIALS,
|
||||
Activity.RESULT_OK,
|
||||
null,
|
||||
)
|
||||
|
||||
assertThat(widget.isChecked).isTrue()
|
||||
verify(mockSupervisionManager).setSupervisionEnabled(true)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun toggleOff() {
|
||||
fun toggleOff_pinVerificationSucceeded_supervisionDisabled() {
|
||||
setSupervisionEnabled(true)
|
||||
val widget = getMainSwitchPreference()
|
||||
|
||||
assertThat(widget.isChecked).isTrue()
|
||||
|
||||
widget.performClick()
|
||||
preference.onActivityResult(
|
||||
mockLifeCycleContext,
|
||||
REQUEST_CODE_CONFIRM_SUPERVISION_CREDENTIALS,
|
||||
Activity.RESULT_OK,
|
||||
null,
|
||||
)
|
||||
|
||||
assertThat(widget.isChecked).isFalse()
|
||||
verify(mockSupervisionManager).setSupervisionEnabled(false)
|
||||
}
|
||||
|
||||
private fun getMainSwitchPreference(): MainSwitchPreference =
|
||||
preference.createAndBindWidget(context)
|
||||
@Test
|
||||
fun toggleOff_pinVerificationFailed_supervisionNotEnabled() {
|
||||
setSupervisionEnabled(true)
|
||||
val widget = getMainSwitchPreference()
|
||||
|
||||
assertThat(widget.isChecked).isTrue()
|
||||
|
||||
preference.onActivityResult(
|
||||
mockLifeCycleContext,
|
||||
REQUEST_CODE_CONFIRM_SUPERVISION_CREDENTIALS,
|
||||
Activity.RESULT_CANCELED,
|
||||
null,
|
||||
)
|
||||
|
||||
assertThat(widget.isChecked).isTrue()
|
||||
verify(mockSupervisionManager, never()).setSupervisionEnabled(true)
|
||||
}
|
||||
|
||||
private fun setSupervisionEnabled(enabled: Boolean) =
|
||||
mockSupervisionManager.stub { on { isSupervisionEnabled } doReturn enabled }
|
||||
|
||||
private fun getMainSwitchPreference(): MainSwitchPreference {
|
||||
val widget: MainSwitchPreference = preference.createAndBindWidget(context)
|
||||
|
||||
mockLifeCycleContext.stub {
|
||||
on { findPreference<Preference>(SupervisionMainSwitchPreference.KEY) } doReturn widget
|
||||
on {
|
||||
requirePreference<MainSwitchPreference>(SupervisionMainSwitchPreference.KEY)
|
||||
} doReturn widget
|
||||
}
|
||||
return widget
|
||||
}
|
||||
|
||||
private fun verifyConfirmSupervisionCredentialsActivityStarted() {
|
||||
val intentCaptor = argumentCaptor<Intent>()
|
||||
verify(mockLifeCycleContext)
|
||||
.startActivityForResult(
|
||||
intentCaptor.capture(),
|
||||
eq(REQUEST_CODE_CONFIRM_SUPERVISION_CREDENTIALS),
|
||||
eq(null),
|
||||
)
|
||||
assertThat(intentCaptor.allValues.size).isEqualTo(1)
|
||||
assertThat(intentCaptor.firstValue.component?.className)
|
||||
.isEqualTo(ConfirmSupervisionCredentialsActivity::class.java.name)
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user