1 package com.android.settings.location; 2 3 import static com.google.common.truth.Truth.assertThat; 4 5 import static org.mockito.Mockito.spy; 6 import static org.mockito.Mockito.when; 7 8 import android.content.Context; 9 import android.location.LocationManager; 10 import android.provider.Settings; 11 12 import androidx.lifecycle.LifecycleOwner; 13 14 import com.android.settings.R; 15 import com.android.settingslib.core.lifecycle.Lifecycle; 16 import com.android.settingslib.utils.StringUtil; 17 18 import org.junit.Before; 19 import org.junit.Test; 20 import org.junit.runner.RunWith; 21 import org.mockito.Mock; 22 import org.mockito.MockitoAnnotations; 23 import org.robolectric.RobolectricTestRunner; 24 import org.robolectric.RuntimeEnvironment; 25 26 import java.util.HashMap; 27 import java.util.Map; 28 29 @RunWith(RobolectricTestRunner.class) 30 public class AppLocationPermissionPreferenceControllerTest { 31 32 private AppLocationPermissionPreferenceController mController; 33 34 @Mock 35 private Context mContext; 36 37 private LifecycleOwner mLifecycleOwner; 38 private Lifecycle mLifecycle; 39 private LocationManager mLocationManager; 40 private LocationSettings mLocationSettings; 41 42 @Before setUp()43 public void setUp() { 44 MockitoAnnotations.initMocks(this); 45 mContext = RuntimeEnvironment.application; 46 mLifecycleOwner = () -> mLifecycle; 47 mLifecycle = new Lifecycle(mLifecycleOwner); 48 mLocationSettings = spy(new LocationSettings()); 49 when(mLocationSettings.getSettingsLifecycle()).thenReturn(mLifecycle); 50 mController = new AppLocationPermissionPreferenceController(mContext, "key"); 51 mController.init(mLocationSettings); 52 mLocationManager = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE); 53 } 54 55 @Test isAvailable_noLocationLinkPermission_shouldReturnFalse()56 public void isAvailable_noLocationLinkPermission_shouldReturnFalse() { 57 Settings.Global.putInt(mContext.getContentResolver(), 58 Settings.Global.LOCATION_SETTINGS_LINK_TO_PERMISSIONS_ENABLED, 0); 59 60 assertThat(mController.isAvailable()).isFalse(); 61 } 62 63 @Test displayPreference_hasLocationLinkPermission_shouldReturnTrue()64 public void displayPreference_hasLocationLinkPermission_shouldReturnTrue() { 65 Settings.Global.putInt(mContext.getContentResolver(), 66 Settings.Global.LOCATION_SETTINGS_LINK_TO_PERMISSIONS_ENABLED, 1); 67 68 assertThat(mController.isAvailable()).isTrue(); 69 } 70 71 @Test getSummary_whenLocationIsOff_shouldReturnStringForOff()72 public void getSummary_whenLocationIsOff_shouldReturnStringForOff() { 73 mLocationManager.setLocationEnabledForUser(false, android.os.Process.myUserHandle()); 74 75 assertThat(mController.getSummary()).isEqualTo( 76 mContext.getString(R.string.location_app_permission_summary_location_off)); 77 } 78 79 @Test getSummary_whenLocationIsOn_shouldReturnLoadingString()80 public void getSummary_whenLocationIsOn_shouldReturnLoadingString() { 81 mLocationManager.setLocationEnabledForUser(true, android.os.Process.myUserHandle()); 82 83 assertThat(mController.getSummary()).isEqualTo( 84 mContext.getString(R.string.location_settings_loading_app_permission_stats)); 85 } 86 87 @Test getSummary_whenLocationAppCountIsOne_shouldShowSingularString()88 public void getSummary_whenLocationAppCountIsOne_shouldShowSingularString() { 89 mLocationManager.setLocationEnabledForUser(true, android.os.Process.myUserHandle()); 90 mController.mNumHasLocation = 1; 91 mController.mNumTotal = 1; 92 93 Map<String, Object> arguments = new HashMap<>(); 94 arguments.put("count", 1); 95 arguments.put("total", 1); 96 assertThat(mController.getSummary()).isEqualTo(StringUtil.getIcuPluralsString(mContext, 97 arguments, R.string.location_app_permission_summary_location_on)); 98 } 99 100 @Test getSummary_whenLocationAppCountIsGreaterThanOne_shouldShowPluralString()101 public void getSummary_whenLocationAppCountIsGreaterThanOne_shouldShowPluralString() { 102 mLocationManager.setLocationEnabledForUser(true, android.os.Process.myUserHandle()); 103 mController.mNumHasLocation = 5; 104 mController.mNumTotal = 10; 105 106 Map<String, Object> arguments = new HashMap<>(); 107 arguments.put("count", 5); 108 arguments.put("total", 10); 109 assertThat(mController.getSummary()).isEqualTo(StringUtil.getIcuPluralsString(mContext, 110 arguments, R.string.location_app_permission_summary_location_on)); 111 } 112 } 113