OSDN Git Service

Register most app info related controllers in xml
authorFan Zhang <zhfan@google.com>
Thu, 29 Mar 2018 22:45:49 +0000 (15:45 -0700)
committerFan Zhang <zhfan@google.com>
Fri, 30 Mar 2018 00:55:41 +0000 (17:55 -0700)
Bug: 77216595
Test: robotests
Change-Id: I79afa38820b7518d8b3112148802797ebcf6d184

40 files changed:
res/xml/app_info_settings.xml
src/com/android/settings/applications/DefaultAppSettings.java
src/com/android/settings/applications/appinfo/AdvancedAppInfoPreferenceCategoryController.java [new file with mode: 0644]
src/com/android/settings/applications/appinfo/AppDataUsagePreferenceController.java
src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java
src/com/android/settings/applications/appinfo/AppInfoPreferenceControllerBase.java
src/com/android/settings/applications/appinfo/AppInstallerInfoPreferenceController.java
src/com/android/settings/applications/appinfo/AppInstallerPreferenceCategoryController.java
src/com/android/settings/applications/appinfo/AppNotificationPreferenceController.java
src/com/android/settings/applications/appinfo/AppOpenByDefaultPreferenceController.java
src/com/android/settings/applications/appinfo/AppPermissionPreferenceController.java
src/com/android/settings/applications/appinfo/AppStoragePreferenceController.java
src/com/android/settings/applications/appinfo/AppVersionPreferenceController.java
src/com/android/settings/applications/appinfo/DrawOverlayDetailPreferenceController.java
src/com/android/settings/applications/appinfo/ExternalSourceDetailPreferenceController.java
src/com/android/settings/applications/appinfo/InstantAppDomainsPreferenceController.java
src/com/android/settings/applications/appinfo/PictureInPictureDetailPreferenceController.java
src/com/android/settings/applications/appinfo/WriteSystemSettingsPreferenceController.java
src/com/android/settings/enterprise/EnterprisePrivacySettings.java
src/com/android/settings/language/LanguageAndInputSettings.java
src/com/android/settings/notification/SoundSettings.java
src/com/android/settings/security/EncryptionAndCredential.java
src/com/android/settings/security/SecuritySettings.java
src/com/android/settings/slices/SliceBroadcastReceiver.java
src/com/android/settings/widget/PreferenceCategoryController.java
tests/robotests/assets/grandfather_invalid_base_preference_controller_constructor
tests/robotests/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceControllerTest.java
tests/robotests/src/com/android/settings/applications/appinfo/AppInfoPreferenceControllerBaseTest.java
tests/robotests/src/com/android/settings/applications/appinfo/AppInstallerInfoPreferenceControllerTest.java
tests/robotests/src/com/android/settings/applications/appinfo/AppNotificationPreferenceControllerTest.java
tests/robotests/src/com/android/settings/applications/appinfo/AppOpenByDefaultPreferenceControllerTest.java
tests/robotests/src/com/android/settings/applications/appinfo/AppPermissionPreferenceControllerTest.java
tests/robotests/src/com/android/settings/applications/appinfo/AppStoragePreferenceControllerTest.java
tests/robotests/src/com/android/settings/applications/appinfo/AppVersionPreferenceControllerTest.java
tests/robotests/src/com/android/settings/applications/appinfo/DrawOverlayDetailPreferenceControllerTest.java
tests/robotests/src/com/android/settings/applications/appinfo/ExternalSourceDetailPreferenceControllerTest.java
tests/robotests/src/com/android/settings/applications/appinfo/InstantAppDomainsPreferenceControllerTest.java
tests/robotests/src/com/android/settings/applications/appinfo/PictureInPictureDetailPreferenceControllerTest.java
tests/robotests/src/com/android/settings/applications/appinfo/WriteSystemSettingsPreferenceControllerTest.java
tests/robotests/src/com/android/settings/widget/PreferenceCategoryControllerTest.java

index 4695b44..86b0df0 100644 (file)
@@ -17,9 +17,9 @@
 
 <PreferenceScreen
     xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:settings="http://schemas.android.com/apk/res-auto"
     android:key="installed_app_detail_settings_screen"
-    app:initialExpandedChildrenCount="6">
+    settings:initialExpandedChildrenCount="6">
 
     <com.android.settings.applications.LayoutPreference
         android:key="header_view"
 
     <Preference
         android:key="notification_settings"
-        android:title="@string/notifications_label" />
+        android:title="@string/notifications_label"
+        settings:controller="com.android.settings.applications.appinfo.AppNotificationPreferenceController" />
 
     <com.android.settings.widget.FixedLineSummaryPreference
         android:key="permission_settings"
         android:title="@string/permissions_label"
         android:summary="@string/summary_placeholder"
-        app:summaryLineCount="1" />
+        settings:summaryLineCount="1"
+        settings:controller="com.android.settings.applications.appinfo.AppPermissionPreferenceController" />
 
     <Preference
         android:key="storage_settings"
         android:title="@string/storage_settings"
-        android:summary="@string/summary_placeholder" />
+        android:summary="@string/summary_placeholder"
+        settings:controller="com.android.settings.applications.appinfo.AppStoragePreferenceController" />
 
     <com.android.settings.applications.AppDomainsPreference
         android:key="instant_app_launch_supported_domain_urls"
         android:title="@string/app_launch_supported_domain_urls_title"
-        android:selectable="true" />
+        android:selectable="true"
+        settings:controller="com.android.settings.applications.appinfo.InstantAppDomainsPreferenceController" />
 
     <Preference
         android:key="data_settings"
         android:title="@string/data_usage_summary_title"
-        android:summary="@string/summary_placeholder" />
+        android:summary="@string/summary_placeholder"
+        settings:controller="com.android.settings.applications.appinfo.AppDataUsagePreferenceController" />
 
     <Preference
         android:key="time_spent_in_app"
         android:title="@string/time_spent_in_app_pref_title"
-        app:controller="com.android.settings.applications.appinfo.TimeSpentInAppPreferenceController" />
+        settings:controller="com.android.settings.applications.appinfo.TimeSpentInAppPreferenceController" />
 
     <Preference
         android:key="battery"
@@ -76,7 +81,8 @@
         android:key="preferred_settings"
         android:title="@string/launch_by_default"
         android:summary="@string/summary_placeholder"
-        android:selectable="true" />
+        android:selectable="true"
+        settings:controller="com.android.settings.applications.appinfo.AppOpenByDefaultPreferenceController" />
 
     <Preference
         android:key="memory"
     <!-- Advanced apps settings -->
     <PreferenceCategory
         android:key="advanced_app_info"
-        android:title="@string/advanced_apps">
+        android:title="@string/advanced_apps"
+        settings:controller="com.android.settings.applications.appinfo.AdvancedAppInfoPreferenceCategoryController">
 
         <Preference
             android:key="system_alert_window"
             android:title="@string/draw_overlay"
-            android:summary="@string/summary_placeholder" />
+            android:summary="@string/summary_placeholder"
+            settings:controller="com.android.settings.applications.appinfo.DrawOverlayDetailPreferenceController" />
 
         <Preference
             android:key="write_settings_apps"
             android:title="@string/write_settings"
-            android:summary="@string/summary_placeholder" />
+            android:summary="@string/summary_placeholder"
+            settings:controller="com.android.settings.applications.appinfo.WriteSystemSettingsPreferenceController" />
 
         <Preference
             android:key="picture_in_picture"
             android:title="@string/picture_in_picture_app_detail_title"
-            android:summary="@string/summary_placeholder" />
+            android:summary="@string/summary_placeholder"
+            settings:controller="com.android.settings.applications.appinfo.PictureInPictureDetailPreferenceController" />
 
         <Preference
             android:key="install_other_apps"
             android:title="@string/install_other_apps"
-            android:summary="@string/summary_placeholder" />
+            android:summary="@string/summary_placeholder"
+            settings:controller="com.android.settings.applications.appinfo.ExternalSourceDetailPreferenceController" />
 
     </PreferenceCategory>
 
     <!-- App installer info -->
     <PreferenceCategory
         android:key="app_installer"
