OSDN Git Service

Move AppInfoDashboardFragment into appinfo package.
authorDoris Ling <dling@google.com>
Thu, 7 Dec 2017 23:30:18 +0000 (15:30 -0800)
committerDoris Ling <dling@google.com>
Wed, 13 Dec 2017 00:58:17 +0000 (16:58 -0800)
- update all references to AppInfoDashboardFragment
- removed PackageUtil inner class and change the corresponding function
to be a simple method.

Bug: 69384089
Test: make RunSettingsRoboTests
Change-Id: Ief067e25a303ef16db20b2ca1d8840cb06eff5f9

47 files changed:
src/com/android/settings/applications/InstalledAppDetails.java
src/com/android/settings/applications/InstalledAppDetailsTop.java
src/com/android/settings/applications/RecentAppsPreferenceController.java
src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java
src/com/android/settings/applications/appinfo/AppDataUsagePreferenceController.java
src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java [moved from src/com/android/settings/applications/AppInfoDashboardFragment.java with 85% similarity]
src/com/android/settings/applications/appinfo/AppInfoPreferenceControllerBase.java
src/com/android/settings/applications/appinfo/AppInstallerInfoPreferenceController.java
src/com/android/settings/applications/appinfo/AppMemoryPreferenceController.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/InstantAppButtonsPreferenceController.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/applications/manageapplications/ManageApplications.java
src/com/android/settings/core/gateway/SettingsGateway.java
src/com/android/settings/datausage/UnrestrictedDataAccess.java
src/com/android/settings/location/RecentLocationRequestPreferenceController.java
src/com/android/settings/widget/EntityHeaderController.java
tests/robotests/assets/grandfather_not_implementing_index_provider
tests/robotests/src/com/android/settings/applications/appinfo/AppBatteryPreferenceControllerTest.java
tests/robotests/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceControllerTest.java
tests/robotests/src/com/android/settings/applications/appinfo/AppInfoDashboardFragmentTest.java [moved from tests/robotests/src/com/android/settings/applications/AppInfoDashboardFragmentTest.java with 60% similarity]
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/AppMemoryPreferenceControllerTest.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/DefaultAppShortcutPreferenceControllerBaseTest.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/InstantAppButtonsPreferenceControllerTest.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/location/RecentLocationRequestPreferenceControllerTest.java
tests/unit/src/com/android/settings/applications/PackageUtilTest.java
tests/unit/src/com/android/settings/applications/SpecialAppAccessSettingsTest.java

index 2098bd6..f78459f 100755 (executable)
@@ -75,6 +75,7 @@ import com.android.settings.R;
 import com.android.settings.SettingsActivity;
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.Utils;
+import com.android.settings.applications.appinfo.AppInfoDashboardFragment;
 import com.android.settings.applications.appinfo.DrawOverlayDetails;
 import com.android.settings.applications.appinfo.ExternalSourcesDetails;
 import com.android.settings.applications.appinfo.PictureInPictureDetails;
index 174a86a..8090de0 100644 (file)
@@ -20,6 +20,7 @@ import android.content.Intent;
 import android.util.FeatureFlagUtils;
 
 import com.android.settings.SettingsActivity;
