diff --git a/src/com/android/settings/core/BasePreferenceController.java b/src/com/android/settings/core/BasePreferenceController.java index 777f3dd3ea3..1bbee0c47a9 100644 --- a/src/com/android/settings/core/BasePreferenceController.java +++ b/src/com/android/settings/core/BasePreferenceController.java @@ -25,6 +25,8 @@ import com.android.settingslib.core.lifecycle.Lifecycle; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; import java.util.List; /** @@ -73,6 +75,44 @@ public abstract class BasePreferenceController extends AbstractPreferenceControl protected Lifecycle mLifecycle; + /** + * Instantiate a controller as specified controller type and user-defined key. + *

+ * This is done through reflection. Do not use this method unless you know what you are doing. + */ + public static BasePreferenceController createInstance(Context context, + String controllerName, String key) { + try { + final Class clazz = Class.forName(controllerName); + final Constructor preferenceConstructor = + clazz.getConstructor(Context.class, String.class); + final Object[] params = new Object[] {context, key}; + return (BasePreferenceController) preferenceConstructor.newInstance(params); + } catch (ClassNotFoundException | NoSuchMethodException | InstantiationException | + IllegalArgumentException | InvocationTargetException | IllegalAccessException e) { + throw new IllegalStateException( + "Invalid preference controller: " + controllerName, e); + } + } + + /** + * Instantiate a controller as specified controller type. + *

+ * This is done through reflection. Do not use this method unless you know what you are doing. + */ + public static BasePreferenceController createInstance(Context context, String controllerName) { + try { + final Class clazz = Class.forName(controllerName); + final Constructor preferenceConstructor = clazz.getConstructor(Context.class); + final Object[] params = new Object[] {context}; + return (BasePreferenceController) preferenceConstructor.newInstance(params); + } catch (ClassNotFoundException | NoSuchMethodException | InstantiationException | + IllegalArgumentException | InvocationTargetException | IllegalAccessException e) { + throw new IllegalStateException( + "Invalid preference controller: " + controllerName, e); + } + } + public BasePreferenceController(Context context, String preferenceKey) { super(context); mPreferenceKey = preferenceKey; diff --git a/src/com/android/settings/dashboard/DashboardFragment.java b/src/com/android/settings/dashboard/DashboardFragment.java index 6a88a38c99b..a4f9a6b8266 100644 --- a/src/com/android/settings/dashboard/DashboardFragment.java +++ b/src/com/android/settings/dashboard/DashboardFragment.java @@ -27,9 +27,6 @@ import android.text.TextUtils; import android.util.ArrayMap; import android.util.ArraySet; import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.overlay.FeatureFactory; @@ -58,7 +55,7 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment new ArrayMap<>(); private final Set mDashboardTilePrefKeys = new ArraySet<>(); - protected DashboardFeatureProvider mDashboardFeatureProvider; + private DashboardFeatureProvider mDashboardFeatureProvider; private DashboardTilePlaceholderPreferenceController mPlaceholderPreferenceController; private boolean mListeningToCategoryChange; private SummaryLoader mSummaryLoader; @@ -94,13 +91,6 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment } } - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - final View view = super.onCreateView(inflater, container, savedInstanceState); - return view; - } - @Override public void onCategoriesChanged() { final DashboardCategory category = diff --git a/src/com/android/settings/slices/SliceBuilderUtils.java b/src/com/android/settings/slices/SliceBuilderUtils.java index 11ff1c17515..a01ea1bd0ed 100644 --- a/src/com/android/settings/slices/SliceBuilderUtils.java +++ b/src/com/android/settings/slices/SliceBuilderUtils.java @@ -33,9 +33,6 @@ import com.android.settings.core.TogglePreferenceController; import com.android.settings.search.DatabaseIndexingUtils; import com.android.settingslib.core.AbstractPreferenceController; -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; - import androidx.app.slice.Slice; import androidx.app.slice.builders.ListBuilder; import androidx.app.slice.builders.ListBuilder.RowBuilder; @@ -87,46 +84,16 @@ public class SliceBuilderUtils { public static BasePreferenceController getPreferenceController(Context context, SliceData sliceData) { try { - return getController(context, sliceData, true /* isContextOnly */); + return BasePreferenceController.createInstance(context, + sliceData.getPreferenceController()); } catch (IllegalStateException e) { // Do nothing Log.d(TAG, "Could not find Context-only controller for preference controller: " + sliceData.getKey()); } - return getController(context, sliceData, false /* isContextOnly */); - } - - /** - * Attempts to build a {@link BasePreferenceController} from {@param SliceData}. - * - * @param sliceData Backing data for the Slice. - * @param contextOnlyCtor {@code true} when the constructor for the - * {@link BasePreferenceController} - * only takes a {@link Context}. Else the constructor will be ({@link - * Context}, {@code String}. - */ - private static BasePreferenceController getController(Context context, SliceData sliceData, - boolean contextOnlyCtor) { - try { - Class clazz = Class.forName(sliceData.getPreferenceController()); - Constructor preferenceConstructor; - Object[] params; - - if (contextOnlyCtor) { - preferenceConstructor = clazz.getConstructor(Context.class); - params = new Object[]{context}; - } else { - preferenceConstructor = clazz.getConstructor(Context.class, String.class); - params = new Object[]{context, sliceData.getKey()}; - } - - return (BasePreferenceController) preferenceConstructor.newInstance(params); - } catch (ClassNotFoundException | NoSuchMethodException | InstantiationException | - IllegalArgumentException | InvocationTargetException | IllegalAccessException e) { - throw new IllegalStateException( - "Invalid preference controller: " + sliceData.getPreferenceController(), e); - } + return BasePreferenceController.createInstance(context, sliceData.getPreferenceController(), + sliceData.getKey()); } private static void addToggleAction(Context context, RowBuilder builder, boolean isChecked,