Refactor LocationSettings

- Extends BasePreferenceController in LocationBasePreferenceController
which binds preference key based on xml file instead of writing the key
in java code. Then the controller can be used in many xmls.
- Modify LocationServicePreferenceController to support only personal or
profile user.

Bug: 141601408
Test: manual, robolectric
Change-Id: I51ee950dfb87474df84a8dc3db55fb911edcf599
This commit is contained in:
Raff Tsai
2019-11-22 11:35:40 +08:00
parent a6198c25be
commit 2229585e88
17 changed files with 209 additions and 273 deletions

View File

@@ -16,29 +16,46 @@ package com.android.settings.location;
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;
}
}