+import com.android.settings.applications.appinfo.AppInfoDashboardFragment;
 import com.android.settings.core.FeatureFlags;
 
 public class InstalledAppDetailsTop extends SettingsActivity {
index c613a7b..ee954ac 100644 (file)
@@ -40,6 +40,7 @@ import android.util.Log;
 
 import com.android.settings.R;
 import com.android.settings.Utils;
+import com.android.settings.applications.appinfo.AppInfoDashboardFragment;
 import com.android.settings.core.FeatureFlags;
 import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settings.widget.AppPreference;
index 017afe7..ffe2bf3 100644 (file)
@@ -32,7 +32,6 @@ import com.android.internal.os.BatteryStatsHelper;
 import com.android.settings.R;
 import com.android.settings.SettingsActivity;
 import com.android.settings.Utils;
-import com.android.settings.applications.AppInfoDashboardFragment;
 import com.android.settings.core.BasePreferenceController;
 import com.android.settings.fuelgauge.AdvancedPowerUsageDetail;
 import com.android.settings.fuelgauge.BatteryEntry;
index 61f3e46..669bc5a 100644 (file)
@@ -34,7 +34,6 @@ import android.text.format.Formatter;
 import com.android.settings.R;
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.Utils;
-import com.android.settings.applications.AppInfoDashboardFragment;
 import com.android.settings.datausage.AppDataUsage;
 import com.android.settings.datausage.DataUsageList;
 import com.android.settings.datausage.DataUsageUtils;
@@ -14,7 +14,7 @@
  * under the License.
  */
 
-package com.android.settings.applications;
+package com.android.settings.applications.appinfo;
 
 import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
 
@@ -23,7 +23,6 @@ import android.app.ActivityManager;
 import android.app.AlertDialog;
 import android.app.Dialog;
 import android.app.DialogFragment;
-import android.app.Fragment;
 import android.app.admin.DevicePolicyManager;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
@@ -59,27 +58,8 @@ import com.android.settings.R;
 import com.android.settings.SettingsActivity;
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.Utils;
-import com.android.settings.applications.appinfo.AppBatteryPreferenceController;
-import com.android.settings.applications.appinfo.AppDataUsagePreferenceController;
-import com.android.settings.applications.appinfo.AppInstallerInfoPreferenceController;
-import com.android.settings.applications.appinfo.AppInstallerPreferenceCategoryController;
-import com.android.settings.applications.appinfo.AppMemoryPreferenceController;
-import com.android.settings.applications.appinfo.AppNotificationPreferenceController;
-import com.android.settings.applications.appinfo.AppOpenByDefaultPreferenceController;
-import com.android.settings.applications.appinfo.AppPermissionPreferenceController;
-import com.android.settings.applications.appinfo.AppStoragePreferenceController;
-import com.android.settings.applications.appinfo.AppVersionPreferenceController;
-import com.android.settings.applications.appinfo.DefaultBrowserShortcutPreferenceController;
-import com.android.settings.applications.appinfo.DefaultEmergencyShortcutPreferenceController;
-import com.android.settings.applications.appinfo.DefaultHomeShortcutPreferenceController;
-import com.android.settings.applications.appinfo.DefaultPhoneShortcutPreferenceController;
-import com.android.settings.applications.appinfo.DefaultSmsShortcutPreferenceController;
-import com.android.settings.applications.appinfo.DrawOverlayDetailPreferenceController;
-import com.android.settings.applications.appinfo.ExternalSourceDetailPreferenceController;
-import com.android.settings.applications.appinfo.InstantAppButtonsPreferenceController;
-import com.android.settings.applications.appinfo.InstantAppDomainsPreferenceController;
-import com.android.settings.applications.appinfo.PictureInPictureDetailPreferenceController;
-import com.android.settings.applications.appinfo.WriteSystemSettingsPreferenceController;
+import com.android.settings.applications.ApplicationFeatureProvider;
+import com.android.settings.applications.LayoutPreference;
 import com.android.settings.applications.manageapplications.ManageApplications;
 import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 import com.android.settings.dashboard.DashboardFragment;
@@ -116,19 +96,19 @@ public class AppInfoDashboardFragment extends DashboardFragment
     private static final String TAG = "AppInfoDashboard";
 
     // Menu identifiers
-    public static final int UNINSTALL_ALL_USERS_MENU = 1;
-    public static final int UNINSTALL_UPDATES = 2;
+    private static final int UNINSTALL_ALL_USERS_MENU = 1;
+    private static final int UNINSTALL_UPDATES = 2;
 
     // Result code identifiers
-    public static final int REQUEST_UNINSTALL = 0;
+    @VisibleForTesting
+    static final int REQUEST_UNINSTALL = 0;
     private static final int REQUEST_REMOVE_DEVICE_ADMIN = 1;
 
-    public static final int SUB_INFO_FRAGMENT = 1;
+    static final int SUB_INFO_FRAGMENT = 1;
 
-    public static final int LOADER_CHART_DATA = 2;
-    public static final int LOADER_STORAGE = 3;
-    @VisibleForTesting
-    public static final int LOADER_BATTERY = 4;
+    static final int LOADER_CHART_DATA = 2;
+    static final int LOADER_STORAGE = 3;
+    static final int LOADER_BATTERY = 4;
 
     // Dialog identifiers used in showDialog
     private static final int DLG_BASE = 0;
@@ -137,12 +117,12 @@ public class AppInfoDashboardFragment extends DashboardFragment
     private static final int DLG_SPECIAL_DISABLE = DLG_BASE + 3;
     private static final String KEY_HEADER = "header_view";
     private static final String KEY_ACTION_BUTTONS = "action_buttons";
+    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";
 
-    protected static final boolean localLOGV = false;
-    private static final String KEY_ADVANCED_APP_INFO_CATEGORY = "advanced_app_info";
+    private static final boolean localLOGV = false;
 
     private EnforcedAdmin mAppsControlDisallowedAdmin;
     private boolean mAppsControlDisallowedBySystem;
@@ -278,7 +258,7 @@ public class AppInfoDashboardFragment extends DashboardFragment
         }
 
         try {
-            IWebViewUpdateService webviewUpdateService =
+            final IWebViewUpdateService webviewUpdateService =
                 IWebViewUpdateService.Stub.asInterface(ServiceManager.getService("webviewupdate"));
             if (webviewUpdateService.isFallbackPackage(mAppEntry.info.packageName)) {
                 enabled = false;
@@ -414,20 +394,21 @@ public class AppInfoDashboardFragment extends DashboardFragment
         return controllers;
     }
 
-    public ApplicationsState.AppEntry getAppEntry() {
+    ApplicationsState.AppEntry getAppEntry() {
         if (mAppEntry == null) {
             retrieveAppEntry();
         }
         return mAppEntry;
     }
 
-    public PackageInfo getPackageInfo() {
+    PackageInfo getPackageInfo() {
         if (mAppEntry == null) {
             retrieveAppEntry();
         }
         return mPackageInfo;
     }
 
+    @Override
     public void onActivityCreated(Bundle savedInstanceState) {
         super.onActivityCreated(savedInstanceState);
         if (mFinishing) {
@@ -492,7 +473,7 @@ public class AppInfoDashboardFragment extends DashboardFragment
         }
         menu.findItem(UNINSTALL_ALL_USERS_MENU).setVisible(shouldShowUninstallForAll(mAppEntry));
         mUpdatedSysApp = (mAppEntry.info.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0;
-        MenuItem uninstallUpdatesItem = menu.findItem(UNINSTALL_UPDATES);
+        final MenuItem uninstallUpdatesItem = menu.findItem(UNINSTALL_UPDATES);
         uninstallUpdatesItem.setVisible(mUpdatedSysApp && !mAppsControlDisallowedBySystem);
         if (uninstallUpdatesItem.isVisible()) {
             RestrictedLockUtils.setMenuItemAsDisabledByAdmin(getActivity(),
@@ -525,7 +506,7 @@ public class AppInfoDashboardFragment extends DashboardFragment
                     mDisableAfterUninstall = false;
                     new DisableChanger(this, mAppEntry.info,
                             PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER)
-                            .execute((Object)null);
+                            .execute((Object) null);
                 }
                 // continue with following operations
             case REQUEST_REMOVE_DEVICE_ADMIN:
@@ -569,7 +550,7 @@ public class AppInfoDashboardFragment extends DashboardFragment
             showIt = false;
         } else if (mUserManager.getUsers().size() < 2) {
             showIt = false;
-        } else if (PackageUtil.countPackageInUsers(mPm, mUserManager, mPackageName) < 2
+        } else if (getNumberOfUserWithPackageInstalled(mPackageName) < 2
                 && (appEntry.info.flags & ApplicationInfo.FLAG_INSTALLED) != 0) {
             showIt = false;
         } else if (AppUtils.isInstant(appEntry.info)) {
@@ -605,11 +586,11 @@ public class AppInfoDashboardFragment extends DashboardFragment
         }
 
         // Get list of "home" apps and trace through any meta-data references
-        List<ResolveInfo> homeActivities = new ArrayList<ResolveInfo>();
+        final List<ResolveInfo> homeActivities = new ArrayList<ResolveInfo>();
         mPm.getHomeActivities(homeActivities);
         mHomePackages.clear();
         for (int i = 0; i< homeActivities.size(); i++) {
-            ResolveInfo ri = homeActivities.get(i);
+            final ResolveInfo ri = homeActivities.get(i);
             final String activityPkg = ri.activityInfo.packageName;
             mHomePackages.add(activityPkg);
 
@@ -628,7 +609,7 @@ public class AppInfoDashboardFragment extends DashboardFragment
         initUninstallButtons();
 
         // Update the preference summaries.
-        Activity context = getActivity();
+        final Activity context = getActivity();
         for (Callback callback : mCallbacks) {
             callback.refreshUi();
         }
@@ -641,7 +622,7 @@ public class AppInfoDashboardFragment extends DashboardFragment
             // All other times: if the app no longer exists then we want
             // to go away.
             try {
-                ApplicationInfo ainfo = context.getPackageManager().getApplicationInfo(
+                final ApplicationInfo ainfo = context.getPackageManager().getApplicationInfo(
                         mAppEntry.info.packageName,
                         PackageManager.MATCH_DISABLED_COMPONENTS
                         | PackageManager.MATCH_ANY_USER);
@@ -712,8 +693,8 @@ public class AppInfoDashboardFragment extends DashboardFragment
     private void uninstallPkg(String packageName, boolean allUsers, boolean andDisable) {
         stopListeningToPackageRemove();
          // Create new intent to launch Uninstaller activity
-        Uri packageURI = Uri.parse("package:"+packageName);
-        Intent uninstallIntent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE, packageURI);
+        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(
                 getContext(), MetricsEvent.ACTION_SETTINGS_UNINSTALL_APP);
@@ -723,13 +704,13 @@ public class AppInfoDashboardFragment extends DashboardFragment
 
     private void forceStopPackage(String pkgName) {
         mMetricsFeatureProvider.action(getContext(), MetricsEvent.ACTION_APP_FORCE_STOP, pkgName);
-        ActivityManager am = (ActivityManager) getActivity().getSystemService(
+        final ActivityManager am = (ActivityManager) getActivity().getSystemService(
                 Context.ACTIVITY_SERVICE);
         Log.d(TAG, "Stopping package " + pkgName);
         am.forceStopPackage(pkgName);
-        int userId = UserHandle.getUserId(mAppEntry.info.uid);
+        final int userId = UserHandle.getUserId(mAppEntry.info.uid);
         mState.invalidatePackage(pkgName, userId);
-        AppEntry newEnt = mState.getEntry(pkgName, userId);
+        final AppEntry newEnt = mState.getEntry(pkgName, userId);
         if (newEnt != null) {
             mAppEntry = newEnt;
         }
@@ -758,7 +739,7 @@ public class AppInfoDashboardFragment extends DashboardFragment
             Log.w(TAG, "App is not explicitly stopped");
             updateForceStopButton(true);
         } else {
-            Intent intent = new Intent(Intent.ACTION_QUERY_PACKAGE_RESTART,
+            final Intent intent = new Intent(Intent.ACTION_QUERY_PACKAGE_RESTART,
                     Uri.fromParts("package", mAppEntry.info.packageName, null));
             intent.putExtra(Intent.EXTRA_PACKAGES, new String[] { mAppEntry.info.packageName });
             intent.putExtra(Intent.EXTRA_UID, mAppEntry.info.uid);
@@ -773,11 +754,11 @@ public class AppInfoDashboardFragment extends DashboardFragment
     public static void startAppInfoFragment(Class<?> fragment, int title,
             SettingsPreferenceFragment caller, AppEntry appEntry) {
         // start new fragment to display extended information
-        Bundle args = new Bundle();
+        final Bundle args = new Bundle();
         args.putString(ARG_PACKAGE_NAME, appEntry.info.packageName);
         args.putInt(ARG_PACKAGE_UID, appEntry.info.uid);
 
-        SettingsActivity sa = (SettingsActivity) caller.getActivity();
+        final SettingsActivity sa = (SettingsActivity) caller.getActivity();
         sa.startPreferencePanel(caller, fragment.getName(), args, title, null, caller,
                 SUB_INFO_FRAGMENT);
     }
@@ -790,8 +771,8 @@ public class AppInfoDashboardFragment extends DashboardFragment
         final String packageName = mAppEntry.info.packageName;
         if (mDpm.packageHasActiveAdmins(mPackageInfo.packageName)) {
             stopListeningToPackageRemove();
-            Activity activity = getActivity();
-            Intent uninstallDAIntent = new Intent(activity, DeviceAdminAdd.class);
+            final Activity activity = getActivity();
+            final Intent uninstallDAIntent = new Intent(activity, DeviceAdminAdd.class);
             uninstallDAIntent.putExtra(DeviceAdminAdd.EXTRA_DEVICE_ADMIN_PACKAGE_NAME,
                     mPackageName);
             mMetricsFeatureProvider.action(
@@ -799,9 +780,9 @@ public class AppInfoDashboardFragment extends DashboardFragment
             activity.startActivityForResult(uninstallDAIntent, REQUEST_REMOVE_DEVICE_ADMIN);
             return;
         }
-        EnforcedAdmin admin = RestrictedLockUtils.checkIfUninstallBlocked(getActivity(),
+        final EnforcedAdmin admin = RestrictedLockUtils.checkIfUninstallBlocked(getActivity(),
                 packageName, mUserId);
-        boolean uninstallBlockedBySystem = mAppsControlDisallowedBySystem ||
+        final boolean uninstallBlockedBySystem = mAppsControlDisallowedBySystem ||
                 RestrictedLockUtils.hasBaseUserRestriction(getActivity(), packageName, mUserId);
         if (admin != null && !uninstallBlockedBySystem) {
             RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getActivity(), admin);
@@ -847,8 +828,7 @@ public class AppInfoDashboardFragment extends DashboardFragment
     /** Returns whether there is only one user on this device, not including the system-only user */
     private boolean isSingleUser() {
         final int userCount = mUserManager.getUserCount();
-        return userCount == 1
-                || (mUserManager.isSplitSystemUser() && userCount == 2);
+        return userCount == 1 || (mUserManager.isSplitSystemUser() && userCount == 2);
     }
 
     private void onPackageRemoved() {
@@ -856,35 +836,25 @@ public class AppInfoDashboardFragment extends DashboardFragment
         getActivity().finishAndRemoveTask();
     }
 
-    /**
-     * Elicit this class for testing. Test cannot be done in robolectric because it
-     * invokes the new API.
-     */
     @VisibleForTesting
-    public static class PackageUtil {
-        /**
-         * Count how many users in device have installed package {@paramref packageName}
-         */
-        public static int countPackageInUsers(PackageManager packageManager, UserManager
-                userManager, String packageName) {
-            final List<UserInfo> userInfos = userManager.getUsers(true);
-            int count = 0;
-
-            for (final UserInfo userInfo : userInfos) {
-                try {
-                    // Use this API to check whether user has this package
-                    final ApplicationInfo info = packageManager.getApplicationInfoAsUser(
-                            packageName, PackageManager.GET_META_DATA, userInfo.id);
-                    if ((info.flags & ApplicationInfo.FLAG_INSTALLED) != 0) {
-                        count++;
-                    }
-                } catch(NameNotFoundException e) {
-                    Log.e(TAG, "Package: " + packageName + " not found for user: " + userInfo.id);
+    int getNumberOfUserWithPackageInstalled(String packageName) {
+        final List<UserInfo> userInfos = mUserManager.getUsers(true);
+        int count = 0;
+
+        for (final UserInfo userInfo : userInfos) {
+            try {
+                // Use this API to check whether user has this package
+                final ApplicationInfo info = mPm.getApplicationInfoAsUser(
+                        packageName, PackageManager.GET_META_DATA, userInfo.id);
+                if ((info.flags & ApplicationInfo.FLAG_INSTALLED) != 0) {
+                    count++;
                 }
+            } catch(NameNotFoundException e) {
+                Log.e(TAG, "Package: " + packageName + " not found for user: " + userInfo.id);
             }
-
-            return count;
         }
+
+        return count;
     }
 
     private static class DisableChanger extends AsyncTask<Object, Object, Object> {
@@ -924,7 +894,7 @@ public class AppInfoDashboardFragment extends DashboardFragment
         final Bundle args = getArguments();
         mPackageName = (args != null) ? args.getString(ARG_PACKAGE_NAME) : null;
         if (mPackageName == null) {
-            Intent intent = (args == null) ?
+            final Intent intent = (args == null) ?
                     getActivity().getIntent() : (Intent) args.getParcelable("intent");
             if (intent != null) {
                 mPackageName = intent.getData().getSchemeSpecificPart();
@@ -964,16 +934,15 @@ public class AppInfoDashboardFragment extends DashboardFragment
 
     private void setIntentAndFinish(boolean finish, boolean appChanged) {
         if (localLOGV) Log.i(TAG, "appChanged="+appChanged);
-        Intent intent = new Intent();
+        final Intent intent = new Intent();
         intent.putExtra(ManageApplications.APP_CHG, appChanged);
-        SettingsActivity sa = (SettingsActivity)getActivity();
+        final SettingsActivity sa = (SettingsActivity)getActivity();
         sa.finishPreferencePanel(this, Activity.RESULT_OK, intent);
         mFinishing = true;
     }
 
-    public void showDialogInner(int id, int moveErrorCode) {
-        DialogFragment newFragment =
-                MyAlertDialogFragment.newInstance(id, moveErrorCode);
+    void showDialogInner(int id, int moveErrorCode) {
+        final DialogFragment newFragment = MyAlertDialogFragment.newInstance(id, moveErrorCode);
         newFragment.setTargetFragment(this, 0);
         newFragment.show(getFragmentManager(), "dialog " + id);
     }
@@ -1015,24 +984,6 @@ public class AppInfoDashboardFragment extends DashboardFragment
         }
     }
 
-    public static void startAppInfoFragment(Class<?> fragment, int titleRes,
-            String pkg, int uid, Fragment source, int request, int sourceMetricsCategory) {
-        startAppInfoFragment(fragment, titleRes, pkg, uid, source.getActivity(), request,
-                sourceMetricsCategory);
-    }
-
-    public static void startAppInfoFragment(Class<?> fragment, int titleRes,
-            String pkg, int uid, Activity source, int request, int sourceMetricsCategory) {
-        Bundle args = new Bundle();
-        args.putString(ARG_PACKAGE_NAME, pkg);
-        args.putInt(ARG_PACKAGE_UID, uid);
-
-        Intent intent = Utils.onBuildStartFragmentIntent(source, fragment.getName(),
-                args, null, titleRes, null, false, sourceMetricsCategory);
-        source.startActivityForResultAsUser(intent, request,
-                new UserHandle(UserHandle.getUserId(uid)));
-    }
-
     public static class MyAlertDialogFragment extends InstrumentedDialogFragment {
 
         private static final String ARG_ID = "id";
@@ -1044,10 +995,10 @@ public class AppInfoDashboardFragment extends DashboardFragment
 
         @Override
         public Dialog onCreateDialog(Bundle savedInstanceState) {
-            int id = getArguments().getInt(ARG_ID);
-            int errorCode = getArguments().getInt("moveError");
-            Dialog dialog = ((AppInfoDashboardFragment) getTargetFragment())
-                    .createDialog(id, errorCode);
+            final int id = getArguments().getInt(ARG_ID);
+            final int errorCode = getArguments().getInt("moveError");
+            final Dialog dialog =
+                    ((AppInfoDashboardFragment) getTargetFragment()).createDialog(id, errorCode);
             if (dialog == null) {
                 throw new IllegalArgumentException("unknown id " + id);
             }
@@ -1055,8 +1006,8 @@ public class AppInfoDashboardFragment extends DashboardFragment
         }
 
         public static MyAlertDialogFragment newInstance(int id, int errorCode) {
-            MyAlertDialogFragment dialogFragment = new MyAlertDialogFragment();
-            Bundle args = new Bundle();
+            final MyAlertDialogFragment dialogFragment = new MyAlertDialogFragment();
+            final Bundle args = new Bundle();
             args.putInt(ARG_ID, id);
             args.putInt("moveError", errorCode);
             dialogFragment.setArguments(args);
@@ -1085,7 +1036,7 @@ public class AppInfoDashboardFragment extends DashboardFragment
     private final BroadcastReceiver mPackageRemovedReceiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent) {
-            String packageName = intent.getData().getSchemeSpecificPart();
+            final String packageName = intent.getData().getSchemeSpecificPart();
             if (!mFinishing && (mAppEntry == null || mAppEntry.info == null
                     || TextUtils.equals(mAppEntry.info.packageName, packageName))) {
                 onPackageRemoved();
index eac0a0c..105a01e 100644 (file)
@@ -22,7 +22,6 @@ import android.support.v7.preference.PreferenceScreen;
 import android.text.TextUtils;
 
 import com.android.settings.SettingsPreferenceFragment;
-import com.android.settings.applications.AppInfoDashboardFragment;
 import com.android.settings.core.BasePreferenceController;
 
 /*
index 2449004..1fdc690 100644 (file)
@@ -23,7 +23,6 @@ import android.support.v7.preference.Preference;
 
 import com.android.settings.R;
 import com.android.settings.Utils;
-import com.android.settings.applications.AppInfoDashboardFragment;
 import com.android.settings.applications.AppStoreUtil;
 import com.android.settingslib.applications.AppUtils;
 
index 3943041..7b497a9 100644 (file)
@@ -26,7 +26,6 @@ import android.text.format.Formatter;
 
 import com.android.settings.R;
 import com.android.settings.SettingsActivity;
-import com.android.settings.applications.AppInfoDashboardFragment;
 import com.android.settings.applications.ProcStatsData;
 import com.android.settings.applications.ProcStatsEntry;
 import com.android.settings.applications.ProcStatsPackageEntry;
index 7eef370..1f19504 100644 (file)
@@ -20,7 +20,6 @@ import android.content.Context;
 import android.support.v7.preference.Preference;
 
 import com.android.settings.SettingsPreferenceFragment;
-import com.android.settings.applications.AppInfoDashboardFragment;
 import com.android.settings.notification.AppNotificationSettings;
 import com.android.settings.notification.NotificationBackend;
 import com.android.settingslib.applications.ApplicationsState;
index a56e3fb..3f20381 100644 (file)
@@ -26,7 +26,6 @@ import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceScreen;
 
 import com.android.settings.SettingsPreferenceFragment;
-import com.android.settings.applications.AppInfoDashboardFragment;
 import com.android.settings.applications.AppLaunchSettings;
 import com.android.settingslib.applications.AppUtils;
 import com.android.settingslib.applications.ApplicationsState;
index 815e8d8..b844f78 100644 (file)
@@ -26,7 +26,6 @@ import android.support.v7.preference.Preference;
 import android.util.Log;
 
 import com.android.settings.R;
-import com.android.settings.applications.AppInfoDashboardFragment;
 import com.android.settingslib.applications.PermissionsSummaryHelper;
 
 import java.util.ArrayList;
index d737288..86383cb 100644 (file)
@@ -28,7 +28,6 @@ import android.text.format.Formatter;
 
 import com.android.settings.R;
 import com.android.settings.SettingsPreferenceFragment;
-import com.android.settings.applications.AppInfoDashboardFragment;
 import com.android.settings.applications.AppStorageSettings;
 import com.android.settings.applications.FetchPackageStorageAsyncLoader;
 import com.android.settingslib.applications.StorageStatsSource;
index 82719f7..0cfeb00 100644 (file)
@@ -21,7 +21,6 @@ import android.support.v7.preference.Preference;
 import android.text.BidiFormatter;
 
 import com.android.settings.R;
-import com.android.settings.applications.AppInfoDashboardFragment;
 
 public class AppVersionPreferenceController extends AppInfoPreferenceControllerBase {
 
index 314d799..37a9edf 100644 (file)
@@ -25,7 +25,6 @@ import android.support.annotation.VisibleForTesting;
 import android.support.v7.preference.Preference;
 
 import com.android.settings.SettingsPreferenceFragment;
-import com.android.settings.applications.AppInfoDashboardFragment;
 
 public class DrawOverlayDetailPreferenceController extends AppInfoPreferenceControllerBase {
 
index 4ac67ed..6fb6dc3 100644 (file)
@@ -22,7 +22,6 @@ import android.support.annotation.VisibleForTesting;
 import android.support.v7.preference.Preference;
 
 import com.android.settings.SettingsPreferenceFragment;
-import com.android.settings.applications.AppInfoDashboardFragment;
 import com.android.settings.applications.AppStateInstallAppsBridge;
 
 public class ExternalSourceDetailPreferenceController extends AppInfoPreferenceControllerBase {
index e35fa76..b9fe003 100644 (file)
@@ -22,7 +22,6 @@ import android.support.annotation.VisibleForTesting;
 import android.support.v7.preference.PreferenceScreen;
 
 import com.android.settings.R;
-import com.android.settings.applications.AppInfoDashboardFragment;
 import com.android.settings.applications.ApplicationFeatureProvider;
 import com.android.settings.applications.LayoutPreference;
 import com.android.settings.applications.instantapps.InstantAppButtonsController;
index 1d22291..d89c538 100644 (file)
@@ -22,7 +22,6 @@ import android.support.v7.preference.Preference;
 
 import com.android.settings.Utils;
 import com.android.settings.applications.AppDomainsPreference;
-import com.android.settings.applications.AppInfoDashboardFragment;
 import com.android.settingslib.applications.AppUtils;
 
 import java.util.Set;
index aea6bae..1873683 100644 (file)
@@ -26,7 +26,6 @@ import android.support.v7.preference.Preference;
 import android.util.Log;
 
 import com.android.settings.SettingsPreferenceFragment;
-import com.android.settings.applications.AppInfoDashboardFragment;
 
 public class PictureInPictureDetailPreferenceController extends AppInfoPreferenceControllerBase {
 
index 55b181a..2a88d2f 100644 (file)
@@ -25,7 +25,6 @@ import android.support.annotation.VisibleForTesting;
 import android.support.v7.preference.Preference;
 
 import com.android.settings.SettingsPreferenceFragment;
-import com.android.settings.applications.AppInfoDashboardFragment;
 
 public class WriteSystemSettingsPreferenceController extends AppInfoPreferenceControllerBase {
 
index 067e167..7371294 100644 (file)
@@ -93,7 +93,7 @@ import com.android.settings.applications.InstalledAppCounter;
 import com.android.settings.applications.InstalledAppDetails;
 import com.android.settings.applications.NotificationApps;
 import com.android.settings.applications.UsageAccessDetails;
-import com.android.settings.applications.AppInfoDashboardFragment;
+import com.android.settings.applications.appinfo.AppInfoDashboardFragment;
 import com.android.settings.applications.appinfo.DrawOverlayDetails;
 import com.android.settings.applications.appinfo.ExternalSourcesDetails;
 import com.android.settings.applications.appinfo.WriteSettingsDetails;
index acb20d5..3b38df6 100644 (file)
@@ -47,7 +47,7 @@ import com.android.settings.applications.ProcessStatsSummary;
 import com.android.settings.applications.ProcessStatsUi;
 import com.android.settings.applications.UsageAccessDetails;
 import com.android.settings.applications.VrListenerSettings;
-import com.android.settings.applications.AppInfoDashboardFragment;
+import com.android.settings.applications.appinfo.AppInfoDashboardFragment;
 import com.android.settings.applications.appinfo.DrawOverlayDetails;
 import com.android.settings.applications.appinfo.ExternalSourcesDetails;
 import com.android.settings.applications.appinfo.PictureInPictureDetails;
index 5b55ada..e8a7bbf 100644 (file)
@@ -32,7 +32,7 @@ import com.android.settings.R;
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.applications.AppStateBaseBridge;
 import com.android.settings.applications.InstalledAppDetails;
-import com.android.settings.applications.AppInfoDashboardFragment;
+import com.android.settings.applications.appinfo.AppInfoDashboardFragment;
 import com.android.settings.core.FeatureFlags;
 import com.android.settings.datausage.AppStateDataUsageBridge.DataUsageState;
 import com.android.settings.overlay.FeatureFactory;
index 8c4fa57..461f6e3 100644 (file)
@@ -25,7 +25,7 @@ import android.util.FeatureFlagUtils;
 import com.android.settings.R;
 import com.android.settings.SettingsActivity;
 import com.android.settings.applications.InstalledAppDetails;
-import com.android.settings.applications.AppInfoDashboardFragment;
+import com.android.settings.applications.appinfo.AppInfoDashboardFragment;
 import com.android.settings.core.FeatureFlags;
 import com.android.settings.widget.AppPreference;
 import com.android.settingslib.core.lifecycle.Lifecycle;
index 5fa7586..0d07e67 100644 (file)
@@ -45,7 +45,7 @@ import com.android.settings.Utils;
 import com.android.settings.applications.AppInfoBase;
 import com.android.settings.applications.InstalledAppDetails;
 import com.android.settings.applications.LayoutPreference;
-import com.android.settings.applications.AppInfoDashboardFragment;
+import com.android.settings.applications.appinfo.AppInfoDashboardFragment;
 import com.android.settings.core.FeatureFlags;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.applications.ApplicationsState;
index 6d3ec9a..ebcea43 100644 (file)
@@ -1,4 +1,4 @@
-com.android.settings.applications.AppInfoDashboardFragment
+com.android.settings.applications.appinfo.AppInfoDashboardFragment
 com.android.settings.bluetooth.DevicePickerFragment
 com.android.settings.bluetooth.BluetoothDeviceDetailsFragment
 com.android.settings.bluetooth.BluetoothPairingDetail
index 3516445..91833f5 100644 (file)
@@ -40,7 +40,6 @@ import com.android.internal.os.BatterySipper;
 import com.android.internal.os.BatteryStatsHelper;
 import com.android.settings.SettingsActivity;
 import com.android.settings.TestConfig;
-import com.android.settings.applications.AppInfoDashboardFragment;
 import com.android.settings.fuelgauge.BatteryUtils;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 
index b02e01e..76160ee 100644 (file)
@@ -37,7 +37,6 @@ import android.os.Bundle;
 import android.support.v7.preference.Preference;
 
 import com.android.settings.TestConfig;
-import com.android.settings.applications.AppInfoDashboardFragment;
 import com.android.settings.datausage.AppDataUsage;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settingslib.applications.ApplicationsState.AppEntry;
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.settings.applications;
+package com.android.settings.applications.appinfo;
 
 import static com.google.common.truth.Truth.assertThat;
 
@@ -32,6 +32,7 @@ import android.content.Intent;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
+import android.content.pm.UserInfo;
 import android.content.res.Resources;
 import android.os.UserManager;
 
@@ -59,7 +60,9 @@ import org.robolectric.annotation.Implementation;
 import org.robolectric.annotation.Implements;
 import org.robolectric.util.ReflectionHelpers;
 
+import java.util.ArrayList;
 import java.util.HashSet;
+import java.util.List;
 
 @RunWith(SettingsRobolectricTestRunner.class)
 @Config(
@@ -84,7 +87,7 @@ public final class AppInfoDashboardFragmentTest {
     private AppOpsManager mAppOpsManager;
 
     private FakeFeatureFactory mFeatureFactory;
-    private AppInfoDashboardFragment mAppDetail;
+    private AppInfoDashboardFragment mFragment;
     private Context mShadowContext;
 
 
@@ -93,12 +96,12 @@ public final class AppInfoDashboardFragmentTest {
         MockitoAnnotations.initMocks(this);
         mFeatureFactory = FakeFeatureFactory.setupForTest();
         mShadowContext = RuntimeEnvironment.application;
-        mAppDetail = spy(new AppInfoDashboardFragment());
-        doReturn(mActivity).when(mAppDetail).getActivity();
-        doReturn(mShadowContext).when(mAppDetail).getContext();
+        mFragment = spy(new AppInfoDashboardFragment());
+        doReturn(mActivity).when(mFragment).getActivity();
+        doReturn(mShadowContext).when(mFragment).getContext();
         doReturn(mPackageManager).when(mActivity).getPackageManager();
         doReturn(mAppOpsManager).when(mActivity).getSystemService(Context.APP_OPS_SERVICE);
-        mAppDetail.mActionButtons = ActionButtonPreferenceTest.createMock();
+        mFragment.mActionButtons = ActionButtonPreferenceTest.createMock();
 
         // Default to not considering any apps to be instant (individual tests can override this).
         ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider",
@@ -109,68 +112,68 @@ public final class AppInfoDashboardFragmentTest {
     public void shouldShowUninstallForAll_installForOneOtherUserOnly_shouldReturnTrue() {
         when(mDevicePolicyManager.packageHasActiveAdmins(nullable(String.class))).thenReturn(false);
         when(mUserManager.getUsers().size()).thenReturn(2);
-        ReflectionHelpers.setField(mAppDetail, "mDpm", mDevicePolicyManager);
-        ReflectionHelpers.setField(mAppDetail, "mUserManager", mUserManager);
+        ReflectionHelpers.setField(mFragment, "mDpm", mDevicePolicyManager);
+        ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager);
         final ApplicationInfo info = new ApplicationInfo();
         info.enabled = true;
         final AppEntry appEntry = mock(AppEntry.class);
         appEntry.info = info;
         final PackageInfo packageInfo = mock(PackageInfo.class);
-        ReflectionHelpers.setField(mAppDetail, "mPackageInfo", packageInfo);
+        ReflectionHelpers.setField(mFragment, "mPackageInfo", packageInfo);
 
-        assertThat(mAppDetail.shouldShowUninstallForAll(appEntry)).isTrue();
+        assertThat(mFragment.shouldShowUninstallForAll(appEntry)).isTrue();
     }
 
     @Test
     public void shouldShowUninstallForAll_installForSelfOnly_shouldReturnFalse() {
         when(mDevicePolicyManager.packageHasActiveAdmins(nullable(String.class))).thenReturn(false);
         when(mUserManager.getUsers().size()).thenReturn(2);
-        ReflectionHelpers.setField(mAppDetail, "mDpm", mDevicePolicyManager);
-        ReflectionHelpers.setField(mAppDetail, "mUserManager", mUserManager);
+        ReflectionHelpers.setField(mFragment, "mDpm", mDevicePolicyManager);
+        ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager);
         final ApplicationInfo info = new ApplicationInfo();
         info.flags = ApplicationInfo.FLAG_INSTALLED;
         info.enabled = true;
         final AppEntry appEntry = mock(AppEntry.class);
         appEntry.info = info;
         final PackageInfo packageInfo = mock(PackageInfo.class);
-        ReflectionHelpers.setField(mAppDetail, "mPackageInfo", packageInfo);
+        ReflectionHelpers.setField(mFragment, "mPackageInfo", packageInfo);
 
-        assertThat(mAppDetail.shouldShowUninstallForAll(appEntry)).isFalse();
+        assertThat(mFragment.shouldShowUninstallForAll(appEntry)).isFalse();
     }
 
     @Test
     public void launchFragment_hasNoPackageInfo_shouldFinish() {
-        ReflectionHelpers.setField(mAppDetail, "mPackageInfo", null);
+        ReflectionHelpers.setField(mFragment, "mPackageInfo", null);
 
-        assertThat(mAppDetail.ensurePackageInfoAvailable(mActivity)).isFalse();
+        assertThat(mFragment.ensurePackageInfoAvailable(mActivity)).isFalse();
         verify(mActivity).finishAndRemoveTask();
     }
 
     @Test
     public void launchFragment_hasPackageInfo_shouldReturnTrue() {
         final PackageInfo packageInfo = mock(PackageInfo.class);
-        ReflectionHelpers.setField(mAppDetail, "mPackageInfo", packageInfo);
+        ReflectionHelpers.setField(mFragment, "mPackageInfo", packageInfo);
 
-        assertThat(mAppDetail.ensurePackageInfoAvailable(mActivity)).isTrue();
+        assertThat(mFragment.ensurePackageInfoAvailable(mActivity)).isTrue();
         verify(mActivity, never()).finishAndRemoveTask();
     }
 
     @Test
     public void packageSizeChange_isOtherPackage_shouldNotRefreshUi() {
-        ReflectionHelpers.setField(mAppDetail, "mPackageName", PACKAGE_NAME);
-        mAppDetail.onPackageSizeChanged("Not_" + PACKAGE_NAME);
+        ReflectionHelpers.setField(mFragment, "mPackageName", PACKAGE_NAME);
+        mFragment.onPackageSizeChanged("Not_" + PACKAGE_NAME);
 
-        verify(mAppDetail, never()).refreshUi();
+        verify(mFragment, never()).refreshUi();
     }
 
     @Test
     public void packageSizeChange_isOwnPackage_shouldRefreshUi() {
-        doReturn(Boolean.TRUE).when(mAppDetail).refreshUi();
-        ReflectionHelpers.setField(mAppDetail, "mPackageName", PACKAGE_NAME);
+        doReturn(Boolean.TRUE).when(mFragment).refreshUi();
+        ReflectionHelpers.setField(mFragment, "mPackageName", PACKAGE_NAME);
 
-        mAppDetail.onPackageSizeChanged(PACKAGE_NAME);
+        mFragment.onPackageSizeChanged(PACKAGE_NAME);
 
-        verify(mAppDetail).refreshUi();
+        verify(mFragment).refreshUi();
     }
 
     // Tests that we don't show the "uninstall for all users" button for instant apps.
@@ -188,11 +191,11 @@ public final class AppInfoDashboardFragmentTest {
         appEntry.info = info;
         final PackageInfo packageInfo = mock(PackageInfo.class);
 
-        ReflectionHelpers.setField(mAppDetail, "mDpm", mDevicePolicyManager);
-        ReflectionHelpers.setField(mAppDetail, "mUserManager", mUserManager);
-        ReflectionHelpers.setField(mAppDetail, "mPackageInfo", packageInfo);
+        ReflectionHelpers.setField(mFragment, "mDpm", mDevicePolicyManager);
+        ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager);
+        ReflectionHelpers.setField(mFragment, "mPackageInfo", packageInfo);
 
-        assertThat(mAppDetail.shouldShowUninstallForAll(appEntry)).isFalse();
+        assertThat(mFragment.shouldShowUninstallForAll(appEntry)).isFalse();
     }
 
     // Tests that we don't show the uninstall button for instant apps"
@@ -209,12 +212,12 @@ public final class AppInfoDashboardFragmentTest {
         final PackageInfo packageInfo = mock(PackageInfo.class);
         packageInfo.applicationInfo = info;
 
-        ReflectionHelpers.setField(mAppDetail, "mUserManager", mUserManager);
-        ReflectionHelpers.setField(mAppDetail, "mAppEntry", appEntry);
-        ReflectionHelpers.setField(mAppDetail, "mPackageInfo", packageInfo);
+        ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager);
+        ReflectionHelpers.setField(mFragment, "mAppEntry", appEntry);
+        ReflectionHelpers.setField(mFragment, "mPackageInfo", packageInfo);
 
-        mAppDetail.initUninstallButtonForUserApp();
-        verify(mAppDetail.mActionButtons).setButton1Visible(false);
+        mFragment.initUninstallButtonForUserApp();
+        verify(mFragment.mActionButtons).setButton1Visible(false);
     }
 
     // Tests that we don't show the force stop button for instant apps (they aren't allowed to run
@@ -229,19 +232,19 @@ public final class AppInfoDashboardFragmentTest {
         final ApplicationInfo info = new ApplicationInfo();
         appEntry.info = info;
 
-        ReflectionHelpers.setField(mAppDetail, "mDpm", mDevicePolicyManager);
-        ReflectionHelpers.setField(mAppDetail, "mPackageInfo", packageInfo);
-        ReflectionHelpers.setField(mAppDetail, "mAppEntry", appEntry);
+        ReflectionHelpers.setField(mFragment, "mDpm", mDevicePolicyManager);
+        ReflectionHelpers.setField(mFragment, "mPackageInfo", packageInfo);
+        ReflectionHelpers.setField(mFragment, "mAppEntry", appEntry);
 
-        mAppDetail.checkForceStop();
-        verify(mAppDetail.mActionButtons).setButton2Visible(false);
+        mFragment.checkForceStop();
+        verify(mFragment.mActionButtons).setButton2Visible(false);
     }
 
     @Test
     public void onActivityResult_uninstalledUpdates_shouldInvalidateOptionsMenu() {
-        doReturn(true).when(mAppDetail).refreshUi();
+        doReturn(true).when(mFragment).refreshUi();
 
-        mAppDetail.onActivityResult(InstalledAppDetails.REQUEST_UNINSTALL, 0, mock(Intent.class));
+        mFragment.onActivityResult(mFragment.REQUEST_UNINSTALL, 0, mock(Intent.class));
 
         verify(mActivity).invalidateOptionsMenu();
     }
@@ -256,11 +259,11 @@ public final class AppInfoDashboardFragmentTest {
         final HashSet<String> homePackages = new HashSet<>();
         homePackages.add(info.packageName);
 
-        ReflectionHelpers.setField(mAppDetail, "mHomePackages", homePackages);
-        ReflectionHelpers.setField(mAppDetail, "mAppEntry", appEntry);
+        ReflectionHelpers.setField(mFragment, "mHomePackages", homePackages);
+        ReflectionHelpers.setField(mFragment, "mAppEntry", appEntry);
 
-        assertThat(mAppDetail.handleDisableable()).isFalse();
-        verify(mAppDetail.mActionButtons).setButton1Text(R.string.disable_text);
+        assertThat(mFragment.handleDisableable()).isFalse();
+        verify(mFragment.mActionButtons).setButton1Text(R.string.disable_text);
     }
 
     @Test
@@ -276,12 +279,12 @@ public final class AppInfoDashboardFragmentTest {
         when(mFeatureFactory.applicationFeatureProvider.getKeepEnabledPackages()).thenReturn(
                 new HashSet<>());
 
-        ReflectionHelpers.setField(mAppDetail, "mApplicationFeatureProvider",
+        ReflectionHelpers.setField(mFragment, "mApplicationFeatureProvider",
                 mFeatureFactory.applicationFeatureProvider);
-        ReflectionHelpers.setField(mAppDetail, "mAppEntry", appEntry);
+        ReflectionHelpers.setField(mFragment, "mAppEntry", appEntry);
 
-        assertThat(mAppDetail.handleDisableable()).isTrue();
-        verify(mAppDetail.mActionButtons).setButton1Text(R.string.disable_text);
+        assertThat(mFragment.handleDisableable()).isTrue();
+        verify(mFragment.mActionButtons).setButton1Text(R.string.disable_text);
     }
 
     @Test
@@ -297,13 +300,13 @@ public final class AppInfoDashboardFragmentTest {
         when(mFeatureFactory.applicationFeatureProvider.getKeepEnabledPackages()).thenReturn(
                 new HashSet<>());
 
-        ReflectionHelpers.setField(mAppDetail, "mApplicationFeatureProvider",
+        ReflectionHelpers.setField(mFragment, "mApplicationFeatureProvider",
                 mFeatureFactory.applicationFeatureProvider);
-        ReflectionHelpers.setField(mAppDetail, "mAppEntry", appEntry);
+        ReflectionHelpers.setField(mFragment, "mAppEntry", appEntry);
 
-        assertThat(mAppDetail.handleDisableable()).isTrue();
-        verify(mAppDetail.mActionButtons).setButton1Text(R.string.enable_text);
-        verify(mAppDetail.mActionButtons).setButton1Positive(true);
+        assertThat(mFragment.handleDisableable()).isTrue();
+        verify(mFragment.mActionButtons).setButton1Text(R.string.enable_text);
+        verify(mFragment.mActionButtons).setButton1Positive(true);
     }
 
     @Test
@@ -322,12 +325,12 @@ public final class AppInfoDashboardFragmentTest {
         when(mFeatureFactory.applicationFeatureProvider.getKeepEnabledPackages()).thenReturn(
                 packages);
 
-        ReflectionHelpers.setField(mAppDetail, "mApplicationFeatureProvider",
+        ReflectionHelpers.setField(mFragment, "mApplicationFeatureProvider",
                 mFeatureFactory.applicationFeatureProvider);
-        ReflectionHelpers.setField(mAppDetail, "mAppEntry", appEntry);
+        ReflectionHelpers.setField(mFragment, "mAppEntry", appEntry);
 
-        assertThat(mAppDetail.handleDisableable()).isFalse();
-        verify(mAppDetail.mActionButtons).setButton1Text(R.string.disable_text);
+        assertThat(mFragment.handleDisableable()).isFalse();
+        verify(mFragment.mActionButtons).setButton1Text(R.string.disable_text);
     }
 
     @Test
@@ -337,12 +340,61 @@ public final class AppInfoDashboardFragmentTest {
         info.enabled = true;
         final PackageInfo packageInfo = mock(PackageInfo.class);
         packageInfo.applicationInfo = info;
-        ReflectionHelpers.setField(mAppDetail, "mUserManager", mUserManager);
-        ReflectionHelpers.setField(mAppDetail, "mPackageInfo", packageInfo);
+        ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager);
+        ReflectionHelpers.setField(mFragment, "mPackageInfo", packageInfo);
 
-        mAppDetail.initUninstallButtonForUserApp();
+        mFragment.initUninstallButtonForUserApp();
+
+        verify(mFragment.mActionButtons).setButton1Positive(false);
+    }
+
+    @Test
+    public void getNumberOfUserWithPackageInstalled_twoUsersInstalled_shouldReturnTwo()
+            throws PackageManager.NameNotFoundException{
+        final String packageName = "Package1";
+        final int userID1 = 1;
+        final int userID2 = 2;
+        final List<UserInfo> userInfos = new ArrayList<>();
+        userInfos.add(new UserInfo(userID1, "User1", UserInfo.FLAG_PRIMARY));
+        userInfos.add(new UserInfo(userID2, "yue", UserInfo.FLAG_GUEST));
+        when(mUserManager.getUsers(true)).thenReturn(userInfos);
+        ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager);
+        final ApplicationInfo appInfo = new ApplicationInfo();
+        appInfo.flags = ApplicationInfo.FLAG_INSTALLED;
+        when(mPackageManager.getApplicationInfoAsUser(
+                packageName, PackageManager.GET_META_DATA, userID1))
+                .thenReturn(appInfo);
+        when(mPackageManager.getApplicationInfoAsUser(
+                packageName, PackageManager.GET_META_DATA, userID2))
+                .thenReturn(appInfo);
+        ReflectionHelpers.setField(mFragment, "mPm", mPackageManager);
+
+        assertThat(mFragment.getNumberOfUserWithPackageInstalled(packageName)).isEqualTo(2);
+    }
+
+    @Test
+    public void getNumberOfUserWithPackageInstalled_oneUserInstalled_shouldReturnOne()
+            throws PackageManager.NameNotFoundException{
+        final String packageName = "Package1";
+        final int userID1 = 1;
+        final int userID2 = 2;
+        final List<UserInfo> userInfos = new ArrayList<>();
+        userInfos.add(new UserInfo(userID1, "User1", UserInfo.FLAG_PRIMARY));
+        userInfos.add(new UserInfo(userID2, "yue", UserInfo.FLAG_GUEST));
+        when(mUserManager.getUsers(true)).thenReturn(userInfos);
+        ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager);
+        final ApplicationInfo appInfo = new ApplicationInfo();
+        appInfo.flags = ApplicationInfo.FLAG_INSTALLED;
+        when(mPackageManager.getApplicationInfoAsUser(
+                packageName, PackageManager.GET_META_DATA, userID1))
+                .thenReturn(appInfo);
+        when(mPackageManager.getApplicationInfoAsUser(
+                packageName, PackageManager.GET_META_DATA, userID2))
+                .thenThrow(new PackageManager.NameNotFoundException());
+        ReflectionHelpers.setField(mFragment, "mPm", mPackageManager);
+
+        assertThat(mFragment.getNumberOfUserWithPackageInstalled(packageName)).isEqualTo(1);
 
-        verify(mAppDetail.mActionButtons).setButton1Positive(false);
     }
 
     @Implements(Utils.class)
index 25dcab3..51b6ddf 100644 (file)
@@ -32,7 +32,6 @@ import android.support.v7.preference.PreferenceScreen;
 import com.android.settings.SettingsActivity;
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.TestConfig;
-import com.android.settings.applications.AppInfoDashboardFragment;
 import com.android.settings.notification.AppNotificationSettings;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settingslib.applications.ApplicationsState;
index ffbc8f5..d8d11bc 100644 (file)
@@ -39,7 +39,6 @@ import android.os.UserManager;
 import android.support.v7.preference.Preference;
 
 import com.android.settings.TestConfig;
-import com.android.settings.applications.AppInfoDashboardFragment;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 
 import org.junit.Before;
index d74e301..47844c5 100644 (file)
@@ -34,7 +34,6 @@ import android.support.v7.preference.PreferenceScreen;
 import com.android.settings.R;
 import com.android.settings.SettingsActivity;
 import com.android.settings.TestConfig;
-import com.android.settings.applications.AppInfoDashboardFragment;
 import com.android.settings.applications.ProcStatsData;
 import com.android.settings.applications.ProcessStatsDetail;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
index 482f33c..0b747a8 100644 (file)
@@ -30,7 +30,6 @@ import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceScreen;
 
 import com.android.settings.TestConfig;
-import com.android.settings.applications.AppInfoDashboardFragment;
 import com.android.settings.notification.AppNotificationSettings;
 import com.android.settings.notification.NotificationBackend;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
index b708232..c5003cc 100644 (file)
@@ -32,7 +32,6 @@ import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceScreen;
 
 import com.android.settings.TestConfig;
-import com.android.settings.applications.AppInfoDashboardFragment;
 import com.android.settings.applications.AppLaunchSettings;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settingslib.applications.AppUtils;
index f9f8d98..f0b415c 100644 (file)
@@ -34,7 +34,6 @@ import android.support.v7.preference.PreferenceScreen;
 import com.android.settings.R;
 import com.android.settings.SettingsActivity;
 import com.android.settings.TestConfig;
-import com.android.settings.applications.AppInfoDashboardFragment;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settingslib.applications.ApplicationsState;
 
index 729914a..c069517 100644 (file)
@@ -32,7 +32,6 @@ import android.os.Bundle;
 import android.support.v7.preference.Preference;
 
 import com.android.settings.TestConfig;
-import com.android.settings.applications.AppInfoDashboardFragment;
 import com.android.settings.applications.AppStorageSettings;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settingslib.applications.ApplicationsState.AppEntry;
index 7418489..d6ecf3e 100644 (file)
@@ -25,7 +25,6 @@ import android.content.pm.PackageInfo;
 import android.support.v7.preference.Preference;
 
 import com.android.settings.TestConfig;
-import com.android.settings.applications.AppInfoDashboardFragment;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 
 import org.junit.Before;
index 358e50d..e44fdfb 100644 (file)
@@ -31,7 +31,6 @@ import android.support.v7.preference.PreferenceScreen;
 import com.android.settings.R;
 import com.android.settings.SettingsActivity;
 import com.android.settings.TestConfig;
-import com.android.settings.applications.AppInfoDashboardFragment;
 import com.android.settings.applications.DefaultAppSettings;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 
index a7468b5..18a29e3 100644 (file)
@@ -32,7 +32,6 @@ import android.os.UserManager;
 import android.support.v7.preference.Preference;
 
 import com.android.settings.TestConfig;
-import com.android.settings.applications.AppInfoDashboardFragment;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 
 import org.junit.Before;
index d500be9..7e542f7 100644 (file)
@@ -28,7 +28,6 @@ import android.os.UserManager;
 import android.support.v7.preference.Preference;
 
 import com.android.settings.TestConfig;
-import com.android.settings.applications.AppInfoDashboardFragment;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 
 import org.junit.Before;
index 1216595..eb8a082 100644 (file)
@@ -34,7 +34,6 @@ import android.support.v7.preference.PreferenceScreen;
 import android.view.View;
 
 import com.android.settings.TestConfig;
-import com.android.settings.applications.AppInfoDashboardFragment;
 import com.android.settings.applications.LayoutPreference;
 import com.android.settings.applications.instantapps.InstantAppButtonsController;
 import com.android.settings.testutils.FakeFeatureFactory;
index f1776e8..bb0b42a 100644 (file)
@@ -18,8 +18,6 @@ package com.android.settings.applications.appinfo;
 
 import static com.google.common.truth.Truth.assertThat;
 
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.Mockito.eq;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
@@ -34,7 +32,6 @@ import android.util.ArraySet;
 
 import com.android.settings.TestConfig;
 import com.android.settings.applications.AppDomainsPreference;
-import com.android.settings.applications.AppInfoDashboardFragment;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settingslib.applications.AppUtils;
 import com.android.settingslib.applications.instantapps.InstantAppDataProvider;
index 7d81168..cf37b36 100644 (file)
@@ -29,7 +29,6 @@ import android.support.v7.preference.Preference;
 
 import com.android.settings.R;
 import com.android.settings.TestConfig;
-import com.android.settings.applications.AppInfoDashboardFragment;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 
 import org.junit.Before;
index fabcbb2..08133f0 100644 (file)
@@ -32,7 +32,6 @@ import android.os.UserManager;
 import android.support.v7.preference.Preference;
 
 import com.android.settings.TestConfig;
-import com.android.settings.applications.AppInfoDashboardFragment;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 
 import org.junit.Before;
index 5d7cca4..a1268d0 100644 (file)
@@ -41,7 +41,7 @@ import com.android.settings.R;
 import com.android.settings.SettingsActivity;
 import com.android.settings.TestConfig;
 import com.android.settings.applications.InstalledAppDetails;
-import com.android.settings.applications.AppInfoDashboardFragment;
+import com.android.settings.applications.appinfo.AppInfoDashboardFragment;
 import com.android.settings.core.FeatureFlags;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.widget.AppPreference;
index 1c064ae..0e3c402 100644 (file)
@@ -35,6 +35,7 @@ import static org.mockito.Mockito.when;
 
 @RunWith(AndroidJUnit4.class)
 @SmallTest
+@Deprecated
 public class PackageUtilTest {
     private static final String ALL_USERS_APP_NAME = "com.google.allusers.app";
     private static final String ONE_USER_APP_NAME = "com.google.oneuser.app";
index 4d92cf9..4165d06 100644 (file)
@@ -20,6 +20,7 @@ import android.content.Intent;
 import android.support.test.filters.SmallTest;
 import android.support.test.uiautomator.UiDevice;
 import android.support.test.uiautomator.UiObject;
+import android.support.test.uiautomator.UiObjectNotFoundException;
 import android.support.test.uiautomator.UiScrollable;
 import android.support.test.uiautomator.UiSelector;
 import android.test.InstrumentationTestCase;
@@ -79,9 +80,15 @@ public class SpecialAppAccessSettingsTest extends InstrumentationTestCase {
         final String titleSpecialApps = mTargetContext.getResources().getString(
             R.string.special_access);
 
-        final UiScrollable settings = new UiScrollable(
-                new UiSelector().packageName(mTargetContext.getPackageName()).scrollable(true));
-        settings.scrollTextIntoView(titleSpecialApps);
+        try {
+            // scollbar may or may not be present, depending on how many recents app are there. If
+            // the page is scrollable, scroll to the bottom to show the special app access settings.
+            final UiScrollable settings = new UiScrollable(
+                    new UiSelector().packageName(mTargetContext.getPackageName()).scrollable(true));
+            settings.scrollTextIntoView(titleSpecialApps);
+        } catch (UiObjectNotFoundException e) {
+            // ignore
+        }
 
         mDevice.findObject(new UiSelector().text(titleSpecialApps)).click();
     }