Updated tests and callers for carrier "associated" apps.
Bug: 30141427
Change-Id: I15a4a04983e80e7d8c1b212ed6654ae5b6b3a0bf
diff --git a/src/java/com/android/internal/telephony/SubscriptionInfoUpdater.java b/src/java/com/android/internal/telephony/SubscriptionInfoUpdater.java
index ea6fce8..a9553f6 100644
--- a/src/java/com/android/internal/telephony/SubscriptionInfoUpdater.java
+++ b/src/java/com/android/internal/telephony/SubscriptionInfoUpdater.java
@@ -147,7 +147,8 @@
throws RemoteException {
mCurrentlyActiveUserId = newUserId;
CarrierAppUtils.disableCarrierAppsUntilPrivileged(mContext.getOpPackageName(),
- mPackageManager, TelephonyManager.getDefault(), mCurrentlyActiveUserId);
+ mPackageManager, TelephonyManager.getDefault(),
+ mContext.getContentResolver(), mCurrentlyActiveUserId);
if (reply != null) {
try {
@@ -172,7 +173,8 @@
logd("Couldn't get current user ID; guessing it's 0: " + e.getMessage());
}
CarrierAppUtils.disableCarrierAppsUntilPrivileged(mContext.getOpPackageName(),
- mPackageManager, TelephonyManager.getDefault(), mCurrentlyActiveUserId);
+ mPackageManager, TelephonyManager.getDefault(), mContext.getContentResolver(),
+ mCurrentlyActiveUserId);
}
private final BroadcastReceiver sReceiver = new BroadcastReceiver() {
@@ -488,7 +490,8 @@
// Update set of enabled carrier apps now that the privilege rules may have changed.
CarrierAppUtils.disableCarrierAppsUntilPrivileged(mContext.getOpPackageName(),
- mPackageManager, TelephonyManager.getDefault(), mCurrentlyActiveUserId);
+ mPackageManager, TelephonyManager.getDefault(), mContext.getContentResolver(),
+ mCurrentlyActiveUserId);
broadcastSimStateChanged(slotId, IccCardConstants.INTENT_VALUE_ICC_LOADED, null);
updateCarrierServices(slotId, IccCardConstants.INTENT_VALUE_ICC_LOADED);
diff --git a/tests/telephonytests/src/com/android/internal/telephony/CarrierAppUtilsTest.java b/tests/telephonytests/src/com/android/internal/telephony/CarrierAppUtilsTest.java
index da1f1c8..9974a6d 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/CarrierAppUtilsTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/CarrierAppUtilsTest.java
@@ -19,23 +19,40 @@
import android.content.pm.ApplicationInfo;
import android.content.pm.IPackageManager;
import android.content.pm.PackageManager;
+import android.os.Bundle;
+import android.provider.Settings;
import android.telephony.TelephonyManager;
import android.test.InstrumentationTestCase;
+import android.test.mock.MockContentProvider;
+import android.test.mock.MockContentResolver;
import android.test.suitebuilder.annotation.SmallTest;
+import android.util.ArrayMap;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
+import java.util.ArrayList;
+import java.util.List;
+
public class CarrierAppUtilsTest extends InstrumentationTestCase {
private static final String CARRIER_APP = "com.example.carrier";
private static final String[] CARRIER_APPS = new String[] { CARRIER_APP };
+ 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 int USER_ID = 12345;
private static final String CALLING_PACKAGE = "phone";
@Mock private IPackageManager mPackageManager;
@Mock private TelephonyManager mTelephonyManager;
+ private SettingsMockContentProvider mContentProvider;
+ private MockContentResolver mContentResolver;
@Override
public void setUp() throws Exception {
@@ -44,13 +61,20 @@
getInstrumentation().getTargetContext().getCacheDir().getPath());
Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
MockitoAnnotations.initMocks(this);
+
+ mContentResolver = new MockContentResolver();
+ mContentProvider = new SettingsMockContentProvider();
+ mContentResolver.addProvider(Settings.AUTHORITY, mContentProvider);
+ Settings.Secure.putIntForUser(
+ mContentResolver, Settings.Secure.CARRIER_APPS_HANDLED, 0, USER_ID);
}
/** No apps configured - should do nothing. */
@Test @SmallTest
public void testDisableCarrierAppsUntilPrivileged_EmptyList() {
CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager,
- mTelephonyManager, USER_ID, new String[0]);
+ mTelephonyManager, mContentResolver, USER_ID, new String[0],
+ ASSOCIATED_APPS);
Mockito.verifyNoMoreInteractions(mPackageManager, mTelephonyManager);
}
@@ -58,9 +82,10 @@
@Test @SmallTest
public void testDisableCarrierAppsUntilPrivileged_MissingApp() throws Exception {
Mockito.when(mPackageManager.getApplicationInfo("com.example.missing.app",
- PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(null);
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(null);
CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager,
- mTelephonyManager, USER_ID, new String[] { "com.example.missing.app" });
+ mTelephonyManager, mContentResolver, USER_ID,
+ new String[] { "com.example.missing.app" }, ASSOCIATED_APPS);
Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting(
Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(),
Mockito.anyString());
@@ -75,9 +100,9 @@
public void testDisableCarrierAppsUntilPrivileged_NonSystemApp() throws Exception {
ApplicationInfo appInfo = new ApplicationInfo();
Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP,
- PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo);
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo);
CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager,
- mTelephonyManager, USER_ID, CARRIER_APPS);
+ mTelephonyManager, mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS);
Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting(
Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(),
Mockito.anyString());
@@ -99,11 +124,11 @@
appInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER;
Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP,
- PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo);
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo);
Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP))
.thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS);
CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager,
- mTelephonyManager, USER_ID, CARRIER_APPS);
+ mTelephonyManager, mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS);
Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting(
Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(),
Mockito.anyString());
@@ -119,11 +144,11 @@
appInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP,
- PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo);
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo);
Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP))
.thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS);
CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager,
- mTelephonyManager, USER_ID, CARRIER_APPS);
+ mTelephonyManager, mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS);
Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting(
Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(),
Mockito.anyString());
@@ -139,11 +164,11 @@
appInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP,
- PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo);
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo);
Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP))
.thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS);
CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager,
- mTelephonyManager, USER_ID, CARRIER_APPS);
+ mTelephonyManager, mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS);
Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting(
Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(),
Mockito.anyString());
@@ -159,11 +184,11 @@
appInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_UPDATED_SYSTEM_APP;
appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP,
- PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo);
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo);
Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP))
.thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS);
CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager,
- mTelephonyManager, USER_ID, CARRIER_APPS);
+ mTelephonyManager, mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS);
Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting(
Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(),
Mockito.anyString());
@@ -171,43 +196,139 @@
new String[] {appInfo.packageName}, USER_ID);
}
- /** Configured app has privileges, and is in the default state - should enable. */
+ /**
+ * Configured app has privileges, and is in the default state - should enable. Associated app
+ * is missing and should not be touched.
+ */
@Test @SmallTest
- public void testDisableCarrierAppsUntilPrivileged_HasPrivileges_Default() throws Exception {
+ public void testDisableCarrierAppsUntilPrivileged_HasPrivileges_MissingAssociated_Default()
+ throws Exception {
ApplicationInfo appInfo = new ApplicationInfo();
appInfo.packageName = CARRIER_APP;
appInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP,
- PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo);
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID))
+ .thenReturn(appInfo);
Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP))
.thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS);
CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager,
- mTelephonyManager, USER_ID, CARRIER_APPS);
+ mTelephonyManager, mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS);
Mockito.verify(mPackageManager).setApplicationEnabledSetting(
CARRIER_APP, PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP, USER_ID, CALLING_PACKAGE);
+ Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting(
+ ASSOCIATED_APP, PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
+ PackageManager.DONT_KILL_APP, USER_ID, CALLING_PACKAGE);
Mockito.verify(mPackageManager).grantDefaultPermissionsToEnabledCarrierApps(
new String[] {appInfo.packageName}, USER_ID);
}
- /** Configured app has privileges, and is disabled until used - should enable. */
+ /**
+ * Configured app has privileges, and is in the default state along with associated app - should
+ * enable both.
+ */
@Test @SmallTest
- public void testDisableCarrierAppsUntilPrivileged_HasPrivileges_DisabledUntilUsed()
+ public void testDisableCarrierAppsUntilPrivileged_HasPrivileges_Associated_Default()
+ 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);
+ ApplicationInfo appInfo = new ApplicationInfo();
+ appInfo.packageName = CARRIER_APP;
+ appInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
+ appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
+ Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP,
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID))
+ .thenReturn(appInfo);
+ ApplicationInfo associatedAppInfo = new ApplicationInfo();
+ associatedAppInfo.packageName = ASSOCIATED_APP;
+ associatedAppInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
+ associatedAppInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
+ Mockito.when(mPackageManager.getApplicationInfo(ASSOCIATED_APP,
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID))
+ .thenReturn(associatedAppInfo);
+ Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP))
+ .thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS);
+ CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager,
+ mTelephonyManager, mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS);
+ Mockito.verify(mPackageManager).setApplicationEnabledSetting(
+ CARRIER_APP, PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
+ PackageManager.DONT_KILL_APP, USER_ID, CALLING_PACKAGE);
+ Mockito.verify(mPackageManager).setApplicationEnabledSetting(
+ ASSOCIATED_APP, PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
+ PackageManager.DONT_KILL_APP, USER_ID, CALLING_PACKAGE);
+ Mockito.verify(mPackageManager).grantDefaultPermissionsToEnabledCarrierApps(
+ new String[] {appInfo.packageName}, USER_ID);
+ }
+
+ /**
+ * Configured app has privileges, and is disabled until used - should enable. Associated app has
+ * been updated and should not be touched.
+ */
+ @Test @SmallTest
+ public void testDisableCarrierAppsUntilPrivileged_HasPrivileges_UpdatedAssociated_DisabledUntilUsed()
throws Exception {
ApplicationInfo appInfo = new ApplicationInfo();
appInfo.packageName = CARRIER_APP;
appInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED;
Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP,
- PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo);
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo);
+ ApplicationInfo associatedAppInfo = new ApplicationInfo();
+ associatedAppInfo.packageName = ASSOCIATED_APP;
+ associatedAppInfo.flags |=
+ ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_UPDATED_SYSTEM_APP;
+ associatedAppInfo.enabledSetting =
+ PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED;
+ Mockito.when(mPackageManager.getApplicationInfo(ASSOCIATED_APP,
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID))
+ .thenReturn(associatedAppInfo);
Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP))
.thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS);
CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager,
- mTelephonyManager, USER_ID, CARRIER_APPS);
+ mTelephonyManager, mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS);
Mockito.verify(mPackageManager).setApplicationEnabledSetting(
CARRIER_APP, PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP, USER_ID, CALLING_PACKAGE);
+ Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting(
+ ASSOCIATED_APP, PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
+ PackageManager.DONT_KILL_APP, USER_ID, CALLING_PACKAGE);
+ Mockito.verify(mPackageManager).grantDefaultPermissionsToEnabledCarrierApps(
+ new String[] {appInfo.packageName}, USER_ID);
+ }
+
+ /**
+ * Configured app has privileges, and is disabled until used along with associated app - should
+ * enable both.
+ */
+ @Test @SmallTest
+ public void testDisableCarrierAppsUntilPrivileged_HasPrivileges_Associated_DisabledUntilUsed()
+ throws Exception {
+ ApplicationInfo appInfo = new ApplicationInfo();
+ appInfo.packageName = CARRIER_APP;
+ appInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
+ appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED;
+ Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP,
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo);
+ ApplicationInfo associatedAppInfo = new ApplicationInfo();
+ associatedAppInfo.packageName = ASSOCIATED_APP;
+ associatedAppInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
+ associatedAppInfo.enabledSetting =
+ PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED;
+ Mockito.when(mPackageManager.getApplicationInfo(ASSOCIATED_APP,
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID))
+ .thenReturn(associatedAppInfo);
+ Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP))
+ .thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS);
+ CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager,
+ mTelephonyManager, mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS);
+ Mockito.verify(mPackageManager).setApplicationEnabledSetting(
+ CARRIER_APP, PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
+ PackageManager.DONT_KILL_APP, USER_ID, CALLING_PACKAGE);
+ Mockito.verify(mPackageManager).setApplicationEnabledSetting(
+ ASSOCIATED_APP, PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
+ PackageManager.DONT_KILL_APP, USER_ID, CALLING_PACKAGE);
Mockito.verify(mPackageManager).grantDefaultPermissionsToEnabledCarrierApps(
new String[] {appInfo.packageName}, USER_ID);
}
@@ -220,11 +341,11 @@
appInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER;
Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP,
- PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo);
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo);
Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP))
.thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS);
CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager,
- mTelephonyManager, USER_ID, CARRIER_APPS);
+ mTelephonyManager, mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS);
Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting(
Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(),
Mockito.anyString());
@@ -242,9 +363,10 @@
appInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER;
Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP,
- PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo);
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo);
CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager,
- null /* telephonyManager */, USER_ID, CARRIER_APPS);
+ null /* telephonyManager */, mContentResolver, USER_ID, CARRIER_APPS,
+ ASSOCIATED_APPS);
Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting(
Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(),
Mockito.anyString());
@@ -261,11 +383,11 @@
appInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP,
- PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo);
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo);
Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP))
.thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS);
CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager,
- mTelephonyManager, USER_ID, CARRIER_APPS);
+ mTelephonyManager, mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS);
Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting(
Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(),
Mockito.anyString());
@@ -282,9 +404,10 @@
appInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP,
- PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo);
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo);
CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager,
- null /* telephonyManager */, USER_ID, CARRIER_APPS);
+ null /* telephonyManager */, mContentResolver, USER_ID, CARRIER_APPS,
+ ASSOCIATED_APPS);
Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting(
Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(),
Mockito.anyString());
@@ -301,11 +424,11 @@
appInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP,
- PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo);
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo);
Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP))
.thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS);
CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager,
- mTelephonyManager, USER_ID, CARRIER_APPS);
+ mTelephonyManager, mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS);
Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting(
Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(),
Mockito.anyString());
@@ -322,9 +445,10 @@
appInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP,
- PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo);
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo);
CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager,
- null /* telephonyManager */, USER_ID, CARRIER_APPS);
+ null /* telephonyManager */, mContentResolver, USER_ID, CARRIER_APPS,
+ ASSOCIATED_APPS);
Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting(
Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(),
Mockito.anyString());
@@ -341,11 +465,11 @@
appInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_UPDATED_SYSTEM_APP;
appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP,
- PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo);
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo);
Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP))
.thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS);
CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager,
- mTelephonyManager, USER_ID, CARRIER_APPS);
+ mTelephonyManager, mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS);
Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting(
Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(),
Mockito.anyString());
@@ -362,9 +486,10 @@
appInfo.flags |= ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_UPDATED_SYSTEM_APP;
appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP,
- PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo);
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo);
CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager,
- null /* telephonyManager */, USER_ID, CARRIER_APPS);
+ null /* telephonyManager */, mContentResolver, USER_ID, CARRIER_APPS,
+ ASSOCIATED_APPS);
Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting(
Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(),
Mockito.anyString());
@@ -373,22 +498,108 @@
Mockito.any(String[].class), Mockito.anyInt());
}
- /** Configured app has no privileges, and is in the default state - should disable until use. */
+ /**
+ * Configured app has no privileges, and is in the default state - should disable until use.
+ * Associated app is enabled and should not be touched.
+ */
@Test @SmallTest
- public void testDisableCarrierAppsUntilPrivileged_NoPrivileges_Default() throws Exception {
+ public void testDisableCarrierAppsUntilPrivileged_NoPrivileges_EnabledAssociated_Default()
+ throws Exception {
ApplicationInfo appInfo = new ApplicationInfo();
appInfo.packageName = CARRIER_APP;
appInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP,
- PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo);
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo);
+ ApplicationInfo associatedAppInfo = new ApplicationInfo();
+ associatedAppInfo.packageName = ASSOCIATED_APP;
+ associatedAppInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
+ associatedAppInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
+ Mockito.when(mPackageManager.getApplicationInfo(ASSOCIATED_APP,
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID))
+ .thenReturn(associatedAppInfo);
Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP))
.thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS);
CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager,
- mTelephonyManager, USER_ID, CARRIER_APPS);
+ mTelephonyManager, mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS);
Mockito.verify(mPackageManager).setApplicationEnabledSetting(
CARRIER_APP, PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED, 0, USER_ID,
CALLING_PACKAGE);
+ Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting(
+ ASSOCIATED_APP, PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED, 0,
+ USER_ID, CALLING_PACKAGE);
+ Mockito.verify(mPackageManager, Mockito.never())
+ .grantDefaultPermissionsToEnabledCarrierApps(
+ Mockito.any(String[].class), Mockito.anyInt());
+ }
+
+ /**
+ * Configured app has no privileges, and is in the default state along with associated app -
+ * should disable both.
+ */
+ @Test @SmallTest
+ public void testDisableCarrierAppsUntilPrivileged_NoPrivileges_Associated_Default()
+ throws Exception {
+ ApplicationInfo appInfo = new ApplicationInfo();
+ appInfo.packageName = CARRIER_APP;
+ appInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
+ appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
+ Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP,
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo);
+ ApplicationInfo associatedAppInfo = new ApplicationInfo();
+ associatedAppInfo.packageName = ASSOCIATED_APP;
+ associatedAppInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
+ associatedAppInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
+ Mockito.when(mPackageManager.getApplicationInfo(ASSOCIATED_APP,
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID))
+ .thenReturn(associatedAppInfo);
+ Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP))
+ .thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS);
+ CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager,
+ mTelephonyManager, mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS);
+ Mockito.verify(mPackageManager).setApplicationEnabledSetting(
+ CARRIER_APP, PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED, 0, USER_ID,
+ CALLING_PACKAGE);
+ Mockito.verify(mPackageManager).setApplicationEnabledSetting(
+ ASSOCIATED_APP, PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED, 0,
+ USER_ID, CALLING_PACKAGE);
+ Mockito.verify(mPackageManager, Mockito.never())
+ .grantDefaultPermissionsToEnabledCarrierApps(
+ Mockito.any(String[].class), Mockito.anyInt());
+ }
+
+ /**
+ * Configured app has no privileges, and is in the default state along with associated app, and
+ * disabling has already occurred - should only disable configured app.
+ */
+ @Test @SmallTest
+ public void testDisableCarrierAppsUntilPrivileged_NoPrivileges_Associated_Default_AlreadyRun()
+ throws Exception {
+ Settings.Secure.putIntForUser(
+ mContentResolver, Settings.Secure.CARRIER_APPS_HANDLED, 1, USER_ID);
+ ApplicationInfo appInfo = new ApplicationInfo();
+ appInfo.packageName = CARRIER_APP;
+ appInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
+ appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
+ Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP,
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo);
+ ApplicationInfo associatedAppInfo = new ApplicationInfo();
+ associatedAppInfo.packageName = ASSOCIATED_APP;
+ associatedAppInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
+ associatedAppInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
+ Mockito.when(mPackageManager.getApplicationInfo(ASSOCIATED_APP,
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID))
+ .thenReturn(associatedAppInfo);
+ Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP))
+ .thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS);
+ CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager,
+ mTelephonyManager, mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS);
+ Mockito.verify(mPackageManager).setApplicationEnabledSetting(
+ CARRIER_APP, PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED, 0, USER_ID,
+ CALLING_PACKAGE);
+ Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting(
+ Mockito.eq(ASSOCIATED_APP), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(),
+ Mockito.anyString());
Mockito.verify(mPackageManager, Mockito.never())
.grantDefaultPermissionsToEnabledCarrierApps(
Mockito.any(String[].class), Mockito.anyInt());
@@ -402,9 +613,10 @@
appInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP,
- PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo);
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo);
CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager,
- null /* telephonyManager */, USER_ID, CARRIER_APPS);
+ null /* telephonyManager */, mContentResolver, USER_ID, CARRIER_APPS,
+ ASSOCIATED_APPS);
Mockito.verify(mPackageManager).setApplicationEnabledSetting(
CARRIER_APP, PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED, 0, USER_ID,
CALLING_PACKAGE);
@@ -422,11 +634,11 @@
appInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED;
Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP,
- PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo);
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo);
Mockito.when(mTelephonyManager.checkCarrierPrivilegesForPackageAnyPhone(CARRIER_APP))
.thenReturn(TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS);
CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager,
- mTelephonyManager, USER_ID, CARRIER_APPS);
+ mTelephonyManager, mContentResolver, USER_ID, CARRIER_APPS, ASSOCIATED_APPS);
Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting(
Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(),
Mockito.anyString());
@@ -444,9 +656,10 @@
appInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
appInfo.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED;
Mockito.when(mPackageManager.getApplicationInfo(CARRIER_APP,
- PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo);
+ PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS, USER_ID)).thenReturn(appInfo);
CarrierAppUtils.disableCarrierAppsUntilPrivileged(CALLING_PACKAGE, mPackageManager,
- null /* telephonyManager */, USER_ID, CARRIER_APPS);
+ null /* telephonyManager */, mContentResolver, USER_ID, CARRIER_APPS,
+ ASSOCIATED_APPS);
Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting(
Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(),
Mockito.anyString());
@@ -454,5 +667,21 @@
.grantDefaultPermissionsToEnabledCarrierApps(
Mockito.any(String[].class), Mockito.anyInt());
}
+
+ class SettingsMockContentProvider extends MockContentProvider {
+ private int mExpectedValue;
+
+ @Override
+ public Bundle call(String method, String request, Bundle args) {
+ Bundle result = new Bundle();
+ if (Settings.CALL_METHOD_GET_SECURE.equals(method)) {
+ result.putString(Settings.NameValueTable.VALUE, Integer.toString(mExpectedValue));
+ } else {
+ mExpectedValue = Integer.parseInt(args.getString(Settings.NameValueTable.VALUE));
+ }
+ return result;
+ }
+ }
+
}