Consolidate all wrappers used for testing.

- Add the wrapper package and move all wrappers to the wrapper package.
- Get rid of some wrapper interface/impl implementation and have a
wrapper class directly.

Bug: 65634579
Test: make RunSettingsRoboTests
Change-Id: Ic757d8f7bacfa7a034c7e692205bc1dc4b0e1de1
This commit is contained in:
Doris Ling
2017-08-31 16:17:30 -07:00
parent fe18f8e876
commit dee1a22c45
138 changed files with 421 additions and 1010 deletions

View File

@@ -110,9 +110,8 @@ import com.android.internal.app.UnlaunchableAppActivity;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.UserIcons;
import com.android.internal.widget.LockPatternUtils;
import com.android.settings.enterprise.DevicePolicyManagerWrapper;
import com.android.settings.password.FingerprintManagerWrapper;
import com.android.settings.password.IFingerprintManager;
import com.android.settings.wrapper.FingerprintManagerWrapper;
import com.android.settings.wrapper.DevicePolicyManagerWrapper;
import java.io.IOException;
import java.io.InputStream;
@@ -1258,7 +1257,7 @@ public final class Utils extends com.android.settingslib.Utils {
}
}
public static IFingerprintManager getFingerprintManagerWrapperOrNull(Context context) {
public static FingerprintManagerWrapper getFingerprintManagerWrapperOrNull(Context context) {
FingerprintManager fingerprintManager = getFingerprintManagerOrNull(context);
if (fingerprintManager != null) {
return new FingerprintManagerWrapper(fingerprintManager);

View File

@@ -43,8 +43,7 @@ import com.android.settings.R;
import com.android.settings.applications.LayoutPreference;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.android.settings.enterprise.DevicePolicyManagerWrapper;
import com.android.settings.enterprise.DevicePolicyManagerWrapperImpl;
import com.android.settings.wrapper.DevicePolicyManagerWrapper;
import com.android.settingslib.core.AbstractPreferenceController;
import java.io.IOException;
@@ -60,7 +59,7 @@ public class RemoveAccountPreferenceController extends AbstractPreferenceControl
private DevicePolicyManagerWrapper mDpm;
public RemoveAccountPreferenceController(Context context, Fragment parent) {
this(context, parent, new DevicePolicyManagerWrapperImpl(
this(context, parent, new DevicePolicyManagerWrapper(
(DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE)));
}

View File

@@ -1,39 +0,0 @@
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.applications;
import android.accessibilityservice.AccessibilityServiceInfo;
import android.content.ComponentName;
public class AccessibilityServiceInfoWrapperImpl implements AccessibilityServiceInfoWrapper {
private final AccessibilityServiceInfo mServiceInfo;
public AccessibilityServiceInfoWrapperImpl(AccessibilityServiceInfo serviceInfo) {
mServiceInfo = serviceInfo;
}
@Override
public AccessibilityServiceInfo getAccessibilityServiceInfo() {
return mServiceInfo;
}
@Override
public ComponentName getComponentName() {
return mServiceInfo.getComponentName();
}
}

View File

@@ -1,30 +0,0 @@
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.applications;
/**
* This interface replicates a subset of the android.content.pm.ActivityInfo. The interface
* exists so that we can use a thin wrapper around the ActivityInfo in production code and a mock in
* tests.
*/
public interface ActivityInfoWrapper {
/**
* Returns whether this activity supports picture-in-picture.
*/
boolean supportsPictureInPicture();
}

View File

@@ -22,6 +22,8 @@ import android.os.AsyncTask;
import android.os.UserHandle;
import android.os.UserManager;
import com.android.settingslib.wrapper.PackageManagerWrapper;
import java.util.List;
public abstract class AppCounter extends AsyncTask<Void, Void, Integer> {

View File

@@ -43,9 +43,8 @@ import com.android.settings.SettingsActivity;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.Utils;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.android.settings.enterprise.DevicePolicyManagerWrapper;
import com.android.settings.enterprise.DevicePolicyManagerWrapperImpl;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.wrapper.DevicePolicyManagerWrapper;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.applications.ApplicationsState.AppEntry;
@@ -94,7 +93,7 @@ public abstract class AppInfoBase extends SettingsPreferenceFragment
.getApplicationFeatureProvider(activity);
mState = ApplicationsState.getInstance(activity.getApplication());
mSession = mState.newSession(this);
mDpm = new DevicePolicyManagerWrapperImpl(
mDpm = new DevicePolicyManagerWrapper(
(DevicePolicyManager) activity.getSystemService(Context.DEVICE_POLICY_SERVICE));
mUserManager = (UserManager) activity.getSystemService(Context.USER_SERVICE);
mPm = activity.getPackageManager();

View File

@@ -23,6 +23,8 @@ import android.os.AsyncTask;
import android.os.UserHandle;
import android.os.UserManager;
import com.android.settingslib.wrapper.PackageManagerWrapper;
import java.util.ArrayList;
import java.util.List;

View File

@@ -31,6 +31,7 @@ import android.util.SparseArray;
import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.applications.ApplicationsState.AppEntry;
import com.android.settings.wrapper.IPackageManagerWrapper;
import java.util.Arrays;
import java.util.Collection;
@@ -57,7 +58,7 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge {
public AppStateAppOpsBridge(Context context, ApplicationsState appState, Callback callback,
int appOpsOpCode, String[] permissions) {
this(context, appState, callback, appOpsOpCode, permissions,
new IPackageManagerWrapperImpl(AppGlobals.getPackageManager()));
new IPackageManagerWrapper(AppGlobals.getPackageManager()));
}
@VisibleForTesting(otherwise = VisibleForTesting.NONE)

View File

@@ -22,7 +22,9 @@ import android.os.Build;
import android.os.RemoteException;
import android.os.UserHandle;
import com.android.settings.enterprise.DevicePolicyManagerWrapper;
import com.android.settings.wrapper.DevicePolicyManagerWrapper;
import com.android.settings.wrapper.IPackageManagerWrapper;
import com.android.settingslib.wrapper.PackageManagerWrapper;
/**
* Counts installed apps across all users that have been granted one or more specific permissions by

View File

@@ -18,7 +18,9 @@ package com.android.settings.applications;
import android.content.pm.ApplicationInfo;
import android.os.UserManager;
import com.android.settings.enterprise.DevicePolicyManagerWrapper;
import com.android.settings.wrapper.DevicePolicyManagerWrapper;
import com.android.settings.wrapper.IPackageManagerWrapper;
import com.android.settingslib.wrapper.PackageManagerWrapper;
/**
* Lists installed apps across all users that have been granted one or more specific permissions by

View File

@@ -29,7 +29,9 @@ import android.util.ArraySet;
import android.view.View;
import com.android.settings.applications.instantapps.InstantAppButtonsController;
import com.android.settings.enterprise.DevicePolicyManagerWrapper;
import com.android.settings.wrapper.DevicePolicyManagerWrapper;
import com.android.settings.wrapper.IPackageManagerWrapper;
import com.android.settingslib.wrapper.PackageManagerWrapper;
import java.util.ArrayList;
import java.util.List;

View File

@@ -1,45 +0,0 @@
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.applications;
import android.view.autofill.AutofillManager;
public class AutofillManagerWrapperImpl implements AutofillManagerWrapper {
private final AutofillManager mAfm;
public AutofillManagerWrapperImpl(AutofillManager afm) {
mAfm = afm;
}
@Override
public boolean hasAutofillFeature() {
if (mAfm == null) {
return false;
}
return mAfm.hasAutofillFeature();
}
@Override
public boolean isAutofillSupported() {
if (mAfm == null) {
return false;
}
return mAfm.isAutofillSupported();
}
}

View File

@@ -1,67 +0,0 @@
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.applications;
import android.content.Intent;
import android.content.pm.IPackageManager;
import android.content.pm.PackageInfo;
import android.content.pm.ParceledListSlice;
import android.content.pm.ResolveInfo;
import android.os.RemoteException;
public class IPackageManagerWrapperImpl implements IPackageManagerWrapper {
private final IPackageManager mPms;
public IPackageManagerWrapperImpl(IPackageManager pms) {
mPms = pms;
}
@Override
public int checkUidPermission(String permName, int uid) throws RemoteException {
return mPms.checkUidPermission(permName, uid);
}
@Override
public ResolveInfo findPersistentPreferredActivity(Intent intent, int userId)
throws RemoteException {
return mPms.findPersistentPreferredActivity(intent, userId);
}
@Override
public PackageInfo getPackageInfo(String packageName, int flags, int userId)
throws RemoteException {
return mPms.getPackageInfo(packageName, flags, userId);
}
@Override
public String[] getAppOpPermissionPackages(String permissionName) throws RemoteException {
return mPms.getAppOpPermissionPackages(permissionName);
}
@Override
public boolean isPackageAvailable(String packageName, int userId) throws RemoteException {
return mPms.isPackageAvailable(packageName, userId);
}
@Override
public ParceledListSlice<PackageInfo> getPackagesHoldingPermissions(
String[] permissions, int flags, int userId) throws RemoteException {
return mPms.getPackagesHoldingPermissions(permissions, flags, userId);
}
}

View File

@@ -21,6 +21,8 @@ import android.content.pm.ResolveInfo;
import android.content.pm.PackageManager;
import android.os.UserHandle;
import com.android.settingslib.wrapper.PackageManagerWrapper;
import java.util.List;
public abstract class InstalledAppCounter extends AppCounter {

View File

@@ -24,7 +24,6 @@ import android.app.ActivityManager;
import android.app.AlertDialog;
import android.app.LoaderManager;
import android.app.LoaderManager.LoaderCallbacks;
import android.app.admin.DevicePolicyManager;
import android.content.ActivityNotFoundException;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
@@ -106,6 +105,7 @@ import com.android.settingslib.applications.StorageStatsSource.AppStorageStats;
import com.android.settingslib.development.DevelopmentSettingsEnabler;
import com.android.settingslib.net.ChartData;
import com.android.settingslib.net.ChartDataLoader;
import com.android.settingslib.wrapper.PackageManagerWrapper;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
@@ -1236,7 +1236,7 @@ public class InstalledAppDetails extends AppInfoBase
if (pref != null) {
pref.setSummary(DefaultHomePreferenceController.isHomeDefault(mPackageName,
new PackageManagerWrapperImpl(context.getPackageManager()))
new PackageManagerWrapper(context.getPackageManager()))
? R.string.yes : R.string.no);
}
pref = findPreference("default_browser");

View File

@@ -20,6 +20,8 @@ import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.os.UserManager;
import com.android.settingslib.wrapper.PackageManagerWrapper;
public abstract class InstalledAppLister extends AppLister {
public InstalledAppLister(PackageManagerWrapper packageManager, UserManager userManager) {

View File

@@ -90,6 +90,7 @@ import com.android.settingslib.applications.ApplicationsState.AppFilter;
import com.android.settingslib.applications.ApplicationsState.CompoundFilter;
import com.android.settingslib.applications.ApplicationsState.VolumeFilter;
import com.android.settingslib.applications.StorageStatsSource;
import com.android.settingslib.wrapper.PackageManagerWrapper;
import java.util.ArrayList;
import java.util.Arrays;
@@ -888,7 +889,6 @@ public class ManageApplications extends InstrumentedPreferenceFragment
private int mLastSortMode = -1;
private int mWhichSize = SIZE_TOTAL;
CharSequence mCurFilterPrefix;
private PackageManager mPm;
private AppFilter mCompositeFilter;
private boolean mHasReceivedLoadEntries;
private boolean mHasReceivedBridgeCallback;
@@ -938,7 +938,6 @@ public class ManageApplications extends InstrumentedPreferenceFragment
mManageApplications.mListContainer
);
mContext = manageApplications.getActivity();
mPm = mContext.getPackageManager();
mFilterMode = filterMode;
if (mManageApplications.mListType == LIST_TYPE_NOTIFICATION) {
mExtraInfoBridge = new AppStateNotificationBridge(mContext, mState, this,
@@ -1491,7 +1490,7 @@ public class ManageApplications extends InstrumentedPreferenceFragment
public void setListening(boolean listening) {
if (listening) {
new InstalledAppCounter(mContext, InstalledAppCounter.IGNORE_INSTALL_REASON,
new PackageManagerWrapperImpl(mContext.getPackageManager())) {
new PackageManagerWrapper(mContext.getPackageManager())) {
@Override
protected void onCountComplete(int num) {
mLoader.setSummary(SummaryProvider.this,

View File

@@ -21,6 +21,7 @@ import android.content.pm.ApplicationInfo;
import com.android.settings.R;
import com.android.settings.dashboard.SummaryLoader;
import com.android.settings.notification.NotificationBackend;
import com.android.settingslib.wrapper.PackageManagerWrapper;
/**
* Extension of ManageApplications with no changes other than having its own
@@ -39,7 +40,7 @@ public class NotificationApps extends ManageApplications {
mContext = context;
mLoader = loader;
mNotificationBackend = new NotificationBackend();
mPackageManager = new PackageManagerWrapperImpl(mContext.getPackageManager());
mPackageManager = new PackageManagerWrapper(mContext.getPackageManager());
}
@Override

View File

@@ -1,116 +0,0 @@
/*
* Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.applications;
import android.content.ComponentName;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.ApplicationInfo;
import android.content.pm.IPackageDeleteObserver;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.UserHandle;
import android.os.storage.VolumeInfo;
import java.util.List;
/**
* This interface replicates a subset of the android.content.pm.PackageManager (PM). The interface
* exists so that we can use a thin wrapper around the PM in production code and a mock in tests.
* We cannot directly mock or shadow the PM, because some of the methods we rely on are newer than
* the API version supported by Robolectric.
*/
public interface PackageManagerWrapper {
/**
* Returns the real {@code PackageManager} object.
*/
PackageManager getPackageManager();
/**
* Calls {@code PackageManager.getInstalledApplicationsAsUser()}.
*
* @see android.content.pm.PackageManager#getInstalledApplicationsAsUser
*/
List<ApplicationInfo> getInstalledApplicationsAsUser(int flags, int userId);
/**
* Calls {@code PackageManager.hasSystemFeature()}.
*
* @see android.content.pm.PackageManager#hasSystemFeature
*/
boolean hasSystemFeature(String name);
/**
* Calls {@code PackageManager.queryIntentActivitiesAsUser()}.
*
* @see android.content.pm.PackageManager#queryIntentActivitiesAsUser
*/
List<ResolveInfo> queryIntentActivitiesAsUser(Intent intent, int flags, int userId);
/**
* Calls {@code PackageManager.getInstallReason()}.
*
* @see android.content.pm.PackageManager#getInstallReason
*/
int getInstallReason(String packageName, UserHandle user);
/**
* Calls {@code PackageManager.getApplicationInfoAsUser}
*/
ApplicationInfo getApplicationInfoAsUser(String packageName, int i, int userId)
throws PackageManager.NameNotFoundException;
/**
* Calls {@code PackageManager.setDefaultBrowserPackageNameAsUser}
*/
boolean setDefaultBrowserPackageNameAsUser(String packageName, int userId);
/**
* Calls {@code PackageManager.getDefaultBrowserPackageNameAsUser}
*/
String getDefaultBrowserPackageNameAsUser(int userId);
/**
* Calls {@code PackageManager.getHomeActivities}
*/
ComponentName getHomeActivities(List<ResolveInfo> homeActivities);
/**
* Calls {@code PackageManager.queryIntentServicesAsUser}
*/
List<ResolveInfo> queryIntentServicesAsUser(Intent intent, int i, int user);
/**
* Calls {@code PackageManager.replacePreferredActivity}
*/
void replacePreferredActivity(IntentFilter homeFilter, int matchCategoryEmpty,
ComponentName[] componentNames, ComponentName component);
/**
* Calls {@code PackageManager.getPrimaryStorageCurrentVolume}
*/
VolumeInfo getPrimaryStorageCurrentVolume();
/**
* Calls {@code PackageManager.deletePackageAsUser}
*/
void deletePackageAsUser(String packageName, IPackageDeleteObserver observer, int flags,
int userId);
int getPackageUidAsUser(String pkg, int userId) throws PackageManager.NameNotFoundException;
}

View File

@@ -1,112 +0,0 @@
/*
* Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.applications;
import android.content.ComponentName;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.ApplicationInfo;
import android.content.pm.IPackageDeleteObserver;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.UserHandle;
import android.os.storage.VolumeInfo;
import java.util.List;
public class PackageManagerWrapperImpl implements PackageManagerWrapper {
private final PackageManager mPm;
public PackageManagerWrapperImpl(PackageManager pm) {
mPm = pm;
}
@Override
public PackageManager getPackageManager() {
return mPm;
}
@Override
public List<ApplicationInfo> getInstalledApplicationsAsUser(int flags, int userId) {
return mPm.getInstalledApplicationsAsUser(flags, userId);
}
@Override
public boolean hasSystemFeature(String name) {
return mPm.hasSystemFeature(name);
}
@Override
public List<ResolveInfo> queryIntentActivitiesAsUser(Intent intent, int flags, int userId) {
return mPm.queryIntentActivitiesAsUser(intent, flags, userId);
}
@Override
public int getInstallReason(String packageName, UserHandle user) {
return mPm.getInstallReason(packageName, user);
}
@Override
public ApplicationInfo getApplicationInfoAsUser(String packageName, int i, int userId)
throws PackageManager.NameNotFoundException {
return mPm.getApplicationInfoAsUser(packageName, i, userId);
}
@Override
public boolean setDefaultBrowserPackageNameAsUser(String packageName, int userId) {
return mPm.setDefaultBrowserPackageNameAsUser(packageName, userId);
}
@Override
public String getDefaultBrowserPackageNameAsUser(int userId) {
return mPm.getDefaultBrowserPackageNameAsUser(userId);
}
@Override
public ComponentName getHomeActivities(List<ResolveInfo> homeActivities) {
return mPm.getHomeActivities(homeActivities);
}
@Override
public List<ResolveInfo> queryIntentServicesAsUser(Intent intent, int i, int user) {
return mPm.queryIntentServicesAsUser(intent, i, user);
}
@Override
public void replacePreferredActivity(IntentFilter homeFilter, int matchCategoryEmpty,
ComponentName[] componentNames, ComponentName component) {
mPm.replacePreferredActivity(homeFilter, matchCategoryEmpty, componentNames, component);
}
@Override
public VolumeInfo getPrimaryStorageCurrentVolume() {
return mPm.getPrimaryStorageCurrentVolume();
}
@Override
public void deletePackageAsUser(String packageName, IPackageDeleteObserver observer, int flags,
int userId) {
mPm.deletePackageAsUser(packageName, observer, flags, userId);
}
@Override
public int getPackageUidAsUser(String pkg, int userId)
throws PackageManager.NameNotFoundException {
return mPm.getPackageUidAsUser(pkg, userId);
}
}

View File

@@ -36,6 +36,7 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.notification.EmptyTextSettings;
import com.android.settings.wrapper.ActivityInfoWrapper;
import java.util.ArrayList;
import java.util.Collections;
@@ -63,7 +64,7 @@ public class PictureInPictureSettings extends EmptyTextSettings {
if (activities != null) {
wrappedActivities = new ActivityInfoWrapper[activities.length];
for (int i = 0; i < activities.length; i++) {
wrappedActivities[i] = new ActivityInfoWrapperImpl(activities[i]);
wrappedActivities[i] = new ActivityInfoWrapper(activities[i]);
}
}
return checkPackageHasPictureInPictureActivities(packageName, wrappedActivities);

View File

@@ -42,6 +42,7 @@ import com.android.settings.Utils;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.wrapper.PackageManagerWrapper;
import java.util.ArrayList;
import java.util.Arrays;
@@ -143,7 +144,7 @@ public class RecentAppsPreferenceController extends AbstractPreferenceController
refreshUi(mCategory.getContext());
// Show total number of installed apps as See all's summary.
new InstalledAppCounter(mContext, InstalledAppCounter.IGNORE_INSTALL_REASON,
new PackageManagerWrapperImpl(mContext.getPackageManager())) {
new PackageManagerWrapper(mContext.getPackageManager())) {
@Override
protected void onCountComplete(int num) {
if (mHasRecentApps) {

View File

@@ -1,32 +0,0 @@
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.applications;
import android.content.pm.UserInfo;
import java.util.List;
/**
* This interface replicates a subset of the android.os.UserManager. The interface
* exists so that we can use a thin wrapper around the UserManager in production code and a mock in
* tests. We cannot directly mock or shadow the UserManager, because some of the methods we rely on
* are newer than the API version supported by Robolectric or are hidden.
*/
public interface UserManagerWrapper {
UserInfo getPrimaryUser();
List<UserInfo> getUsers();
}

View File

@@ -24,9 +24,9 @@ import android.text.TextUtils;
import com.android.internal.app.AssistUtils;
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.applications.PackageManagerWrapper;
import com.android.settings.applications.defaultapps.DefaultAppInfo;
import com.android.settings.applications.defaultapps.DefaultAppPickerFragment;
import com.android.settingslib.wrapper.PackageManagerWrapper;
import java.util.ArrayList;
import java.util.List;

View File

@@ -26,8 +26,8 @@ import android.graphics.drawable.Drawable;
import android.os.RemoteException;
import android.os.UserHandle;
import com.android.settings.applications.PackageManagerWrapper;
import com.android.settings.widget.RadioButtonPickerFragment;
import com.android.settingslib.wrapper.PackageManagerWrapper;
/**
* Data model representing an app in DefaultAppPicker UI.

View File

@@ -29,11 +29,10 @@ import android.util.Pair;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.applications.PackageManagerWrapper;
import com.android.settings.applications.PackageManagerWrapperImpl;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.android.settings.widget.RadioButtonPickerFragment;
import com.android.settings.widget.RadioButtonPreference;
import com.android.settingslib.wrapper.PackageManagerWrapper;
/**
* A generic app picker fragment that shows a list of app as radio button group.
@@ -45,7 +44,7 @@ public abstract class DefaultAppPickerFragment extends RadioButtonPickerFragment
@Override
public void onAttach(Context context) {
super.onAttach(context);
mPm = new PackageManagerWrapperImpl(context.getPackageManager());
mPm = new PackageManagerWrapper(context.getPackageManager());
}
@Override

View File

@@ -26,11 +26,10 @@ import android.text.TextUtils;
import android.util.Log;
import com.android.settings.R;
import com.android.settings.applications.PackageManagerWrapper;
import com.android.settings.applications.PackageManagerWrapperImpl;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.widget.GearPreference;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.wrapper.PackageManagerWrapper;
public abstract class DefaultAppPreferenceController extends AbstractPreferenceController
implements PreferenceControllerMixin {
@@ -44,7 +43,7 @@ public abstract class DefaultAppPreferenceController extends AbstractPreferenceC
public DefaultAppPreferenceController(Context context) {
super(context);
mPackageManager = new PackageManagerWrapperImpl(context.getPackageManager());
mPackageManager = new PackageManagerWrapper(context.getPackageManager());
mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
mUserId = UserHandle.myUserId();
}

View File

@@ -23,8 +23,7 @@ import android.provider.Settings;
import android.text.TextUtils;
import android.view.autofill.AutofillManager;
import com.android.settings.applications.AutofillManagerWrapper;
import com.android.settings.applications.AutofillManagerWrapperImpl;
import com.android.settings.wrapper.AutofillManagerWrapper;
public class DefaultAutofillPreferenceController extends DefaultAppPreferenceController {
private AutofillManagerWrapper mAutofillManager;
@@ -32,7 +31,7 @@ public class DefaultAutofillPreferenceController extends DefaultAppPreferenceCon
public DefaultAutofillPreferenceController(Context context) {
super(context);
mAutofillManager = new AutofillManagerWrapperImpl(
mAutofillManager = new AutofillManagerWrapper(
mContext.getSystemService(AutofillManager.class));
}

View File

@@ -24,7 +24,7 @@ import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import com.android.settings.applications.PackageManagerWrapper;
import com.android.settingslib.wrapper.PackageManagerWrapper;
import java.util.ArrayList;
import java.util.List;

View File

@@ -29,9 +29,8 @@ import android.widget.Button;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.applications.AppStoreUtil;
import com.android.settings.applications.PackageManagerWrapper;
import com.android.settings.applications.PackageManagerWrapperImpl;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.wrapper.PackageManagerWrapper;
/** Encapsulates a container for buttons relevant to instant apps */
public class InstantAppButtonsController implements DialogInterface.OnClickListener {
@@ -62,7 +61,7 @@ public class InstantAppButtonsController implements DialogInterface.OnClickListe
mFragment = fragment;
mView = view;
mShowDialogDelegate = showDialogDelegate;
mPackageManagerWrapper = new PackageManagerWrapperImpl(context.getPackageManager());
mPackageManagerWrapper = new PackageManagerWrapper(context.getPackageManager());
}
public InstantAppButtonsController setPackageName(String packageName) {

View File

@@ -32,6 +32,7 @@ import com.android.settings.Utils;
import com.android.settings.fingerprint.FingerprintSuggestionActivity;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.wallpaper.WallpaperSuggestionActivity;
import com.android.settings.wrapper.WallpaperManagerWrapper;
import com.android.settingslib.drawer.Tile;
/**

View File

@@ -46,14 +46,13 @@ import android.widget.AdapterView;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.applications.AppInfoBase;
import com.android.settings.applications.PackageManagerWrapper;
import com.android.settings.applications.PackageManagerWrapperImpl;
import com.android.settings.widget.EntityHeaderController;
import com.android.settingslib.AppItem;
import com.android.settingslib.net.ChartData;
import com.android.settingslib.net.ChartDataLoader;
import com.android.settingslib.net.UidDetail;
import com.android.settingslib.net.UidDetailProvider;
import com.android.settingslib.wrapper.PackageManagerWrapper;
public class AppDataUsage extends DataUsageBase implements Preference.OnPreferenceChangeListener,
DataSaverBackend.Listener {
@@ -104,7 +103,7 @@ public class AppDataUsage extends DataUsageBase implements Preference.OnPreferen
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
mPackageManagerWrapper = new PackageManagerWrapperImpl(getPackageManager());
mPackageManagerWrapper = new PackageManagerWrapper(getPackageManager());
final Bundle args = getArguments();
try {

View File

@@ -24,12 +24,12 @@ import android.view.MenuInflater;
import android.view.MenuItem;
import com.android.settings.R;
import com.android.settings.applications.PackageManagerWrapper;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnCreateOptionsMenu;
import com.android.settingslib.core.lifecycle.events.OnOptionsItemSelected;
import com.android.settingslib.core.lifecycle.events.OnPrepareOptionsMenu;
import com.android.settingslib.wrapper.PackageManagerWrapper;
import java.util.Objects;

View File

@@ -35,9 +35,6 @@ import android.view.View;
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.applications.PackageManagerWrapperImpl;
import com.android.settings.applications.UserManagerWrapper;
import com.android.settings.applications.UserManagerWrapperImpl;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.deviceinfo.storage.AutomaticStorageManagementSwitchPreferenceController;
import com.android.settings.deviceinfo.storage.CachedStorageValuesHelper;
@@ -49,10 +46,12 @@ import com.android.settings.deviceinfo.storage.UserIconLoader;
import com.android.settings.deviceinfo.storage.VolumeSizesLoader;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settings.wrapper.UserManagerWrapper;
import com.android.settingslib.applications.StorageStatsSource;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.deviceinfo.PrivateStorageInfo;
import com.android.settingslib.deviceinfo.StorageManagerVolumeProvider;
import com.android.settingslib.wrapper.PackageManagerWrapper;
import java.util.ArrayList;
import java.util.Arrays;
@@ -95,7 +94,7 @@ public class StorageDashboardFragment extends DashboardFragment
@VisibleForTesting
void initializeOptionsMenu(Activity activity) {
mOptionMenuController = new PrivateVolumeOptionMenuController(
activity, mVolume, new PackageManagerWrapperImpl(activity.getPackageManager()));
activity, mVolume, new PackageManagerWrapper(activity.getPackageManager()));
getLifecycle().addObserver(mOptionMenuController);
setHasOptionsMenu(true);
activity.invalidateOptionsMenu();
@@ -178,7 +177,7 @@ public class StorageDashboardFragment extends DashboardFragment
controllers.add(mPreferenceController);
UserManagerWrapper userManager =
new UserManagerWrapperImpl(context.getSystemService(UserManager.class));
new UserManagerWrapper(context.getSystemService(UserManager.class));
mSecondaryUsers = SecondaryUserController.getSecondaryUserControllers(context, userManager);
controllers.addAll(mSecondaryUsers);
@@ -227,7 +226,7 @@ public class StorageDashboardFragment extends DashboardFragment
public List<AbstractPreferenceController> getPreferenceControllers(Context context) {
final StorageManager sm = context.getSystemService(StorageManager.class);
final UserManagerWrapper userManager =
new UserManagerWrapperImpl(context.getSystemService(UserManager.class));
new UserManagerWrapper(context.getSystemService(UserManager.class));
final List<AbstractPreferenceController> controllers = new ArrayList<>();
controllers.add(new StorageSummaryDonutPreferenceController(context));
controllers.add(new StorageItemPreferenceController(context, null /* host */,
@@ -244,10 +243,10 @@ public class StorageDashboardFragment extends DashboardFragment
Bundle args) {
Context context = getContext();
return new StorageAsyncLoader(context,
new UserManagerWrapperImpl(context.getSystemService(UserManager.class)),
new UserManagerWrapper(context.getSystemService(UserManager.class)),
mVolume.fsUuid,
new StorageStatsSource(context),
new PackageManagerWrapperImpl(context.getPackageManager()));
new PackageManagerWrapper(context.getPackageManager()));
}
@Override

View File

@@ -30,15 +30,15 @@ import android.util.SparseArray;
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.applications.PackageManagerWrapperImpl;
import com.android.settings.applications.UserManagerWrapperImpl;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.deviceinfo.storage.StorageAsyncLoader;
import com.android.settings.deviceinfo.storage.StorageAsyncLoader.AppsStorageResult;
import com.android.settings.deviceinfo.storage.StorageItemPreferenceController;
import com.android.settings.wrapper.UserManagerWrapper;
import com.android.settingslib.applications.StorageStatsSource;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.deviceinfo.StorageManagerVolumeProvider;
import com.android.settingslib.wrapper.PackageManagerWrapper;
import java.util.ArrayList;
import java.util.List;
@@ -116,10 +116,10 @@ public class StorageProfileFragment extends DashboardFragment
public Loader<SparseArray<AppsStorageResult>> onCreateLoader(int id, Bundle args) {
Context context = getContext();
return new StorageAsyncLoader(context,
new UserManagerWrapperImpl(context.getSystemService(UserManager.class)),
new UserManagerWrapper(context.getSystemService(UserManager.class)),
mVolume.fsUuid,
new StorageStatsSource(context),
new PackageManagerWrapperImpl(context.getPackageManager()));
new PackageManagerWrapper(context.getPackageManager()));
}
@Override

View File

@@ -27,9 +27,9 @@ import android.support.v7.preference.PreferenceScreen;
import android.util.SparseArray;
import com.android.settings.Utils;
import com.android.settings.applications.UserManagerWrapper;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.deviceinfo.StorageItemPreference;
import com.android.settings.wrapper.UserManagerWrapper;
import com.android.settingslib.core.AbstractPreferenceController;
import java.util.ArrayList;

View File

@@ -30,10 +30,10 @@ import android.util.ArraySet;
import android.util.Log;
import android.util.SparseArray;
import com.android.settings.applications.PackageManagerWrapper;
import com.android.settings.applications.UserManagerWrapper;
import com.android.settings.utils.AsyncLoader;
import com.android.settings.wrapper.UserManagerWrapper;
import com.android.settingslib.applications.StorageStatsSource;
import com.android.settingslib.wrapper.PackageManagerWrapper;
import java.io.IOException;
import java.util.Collections;

View File

@@ -30,10 +30,10 @@ import android.util.SparseArray;
import com.android.internal.logging.nano.MetricsProto;
import com.android.internal.util.Preconditions;
import com.android.settings.Utils;
import com.android.settings.applications.UserManagerWrapper;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.deviceinfo.StorageItemPreference;
import com.android.settings.deviceinfo.StorageProfileFragment;
import com.android.settings.wrapper.UserManagerWrapper;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.drawer.SettingsDrawerActivity;

View File

@@ -31,6 +31,7 @@ import android.support.v7.preference.PreferenceScreen;
import android.util.Log;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.wrapper.PowerManagerWrapper;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver;

View File

@@ -1,125 +0,0 @@
/*
* Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.enterprise;
import android.annotation.NonNull;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Intent;
import android.os.UserHandle;
import android.support.annotation.Nullable;
import java.util.List;
public class DevicePolicyManagerWrapperImpl implements DevicePolicyManagerWrapper {
private final DevicePolicyManager mDpm;
public DevicePolicyManagerWrapperImpl(DevicePolicyManager dpm) {
mDpm = dpm;
}
@Override
public @Nullable List<ComponentName> getActiveAdminsAsUser(int userId) {
return mDpm.getActiveAdminsAsUser(userId);
}
@Override
public int getMaximumFailedPasswordsForWipe(@Nullable ComponentName admin, int userHandle) {
return mDpm.getMaximumFailedPasswordsForWipe(admin, userHandle);
}
@Override
public ComponentName getDeviceOwnerComponentOnCallingUser() {
return mDpm.getDeviceOwnerComponentOnCallingUser();
}
@Override
public ComponentName getDeviceOwnerComponentOnAnyUser() {
return mDpm.getDeviceOwnerComponentOnAnyUser();
}
@Override
public @Nullable ComponentName getProfileOwnerAsUser(final int userId) {
return mDpm.getProfileOwnerAsUser(userId);
}
@Override
public CharSequence getDeviceOwnerOrganizationName() {
return mDpm.getDeviceOwnerOrganizationName();
}
@Override
public int getPermissionGrantState(@Nullable ComponentName admin, String packageName,
String permission) {
return mDpm.getPermissionGrantState(admin, packageName, permission);
}
@Override
public boolean isSecurityLoggingEnabled(@Nullable ComponentName admin) {
return mDpm.isSecurityLoggingEnabled(admin);
}
@Override
public boolean isNetworkLoggingEnabled(@Nullable ComponentName admin) {
return mDpm.isNetworkLoggingEnabled(admin);
}
@Override
public long getLastSecurityLogRetrievalTime() {
return mDpm.getLastSecurityLogRetrievalTime();
}
@Override
public long getLastBugReportRequestTime() {
return mDpm.getLastBugReportRequestTime();
}
@Override
public long getLastNetworkLogRetrievalTime() {
return mDpm.getLastNetworkLogRetrievalTime();
}
@Override
public boolean isCurrentInputMethodSetByOwner() {
return mDpm.isCurrentInputMethodSetByOwner();
}
@Override
public List<String> getOwnerInstalledCaCerts(@NonNull UserHandle user) {
return mDpm.getOwnerInstalledCaCerts(user);
}
@Override
public boolean isDeviceOwnerAppOnAnyUser(String packageName) {
return mDpm.isDeviceOwnerAppOnAnyUser(packageName);
}
@Override
public boolean packageHasActiveAdmins(String packageName) {
return mDpm.packageHasActiveAdmins(packageName);
}
@Override
public boolean isUninstallInQueue(String packageName) {
return mDpm.isUninstallInQueue(packageName);
}
@Override
public Intent createAdminSupportIntent(@NonNull String restriction) {
return mDpm.createAdminSupportIntent(restriction);
}
}

View File

@@ -30,9 +30,10 @@ import android.text.style.ClickableSpan;
import android.view.View;
import com.android.settings.R;
import com.android.settings.applications.PackageManagerWrapper;
import com.android.settings.vpn2.ConnectivityManagerWrapper;
import com.android.settings.vpn2.VpnUtils;
import com.android.settings.wrapper.ConnectivityManagerWrapper;
import com.android.settings.wrapper.DevicePolicyManagerWrapper;
import com.android.settingslib.wrapper.PackageManagerWrapper;
import java.util.Date;
import java.util.List;

View File

@@ -29,8 +29,7 @@ import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.Utils;
import com.android.settings.core.InstrumentedFragment;
import com.android.settings.password.ChooseLockSettingsHelper;
import com.android.settings.password.IFingerprintManager;
import com.android.settings.wrapper.FingerprintManagerWrapper;
import java.util.ArrayList;
@@ -48,7 +47,7 @@ public class FingerprintEnrollSidecar extends InstrumentedFragment {
private byte[] mToken;
private boolean mDone;
private int mUserId;
private IFingerprintManager mFingerprintManager;
private FingerprintManagerWrapper mFingerprintManager;
private ArrayList<QueuedEvent> mQueuedEvents;
private abstract class QueuedEvent {

View File

@@ -45,8 +45,7 @@ import com.android.settings.SettingsActivity;
import com.android.settings.Utils;
import com.android.settings.applications.LayoutPreference;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.enterprise.DevicePolicyManagerWrapper;
import com.android.settings.enterprise.DevicePolicyManagerWrapperImpl;
import com.android.settings.wrapper.DevicePolicyManagerWrapper;
import com.android.settings.fuelgauge.anomaly.Anomaly;
import com.android.settings.fuelgauge.anomaly.AnomalyDialogFragment;
import com.android.settings.fuelgauge.anomaly.AnomalyLoader;
@@ -194,7 +193,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
super.onAttach(activity);
mState = ApplicationsState.getInstance(getActivity().getApplication());
mDpm = new DevicePolicyManagerWrapperImpl(
mDpm = new DevicePolicyManagerWrapper(
(DevicePolicyManager) activity.getSystemService(Context.DEVICE_POLICY_SERVICE));
mUserManager = (UserManager) activity.getSystemService(Context.USER_SERVICE);
mPackageManager = activity.getPackageManager();

View File

@@ -50,9 +50,9 @@ import com.android.settings.SettingsActivity;
import com.android.settings.Utils;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.core.instrumentation.MetricsFeatureProvider;
import com.android.settings.enterprise.DevicePolicyManagerWrapper;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.widget.ActionButtonPreference;
import com.android.settings.wrapper.DevicePolicyManagerWrapper;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.applications.AppUtils;
import com.android.settingslib.applications.ApplicationsState;

View File

@@ -35,8 +35,7 @@ import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.android.settings.enterprise.DevicePolicyManagerWrapper;
import com.android.settings.enterprise.DevicePolicyManagerWrapperImpl;
import com.android.settings.wrapper.DevicePolicyManagerWrapper;
import com.android.settingslib.core.AbstractPreferenceController;
/**
@@ -71,7 +70,7 @@ public class BackgroundActivityPreferenceController extends AbstractPreferenceCo
mPowerWhitelistBackend = backend;
mPackageManager = context.getPackageManager();
mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
mDpm = new DevicePolicyManagerWrapperImpl(
mDpm = new DevicePolicyManagerWrapper(
(DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE));
mAppOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
mUid = uid;

View File

@@ -23,6 +23,8 @@ import android.text.format.DateUtils;
import android.util.KeyValueListParser;
import android.util.Log;
import com.android.settings.wrapper.KeyValueListParserWrapper;
/**
* Class to store the policy for anomaly detection, which comes from
* {@link android.provider.Settings.Global}
@@ -104,7 +106,7 @@ public class AnomalyDetectionPolicy {
private final KeyValueListParserWrapper mParserWrapper;
public AnomalyDetectionPolicy(Context context) {
this(context, new KeyValueListParserWrapperImpl(new KeyValueListParser(',')));
this(context, new KeyValueListParserWrapper(new KeyValueListParser(',')));
}
@VisibleForTesting

View File

@@ -1,50 +0,0 @@
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.fuelgauge.anomaly;
import android.util.KeyValueListParser;
/**
* Impl of {@link KeyValueListParser}
*/
public class KeyValueListParserWrapperImpl implements KeyValueListParserWrapper {
private KeyValueListParser mParser;
public KeyValueListParserWrapperImpl(KeyValueListParser parser) {
mParser = parser;
}
@Override
public KeyValueListParser getKeyValueListParser() {
return mParser;
}
@Override
public void setString(String str) throws IllegalArgumentException {
mParser.setString(str);
}
@Override
public boolean getBoolean(String key, boolean defaultValue) {
return mParser.getBoolean(key, defaultValue);
}
@Override
public long getLong(String key, long defaultValue) {
return mParser.getLong(key, defaultValue);
}
}

View File

@@ -26,6 +26,7 @@ import android.telephony.TelephonyManager;
import com.android.settings.Utils;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.wrapper.RestrictedLockUtilsWrapper;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnPause;

View File

@@ -30,6 +30,7 @@ import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.core.InstrumentedPreferenceFragment;
import com.android.settings.widget.RadioButtonPreference;
import com.android.settings.wrapper.NetworkScoreManagerWrapper;
import java.util.List;

View File

@@ -21,6 +21,7 @@ import android.support.v7.preference.Preference;
import com.android.settings.R;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.wrapper.NetworkScoreManagerWrapper;
import com.android.settingslib.core.AbstractPreferenceController;
import java.util.List;

View File

@@ -25,8 +25,6 @@ import android.support.annotation.Keep;
import com.android.settings.applications.ApplicationFeatureProvider;
import com.android.settings.applications.ApplicationFeatureProviderImpl;
import com.android.settings.applications.IPackageManagerWrapperImpl;
import com.android.settings.applications.PackageManagerWrapperImpl;
import com.android.settings.bluetooth.BluetoothFeatureProvider;
import com.android.settings.bluetooth.BluetoothFeatureProviderImpl;
import com.android.settings.connecteddevice.SmsMirroringFeatureProvider;
@@ -38,7 +36,6 @@ import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider;
import com.android.settings.dashboard.suggestions.SuggestionFeatureProviderImpl;
import com.android.settings.datausage.DataPlanFeatureProvider;
import com.android.settings.datausage.DataPlanFeatureProviderImpl;
import com.android.settings.enterprise.DevicePolicyManagerWrapperImpl;
import com.android.settings.enterprise.EnterprisePrivacyFeatureProvider;
import com.android.settings.enterprise.EnterprisePrivacyFeatureProviderImpl;
import com.android.settings.fuelgauge.PowerUsageFeatureProvider;
@@ -53,7 +50,10 @@ import com.android.settings.security.SecurityFeatureProvider;
import com.android.settings.security.SecurityFeatureProviderImpl;
import com.android.settings.users.UserFeatureProvider;
import com.android.settings.users.UserFeatureProviderImpl;
import com.android.settings.vpn2.ConnectivityManagerWrapperImpl;
import com.android.settings.wrapper.ConnectivityManagerWrapper;
import com.android.settings.wrapper.DevicePolicyManagerWrapper;
import com.android.settings.wrapper.IPackageManagerWrapper;
import com.android.settingslib.wrapper.PackageManagerWrapper;
/**
* {@link FeatureFactory} implementation for AOSP Settings.
@@ -109,9 +109,9 @@ public class FeatureFactoryImpl extends FeatureFactory {
public ApplicationFeatureProvider getApplicationFeatureProvider(Context context) {
if (mApplicationFeatureProvider == null) {
mApplicationFeatureProvider = new ApplicationFeatureProviderImpl(context,
new PackageManagerWrapperImpl(context.getPackageManager()),
new IPackageManagerWrapperImpl(AppGlobals.getPackageManager()),
new DevicePolicyManagerWrapperImpl((DevicePolicyManager) context
new PackageManagerWrapper(context.getPackageManager()),
new IPackageManagerWrapper(AppGlobals.getPackageManager()),
new DevicePolicyManagerWrapper((DevicePolicyManager) context
.getSystemService(Context.DEVICE_POLICY_SERVICE)));
}
return mApplicationFeatureProvider;
@@ -129,11 +129,11 @@ public class FeatureFactoryImpl extends FeatureFactory {
public EnterprisePrivacyFeatureProvider getEnterprisePrivacyFeatureProvider(Context context) {
if (mEnterprisePrivacyFeatureProvider == null) {
mEnterprisePrivacyFeatureProvider = new EnterprisePrivacyFeatureProviderImpl(context,
new DevicePolicyManagerWrapperImpl((DevicePolicyManager) context
new DevicePolicyManagerWrapper((DevicePolicyManager) context
.getSystemService(Context.DEVICE_POLICY_SERVICE)),
new PackageManagerWrapperImpl(context.getPackageManager()),
new PackageManagerWrapper(context.getPackageManager()),
UserManager.get(context),
new ConnectivityManagerWrapperImpl((ConnectivityManager) context
new ConnectivityManagerWrapper((ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE)),
context.getResources());
}

View File

@@ -1,39 +0,0 @@
/*
* Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.password;
import android.hardware.fingerprint.FingerprintManager.EnrollmentCallback;
import android.os.CancellationSignal;
/**
* This is the workaround to allow us test {@link SetNewPasswordController} which uses a new hidden
* API {@link android.hardware.fingerprint.FingerprintManager#hasEnrolledFingerprints(int)} that
* roboelectric does not support yet. Having roboelectic to support latest platform API is tracked
* in b/30995831.
*/
public interface IFingerprintManager {
boolean isHardwareDetected();
boolean hasEnrolledFingerprints(int userId);
long preEnroll();
void setActiveUser(int userId);
void enroll(byte [] token, CancellationSignal cancel, int flags,
int userId, EnrollmentCallback callback);
}

View File

@@ -36,6 +36,7 @@ import android.os.UserManager;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.widget.LockPatternUtils;
import com.android.settings.Utils;
import com.android.settings.wrapper.FingerprintManagerWrapper;
/**
* Business logic for {@link SetNewPasswordActivity}.
@@ -56,7 +57,7 @@ final class SetNewPasswordController {
*/
private final int mTargetUserId;
private final PackageManager mPackageManager;
@Nullable private final IFingerprintManager mFingerprintManager;
@Nullable private final FingerprintManagerWrapper mFingerprintManager;
private final DevicePolicyManager mDevicePolicyManager;
private final Ui mUi;
@@ -77,7 +78,7 @@ final class SetNewPasswordController {
}
// Create a wrapper of FingerprintManager for testing, see IFingerPrintManager for details.
final FingerprintManager fingerprintManager = Utils.getFingerprintManagerOrNull(context);
final IFingerprintManager fingerprintManagerWrapper =
final FingerprintManagerWrapper fingerprintManagerWrapper =
fingerprintManager == null
? null
: new FingerprintManagerWrapper(fingerprintManager);
@@ -91,7 +92,7 @@ final class SetNewPasswordController {
SetNewPasswordController(
int targetUserId,
PackageManager packageManager,
IFingerprintManager fingerprintManager,
FingerprintManagerWrapper fingerprintManager,
DevicePolicyManager devicePolicyManager,
Ui ui) {
mTargetUserId = targetUserId;

View File

@@ -34,9 +34,9 @@ import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.applications.ManageApplications;
import com.android.settings.applications.PackageManagerWrapper;
import com.android.settings.dashboard.SiteMapManager;
import com.android.settings.utils.AsyncLoader;
import com.android.settingslib.wrapper.PackageManagerWrapper;
import java.util.ArrayList;
import java.util.HashSet;

View File

@@ -21,9 +21,9 @@ import android.content.Context;
import android.text.TextUtils;
import android.util.Log;
import com.android.settings.applications.PackageManagerWrapperImpl;
import com.android.settings.dashboard.SiteMapManager;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.wrapper.PackageManagerWrapper;
/**
* FeatureProvider for the refactored search code.
@@ -50,7 +50,7 @@ public class SearchFeatureProviderImpl implements SearchFeatureProvider {
@Override
public InstalledAppResultLoader getInstalledAppSearchLoader(Context context, String query) {
return new InstalledAppResultLoader(
context, new PackageManagerWrapperImpl(context.getPackageManager()),
context, new PackageManagerWrapper(context.getPackageManager()),
cleanQuery(query), getSiteMapManager());
}

View File

@@ -1,59 +0,0 @@
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.vpn2;
import android.net.ConnectivityManager;
import android.net.ConnectivityManager.NetworkCallback;
import android.net.Network;
import android.net.NetworkRequest;
import android.os.Handler;
import android.net.ProxyInfo;
public class ConnectivityManagerWrapperImpl implements ConnectivityManagerWrapper {
private final ConnectivityManager mCm;
public ConnectivityManagerWrapperImpl(ConnectivityManager cm) {
mCm = cm;
}
@Override
public ConnectivityManager getConnectivityManager() {
return mCm;
}
@Override
public String getAlwaysOnVpnPackageForUser(int userId) {
return mCm.getAlwaysOnVpnPackageForUser(userId);
}
@Override
public ProxyInfo getGlobalProxy() {
return mCm.getGlobalProxy();
}
@Override
public void registerNetworkCallback(NetworkRequest request, NetworkCallback callback,
Handler handler) {
mCm.registerNetworkCallback(request, callback, handler);
}
@Override
public void startCaptivePortalApp(Network network) {
mCm.startCaptivePortalApp(network);
}
}

View File

@@ -27,6 +27,7 @@ import android.util.Log;
import com.android.internal.net.LegacyVpnInfo;
import com.android.internal.net.VpnConfig;
import com.android.settings.wrapper.ConnectivityManagerWrapper;
/**
* Utility functions for vpn.

View File

@@ -30,9 +30,10 @@ import android.text.TextUtils;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.applications.PackageManagerWrapper;
import com.android.settings.applications.defaultapps.DefaultAppInfo;
import com.android.settings.applications.defaultapps.DefaultAppPickerFragment;
import com.android.settings.wrapper.UserPackageWrapper;
import com.android.settingslib.wrapper.PackageManagerWrapper;
import java.util.ArrayList;
import java.util.List;

View File

@@ -28,6 +28,8 @@ import android.webkit.WebViewProviderInfo;
import android.widget.Toast;
import com.android.settings.R;
import com.android.settings.wrapper.UserPackageWrapper;
import com.android.settings.wrapper.UserPackageWrapperImpl;
import java.util.ArrayList;
import java.util.List;

View File

@@ -28,12 +28,12 @@ import android.provider.SearchIndexableResource;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.network.NetworkScoreManagerWrapper;
import com.android.settings.network.NetworkScorerPickerPreferenceController;
import com.android.settings.network.WifiCallingPreferenceController;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settings.wifi.p2p.WifiP2pPreferenceController;
import com.android.settings.wrapper.NetworkScoreManagerWrapper;
import com.android.settingslib.core.AbstractPreferenceController;
import java.util.ArrayList;

View File

@@ -1,36 +0,0 @@
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.wifi;
import android.net.ConnectivityManager;
/**
* Wrapper around {@link ConnectivityManager} to facilitate unit testing.
*/
public class ConnectivityManagerWrapper {
private final ConnectivityManager mConnectivityManager;
public ConnectivityManagerWrapper(ConnectivityManager connectivityManager) {
mConnectivityManager = connectivityManager;
}
/**
* {@link ConnectivityManager#stopTethering}
*/
public void stopTethering(int type) {
mConnectivityManager.stopTethering(type);
}
}

View File

@@ -21,7 +21,7 @@ import android.text.TextUtils;
import com.android.settings.R;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.network.NetworkScoreManagerWrapper;
import com.android.settings.wrapper.NetworkScoreManagerWrapper;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver;

View File

@@ -35,6 +35,7 @@ import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.core.instrumentation.MetricsFeatureProvider;
import com.android.settings.widget.SwitchWidgetController;
import com.android.settings.wrapper.ConnectivityManagerWrapper;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
import com.android.settingslib.WirelessUtils;

View File

@@ -65,6 +65,7 @@ import com.android.settings.search.SearchIndexableRaw;
import com.android.settings.widget.SummaryUpdater.OnSummaryChangeListener;
import com.android.settings.widget.SwitchBarController;
import com.android.settings.wifi.details.WifiNetworkDetailsFragment;
import com.android.settings.wrapper.WifiManagerWrapper;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.wifi.AccessPoint;
import com.android.settingslib.wifi.AccessPoint.AccessPointListener;

View File

@@ -29,7 +29,7 @@ import android.text.TextUtils;
import com.android.settings.R;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.network.NetworkScoreManagerWrapper;
import com.android.settings.wrapper.NetworkScoreManagerWrapper;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver;

View File

@@ -20,7 +20,6 @@ import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.net.wifi.WifiManager;
import android.nfc.FormatException;
import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
@@ -43,6 +42,7 @@ import android.widget.ProgressBar;
import android.widget.TextView;
import com.android.settings.R;
import com.android.settings.wrapper.WifiManagerWrapper;
import com.android.settingslib.wifi.AccessPoint;
import java.io.IOException;

View File

@@ -57,12 +57,12 @@ import com.android.settings.Utils;
import com.android.settings.applications.LayoutPreference;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.core.instrumentation.MetricsFeatureProvider;
import com.android.settings.vpn2.ConnectivityManagerWrapper;
import com.android.settings.widget.ActionButtonPreference;
import com.android.settings.widget.EntityHeaderController;
import com.android.settings.wifi.WifiDetailPreference;
import com.android.settings.wifi.WifiDialog;
import com.android.settings.wifi.WifiDialog.WifiDialogListener;
import com.android.settings.wrapper.ConnectivityManagerWrapper;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver;

View File

@@ -31,9 +31,9 @@ import com.android.internal.logging.nano.MetricsProto;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.vpn2.ConnectivityManagerWrapperImpl;
import com.android.settings.wifi.WifiConfigUiBase;
import com.android.settings.wifi.WifiDialog;
import com.android.settings.wrapper.ConnectivityManagerWrapper;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.wifi.AccessPoint;
import java.util.ArrayList;
@@ -117,7 +117,7 @@ public class WifiNetworkDetailsFragment extends DashboardFragment {
ConnectivityManager cm = context.getSystemService(ConnectivityManager.class);
mWifiDetailPreferenceController = WifiDetailPreferenceController.newInstance(
mAccessPoint,
new ConnectivityManagerWrapperImpl(cm),
new ConnectivityManagerWrapper(cm),
context,
this,
new Handler(Looper.getMainLooper()), // UI thread.

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.android.settings.applications;
package com.android.settings.wrapper;
import android.view.accessibility.AccessibilityManager;
@@ -23,7 +23,7 @@ import android.view.accessibility.AccessibilityManager;
* The interface exists so that we can use a thin wrapper around the AccessibilityManager in
* production code and a mock in tests.
*/
public class AccessibilityManagerWrapperImpl {
public class AccessibilityManagerWrapper {
/**
* Determines if the accessibility button within the system navigation area is supported.

View File

@@ -14,24 +14,34 @@
* limitations under the License.
*/
package com.android.settings.applications;
package com.android.settings.wrapper;
import android.accessibilityservice.AccessibilityServiceInfo;
import android.content.ComponentName;
/**
* This interface replicates a subset of the
* {@link android.accessibilityservice.AccessibilityServiceInfo}. The interface
* This class replicates a subset of the
* {@link android.accessibilityservice.AccessibilityServiceInfo}. The class
* exists so that we can use a thin wrapper around it in production code and a mock in tests.
* We cannot directly mock or shadow it, because some of the methods we rely on are newer than
* the API version supported by Robolectric.
*/
public interface AccessibilityServiceInfoWrapper {
public class AccessibilityServiceInfoWrapper {
private final AccessibilityServiceInfo mServiceInfo;
public AccessibilityServiceInfoWrapper(AccessibilityServiceInfo serviceInfo) {
mServiceInfo = serviceInfo;
}
/**
* Returns the real {@code AccessibilityServiceInfo} object.
*/
AccessibilityServiceInfo getAccessibilityServiceInfo();
public AccessibilityServiceInfo getAccessibilityServiceInfo() {
return mServiceInfo;
}
ComponentName getComponentName();
public ComponentName getComponentName() {
return mServiceInfo.getComponentName();
}
}

View File

@@ -14,19 +14,26 @@
* limitations under the License.
*/
package com.android.settings.applications;
package com.android.settings.wrapper;
import android.content.pm.ActivityInfo;
public class ActivityInfoWrapperImpl implements ActivityInfoWrapper {
/**
* This class replicates a subset of the android.content.pm.ActivityInfo. The class
* exists so that we can use a thin wrapper around the ActivityInfo in production code and a mock in
* tests.
*/
public class ActivityInfoWrapper {
private final ActivityInfo mInfo;
public ActivityInfoWrapperImpl(ActivityInfo info) {
public ActivityInfoWrapper(ActivityInfo info) {
mInfo = info;
}
@Override
/**
* Returns whether this activity supports picture-in-picture.
*/
public boolean supportsPictureInPicture() {
return mInfo.supportsPictureInPicture();
}

View File

@@ -14,28 +14,46 @@
* limitations under the License.
*/
package com.android.settings.applications;
package com.android.settings.wrapper;
import android.view.autofill.AutofillManager;
/**
* This interface replicates a subset of the android.view.autofill.AutofillManager (AFM). The
* interface exists so that we can use a thin wrapper around the AFM in production code and a mock
* This class replicates a subset of the android.view.autofill.AutofillManager (AFM). The
* class exists so that we can use a thin wrapper around the AFM in production code and a mock
* in tests. We cannot directly mock or shadow the AFM, because some of the methods we rely on are
* newer than the API version supported by Robolectric.
*/
public interface AutofillManagerWrapper {
public class AutofillManagerWrapper {
private final AutofillManager mAfm;
public AutofillManagerWrapper(AutofillManager afm) {
mAfm = afm;
}
/**
* Calls {@code AutofillManager.hasAutofillFeature()}.
*
* @see AutofillManager#hasAutofillFeature
*/
public boolean hasAutofillFeature();
public boolean hasAutofillFeature() {
if (mAfm == null) {
return false;
}
return mAfm.hasAutofillFeature();
}
/**
* Calls {@code AutofillManager.isAutofillSupported()}.
*
* @see AutofillManager#isAutofillSupported
*/
public boolean isAutofillSupported();
public boolean isAutofillSupported() {
if (mAfm == null) {
return false;
}
return mAfm.isAutofillSupported();
}
}

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.android.settings.vpn2;
package com.android.settings.wrapper;
import android.net.ConnectivityManager;
import android.net.ConnectivityManager.NetworkCallback;
@@ -24,31 +24,43 @@ import android.os.Handler;
import android.net.ProxyInfo;
/**
* This interface replicates a subset of the android.net.ConnectivityManager (CM). The interface
* This class replicates a subset of the android.net.ConnectivityManager (CM). The class
* exists so that we can use a thin wrapper around the CM in production code and a mock in tests.
* We cannot directly mock or shadow the CM, because some of the methods we rely on are marked as
* hidden and are thus invisible to Robolectric.
*/
public interface ConnectivityManagerWrapper {
public class ConnectivityManagerWrapper {
private final ConnectivityManager mCm;
public ConnectivityManagerWrapper(ConnectivityManager cm) {
mCm = cm;
}
/**
* Returns the real ConnectivityManager object wrapped by this wrapper.
*/
public ConnectivityManager getConnectivityManager();
public ConnectivityManager getConnectivityManager() {
return mCm;
}
/**
* Calls {@code ConnectivityManager.getAlwaysOnVpnPackageForUser()}.
*
* @see android.net.ConnectivityManager#getAlwaysOnVpnPackageForUser
*/
String getAlwaysOnVpnPackageForUser(int userId);
public String getAlwaysOnVpnPackageForUser(int userId) {
return mCm.getAlwaysOnVpnPackageForUser(userId);
}
/**
* Calls {@code ConnectivityManager.getGlobalProxy()}.
*
* @see android.net.ConnectivityManager#getGlobalProxy
*/
ProxyInfo getGlobalProxy();
public ProxyInfo getGlobalProxy() {
return mCm.getGlobalProxy();
}
/**
* Calls {@code ConnectivityManager.registerNetworkCallback()}.
@@ -60,7 +72,9 @@ public interface ConnectivityManagerWrapper {
* @see android.net.ConnectivityManager#registerNetworkCallback(NetworkRequest,NetworkCallback,Handler)
*/
public void registerNetworkCallback(NetworkRequest request, NetworkCallback callback,
Handler handler);
Handler handler) {
mCm.registerNetworkCallback(request, callback, handler);
}
/**
* Calls {@code ConnectivityManager.startCaptivePortalApp()}.
@@ -71,5 +85,14 @@ public interface ConnectivityManagerWrapper {
*
* @see android.net.ConnectivityManager#startCaptivePortalApp(Network)
*/
public void startCaptivePortalApp(Network network);
public void startCaptivePortalApp(Network network) {
mCm.startCaptivePortalApp(network);
}
/**
* {@link ConnectivityManager#stopTethering}
*/
public void stopTethering(int type) {
mCm.stopTethering(type);
}
}

View File

@@ -14,9 +14,10 @@
* limitations under the License.
*/
package com.android.settings.enterprise;
package com.android.settings.wrapper;
import android.annotation.NonNull;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Intent;
import android.os.UserHandle;
@@ -25,137 +26,178 @@ import android.support.annotation.Nullable;
import java.util.List;
/**
* This interface replicates a subset of the android.app.admin.DevicePolicyManager (DPM). The
* interface exists so that we can use a thin wrapper around the DPM in production code and a mock
* This class replicates a subset of the android.app.admin.DevicePolicyManager (DPM). The
* class exists so that we can use a thin wrapper around the DPM in production code and a mock
* in tests. We cannot directly mock or shadow the DPM, because some of the methods we rely on are
* newer than the API version supported by Robolectric.
*/
public interface DevicePolicyManagerWrapper {
public class DevicePolicyManagerWrapper {
private final DevicePolicyManager mDpm;
public DevicePolicyManagerWrapper(DevicePolicyManager dpm) {
mDpm = dpm;
}
/**
* Calls {@code DevicePolicyManager.getActiveAdminsAsUser()}.
*
* @see android.app.admin.DevicePolicyManager#getActiveAdminsAsUser
*/
public @Nullable List<ComponentName> getActiveAdminsAsUser(int userId);
public @Nullable List<ComponentName> getActiveAdminsAsUser(int userId) {
return mDpm.getActiveAdminsAsUser(userId);
}
/**
* Calls {@code DevicePolicyManager.getMaximumFailedPasswordsForWipe()}.
*
* @see android.app.admin.DevicePolicyManager#getMaximumFailedPasswordsForWipe
*/
int getMaximumFailedPasswordsForWipe(@Nullable ComponentName admin, int userHandle);
public int getMaximumFailedPasswordsForWipe(@Nullable ComponentName admin, int userHandle) {
return mDpm.getMaximumFailedPasswordsForWipe(admin, userHandle);
}
/**
* Calls {@code DevicePolicyManager.getDeviceOwnerComponentOnCallingUser()}.
*
* @see android.app.admin.DevicePolicyManager#getDeviceOwnerComponentOnCallingUser
*/
ComponentName getDeviceOwnerComponentOnCallingUser();
public ComponentName getDeviceOwnerComponentOnCallingUser() {
return mDpm.getDeviceOwnerComponentOnCallingUser();
}
/**
* Calls {@code DevicePolicyManager.getDeviceOwnerComponentOnAnyUser()}.
*
* @see android.app.admin.DevicePolicyManager#getDeviceOwnerComponentOnAnyUser
*/
ComponentName getDeviceOwnerComponentOnAnyUser();
public ComponentName getDeviceOwnerComponentOnAnyUser() {
return mDpm.getDeviceOwnerComponentOnAnyUser();
}
/**
* Calls {@code DevicePolicyManager.getProfileOwnerAsUser()}.
*
* @see android.app.admin.DevicePolicyManager#getProfileOwnerAsUser
*/
@Nullable ComponentName getProfileOwnerAsUser(final int userId);
public @Nullable ComponentName getProfileOwnerAsUser(final int userId) {
return mDpm.getProfileOwnerAsUser(userId);
}
/**
* Calls {@code DevicePolicyManager.getDeviceOwnerNameOnAnyUser()}.
*
* @see android.app.admin.DevicePolicyManager#getDeviceOwnerNameOnAnyUser
*/
CharSequence getDeviceOwnerOrganizationName();
public CharSequence getDeviceOwnerOrganizationName() {
return mDpm.getDeviceOwnerOrganizationName();
}
/**
* Calls {@code DevicePolicyManager.getPermissionGrantState()}.
*
* @see android.app.admin.DevicePolicyManager#getPermissionGrantState
*/
int getPermissionGrantState(@Nullable ComponentName admin, String packageName,
String permission);
public int getPermissionGrantState(@Nullable ComponentName admin, String packageName,
String permission) {
return mDpm.getPermissionGrantState(admin, packageName, permission);
}
/**
* Calls {@code DevicePolicyManager.isSecurityLoggingEnabled()}.
*
* @see android.app.admin.DevicePolicyManager#isSecurityLoggingEnabled
*/
boolean isSecurityLoggingEnabled(@Nullable ComponentName admin);
public boolean isSecurityLoggingEnabled(@Nullable ComponentName admin) {
return mDpm.isSecurityLoggingEnabled(admin);
}
/**
* Calls {@code DevicePolicyManager.isNetworkLoggingEnabled()}.
*
* @see android.app.admin.DevicePolicyManager#isNetworkLoggingEnabled
*/
boolean isNetworkLoggingEnabled(@Nullable ComponentName admin);
public boolean isNetworkLoggingEnabled(@Nullable ComponentName admin) {
return mDpm.isNetworkLoggingEnabled(admin);
}
/**
* Calls {@code DevicePolicyManager.getLastSecurityLogRetrievalTime()}.
*
* @see android.app.admin.DevicePolicyManager#getLastSecurityLogRetrievalTime
*/
long getLastSecurityLogRetrievalTime();
public long getLastSecurityLogRetrievalTime() {
return mDpm.getLastSecurityLogRetrievalTime();
}
/**
* Calls {@code DevicePolicyManager.getLastBugReportRequestTime()}.
*
* @see android.app.admin.DevicePolicyManager#getLastBugReportRequestTime
*/
long getLastBugReportRequestTime();
public long getLastBugReportRequestTime() {
return mDpm.getLastBugReportRequestTime();
}
/**
* Calls {@code DevicePolicyManager.getLastNetworkLogRetrievalTime()}.
*
* @see android.app.admin.DevicePolicyManager#getLastNetworkLogRetrievalTime
*/
long getLastNetworkLogRetrievalTime();
public long getLastNetworkLogRetrievalTime() {
return mDpm.getLastNetworkLogRetrievalTime();
}
/**
* Calls {@code DevicePolicyManager.isCurrentInputMethodSetByOwner()}.
*
* @see android.app.admin.DevicePolicyManager#isCurrentInputMethodSetByOwner
*/
boolean isCurrentInputMethodSetByOwner();
public boolean isCurrentInputMethodSetByOwner() {
return mDpm.isCurrentInputMethodSetByOwner();
}
/**
* Calls {@code DevicePolicyManager.getOwnerInstalledCaCerts()}.
*
* @see android.app.admin.DevicePolicyManager#getOwnerInstalledCaCerts
*/
List<String> getOwnerInstalledCaCerts(@NonNull UserHandle user);
public List<String> getOwnerInstalledCaCerts(@NonNull UserHandle user) {
return mDpm.getOwnerInstalledCaCerts(user);
}
/**
* Calls {@code DevicePolicyManager.isDeviceOwnerAppOnAnyUser()}.
*
* @see android.app.admin.DevicePolicyManager#isDeviceOwnerAppOnAnyUser
*/
boolean isDeviceOwnerAppOnAnyUser(String packageName);
public boolean isDeviceOwnerAppOnAnyUser(String packageName) {
return mDpm.isDeviceOwnerAppOnAnyUser(packageName);
}
/**
* Calls {@code DevicePolicyManager.packageHasActiveAdmins()}.
*
* @see android.app.admin.DevicePolicyManager#packageHasActiveAdmins
*/
boolean packageHasActiveAdmins(String packageName);
public boolean packageHasActiveAdmins(String packageName) {
return mDpm.packageHasActiveAdmins(packageName);
}
/**
* Calls {@code DevicePolicyManager.isUninstallInQueue()}.
*
* @see android.app.admin.DevicePolicyManager#isUninstallInQueue
*/
boolean isUninstallInQueue(String packageName);
public boolean isUninstallInQueue(String packageName) {
return mDpm.isUninstallInQueue(packageName);
}
/**
* Calls {@code DevicePolicyManager.createAdminSupportIntent()}.
*
* @see android.app.admin.DevicePolicyManager#createAdminSupportIntent
*/
Intent createAdminSupportIntent(String restriction);
public Intent createAdminSupportIntent(@NonNull String restriction) {
return mDpm.createAdminSupportIntent(restriction);
}
}

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.android.settings.password;
package com.android.settings.wrapper;
import android.annotation.NonNull;
import android.hardware.fingerprint.FingerprintManager;
@@ -24,10 +24,14 @@ import android.os.CancellationSignal;
import com.android.internal.util.Preconditions;
/**
* Wrapper of {@link FingerprintManager}. Workaround for roboelectic testing. See
* {@link IFingerprintManager} for details.
* Wrapper of {@link FingerprintManager}. Workaround for robolectic testing.
*
* This is the workaround to allow us test {@link SetNewPasswordController} which uses a new hidden
* API {@link android.hardware.fingerprint.FingerprintManager#hasEnrolledFingerprints(int)} that
* robolectric does not support yet. Having robolectic to support latest platform API is tracked
* in b/30995831.
*/
public class FingerprintManagerWrapper implements IFingerprintManager {
public class FingerprintManagerWrapper {
private @NonNull FingerprintManager mFingerprintManager;
public FingerprintManagerWrapper(@NonNull FingerprintManager fingerprintManager) {
@@ -35,27 +39,22 @@ public class FingerprintManagerWrapper implements IFingerprintManager {
mFingerprintManager = fingerprintManager;
}
@Override
public boolean isHardwareDetected() {
return mFingerprintManager.isHardwareDetected();
}
@Override
public boolean hasEnrolledFingerprints(int userId) {
return mFingerprintManager.hasEnrolledFingerprints(userId);
}
@Override
public long preEnroll() {
return mFingerprintManager.preEnroll();
}
@Override
public void setActiveUser(int userId) {
mFingerprintManager.setActiveUser(userId);
}
@Override
public void enroll(
byte[] token,
CancellationSignal cancel,

View File

@@ -14,62 +14,84 @@
* limitations under the License.
*/
package com.android.settings.applications;
package com.android.settings.wrapper;
import android.content.Intent;
import android.content.pm.IPackageManager;
import android.content.pm.PackageInfo;
import android.content.pm.ParceledListSlice;
import android.content.pm.ResolveInfo;
import android.os.RemoteException;
/**
* This interface replicates a subset of the android.content.pm.IPackageManager (PMS). The interface
* This class replicates a subset of the android.content.pm.IPackageManager (PMS). The class
* exists so that we can use a thin wrapper around the PMS in production code and a mock in tests.
* We cannot directly mock or shadow the PMS, because some of the methods we rely on are newer than
* the API version supported by Robolectric.
*/
public interface IPackageManagerWrapper {
public class IPackageManagerWrapper {
private final IPackageManager mPms;
public IPackageManagerWrapper(IPackageManager pms) {
mPms = pms;
}
/**
* Calls {@code IPackageManager.checkUidPermission()}.
*
* @see android.content.pm.IPackageManager#checkUidPermission
*/
int checkUidPermission(String permName, int uid) throws RemoteException;
public int checkUidPermission(String permName, int uid) throws RemoteException {
return mPms.checkUidPermission(permName, uid);
}
/**
* Calls {@code IPackageManager.findPersistentPreferredActivity()}.
*
* @see android.content.pm.IPackageManager#findPersistentPreferredActivity
*/
ResolveInfo findPersistentPreferredActivity(Intent intent, int userId) throws RemoteException;
public ResolveInfo findPersistentPreferredActivity(Intent intent, int userId)
throws RemoteException {
return mPms.findPersistentPreferredActivity(intent, userId);
}
/**
* Calls {@code IPackageManager.getPackageInfo()}.
*
* @see android.content.pm.IPackageManager#getPackageInfo
*/
PackageInfo getPackageInfo(String packageName, int flags, int userId) throws RemoteException;
public PackageInfo getPackageInfo(String packageName, int flags, int userId)
throws RemoteException {
return mPms.getPackageInfo(packageName, flags, userId);
}
/**
* Calls {@code IPackageManager.getAppOpPermissionPackages()}.
*
* @see android.content.pm.IPackageManager#getAppOpPermissionPackages
*/
String[] getAppOpPermissionPackages(String permissionName) throws RemoteException;
public String[] getAppOpPermissionPackages(String permissionName) throws RemoteException {
return mPms.getAppOpPermissionPackages(permissionName);
}
/**
* Calls {@code IPackageManager.isPackageAvailable()}.
*
* @see android.content.pm.IPackageManager#isPackageAvailable
*/
boolean isPackageAvailable(String packageName, int userId) throws RemoteException;
public boolean isPackageAvailable(String packageName, int userId) throws RemoteException {
return mPms.isPackageAvailable(packageName, userId);
}
/**
* Calls {@code IPackageManager.getPackagesHoldingPermissions()}.
*
* @see android.content.pm.IPackageManager#getPackagesHoldingPermissions
*/
ParceledListSlice<PackageInfo> getPackagesHoldingPermissions(
String[] permissions, int flags, int userId) throws RemoteException;
public ParceledListSlice<PackageInfo> getPackagesHoldingPermissions(
String[] permissions, int flags, int userId) throws RemoteException {
return mPms.getPackagesHoldingPermissions(permissions, flags, userId);
}
}

View File

@@ -14,22 +14,29 @@
* limitations under the License.
*/
package com.android.settings.fuelgauge.anomaly;
package com.android.settings.wrapper;
import android.util.KeyValueListParser;
/**
* This interface replicates a subset of the {@link KeyValueListParser}. The interface
* This class replicates a subset of the {@link KeyValueListParser}. The class
* exists so that we can use a thin wrapper around the PM in production code and a mock in tests.
* We cannot directly mock or shadow the {@link KeyValueListParser}, because some of the methods
* we rely on are newer than the API version supported by Robolectric.
*/
public interface KeyValueListParserWrapper {
public class KeyValueListParserWrapper {
private KeyValueListParser mParser;
public KeyValueListParserWrapper(KeyValueListParser parser) {
mParser = parser;
}
/**
* Get real {@link KeyValueListParser}
*/
KeyValueListParser getKeyValueListParser();
public KeyValueListParser getKeyValueListParser() {
return mParser;
}
/**
* Resets the parser with a new string to parse. The string is expected to be in the following
@@ -41,7 +48,9 @@ public interface KeyValueListParserWrapper {
* @param str the string to parse.
* @throws IllegalArgumentException if the string is malformed.
*/
void setString(String str) throws IllegalArgumentException;
public void setString(String str) throws IllegalArgumentException {
mParser.setString(str);
}
/**
* Get the value for key as a boolean.
@@ -49,7 +58,9 @@ public interface KeyValueListParserWrapper {
* @param defaultValue The value to return if the key was not found.
* @return the string value associated with the key.
*/
boolean getBoolean(String key, boolean defaultValue);
public boolean getBoolean(String key, boolean defaultValue) {
return mParser.getBoolean(key, defaultValue);
}
/**
* Get the value for key as a long.
@@ -58,5 +69,7 @@ public interface KeyValueListParserWrapper {
* long.
* @return the long value associated with the key.
*/
long getLong(String key, long defaultValue);
public long getLong(String key, long defaultValue) {
return mParser.getLong(key, defaultValue);
}
}

View File

@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.network;
package com.android.settings.wrapper;
import android.annotation.Nullable;
import android.net.NetworkScoreManager;

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.android.settings.display;
package com.android.settings.wrapper;
import android.os.PowerManager;

View File

@@ -1,4 +1,4 @@
package com.android.settings.network;
package com.android.settings.wrapper;
import android.content.Context;
import com.android.settingslib.RestrictedLockUtils;

View File

@@ -14,26 +14,30 @@
* limitations under the License.
*/
package com.android.settings.applications;
package com.android.settings.wrapper;
import android.content.pm.UserInfo;
import android.os.UserManager;
import java.util.List;
public class UserManagerWrapperImpl implements UserManagerWrapper {
/**
* This class replicates a subset of the android.os.UserManager. The class
* exists so that we can use a thin wrapper around the UserManager in production code and a mock in
* tests. We cannot directly mock or shadow the UserManager, because some of the methods we rely on
* are newer than the API version supported by Robolectric or are hidden.
*/
public class UserManagerWrapper {
private UserManager mUserManager;
public UserManagerWrapperImpl(UserManager userManager) {
public UserManagerWrapper(UserManager userManager) {
mUserManager = userManager;
}
@Override
public UserInfo getPrimaryUser() {
return mUserManager.getPrimaryUser();
}
@Override
public List<UserInfo> getUsers() {
return mUserManager.getUsers();
}

View File

@@ -12,20 +12,16 @@
* permissions and limitations under the License.
*/
package com.android.settings.webview;
package com.android.settings.wrapper;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.UserInfo;
import android.webkit.UserPackage;
import java.util.List;
/**
* Wrapper class around android.webkit.UserPackage - to be able to use UserPackage in Robolectric
* tests (such tests currently don't support mocking hidden classes).
*/
interface UserPackageWrapper {
public interface UserPackageWrapper {
UserInfo getUserInfo();
PackageInfo getPackageInfo();
boolean isEnabledPackage();

View File

@@ -12,23 +12,19 @@
* permissions and limitations under the License.
*/
package com.android.settings.webview;
package com.android.settings.wrapper;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.UserInfo;
import android.webkit.UserPackage;
import java.util.ArrayList;
import java.util.List;
/**
* Default implementation of UserPackageWrapper.
*/
class UserPackageWrapperImpl implements UserPackageWrapper {
public class UserPackageWrapperImpl implements UserPackageWrapper {
private final UserPackage mUserPackage;
UserPackageWrapperImpl(UserPackage userPackage) {
public UserPackageWrapperImpl(UserPackage userPackage) {
mUserPackage = userPackage;
}

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.android.settings.dashboard.suggestions;
package com.android.settings.wrapper;
import android.app.WallpaperManager;
import android.content.Context;

View File

@@ -1,4 +1,4 @@
package com.android.settings.wifi;
package com.android.settings.wrapper;
import android.net.wifi.WifiManager;

View File

@@ -26,8 +26,8 @@ import android.text.SpannableStringBuilder;
import android.text.format.DateUtils;
import android.text.style.TtsSpan;
import com.android.settings.enterprise.DevicePolicyManagerWrapper;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.wrapper.DevicePolicyManagerWrapper;
import org.junit.Before;
import org.junit.Test;

View File

@@ -23,8 +23,8 @@ import android.os.UserManager;
import android.test.mock.MockContentResolver;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
import com.android.settings.applications.PackageManagerWrapper;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settingslib.wrapper.PackageManagerWrapper;
import org.junit.Before;
import org.junit.Test;
@@ -40,7 +40,6 @@ import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
public class ShortcutServicePickerFragmentTest {

View File

@@ -46,10 +46,10 @@ import android.widget.Button;
import com.android.settings.R;
import com.android.settings.TestConfig;
import com.android.settings.applications.LayoutPreference;
import com.android.settings.enterprise.DevicePolicyManagerWrapper;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.ShadowAccountManager;
import com.android.settings.testutils.shadow.ShadowContentResolver;
import com.android.settings.wrapper.DevicePolicyManagerWrapper;
import org.junit.Before;
import org.junit.Test;

View File

@@ -27,6 +27,7 @@ import android.os.RemoteException;
import android.os.UserManager;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
import com.android.settings.wrapper.IPackageManagerWrapper;
import com.android.settingslib.applications.ApplicationsState.AppEntry;
import org.junit.Before;
import org.junit.Test;

View File

@@ -28,7 +28,9 @@ import android.os.UserManager;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
import com.android.settings.enterprise.DevicePolicyManagerWrapper;
import com.android.settings.wrapper.DevicePolicyManagerWrapper;
import com.android.settings.wrapper.IPackageManagerWrapper;
import com.android.settingslib.wrapper.PackageManagerWrapper;
import org.junit.Before;
import org.junit.Test;

View File

@@ -25,7 +25,9 @@ import android.os.UserManager;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
import com.android.settings.enterprise.DevicePolicyManagerWrapper;
import com.android.settings.wrapper.DevicePolicyManagerWrapper;
import com.android.settings.wrapper.IPackageManagerWrapper;
import com.android.settingslib.wrapper.PackageManagerWrapper;
import org.junit.Before;
import org.junit.Test;

View File

@@ -30,9 +30,11 @@ import android.os.UserManager;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
import com.android.settings.enterprise.DevicePolicyManagerWrapper;
import com.android.settings.testutils.ApplicationTestUtils;
import com.android.settings.testutils.shadow.ShadowUserManager;
import com.android.settings.wrapper.DevicePolicyManagerWrapper;
import com.android.settings.wrapper.IPackageManagerWrapper;
import com.android.settingslib.wrapper.PackageManagerWrapper;
import org.junit.Before;
import org.junit.Test;

View File

@@ -41,6 +41,7 @@ import android.os.UserManager;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
import com.android.settings.testutils.shadow.ShadowUserManager;
import com.android.settingslib.wrapper.PackageManagerWrapper;
import org.junit.Before;
import org.junit.Test;

View File

@@ -16,7 +16,6 @@
package com.android.settings.applications;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.nullable;
import static org.mockito.Matchers.anyDouble;
@@ -33,7 +32,6 @@ import android.app.AlertDialog;
import android.app.AppOpsManager;
import android.app.Fragment;
import android.app.LoaderManager;
import android.app.admin.DevicePolicyManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
@@ -55,11 +53,11 @@ import com.android.settings.SettingsActivity;
import com.android.settings.TestConfig;
import com.android.settings.applications.instantapps.InstantAppButtonsController;
import com.android.settings.applications.instantapps.InstantAppButtonsController.ShowDialogDelegate;
import com.android.settings.enterprise.DevicePolicyManagerWrapper;
import com.android.settings.fuelgauge.BatteryUtils;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.widget.ActionButtonPreferenceTest;
import com.android.settings.wrapper.DevicePolicyManagerWrapper;
import com.android.settingslib.Utils;
import com.android.settingslib.applications.AppUtils;
import com.android.settingslib.applications.ApplicationsState.AppEntry;

View File

@@ -26,6 +26,7 @@ import android.os.UserManager;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
import com.android.settingslib.wrapper.PackageManagerWrapper;
import org.junit.Before;
import org.junit.Test;

View File

@@ -27,6 +27,7 @@ import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
import com.android.settings.dashboard.SummaryLoader;
import com.android.settings.notification.NotificationBackend;
import com.android.settingslib.wrapper.PackageManagerWrapper;
import java.util.List;
import java.util.ArrayList;

View File

@@ -28,6 +28,7 @@ import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.wrapper.ActivityInfoWrapper;
import org.junit.Before;
import org.junit.Test;
@@ -104,11 +105,12 @@ public class PictureInPictureDetailsTest {
activities);
}
private class MockActivityInfo implements ActivityInfoWrapper {
private class MockActivityInfo extends ActivityInfoWrapper {
private boolean mSupportsPictureInPicture;
public MockActivityInfo(boolean supportsPictureInPicture) {
super(null);
mSupportsPictureInPicture = supportsPictureInPicture;
}

View File

@@ -16,7 +16,6 @@
package com.android.settings.applications.defaultapps;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -27,7 +26,7 @@ import android.content.pm.PackageManager;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
import com.android.settings.applications.PackageManagerWrapper;
import com.android.settingslib.wrapper.PackageManagerWrapper;
import org.junit.Before;
import org.junit.Test;

View File

@@ -29,8 +29,8 @@ import android.os.UserManager;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
import com.android.settings.applications.PackageManagerWrapper;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settingslib.wrapper.PackageManagerWrapper;
import org.junit.Before;
import org.junit.Test;

View File

@@ -16,7 +16,6 @@
package com.android.settings.applications.defaultapps;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.UserManager;
@@ -27,8 +26,8 @@ import android.view.autofill.AutofillManager;
import com.android.settings.R;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
import com.android.settings.applications.AutofillManagerWrapper;
import com.android.settings.applications.PackageManagerWrapper;
import com.android.settings.wrapper.AutofillManagerWrapper;
import com.android.settingslib.wrapper.PackageManagerWrapper;
import org.junit.Before;
import org.junit.Test;

Some files were not shown because too many files have changed in this diff Show More