Merge "Make location history package not disableable."
diff --git a/src/com/android/settings/applications/ApplicationFeatureProviderImpl.java b/src/com/android/settings/applications/ApplicationFeatureProviderImpl.java
index c246c58..4bda99e 100644
--- a/src/com/android/settings/applications/ApplicationFeatureProviderImpl.java
+++ b/src/com/android/settings/applications/ApplicationFeatureProviderImpl.java
@@ -25,6 +25,7 @@
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.pm.UserInfo;
+import android.location.LocationManager;
import android.os.RemoteException;
import android.os.UserManager;
import android.telecom.DefaultDialerManager;
@@ -142,6 +143,12 @@
// Keep Settings intelligence enabled, otherwise search feature will be disabled.
keepEnabledPackages.add(
mContext.getString(R.string.config_settingsintelligence_package_name));
+ final LocationManager locationManager =
+ (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE);
+ final String locationHistoryPackage = locationManager.getLocationControllerExtraPackage();
+ if (locationHistoryPackage != null) {
+ keepEnabledPackages.add(locationHistoryPackage);
+ }
return keepEnabledPackages;
}
diff --git a/tests/robotests/src/com/android/settings/applications/ApplicationFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/applications/ApplicationFeatureProviderImplTest.java
index 9cfdf98..ebbf5e0 100644
--- a/tests/robotests/src/com/android/settings/applications/ApplicationFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/applications/ApplicationFeatureProviderImplTest.java
@@ -18,6 +18,7 @@
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import android.app.admin.DevicePolicyManager;
@@ -30,6 +31,7 @@
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.pm.UserInfo;
+import android.location.LocationManager;
import android.os.Build;
import android.os.UserHandle;
import android.os.UserManager;
@@ -83,6 +85,8 @@
private IPackageManager mPackageManagerService;
@Mock
private DevicePolicyManager mDevicePolicyManager;
+ @Mock
+ private LocationManager mLocationManager;
private ApplicationFeatureProvider mProvider;
@@ -95,6 +99,7 @@
when(mContext.getApplicationContext()).thenReturn(mContext);
when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
+ when(mContext.getSystemService(Context.LOCATION_SERVICE)).thenReturn(mLocationManager);
mProvider = new ApplicationFeatureProviderImpl(mContext, mPackageManager,
mPackageManagerService, mDevicePolicyManager);
@@ -255,19 +260,27 @@
@Test
@Config(shadows = {ShadowSmsApplication.class, ShadowDefaultDialerManager.class})
- public void getKeepEnabledPackages_shouldContainDefaultPhoneAndSms() {
+ public void getKeepEnabledPackages_shouldContainDefaultPhoneAndSmsAndLocationHistory() {
final String testDialer = "com.android.test.defaultdialer";
final String testSms = "com.android.test.defaultsms";
+ final String testLocationHistory = "com.android.test.location.history";
+
final String settingsIntelligence = RuntimeEnvironment.application.getString(
R.string.config_settingsintelligence_package_name);
ShadowSmsApplication.setDefaultSmsApplication(new ComponentName(testSms, "receiver"));
ShadowDefaultDialerManager.setDefaultDialerApplication(testDialer);
- ReflectionHelpers.setField(mProvider, "mContext", RuntimeEnvironment.application);
+
+ // Spy the real context to mock LocationManager.
+ Context spyContext = spy(RuntimeEnvironment.application);
+ when(mLocationManager.getLocationControllerExtraPackage()).thenReturn(testLocationHistory);
+ when(spyContext.getSystemService(Context.LOCATION_SERVICE)).thenReturn(mLocationManager);
+
+ ReflectionHelpers.setField(mProvider, "mContext", spyContext);
final Set<String> keepEnabledPackages = mProvider.getKeepEnabledPackages();
final List<String> expectedPackages = Arrays.asList(testDialer, testSms,
- settingsIntelligence);
+ settingsIntelligence, testLocationHistory);
assertThat(keepEnabledPackages).containsExactlyElementsIn(expectedPackages);
}