diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java index 2098bd6bf48..f78459f6980 100755 --- a/src/com/android/settings/applications/InstalledAppDetails.java +++ b/src/com/android/settings/applications/InstalledAppDetails.java @@ -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; diff --git a/src/com/android/settings/applications/InstalledAppDetailsTop.java b/src/com/android/settings/applications/InstalledAppDetailsTop.java index 174a86a2dfc..8090de03ea2 100644 --- a/src/com/android/settings/applications/InstalledAppDetailsTop.java +++ b/src/com/android/settings/applications/InstalledAppDetailsTop.java @@ -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 { diff --git a/src/com/android/settings/applications/RecentAppsPreferenceController.java b/src/com/android/settings/applications/RecentAppsPreferenceController.java index c613a7b166e..ee954acf250 100644 --- a/src/com/android/settings/applications/RecentAppsPreferenceController.java +++ b/src/com/android/settings/applications/RecentAppsPreferenceController.java @@ -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; diff --git a/src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java b/src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java index 017afe75479..ffe2bf313f9 100644 --- a/src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java @@ -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; diff --git a/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceController.java b/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceController.java index 61f3e46ca8e..669bc5a3a9e 100644 --- a/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceController.java +++ b/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceController.java @@ -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; diff --git a/src/com/android/settings/applications/AppInfoDashboardFragment.java b/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java similarity index 85% rename from src/com/android/settings/applications/AppInfoDashboardFragment.java rename to src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java index 1e24df900fc..0929dad3809 100755 --- a/src/com/android/settings/applications/AppInfoDashboardFragment.java +++ b/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java @@ -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 homeActivities = new ArrayList(); + final List homeActivities = new ArrayList(); 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 userInfos = userManager.getUsers(true); - int count = 0; + int getNumberOfUserWithPackageInstalled(String packageName) { + final List 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 = 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); + 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 { @@ -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(); diff --git a/src/com/android/settings/applications/appinfo/AppInfoPreferenceControllerBase.java b/src/com/android/settings/applications/appinfo/AppInfoPreferenceControllerBase.java index eac0a0c94c5..105a01e38f4 100644 --- a/src/com/android/settings/applications/appinfo/AppInfoPreferenceControllerBase.java +++ b/src/com/android/settings/applications/appinfo/AppInfoPreferenceControllerBase.java @@ -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; /* diff --git a/src/com/android/settings/applications/appinfo/AppInstallerInfoPreferenceController.java b/src/com/android/settings/applications/appinfo/AppInstallerInfoPreferenceController.java index 2449004b525..1fdc690d8d1 100644 --- a/src/com/android/settings/applications/appinfo/AppInstallerInfoPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/AppInstallerInfoPreferenceController.java @@ -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; diff --git a/src/com/android/settings/applications/appinfo/AppMemoryPreferenceController.java b/src/com/android/settings/applications/appinfo/AppMemoryPreferenceController.java index 3943041b2fd..7b497a9c8e8 100644 --- a/src/com/android/settings/applications/appinfo/AppMemoryPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/AppMemoryPreferenceController.java @@ -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; diff --git a/src/com/android/settings/applications/appinfo/AppNotificationPreferenceController.java b/src/com/android/settings/applications/appinfo/AppNotificationPreferenceController.java index 7eef370ecc1..1f1950418b3 100644 --- a/src/com/android/settings/applications/appinfo/AppNotificationPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/AppNotificationPreferenceController.java @@ -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; diff --git a/src/com/android/settings/applications/appinfo/AppOpenByDefaultPreferenceController.java b/src/com/android/settings/applications/appinfo/AppOpenByDefaultPreferenceController.java index a56e3fb6712..3f20381dbb5 100644 --- a/src/com/android/settings/applications/appinfo/AppOpenByDefaultPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/AppOpenByDefaultPreferenceController.java @@ -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; diff --git a/src/com/android/settings/applications/appinfo/AppPermissionPreferenceController.java b/src/com/android/settings/applications/appinfo/AppPermissionPreferenceController.java index 815e8d854c2..b844f785d90 100644 --- a/src/com/android/settings/applications/appinfo/AppPermissionPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/AppPermissionPreferenceController.java @@ -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; diff --git a/src/com/android/settings/applications/appinfo/AppStoragePreferenceController.java b/src/com/android/settings/applications/appinfo/AppStoragePreferenceController.java index d737288c62b..86383cb0678 100644 --- a/src/com/android/settings/applications/appinfo/AppStoragePreferenceController.java +++ b/src/com/android/settings/applications/appinfo/AppStoragePreferenceController.java @@ -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; diff --git a/src/com/android/settings/applications/appinfo/AppVersionPreferenceController.java b/src/com/android/settings/applications/appinfo/AppVersionPreferenceController.java index 82719f7f006..0cfeb008a3b 100644 --- a/src/com/android/settings/applications/appinfo/AppVersionPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/AppVersionPreferenceController.java @@ -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 { diff --git a/src/com/android/settings/applications/appinfo/DrawOverlayDetailPreferenceController.java b/src/com/android/settings/applications/appinfo/DrawOverlayDetailPreferenceController.java index 314d7995bf7..37a9edfff05 100644 --- a/src/com/android/settings/applications/appinfo/DrawOverlayDetailPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/DrawOverlayDetailPreferenceController.java @@ -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 { diff --git a/src/com/android/settings/applications/appinfo/ExternalSourceDetailPreferenceController.java b/src/com/android/settings/applications/appinfo/ExternalSourceDetailPreferenceController.java index 4ac67ed77a5..6fb6dc356c9 100644 --- a/src/com/android/settings/applications/appinfo/ExternalSourceDetailPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/ExternalSourceDetailPreferenceController.java @@ -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 { diff --git a/src/com/android/settings/applications/appinfo/InstantAppButtonsPreferenceController.java b/src/com/android/settings/applications/appinfo/InstantAppButtonsPreferenceController.java index e35fa76b85f..b9fe0039cf2 100644 --- a/src/com/android/settings/applications/appinfo/InstantAppButtonsPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/InstantAppButtonsPreferenceController.java @@ -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; diff --git a/src/com/android/settings/applications/appinfo/InstantAppDomainsPreferenceController.java b/src/com/android/settings/applications/appinfo/InstantAppDomainsPreferenceController.java index 1d2229127da..d89c538d764 100644 --- a/src/com/android/settings/applications/appinfo/InstantAppDomainsPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/InstantAppDomainsPreferenceController.java @@ -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; diff --git a/src/com/android/settings/applications/appinfo/PictureInPictureDetailPreferenceController.java b/src/com/android/settings/applications/appinfo/PictureInPictureDetailPreferenceController.java index aea6baef922..18736832158 100644 --- a/src/com/android/settings/applications/appinfo/PictureInPictureDetailPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/PictureInPictureDetailPreferenceController.java @@ -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 { diff --git a/src/com/android/settings/applications/appinfo/WriteSystemSettingsPreferenceController.java b/src/com/android/settings/applications/appinfo/WriteSystemSettingsPreferenceController.java index 55b181ab7b4..2a88d2f6c9d 100644 --- a/src/com/android/settings/applications/appinfo/WriteSystemSettingsPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/WriteSystemSettingsPreferenceController.java @@ -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 { diff --git a/src/com/android/settings/applications/manageapplications/ManageApplications.java b/src/com/android/settings/applications/manageapplications/ManageApplications.java index 067e167a92f..7371294e124 100644 --- a/src/com/android/settings/applications/manageapplications/ManageApplications.java +++ b/src/com/android/settings/applications/manageapplications/ManageApplications.java @@ -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; diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java index acb20d55c4f..3b38df64a7f 100644 --- a/src/com/android/settings/core/gateway/SettingsGateway.java +++ b/src/com/android/settings/core/gateway/SettingsGateway.java @@ -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; diff --git a/src/com/android/settings/datausage/UnrestrictedDataAccess.java b/src/com/android/settings/datausage/UnrestrictedDataAccess.java index 5b55ada19c6..e8a7bbfa2f9 100644 --- a/src/com/android/settings/datausage/UnrestrictedDataAccess.java +++ b/src/com/android/settings/datausage/UnrestrictedDataAccess.java @@ -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; diff --git a/src/com/android/settings/location/RecentLocationRequestPreferenceController.java b/src/com/android/settings/location/RecentLocationRequestPreferenceController.java index 8c4fa5798ef..461f6e36a75 100644 --- a/src/com/android/settings/location/RecentLocationRequestPreferenceController.java +++ b/src/com/android/settings/location/RecentLocationRequestPreferenceController.java @@ -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; diff --git a/src/com/android/settings/widget/EntityHeaderController.java b/src/com/android/settings/widget/EntityHeaderController.java index 5fa75862898..0d07e67f809 100644 --- a/src/com/android/settings/widget/EntityHeaderController.java +++ b/src/com/android/settings/widget/EntityHeaderController.java @@ -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; diff --git a/tests/robotests/assets/grandfather_not_implementing_index_provider b/tests/robotests/assets/grandfather_not_implementing_index_provider index 6d3ec9a3c96..ebcea43a42a 100644 --- a/tests/robotests/assets/grandfather_not_implementing_index_provider +++ b/tests/robotests/assets/grandfather_not_implementing_index_provider @@ -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 diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppBatteryPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppBatteryPreferenceControllerTest.java index 3516445f120..91833f562cf 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/AppBatteryPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppBatteryPreferenceControllerTest.java @@ -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; diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceControllerTest.java index b02e01e30fe..76160eeba77 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceControllerTest.java @@ -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; diff --git a/tests/robotests/src/com/android/settings/applications/AppInfoDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoDashboardFragmentTest.java similarity index 60% rename from tests/robotests/src/com/android/settings/applications/AppInfoDashboardFragmentTest.java rename to tests/robotests/src/com/android/settings/applications/appinfo/AppInfoDashboardFragmentTest.java index e742549e720..b208253b3cd 100644 --- a/tests/robotests/src/com/android/settings/applications/AppInfoDashboardFragmentTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoDashboardFragmentTest.java @@ -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 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 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 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) diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoPreferenceControllerBaseTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoPreferenceControllerBaseTest.java index 25dcab31ca5..51b6ddf06d6 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoPreferenceControllerBaseTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoPreferenceControllerBaseTest.java @@ -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; diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppInstallerInfoPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppInstallerInfoPreferenceControllerTest.java index ffbc8f55954..d8d11bc5c27 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/AppInstallerInfoPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppInstallerInfoPreferenceControllerTest.java @@ -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; diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppMemoryPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppMemoryPreferenceControllerTest.java index d74e301004c..47844c59b0a 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/AppMemoryPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppMemoryPreferenceControllerTest.java @@ -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; diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppNotificationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppNotificationPreferenceControllerTest.java index 482f33cf903..0b747a8f662 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/AppNotificationPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppNotificationPreferenceControllerTest.java @@ -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; diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppOpenByDefaultPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppOpenByDefaultPreferenceControllerTest.java index b708232ed1d..c5003cc9290 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/AppOpenByDefaultPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppOpenByDefaultPreferenceControllerTest.java @@ -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; diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppPermissionPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppPermissionPreferenceControllerTest.java index f9f8d98da81..f0b415cb9fc 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/AppPermissionPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppPermissionPreferenceControllerTest.java @@ -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; diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppStoragePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppStoragePreferenceControllerTest.java index 729914acc9c..c0695178424 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/AppStoragePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppStoragePreferenceControllerTest.java @@ -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; diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppVersionPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppVersionPreferenceControllerTest.java index 74184897f0d..d6ecf3e120c 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/AppVersionPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppVersionPreferenceControllerTest.java @@ -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; diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/DefaultAppShortcutPreferenceControllerBaseTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/DefaultAppShortcutPreferenceControllerBaseTest.java index 358e50d2ed9..e44fdfb2070 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/DefaultAppShortcutPreferenceControllerBaseTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/DefaultAppShortcutPreferenceControllerBaseTest.java @@ -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; diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/DrawOverlayDetailPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/DrawOverlayDetailPreferenceControllerTest.java index a7468b5a69d..18a29e3cd3f 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/DrawOverlayDetailPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/DrawOverlayDetailPreferenceControllerTest.java @@ -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; diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/ExternalSourceDetailPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/ExternalSourceDetailPreferenceControllerTest.java index d500be901b2..7e542f70920 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/ExternalSourceDetailPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/ExternalSourceDetailPreferenceControllerTest.java @@ -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; diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/InstantAppButtonsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/InstantAppButtonsPreferenceControllerTest.java index 121659538a4..eb8a082ce57 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/InstantAppButtonsPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/InstantAppButtonsPreferenceControllerTest.java @@ -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; diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/InstantAppDomainsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/InstantAppDomainsPreferenceControllerTest.java index f1776e88e7d..bb0b42a07a2 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/InstantAppDomainsPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/InstantAppDomainsPreferenceControllerTest.java @@ -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; diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/PictureInPictureDetailPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/PictureInPictureDetailPreferenceControllerTest.java index 7d8116899ca..cf37b362f2b 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/PictureInPictureDetailPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/PictureInPictureDetailPreferenceControllerTest.java @@ -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; diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/WriteSystemSettingsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/WriteSystemSettingsPreferenceControllerTest.java index fabcbb20439..08133f01a26 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/WriteSystemSettingsPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/WriteSystemSettingsPreferenceControllerTest.java @@ -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; diff --git a/tests/robotests/src/com/android/settings/location/RecentLocationRequestPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/location/RecentLocationRequestPreferenceControllerTest.java index 5d7cca4c894..a1268d01399 100644 --- a/tests/robotests/src/com/android/settings/location/RecentLocationRequestPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/location/RecentLocationRequestPreferenceControllerTest.java @@ -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; diff --git a/tests/unit/src/com/android/settings/applications/PackageUtilTest.java b/tests/unit/src/com/android/settings/applications/PackageUtilTest.java index 1c064ae8897..0e3c402c70e 100644 --- a/tests/unit/src/com/android/settings/applications/PackageUtilTest.java +++ b/tests/unit/src/com/android/settings/applications/PackageUtilTest.java @@ -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"; diff --git a/tests/unit/src/com/android/settings/applications/SpecialAppAccessSettingsTest.java b/tests/unit/src/com/android/settings/applications/SpecialAppAccessSettingsTest.java index 4d92cf98a06..4165d06df17 100644 --- a/tests/unit/src/com/android/settings/applications/SpecialAppAccessSettingsTest.java +++ b/tests/unit/src/com/android/settings/applications/SpecialAppAccessSettingsTest.java @@ -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(); }