Move AppInfoDashboardFragment into appinfo package.
- 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
This commit is contained in:
@@ -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;
|
||||
|
@@ -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 {
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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(),
|
||||
@@ -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,24 +836,15 @@ 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 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 = packageManager.getApplicationInfoAsUser(
|
||||
final ApplicationInfo info = mPm.getApplicationInfoAsUser(
|
||||
packageName, PackageManager.GET_META_DATA, userInfo.id);
|
||||
if ((info.flags & ApplicationInfo.FLAG_INSTALLED) != 0) {
|
||||
count++;
|
||||
@@ -885,7 +856,6 @@ public class AppInfoDashboardFragment extends DashboardFragment
|
||||
|
||||
return count;
|
||||
}
|
||||
}
|
||||
|
||||
private static class DisableChanger extends AsyncTask<Object, Object, Object> {
|
||||
final PackageManager mPm;
|
||||
@@ -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();
|
@@ -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;
|
||||
|
||||
/*
|
||||
|
@@ -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;
|
||||
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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 {
|
||||
|
||||
|
@@ -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 {
|
||||
|
||||
|
@@ -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 {
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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 {
|
||||
|
||||
|
@@ -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 {
|
||||
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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
|
||||
|
@@ -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;
|
||||
|
||||
|
@@ -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)
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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";
|
||||
|
@@ -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);
|
||||
|
||||
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();
|
||||
}
|
||||
|
Reference in New Issue
Block a user