See the License for the specific language governing permissions and
limitations under the License.
-->
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- android:title="@string/location_category_recent_location_requests"
- android:key="recent_location_requests_see_all">
- <PreferenceCategory
- android:key="all_recent_location_requests"/>
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
+ android:title="@string/location_category_recent_location_requests"
+ android:key="recent_location_requests_see_all">
+ <PreferenceCategory
+ android:key="all_recent_location_requests"
+ settings:controller="com.android.settings.location.RecentLocationRequestSeeAllPreferenceController"/>
+
</PreferenceScreen>
limitations under the License.
-->
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res-auto"
- android:key="location_settings"
- android:title="@string/location_settings_title"
- settings:keywords="@string/keywords_location">
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
+ android:key="location_settings"
+ android:title="@string/location_settings_title"
+ settings:keywords="@string/keywords_location">
- <PreferenceCategory
- android:key="recent_location_requests"
- android:title="@string/location_category_recent_location_requests"/>
+ <PreferenceCategory
+ android:key="recent_location_requests"
+ android:title="@string/location_category_recent_location_requests"
+ settings:controller="com.android.settings.location.RecentLocationRequestPreferenceController"/>
- <Preference
- android:key="recent_location_requests_see_all_button"
- android:title="@string/location_recent_location_requests_see_all"
- android:icon="@drawable/ic_chevron_right_24dp"
- android:fragment="com.android.settings.location.RecentLocationRequestSeeAllFragment"
- settings:searchable="false"/>
+ <Preference
+ android:key="recent_location_requests_see_all_button"
+ android:title="@string/location_recent_location_requests_see_all"
+ android:icon="@drawable/ic_chevron_right_24dp"
+ android:fragment="com.android.settings.location.RecentLocationRequestSeeAllFragment"
+ settings:searchable="false"/>
- <PreferenceCategory
- android:key="location_advanced_settings"
- android:layout="@layout/preference_category_no_label"
- settings:initialExpandedChildrenCount="2">
+ <PreferenceCategory
+ android:key="location_advanced_settings"
+ android:layout="@layout/preference_category_no_label"
+ settings:initialExpandedChildrenCount="2">
- <!-- This preference category gets removed if new_recent_location_ui is disabled -->
- <Preference
- android:key="app_level_permissions"
- android:title="@string/location_app_level_permissions">
- <intent android:action="android.intent.action.MANAGE_PERMISSION_APPS">
- <extra android:name="android.intent.extra.PERMISSION_NAME"
- android:value="android.permission-group.LOCATION" />
- </intent>
- </Preference>
+ <!-- This preference category gets removed if new_recent_location_ui is disabled -->
+ <Preference
+ android:key="app_level_permissions"
+ android:title="@string/location_app_level_permissions"
+ settings:controller="com.android.settings.location.AppLocationPermissionPreferenceController">
+ <intent android:action="android.intent.action.MANAGE_PERMISSION_APPS">
+ <extra android:name="android.intent.extra.PERMISSION_NAME"
+ android:value="android.permission-group.LOCATION"/>
+ </intent>
+ </Preference>
- <Preference
- android:key="location_scanning"
- android:title="@string/location_scanning_screen_title"
- android:fragment="com.android.settings.location.ScanningSettings"/>
+ <Preference
+ android:fragment="com.android.settings.location.ScanningSettings"
+ android:key="location_scanning"
+ android:title="@string/location_scanning_screen_title"
+ settings:controller="com.android.settings.location.LocationScanningPreferenceController"/>
- <!-- This preference gets removed if there is no managed profile -->
- <com.android.settingslib.RestrictedSwitchPreference
- android:key="managed_profile_location_switch"
- android:title="@string/managed_profile_location_switch_title"
- settings:useAdminDisabledSummary="true"
- android:enabled="false"
- android:selectable="true" />
+ <!-- This preference gets removed if there is no managed profile -->
+ <com.android.settingslib.RestrictedSwitchPreference
+ android:enabled="false"
+ android:key="managed_profile_location_switch"
+ android:selectable="true"
+ android:title="@string/managed_profile_location_switch_title"
+ settings:controller="com.android.settings.location.LocationForWorkPreferenceController"
+ settings:useAdminDisabledSummary="true"/>
- <PreferenceCategory
- android:key="location_services"
- android:layout="@layout/preference_category_no_label"/>
+ <PreferenceCategory
+ android:key="location_services"
+ android:layout="@layout/preference_category_no_label"
+ settings:controller="com.android.settings.location.LocationServicePreferenceController"/>
- <!-- This preference gets removed if there is no managed profile -->
- <PreferenceCategory
- android:title="@string/managed_profile_location_services"
- android:key="location_services_managed_profile" />
+ <!-- This preference gets removed if there is no managed profile -->
+ <PreferenceCategory
+ android:key="location_services_managed_profile"
+ android:title="@string/managed_profile_location_services"/>
- </PreferenceCategory>
+ </PreferenceCategory>
- <PreferenceCategory
- android:key="location_footer"
- android:layout="@layout/preference_category_no_label"
- settings:allowDividerAbove="false"/>
+ <PreferenceCategory
+ android:key="location_footer"
+ android:layout="@layout/preference_category_no_label"
+ settings:allowDividerAbove="false"
+ settings:controller="com.android.settings.location.LocationFooterPreferenceController"/>
</PreferenceScreen>
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settingslib.core.lifecycle.Lifecycle;
import java.util.Arrays;
import java.util.List;
public class AppLocationPermissionPreferenceController extends
LocationBasePreferenceController implements PreferenceControllerMixin {
- private static final String KEY_APP_LEVEL_PERMISSIONS = "app_level_permissions";
/** Total number of apps that has location permission. */
@VisibleForTesting
int mNumTotal = -1;
private final LocationManager mLocationManager;
private Preference mPreference;
- public AppLocationPermissionPreferenceController(Context context, Lifecycle lifecycle) {
- super(context, lifecycle);
+ public AppLocationPermissionPreferenceController(Context context, String key) {
+ super(context, key);
mLocationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
}
@Override
- public String getPreferenceKey() {
- return KEY_APP_LEVEL_PERMISSIONS;
- }
-
- @Override
- public boolean isAvailable() {
+ public int getAvailabilityStatus() {
return Settings.Global.getInt(mContext.getContentResolver(),
- Settings.Global.LOCATION_SETTINGS_LINK_TO_PERMISSIONS_ENABLED, 1) == 1;
+ Settings.Global.LOCATION_SETTINGS_LINK_TO_PERMISSIONS_ENABLED, 1) == 1 ? AVAILABLE
+ : UNSUPPORTED_ON_DEVICE;
}
@Override
import android.content.Context;
import android.os.UserManager;
-import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settings.core.BasePreferenceController;
+import com.android.settings.dashboard.DashboardFragment;
import com.android.settingslib.core.lifecycle.Lifecycle;
/**
* A base controller for preferences that listens to location settings change and modifies location
* settings.
*/
-public abstract class LocationBasePreferenceController extends AbstractPreferenceController
- implements PreferenceControllerMixin, LocationEnabler.LocationModeChangeListener {
+public abstract class LocationBasePreferenceController extends BasePreferenceController
+ implements LocationEnabler.LocationModeChangeListener {
- protected final UserManager mUserManager;
- protected final LocationEnabler mLocationEnabler;
+ protected UserManager mUserManager;
+ protected LocationEnabler mLocationEnabler;
+ protected DashboardFragment mFragment;
+ protected Lifecycle mLifecycle;
- public LocationBasePreferenceController(Context context, Lifecycle lifecycle) {
- super(context);
- mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
- mLocationEnabler = new LocationEnabler(context, this /* listener */, lifecycle);
+ /**
+ * Constructor of LocationBasePreferenceController. {@link BasePreferenceController} uses
+ * reflection to create controller, all controllers extends {@link BasePreferenceController}
+ * should have this function.
+ */
+ public LocationBasePreferenceController(Context context, String key) {
+ super(context, key);
+ }
+
+ /**
+ * Initialize {@link LocationEnabler} in this controller
+ *
+ * @param fragment The {@link DashboardFragment} uses the controller.
+ */
+ public void init(DashboardFragment fragment) {
+ mFragment = fragment;
+ mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
+ mLifecycle = mFragment.getSettingsLifecycle();
+ mLocationEnabler = new LocationEnabler(mContext, this /* listener */, mLifecycle);
}
@Override
- public boolean isAvailable() {
- return true;
+ public int getAvailabilityStatus() {
+ return AVAILABLE;
}
}
*/
package com.android.settings.location;
-import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.location.LocationManager;
import android.util.Log;
-import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
import androidx.preference.PreferenceCategory;
public class LocationFooterPreferenceController extends LocationBasePreferenceController {
private static final String TAG = "LocationFooter";
- private static final String KEY_LOCATION_FOOTER = "location_footer";
private static final Intent INJECT_INTENT =
new Intent(LocationManager.SETTINGS_FOOTER_DISPLAYED_ACTION);
private final PackageManager mPackageManager;
- public LocationFooterPreferenceController(Context context) {
- // we don't care location mode changes, so pass in a null lifecycle to disable listening
- super(context, null);
+ public LocationFooterPreferenceController(Context context, String key) {
+ super(context, key);
mPackageManager = context.getPackageManager();
}
- @Override
- public String getPreferenceKey() {
- return KEY_LOCATION_FOOTER;
- }
-
/**
* Insert footer preferences.
*/
* inject.
*/
@Override
- public boolean isAvailable() {
- return !getFooterData().isEmpty();
+ public int getAvailabilityStatus() {
+ return !getFooterData().isEmpty() ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
}
/**
import android.content.Context;
import android.os.UserManager;
+import android.text.TextUtils;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
import com.android.settings.Utils;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedSwitchPreference;
-import com.android.settingslib.core.lifecycle.Lifecycle;
public class LocationForWorkPreferenceController extends LocationBasePreferenceController {
- /**
- * Key for managed profile location switch preference. Shown only
- * if there is a managed profile.
- */
- private static final String KEY_MANAGED_PROFILE_SWITCH = "managed_profile_location_switch";
-
private RestrictedSwitchPreference mPreference;
- public LocationForWorkPreferenceController(Context context, Lifecycle lifecycle) {
- super(context, lifecycle);
+ public LocationForWorkPreferenceController(Context context, String key) {
+ super(context, key);
}
@Override
public boolean handlePreferenceTreeClick(Preference preference) {
- if (KEY_MANAGED_PROFILE_SWITCH.equals(preference.getKey())) {
+ if (TextUtils.equals(preference.getKey(), getPreferenceKey())) {
final boolean switchState = mPreference.isChecked();
mUserManager.setUserRestriction(UserManager.DISALLOW_SHARE_LOCATION, !switchState,
Utils.getManagedProfile(mUserManager));
@Override
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
- mPreference = screen.findPreference(KEY_MANAGED_PROFILE_SWITCH);
+ mPreference = screen.findPreference(getPreferenceKey());
}
@Override
- public boolean isAvailable() {
+ public int getAvailabilityStatus() {
// Looking for a managed profile. If there are no managed profiles then we are removing the
// managed profile category.
- return Utils.getManagedProfile(mUserManager) != null;
- }
-
- @Override
- public String getPreferenceKey() {
- return KEY_MANAGED_PROFILE_SWITCH;
+ return Utils.getManagedProfile(mUserManager) != null ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
}
@Override
import android.content.Context;
import android.provider.Settings;
-import androidx.annotation.VisibleForTesting;
-
import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
public class LocationScanningPreferenceController extends BasePreferenceController {
- @VisibleForTesting static final String KEY_LOCATION_SCANNING = "location_scanning";
- private final Context mContext;
- public LocationScanningPreferenceController(Context context) {
- super(context, KEY_LOCATION_SCANNING);
- mContext = context;
+ public LocationScanningPreferenceController(Context context, String key) {
+ super(context, key);
}
@Override
import androidx.preference.PreferenceScreen;
import com.android.settings.Utils;
+import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.widget.RestrictedAppPreference;
-import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnPause;
import com.android.settingslib.core.lifecycle.events.OnResume;
private static final String TAG = "LocationServicePrefCtrl";
/** Key for preference category "Location services" */
- private static final String KEY_LOCATION_SERVICES = "location_services";
+ @VisibleForTesting
+ static final String KEY_LOCATION_SERVICES = "location_services";
/** Key for preference category "Location services for work" */
- private static final String KEY_LOCATION_SERVICES_MANAGED = "location_services_managed_profile";
+ @VisibleForTesting
+ static final String KEY_LOCATION_SERVICES_MANAGED = "location_services_managed_profile";
@VisibleForTesting
static final IntentFilter INTENT_FILTER_INJECTED_SETTING_CHANGED =
new IntentFilter(SettingInjectorService.ACTION_INJECTED_SETTING_CHANGED);
private PreferenceCategory mCategoryLocationServices;
private PreferenceCategory mCategoryLocationServicesManaged;
- private final LocationSettings mFragment;
- private final AppSettingsInjector mInjector;
+ @VisibleForTesting
+ AppSettingsInjector mInjector;
/** Receives UPDATE_INTENT */
@VisibleForTesting
BroadcastReceiver mInjectedSettingsReceiver;
- public LocationServicePreferenceController(Context context, LocationSettings fragment,
- Lifecycle lifecycle) {
- this(context, fragment, lifecycle, new AppSettingsInjector(context));
- }
-
- @VisibleForTesting
- LocationServicePreferenceController(Context context, LocationSettings fragment,
- Lifecycle lifecycle, AppSettingsInjector injector) {
- super(context, lifecycle);
- mFragment = fragment;
- mInjector = injector;
- if (lifecycle != null) {
- lifecycle.addObserver(this);
- }
+ public LocationServicePreferenceController(Context context, String key) {
+ super(context, key);
}
@Override
- public String getPreferenceKey() {
- return KEY_LOCATION_SERVICES;
+ public void init(DashboardFragment fragment) {
+ super.init(fragment);
+ mInjector = new AppSettingsInjector(mContext);
}
@Override
@Override
public void updateState(Preference preference) {
- mCategoryLocationServices.removeAll();
- mCategoryLocationServicesManaged.removeAll();
+ if (mCategoryLocationServices != null) {
+ mCategoryLocationServices.removeAll();
+ }
+ if (mCategoryLocationServicesManaged != null) {
+ mCategoryLocationServicesManaged.removeAll();
+ }
final Map<Integer, List<Preference>> prefs = getLocationServices();
boolean showPrimary = false;
boolean showManaged = false;
}
}
if (entry.getKey() == UserHandle.myUserId()) {
- LocationSettings.addPreferencesSorted(entry.getValue(), mCategoryLocationServices);
+ if (mCategoryLocationServices != null) {
+ LocationSettings.addPreferencesSorted(entry.getValue(),
+ mCategoryLocationServices);
+ }
showPrimary = true;
} else {
- LocationSettings.addPreferencesSorted(entry.getValue(),
- mCategoryLocationServicesManaged);
+ if (mCategoryLocationServicesManaged != null) {
+ LocationSettings.addPreferencesSorted(entry.getValue(),
+ mCategoryLocationServicesManaged);
+ }
showManaged = true;
}
}
- mCategoryLocationServices.setVisible(showPrimary);
- mCategoryLocationServicesManaged.setVisible(showManaged);
+ if (mCategoryLocationServices != null) {
+ mCategoryLocationServices.setVisible(showPrimary);
+ }
+ if (mCategoryLocationServicesManaged != null) {
+ mCategoryLocationServicesManaged.setVisible(showManaged);
+ }
}
@Override
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.widget.SwitchBar;
-import com.android.settingslib.core.AbstractPreferenceController;
-import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.location.RecentLocationApps;
import com.android.settingslib.search.SearchIndexable;
-import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
}
@Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+
+ use(AppLocationPermissionPreferenceController.class).init(this);
+ use(RecentLocationRequestPreferenceController.class).init(this);
+ use(LocationServicePreferenceController.class).init(this);
+ use(LocationFooterPreferenceController.class).init(this);
+ use(LocationForWorkPreferenceController.class).init(this);
+ }
+
+ @Override
protected int getPreferenceScreenResId() {
return R.xml.location_settings;
}
return TAG;
}
- @Override
- protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
- return buildPreferenceControllers(context, this, getSettingsLifecycle());
- }
-
static void addPreferencesSorted(List<Preference> prefs, PreferenceGroup container) {
// If there's some items to display, sort the items and add them to the container.
Collections.sort(prefs,
return R.string.help_url_location_access;
}
- private static List<AbstractPreferenceController> buildPreferenceControllers(
- Context context, LocationSettings fragment, Lifecycle lifecycle) {
- final List<AbstractPreferenceController> controllers = new ArrayList<>();
- controllers.add(new AppLocationPermissionPreferenceController(context, lifecycle));
- controllers.add(new LocationForWorkPreferenceController(context, lifecycle));
- controllers.add(new RecentLocationRequestPreferenceController(context, fragment, lifecycle));
- controllers.add(new LocationScanningPreferenceController(context));
- controllers.add(new LocationServicePreferenceController(context, fragment, lifecycle));
- controllers.add(new LocationFooterPreferenceController(context));
- return controllers;
- }
-
/**
* For Search.
*/
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
- new BaseSearchIndexProvider(R.xml.location_settings) {
-
- @Override
- public List<AbstractPreferenceController> createPreferenceControllers(Context
- context) {
- return buildPreferenceControllers(context, null /* fragment */,
- null /* lifecycle */);
- }
- };
+ new BaseSearchIndexProvider(R.xml.location_settings);
}
import com.android.settings.applications.appinfo.AppInfoDashboardFragment;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.dashboard.DashboardFragment;
-import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.location.RecentLocationApps;
import com.android.settingslib.widget.apppreference.AppPreference;
import java.util.List;
public class RecentLocationRequestPreferenceController extends LocationBasePreferenceController {
- /** Key for preference category "Recent location requests" */
- private static final String KEY_RECENT_LOCATION_REQUESTS = "recent_location_requests";
- @VisibleForTesting
- static final String KEY_SEE_ALL_BUTTON = "recent_location_requests_see_all_button";
- private final LocationSettings mFragment;
+
private final RecentLocationApps mRecentLocationApps;
private PreferenceCategory mCategoryRecentLocationRequests;
}
}
- public RecentLocationRequestPreferenceController(Context context, LocationSettings fragment,
- Lifecycle lifecycle) {
- this(context, fragment, lifecycle, new RecentLocationApps(context));
- }
-
- @VisibleForTesting
- RecentLocationRequestPreferenceController(Context context, LocationSettings fragment,
- Lifecycle lifecycle, RecentLocationApps recentApps) {
- super(context, lifecycle);
- mFragment = fragment;
- mRecentLocationApps = recentApps;
- }
-
- @Override
- public String getPreferenceKey() {
- return KEY_RECENT_LOCATION_REQUESTS;
+ public RecentLocationRequestPreferenceController(Context context, String key) {
+ super(context, key);
+ mRecentLocationApps = new RecentLocationApps(context);
}
@Override
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
- mCategoryRecentLocationRequests =
- (PreferenceCategory) screen.findPreference(KEY_RECENT_LOCATION_REQUESTS);
+ mCategoryRecentLocationRequests = screen.findPreference(getPreferenceKey());
}
@Override
import com.android.settings.R;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settingslib.core.AbstractPreferenceController;
-import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.search.SearchIndexable;
-import java.util.ArrayList;
-import java.util.List;
-
/** Dashboard Fragment to display all recent location requests, sorted by recency. */
@SearchIndexable
public class RecentLocationRequestSeeAllFragment extends DashboardFragment {
}
@Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+
+ mController = use(RecentLocationRequestSeeAllPreferenceController.class);
+ mController.init(this);
+ }
+
+ @Override
protected int getPreferenceScreenResId() {
return R.xml.location_recent_requests_see_all;
}
}
@Override
- protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
- return buildPreferenceControllers(context, getSettingsLifecycle(), this);
- }
-
- @Override
public boolean onOptionsItemSelected(MenuItem menuItem) {
switch (menuItem.getItemId()) {
case MENU_SHOW_SYSTEM:
mHideSystemMenu.setVisible(mShowSystem);
}
- private static List<AbstractPreferenceController> buildPreferenceControllers(
- Context context, Lifecycle lifecycle, RecentLocationRequestSeeAllFragment fragment) {
- final List<AbstractPreferenceController> controllers = new ArrayList<>();
- final RecentLocationRequestSeeAllPreferenceController controller =
- new RecentLocationRequestSeeAllPreferenceController(context, lifecycle, fragment);
- controllers.add(controller);
- if (fragment != null) {
- fragment.mController = controller;
- }
- return controllers;
- }
-
- /**
- * For Search.
- */
- public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
- new BaseSearchIndexProvider(R.xml.location_recent_requests_see_all) {
-
- @Override
- public List<AbstractPreferenceController> getPreferenceControllers(Context
- context) {
- return buildPreferenceControllers(
- context, /* lifecycle = */ null, /* fragment = */ null);
- }
- };
-
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
R.string.menu_hide_system);
updateMenu();
}
+
+ /**
+ * For Search.
+ */
+ public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+ new BaseSearchIndexProvider(R.xml.location_recent_requests_see_all);
}
import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceScreen;
-import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settings.R;
import com.android.settingslib.location.RecentLocationApps;
import com.android.settingslib.widget.apppreference.AppPreference;
import java.util.List;
-import com.android.settings.R;
-
/** Preference controller for preference category displaying all recent location requests. */
public class RecentLocationRequestSeeAllPreferenceController
extends LocationBasePreferenceController {
- /** Key for preference category "All recent location requests" */
- private static final String KEY_ALL_RECENT_LOCATION_REQUESTS = "all_recent_location_requests";
- private final RecentLocationRequestSeeAllFragment mFragment;
+
private PreferenceCategory mCategoryAllRecentLocationRequests;
private RecentLocationApps mRecentLocationApps;
private boolean mShowSystem = false;
private Preference mPreference;
- public RecentLocationRequestSeeAllPreferenceController(
- Context context, Lifecycle lifecycle, RecentLocationRequestSeeAllFragment fragment) {
- this(context, lifecycle, fragment, new RecentLocationApps(context));
- }
-
- @VisibleForTesting
- RecentLocationRequestSeeAllPreferenceController(
- Context context,
- Lifecycle lifecycle,
- RecentLocationRequestSeeAllFragment fragment,
- RecentLocationApps recentLocationApps) {
- super(context, lifecycle);
- mFragment = fragment;
- mRecentLocationApps = recentLocationApps;
- }
-
- @Override
- public String getPreferenceKey() {
- return KEY_ALL_RECENT_LOCATION_REQUESTS;
+ public RecentLocationRequestSeeAllPreferenceController(Context context, String key) {
+ super(context, key);
+ mRecentLocationApps = new RecentLocationApps(context);
}
@Override
@Override
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
- mCategoryAllRecentLocationRequests =
- (PreferenceCategory) screen.findPreference(KEY_ALL_RECENT_LOCATION_REQUESTS);
+ mCategoryAllRecentLocationRequests = screen.findPreference(getPreferenceKey());
}
@Override
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
import android.content.Context;
import android.location.LocationManager;
import android.provider.Settings;
private LifecycleOwner mLifecycleOwner;
private Lifecycle mLifecycle;
private LocationManager mLocationManager;
+ private LocationSettings mLocationSettings;
@Before
public void setUp() {
mContext = RuntimeEnvironment.application;
mLifecycleOwner = () -> mLifecycle;
mLifecycle = new Lifecycle(mLifecycleOwner);
- mController = new AppLocationPermissionPreferenceController(mContext, mLifecycle);
+ mLocationSettings = spy(new LocationSettings());
+ when(mLocationSettings.getSettingsLifecycle()).thenReturn(mLifecycle);
+ mController = new AppLocationPermissionPreferenceController(mContext, "key");
+ mController.init(mLocationSettings);
mLocationManager = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE);
}
Context context = spy(RuntimeEnvironment.application);
when(context.getPackageManager()).thenReturn(mPackageManager);
when(mPreferenceCategory.getContext()).thenReturn(context);
- mController = spy(new LocationFooterPreferenceController(context));
+ mController = spy(new LocationFooterPreferenceController(context, "key"));
when(mPackageManager.getResourcesForApplication(any(ApplicationInfo.class)))
.thenReturn(mResources);
when(mResources.getString(TEST_RES_ID)).thenReturn(TEST_TEXT);
private LocationForWorkPreferenceController mController;
private LifecycleOwner mLifecycleOwner;
private Lifecycle mLifecycle;
+ private LocationSettings mLocationSettings;
@Before
public void setUp() {
when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
mLifecycleOwner = () -> mLifecycle;
mLifecycle = new Lifecycle(mLifecycleOwner);
- mController = spy(new LocationForWorkPreferenceController(mContext, mLifecycle));
+ mLocationSettings = spy(new LocationSettings());
+ when(mLocationSettings.getSettingsLifecycle()).thenReturn(mLifecycle);
+ mController = spy(new LocationForWorkPreferenceController(mContext, "key"));
+ mController.init(mLocationSettings);
mockManagedProfile();
ReflectionHelpers.setField(mController, "mLocationEnabler", mEnabler);
- when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+ when(mScreen.findPreference(any())).thenReturn(mPreference);
final String key = mController.getPreferenceKey();
when(mPreference.getKey()).thenReturn(key);
when(mPreference.isVisible()).thenReturn(true);
@Before
public void setUp() {
mContext = RuntimeEnvironment.application;
- mController = new LocationScanningPreferenceController(mContext);
+ mController = new LocationScanningPreferenceController(mContext, "key");
}
@Test
*/
package com.android.settings.location;
+import static com.android.settings.location.LocationServicePreferenceController.KEY_LOCATION_SERVICES;
+import static com.android.settings.location.LocationServicePreferenceController.KEY_LOCATION_SERVICES_MANAGED;
+
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
@RunWith(RobolectricTestRunner.class)
@Config(shadows = ShadowUserManager.class)
public class LocationServicePreferenceControllerTest {
- private static final String LOCATION_SERVICES_MANAGED_PROFILE_KEY =
- "location_services_managed_profile";
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private LocationSettings mFragment;
mContext = spy(RuntimeEnvironment.application);
mLifecycleOwner = () -> mLifecycle;
mLifecycle = new Lifecycle(mLifecycleOwner);
- mController = spy(new LocationServicePreferenceController(
- mContext, mFragment, mLifecycle, mSettingsInjector));
+ mController = spy(new LocationServicePreferenceController(mContext, KEY_LOCATION_SERVICES));
+ when(mFragment.getSettingsLifecycle()).thenReturn(mLifecycle);
+ mController.init(mFragment);
+ mController.mInjector = mSettingsInjector;
final String key = mController.getPreferenceKey();
when(mScreen.findPreference(key)).thenReturn(mCategoryPrimary);
- when(mScreen.findPreference(LOCATION_SERVICES_MANAGED_PROFILE_KEY)).thenReturn(
+ when(mScreen.findPreference(KEY_LOCATION_SERVICES_MANAGED)).thenReturn(
mCategoryManaged);
when(mCategoryPrimary.getKey()).thenReturn(key);
- when(mCategoryManaged.getKey()).thenReturn(LOCATION_SERVICES_MANAGED_PROFILE_KEY);
+ when(mCategoryManaged.getKey()).thenReturn(KEY_LOCATION_SERVICES_MANAGED);
when(mContext.getSystemService(Context.DEVICE_POLICY_SERVICE))
.thenReturn(mDevicePolicyManager);
}