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.ArrayUtils;
import com.android.internal.util.UserIcons; import com.android.internal.util.UserIcons;
import com.android.internal.widget.LockPatternUtils; import com.android.internal.widget.LockPatternUtils;
import com.android.settings.enterprise.DevicePolicyManagerWrapper; import com.android.settings.wrapper.FingerprintManagerWrapper;
import com.android.settings.password.FingerprintManagerWrapper; import com.android.settings.wrapper.DevicePolicyManagerWrapper;
import com.android.settings.password.IFingerprintManager;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; 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); FingerprintManager fingerprintManager = getFingerprintManagerOrNull(context);
if (fingerprintManager != null) { if (fingerprintManager != null) {
return new FingerprintManagerWrapper(fingerprintManager); 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.applications.LayoutPreference;
import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment; import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.android.settings.enterprise.DevicePolicyManagerWrapper; import com.android.settings.wrapper.DevicePolicyManagerWrapper;
import com.android.settings.enterprise.DevicePolicyManagerWrapperImpl;
import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.AbstractPreferenceController;
import java.io.IOException; import java.io.IOException;
@@ -60,7 +59,7 @@ public class RemoveAccountPreferenceController extends AbstractPreferenceControl
private DevicePolicyManagerWrapper mDpm; private DevicePolicyManagerWrapper mDpm;
public RemoveAccountPreferenceController(Context context, Fragment parent) { public RemoveAccountPreferenceController(Context context, Fragment parent) {
this(context, parent, new DevicePolicyManagerWrapperImpl( this(context, parent, new DevicePolicyManagerWrapper(
(DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE))); (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.UserHandle;
import android.os.UserManager; import android.os.UserManager;
import com.android.settingslib.wrapper.PackageManagerWrapper;
import java.util.List; import java.util.List;
public abstract class AppCounter extends AsyncTask<Void, Void, Integer> { 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.SettingsPreferenceFragment;
import com.android.settings.Utils; import com.android.settings.Utils;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment; 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.overlay.FeatureFactory;
import com.android.settings.wrapper.DevicePolicyManagerWrapper;
import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.applications.ApplicationsState; import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.applications.ApplicationsState.AppEntry; import com.android.settingslib.applications.ApplicationsState.AppEntry;
@@ -94,7 +93,7 @@ public abstract class AppInfoBase extends SettingsPreferenceFragment
.getApplicationFeatureProvider(activity); .getApplicationFeatureProvider(activity);
mState = ApplicationsState.getInstance(activity.getApplication()); mState = ApplicationsState.getInstance(activity.getApplication());
mSession = mState.newSession(this); mSession = mState.newSession(this);
mDpm = new DevicePolicyManagerWrapperImpl( mDpm = new DevicePolicyManagerWrapper(
(DevicePolicyManager) activity.getSystemService(Context.DEVICE_POLICY_SERVICE)); (DevicePolicyManager) activity.getSystemService(Context.DEVICE_POLICY_SERVICE));
mUserManager = (UserManager) activity.getSystemService(Context.USER_SERVICE); mUserManager = (UserManager) activity.getSystemService(Context.USER_SERVICE);
mPm = activity.getPackageManager(); mPm = activity.getPackageManager();

View File

@@ -23,6 +23,8 @@ import android.os.AsyncTask;
import android.os.UserHandle; import android.os.UserHandle;
import android.os.UserManager; import android.os.UserManager;
import com.android.settingslib.wrapper.PackageManagerWrapper;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; 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;
import com.android.settingslib.applications.ApplicationsState.AppEntry; import com.android.settingslib.applications.ApplicationsState.AppEntry;
import com.android.settings.wrapper.IPackageManagerWrapper;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
@@ -57,7 +58,7 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge {
public AppStateAppOpsBridge(Context context, ApplicationsState appState, Callback callback, public AppStateAppOpsBridge(Context context, ApplicationsState appState, Callback callback,
int appOpsOpCode, String[] permissions) { int appOpsOpCode, String[] permissions) {
this(context, appState, callback, appOpsOpCode, permissions, this(context, appState, callback, appOpsOpCode, permissions,
new IPackageManagerWrapperImpl(AppGlobals.getPackageManager())); new IPackageManagerWrapper(AppGlobals.getPackageManager()));
} }
@VisibleForTesting(otherwise = VisibleForTesting.NONE) @VisibleForTesting(otherwise = VisibleForTesting.NONE)

View File

@@ -22,7 +22,9 @@ import android.os.Build;
import android.os.RemoteException; import android.os.RemoteException;
import android.os.UserHandle; 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 * 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.content.pm.ApplicationInfo;
import android.os.UserManager; 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 * 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 android.view.View;
import com.android.settings.applications.instantapps.InstantAppButtonsController; 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.ArrayList;
import java.util.List; 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.content.pm.PackageManager;
import android.os.UserHandle; import android.os.UserHandle;
import com.android.settingslib.wrapper.PackageManagerWrapper;
import java.util.List; import java.util.List;
public abstract class InstalledAppCounter extends AppCounter { public abstract class InstalledAppCounter extends AppCounter {

View File

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

View File

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

View File

@@ -21,6 +21,7 @@ import android.content.pm.ApplicationInfo;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.dashboard.SummaryLoader; import com.android.settings.dashboard.SummaryLoader;
import com.android.settings.notification.NotificationBackend; import com.android.settings.notification.NotificationBackend;
import com.android.settingslib.wrapper.PackageManagerWrapper;
/** /**
* Extension of ManageApplications with no changes other than having its own * Extension of ManageApplications with no changes other than having its own
@@ -39,7 +40,7 @@ public class NotificationApps extends ManageApplications {
mContext = context; mContext = context;
mLoader = loader; mLoader = loader;
mNotificationBackend = new NotificationBackend(); mNotificationBackend = new NotificationBackend();
mPackageManager = new PackageManagerWrapperImpl(mContext.getPackageManager()); mPackageManager = new PackageManagerWrapper(mContext.getPackageManager());
} }
@Override @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.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.notification.EmptyTextSettings; import com.android.settings.notification.EmptyTextSettings;
import com.android.settings.wrapper.ActivityInfoWrapper;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
@@ -63,7 +64,7 @@ public class PictureInPictureSettings extends EmptyTextSettings {
if (activities != null) { if (activities != null) {
wrappedActivities = new ActivityInfoWrapper[activities.length]; wrappedActivities = new ActivityInfoWrapper[activities.length];
for (int i = 0; i < activities.length; i++) { for (int i = 0; i < activities.length; i++) {
wrappedActivities[i] = new ActivityInfoWrapperImpl(activities[i]); wrappedActivities[i] = new ActivityInfoWrapper(activities[i]);
} }
} }
return checkPackageHasPictureInPictureActivities(packageName, wrappedActivities); return checkPackageHasPictureInPictureActivities(packageName, wrappedActivities);

View File

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

View File

@@ -26,8 +26,8 @@ import android.graphics.drawable.Drawable;
import android.os.RemoteException; import android.os.RemoteException;
import android.os.UserHandle; import android.os.UserHandle;
import com.android.settings.applications.PackageManagerWrapper;
import com.android.settings.widget.RadioButtonPickerFragment; import com.android.settings.widget.RadioButtonPickerFragment;
import com.android.settingslib.wrapper.PackageManagerWrapper;
/** /**
* Data model representing an app in DefaultAppPicker UI. * 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.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R; 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.core.instrumentation.InstrumentedDialogFragment;
import com.android.settings.widget.RadioButtonPickerFragment; import com.android.settings.widget.RadioButtonPickerFragment;
import com.android.settings.widget.RadioButtonPreference; 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. * 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 @Override
public void onAttach(Context context) { public void onAttach(Context context) {
super.onAttach(context); super.onAttach(context);
mPm = new PackageManagerWrapperImpl(context.getPackageManager()); mPm = new PackageManagerWrapper(context.getPackageManager());
} }
@Override @Override

View File

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

View File

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

View File

@@ -24,7 +24,7 @@ import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo; import android.content.pm.ResolveInfo;
import com.android.settings.applications.PackageManagerWrapper; import com.android.settingslib.wrapper.PackageManagerWrapper;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; 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.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.applications.AppStoreUtil; 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.settings.overlay.FeatureFactory;
import com.android.settingslib.wrapper.PackageManagerWrapper;
/** Encapsulates a container for buttons relevant to instant apps */ /** Encapsulates a container for buttons relevant to instant apps */
public class InstantAppButtonsController implements DialogInterface.OnClickListener { public class InstantAppButtonsController implements DialogInterface.OnClickListener {
@@ -62,7 +61,7 @@ public class InstantAppButtonsController implements DialogInterface.OnClickListe
mFragment = fragment; mFragment = fragment;
mView = view; mView = view;
mShowDialogDelegate = showDialogDelegate; mShowDialogDelegate = showDialogDelegate;
mPackageManagerWrapper = new PackageManagerWrapperImpl(context.getPackageManager()); mPackageManagerWrapper = new PackageManagerWrapper(context.getPackageManager());
} }
public InstantAppButtonsController setPackageName(String packageName) { 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.fingerprint.FingerprintSuggestionActivity;
import com.android.settings.overlay.FeatureFactory; import com.android.settings.overlay.FeatureFactory;
import com.android.settings.wallpaper.WallpaperSuggestionActivity; import com.android.settings.wallpaper.WallpaperSuggestionActivity;
import com.android.settings.wrapper.WallpaperManagerWrapper;
import com.android.settingslib.drawer.Tile; 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.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.applications.AppInfoBase; 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.settings.widget.EntityHeaderController;
import com.android.settingslib.AppItem; import com.android.settingslib.AppItem;
import com.android.settingslib.net.ChartData; import com.android.settingslib.net.ChartData;
import com.android.settingslib.net.ChartDataLoader; import com.android.settingslib.net.ChartDataLoader;
import com.android.settingslib.net.UidDetail; import com.android.settingslib.net.UidDetail;
import com.android.settingslib.net.UidDetailProvider; import com.android.settingslib.net.UidDetailProvider;
import com.android.settingslib.wrapper.PackageManagerWrapper;
public class AppDataUsage extends DataUsageBase implements Preference.OnPreferenceChangeListener, public class AppDataUsage extends DataUsageBase implements Preference.OnPreferenceChangeListener,
DataSaverBackend.Listener { DataSaverBackend.Listener {
@@ -104,7 +103,7 @@ public class AppDataUsage extends DataUsageBase implements Preference.OnPreferen
@Override @Override
public void onCreate(Bundle icicle) { public void onCreate(Bundle icicle) {
super.onCreate(icicle); super.onCreate(icicle);
mPackageManagerWrapper = new PackageManagerWrapperImpl(getPackageManager()); mPackageManagerWrapper = new PackageManagerWrapper(getPackageManager());
final Bundle args = getArguments(); final Bundle args = getArguments();
try { try {

View File

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

View File

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

View File

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

View File

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

View File

@@ -30,10 +30,10 @@ import android.util.ArraySet;
import android.util.Log; import android.util.Log;
import android.util.SparseArray; 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.utils.AsyncLoader;
import com.android.settings.wrapper.UserManagerWrapper;
import com.android.settingslib.applications.StorageStatsSource; import com.android.settingslib.applications.StorageStatsSource;
import com.android.settingslib.wrapper.PackageManagerWrapper;
import java.io.IOException; import java.io.IOException;
import java.util.Collections; 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.logging.nano.MetricsProto;
import com.android.internal.util.Preconditions; import com.android.internal.util.Preconditions;
import com.android.settings.Utils; import com.android.settings.Utils;
import com.android.settings.applications.UserManagerWrapper;
import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.deviceinfo.StorageItemPreference; import com.android.settings.deviceinfo.StorageItemPreference;
import com.android.settings.deviceinfo.StorageProfileFragment; import com.android.settings.deviceinfo.StorageProfileFragment;
import com.android.settings.wrapper.UserManagerWrapper;
import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.drawer.SettingsDrawerActivity; import com.android.settingslib.drawer.SettingsDrawerActivity;

View File

@@ -31,6 +31,7 @@ import android.support.v7.preference.PreferenceScreen;
import android.util.Log; import android.util.Log;
import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.wrapper.PowerManagerWrapper;
import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver; 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 android.view.View;
import com.android.settings.R; 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.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.Date;
import java.util.List; 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.Utils;
import com.android.settings.core.InstrumentedFragment; import com.android.settings.core.InstrumentedFragment;
import com.android.settings.password.ChooseLockSettingsHelper; import com.android.settings.password.ChooseLockSettingsHelper;
import com.android.settings.wrapper.FingerprintManagerWrapper;
import com.android.settings.password.IFingerprintManager;
import java.util.ArrayList; import java.util.ArrayList;
@@ -48,7 +47,7 @@ public class FingerprintEnrollSidecar extends InstrumentedFragment {
private byte[] mToken; private byte[] mToken;
private boolean mDone; private boolean mDone;
private int mUserId; private int mUserId;
private IFingerprintManager mFingerprintManager; private FingerprintManagerWrapper mFingerprintManager;
private ArrayList<QueuedEvent> mQueuedEvents; private ArrayList<QueuedEvent> mQueuedEvents;
private abstract class QueuedEvent { private abstract class QueuedEvent {

View File

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

View File

@@ -50,9 +50,9 @@ import com.android.settings.SettingsActivity;
import com.android.settings.Utils; import com.android.settings.Utils;
import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.core.instrumentation.MetricsFeatureProvider; import com.android.settings.core.instrumentation.MetricsFeatureProvider;
import com.android.settings.enterprise.DevicePolicyManagerWrapper;
import com.android.settings.overlay.FeatureFactory; import com.android.settings.overlay.FeatureFactory;
import com.android.settings.widget.ActionButtonPreference; import com.android.settings.widget.ActionButtonPreference;
import com.android.settings.wrapper.DevicePolicyManagerWrapper;
import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.applications.AppUtils; import com.android.settingslib.applications.AppUtils;
import com.android.settingslib.applications.ApplicationsState; 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.Utils;
import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment; import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.android.settings.enterprise.DevicePolicyManagerWrapper; import com.android.settings.wrapper.DevicePolicyManagerWrapper;
import com.android.settings.enterprise.DevicePolicyManagerWrapperImpl;
import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.AbstractPreferenceController;
/** /**
@@ -71,7 +70,7 @@ public class BackgroundActivityPreferenceController extends AbstractPreferenceCo
mPowerWhitelistBackend = backend; mPowerWhitelistBackend = backend;
mPackageManager = context.getPackageManager(); mPackageManager = context.getPackageManager();
mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE); mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
mDpm = new DevicePolicyManagerWrapperImpl( mDpm = new DevicePolicyManagerWrapper(
(DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE)); (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE));
mAppOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE); mAppOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
mUid = uid; mUid = uid;

View File

@@ -23,6 +23,8 @@ import android.text.format.DateUtils;
import android.util.KeyValueListParser; import android.util.KeyValueListParser;
import android.util.Log; import android.util.Log;
import com.android.settings.wrapper.KeyValueListParserWrapper;
/** /**
* Class to store the policy for anomaly detection, which comes from * Class to store the policy for anomaly detection, which comes from
* {@link android.provider.Settings.Global} * {@link android.provider.Settings.Global}
@@ -104,7 +106,7 @@ public class AnomalyDetectionPolicy {
private final KeyValueListParserWrapper mParserWrapper; private final KeyValueListParserWrapper mParserWrapper;
public AnomalyDetectionPolicy(Context context) { public AnomalyDetectionPolicy(Context context) {
this(context, new KeyValueListParserWrapperImpl(new KeyValueListParser(','))); this(context, new KeyValueListParserWrapper(new KeyValueListParser(',')));
} }
@VisibleForTesting @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.Utils;
import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.wrapper.RestrictedLockUtilsWrapper;
import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnPause; 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.R;
import com.android.settings.core.InstrumentedPreferenceFragment; import com.android.settings.core.InstrumentedPreferenceFragment;
import com.android.settings.widget.RadioButtonPreference; import com.android.settings.widget.RadioButtonPreference;
import com.android.settings.wrapper.NetworkScoreManagerWrapper;
import java.util.List; 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.R;
import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.wrapper.NetworkScoreManagerWrapper;
import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.AbstractPreferenceController;
import java.util.List; 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.ApplicationFeatureProvider;
import com.android.settings.applications.ApplicationFeatureProviderImpl; 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.BluetoothFeatureProvider;
import com.android.settings.bluetooth.BluetoothFeatureProviderImpl; import com.android.settings.bluetooth.BluetoothFeatureProviderImpl;
import com.android.settings.connecteddevice.SmsMirroringFeatureProvider; 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.dashboard.suggestions.SuggestionFeatureProviderImpl;
import com.android.settings.datausage.DataPlanFeatureProvider; import com.android.settings.datausage.DataPlanFeatureProvider;
import com.android.settings.datausage.DataPlanFeatureProviderImpl; import com.android.settings.datausage.DataPlanFeatureProviderImpl;
import com.android.settings.enterprise.DevicePolicyManagerWrapperImpl;
import com.android.settings.enterprise.EnterprisePrivacyFeatureProvider; import com.android.settings.enterprise.EnterprisePrivacyFeatureProvider;
import com.android.settings.enterprise.EnterprisePrivacyFeatureProviderImpl; import com.android.settings.enterprise.EnterprisePrivacyFeatureProviderImpl;
import com.android.settings.fuelgauge.PowerUsageFeatureProvider; 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.security.SecurityFeatureProviderImpl;
import com.android.settings.users.UserFeatureProvider; import com.android.settings.users.UserFeatureProvider;
import com.android.settings.users.UserFeatureProviderImpl; 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. * {@link FeatureFactory} implementation for AOSP Settings.
@@ -109,9 +109,9 @@ public class FeatureFactoryImpl extends FeatureFactory {
public ApplicationFeatureProvider getApplicationFeatureProvider(Context context) { public ApplicationFeatureProvider getApplicationFeatureProvider(Context context) {
if (mApplicationFeatureProvider == null) { if (mApplicationFeatureProvider == null) {
mApplicationFeatureProvider = new ApplicationFeatureProviderImpl(context, mApplicationFeatureProvider = new ApplicationFeatureProviderImpl(context,
new PackageManagerWrapperImpl(context.getPackageManager()), new PackageManagerWrapper(context.getPackageManager()),
new IPackageManagerWrapperImpl(AppGlobals.getPackageManager()), new IPackageManagerWrapper(AppGlobals.getPackageManager()),
new DevicePolicyManagerWrapperImpl((DevicePolicyManager) context new DevicePolicyManagerWrapper((DevicePolicyManager) context
.getSystemService(Context.DEVICE_POLICY_SERVICE))); .getSystemService(Context.DEVICE_POLICY_SERVICE)));
} }
return mApplicationFeatureProvider; return mApplicationFeatureProvider;
@@ -129,11 +129,11 @@ public class FeatureFactoryImpl extends FeatureFactory {
public EnterprisePrivacyFeatureProvider getEnterprisePrivacyFeatureProvider(Context context) { public EnterprisePrivacyFeatureProvider getEnterprisePrivacyFeatureProvider(Context context) {
if (mEnterprisePrivacyFeatureProvider == null) { if (mEnterprisePrivacyFeatureProvider == null) {
mEnterprisePrivacyFeatureProvider = new EnterprisePrivacyFeatureProviderImpl(context, mEnterprisePrivacyFeatureProvider = new EnterprisePrivacyFeatureProviderImpl(context,
new DevicePolicyManagerWrapperImpl((DevicePolicyManager) context new DevicePolicyManagerWrapper((DevicePolicyManager) context
.getSystemService(Context.DEVICE_POLICY_SERVICE)), .getSystemService(Context.DEVICE_POLICY_SERVICE)),
new PackageManagerWrapperImpl(context.getPackageManager()), new PackageManagerWrapper(context.getPackageManager()),
UserManager.get(context), UserManager.get(context),
new ConnectivityManagerWrapperImpl((ConnectivityManager) context new ConnectivityManagerWrapper((ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE)), .getSystemService(Context.CONNECTIVITY_SERVICE)),
context.getResources()); 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.annotations.VisibleForTesting;
import com.android.internal.widget.LockPatternUtils; import com.android.internal.widget.LockPatternUtils;
import com.android.settings.Utils; import com.android.settings.Utils;
import com.android.settings.wrapper.FingerprintManagerWrapper;
/** /**
* Business logic for {@link SetNewPasswordActivity}. * Business logic for {@link SetNewPasswordActivity}.
@@ -56,7 +57,7 @@ final class SetNewPasswordController {
*/ */
private final int mTargetUserId; private final int mTargetUserId;
private final PackageManager mPackageManager; private final PackageManager mPackageManager;
@Nullable private final IFingerprintManager mFingerprintManager; @Nullable private final FingerprintManagerWrapper mFingerprintManager;
private final DevicePolicyManager mDevicePolicyManager; private final DevicePolicyManager mDevicePolicyManager;
private final Ui mUi; private final Ui mUi;
@@ -77,7 +78,7 @@ final class SetNewPasswordController {
} }
// Create a wrapper of FingerprintManager for testing, see IFingerPrintManager for details. // Create a wrapper of FingerprintManager for testing, see IFingerPrintManager for details.
final FingerprintManager fingerprintManager = Utils.getFingerprintManagerOrNull(context); final FingerprintManager fingerprintManager = Utils.getFingerprintManagerOrNull(context);
final IFingerprintManager fingerprintManagerWrapper = final FingerprintManagerWrapper fingerprintManagerWrapper =
fingerprintManager == null fingerprintManager == null
? null ? null
: new FingerprintManagerWrapper(fingerprintManager); : new FingerprintManagerWrapper(fingerprintManager);
@@ -91,7 +92,7 @@ final class SetNewPasswordController {
SetNewPasswordController( SetNewPasswordController(
int targetUserId, int targetUserId,
PackageManager packageManager, PackageManager packageManager,
IFingerprintManager fingerprintManager, FingerprintManagerWrapper fingerprintManager,
DevicePolicyManager devicePolicyManager, DevicePolicyManager devicePolicyManager,
Ui ui) { Ui ui) {
mTargetUserId = targetUserId; mTargetUserId = targetUserId;

View File

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

View File

@@ -21,9 +21,9 @@ import android.content.Context;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import com.android.settings.applications.PackageManagerWrapperImpl;
import com.android.settings.dashboard.SiteMapManager; import com.android.settings.dashboard.SiteMapManager;
import com.android.settings.overlay.FeatureFactory; import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.wrapper.PackageManagerWrapper;
/** /**
* FeatureProvider for the refactored search code. * FeatureProvider for the refactored search code.
@@ -50,7 +50,7 @@ public class SearchFeatureProviderImpl implements SearchFeatureProvider {
@Override @Override
public InstalledAppResultLoader getInstalledAppSearchLoader(Context context, String query) { public InstalledAppResultLoader getInstalledAppSearchLoader(Context context, String query) {
return new InstalledAppResultLoader( return new InstalledAppResultLoader(
context, new PackageManagerWrapperImpl(context.getPackageManager()), context, new PackageManagerWrapper(context.getPackageManager()),
cleanQuery(query), getSiteMapManager()); 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.LegacyVpnInfo;
import com.android.internal.net.VpnConfig; import com.android.internal.net.VpnConfig;
import com.android.settings.wrapper.ConnectivityManagerWrapper;
/** /**
* Utility functions for vpn. * 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.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.applications.PackageManagerWrapper;
import com.android.settings.applications.defaultapps.DefaultAppInfo; import com.android.settings.applications.defaultapps.DefaultAppInfo;
import com.android.settings.applications.defaultapps.DefaultAppPickerFragment; 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.ArrayList;
import java.util.List; import java.util.List;

View File

@@ -28,6 +28,8 @@ import android.webkit.WebViewProviderInfo;
import android.widget.Toast; import android.widget.Toast;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.wrapper.UserPackageWrapper;
import com.android.settings.wrapper.UserPackageWrapperImpl;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; 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.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.dashboard.DashboardFragment; import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.network.NetworkScoreManagerWrapper;
import com.android.settings.network.NetworkScorerPickerPreferenceController; import com.android.settings.network.NetworkScorerPickerPreferenceController;
import com.android.settings.network.WifiCallingPreferenceController; import com.android.settings.network.WifiCallingPreferenceController;
import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable; import com.android.settings.search.Indexable;
import com.android.settings.wifi.p2p.WifiP2pPreferenceController; import com.android.settings.wifi.p2p.WifiP2pPreferenceController;
import com.android.settings.wrapper.NetworkScoreManagerWrapper;
import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.AbstractPreferenceController;
import java.util.ArrayList; 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.R;
import com.android.settings.core.PreferenceControllerMixin; 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.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver; 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.R;
import com.android.settings.core.instrumentation.MetricsFeatureProvider; import com.android.settings.core.instrumentation.MetricsFeatureProvider;
import com.android.settings.widget.SwitchWidgetController; import com.android.settings.widget.SwitchWidgetController;
import com.android.settings.wrapper.ConnectivityManagerWrapper;
import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
import com.android.settingslib.WirelessUtils; 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.SummaryUpdater.OnSummaryChangeListener;
import com.android.settings.widget.SwitchBarController; import com.android.settings.widget.SwitchBarController;
import com.android.settings.wifi.details.WifiNetworkDetailsFragment; import com.android.settings.wifi.details.WifiNetworkDetailsFragment;
import com.android.settings.wrapper.WifiManagerWrapper;
import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.wifi.AccessPoint; import com.android.settingslib.wifi.AccessPoint;
import com.android.settingslib.wifi.AccessPoint.AccessPointListener; 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.R;
import com.android.settings.core.PreferenceControllerMixin; 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.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.LifecycleObserver;

View File

@@ -20,7 +20,6 @@ import android.app.Activity;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.net.wifi.WifiManager;
import android.nfc.FormatException; import android.nfc.FormatException;
import android.nfc.NdefMessage; import android.nfc.NdefMessage;
import android.nfc.NdefRecord; import android.nfc.NdefRecord;
@@ -43,6 +42,7 @@ import android.widget.ProgressBar;
import android.widget.TextView; import android.widget.TextView;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.wrapper.WifiManagerWrapper;
import com.android.settingslib.wifi.AccessPoint; import com.android.settingslib.wifi.AccessPoint;
import java.io.IOException; 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.applications.LayoutPreference;
import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.core.instrumentation.MetricsFeatureProvider; import com.android.settings.core.instrumentation.MetricsFeatureProvider;
import com.android.settings.vpn2.ConnectivityManagerWrapper;
import com.android.settings.widget.ActionButtonPreference; import com.android.settings.widget.ActionButtonPreference;
import com.android.settings.widget.EntityHeaderController; import com.android.settings.widget.EntityHeaderController;
import com.android.settings.wifi.WifiDetailPreference; import com.android.settings.wifi.WifiDetailPreference;
import com.android.settings.wifi.WifiDialog; import com.android.settings.wifi.WifiDialog;
import com.android.settings.wifi.WifiDialog.WifiDialogListener; import com.android.settings.wifi.WifiDialog.WifiDialogListener;
import com.android.settings.wrapper.ConnectivityManagerWrapper;
import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver; 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.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.dashboard.DashboardFragment; import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.vpn2.ConnectivityManagerWrapperImpl;
import com.android.settings.wifi.WifiConfigUiBase; import com.android.settings.wifi.WifiConfigUiBase;
import com.android.settings.wifi.WifiDialog; import com.android.settings.wifi.WifiDialog;
import com.android.settings.wrapper.ConnectivityManagerWrapper;
import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.wifi.AccessPoint; import com.android.settingslib.wifi.AccessPoint;
import java.util.ArrayList; import java.util.ArrayList;
@@ -117,7 +117,7 @@ public class WifiNetworkDetailsFragment extends DashboardFragment {
ConnectivityManager cm = context.getSystemService(ConnectivityManager.class); ConnectivityManager cm = context.getSystemService(ConnectivityManager.class);
mWifiDetailPreferenceController = WifiDetailPreferenceController.newInstance( mWifiDetailPreferenceController = WifiDetailPreferenceController.newInstance(
mAccessPoint, mAccessPoint,
new ConnectivityManagerWrapperImpl(cm), new ConnectivityManagerWrapper(cm),
context, context,
this, this,
new Handler(Looper.getMainLooper()), // UI thread. new Handler(Looper.getMainLooper()), // UI thread.

View File

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

View File

@@ -14,24 +14,34 @@
* limitations under the License. * limitations under the License.
*/ */
package com.android.settings.applications; package com.android.settings.wrapper;
import android.accessibilityservice.AccessibilityServiceInfo; import android.accessibilityservice.AccessibilityServiceInfo;
import android.content.ComponentName; import android.content.ComponentName;
/** /**
* This interface replicates a subset of the * This class replicates a subset of the
* {@link android.accessibilityservice.AccessibilityServiceInfo}. The interface * {@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. * 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 * We cannot directly mock or shadow it, because some of the methods we rely on are newer than
* the API version supported by Robolectric. * 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. * 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. * limitations under the License.
*/ */
package com.android.settings.applications; package com.android.settings.wrapper;
import android.content.pm.ActivityInfo; 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; private final ActivityInfo mInfo;
public ActivityInfoWrapperImpl(ActivityInfo info) { public ActivityInfoWrapper(ActivityInfo info) {
mInfo = info; mInfo = info;
} }
@Override /**
* Returns whether this activity supports picture-in-picture.
*/
public boolean supportsPictureInPicture() { public boolean supportsPictureInPicture() {
return mInfo.supportsPictureInPicture(); return mInfo.supportsPictureInPicture();
} }

View File

@@ -14,28 +14,46 @@
* limitations under the License. * limitations under the License.
*/ */
package com.android.settings.applications; package com.android.settings.wrapper;
import android.view.autofill.AutofillManager; import android.view.autofill.AutofillManager;
/** /**
* This interface replicates a subset of the android.view.autofill.AutofillManager (AFM). The * This class 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 * 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 * 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. * 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()}. * Calls {@code AutofillManager.hasAutofillFeature()}.
* *
* @see AutofillManager#hasAutofillFeature * @see AutofillManager#hasAutofillFeature
*/ */
public boolean hasAutofillFeature(); public boolean hasAutofillFeature() {
if (mAfm == null) {
return false;
}
return mAfm.hasAutofillFeature();
}
/** /**
* Calls {@code AutofillManager.isAutofillSupported()}. * Calls {@code AutofillManager.isAutofillSupported()}.
* *
* @see 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. * limitations under the License.
*/ */
package com.android.settings.vpn2; package com.android.settings.wrapper;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
import android.net.ConnectivityManager.NetworkCallback; import android.net.ConnectivityManager.NetworkCallback;
@@ -24,31 +24,43 @@ import android.os.Handler;
import android.net.ProxyInfo; 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. * 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 * 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. * 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. * Returns the real ConnectivityManager object wrapped by this wrapper.
*/ */
public ConnectivityManager getConnectivityManager(); public ConnectivityManager getConnectivityManager() {
return mCm;
}
/** /**
* Calls {@code ConnectivityManager.getAlwaysOnVpnPackageForUser()}. * Calls {@code ConnectivityManager.getAlwaysOnVpnPackageForUser()}.
* *
* @see android.net.ConnectivityManager#getAlwaysOnVpnPackageForUser * @see android.net.ConnectivityManager#getAlwaysOnVpnPackageForUser
*/ */
String getAlwaysOnVpnPackageForUser(int userId); public String getAlwaysOnVpnPackageForUser(int userId) {
return mCm.getAlwaysOnVpnPackageForUser(userId);
}
/** /**
* Calls {@code ConnectivityManager.getGlobalProxy()}. * Calls {@code ConnectivityManager.getGlobalProxy()}.
* *
* @see android.net.ConnectivityManager#getGlobalProxy * @see android.net.ConnectivityManager#getGlobalProxy
*/ */
ProxyInfo getGlobalProxy(); public ProxyInfo getGlobalProxy() {
return mCm.getGlobalProxy();
}
/** /**
* Calls {@code ConnectivityManager.registerNetworkCallback()}. * Calls {@code ConnectivityManager.registerNetworkCallback()}.
@@ -60,7 +72,9 @@ public interface ConnectivityManagerWrapper {
* @see android.net.ConnectivityManager#registerNetworkCallback(NetworkRequest,NetworkCallback,Handler) * @see android.net.ConnectivityManager#registerNetworkCallback(NetworkRequest,NetworkCallback,Handler)
*/ */
public void registerNetworkCallback(NetworkRequest request, NetworkCallback callback, public void registerNetworkCallback(NetworkRequest request, NetworkCallback callback,
Handler handler); Handler handler) {
mCm.registerNetworkCallback(request, callback, handler);
}
/** /**
* Calls {@code ConnectivityManager.startCaptivePortalApp()}. * Calls {@code ConnectivityManager.startCaptivePortalApp()}.
@@ -71,5 +85,14 @@ public interface ConnectivityManagerWrapper {
* *
* @see android.net.ConnectivityManager#startCaptivePortalApp(Network) * @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. * limitations under the License.
*/ */
package com.android.settings.enterprise; package com.android.settings.wrapper;
import android.annotation.NonNull; import android.annotation.NonNull;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.Intent; import android.content.Intent;
import android.os.UserHandle; import android.os.UserHandle;
@@ -25,137 +26,178 @@ import android.support.annotation.Nullable;
import java.util.List; import java.util.List;
/** /**
* This interface replicates a subset of the android.app.admin.DevicePolicyManager (DPM). The * This class 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 * 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 * 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. * 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()}. * Calls {@code DevicePolicyManager.getActiveAdminsAsUser()}.
* *
* @see android.app.admin.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()}. * Calls {@code DevicePolicyManager.getMaximumFailedPasswordsForWipe()}.
* *
* @see android.app.admin.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()}. * Calls {@code DevicePolicyManager.getDeviceOwnerComponentOnCallingUser()}.
* *
* @see android.app.admin.DevicePolicyManager#getDeviceOwnerComponentOnCallingUser * @see android.app.admin.DevicePolicyManager#getDeviceOwnerComponentOnCallingUser
*/ */
ComponentName getDeviceOwnerComponentOnCallingUser(); public ComponentName getDeviceOwnerComponentOnCallingUser() {
return mDpm.getDeviceOwnerComponentOnCallingUser();
}
/** /**
* Calls {@code DevicePolicyManager.getDeviceOwnerComponentOnAnyUser()}. * Calls {@code DevicePolicyManager.getDeviceOwnerComponentOnAnyUser()}.
* *
* @see android.app.admin.DevicePolicyManager#getDeviceOwnerComponentOnAnyUser * @see android.app.admin.DevicePolicyManager#getDeviceOwnerComponentOnAnyUser
*/ */
ComponentName getDeviceOwnerComponentOnAnyUser(); public ComponentName getDeviceOwnerComponentOnAnyUser() {
return mDpm.getDeviceOwnerComponentOnAnyUser();
}
/** /**
* Calls {@code DevicePolicyManager.getProfileOwnerAsUser()}. * Calls {@code DevicePolicyManager.getProfileOwnerAsUser()}.
* *
* @see android.app.admin.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()}. * Calls {@code DevicePolicyManager.getDeviceOwnerNameOnAnyUser()}.
* *
* @see android.app.admin.DevicePolicyManager#getDeviceOwnerNameOnAnyUser * @see android.app.admin.DevicePolicyManager#getDeviceOwnerNameOnAnyUser
*/ */
CharSequence getDeviceOwnerOrganizationName(); public CharSequence getDeviceOwnerOrganizationName() {
return mDpm.getDeviceOwnerOrganizationName();
}
/** /**
* Calls {@code DevicePolicyManager.getPermissionGrantState()}. * Calls {@code DevicePolicyManager.getPermissionGrantState()}.
* *
* @see android.app.admin.DevicePolicyManager#getPermissionGrantState * @see android.app.admin.DevicePolicyManager#getPermissionGrantState
*/ */
int getPermissionGrantState(@Nullable ComponentName admin, String packageName, public int getPermissionGrantState(@Nullable ComponentName admin, String packageName,
String permission); String permission) {
return mDpm.getPermissionGrantState(admin, packageName, permission);
}
/** /**
* Calls {@code DevicePolicyManager.isSecurityLoggingEnabled()}. * Calls {@code DevicePolicyManager.isSecurityLoggingEnabled()}.
* *
* @see android.app.admin.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()}. * Calls {@code DevicePolicyManager.isNetworkLoggingEnabled()}.
* *
* @see android.app.admin.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()}. * Calls {@code DevicePolicyManager.getLastSecurityLogRetrievalTime()}.
* *
* @see android.app.admin.DevicePolicyManager#getLastSecurityLogRetrievalTime * @see android.app.admin.DevicePolicyManager#getLastSecurityLogRetrievalTime
*/ */
long getLastSecurityLogRetrievalTime(); public long getLastSecurityLogRetrievalTime() {
return mDpm.getLastSecurityLogRetrievalTime();
}
/** /**
* Calls {@code DevicePolicyManager.getLastBugReportRequestTime()}. * Calls {@code DevicePolicyManager.getLastBugReportRequestTime()}.
* *
* @see android.app.admin.DevicePolicyManager#getLastBugReportRequestTime * @see android.app.admin.DevicePolicyManager#getLastBugReportRequestTime
*/ */
long getLastBugReportRequestTime(); public long getLastBugReportRequestTime() {
return mDpm.getLastBugReportRequestTime();
}
/** /**
* Calls {@code DevicePolicyManager.getLastNetworkLogRetrievalTime()}. * Calls {@code DevicePolicyManager.getLastNetworkLogRetrievalTime()}.
* *
* @see android.app.admin.DevicePolicyManager#getLastNetworkLogRetrievalTime * @see android.app.admin.DevicePolicyManager#getLastNetworkLogRetrievalTime
*/ */
long getLastNetworkLogRetrievalTime(); public long getLastNetworkLogRetrievalTime() {
return mDpm.getLastNetworkLogRetrievalTime();
}
/** /**
* Calls {@code DevicePolicyManager.isCurrentInputMethodSetByOwner()}. * Calls {@code DevicePolicyManager.isCurrentInputMethodSetByOwner()}.
* *
* @see android.app.admin.DevicePolicyManager#isCurrentInputMethodSetByOwner * @see android.app.admin.DevicePolicyManager#isCurrentInputMethodSetByOwner
*/ */
boolean isCurrentInputMethodSetByOwner(); public boolean isCurrentInputMethodSetByOwner() {
return mDpm.isCurrentInputMethodSetByOwner();
}
/** /**
* Calls {@code DevicePolicyManager.getOwnerInstalledCaCerts()}. * Calls {@code DevicePolicyManager.getOwnerInstalledCaCerts()}.
* *
* @see android.app.admin.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()}. * Calls {@code DevicePolicyManager.isDeviceOwnerAppOnAnyUser()}.
* *
* @see android.app.admin.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()}. * Calls {@code DevicePolicyManager.packageHasActiveAdmins()}.
* *
* @see android.app.admin.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()}. * Calls {@code DevicePolicyManager.isUninstallInQueue()}.
* *
* @see android.app.admin.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()}. * Calls {@code DevicePolicyManager.createAdminSupportIntent()}.
* *
* @see android.app.admin.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. * limitations under the License.
*/ */
package com.android.settings.password; package com.android.settings.wrapper;
import android.annotation.NonNull; import android.annotation.NonNull;
import android.hardware.fingerprint.FingerprintManager; import android.hardware.fingerprint.FingerprintManager;
@@ -24,10 +24,14 @@ import android.os.CancellationSignal;
import com.android.internal.util.Preconditions; import com.android.internal.util.Preconditions;
/** /**
* Wrapper of {@link FingerprintManager}. Workaround for roboelectic testing. See * Wrapper of {@link FingerprintManager}. Workaround for robolectic testing.
* {@link IFingerprintManager} for details. *
* 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; private @NonNull FingerprintManager mFingerprintManager;
public FingerprintManagerWrapper(@NonNull FingerprintManager fingerprintManager) { public FingerprintManagerWrapper(@NonNull FingerprintManager fingerprintManager) {
@@ -35,27 +39,22 @@ public class FingerprintManagerWrapper implements IFingerprintManager {
mFingerprintManager = fingerprintManager; mFingerprintManager = fingerprintManager;
} }
@Override
public boolean isHardwareDetected() { public boolean isHardwareDetected() {
return mFingerprintManager.isHardwareDetected(); return mFingerprintManager.isHardwareDetected();
} }
@Override
public boolean hasEnrolledFingerprints(int userId) { public boolean hasEnrolledFingerprints(int userId) {
return mFingerprintManager.hasEnrolledFingerprints(userId); return mFingerprintManager.hasEnrolledFingerprints(userId);
} }
@Override
public long preEnroll() { public long preEnroll() {
return mFingerprintManager.preEnroll(); return mFingerprintManager.preEnroll();
} }
@Override
public void setActiveUser(int userId) { public void setActiveUser(int userId) {
mFingerprintManager.setActiveUser(userId); mFingerprintManager.setActiveUser(userId);
} }
@Override
public void enroll( public void enroll(
byte[] token, byte[] token,
CancellationSignal cancel, CancellationSignal cancel,

View File

@@ -14,62 +14,84 @@
* limitations under the License. * limitations under the License.
*/ */
package com.android.settings.applications; package com.android.settings.wrapper;
import android.content.Intent; import android.content.Intent;
import android.content.pm.IPackageManager;
import android.content.pm.PackageInfo; import android.content.pm.PackageInfo;
import android.content.pm.ParceledListSlice; import android.content.pm.ParceledListSlice;
import android.content.pm.ResolveInfo; import android.content.pm.ResolveInfo;
import android.os.RemoteException; 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. * 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 * 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. * 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()}. * Calls {@code IPackageManager.checkUidPermission()}.
* *
* @see android.content.pm.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()}. * Calls {@code IPackageManager.findPersistentPreferredActivity()}.
* *
* @see android.content.pm.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()}. * Calls {@code IPackageManager.getPackageInfo()}.
* *
* @see android.content.pm.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()}. * Calls {@code IPackageManager.getAppOpPermissionPackages()}.
* *
* @see android.content.pm.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()}. * Calls {@code IPackageManager.isPackageAvailable()}.
* *
* @see android.content.pm.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()}. * Calls {@code IPackageManager.getPackagesHoldingPermissions()}.
* *
* @see android.content.pm.IPackageManager#getPackagesHoldingPermissions * @see android.content.pm.IPackageManager#getPackagesHoldingPermissions
*/ */
ParceledListSlice<PackageInfo> getPackagesHoldingPermissions( public ParceledListSlice<PackageInfo> getPackagesHoldingPermissions(
String[] permissions, int flags, int userId) throws RemoteException; String[] permissions, int flags, int userId) throws RemoteException {
return mPms.getPackagesHoldingPermissions(permissions, flags, userId);
}
} }

View File

@@ -14,22 +14,29 @@
* limitations under the License. * limitations under the License.
*/ */
package com.android.settings.fuelgauge.anomaly; package com.android.settings.wrapper;
import android.util.KeyValueListParser; 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. * 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 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. * 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} * 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 * 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. * @param str the string to parse.
* @throws IllegalArgumentException if the string is malformed. * @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. * 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. * @param defaultValue The value to return if the key was not found.
* @return the string value associated with the key. * @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. * Get the value for key as a long.
@@ -58,5 +69,7 @@ public interface KeyValueListParserWrapper {
* long. * long.
* @return the long value associated with the key. * @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 * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package com.android.settings.network; package com.android.settings.wrapper;
import android.annotation.Nullable; import android.annotation.Nullable;
import android.net.NetworkScoreManager; import android.net.NetworkScoreManager;

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package com.android.settings.display; package com.android.settings.wrapper;
import android.os.PowerManager; 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 android.content.Context;
import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.RestrictedLockUtils;

View File

@@ -14,26 +14,30 @@
* limitations under the License. * limitations under the License.
*/ */
package com.android.settings.applications; package com.android.settings.wrapper;
import android.content.pm.UserInfo; import android.content.pm.UserInfo;
import android.os.UserManager; import android.os.UserManager;
import java.util.List; 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; private UserManager mUserManager;
public UserManagerWrapperImpl(UserManager userManager) { public UserManagerWrapper(UserManager userManager) {
mUserManager = userManager; mUserManager = userManager;
} }
@Override
public UserInfo getPrimaryUser() { public UserInfo getPrimaryUser() {
return mUserManager.getPrimaryUser(); return mUserManager.getPrimaryUser();
} }
@Override
public List<UserInfo> getUsers() { public List<UserInfo> getUsers() {
return mUserManager.getUsers(); return mUserManager.getUsers();
} }

View File

@@ -12,20 +12,16 @@
* permissions and limitations under the License. * 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.PackageInfo;
import android.content.pm.UserInfo; 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 * Wrapper class around android.webkit.UserPackage - to be able to use UserPackage in Robolectric
* tests (such tests currently don't support mocking hidden classes). * tests (such tests currently don't support mocking hidden classes).
*/ */
interface UserPackageWrapper { public interface UserPackageWrapper {
UserInfo getUserInfo(); UserInfo getUserInfo();
PackageInfo getPackageInfo(); PackageInfo getPackageInfo();
boolean isEnabledPackage(); boolean isEnabledPackage();

View File

@@ -12,23 +12,19 @@
* permissions and limitations under the License. * 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.PackageInfo;
import android.content.pm.UserInfo; import android.content.pm.UserInfo;
import android.webkit.UserPackage; import android.webkit.UserPackage;
import java.util.ArrayList;
import java.util.List;
/** /**
* Default implementation of UserPackageWrapper. * Default implementation of UserPackageWrapper.
*/ */
class UserPackageWrapperImpl implements UserPackageWrapper { public class UserPackageWrapperImpl implements UserPackageWrapper {
private final UserPackage mUserPackage; private final UserPackage mUserPackage;
UserPackageWrapperImpl(UserPackage userPackage) { public UserPackageWrapperImpl(UserPackage userPackage) {
mUserPackage = userPackage; mUserPackage = userPackage;
} }

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package com.android.settings.dashboard.suggestions; package com.android.settings.wrapper;
import android.app.WallpaperManager; import android.app.WallpaperManager;
import android.content.Context; 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; import android.net.wifi.WifiManager;

View File

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

View File

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

View File

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

View File

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

View File

@@ -28,7 +28,9 @@ import android.os.UserManager;
import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig; 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.Before;
import org.junit.Test; import org.junit.Test;

View File

@@ -25,7 +25,9 @@ import android.os.UserManager;
import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig; 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.Before;
import org.junit.Test; import org.junit.Test;

View File

@@ -30,9 +30,11 @@ import android.os.UserManager;
import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig; import com.android.settings.TestConfig;
import com.android.settings.enterprise.DevicePolicyManagerWrapper;
import com.android.settings.testutils.ApplicationTestUtils; import com.android.settings.testutils.ApplicationTestUtils;
import com.android.settings.testutils.shadow.ShadowUserManager; 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.Before;
import org.junit.Test; import org.junit.Test;

View File

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

View File

@@ -16,7 +16,6 @@
package com.android.settings.applications; package com.android.settings.applications;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.nullable; import static org.mockito.ArgumentMatchers.nullable;
import static org.mockito.Matchers.anyDouble; import static org.mockito.Matchers.anyDouble;
@@ -33,7 +32,6 @@ import android.app.AlertDialog;
import android.app.AppOpsManager; import android.app.AppOpsManager;
import android.app.Fragment; import android.app.Fragment;
import android.app.LoaderManager; import android.app.LoaderManager;
import android.app.admin.DevicePolicyManager;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo;
@@ -55,11 +53,11 @@ import com.android.settings.SettingsActivity;
import com.android.settings.TestConfig; import com.android.settings.TestConfig;
import com.android.settings.applications.instantapps.InstantAppButtonsController; import com.android.settings.applications.instantapps.InstantAppButtonsController;
import com.android.settings.applications.instantapps.InstantAppButtonsController.ShowDialogDelegate; import com.android.settings.applications.instantapps.InstantAppButtonsController.ShowDialogDelegate;
import com.android.settings.enterprise.DevicePolicyManagerWrapper;
import com.android.settings.fuelgauge.BatteryUtils; import com.android.settings.fuelgauge.BatteryUtils;
import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.widget.ActionButtonPreferenceTest; import com.android.settings.widget.ActionButtonPreferenceTest;
import com.android.settings.wrapper.DevicePolicyManagerWrapper;
import com.android.settingslib.Utils; import com.android.settingslib.Utils;
import com.android.settingslib.applications.AppUtils; import com.android.settingslib.applications.AppUtils;
import com.android.settingslib.applications.ApplicationsState.AppEntry; 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.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig; import com.android.settings.TestConfig;
import com.android.settingslib.wrapper.PackageManagerWrapper;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; 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.TestConfig;
import com.android.settings.dashboard.SummaryLoader; import com.android.settings.dashboard.SummaryLoader;
import com.android.settings.notification.NotificationBackend; import com.android.settings.notification.NotificationBackend;
import com.android.settingslib.wrapper.PackageManagerWrapper;
import java.util.List; import java.util.List;
import java.util.ArrayList; 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.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig; import com.android.settings.TestConfig;
import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.wrapper.ActivityInfoWrapper;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@@ -104,11 +105,12 @@ public class PictureInPictureDetailsTest {
activities); activities);
} }
private class MockActivityInfo implements ActivityInfoWrapper { private class MockActivityInfo extends ActivityInfoWrapper {
private boolean mSupportsPictureInPicture; private boolean mSupportsPictureInPicture;
public MockActivityInfo(boolean supportsPictureInPicture) { public MockActivityInfo(boolean supportsPictureInPicture) {
super(null);
mSupportsPictureInPicture = supportsPictureInPicture; mSupportsPictureInPicture = supportsPictureInPicture;
} }

View File

@@ -16,7 +16,6 @@
package com.android.settings.applications.defaultapps; package com.android.settings.applications.defaultapps;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; 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.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig; import com.android.settings.TestConfig;
import com.android.settings.applications.PackageManagerWrapper; import com.android.settingslib.wrapper.PackageManagerWrapper;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;

View File

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

View File

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

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