-        android:title="@string/app_install_details_group_title">
+        android:title="@string/app_install_details_group_title"
+        settings:controller="com.android.settings.applications.appinfo.AppInstallerPreferenceCategoryController">
 
         <Preference
             android:key="app_info_store"
-            android:title="@string/app_install_details_title" />
+            android:title="@string/app_install_details_title"
+            settings:controller="com.android.settings.applications.appinfo.AppInstallerInfoPreferenceController" />
 
     </PreferenceCategory>
 
     <Preference
         android:key="app_version"
         android:selectable="false"
-        android:order="9999" />
+        android:order="9999"
+        settings:controller="com.android.settings.applications.appinfo.AppVersionPreferenceController" />
 
 </PreferenceScreen>
\ No newline at end of file
index 7d74fbd..7fc405f 100644 (file)
@@ -76,7 +76,7 @@ public class DefaultAppSettings extends DashboardFragment {
         workControllers.add(new DefaultWorkBrowserPreferenceController(context));
         controllers.addAll(workControllers);
         controllers.add(new PreferenceCategoryController(
-                context, KEY_DEFAULT_WORK_CATEGORYworkControllers));
+                context, KEY_DEFAULT_WORK_CATEGORY).setChildren(workControllers));
         controllers.add(new DefaultAssistPreferenceController(context, KEY_ASSIST_VOICE_INPUT,
                 false /* showSetting */));
         controllers.add(new DefaultBrowserPreferenceController(context));
diff --git a/src/com/android/settings/applications/appinfo/AdvancedAppInfoPreferenceCategoryController.java b/src/com/android/settings/applications/appinfo/AdvancedAppInfoPreferenceCategoryController.java
new file mode 100644 (file)
index 0000000..aef3195
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications.appinfo;
+
+import android.content.Context;
+
+import com.android.settings.widget.PreferenceCategoryController;
+
+public class AdvancedAppInfoPreferenceCategoryController extends PreferenceCategoryController {
+
+    public AdvancedAppInfoPreferenceCategoryController(Context context, String key) {
+        super(context, key);
+    }
+}
index 669bc5a..a40562a 100644 (file)
@@ -38,7 +38,6 @@ import com.android.settings.datausage.AppDataUsage;
 import com.android.settings.datausage.DataUsageList;
 import com.android.settings.datausage.DataUsageUtils;
 import com.android.settingslib.AppItem;
-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;
@@ -48,16 +47,11 @@ import com.android.settingslib.net.ChartDataLoader;
 public class AppDataUsagePreferenceController extends AppInfoPreferenceControllerBase
         implements LoaderManager.LoaderCallbacks<ChartData>, LifecycleObserver, OnResume, OnPause {
 
-    private static final String KEY_DATA = "data_settings";
     private ChartData mChartData;
     private INetworkStatsSession mStatsSession;
 
-    public AppDataUsagePreferenceController(Context context, AppInfoDashboardFragment parent,
-            Lifecycle lifecycle) {
-        super(context, parent, KEY_DATA);
-        if (lifecycle != null) {
-            lifecycle.addObserver(this);
-        }
+    public AppDataUsagePreferenceController(Context context,String key) {
+        super(context, key);
     }
 
     @Override
index daed1e1..eddbd96 100755 (executable)
@@ -55,7 +55,6 @@ import com.android.settings.applications.manageapplications.ManageApplications;
 import com.android.settings.core.SubSettingLauncher;
 import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 import com.android.settings.dashboard.DashboardFragment;
-import com.android.settings.widget.PreferenceCategoryController;
 import com.android.settings.wrapper.DevicePolicyManagerWrapper;
 import com.android.settingslib.RestrictedLockUtils;
 import com.android.settingslib.applications.AppUtils;
@@ -84,8 +83,10 @@ public class AppInfoDashboardFragment extends DashboardFragment
     private static final String TAG = "AppInfoDashboard";
 
     // Menu identifiers
-    @VisibleForTesting static final int UNINSTALL_ALL_USERS_MENU = 1;
-    @VisibleForTesting static final int UNINSTALL_UPDATES = 2;
+    @VisibleForTesting
+    static final int UNINSTALL_ALL_USERS_MENU = 1;
+    @VisibleForTesting
+    static final int UNINSTALL_UPDATES = 2;
     static final int INSTALL_INSTANT_APP_MENU = 3;
 
     // Result code identifiers
@@ -106,8 +107,6 @@ public class AppInfoDashboardFragment extends DashboardFragment
     private static final int DLG_SPECIAL_DISABLE = DLG_BASE + 3;
     static final int DLG_CLEAR_INSTANT_APP = DLG_BASE + 4;
 
-    private static final String KEY_ADVANCED_APP_INFO_CATEGORY = "advanced_app_info";
-
     public static final String ARG_PACKAGE_NAME = "package";
     public static final String ARG_PACKAGE_UID = "uid";
 
@@ -156,7 +155,42 @@ public class AppInfoDashboardFragment extends DashboardFragment
     @Override
     public void onAttach(Context context) {
         super.onAttach(context);
-        use(TimeSpentInAppPreferenceController.class).setPackageName(getPackageName());
+        final String packageName = getPackageName();
+        use(TimeSpentInAppPreferenceController.class).setPackageName(packageName);
+
+        use(AppDataUsagePreferenceController.class).setParentFragment(this);
+        final AppInstallerInfoPreferenceController installer =
+                use(AppInstallerInfoPreferenceController.class);
+        installer.setPackageName(packageName);
+        installer.setParentFragment(this);
+        use(AppInstallerPreferenceCategoryController.class).setChildren(Arrays.asList(installer));
+        use(AppNotificationPreferenceController.class).setParentFragment(this);
+        use(AppOpenByDefaultPreferenceController.class).setParentFragment(this);
+        use(AppPermissionPreferenceController.class).setParentFragment(this);
+        use(AppPermissionPreferenceController.class).setPackageName(packageName);
+        use(AppStoragePreferenceController.class).setParentFragment(this);
+        use(AppVersionPreferenceController.class).setParentFragment(this);
+        use(InstantAppDomainsPreferenceController.class).setParentFragment(this);
+
+        final WriteSystemSettingsPreferenceController writeSystemSettings =
+                use(WriteSystemSettingsPreferenceController.class);
+        writeSystemSettings.setParentFragment(this);
+
+        final DrawOverlayDetailPreferenceController drawOverlay =
+                use(DrawOverlayDetailPreferenceController.class);
+        drawOverlay.setParentFragment(this);
+
+        final PictureInPictureDetailPreferenceController pip =
+                use(PictureInPictureDetailPreferenceController.class);
+        pip.setPackageName(packageName);
+        pip.setParentFragment(this);
+        final ExternalSourceDetailPreferenceController externalSource =
+                use(ExternalSourceDetailPreferenceController.class);
+        externalSource.setPackageName(packageName);
+        externalSource.setParentFragment(this);
+
+        use(AdvancedAppInfoPreferenceCategoryController.class).setChildren(Arrays.asList(
+                writeSystemSettings, drawOverlay, pip, externalSource));
     }
 
     @Override
@@ -227,16 +261,6 @@ public class AppInfoDashboardFragment extends DashboardFragment
         // when app state changes.
         controllers.add(
                 new AppHeaderViewPreferenceController(context, this, packageName, lifecycle));
-        controllers.add(new AppStoragePreferenceController(context, this, lifecycle));
-        controllers.add(new AppDataUsagePreferenceController(context, this, lifecycle));
-        controllers.add(new AppNotificationPreferenceController(context, this));
-        controllers.add(new AppOpenByDefaultPreferenceController(context, this));
-        controllers.add(new AppPermissionPreferenceController(context, this, packageName));
-        controllers.add(new AppVersionPreferenceController(context, this));
-        controllers.add(new InstantAppDomainsPreferenceController(context, this));
-        final AppInstallerInfoPreferenceController appInstallerInfoPreferenceController =
-                new AppInstallerInfoPreferenceController(context, this, packageName);
-        controllers.add(appInstallerInfoPreferenceController);
         mAppActionButtonPreferenceController =
                 new AppActionButtonPreferenceController(context, this, packageName);
         controllers.add(mAppActionButtonPreferenceController);
@@ -258,23 +282,15 @@ public class AppInfoDashboardFragment extends DashboardFragment
         controllers.add(new DefaultEmergencyShortcutPreferenceController(context, packageName));
         controllers.add(new DefaultSmsShortcutPreferenceController(context, packageName));
 
-        final List<AbstractPreferenceController> advancedAppInfoControllers = new ArrayList<>();
-        advancedAppInfoControllers.add(new DrawOverlayDetailPreferenceController(context, this));
-        advancedAppInfoControllers.add(new WriteSystemSettingsPreferenceController(context, this));
-        advancedAppInfoControllers.add(
-                new PictureInPictureDetailPreferenceController(context, this, packageName));
-        advancedAppInfoControllers.add(
-                new ExternalSourceDetailPreferenceController(context, this, packageName));
-        controllers.addAll(advancedAppInfoControllers);
-        controllers.add(new PreferenceCategoryController(
-                context, KEY_ADVANCED_APP_INFO_CATEGORY, advancedAppInfoControllers));
-
-        controllers.add(new AppInstallerPreferenceCategoryController(
-                context, Arrays.asList(appInstallerInfoPreferenceController)));
-
         return controllers;
     }
 
+    void addToCallbackList(Callback callback) {
+        if (callback != null) {
+            mCallbacks.add(callback);
+        }
+    }
+
     ApplicationsState.AppEntry getAppEntry() {
         return mAppEntry;
     }
@@ -291,7 +307,7 @@ public class AppInfoDashboardFragment extends DashboardFragment
     public void onPackageSizeChanged(String packageName) {
         if (!TextUtils.equals(packageName, mPackageName)) {
             Log.d(TAG, "Package change irrelevant, skipping");
-          return;
+            return;
         }
         refreshUi();
     }
@@ -429,7 +445,7 @@ public class AppInfoDashboardFragment extends DashboardFragment
         if (!mInitialized) {
             // First time init: are we displaying an uninstalled app?
             mInitialized = true;
-            mShowUninstalled = (mAppEntry.info.flags&ApplicationInfo.FLAG_INSTALLED) == 0;
+            mShowUninstalled = (mAppEntry.info.flags & ApplicationInfo.FLAG_INSTALLED) == 0;
         } else {
             // All other times: if the app no longer exists then we want
             // to go away.
@@ -437,12 +453,12 @@ public class AppInfoDashboardFragment extends DashboardFragment
                 final ApplicationInfo ainfo = getActivity().getPackageManager().getApplicationInfo(
                         mAppEntry.info.packageName,
                         PackageManager.MATCH_DISABLED_COMPONENTS
-                        | PackageManager.MATCH_ANY_USER);
+                                | PackageManager.MATCH_ANY_USER);
                 if (!mShowUninstalled) {
                     // If we did not start out with the app uninstalled, then
                     // it transitioning to the uninstalled state for the current
                     // user means we should go away as well.
-                    return (ainfo.flags&ApplicationInfo.FLAG_INSTALLED) != 0;
+                    return (ainfo.flags & ApplicationInfo.FLAG_INSTALLED) != 0;
                 }
             } catch (NameNotFoundException e) {
                 return false;
@@ -460,15 +476,17 @@ public class AppInfoDashboardFragment extends DashboardFragment
                         .setMessage(getActivity().getText(R.string.app_disable_dlg_text))
                         .setPositiveButton(R.string.app_disable_dlg_positive,
                                 new DialogInterface.OnClickListener() {
-                            public void onClick(DialogInterface dialog, int which) {
-                                // Disable the app
-                                mMetricsFeatureProvider.action(getContext(),
-                                        MetricsEvent.ACTION_SETTINGS_DISABLE_APP);
-                                new DisableChanger(AppInfoDashboardFragment.this, mAppEntry.info,
-                                        PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER)
-                                .execute((Object)null);
-                            }
-                        })
+                                    public void onClick(DialogInterface dialog, int which) {
+                                        // Disable the app
+                                        mMetricsFeatureProvider.action(getContext(),
+                                                MetricsEvent.ACTION_SETTINGS_DISABLE_APP);
+                                        new DisableChanger(AppInfoDashboardFragment.this,
+                                                mAppEntry.info,
+                                                PackageManager
+                                                        .COMPONENT_ENABLED_STATE_DISABLED_USER)
+                                                .execute((Object) null);
+                                    }
+                                })
                         .setNegativeButton(R.string.dlg_cancel, null)
                         .create();
             case DLG_SPECIAL_DISABLE:
