Merge "Make EuiccService un-disable-able."

This commit is contained in:
TreeHugger Robot
2019-08-06 14:56:22 +00:00
committed by Android (Google) Code Review
2 changed files with 68 additions and 5 deletions

View File

@@ -33,6 +33,7 @@ import android.text.TextUtils;
import android.util.ArraySet;
import com.android.internal.telephony.SmsApplication;
import com.android.internal.telephony.euicc.EuiccConnector;
import com.android.settings.R;
import java.util.ArrayList;
@@ -141,6 +142,12 @@ public class ApplicationFeatureProviderImpl implements ApplicationFeatureProvide
keepEnabledPackages.add(defaultSms.getPackageName());
}
// Keep Euicc Service enabled.
final ComponentInfo euicc = EuiccConnector.findBestComponent(mPm);
if (euicc != null) {
keepEnabledPackages.add(euicc.packageName);
}
keepEnabledPackages.addAll(getEnabledPackageWhitelist());
final LocationManager locationManager =

View File

@@ -27,6 +27,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.ComponentInfo;
import android.content.pm.IPackageManager;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
@@ -36,11 +37,12 @@ import android.os.Build;
import android.os.UserHandle;
import android.os.UserManager;
import com.android.settings.R;
import com.android.internal.telephony.euicc.EuiccConnector;
import com.android.settings.testutils.ApplicationTestUtils;
import com.android.settingslib.testutils.shadow.ShadowDefaultDialerManager;
import com.android.settingslib.testutils.shadow.ShadowSmsApplication;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -49,6 +51,8 @@ import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
import org.robolectric.shadows.ShadowApplication;
import org.robolectric.util.ReflectionHelpers;
@@ -105,6 +109,12 @@ public final class ApplicationFeatureProviderImplTest {
mPackageManagerService, mDevicePolicyManager);
}
@After
@Config(shadows = {ShadowEuiccConnector.class})
public void tearDown() {
ShadowEuiccConnector.reset();
}
private void verifyCalculateNumberOfPolicyInstalledApps(boolean async) {
setUpUsersAndInstalledApps();
@@ -165,7 +175,7 @@ public final class ApplicationFeatureProviderImplTest {
.thenReturn(PackageManager.INSTALL_REASON_POLICY);
mAppCount = -1;
mProvider.calculateNumberOfAppsWithAdminGrantedPermissions(new String[] {PERMISSION}, async,
mProvider.calculateNumberOfAppsWithAdminGrantedPermissions(new String[]{PERMISSION}, async,
(num) -> mAppCount = num);
if (async) {
ShadowApplication.runBackgroundTasks();
@@ -202,7 +212,7 @@ public final class ApplicationFeatureProviderImplTest {
.thenReturn(PackageManager.INSTALL_REASON_POLICY);
mAppList = null;
mProvider.listAppsWithAdminGrantedPermissions(new String[] {PERMISSION},
mProvider.listAppsWithAdminGrantedPermissions(new String[]{PERMISSION},
(list) -> mAppList = list);
assertThat(mAppList).isNotNull();
assertThat(mAppList.size()).isEqualTo(2);
@@ -251,10 +261,10 @@ public final class ApplicationFeatureProviderImplTest {
new ApplicationInfo(app2.activityInfo.applicationInfo)));
assertThat(mProvider.findPersistentPreferredActivities(MAIN_USER_ID,
new Intent[] {viewIntent, editIntent, sendIntent}))
new Intent[]{viewIntent, editIntent, sendIntent}))
.isEqualTo(expectedMainUserActivities);
assertThat(mProvider.findPersistentPreferredActivities(MANAGED_PROFILE_ID,
new Intent[] {viewIntent, editIntent, sendIntent}))
new Intent[]{viewIntent, editIntent, sendIntent}))
.isEqualTo(expectedManagedUserActivities);
}
@@ -282,6 +292,33 @@ public final class ApplicationFeatureProviderImplTest {
assertThat(keepEnabledPackages).containsAllIn(expectedPackages);
}
@Test
@Config(shadows = {ShadowSmsApplication.class, ShadowDefaultDialerManager.class,
ShadowEuiccConnector.class})
public void getKeepEnabledPackages_hasEuiccComponent_shouldContainEuiccPackage() {
final String testDialer = "com.android.test.defaultdialer";
final String testSms = "com.android.test.defaultsms";
final String testLocationHistory = "com.android.test.location.history";
final String testEuicc = "com.android.test.euicc";
ShadowSmsApplication.setDefaultSmsApplication(new ComponentName(testSms, "receiver"));
ShadowDefaultDialerManager.setDefaultDialerApplication(testDialer);
final ComponentInfo componentInfo = new ComponentInfo();
componentInfo.packageName = testEuicc;
ShadowEuiccConnector.setBestComponent(componentInfo);
// Spy the real context to mock LocationManager.
Context spyContext = spy(RuntimeEnvironment.application);
when(mLocationManager.getExtraLocationControllerPackage()).thenReturn(testLocationHistory);
when(spyContext.getSystemService(Context.LOCATION_SERVICE)).thenReturn(mLocationManager);
ReflectionHelpers.setField(mProvider, "mContext", spyContext);
final Set<String> keepEnabledPackages = mProvider.getKeepEnabledPackages();
assertThat(keepEnabledPackages).contains(testEuicc);
}
@Test
@Config(shadows = {ShadowSmsApplication.class, ShadowDefaultDialerManager.class})
public void getKeepEnabledPackages_shouldContainSettingsIntelligence() {
@@ -354,4 +391,23 @@ public final class ApplicationFeatureProviderImplTest {
resolveInfo.activityInfo = activityInfo;
return resolveInfo;
}
@Implements(EuiccConnector.class)
public static class ShadowEuiccConnector {
private static ComponentInfo sBestComponent;
@Implementation
protected static ComponentInfo findBestComponent(PackageManager packageManager) {
return sBestComponent;
}
public static void setBestComponent(ComponentInfo componentInfo) {
sBestComponent = componentInfo;
}
public static void reset() {
sBestComponent = null;
}
}
}