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.