@@ -476,14 +494,14 @@ public class AppInfoDashboardFragment extends DashboardFragment
                         .setMessage(getActivity().getText(R.string.app_disable_dlg_text))
                         .setPositiveButton(R.string.app_disable_dlg_positive,
                                 new DialogInterface.OnClickListener() {
-                            public void onClick(DialogInterface dialog, int which) {
-                                // Disable the app and ask for uninstall
-                                mMetricsFeatureProvider.action(getContext(),
-                                        MetricsEvent.ACTION_SETTINGS_DISABLE_APP);
-                                uninstallPkg(mAppEntry.info.packageName,
-                                        false, true);
-                            }
-                        })
+                                    public void onClick(DialogInterface dialog, int which) {
+                                        // Disable the app and ask for uninstall
+                                        mMetricsFeatureProvider.action(getContext(),
+                                                MetricsEvent.ACTION_SETTINGS_DISABLE_APP);
+                                        uninstallPkg(mAppEntry.info.packageName,
+                                                false, true);
+                                    }
+                                })
                         .setNegativeButton(R.string.dlg_cancel, null)
                         .create();
             case DLG_FORCE_STOP:
@@ -504,8 +522,8 @@ public class AppInfoDashboardFragment extends DashboardFragment
 
     private void uninstallPkg(String packageName, boolean allUsers, boolean andDisable) {
         stopListeningToPackageRemove();
-         // Create new intent to launch Uninstaller activity
-        final Uri packageURI = Uri.parse("package:"+packageName);
+        // Create new intent to launch Uninstaller activity
+        final Uri packageURI = Uri.parse("package:" + packageName);
         final Intent uninstallIntent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE, packageURI);
         uninstallIntent.putExtra(Intent.EXTRA_UNINSTALL_ALL_USERS, allUsers);
         mMetricsFeatureProvider.action(
@@ -632,7 +650,7 @@ public class AppInfoDashboardFragment extends DashboardFragment
                 if ((info.flags & ApplicationInfo.FLAG_INSTALLED) != 0) {
                     count++;
                 }
-            } catch(NameNotFoundException e) {
+            } catch (NameNotFoundException e) {
                 Log.e(TAG, "Package: " + packageName + " not found for user: " + userInfo.id);
             }
         }
@@ -707,10 +725,10 @@ public class AppInfoDashboardFragment extends DashboardFragment
     }
 
     private void setIntentAndFinish(boolean finish, boolean appChanged) {
-        if (localLOGV) Log.i(TAG, "appChanged="+appChanged);
+        if (localLOGV) Log.i(TAG, "appChanged=" + appChanged);
         final Intent intent = new Intent();
         intent.putExtra(ManageApplications.APP_CHG, appChanged);
-        final SettingsActivity sa = (SettingsActivity)getActivity();
+        final SettingsActivity sa = (SettingsActivity) getActivity();
         sa.finishPreferencePanel(Activity.RESULT_OK, intent);
         mFinishing = true;
     }
