aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHunter Knepshield <hknepshield@google.com>2020-06-18 17:01:01 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2020-06-18 17:01:01 +0000
commitc84c469250ce09887e0d45e987d76e5f47fa4dd5 (patch)
tree02e8679e83475ca1e68c079c245566401af8a2c2
parent48f424f0f7df9b1609d01538092eb9fed05d19ac (diff)
parentb2839fc8a0b56d22deca36e6c8a4a9e1f15d652d (diff)
downloadtelephony-c84c469250ce09887e0d45e987d76e5f47fa4dd5.tar.gz
Merge "Add testing for new carrier-associated app behaviors." into rvc-dev
-rw-r--r--tests/telephonytests/src/com/android/internal/telephony/CarrierAppUtilsTest.java374
1 files changed, 364 insertions, 10 deletions
diff --git a/tests/telephonytests/src/com/android/internal/telephony/CarrierAppUtilsTest.java b/tests/telephonytests/src/com/android/internal/telephony/CarrierAppUtilsTest.java
index 766a40fa50..a0e5b3319f 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/CarrierAppUtilsTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/CarrierAppUtilsTest.java
@@ -19,7 +19,9 @@ package com.android.internal.telephony;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
+import android.os.Build;
import android.os.Bundle;
+import android.os.CarrierAssociatedAppEntry;
import android.os.UserHandle;
import android.provider.Settings;
import android.telephony.TelephonyManager;
@@ -52,12 +54,9 @@ public class CarrierAppUtilsTest {
}
private static final String ASSOCIATED_APP = "com.example.associated";
- private static final ArrayMap<String, List<String>> ASSOCIATED_APPS = new ArrayMap<>();
- static {
- List<String> associatedAppList = new ArrayList<>();
- associatedAppList.add(ASSOCIATED_APP);
- ASSOCIATED_APPS.put(CARRIER_APP, associatedAppList);
- }
+ private static final ArrayMap<String, List<CarrierAssociatedAppEntry>> ASSOCIATED_APPS =
+ makeAssociatedApp(CARRIER_APP, ASSOCIATED_APP,
+ CarrierAssociatedAppEntry.SDK_UNSPECIFIED);
private static final int USER_ID = 12345;
private static final String CALLING_PACKAGE = "phone";
@@ -67,6 +66,16 @@ public class CarrierAppUtilsTest {
private SettingsMockContentProvider mContentProvider;
private MockContentResolver mContentResolver;
+ private static ArrayMap<String, List<CarrierAssociatedAppEntry>> makeAssociatedApp(
+ String carrierAppPackage, String associatedAppPackage, int associatedAppAddedInSdk) {
+ ArrayMap<String, List<CarrierAssociatedAppEntry>> result = new ArrayMap<>();
+ List<CarrierAssociatedAppEntry> associatedAppList = new ArrayList<>();
+ associatedAppList.add(
+ new CarrierAssociatedAppEntry(associatedAppPackage, associatedAppAddedInSdk));
+ result.put(carrierAppPackage, associatedAppList);
+ return result;
+ }
+
@Before
public void setUp() throws Exception {
System.setProperty("dexmaker.dexcache",
@@ -288,7 +297,8 @@ public class CarrierAppUtilsTest {
throws Exception {
// Enabling should be done even if this isn't the first run.
Settings.Secure.putIntForUser(
- mContentResolver, Settings.Secure.CARRIER_APPS_HANDLED, 1, USER_ID);
+ mContentResolver, Settings.Secure.CARRIER_APPS_HANDLED, Build.VERSION.SDK_INT,
+ USER_ID);
ApplicationInfo appInfo = new ApplicationInfo();
appInfo.packageName = CARRIER_APP;
appInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_INSTALLED;
@@ -701,10 +711,11 @@ public class CarrierAppUtilsTest {
* disabling has already occurred - should only uninstall configured app.
*/
@Test @SmallTest
- public void testDisableCarrierAppsUntilPrivileged_NoPrivileges_Associated_Default_AlreadyRun()
+ public void testDisableCarrierAppsUntilPrivileged_NoPrivileges_Associated_Default_HandledSdk()
throws Exception {
Settings.Secure.putIntForUser(
- mContentResolver, Settings.Secure.CARRIER_APPS_HANDLED, 1, USER_ID);
+ mContentResolver, Settings.Secure.CARRIER_APPS_HANDLED, Build.VERSION.SDK_INT,
+ USER_ID);
ApplicationInfo appInfo = new ApplicationInfo();
appInfo.packageName = CARRIER_APP;
appInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_INSTALLED;
@@ -718,7 +729,152 @@ public class CarrierAppUtilsTest {
.thenReturn(appInfo);
ApplicationInfo associatedAppInfo = new ApplicationInfo();
associatedAppInfo.packageName = ASSOCIATED_APP;
- associatedAppInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
+ associatedAppInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_INSTALLED;
+ associatedAppInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
+ Mockito.when(mPackageManager.getApplicationInfo(ASSOCIATED_APP,
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS
+ | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS
+ | PackageManager.MATCH_SYSTEM_ONLY))
+ .thenReturn(associatedAppInfo);
+ Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP))
+ .thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS);
+ // Different associated app SDK than usual.
+ CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mTelephonyManager,
+ mContentResolver, USER_ID, CARRIER_APPS,
+ makeAssociatedApp(CARRIER_APP, ASSOCIATED_APP, Build.VERSION.SDK_INT), mContext);
+ Mockito.verify(mPackageManager).setSystemAppState(CARRIER_APP,
+ PackageManager.SYSTEM_APP_STATE_HIDDEN_UNTIL_INSTALLED_HIDDEN);
+ Mockito.verify(mPackageManager).setSystemAppState(ASSOCIATED_APP,
+ PackageManager.SYSTEM_APP_STATE_HIDDEN_UNTIL_INSTALLED_HIDDEN);
+ Mockito.verify(mPackageManager).setSystemAppState(CARRIER_APP,
+ PackageManager.SYSTEM_APP_STATE_UNINSTALLED);
+ Mockito.verify(mPackageManager, Mockito.never()).setSystemAppState(ASSOCIATED_APP,
+ PackageManager.SYSTEM_APP_STATE_INSTALLED);
+ Mockito.verify(mPackageManager, Mockito.never()).setSystemAppState(ASSOCIATED_APP,
+ PackageManager.SYSTEM_APP_STATE_UNINSTALLED);
+ }
+
+ /**
+ * Configured app has no privileges, and is in the default state along with associated app, and
+ * disabling has already occurred - should only uninstall configured app.
+ */
+ @Test @SmallTest
+ public void testDCAUP_NoPrivileges_Associated_Default_HandledSdk_AssociatedSdkUnspecified()
+ throws Exception {
+ Settings.Secure.putIntForUser(
+ mContentResolver, Settings.Secure.CARRIER_APPS_HANDLED, Build.VERSION.SDK_INT,
+ USER_ID);
+ ApplicationInfo appInfo = new ApplicationInfo();
+ appInfo.packageName = CARRIER_APP;
+ appInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_INSTALLED;
+ Mockito.when(mPackageManager
+ .getApplicationEnabledSetting(Mockito.anyString()))
+ .thenReturn(PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);
+ Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP,
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS
+ | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS
+ | PackageManager.MATCH_SYSTEM_ONLY))
+ .thenReturn(appInfo);
+ ApplicationInfo associatedAppInfo = new ApplicationInfo();
+ associatedAppInfo.packageName = ASSOCIATED_APP;
+ associatedAppInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_INSTALLED;
+ associatedAppInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
+ Mockito.when(mPackageManager.getApplicationInfo(ASSOCIATED_APP,
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS
+ | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS
+ | PackageManager.MATCH_SYSTEM_ONLY))
+ .thenReturn(associatedAppInfo);
+ Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP))
+ .thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS);
+ // Using SDK_UNSPECIFIED for the associated app's addedInSdk.
+ CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mTelephonyManager,
+ mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS, mContext);
+ Mockito.verify(mPackageManager).setSystemAppState(CARRIER_APP,
+ PackageManager.SYSTEM_APP_STATE_HIDDEN_UNTIL_INSTALLED_HIDDEN);
+ Mockito.verify(mPackageManager).setSystemAppState(ASSOCIATED_APP,
+ PackageManager.SYSTEM_APP_STATE_HIDDEN_UNTIL_INSTALLED_HIDDEN);
+ Mockito.verify(mPackageManager).setSystemAppState(CARRIER_APP,
+ PackageManager.SYSTEM_APP_STATE_UNINSTALLED);
+ Mockito.verify(mPackageManager, Mockito.never()).setSystemAppState(ASSOCIATED_APP,
+ PackageManager.SYSTEM_APP_STATE_INSTALLED);
+ Mockito.verify(mPackageManager, Mockito.never()).setSystemAppState(ASSOCIATED_APP,
+ PackageManager.SYSTEM_APP_STATE_UNINSTALLED);
+ }
+
+ /**
+ * Configured app has no privileges, and is in the default state along with associated app, and
+ * disabling has not yet occurred on this SDK level - should uninstall both since the associated
+ * app's SDK matches.
+ */
+ @Test @SmallTest
+ public void testDCAUP_NoPrivileges_Associated_Default_NewSdk_AssociatedSdkCurrent()
+ throws Exception {
+ Settings.Secure.putIntForUser(
+ mContentResolver, Settings.Secure.CARRIER_APPS_HANDLED,
+ Build.VERSION.SDK_INT - 1, USER_ID);
+ ApplicationInfo appInfo = new ApplicationInfo();
+ appInfo.packageName = CARRIER_APP;
+ appInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_INSTALLED;
+ Mockito.when(mPackageManager
+ .getApplicationEnabledSetting(Mockito.anyString()))
+ .thenReturn(PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);
+ Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP,
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS
+ | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS
+ | PackageManager.MATCH_SYSTEM_ONLY))
+ .thenReturn(appInfo);
+ ApplicationInfo associatedAppInfo = new ApplicationInfo();
+ associatedAppInfo.packageName = ASSOCIATED_APP;
+ associatedAppInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_INSTALLED;
+ associatedAppInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
+ Mockito.when(mPackageManager.getApplicationInfo(ASSOCIATED_APP,
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS
+ | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS
+ | PackageManager.MATCH_SYSTEM_ONLY))
+ .thenReturn(associatedAppInfo);
+ Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP))
+ .thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS);
+ // Different associated app SDK than usual.
+ CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mTelephonyManager,
+ mContentResolver, USER_ID, CARRIER_APPS,
+ makeAssociatedApp(CARRIER_APP, ASSOCIATED_APP, Build.VERSION.SDK_INT), mContext);
+ Mockito.verify(mPackageManager).setSystemAppState(CARRIER_APP,
+ PackageManager.SYSTEM_APP_STATE_HIDDEN_UNTIL_INSTALLED_HIDDEN);
+ Mockito.verify(mPackageManager).setSystemAppState(ASSOCIATED_APP,
+ PackageManager.SYSTEM_APP_STATE_HIDDEN_UNTIL_INSTALLED_HIDDEN);
+ Mockito.verify(mPackageManager).setSystemAppState(CARRIER_APP,
+ PackageManager.SYSTEM_APP_STATE_UNINSTALLED);
+ Mockito.verify(mPackageManager, Mockito.never()).setSystemAppState(ASSOCIATED_APP,
+ PackageManager.SYSTEM_APP_STATE_INSTALLED);
+ Mockito.verify(mPackageManager).setSystemAppState(ASSOCIATED_APP,
+ PackageManager.SYSTEM_APP_STATE_UNINSTALLED);
+ }
+
+ /**
+ * Configured app has no privileges, and is in the default state along with associated app, and
+ * disabling has not yet occurred on the current SDK - should only uninstall configured app
+ * since the associated app's SDK isn't specified but we've already run at least once.
+ */
+ @Test @SmallTest
+ public void testDCAUP_NoPrivileges_Associated_Default_NewSdk_AssociatedSdkUnspecified()
+ throws Exception {
+ Settings.Secure.putIntForUser(
+ mContentResolver, Settings.Secure.CARRIER_APPS_HANDLED,
+ Build.VERSION.SDK_INT - 1, USER_ID);
+ ApplicationInfo appInfo = new ApplicationInfo();
+ appInfo.packageName = CARRIER_APP;
+ appInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_INSTALLED;
+ Mockito.when(mPackageManager
+ .getApplicationEnabledSetting(Mockito.anyString()))
+ .thenReturn(PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);
+ Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP,
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS
+ | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS
+ | PackageManager.MATCH_SYSTEM_ONLY))
+ .thenReturn(appInfo);
+ ApplicationInfo associatedAppInfo = new ApplicationInfo();
+ associatedAppInfo.packageName = ASSOCIATED_APP;
+ associatedAppInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_INSTALLED;
associatedAppInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
Mockito.when(mPackageManager.getApplicationInfo(ASSOCIATED_APP,
PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS
@@ -727,6 +883,7 @@ public class CarrierAppUtilsTest {
.thenReturn(associatedAppInfo);
Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP))
.thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS);
+ // Using SDK_UNSPECIFIED for the associated app's addedInSdk.
CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mTelephonyManager,
mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS, mContext);
Mockito.verify(mPackageManager).setSystemAppState(CARRIER_APP,
@@ -741,6 +898,203 @@ public class CarrierAppUtilsTest {
PackageManager.SYSTEM_APP_STATE_UNINSTALLED);
}
+ /**
+ * Configured app has no privileges, and is in the default state along with associated app, and
+ * disabling has not yet occurred on the current SDK - should only uninstall configured app
+ * since the associated app's SDK doesn't match.
+ */
+ @Test @SmallTest
+ public void testDCAUP_NoPrivileges_Associated_Default_NewSdk_AssociatedSdkTooLow()
+ throws Exception {
+ Settings.Secure.putIntForUser(
+ mContentResolver, Settings.Secure.CARRIER_APPS_HANDLED,
+ Build.VERSION.SDK_INT - 1, USER_ID);
+ ApplicationInfo appInfo = new ApplicationInfo();
+ appInfo.packageName = CARRIER_APP;
+ appInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_INSTALLED;
+ Mockito.when(mPackageManager
+ .getApplicationEnabledSetting(Mockito.anyString()))
+ .thenReturn(PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);
+ Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP,
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS
+ | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS
+ | PackageManager.MATCH_SYSTEM_ONLY))
+ .thenReturn(appInfo);
+ ApplicationInfo associatedAppInfo = new ApplicationInfo();
+ associatedAppInfo.packageName = ASSOCIATED_APP;
+ associatedAppInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_INSTALLED;
+ associatedAppInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
+ Mockito.when(mPackageManager.getApplicationInfo(ASSOCIATED_APP,
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS
+ | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS
+ | PackageManager.MATCH_SYSTEM_ONLY))
+ .thenReturn(associatedAppInfo);
+ Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP))
+ .thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS);
+ // Different associated app SDK than usual.
+ CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mTelephonyManager,
+ mContentResolver, USER_ID, CARRIER_APPS,
+ makeAssociatedApp(CARRIER_APP, ASSOCIATED_APP, Build.VERSION.SDK_INT - 1),
+ mContext);
+ Mockito.verify(mPackageManager).setSystemAppState(CARRIER_APP,
+ PackageManager.SYSTEM_APP_STATE_HIDDEN_UNTIL_INSTALLED_HIDDEN);
+ Mockito.verify(mPackageManager).setSystemAppState(ASSOCIATED_APP,
+ PackageManager.SYSTEM_APP_STATE_HIDDEN_UNTIL_INSTALLED_HIDDEN);
+ Mockito.verify(mPackageManager).setSystemAppState(CARRIER_APP,
+ PackageManager.SYSTEM_APP_STATE_UNINSTALLED);
+ Mockito.verify(mPackageManager, Mockito.never()).setSystemAppState(ASSOCIATED_APP,
+ PackageManager.SYSTEM_APP_STATE_INSTALLED);
+ Mockito.verify(mPackageManager, Mockito.never()).setSystemAppState(ASSOCIATED_APP,
+ PackageManager.SYSTEM_APP_STATE_UNINSTALLED);
+ }
+
+ /**
+ * Configured app has no privileges, and is in the default state along with associated app, and
+ * disabling has not yet occurred on this SDK level - should uninstall both since the associated
+ * app's SDK is newer than the last evaluation.
+ *
+ * While this case is expected to feel somewhat strange, it effectively simulates skipping a
+ * whole SDK level in a single OTA. For example, the device is on P. A new associated app is
+ * added on Q, but the user doesn't take the OTA. Then, they take the R OTA, at which point the
+ * associated app should still be disabled if there's no corresponding SIM, because its SDK
+ * level is newer than our last round of evaluation.
+ */
+ @Test @SmallTest
+ public void testDCAUP_NoPrivileges_Associated_Default_NewSdk_AssociatedSdkInRange()
+ throws Exception {
+ Settings.Secure.putIntForUser(
+ mContentResolver, Settings.Secure.CARRIER_APPS_HANDLED,
+ Build.VERSION.SDK_INT - 2, USER_ID);
+ ApplicationInfo appInfo = new ApplicationInfo();
+ appInfo.packageName = CARRIER_APP;
+ appInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_INSTALLED;
+ Mockito.when(mPackageManager
+ .getApplicationEnabledSetting(Mockito.anyString()))
+ .thenReturn(PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);
+ Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP,
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS
+ | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS
+ | PackageManager.MATCH_SYSTEM_ONLY))
+ .thenReturn(appInfo);
+ ApplicationInfo associatedAppInfo = new ApplicationInfo();
+ associatedAppInfo.packageName = ASSOCIATED_APP;
+ associatedAppInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_INSTALLED;
+ associatedAppInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
+ Mockito.when(mPackageManager.getApplicationInfo(ASSOCIATED_APP,
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS
+ | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS
+ | PackageManager.MATCH_SYSTEM_ONLY))
+ .thenReturn(associatedAppInfo);
+ Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP))
+ .thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS);
+ // Different associated app SDK than usual.
+ CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mTelephonyManager,
+ mContentResolver, USER_ID, CARRIER_APPS,
+ makeAssociatedApp(CARRIER_APP, ASSOCIATED_APP, Build.VERSION.SDK_INT - 1),
+ mContext);
+ Mockito.verify(mPackageManager).setSystemAppState(CARRIER_APP,
+ PackageManager.SYSTEM_APP_STATE_HIDDEN_UNTIL_INSTALLED_HIDDEN);
+ Mockito.verify(mPackageManager).setSystemAppState(ASSOCIATED_APP,
+ PackageManager.SYSTEM_APP_STATE_HIDDEN_UNTIL_INSTALLED_HIDDEN);
+ Mockito.verify(mPackageManager).setSystemAppState(CARRIER_APP,
+ PackageManager.SYSTEM_APP_STATE_UNINSTALLED);
+ Mockito.verify(mPackageManager, Mockito.never()).setSystemAppState(ASSOCIATED_APP,
+ PackageManager.SYSTEM_APP_STATE_INSTALLED);
+ Mockito.verify(mPackageManager).setSystemAppState(ASSOCIATED_APP,
+ PackageManager.SYSTEM_APP_STATE_UNINSTALLED);
+ }
+
+ /**
+ * Configured app has no privileges, and is in the default state along with associated app, and
+ * disabling has not yet occurred ever - should uninstall both regardless of associated app's
+ * SDK.
+ */
+ @Test @SmallTest
+ public void testDCAUP_NoPrivileges_Associated_Default_FirstRun_AssociatedSdkCurrent()
+ throws Exception {
+ ApplicationInfo appInfo = new ApplicationInfo();
+ appInfo.packageName = CARRIER_APP;
+ appInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_INSTALLED;
+ Mockito.when(mPackageManager
+ .getApplicationEnabledSetting(Mockito.anyString()))
+ .thenReturn(PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);
+ Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP,
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS
+ | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS
+ | PackageManager.MATCH_SYSTEM_ONLY))
+ .thenReturn(appInfo);
+ ApplicationInfo associatedAppInfo = new ApplicationInfo();
+ associatedAppInfo.packageName = ASSOCIATED_APP;
+ associatedAppInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_INSTALLED;
+ associatedAppInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
+ Mockito.when(mPackageManager.getApplicationInfo(ASSOCIATED_APP,
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS
+ | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS
+ | PackageManager.MATCH_SYSTEM_ONLY))
+ .thenReturn(associatedAppInfo);
+ Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP))
+ .thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS);
+ // Different associated app SDK than usual.
+ CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mTelephonyManager,
+ mContentResolver, USER_ID, CARRIER_APPS,
+ makeAssociatedApp(CARRIER_APP, ASSOCIATED_APP, Build.VERSION.SDK_INT), mContext);
+ Mockito.verify(mPackageManager).setSystemAppState(CARRIER_APP,
+ PackageManager.SYSTEM_APP_STATE_HIDDEN_UNTIL_INSTALLED_HIDDEN);
+ Mockito.verify(mPackageManager).setSystemAppState(ASSOCIATED_APP,
+ PackageManager.SYSTEM_APP_STATE_HIDDEN_UNTIL_INSTALLED_HIDDEN);
+ Mockito.verify(mPackageManager).setSystemAppState(CARRIER_APP,
+ PackageManager.SYSTEM_APP_STATE_UNINSTALLED);
+ Mockito.verify(mPackageManager, Mockito.never()).setSystemAppState(ASSOCIATED_APP,
+ PackageManager.SYSTEM_APP_STATE_INSTALLED);
+ Mockito.verify(mPackageManager).setSystemAppState(ASSOCIATED_APP,
+ PackageManager.SYSTEM_APP_STATE_UNINSTALLED);
+ }
+
+ /**
+ * Configured app has no privileges, and is in the default state along with associated app, and
+ * disabling has not yet occurred ever - should uninstall both regardless of associated app's
+ * SDK.
+ */
+ @Test @SmallTest
+ public void testDCAUP_NoPrivileges_Associated_Default_FirstRun_AssociatedSdkUnspecified()
+ throws Exception {
+ ApplicationInfo appInfo = new ApplicationInfo();
+ appInfo.packageName = CARRIER_APP;
+ appInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_INSTALLED;
+ Mockito.when(mPackageManager
+ .getApplicationEnabledSetting(Mockito.anyString()))
+ .thenReturn(PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);
+ Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP,
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS
+ | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS
+ | PackageManager.MATCH_SYSTEM_ONLY))
+ .thenReturn(appInfo);
+ ApplicationInfo associatedAppInfo = new ApplicationInfo();
+ associatedAppInfo.packageName = ASSOCIATED_APP;
+ associatedAppInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_INSTALLED;
+ associatedAppInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
+ Mockito.when(mPackageManager.getApplicationInfo(ASSOCIATED_APP,
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS
+ | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS
+ | PackageManager.MATCH_SYSTEM_ONLY))
+ .thenReturn(associatedAppInfo);
+ Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP))
+ .thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS);
+ // Using SDK_UNSPECIFIED for the associated app's addedInSdk.
+ CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mTelephonyManager,
+ mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS, mContext);
+ Mockito.verify(mPackageManager).setSystemAppState(CARRIER_APP,
+ PackageManager.SYSTEM_APP_STATE_HIDDEN_UNTIL_INSTALLED_HIDDEN);
+ Mockito.verify(mPackageManager).setSystemAppState(ASSOCIATED_APP,
+ PackageManager.SYSTEM_APP_STATE_HIDDEN_UNTIL_INSTALLED_HIDDEN);
+ Mockito.verify(mPackageManager).setSystemAppState(CARRIER_APP,
+ PackageManager.SYSTEM_APP_STATE_UNINSTALLED);
+ Mockito.verify(mPackageManager, Mockito.never()).setSystemAppState(ASSOCIATED_APP,
+ PackageManager.SYSTEM_APP_STATE_INSTALLED);
+ Mockito.verify(mPackageManager).setSystemAppState(ASSOCIATED_APP,
+ PackageManager.SYSTEM_APP_STATE_UNINSTALLED);
+ }
+
/** Telephony is not initialized, and app is in the default state - should uninstall it. */
@Test @SmallTest
public void testDisableCarrierAppsUntilPrivileged_NullPrivileges_Default() throws Exception {