Add PrefController in XML support

Add the ability to define a Preference Controller
in xml using the 'controller' tag.

This is useful for two reasons:
- It allows the controllers to be instantiated via
reflection for Slices and Dashboard fragment
- Removes the requirement that controllers be defined manually
in Fragments

In order to be instantiable, they must have a unified construction
following either:

  ClassName(Context)
  ClassName(Context, String)

Also added a robotest that verifies that all controllers defined
in XML follow the constructor schema, and extend
BasePreferenceController.

Test: robotests
Bug: 67996923
Change-Id: I304b35dc666daebecf0c9e286696f3f2a510704a
This commit is contained in:
Matthew Fritze
2017-12-11 09:57:54 -08:00
parent 2f7240ceb5
commit 7d2b4f5fc7
13 changed files with 355 additions and 71 deletions

View File

@@ -30,11 +30,9 @@ import android.util.Log;
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settings.core.BasePreferenceController;
public class SystemUpdatePreferenceController extends AbstractPreferenceController implements
PreferenceControllerMixin {
public class SystemUpdatePreferenceController extends BasePreferenceController {
private static final String TAG = "SysUpdatePrefContr";
@@ -42,19 +40,16 @@ public class SystemUpdatePreferenceController extends AbstractPreferenceControll
private final UserManager mUm;
public SystemUpdatePreferenceController(Context context, UserManager um) {
super(context);
mUm = um;
public SystemUpdatePreferenceController(Context context) {
super(context, KEY_SYSTEM_UPDATE_SETTINGS);
mUm = UserManager.get(context);
}
@Override
public boolean isAvailable() {
return mUm.isAdminUser();
}
@Override
public String getPreferenceKey() {
return KEY_SYSTEM_UPDATE_SETTINGS;
public int getAvailabilityStatus() {
return mUm.isAdminUser()
? AVAILABLE
: DISABLED_UNSUPPORTED;
}
@Override
@@ -62,14 +57,14 @@ public class SystemUpdatePreferenceController extends AbstractPreferenceControll
super.displayPreference(screen);
if (isAvailable()) {
Utils.updatePreferenceToSpecificActivityOrRemove(mContext, screen,
KEY_SYSTEM_UPDATE_SETTINGS,
getPreferenceKey(),
Utils.UPDATE_PREFERENCE_FLAG_SET_TITLE_TO_MATCHING_ACTIVITY);
}
}
@Override
public boolean handlePreferenceTreeClick(Preference preference) {
if (KEY_SYSTEM_UPDATE_SETTINGS.equals(preference.getKey())) {
if (TextUtils.equals(getPreferenceKey(), preference.getKey())) {
CarrierConfigManager configManager =
(CarrierConfigManager) mContext.getSystemService(CARRIER_CONFIG_SERVICE);
PersistableBundle b = configManager.getConfig();
@@ -108,4 +103,4 @@ public class SystemUpdatePreferenceController extends AbstractPreferenceControll
mContext.getApplicationContext().sendBroadcast(intent);
}
}
}
}