index fd545a7..70313d1 100644 (file)
@@ -32,16 +32,14 @@ import com.android.settings.core.BasePreferenceController;
 public abstract class AppInfoPreferenceControllerBase extends BasePreferenceController
         implements AppInfoDashboardFragment.Callback {
 
-    protected final AppInfoDashboardFragment mParent;
-    private final Class<? extends SettingsPreferenceFragment> mDetailFragmenClass;
-
+    protected AppInfoDashboardFragment mParent;
     protected Preference mPreference;
 
-    public AppInfoPreferenceControllerBase(Context context, AppInfoDashboardFragment parent,
-            String preferenceKey) {
+    private final Class<? extends SettingsPreferenceFragment> mDetailFragmentClass;
+
+    public AppInfoPreferenceControllerBase(Context context, String preferenceKey) {
         super(context, preferenceKey);
-        mParent = parent;
-        mDetailFragmenClass = getDetailFragmentClass();
+        mDetailFragmentClass = getDetailFragmentClass();
     }
 
     @Override
@@ -57,9 +55,9 @@ public abstract class AppInfoPreferenceControllerBase extends BasePreferenceCont
 
     @Override
     public boolean handlePreferenceTreeClick(Preference preference) {
-        if (TextUtils.equals(preference.getKey(), mPreferenceKey) && mDetailFragmenClass != null) {
+        if (TextUtils.equals(preference.getKey(), mPreferenceKey) && mDetailFragmentClass != null) {
             AppInfoDashboardFragment.startAppInfoFragment(
-                    mDetailFragmenClass, -1, getArguments(), mParent, mParent.getAppEntry());
+                    mDetailFragmentClass, -1, getArguments(), mParent, mParent.getAppEntry());
             return true;
         }
         return false;
@@ -70,6 +68,11 @@ public abstract class AppInfoPreferenceControllerBase extends BasePreferenceCont
         updateState(mPreference);
     }
 
+    public void setParentFragment(AppInfoDashboardFragment parent) {
+        mParent = parent;
+        parent.addToCallbackList(this);
+    }
+
     /**
      * Gets the fragment class to be launched when the preference is clicked.
      * @return the fragment to launch
index 1fdc690..3b3790b 100644 (file)
@@ -28,18 +28,12 @@ import com.android.settingslib.applications.AppUtils;
 
 public class AppInstallerInfoPreferenceController extends AppInfoPreferenceControllerBase {
 
-    private static final String KEY_APP_INSTALLER_INFO = "app_info_store";
+    private String mPackageName;
+    private String mInstallerPackage;
+    private CharSequence mInstallerLabel;
 
-    private final String mPackageName;
-    private final String mInstallerPackage;
-    private final CharSequence mInstallerLabel;
-
-    public AppInstallerInfoPreferenceController(Context context, AppInfoDashboardFragment parent,
-            String packageName) {
-        super(context, parent, KEY_APP_INSTALLER_INFO);
-        mPackageName = packageName;
-        mInstallerPackage = AppStoreUtil.getInstallerPackageName(mContext, mPackageName);
-        mInstallerLabel = Utils.getApplicationLabel(mContext, mInstallerPackage);
+    public AppInstallerInfoPreferenceController(Context context, String key) {
+        super(context, key);
     }
 
     @Override
@@ -47,7 +41,7 @@ public class AppInstallerInfoPreferenceController extends AppInfoPreferenceContr
         if (UserManager.get(mContext).isManagedProfile()) {
             return DISABLED_FOR_USER;
         }
-        return mInstallerLabel!= null ? AVAILABLE : DISABLED_FOR_USER;
+        return mInstallerLabel != null ? AVAILABLE : DISABLED_FOR_USER;
     }
 
     @Override
@@ -65,4 +59,9 @@ public class AppInstallerInfoPreferenceController extends AppInfoPreferenceContr
         }
     }
 
+    public void setPackageName(String packageName) {
+        mPackageName = packageName;
+        mInstallerPackage = AppStoreUtil.getInstallerPackageName(mContext, mPackageName);
+        mInstallerLabel = Utils.getApplicationLabel(mContext, mInstallerPackage);
+    }
 }
index 0e6ffe8..4a5c336 100644 (file)
@@ -19,17 +19,11 @@ package com.android.settings.applications.appinfo;
 import android.content.Context;
 
 import com.android.settings.widget.PreferenceCategoryController;
-import com.android.settingslib.core.AbstractPreferenceController;
-
-import java.util.List;
 
 public class AppInstallerPreferenceCategoryController extends PreferenceCategoryController {
 
-    private static final String KEY_APP_INSTALLER_INFO_CATEGORY = "app_installer";
-
-    public AppInstallerPreferenceCategoryController(Context context,
-            List<AbstractPreferenceController> childrenControllers) {
-        super(context, KEY_APP_INSTALLER_INFO_CATEGORY, childrenControllers);
+    public AppInstallerPreferenceCategoryController(Context context, String key) {
+        super(context, key);
     }
 
 }
index 5a970f6..87fa9ca 100644 (file)
@@ -29,14 +29,18 @@ import com.android.settingslib.applications.ApplicationsState;
 
 public class AppNotificationPreferenceController extends AppInfoPreferenceControllerBase {
 
-    private static final String KEY_NOTIFICATION = "notification_settings";
     private String mChannelId = null;
 
     // Used for updating notification preference.
     private final NotificationBackend mBackend = new NotificationBackend();
 
-    public AppNotificationPreferenceController(Context context, AppInfoDashboardFragment parent) {
-        super(context, parent, KEY_NOTIFICATION);
+    public AppNotificationPreferenceController(Context context, String key) {
+        super(context, key);
+    }
+
+    @Override
+    public void setParentFragment(AppInfoDashboardFragment parent) {
+        super.setParentFragment(parent);
         if (parent != null && parent.getActivity() != null
                 && parent.getActivity().getIntent() != null) {
             mChannelId = parent.getActivity().getIntent().getStringExtra(EXTRA_FRAGMENT_ARG_KEY);
@@ -63,6 +67,7 @@ public class AppNotificationPreferenceController extends AppInfoPreferenceContro
         return bundle;
     }
 
+
     private CharSequence getNotificationSummary(ApplicationsState.AppEntry appEntry,
             Context context, NotificationBackend backend) {
         NotificationBackend.AppRow appRow =
index 3f20381..a16a74d 100644 (file)
@@ -32,13 +32,11 @@ import com.android.settingslib.applications.ApplicationsState;
 
 public class AppOpenByDefaultPreferenceController extends AppInfoPreferenceControllerBase {
 
-    private static final String KEY_LAUNCH = "preferred_settings";
-
     private IUsbManager mUsbManager;
     private PackageManager mPackageManager;
 
-    public AppOpenByDefaultPreferenceController(Context context, AppInfoDashboardFragment parent) {
-        super(context, parent, KEY_LAUNCH);
+    public AppOpenByDefaultPreferenceController(Context context, String key) {
+        super(context, key);
         mUsbManager = IUsbManager.Stub.asInterface(ServiceManager.getService(Context.USB_SERVICE));
         mPackageManager = context.getPackageManager();
     }
@@ -49,9 +47,9 @@ public class AppOpenByDefaultPreferenceController extends AppInfoPreferenceContr
         final ApplicationsState.AppEntry appEntry = mParent.getAppEntry();
         if (appEntry == null || appEntry.info == null) {
             mPreference.setEnabled(false);
-        } else if ((appEntry.info.flags& ApplicationInfo.FLAG_INSTALLED) == 0
-                    || !appEntry.info.enabled) {
-                mPreference.setEnabled(false);
+        } else if ((appEntry.info.flags & ApplicationInfo.FLAG_INSTALLED) == 0
+                || !appEntry.info.enabled) {
+            mPreference.setEnabled(false);
         }
     }
 
index b844f78..c61dd43 100644 (file)
@@ -34,10 +34,9 @@ import java.util.List;
 public class AppPermissionPreferenceController extends AppInfoPreferenceControllerBase {
 
     private static final String TAG = "PermissionPrefControl";
-    private static final String KEY_PERMISSION = "permission_settings";
     private static final String EXTRA_HIDE_INFO_BUTTON = "hideInfoButton";
 
-    private final String mPackageName;
+    private String mPackageName;
 
     @VisibleForTesting
     final PermissionsSummaryHelper.PermissionsResultCallback mPermissionCallback
@@ -76,10 +75,8 @@ public class AppPermissionPreferenceController extends AppInfoPreferenceControll
         }
     };
 
-    public AppPermissionPreferenceController(Context context, AppInfoDashboardFragment parent,
-            String packageName) {
-        super(context, parent, KEY_PERMISSION);
-        mPackageName = packageName;
+    public AppPermissionPreferenceController(Context context, String key) {
+        super(context, key);
     }
 
     @Override
@@ -89,13 +86,17 @@ public class AppPermissionPreferenceController extends AppInfoPreferenceControll
 
     @Override
     public boolean handlePreferenceTreeClick(Preference preference) {
-        if (KEY_PERMISSION.equals(preference.getKey())) {
+        if (getPreferenceKey().equals(preference.getKey())) {
             startManagePermissionsActivity();
             return true;
         }
         return false;
     }
 
+    public void setPackageName(String packageName) {
+        mPackageName = packageName;
+    }
+
     private void startManagePermissionsActivity() {
         // start new activity to manage app permissions
         final Intent intent = new Intent(Intent.ACTION_MANAGE_APP_PERMISSIONS);
@@ -107,5 +108,4 @@ public class AppPermissionPreferenceController extends AppInfoPreferenceControll
             Log.w(TAG, "No app can handle android.intent.action.MANAGE_APP_PERMISSIONS");
         }
     }
-
 }
index 86383cb..913a6bd 100644 (file)
@@ -31,7 +31,6 @@ import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.applications.AppStorageSettings;
 import com.android.settings.applications.FetchPackageStorageAsyncLoader;
 import com.android.settingslib.applications.StorageStatsSource;
-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;
@@ -40,15 +39,10 @@ public class AppStoragePreferenceController extends AppInfoPreferenceControllerB
         implements LoaderManager.LoaderCallbacks<StorageStatsSource.AppStorageStats>,
         LifecycleObserver, OnResume, OnPause {
 
-    private static final String KEY_STORAGE = "storage_settings";
     private StorageStatsSource.AppStorageStats mLastResult;
 
-    public AppStoragePreferenceController(Context context, AppInfoDashboardFragment parent,
-            Lifecycle lifecycle) {
-        super(context, parent, KEY_STORAGE);
-        if (lifecycle != null) {
-            lifecycle.addObserver(this);
-        }
+    public AppStoragePreferenceController(Context context, String key) {
+        super(context, key);
     }
 
     @Override
index 0cfeb00..205b6d2 100644 (file)
 package com.android.settings.applications.appinfo;
 
 import android.content.Context;
-import android.support.v7.preference.Preference;
 import android.text.BidiFormatter;
 
 import com.android.settings.R;
 
 public class AppVersionPreferenceController extends AppInfoPreferenceControllerBase {
 
-    private static final String KEY_VERSION = "app_version";
-
-    public AppVersionPreferenceController(Context context, AppInfoDashboardFragment parent) {
-        super(context, parent, KEY_VERSION);
+    public AppVersionPreferenceController(Context context, String key) {
+        super(context, key);
     }
 
     @Override
-    public void updateState(Preference preference) {
-        preference.setSummary(mContext.getString(R.string.version_text,
-                BidiFormatter.getInstance().unicodeWrap(mParent.getPackageInfo().versionName)));
+    public CharSequence getSummary() {
+        return mContext.getString(R.string.version_text,
+                BidiFormatter.getInstance().unicodeWrap(mParent.getPackageInfo().versionName));
     }
-
 }
index ca63575..5274e28 100644 (file)
@@ -26,10 +26,8 @@ import com.android.settings.SettingsPreferenceFragment;
 
 public class DrawOverlayDetailPreferenceController extends AppInfoPreferenceControllerBase {
 
-    private static final String KEY = "system_alert_window";
-
-    public DrawOverlayDetailPreferenceController(Context context, AppInfoDashboardFragment parent) {
-        super(context, parent, KEY);
+    public DrawOverlayDetailPreferenceController(Context context, String key) {
+        super(context, key);
     }
 
     @Override
index 6fb6dc3..a1e8536 100644 (file)
@@ -26,14 +26,10 @@ import com.android.settings.applications.AppStateInstallAppsBridge;
 
 public class ExternalSourceDetailPreferenceController extends AppInfoPreferenceControllerBase {
 
-    private static final String KEY = "install_other_apps";
+    private String mPackageName;
 
-    private final String mPackageName;
-
-    public ExternalSourceDetailPreferenceController(Context context,
-            AppInfoDashboardFragment parent, String packageName) {
-        super(context, parent, KEY);
-        mPackageName = packageName;
+    public ExternalSourceDetailPreferenceController(Context context, String key) {
+        super(context, key);
     }
 
     @Override
@@ -67,4 +63,7 @@ public class ExternalSourceDetailPreferenceController extends AppInfoPreferenceC
         return appState.isPotentialAppSource();
     }
 
+    public void setPackageName(String packageName) {
+        mPackageName = packageName;
+    }
 }
index d89c538..211abf5 100644 (file)
@@ -28,13 +28,10 @@ import java.util.Set;
 
 public class InstantAppDomainsPreferenceController extends AppInfoPreferenceControllerBase {
 
-    private static final String KEY_INSTANT_APP_SUPPORTED_LINKS =
-            "instant_app_launch_supported_domain_urls";
-
     private PackageManager mPackageManager;
 
-    public InstantAppDomainsPreferenceController(Context context, AppInfoDashboardFragment parent) {
-        super(context, parent, KEY_INSTANT_APP_SUPPORTED_LINKS);
+    public InstantAppDomainsPreferenceController(Context context, String key) {
+        super(context, key);
         mPackageManager = mContext.getPackageManager();
     }
 
index 202317a..321fe65 100644 (file)
@@ -28,17 +28,15 @@ import com.android.settings.SettingsPreferenceFragment;
 
 public class PictureInPictureDetailPreferenceController extends AppInfoPreferenceControllerBase {
 
-    private static final String KEY = "picture_in_picture";
     private static final String TAG = "PicInPicDetailControl";
 
     private final PackageManager mPackageManager;
-    private final String mPackageName;
 
-    public PictureInPictureDetailPreferenceController(Context context,
-            AppInfoDashboardFragment parent, String packageName) {
-        super(context, parent, KEY);
+    private String mPackageName;
+
+    public PictureInPictureDetailPreferenceController(Context context, String key) {
+        super(context, key);
         mPackageManager = context.getPackageManager();
-        mPackageName = packageName;
     }
 
     @Override
@@ -78,4 +76,8 @@ public class PictureInPictureDetailPreferenceController extends AppInfoPreferenc
         return PictureInPictureDetails.getPreferenceSummary(mContext,
                 mParent.getPackageInfo().applicationInfo.uid, mPackageName);
     }
+
+    public void setPackageName(String packageName) {
+        mPackageName = packageName;
+    }
 }
index 71532ea..1e074d0 100644 (file)
@@ -26,11 +26,8 @@ import com.android.settings.SettingsPreferenceFragment;
 
 public class WriteSystemSettingsPreferenceController extends AppInfoPreferenceControllerBase {
 
-    private static final String KEY = "write_settings_apps";
-
-    public WriteSystemSettingsPreferenceController(Context context,
-            AppInfoDashboardFragment parent) {
-        super(context, parent, KEY);
+    public WriteSystemSettingsPreferenceController(Context context, String prefKey) {
+        super(context, prefKey);
     }
 
     @Override
index a0ad551..b426d28 100644 (file)
@@ -83,8 +83,8 @@ public class EnterprisePrivacySettings extends DashboardFragment {
         exposureChangesCategoryControllers.add(new CaCertsManagedProfilePreferenceController(
                 context));
         controllers.addAll(exposureChangesCategoryControllers);
-        controllers.add(new PreferenceCategoryController(context, "exposure_changes_category",
-                exposureChangesCategoryControllers));
+        controllers.add(new PreferenceCategoryController(context, "exposure_changes_category")
+                .setChildren(exposureChangesCategoryControllers));
         controllers.add(new FailedPasswordWipeCurrentUserPreferenceController(context));
         controllers.add(new FailedPasswordWipeManagedProfilePreferenceController(context));
         return controllers;
index c69938c..126f3c8 100644 (file)
@@ -105,7 +105,7 @@ public class LanguageAndInputSettings extends DashboardFragment {
         controllers.add(virtualKeyboardPreferenceController);
         controllers.add(physicalKeyboardPreferenceController);
         controllers.add(new PreferenceCategoryController(context,
-                KEY_KEYBOARDS_CATEGORY,
+                KEY_KEYBOARDS_CATEGORY).setChildren(
                 Arrays.asList(virtualKeyboardPreferenceController,
                         physicalKeyboardPreferenceController)));
 
@@ -116,7 +116,7 @@ public class LanguageAndInputSettings extends DashboardFragment {
         final PointerSpeedController pointerController = new PointerSpeedController(context);
         controllers.add(pointerController);
         controllers.add(new PreferenceCategoryController(context,
-                KEY_POINTER_AND_TTS_CATEGORY,
+                KEY_POINTER_AND_TTS_CATEGORY).setChildren(
                 Arrays.asList(pointerController, ttsPreferenceController)));
 
         // Input Assistance
@@ -132,7 +132,7 @@ public class LanguageAndInputSettings extends DashboardFragment {
         }
         controllers.add(gameControllerPreferenceController);
         controllers.add(new PreferenceCategoryController(context,
-                KEY_GAME_CONTROLLER_CATEGORY,
+                KEY_GAME_CONTROLLER_CATEGORY).setChildren(
                 Arrays.asList(gameControllerPreferenceController)));
 
         return controllers;
index a12de61..9550758 100644 (file)
@@ -229,7 +229,7 @@ public class SoundSettings extends DashboardFragment {
         controllers.add(bootSoundPreferenceController);
         controllers.add(emergencyTonePreferenceController);
         controllers.add(new PreferenceCategoryController(context,
-                "other_sounds_and_vibrations_category",
+                "other_sounds_and_vibrations_category").setChildren(
                 Arrays.asList(dialPadTonePreferenceController,
                         screenLockSoundPreferenceController,
                         chargingSoundPreferenceController,
index 6dae9b7..66ae20b 100644 (file)
@@ -70,7 +70,7 @@ public class EncryptionAndCredential extends DashboardFragment {
                         PREF_KEY_ENCRYPTION_DETAIL_PAGE);
         controllers.add(encryptStatusController);
         controllers.add(new PreferenceCategoryController(context,
-                "encryption_and_credentials_status_category",
+                "encryption_and_credentials_status_category").setChildren(
                 Arrays.asList(encryptStatusController)));
         controllers.add(new CredentialStoragePreferenceController(context));
         controllers.add(new UserCredentialsPreferenceController(context));
index e4d5ef5..0839450 100644 (file)
@@ -128,8 +128,8 @@ public class SecuritySettings extends DashboardFragment {
         securityPreferenceControllers.add(new FingerprintStatusPreferenceController(context));
         securityPreferenceControllers.add(new LockScreenPreferenceController(context, lifecycle));
         securityPreferenceControllers.add(new ChangeScreenLockPreferenceController(context, host));
-        controllers.add(new PreferenceCategoryController(context, SECURITY_CATEGORY,
-                securityPreferenceControllers));
+        controllers.add(new PreferenceCategoryController(context, SECURITY_CATEGORY)
+                .setChildren(securityPreferenceControllers));
         controllers.addAll(securityPreferenceControllers);
 
         final List<AbstractPreferenceController> profileSecurityControllers = new ArrayList<>();
@@ -139,8 +139,8 @@ public class SecuritySettings extends DashboardFragment {
         profileSecurityControllers.add(new VisiblePatternProfilePreferenceController(
                 context, lifecycle));
         profileSecurityControllers.add(new FingerprintProfileStatusPreferenceController(context));
-        controllers.add(new PreferenceCategoryController(context, WORK_PROFILE_SECURITY_CATEGORY,
-                profileSecurityControllers));
+        controllers.add(new PreferenceCategoryController(context, WORK_PROFILE_SECURITY_CATEGORY)
+                .setChildren(profileSecurityControllers));
         controllers.addAll(profileSecurityControllers);
 
         return controllers;
index f47aeb2..06b1b62 100644 (file)
@@ -22,6 +22,7 @@ import static com.android.settings.slices.SettingsSliceProvider.ACTION_WIFI_CHAN
 import static com.android.settings.slices.SettingsSliceProvider.EXTRA_SLICE_KEY;
 import static com.android.settings.slices.SettingsSliceProvider.EXTRA_SLICE_PLATFORM_DEFINED;
 
+import android.app.slice.Slice;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
@@ -36,8 +37,6 @@ import com.android.settings.core.BasePreferenceController;
 import com.android.settings.core.SliderPreferenceController;
 import com.android.settings.core.TogglePreferenceController;
 
-import android.app.slice.Slice;
-
 import androidx.slice.core.SliceHints;
 
 /**
index 9836476..cdd814c 100644 (file)
@@ -18,9 +18,10 @@ package com.android.settings.widget;
 
 import android.content.Context;
 
-import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settings.core.BasePreferenceController;
 import com.android.settingslib.core.AbstractPreferenceController;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -28,35 +29,42 @@ import java.util.List;
  * not-available, this controller will also report not-available, and subsequently will be hidden by
  * UI.
  */
-public class PreferenceCategoryController extends AbstractPreferenceController
-        implements PreferenceControllerMixin {
+public class PreferenceCategoryController extends BasePreferenceController {
 
     private final String mKey;
     private final List<AbstractPreferenceController> mChildren;
 
-    public PreferenceCategoryController(Context context,
-            String key, List<AbstractPreferenceController> childrenControllers) {
-        super(context);
+    public PreferenceCategoryController(Context context, String key) {
+        super(context, key);
         mKey = key;
-        mChildren = childrenControllers;
+        mChildren = new ArrayList<>();
     }
 
     @Override
-    public boolean isAvailable() {
+    public int getAvailabilityStatus() {
         if (mChildren == null || mChildren.isEmpty()) {
-            return true;
+            return DISABLED_DEPENDENT_SETTING;
         }
         // Category is available if any child is available
         for (AbstractPreferenceController controller : mChildren) {
             if (controller.isAvailable()) {
-                return true;
+                return AVAILABLE;
             }
         }
-        return false;
+        return DISABLED_DEPENDENT_SETTING;
     }
 
     @Override
     public String getPreferenceKey() {
         return mKey;
     }
+
+    public PreferenceCategoryController setChildren(
+            List<AbstractPreferenceController> childrenController) {
+        mChildren.clear();
+        if (childrenController != null) {
+            mChildren.addAll(childrenController);
+        }
+        return this;
+    }
 }
index af67ad6..85cf92b 100644 (file)
@@ -1,20 +1,8 @@
 com.android.settings.applications.appinfo.AppActionButtonPreferenceController
 com.android.settings.applications.appinfo.AppBatteryPreferenceController
-com.android.settings.applications.appinfo.AppDataUsagePreferenceController
 com.android.settings.applications.appinfo.AppHeaderViewPreferenceController
-com.android.settings.applications.appinfo.AppInstallerInfoPreferenceController
 com.android.settings.applications.appinfo.AppMemoryPreferenceController
-com.android.settings.applications.appinfo.AppNotificationPreferenceController
-com.android.settings.applications.appinfo.AppOpenByDefaultPreferenceController
-com.android.settings.applications.appinfo.AppPermissionPreferenceController
-com.android.settings.applications.appinfo.AppStoragePreferenceController
-com.android.settings.applications.appinfo.AppVersionPreferenceController
-com.android.settings.applications.appinfo.DrawOverlayDetailPreferenceController
-com.android.settings.applications.appinfo.ExternalSourceDetailPreferenceController
 com.android.settings.applications.appinfo.InstantAppButtonsPreferenceController
-com.android.settings.applications.appinfo.InstantAppDomainsPreferenceController
-com.android.settings.applications.appinfo.PictureInPictureDetailPreferenceController
-com.android.settings.applications.appinfo.WriteSystemSettingsPreferenceController
 com.android.settings.bluetooth.BluetoothDeviceNamePreferenceController
 com.android.settings.bluetooth.BluetoothDeviceRenamePreferenceController
 com.android.settings.bluetooth.BluetoothSwitchPreferenceController
index b667fdb..f87be57 100644 (file)
@@ -63,8 +63,8 @@ public class AppDataUsagePreferenceControllerTest {
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mContext = spy(RuntimeEnvironment.application.getApplicationContext());
-        mController = spy(
-                new AppDataUsagePreferenceController(mContext, mFragment, null /* lifecycle */));
+        mController = spy(new AppDataUsagePreferenceController(mContext, "test_key"));
+        mController.setParentFragment(mFragment);
     }
 
     @Test
index ec6ac24..89c6605 100644 (file)
@@ -102,7 +102,8 @@ public class AppInfoPreferenceControllerBaseTest {
         private boolean preferenceUpdated;
 
         private TestPreferenceController(AppInfoDashboardFragment parent) {
-            super(RuntimeEnvironment.application, parent, "TestKey");
+            super(RuntimeEnvironment.application, "TestKey");
+            setParentFragment(parent);
         }
 
         @Override
index 846479f..0709348 100644 (file)
@@ -74,7 +74,9 @@ public class AppInstallerInfoPreferenceControllerTest {
         when(mPackageManager.getInstallerPackageName(anyString())).thenReturn(installerPackage);
         when(mPackageManager.getApplicationInfo(eq(installerPackage), anyInt()))
                 .thenReturn(mAppInfo);
-        mController = new AppInstallerInfoPreferenceController(mContext, mFragment, "Package1");
+        mController = new AppInstallerInfoPreferenceController(mContext, "test_key");
+        mController.setPackageName("Package1");
+        mController.setParentFragment(mFragment);
     }
 
     @Test
@@ -82,7 +84,7 @@ public class AppInstallerInfoPreferenceControllerTest {
         when(mUserManager.isManagedProfile()).thenReturn(true);
 
         assertThat(mController.getAvailabilityStatus())
-            .isEqualTo(BasePreferenceController.DISABLED_FOR_USER);
+                .isEqualTo(BasePreferenceController.DISABLED_FOR_USER);
     }
 
     @Test
@@ -90,17 +92,19 @@ public class AppInstallerInfoPreferenceControllerTest {
         when(mUserManager.isManagedProfile()).thenReturn(false);
 
         assertThat(mController.getAvailabilityStatus())
-            .isEqualTo(BasePreferenceController.DISABLED_FOR_USER);
+                .isEqualTo(BasePreferenceController.DISABLED_FOR_USER);
     }
 
     @Test
     public void getAvailabilityStatus_hasAppLabel_shouldReturnAvailable() {
         when(mUserManager.isManagedProfile()).thenReturn(false);
         when(mAppInfo.loadLabel(mPackageManager)).thenReturn("Label1");
-        mController = new AppInstallerInfoPreferenceController(mContext, mFragment, "Package1");
+        mController = new AppInstallerInfoPreferenceController(mContext, "test_key");
+        mController.setPackageName("Package1");
+        mController.setParentFragment(mFragment);
 
         assertThat(mController.getAvailabilityStatus())
-            .isEqualTo(BasePreferenceController.AVAILABLE);
+                .isEqualTo(BasePreferenceController.AVAILABLE);
     }
 
     @Test
index ba51b80..5d24180 100644 (file)
@@ -17,7 +17,6 @@
 package com.android.settings.applications.appinfo;
 
 import static com.android.settings.SettingsActivity.EXTRA_FRAGMENT_ARG_KEY;
-
 import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
@@ -62,7 +61,8 @@ public class AppNotificationPreferenceControllerTest {
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mContext = RuntimeEnvironment.application;
-        mController = spy(new AppNotificationPreferenceController(mContext, mFragment));
+        mController = spy(new AppNotificationPreferenceController(mContext, "test_key"));
+        mController.setParentFragment(mFragment);
         when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
         final String key = mController.getPreferenceKey();
         when(mPreference.getKey()).thenReturn(key);
@@ -99,7 +99,8 @@ public class AppNotificationPreferenceControllerTest {
         when(mFragment.getActivity()).thenReturn(activity);
         when(activity.getIntent()).thenReturn(intent);
         AppNotificationPreferenceController controller =
-                new AppNotificationPreferenceController(mContext, mFragment);
+            new AppNotificationPreferenceController(mContext, "test");
+        controller.setParentFragment(mFragment);
 
         assertThat(controller.getArguments().containsKey(EXTRA_FRAGMENT_ARG_KEY)).isTrue();
         assertThat(controller.getArguments().getString(EXTRA_FRAGMENT_ARG_KEY)).isEqualTo("test");
index 848fcd5..a42e19f 100644 (file)
@@ -61,7 +61,8 @@ public class AppOpenByDefaultPreferenceControllerTest {
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mContext = RuntimeEnvironment.application.getApplicationContext();
-        mController = spy(new AppOpenByDefaultPreferenceController(mContext, mFragment));
+        mController = spy(new AppOpenByDefaultPreferenceController(mContext, "preferred_app"));
+        mController.setParentFragment(mFragment);
         when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
     }
 
index 43ae303..89ffef0 100644 (file)
@@ -63,7 +63,10 @@ public class AppPermissionPreferenceControllerTest {
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mContext = RuntimeEnvironment.application;
-        mController = new AppPermissionPreferenceController(mContext, mFragment, "Package1");
+        mController = new AppPermissionPreferenceController(mContext, "permission_settings");
+        mController.setPackageName("package1");
+        mController.setParentFragment(mFragment);
+
         when(mScreen.findPreference(any())).thenReturn(mPreference);
         final String key = mController.getPreferenceKey();
         when(mPreference.getKey()).thenReturn(key);
@@ -133,7 +136,7 @@ public class AppPermissionPreferenceControllerTest {
 
         mController.handlePreferenceTreeClick(mPreference);
 
-        verify(mActivity).startActivityForResult(argThat(intent-> intent != null &&
+        verify(mActivity).startActivityForResult(argThat(intent -> intent != null &&
                 Intent.ACTION_MANAGE_APP_PERMISSIONS.equals(intent.getAction())), anyInt());
     }
 }
index 588db2a..cebdd68 100644 (file)
@@ -57,8 +57,8 @@ public class AppStoragePreferenceControllerTest {
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mContext = RuntimeEnvironment.application.getApplicationContext();
-        mController =
-                spy(new AppStoragePreferenceController(mContext, mFragment, null /* lifecycle */));
+        mController = spy(new AppStoragePreferenceController(mContext, "key"));
+        mController.setParentFragment(mFragment);
     }
 
     @Test
index 928e9eb..1fc35c5 100644 (file)
@@ -48,7 +48,8 @@ public class AppVersionPreferenceControllerTest {
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mContext = RuntimeEnvironment.application;
-        mController = new AppVersionPreferenceController(mContext, mFragment);
+        mController = new AppVersionPreferenceController(mContext, "test_key");
+        mController.setParentFragment(mFragment);
     }
 
     @Test
index de3f868..4ea011c 100644 (file)
@@ -57,7 +57,8 @@ public class DrawOverlayDetailPreferenceControllerTest {
         MockitoAnnotations.initMocks(this);
         mContext = spy(RuntimeEnvironment.application);
         when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
-        mController = spy(new DrawOverlayDetailPreferenceController(mContext, mFragment));
+        mController = spy(new DrawOverlayDetailPreferenceController(mContext, "key"));
+        mController.setParentFragment(mFragment);
         final String key = mController.getPreferenceKey();
         when(mPreference.getKey()).thenReturn(key);
     }
@@ -67,7 +68,7 @@ public class DrawOverlayDetailPreferenceControllerTest {
         when(mUserManager.isManagedProfile()).thenReturn(true);
 
         assertThat(mController.getAvailabilityStatus())
-            .isEqualTo(BasePreferenceController.DISABLED_FOR_USER);
+                .isEqualTo(BasePreferenceController.DISABLED_FOR_USER);
     }
 
     @Test
@@ -76,7 +77,7 @@ public class DrawOverlayDetailPreferenceControllerTest {
         when(mFragment.getPackageInfo()).thenReturn(new PackageInfo());
 
         assertThat(mController.getAvailabilityStatus())
-            .isEqualTo(BasePreferenceController.DISABLED_FOR_USER);
+                .isEqualTo(BasePreferenceController.DISABLED_FOR_USER);
     }
 
     @Test
@@ -87,7 +88,7 @@ public class DrawOverlayDetailPreferenceControllerTest {
         when(mFragment.getPackageInfo()).thenReturn(info);
 
         assertThat(mController.getAvailabilityStatus())
-            .isEqualTo(BasePreferenceController.DISABLED_FOR_USER);
+                .isEqualTo(BasePreferenceController.DISABLED_FOR_USER);
     }
 
     @Test
@@ -98,7 +99,7 @@ public class DrawOverlayDetailPreferenceControllerTest {
         when(mFragment.getPackageInfo()).thenReturn(info);
 
         assertThat(mController.getAvailabilityStatus())
-            .isEqualTo(BasePreferenceController.AVAILABLE);
+                .isEqualTo(BasePreferenceController.AVAILABLE);
     }
 
     @Test
index 7ad3d18..dae72fc 100644 (file)
@@ -54,8 +54,9 @@ public class ExternalSourceDetailPreferenceControllerTest {
         MockitoAnnotations.initMocks(this);
         mContext = spy(RuntimeEnvironment.application);
         when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
-        mController = spy(
-                new ExternalSourceDetailPreferenceController(mContext, mFragment, "Package1"));
+        mController = spy(new ExternalSourceDetailPreferenceController(mContext, "test_key"));
+        mController.setPackageName("Package1");
+        mController.setParentFragment(mFragment);
         final String key = mController.getPreferenceKey();
         when(mPreference.getKey()).thenReturn(key);
     }
@@ -65,7 +66,7 @@ public class ExternalSourceDetailPreferenceControllerTest {
         when(mUserManager.isManagedProfile()).thenReturn(true);
 
         assertThat(mController.getAvailabilityStatus())
-            .isEqualTo(BasePreferenceController.DISABLED_FOR_USER);
+                .isEqualTo(BasePreferenceController.DISABLED_FOR_USER);
     }
 
     @Test
@@ -74,7 +75,7 @@ public class ExternalSourceDetailPreferenceControllerTest {
         doReturn(false).when(mController).isPotentialAppSource();
 
         assertThat(mController.getAvailabilityStatus())
-            .isEqualTo(BasePreferenceController.DISABLED_FOR_USER);
+                .isEqualTo(BasePreferenceController.DISABLED_FOR_USER);
     }
 
     @Test
@@ -83,7 +84,7 @@ public class ExternalSourceDetailPreferenceControllerTest {
         doReturn(true).when(mController).isPotentialAppSource();
 
         assertThat(mController.getAvailabilityStatus())
-            .isEqualTo(BasePreferenceController.AVAILABLE);
+                .isEqualTo(BasePreferenceController.AVAILABLE);
     }
 
     @Test
index 5dc09e5..7e15848 100644 (file)
@@ -62,7 +62,7 @@ public class InstantAppDomainsPreferenceControllerTest {
     private InstantAppDomainsPreferenceController mController;
 
     @Before
-    public void setUp() throws PackageManager.NameNotFoundException {
+    public void setUp() {
         MockitoAnnotations.initMocks(this);
         mContext = spy(RuntimeEnvironment.application);
         when(mContext.getPackageManager()).thenReturn(mPackageManager);
@@ -70,7 +70,8 @@ public class InstantAppDomainsPreferenceControllerTest {
         packageInfo.applicationInfo = mAppInfo;
         packageInfo.packageName = "Package1";
         when(mFragment.getPackageInfo()).thenReturn(packageInfo);
-        mController = new InstantAppDomainsPreferenceController(mContext, mFragment);
+        mController = new InstantAppDomainsPreferenceController(mContext, "test_key");
+        mController.setParentFragment(mFragment);
     }
 
     @Test
@@ -79,7 +80,7 @@ public class InstantAppDomainsPreferenceControllerTest {
                 (InstantAppDataProvider) (i -> false));
 
         assertThat(mController.getAvailabilityStatus())
-            .isEqualTo(BasePreferenceController.DISABLED_FOR_USER);
+                .isEqualTo(BasePreferenceController.DISABLED_FOR_USER);
     }
 
     @Test
@@ -88,12 +89,12 @@ public class InstantAppDomainsPreferenceControllerTest {
                 (InstantAppDataProvider) (i -> true));
 
         assertThat(mController.getAvailabilityStatus())
-            .isEqualTo(BasePreferenceController.AVAILABLE);
+                .isEqualTo(BasePreferenceController.AVAILABLE);
     }
 
     @Test
     public void updateState_shouldSetPreferenceTitle() {
-        final String[] domain = { "Domain1" };
+        final String[] domain = {"Domain1"};
         final ArraySet<String> domains = new ArraySet<>();
         domains.add(domain[0]);
         final List<IntentFilterVerificationInfo> infoList = new ArrayList<>();
index ddd1b21..47d7323 100644 (file)
@@ -52,8 +52,10 @@ public class PictureInPictureDetailPreferenceControllerTest {
         MockitoAnnotations.initMocks(this);
         mContext = spy(RuntimeEnvironment.application);
 
-        mController = spy(
-                new PictureInPictureDetailPreferenceController(mContext, mFragment, "Package1"));
+        mController = spy(new PictureInPictureDetailPreferenceController(mContext, "test_key"));
+        mController.setPackageName("Package1");
+        mController.setParentFragment(mFragment);
+
         final String key = mController.getPreferenceKey();
         when(mPreference.getKey()).thenReturn(key);
     }
@@ -63,7 +65,7 @@ public class PictureInPictureDetailPreferenceControllerTest {
         doReturn(false).when(mController).hasPictureInPictureActivites();
 
         assertThat(mController.getAvailabilityStatus())
-            .isEqualTo(BasePreferenceController.DISABLED_FOR_USER);
+                .isEqualTo(BasePreferenceController.DISABLED_FOR_USER);
     }
 
     @Test
@@ -71,7 +73,7 @@ public class PictureInPictureDetailPreferenceControllerTest {
         doReturn(true).when(mController).hasPictureInPictureActivites();
 
         assertThat(mController.getAvailabilityStatus())
-            .isEqualTo(BasePreferenceController.AVAILABLE);
+                .isEqualTo(BasePreferenceController.AVAILABLE);
     }
 
     @Test
index c158595..b749875 100644 (file)
@@ -57,7 +57,8 @@ public class WriteSystemSettingsPreferenceControllerTest {
         MockitoAnnotations.initMocks(this);
         mContext = spy(RuntimeEnvironment.application);
         when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
-        mController = spy(new WriteSystemSettingsPreferenceController(mContext, mFragment));
+        mController = spy(new WriteSystemSettingsPreferenceController(mContext, "test_key"));
+        mController.setParentFragment(mFragment);
         final String key = mController.getPreferenceKey();
         when(mPreference.getKey()).thenReturn(key);
     }
index 7ae592c..5895db2 100644 (file)
@@ -44,12 +44,12 @@ public class PreferenceCategoryControllerTest {
     public void setUp() {
         mContext = RuntimeEnvironment.application;
         mChildren = new ArrayList<>();
-        mController = new PreferenceCategoryController(mContext, "pref_key"mChildren);
+        mController = new PreferenceCategoryController(mContext, "pref_key").setChildren(mChildren);
     }
 
     @Test
-    public void isAvailable_noChildren_true() {
-        assertThat(mController.isAvailable()).isTrue();
+    public void isAvailable_noChildren_false() {
+        assertThat(mController.isAvailable()).isFalse();
     }
 
     @Test
@@ -57,6 +57,7 @@ public class PreferenceCategoryControllerTest {
         final AbstractPreferenceController child = mock(AbstractPreferenceController.class);
         when(child.isAvailable()).thenReturn(true);
         mChildren.add(child);
+        mController.setChildren(mChildren);
 
         assertThat(mController.isAvailable()).isTrue();
     }
@@ -66,6 +67,7 @@ public class PreferenceCategoryControllerTest {
         final AbstractPreferenceController child = mock(AbstractPreferenceController.class);
         when(child.isAvailable()).thenReturn(false);
         mChildren.add(child);
+        mController.setChildren(mChildren);
 
         assertThat(mController.isAvailable()).isFalse();
     }