diff --git a/res/values/strings.xml b/res/values/strings.xml index 9fbce465110..b54b82222bf 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -9834,13 +9834,6 @@ Can access all files - - Voice activation apps - - Allow voice activation - - Voice activation turns-on approved apps, hands-free, using voice command. Built-in adaptive sensing ensures data stays private only to you.\n\nMore about protected adaptive sensing - Full screen notifications diff --git a/res/xml/special_access.xml b/res/xml/special_access.xml index 572345c404e..4caf7ac6d18 100644 --- a/res/xml/special_access.xml +++ b/res/xml/special_access.xml @@ -116,11 +116,6 @@ android:title="@string/full_screen_intent_title" settings:controller="com.android.settings.spa.app.specialaccess.UseFullScreenIntentPreferenceController" /> - - appTasks = mActivityManager.getAppTasks(); + for (var appTask : appTasks) { + if (!appTask.getTaskInfo().isVisible()) { + appTask.finishAndRemoveTask(); + } + } + } } diff --git a/src/com/android/settings/spa/SettingsSpaEnvironment.kt b/src/com/android/settings/spa/SettingsSpaEnvironment.kt index f7013230db0..b844d440ea3 100644 --- a/src/com/android/settings/spa/SettingsSpaEnvironment.kt +++ b/src/com/android/settings/spa/SettingsSpaEnvironment.kt @@ -41,7 +41,6 @@ import com.android.settings.spa.app.specialaccess.PictureInPictureListProvider import com.android.settings.spa.app.specialaccess.SpecialAppAccessPageProvider import com.android.settings.spa.app.specialaccess.TurnScreenOnAppsAppListProvider import com.android.settings.spa.app.specialaccess.UseFullScreenIntentAppListProvider -import com.android.settings.spa.app.specialaccess.VoiceActivationAppsListProvider import com.android.settings.spa.app.specialaccess.WifiControlAppListProvider import com.android.settings.spa.app.storage.StorageAppListPageProvider import com.android.settings.spa.core.instrumentation.SpaLogProvider @@ -76,7 +75,6 @@ open class SettingsSpaEnvironment(context: Context) : SpaEnvironment(context) { PictureInPictureListProvider, InstallUnknownAppsListProvider, AlarmsAndRemindersAppListProvider, - VoiceActivationAppsListProvider, WifiControlAppListProvider, NfcTagAppsSettingsProvider, LongBackgroundTasksAppListProvider, diff --git a/src/com/android/settings/spa/app/appinfo/AppInfoSettings.kt b/src/com/android/settings/spa/app/appinfo/AppInfoSettings.kt index c12915c6a0d..2fd8fc59edf 100644 --- a/src/com/android/settings/spa/app/appinfo/AppInfoSettings.kt +++ b/src/com/android/settings/spa/app/appinfo/AppInfoSettings.kt @@ -43,7 +43,6 @@ import com.android.settings.spa.app.specialaccess.DisplayOverOtherAppsAppListPro import com.android.settings.spa.app.specialaccess.InstallUnknownAppsListProvider import com.android.settings.spa.app.specialaccess.ModifySystemSettingsAppListProvider import com.android.settings.spa.app.specialaccess.PictureInPictureListProvider -import com.android.settings.spa.app.specialaccess.VoiceActivationAppsListProvider import com.android.settingslib.spa.framework.common.SettingsPageProvider import com.android.settingslib.spa.framework.compose.navigator import com.android.settingslib.spa.widget.scaffold.RegularScaffold @@ -167,9 +166,6 @@ private fun AppInfoSettings(packageInfoPresenter: PackageInfoPresenter) { InstallUnknownAppsListProvider.InfoPageEntryItem(app) InteractAcrossProfilesDetailsPreference(app) AlarmsAndRemindersAppListProvider.InfoPageEntryItem(app) - if (Flags.enableVoiceActivationAppsInSettings()) { - VoiceActivationAppsListProvider.InfoPageEntryItem(app) - } if (Flags.enablePerformBackupTasksInSettings()) { BackupTasksAppsListProvider.InfoPageEntryItem(app) } diff --git a/src/com/android/settings/spa/app/specialaccess/SpecialAppAccess.kt b/src/com/android/settings/spa/app/specialaccess/SpecialAppAccess.kt index 4f791731fa1..aabc9f80397 100644 --- a/src/com/android/settings/spa/app/specialaccess/SpecialAppAccess.kt +++ b/src/com/android/settings/spa/app/specialaccess/SpecialAppAccess.kt @@ -67,7 +67,6 @@ object SpecialAppAccessPageProvider : SettingsPageProvider { PictureInPictureListProvider, InstallUnknownAppsListProvider, AlarmsAndRemindersAppListProvider, - VoiceActivationAppsListProvider, WifiControlAppListProvider, LongBackgroundTasksAppListProvider, TurnScreenOnAppsAppListProvider, diff --git a/src/com/android/settings/spa/app/specialaccess/VoiceActivationApps.kt b/src/com/android/settings/spa/app/specialaccess/VoiceActivationApps.kt deleted file mode 100644 index 12258068319..00000000000 --- a/src/com/android/settings/spa/app/specialaccess/VoiceActivationApps.kt +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (C) 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.settings.spa.app.specialaccess - -import android.Manifest -import android.app.AppOpsManager -import android.app.settings.SettingsEnums -import android.content.Context -import com.android.settings.R -import com.android.settings.overlay.FeatureFactory -import com.android.settingslib.spaprivileged.model.app.PackageManagers.hasGrantPermission -import com.android.settingslib.spaprivileged.template.app.AppOpPermissionListModel -import com.android.settingslib.spaprivileged.template.app.AppOpPermissionRecord -import com.android.settingslib.spaprivileged.template.app.TogglePermissionAppListProvider - -/** - * This class builds an App List under voice activation apps and the individual page which - * allows the user to toggle voice activation related permissions on / off for the apps displayed - * in the list. - */ -object VoiceActivationAppsListProvider : TogglePermissionAppListProvider { - override val permissionType = "VoiceActivationApps" - override fun createModel(context: Context) = VoiceActivationAppsListModel(context) -} - -class VoiceActivationAppsListModel(context: Context) : AppOpPermissionListModel(context) { - override val pageTitleResId = R.string.voice_activation_apps_title - override val switchTitleResId = R.string.permit_voice_activation_apps - override val footerResId = R.string.allow_voice_activation_apps_description - override val appOp = AppOpsManager.OP_RECEIVE_SANDBOX_TRIGGER_AUDIO - override val permission = Manifest.permission.RECEIVE_SANDBOX_TRIGGER_AUDIO - override val setModeByUid = true - - override fun setAllowed(record: AppOpPermissionRecord, newAllowed: Boolean) { - super.setAllowed(record, newAllowed) - logPermissionChange(newAllowed) - } - - override fun isChangeable(record: AppOpPermissionRecord): Boolean = - super.isChangeable(record) && record.app.hasGrantPermission(permission) - - private fun logPermissionChange(newAllowed: Boolean) { - val category = when { - newAllowed -> SettingsEnums.APP_SPECIAL_PERMISSION_RECEIVE_SANDBOX_TRIGGER_AUDIO_ALLOW - else -> SettingsEnums.APP_SPECIAL_PERMISSION_RECEIVE_SANDBOX_TRIGGER_AUDIO_DENY - } - /** - * Leave the package string empty as we should not log the package names for the collected - * metrics. - */ - FeatureFactory.featureFactory.metricsFeatureProvider.action(context, category, "") - } -} \ No newline at end of file diff --git a/src/com/android/settings/spa/app/specialaccess/VoiceActivationAppsPreferenceController.kt b/src/com/android/settings/spa/app/specialaccess/VoiceActivationAppsPreferenceController.kt deleted file mode 100644 index 27d4b4b9035..00000000000 --- a/src/com/android/settings/spa/app/specialaccess/VoiceActivationAppsPreferenceController.kt +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.settings.spa.app.specialaccess - -import android.content.Context -import androidx.preference.Preference -import com.android.settings.core.BasePreferenceController -import com.android.settings.flags.Flags -import com.android.settings.spa.SpaActivity.Companion.startSpaActivity - -class VoiceActivationAppsPreferenceController(context: Context, preferenceKey: String) : - BasePreferenceController(context, preferenceKey) { - override fun getAvailabilityStatus() = - if (Flags.enableVoiceActivationAppsInSettings()) AVAILABLE - else CONDITIONALLY_UNAVAILABLE - - override fun handlePreferenceTreeClick(preference: Preference): Boolean { - if (preference.key == mPreferenceKey) { - mContext.startSpaActivity(VoiceActivationAppsListProvider.getAppListRoute()) - return true - } - return false - } -} \ No newline at end of file diff --git a/tests/robotests/src/com/android/settings/biometrics/face/FaceEnrollIntroductionTest.java b/tests/robotests/src/com/android/settings/biometrics/face/FaceEnrollIntroductionTest.java index a56c34cacdf..81a72694592 100644 --- a/tests/robotests/src/com/android/settings/biometrics/face/FaceEnrollIntroductionTest.java +++ b/tests/robotests/src/com/android/settings/biometrics/face/FaceEnrollIntroductionTest.java @@ -78,6 +78,7 @@ import com.google.android.setupcompat.template.FooterBarMixin; import com.google.android.setupcompat.template.FooterButton; import com.google.android.setupcompat.util.WizardManagerHelper; import com.google.android.setupdesign.GlifLayout; +import com.google.android.setupdesign.template.RequireScrollMixin; import com.google.android.setupdesign.view.BottomScrollView; import org.junit.After; @@ -137,6 +138,11 @@ public class FaceEnrollIntroductionTest { return mRecreateCount; } + @Override + protected void onResume() { + super.onResume(); + } + @Override public void recreate() { mRecreateCount++; @@ -424,11 +430,39 @@ public class FaceEnrollIntroductionTest { } @Test - public void testFaceEnrollIntroduction_notShowFooterSecondaryButton() { + public void testFaceEnrollIntroduction_footerSecondaryButtonWhenCanEnroll() { setupActivity(); FooterBarMixin footer = getGlifLayout(mActivity).getMixin(FooterBarMixin.class); FooterButton footerButton = footer.getSecondaryButton(); + final RequireScrollMixin requireScrollMixin = getGlifLayout(mActivity).getMixin( + RequireScrollMixin.class); + assertThat(footerButton.getVisibility()).isEqualTo( + requireScrollMixin.isScrollingRequired() ? View.INVISIBLE : View.VISIBLE); + + requireScrollMixin.getOnRequireScrollStateChangedListener().onRequireScrollStateChanged( + false); + assertThat(footerButton.getVisibility()).isEqualTo(View.VISIBLE); + } + + @Test + public void testFaceEnrollIntroduction_footerSecondaryButtonWhenMaxEnroll() { + setFaceManagerToHave(1 /* numEnrollments */); + final Intent intent = new Intent(); + intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, new byte[0]); + mController = Robolectric.buildActivity(TestFaceEnrollIntroduction.class, intent); + mActivity = (TestFaceEnrollIntroduction) mController.get(); + + mController.create(); + + FooterBarMixin footer = getGlifLayout(mActivity).getMixin(FooterBarMixin.class); + FooterButton footerButton = footer.getSecondaryButton(); + final RequireScrollMixin requireScrollMixin = getGlifLayout(mActivity).getMixin( + RequireScrollMixin.class); + assertThat(footerButton.getVisibility()).isEqualTo(View.INVISIBLE); + + requireScrollMixin.getOnRequireScrollStateChangedListener().onRequireScrollStateChanged( + false); assertThat(footerButton.getVisibility()).isEqualTo(View.INVISIBLE); } diff --git a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroductionTest.java b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroductionTest.java index 6df8b8ef4b9..edd50a6e6f6 100644 --- a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroductionTest.java +++ b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroductionTest.java @@ -183,14 +183,6 @@ public class FingerprintEnrollIntroductionTest { int result = mFingerprintEnrollIntroduction.checkMaxEnrolled(); assertThat(result).isEqualTo(0); - - final RequireScrollMixin requireScrollMixin = - ((GlifLayout) mFingerprintEnrollIntroduction.findViewById( - R.id.setup_wizard_layout)).getMixin(RequireScrollMixin.class); - requireScrollMixin.getOnRequireScrollStateChangedListener().onRequireScrollStateChanged( - false); - Assert.assertEquals(View.VISIBLE, - mFingerprintEnrollIntroduction.getSecondaryFooterButton().getVisibility()); } @Test @@ -206,14 +198,6 @@ public class FingerprintEnrollIntroductionTest { int result = mFingerprintEnrollIntroduction.checkMaxEnrolled(); assertThat(result).isEqualTo(R.string.fingerprint_intro_error_max); - - final RequireScrollMixin requireScrollMixin = - ((GlifLayout) mFingerprintEnrollIntroduction.findViewById( - R.id.setup_wizard_layout)).getMixin(RequireScrollMixin.class); - requireScrollMixin.getOnRequireScrollStateChangedListener().onRequireScrollStateChanged( - false); - Assert.assertEquals(View.INVISIBLE, - mFingerprintEnrollIntroduction.getSecondaryFooterButton().getVisibility()); } @Test @@ -321,6 +305,57 @@ public class FingerprintEnrollIntroductionTest { .isEqualTo(FingerprintEnrollOptions.ENROLL_REASON_SETTINGS); } + @Test + public void intro_CheckNoThanksButtonWhenCanEnroll() { + // This code path should depend on suw_max_fingerprints_enrollable versus + // FingerprintManager.getSensorProperties...maxEnrollmentsPerUser() + Resources resources = mock(Resources.class); + when(resources.getInteger(anyInt())).thenReturn(5); + when(mContext.getResources()).thenReturn(resources); + + setupFingerprintEnrollIntroWith(newFirstSuwIntent()); + setFingerprintManagerToHave(0 /* numEnrollments */); + + final RequireScrollMixin requireScrollMixin = + ((GlifLayout) mFingerprintEnrollIntroduction.findViewById( + R.id.setup_wizard_layout)).getMixin(RequireScrollMixin.class); + + Assert.assertEquals( + requireScrollMixin.isScrollingRequired() ? View.INVISIBLE : View.VISIBLE, + mFingerprintEnrollIntroduction.getSecondaryFooterButton().getVisibility()); + + requireScrollMixin.getOnRequireScrollStateChangedListener().onRequireScrollStateChanged( + false); + Assert.assertEquals(View.VISIBLE, + mFingerprintEnrollIntroduction.getSecondaryFooterButton().getVisibility()); + } + + @Test + public void intro_CheckNoThanksButtonWhenMaxEnroll() { + // This code path should depend on suw_max_fingerprints_enrollable versus + // FingerprintManager.getSensorProperties...maxEnrollmentsPerUser() + Resources resources = mock(Resources.class); + when(mContext.getResources()).thenReturn(resources); + when(resources.getInteger(anyInt())).thenReturn(1); + + setupFingerprintEnrollIntroWith(newFirstSuwIntent()); + setFingerprintManagerToHave(1 /* numEnrollments */); + + final RequireScrollMixin requireScrollMixin = + ((GlifLayout) mFingerprintEnrollIntroduction.findViewById( + R.id.setup_wizard_layout)).getMixin(RequireScrollMixin.class); + + mFingerprintEnrollIntroduction.onResume(); + Assert.assertEquals(View.INVISIBLE, + mFingerprintEnrollIntroduction.getSecondaryFooterButton().getVisibility()); + + requireScrollMixin.getOnRequireScrollStateChangedListener().onRequireScrollStateChanged( + false); + Assert.assertEquals(View.INVISIBLE, + mFingerprintEnrollIntroduction.getSecondaryFooterButton().getVisibility()); + + } + private Intent newTokenOnlyIntent() { return new Intent() .putExtra(EXTRA_KEY_CHALLENGE_TOKEN, new byte[] { 1 }); @@ -365,6 +400,11 @@ public class FingerprintEnrollIntroductionTest { public int mNewSensorId; public long mNewChallenge; + @Override + protected void onResume() { + super.onResume(); + } + @Nullable public byte[] getTokenField() { return mToken; diff --git a/tests/robotests/src/com/android/settings/network/telephony/EuiccRacConnectivityDialogActivityTest.java b/tests/robotests/src/com/android/settings/network/telephony/EuiccRacConnectivityDialogActivityTest.java new file mode 100644 index 00000000000..29d8f796feb --- /dev/null +++ b/tests/robotests/src/com/android/settings/network/telephony/EuiccRacConnectivityDialogActivityTest.java @@ -0,0 +1,96 @@ +/* + * Copyright (C) 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.network.telephony; + +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; + +import android.app.settings.SettingsEnums; + +import com.android.settings.testutils.FakeFeatureFactory; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.Robolectric; +import org.robolectric.RobolectricTestRunner; + +@RunWith(RobolectricTestRunner.class) +public class EuiccRacConnectivityDialogActivityTest { + private static final boolean CONFIRMED = true; + + private FakeFeatureFactory mFeatureFactory; + private EuiccRacConnectivityDialogActivity mActivity; + + @Before + public void setUp() { + mFeatureFactory = FakeFeatureFactory.setupForTest(); + mActivity = spy(Robolectric.buildActivity(EuiccRacConnectivityDialogActivity.class).get()); + mActivity.onCreate(null); + } + + @Test + public void dialogAction_continue_intentResetMobileNetwork_metricsLogged() { + mActivity.onConfirm( + SettingsEnums.ACTION_RESET_MOBILE_NETWORK_RAC_CONNECTIVITY_WARNING, CONFIRMED); + + verify(mFeatureFactory.metricsFeatureProvider) + .action( + mActivity, + SettingsEnums.ACTION_RESET_MOBILE_NETWORK_RAC_CONNECTIVITY_WARNING, + getMetricsValue(CONFIRMED)); + } + + @Test + public void dialogAction_back_intentResetMobileNetwork_metricsLogged() { + mActivity.onConfirm( + SettingsEnums.ACTION_RESET_MOBILE_NETWORK_RAC_CONNECTIVITY_WARNING, !CONFIRMED); + + verify(mFeatureFactory.metricsFeatureProvider) + .action( + mActivity, + SettingsEnums.ACTION_RESET_MOBILE_NETWORK_RAC_CONNECTIVITY_WARNING, + getMetricsValue(!CONFIRMED)); + } + + @Test + public void dialogAction_continue_intentSettingsEsimDelete_metricsLogged() { + mActivity.onConfirm(SettingsEnums.ACTION_SETTINGS_ESIM_RAC_CONNECTIVITY_WARNING, CONFIRMED); + + verify(mFeatureFactory.metricsFeatureProvider) + .action( + mActivity, + SettingsEnums.ACTION_SETTINGS_ESIM_RAC_CONNECTIVITY_WARNING, + getMetricsValue(CONFIRMED)); + } + + @Test + public void dialogAction_back_intentSettingsEsimDelete_metricsLogged() { + mActivity.onConfirm( + SettingsEnums.ACTION_SETTINGS_ESIM_RAC_CONNECTIVITY_WARNING, !CONFIRMED); + + verify(mFeatureFactory.metricsFeatureProvider) + .action( + mActivity, + SettingsEnums.ACTION_SETTINGS_ESIM_RAC_CONNECTIVITY_WARNING, + getMetricsValue(!CONFIRMED)); + } + + private int getMetricsValue(boolean confirmed) { + return confirmed ? 1 : 0; + } +} diff --git a/tests/spa_unit/src/com/android/settings/spa/app/specialaccess/VoiceActivationAppsPreferenceControllerTest.kt b/tests/spa_unit/src/com/android/settings/spa/app/specialaccess/VoiceActivationAppsPreferenceControllerTest.kt deleted file mode 100644 index 2127497ded8..00000000000 --- a/tests/spa_unit/src/com/android/settings/spa/app/specialaccess/VoiceActivationAppsPreferenceControllerTest.kt +++ /dev/null @@ -1,65 +0,0 @@ -package com.android.settings.spa.app.specialaccess - -import android.content.Context -import android.platform.test.annotations.RequiresFlagsDisabled -import android.platform.test.annotations.RequiresFlagsEnabled -import android.platform.test.flag.junit.CheckFlagsRule -import android.platform.test.flag.junit.DeviceFlagsValueProvider -import androidx.preference.Preference -import androidx.test.core.app.ApplicationProvider -import androidx.test.ext.junit.runners.AndroidJUnit4 - -import com.android.settings.flags.Flags -import com.google.common.truth.Truth.assertThat - -import org.junit.Rule -import org.junit.Test -import org.junit.runner.RunWith -import org.mockito.kotlin.any -import org.mockito.kotlin.doNothing -import org.mockito.kotlin.spy -import org.mockito.kotlin.whenever - -@RunWith(AndroidJUnit4::class) -class VoiceActivationAppsPreferenceControllerTest { - - @get:Rule - val checkFlagsRule: CheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule() - - private val context: Context = spy(ApplicationProvider.getApplicationContext()) { - doNothing().whenever(mock).startActivity(any()) - } - - private val matchedPreference = Preference(context).apply { key = preferenceKey } - - private val misMatchedPreference = Preference(context).apply { key = testPreferenceKey } - - private val controller = VoiceActivationAppsPreferenceController(context, preferenceKey) - - @Test - @RequiresFlagsEnabled(Flags.FLAG_ENABLE_VOICE_ACTIVATION_APPS_IN_SETTINGS) - fun getAvailabilityStatus_enableVoiceActivationApps_returnAvailable() { - assertThat(controller.isAvailable).isTrue() - } - - @Test - @RequiresFlagsDisabled(Flags.FLAG_ENABLE_VOICE_ACTIVATION_APPS_IN_SETTINGS) - fun getAvailableStatus_disableVoiceActivationApps_returnConditionallyUnavailable() { - assertThat(controller.isAvailable).isFalse() - } - - @Test - fun handlePreferenceTreeClick_keyMatched_returnTrue() { - assertThat(controller.handlePreferenceTreeClick(matchedPreference)).isTrue() - } - - @Test - fun handlePreferenceTreeClick_keyMisMatched_returnFalse() { - assertThat(controller.handlePreferenceTreeClick(misMatchedPreference)).isFalse() - } - - companion object { - private const val preferenceKey: String = "voice_activation_apps" - private const val testPreferenceKey: String = "test_key" - } -} \ No newline at end of file diff --git a/tests/spa_unit/src/com/android/settings/spa/app/specialaccess/VoiceActivationAppsTest.kt b/tests/spa_unit/src/com/android/settings/spa/app/specialaccess/VoiceActivationAppsTest.kt deleted file mode 100644 index a2aa293731a..00000000000 --- a/tests/spa_unit/src/com/android/settings/spa/app/specialaccess/VoiceActivationAppsTest.kt +++ /dev/null @@ -1,30 +0,0 @@ -package com.android.settings.spa.app.specialaccess - -import android.Manifest -import android.app.AppOpsManager -import android.content.Context -import androidx.test.core.app.ApplicationProvider -import androidx.test.ext.junit.runners.AndroidJUnit4 -import com.android.settings.R -import com.google.common.truth.Truth.assertThat -import org.junit.Test -import org.junit.runner.RunWith - -@RunWith(AndroidJUnit4::class) -class VoiceActivationAppsTest { - private val context: Context = ApplicationProvider.getApplicationContext() - - private val listModel = VoiceActivationAppsListModel(context) - - @Test - fun modelResourceIdAndProperties() { - assertThat(listModel.pageTitleResId).isEqualTo(R.string.voice_activation_apps_title) - assertThat(listModel.switchTitleResId).isEqualTo(R.string.permit_voice_activation_apps) - assertThat(listModel.footerResId).isEqualTo(R.string.allow_voice_activation_apps_description) - assertThat(listModel.appOp).isEqualTo(AppOpsManager.OP_RECEIVE_SANDBOX_TRIGGER_AUDIO) - assertThat(listModel.permission).isEqualTo( - Manifest.permission.RECEIVE_SANDBOX_TRIGGER_AUDIO - ) - assertThat(listModel.setModeByUid).isTrue() - } -} \ No newline at end of file diff --git a/tests/unit/src/com/android/settings/privatespace/PrivateSpaceMaintainerTest.java b/tests/unit/src/com/android/settings/privatespace/PrivateSpaceMaintainerTest.java index 6f3cb75820f..f75e76f31b3 100644 --- a/tests/unit/src/com/android/settings/privatespace/PrivateSpaceMaintainerTest.java +++ b/tests/unit/src/com/android/settings/privatespace/PrivateSpaceMaintainerTest.java @@ -101,6 +101,7 @@ public class PrivateSpaceMaintainerTest { android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); PrivateSpaceMaintainer privateSpaceMaintainer = PrivateSpaceMaintainer.getInstance(mContext); + privateSpaceMaintainer.deletePrivateSpace(); ErrorDeletingPrivateSpace errorDeletingPrivateSpace = privateSpaceMaintainer.deletePrivateSpace(); assertThat(errorDeletingPrivateSpace) @@ -197,6 +198,30 @@ public class PrivateSpaceMaintainerTest { .isEqualTo(HIDE_PRIVATE_SPACE_ENTRY_POINT_ENABLED_VAL); } + @Test + public void createPrivateSpace_psDoesNotExist_registersTheBroadcastReceiver() { + mSetFlagsRule.enableFlags(Flags.FLAG_ALLOW_PRIVATE_PROFILE, + android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); + PrivateSpaceMaintainer privateSpaceMaintainer = + PrivateSpaceMaintainer.getInstance(mContext); + privateSpaceMaintainer.deletePrivateSpace(); + privateSpaceMaintainer.createPrivateSpace(); + // test that no exception is thrown, which would indicate that the receiver was registered. + mContext.unregisterReceiver(privateSpaceMaintainer.getBroadcastReceiver()); + privateSpaceMaintainer.resetBroadcastReceiver(); + } + + @Test + public void deletePrivateSpace_psExists_unregistersTheBroadcastReceiver() { + mSetFlagsRule.enableFlags(Flags.FLAG_ALLOW_PRIVATE_PROFILE, + android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); + PrivateSpaceMaintainer privateSpaceMaintainer = + PrivateSpaceMaintainer.getInstance(mContext); + privateSpaceMaintainer.createPrivateSpace(); + privateSpaceMaintainer.deletePrivateSpace(); + assertThat(privateSpaceMaintainer.getBroadcastReceiver()).isNull(); + } + /** * Tests that {@link PrivateSpaceMaintainer#lockPrivateSpace()} when PS exists and is running * locks the private profile.