Fix shifting problem in location services page
Controller generates the injection location settings in updateState() which happens in onResume. That's the primary reason why we observed the shifting issue. In a good practice, we generate preference in displayPreference(), and then update the setting state in updateState(). In this cl, we create a base controller class to encapsulate most implementation, and developer need to inject location services in child class. Test: Add work profile, and see correct services list. Bug: 183169265 Change-Id: I5735ba974da87ad83b56791abd8a8637c2317571
This commit is contained in:
@@ -20,6 +20,8 @@ import android.content.Context;
|
||||
import android.os.UserHandle;
|
||||
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceCategory;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
|
||||
import com.android.settings.widget.RestrictedAppPreference;
|
||||
|
||||
@@ -30,7 +32,7 @@ import java.util.Map;
|
||||
* Retrieve the Location Services used in work profile user.
|
||||
*/
|
||||
public class LocationInjectedServicesForWorkPreferenceController extends
|
||||
LocationInjectedServicesPreferenceController {
|
||||
LocationInjectedServiceBasePreferenceController {
|
||||
private static final String TAG = "LocationWorkPrefCtrl";
|
||||
|
||||
public LocationInjectedServicesForWorkPreferenceController(Context context, String key) {
|
||||
@@ -38,10 +40,10 @@ public class LocationInjectedServicesForWorkPreferenceController extends
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateState(Preference preference) {
|
||||
mCategoryLocationServices.removeAll();
|
||||
protected void injectLocationServices(PreferenceScreen screen) {
|
||||
final PreferenceCategory categoryLocationServices =
|
||||
screen.findPreference(getPreferenceKey());
|
||||
final Map<Integer, List<Preference>> prefs = getLocationServices();
|
||||
boolean show = false;
|
||||
for (Map.Entry<Integer, List<Preference>> entry : prefs.entrySet()) {
|
||||
for (Preference pref : entry.getValue()) {
|
||||
if (pref instanceof RestrictedAppPreference) {
|
||||
@@ -49,11 +51,8 @@ public class LocationInjectedServicesForWorkPreferenceController extends
|
||||
}
|
||||
}
|
||||
if (entry.getKey() != UserHandle.myUserId()) {
|
||||
LocationSettings.addPreferencesSorted(entry.getValue(),
|
||||
mCategoryLocationServices);
|
||||
show = true;
|
||||
LocationSettings.addPreferencesSorted(entry.getValue(), categoryLocationServices);
|
||||
}
|
||||
}
|
||||
mCategoryLocationServices.setVisible(show);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user