diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index fa61cec..89724cc 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -110,9 +110,8 @@
 import com.android.internal.util.ArrayUtils;
 import com.android.internal.util.UserIcons;
 import com.android.internal.widget.LockPatternUtils;
-import com.android.settings.enterprise.DevicePolicyManagerWrapper;
-import com.android.settings.password.FingerprintManagerWrapper;
-import com.android.settings.password.IFingerprintManager;
+import com.android.settings.wrapper.FingerprintManagerWrapper;
+import com.android.settings.wrapper.DevicePolicyManagerWrapper;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -1258,7 +1257,7 @@
         }
     }
 
-    public static IFingerprintManager getFingerprintManagerWrapperOrNull(Context context) {
+    public static FingerprintManagerWrapper getFingerprintManagerWrapperOrNull(Context context) {
         FingerprintManager fingerprintManager = getFingerprintManagerOrNull(context);
         if (fingerprintManager != null) {
             return new FingerprintManagerWrapper(fingerprintManager);
diff --git a/src/com/android/settings/accounts/RemoveAccountPreferenceController.java b/src/com/android/settings/accounts/RemoveAccountPreferenceController.java
index b5133d3..068847f 100644
--- a/src/com/android/settings/accounts/RemoveAccountPreferenceController.java
+++ b/src/com/android/settings/accounts/RemoveAccountPreferenceController.java
@@ -43,8 +43,7 @@
 import com.android.settings.applications.LayoutPreference;
 import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
-import com.android.settings.enterprise.DevicePolicyManagerWrapper;
-import com.android.settings.enterprise.DevicePolicyManagerWrapperImpl;
+import com.android.settings.wrapper.DevicePolicyManagerWrapper;
 import com.android.settingslib.core.AbstractPreferenceController;
 
 import java.io.IOException;
@@ -60,7 +59,7 @@
     private DevicePolicyManagerWrapper mDpm;
 
     public RemoveAccountPreferenceController(Context context, Fragment parent) {
-        this(context, parent, new DevicePolicyManagerWrapperImpl(
+        this(context, parent, new DevicePolicyManagerWrapper(
                 (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE)));
     }
 
diff --git a/src/com/android/settings/applications/AccessibilityServiceInfoWrapperImpl.java b/src/com/android/settings/applications/AccessibilityServiceInfoWrapperImpl.java
deleted file mode 100644
index d0d99ea..0000000
--- a/src/com/android/settings/applications/AccessibilityServiceInfoWrapperImpl.java
+++ /dev/null
@@ -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();
-    }
-}
diff --git a/src/com/android/settings/applications/ActivityInfoWrapper.java b/src/com/android/settings/applications/ActivityInfoWrapper.java
deleted file mode 100644
index 4cb6e68..0000000
--- a/src/com/android/settings/applications/ActivityInfoWrapper.java
+++ /dev/null
@@ -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();
-}
diff --git a/src/com/android/settings/applications/AppCounter.java b/src/com/android/settings/applications/AppCounter.java
index 8c7aed7..a02ecfa 100644
--- a/src/com/android/settings/applications/AppCounter.java
+++ b/src/com/android/settings/applications/AppCounter.java
@@ -22,6 +22,8 @@
 import android.os.UserHandle;
 import android.os.UserManager;
 
+import com.android.settingslib.wrapper.PackageManagerWrapper;
+
 import java.util.List;
 
 public abstract class AppCounter extends AsyncTask<Void, Void, Integer> {
diff --git a/src/com/android/settings/applications/AppInfoBase.java b/src/com/android/settings/applications/AppInfoBase.java
index a5daee2..b06c070 100644
--- a/src/com/android/settings/applications/AppInfoBase.java
+++ b/src/com/android/settings/applications/AppInfoBase.java
@@ -43,9 +43,8 @@
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.Utils;
 import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
-import com.android.settings.enterprise.DevicePolicyManagerWrapper;
-import com.android.settings.enterprise.DevicePolicyManagerWrapperImpl;
 import com.android.settings.overlay.FeatureFactory;
+import com.android.settings.wrapper.DevicePolicyManagerWrapper;
 import com.android.settingslib.RestrictedLockUtils;
 import com.android.settingslib.applications.ApplicationsState;
 import com.android.settingslib.applications.ApplicationsState.AppEntry;
@@ -94,7 +93,7 @@
                 .getApplicationFeatureProvider(activity);
         mState = ApplicationsState.getInstance(activity.getApplication());
         mSession = mState.newSession(this);
-        mDpm = new DevicePolicyManagerWrapperImpl(
+        mDpm = new DevicePolicyManagerWrapper(
                 (DevicePolicyManager) activity.getSystemService(Context.DEVICE_POLICY_SERVICE));
         mUserManager = (UserManager) activity.getSystemService(Context.USER_SERVICE);
         mPm = activity.getPackageManager();
diff --git a/src/com/android/settings/applications/AppLister.java b/src/com/android/settings/applications/AppLister.java
index 425afa0..f1a3be9 100644
--- a/src/com/android/settings/applications/AppLister.java
+++ b/src/com/android/settings/applications/AppLister.java
@@ -23,6 +23,8 @@
 import android.os.UserHandle;
 import android.os.UserManager;
 
+import com.android.settingslib.wrapper.PackageManagerWrapper;
+
 import java.util.ArrayList;
 import java.util.List;
 
diff --git a/src/com/android/settings/applications/AppStateAppOpsBridge.java b/src/com/android/settings/applications/AppStateAppOpsBridge.java
index 896102c..6ec32a3 100755
--- a/src/com/android/settings/applications/AppStateAppOpsBridge.java
+++ b/src/com/android/settings/applications/AppStateAppOpsBridge.java
@@ -31,6 +31,7 @@
 
 import com.android.settingslib.applications.ApplicationsState;
 import com.android.settingslib.applications.ApplicationsState.AppEntry;
+import com.android.settings.wrapper.IPackageManagerWrapper;
 
 import java.util.Arrays;
 import java.util.Collection;
@@ -57,7 +58,7 @@
     public AppStateAppOpsBridge(Context context, ApplicationsState appState, Callback callback,
             int appOpsOpCode, String[] permissions) {
         this(context, appState, callback, appOpsOpCode, permissions,
-            new IPackageManagerWrapperImpl(AppGlobals.getPackageManager()));
+            new IPackageManagerWrapper(AppGlobals.getPackageManager()));
     }
 
     @VisibleForTesting(otherwise = VisibleForTesting.NONE)
diff --git a/src/com/android/settings/applications/AppWithAdminGrantedPermissionsCounter.java b/src/com/android/settings/applications/AppWithAdminGrantedPermissionsCounter.java
index c7d0a62..a1bf14e 100644
--- a/src/com/android/settings/applications/AppWithAdminGrantedPermissionsCounter.java
+++ b/src/com/android/settings/applications/AppWithAdminGrantedPermissionsCounter.java
@@ -22,7 +22,9 @@
 import android.os.RemoteException;
 import android.os.UserHandle;
 
-import com.android.settings.enterprise.DevicePolicyManagerWrapper;
+import com.android.settings.wrapper.DevicePolicyManagerWrapper;
+import com.android.settings.wrapper.IPackageManagerWrapper;
+import com.android.settingslib.wrapper.PackageManagerWrapper;
 
 /**
  * Counts installed apps across all users that have been granted one or more specific permissions by
diff --git a/src/com/android/settings/applications/AppWithAdminGrantedPermissionsLister.java b/src/com/android/settings/applications/AppWithAdminGrantedPermissionsLister.java
index b21f31f..dd5a807 100644
--- a/src/com/android/settings/applications/AppWithAdminGrantedPermissionsLister.java
+++ b/src/com/android/settings/applications/AppWithAdminGrantedPermissionsLister.java
@@ -18,7 +18,9 @@
 
 import android.content.pm.ApplicationInfo;
 import android.os.UserManager;
-import com.android.settings.enterprise.DevicePolicyManagerWrapper;
+import com.android.settings.wrapper.DevicePolicyManagerWrapper;
+import com.android.settings.wrapper.IPackageManagerWrapper;
+import com.android.settingslib.wrapper.PackageManagerWrapper;
 
 /**
  * Lists installed apps across all users that have been granted one or more specific permissions by
diff --git a/src/com/android/settings/applications/ApplicationFeatureProviderImpl.java b/src/com/android/settings/applications/ApplicationFeatureProviderImpl.java
index 10b61c5..5323cd5 100644
--- a/src/com/android/settings/applications/ApplicationFeatureProviderImpl.java
+++ b/src/com/android/settings/applications/ApplicationFeatureProviderImpl.java
@@ -29,7 +29,9 @@
 import android.view.View;
 
 import com.android.settings.applications.instantapps.InstantAppButtonsController;
-import com.android.settings.enterprise.DevicePolicyManagerWrapper;
+import com.android.settings.wrapper.DevicePolicyManagerWrapper;
+import com.android.settings.wrapper.IPackageManagerWrapper;
+import com.android.settingslib.wrapper.PackageManagerWrapper;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/src/com/android/settings/applications/AutofillManagerWrapperImpl.java b/src/com/android/settings/applications/AutofillManagerWrapperImpl.java
deleted file mode 100644
index 9dd1b33..0000000
--- a/src/com/android/settings/applications/AutofillManagerWrapperImpl.java
+++ /dev/null
@@ -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();
-    }
-}
diff --git a/src/com/android/settings/applications/IPackageManagerWrapperImpl.java b/src/com/android/settings/applications/IPackageManagerWrapperImpl.java
deleted file mode 100644
index af5f378..0000000
--- a/src/com/android/settings/applications/IPackageManagerWrapperImpl.java
+++ /dev/null
@@ -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);
-    }
-
-}
diff --git a/src/com/android/settings/applications/InstalledAppCounter.java b/src/com/android/settings/applications/InstalledAppCounter.java
index 932face..26372ee 100644
--- a/src/com/android/settings/applications/InstalledAppCounter.java
+++ b/src/com/android/settings/applications/InstalledAppCounter.java
@@ -21,6 +21,8 @@
 import android.content.pm.PackageManager;
 import android.os.UserHandle;
 
+import com.android.settingslib.wrapper.PackageManagerWrapper;
+
 import java.util.List;
 
 public abstract class InstalledAppCounter extends AppCounter {
diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java
index 209cd22..2f44d3e 100755
--- a/src/com/android/settings/applications/InstalledAppDetails.java
+++ b/src/com/android/settings/applications/InstalledAppDetails.java
@@ -24,7 +24,6 @@
 import android.app.AlertDialog;
 import android.app.LoaderManager;
 import android.app.LoaderManager.LoaderCallbacks;
-import android.app.admin.DevicePolicyManager;
 import android.content.ActivityNotFoundException;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
@@ -106,6 +105,7 @@
 import com.android.settingslib.development.DevelopmentSettingsEnabler;
 import com.android.settingslib.net.ChartData;
 import com.android.settingslib.net.ChartDataLoader;
+import com.android.settingslib.wrapper.PackageManagerWrapper;
 
 import java.lang.ref.WeakReference;
 import java.util.ArrayList;
@@ -1236,7 +1236,7 @@
 
         if (pref != null) {
             pref.setSummary(DefaultHomePreferenceController.isHomeDefault(mPackageName,
-                    new PackageManagerWrapperImpl(context.getPackageManager()))
+                    new PackageManagerWrapper(context.getPackageManager()))
                     ? R.string.yes : R.string.no);
         }
         pref = findPreference("default_browser");
diff --git a/src/com/android/settings/applications/InstalledAppLister.java b/src/com/android/settings/applications/InstalledAppLister.java
index d8e7c58..3312d3e 100644
--- a/src/com/android/settings/applications/InstalledAppLister.java
+++ b/src/com/android/settings/applications/InstalledAppLister.java
@@ -20,6 +20,8 @@
 import android.content.pm.PackageManager;
 import android.os.UserManager;
 
+import com.android.settingslib.wrapper.PackageManagerWrapper;
+
 public abstract class InstalledAppLister extends AppLister {
 
     public InstalledAppLister(PackageManagerWrapper packageManager, UserManager userManager) {
diff --git a/src/com/android/settings/applications/ManageApplications.java b/src/com/android/settings/applications/ManageApplications.java
index 11eb0cc..90b6a54 100644
--- a/src/com/android/settings/applications/ManageApplications.java
+++ b/src/com/android/settings/applications/ManageApplications.java
@@ -90,6 +90,7 @@
 import com.android.settingslib.applications.ApplicationsState.CompoundFilter;
 import com.android.settingslib.applications.ApplicationsState.VolumeFilter;
 import com.android.settingslib.applications.StorageStatsSource;
+import com.android.settingslib.wrapper.PackageManagerWrapper;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -888,7 +889,6 @@
         private int mLastSortMode = -1;
         private int mWhichSize = SIZE_TOTAL;
         CharSequence mCurFilterPrefix;
-        private PackageManager mPm;
         private AppFilter mCompositeFilter;
         private boolean mHasReceivedLoadEntries;
         private boolean mHasReceivedBridgeCallback;
@@ -938,7 +938,6 @@
                     mManageApplications.mListContainer
             );
             mContext = manageApplications.getActivity();
-            mPm = mContext.getPackageManager();
             mFilterMode = filterMode;
             if (mManageApplications.mListType == LIST_TYPE_NOTIFICATION) {
                 mExtraInfoBridge = new AppStateNotificationBridge(mContext, mState, this,
@@ -1491,7 +1490,7 @@
         public void setListening(boolean listening) {
             if (listening) {
                 new InstalledAppCounter(mContext, InstalledAppCounter.IGNORE_INSTALL_REASON,
-                        new PackageManagerWrapperImpl(mContext.getPackageManager())) {
+                        new PackageManagerWrapper(mContext.getPackageManager())) {
                     @Override
                     protected void onCountComplete(int num) {
                         mLoader.setSummary(SummaryProvider.this,
diff --git a/src/com/android/settings/applications/NotificationApps.java b/src/com/android/settings/applications/NotificationApps.java
index f290d43..ee802dd 100644
--- a/src/com/android/settings/applications/NotificationApps.java
+++ b/src/com/android/settings/applications/NotificationApps.java
@@ -21,6 +21,7 @@
 import com.android.settings.R;
 import com.android.settings.dashboard.SummaryLoader;
 import com.android.settings.notification.NotificationBackend;
+import com.android.settingslib.wrapper.PackageManagerWrapper;
 
 /**
  * Extension of ManageApplications with no changes other than having its own
@@ -39,7 +40,7 @@
             mContext = context;
             mLoader = loader;
             mNotificationBackend = new NotificationBackend();
-            mPackageManager = new PackageManagerWrapperImpl(mContext.getPackageManager());
+            mPackageManager = new PackageManagerWrapper(mContext.getPackageManager());
         }
 
         @Override
diff --git a/src/com/android/settings/applications/PackageManagerWrapper.java b/src/com/android/settings/applications/PackageManagerWrapper.java
deleted file mode 100644
index 580b578..0000000
--- a/src/com/android/settings/applications/PackageManagerWrapper.java
+++ /dev/null
@@ -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;
-}
diff --git a/src/com/android/settings/applications/PackageManagerWrapperImpl.java b/src/com/android/settings/applications/PackageManagerWrapperImpl.java
deleted file mode 100644
index a47137c..0000000
--- a/src/com/android/settings/applications/PackageManagerWrapperImpl.java
+++ /dev/null
@@ -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);
-    }
-}
diff --git a/src/com/android/settings/applications/PictureInPictureSettings.java b/src/com/android/settings/applications/PictureInPictureSettings.java
index b1c544a..d8e0b2b 100644
--- a/src/com/android/settings/applications/PictureInPictureSettings.java
+++ b/src/com/android/settings/applications/PictureInPictureSettings.java
@@ -36,6 +36,7 @@
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
 import com.android.settings.notification.EmptyTextSettings;
+import com.android.settings.wrapper.ActivityInfoWrapper;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -63,7 +64,7 @@
         if (activities != null) {
             wrappedActivities = new ActivityInfoWrapper[activities.length];
             for (int i = 0; i < activities.length; i++) {
-                wrappedActivities[i] = new ActivityInfoWrapperImpl(activities[i]);
+                wrappedActivities[i] = new ActivityInfoWrapper(activities[i]);
             }
         }
         return checkPackageHasPictureInPictureActivities(packageName, wrappedActivities);
diff --git a/src/com/android/settings/applications/RecentAppsPreferenceController.java b/src/com/android/settings/applications/RecentAppsPreferenceController.java
index 69a36f67..b6ae1ee 100644
--- a/src/com/android/settings/applications/RecentAppsPreferenceController.java
+++ b/src/com/android/settings/applications/RecentAppsPreferenceController.java
@@ -42,6 +42,7 @@
 import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settingslib.applications.ApplicationsState;
 import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.wrapper.PackageManagerWrapper;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -143,7 +144,7 @@
         refreshUi(mCategory.getContext());
         // Show total number of installed apps as See all's summary.
         new InstalledAppCounter(mContext, InstalledAppCounter.IGNORE_INSTALL_REASON,
-                new PackageManagerWrapperImpl(mContext.getPackageManager())) {
+                new PackageManagerWrapper(mContext.getPackageManager())) {
             @Override
             protected void onCountComplete(int num) {
                 if (mHasRecentApps) {
diff --git a/src/com/android/settings/applications/UserManagerWrapper.java b/src/com/android/settings/applications/UserManagerWrapper.java
deleted file mode 100644
index 5b4ed2a..0000000
--- a/src/com/android/settings/applications/UserManagerWrapper.java
+++ /dev/null
@@ -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();
-}
diff --git a/src/com/android/settings/applications/assist/DefaultVoiceInputPicker.java b/src/com/android/settings/applications/assist/DefaultVoiceInputPicker.java
index f51275e..c1fc528 100644
--- a/src/com/android/settings/applications/assist/DefaultVoiceInputPicker.java
+++ b/src/com/android/settings/applications/assist/DefaultVoiceInputPicker.java
@@ -24,9 +24,9 @@
 
 import com.android.internal.app.AssistUtils;
 import com.android.internal.logging.nano.MetricsProto;
-import com.android.settings.applications.PackageManagerWrapper;
 import com.android.settings.applications.defaultapps.DefaultAppInfo;
 import com.android.settings.applications.defaultapps.DefaultAppPickerFragment;
+import com.android.settingslib.wrapper.PackageManagerWrapper;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/src/com/android/settings/applications/defaultapps/DefaultAppInfo.java b/src/com/android/settings/applications/defaultapps/DefaultAppInfo.java
index 12470eb..ec44af4 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultAppInfo.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultAppInfo.java
@@ -26,8 +26,8 @@
 import android.os.RemoteException;
 import android.os.UserHandle;
 
-import com.android.settings.applications.PackageManagerWrapper;
 import com.android.settings.widget.RadioButtonPickerFragment;
+import com.android.settingslib.wrapper.PackageManagerWrapper;
 
 /**
  * Data model representing an app in DefaultAppPicker UI.
diff --git a/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragment.java b/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragment.java
index d3617ef..6eb1ad8 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragment.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragment.java
@@ -29,11 +29,10 @@
 
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
-import com.android.settings.applications.PackageManagerWrapper;
-import com.android.settings.applications.PackageManagerWrapperImpl;
 import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 import com.android.settings.widget.RadioButtonPickerFragment;
 import com.android.settings.widget.RadioButtonPreference;
+import com.android.settingslib.wrapper.PackageManagerWrapper;
 
 /**
  * A generic app picker fragment that shows a list of app as radio button group.
@@ -45,7 +44,7 @@
     @Override
     public void onAttach(Context context) {
         super.onAttach(context);
-        mPm = new PackageManagerWrapperImpl(context.getPackageManager());
+        mPm = new PackageManagerWrapper(context.getPackageManager());
     }
 
     @Override
diff --git a/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceController.java
index c7b450e..d533d0f 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceController.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceController.java
@@ -26,11 +26,10 @@
 import android.util.Log;
 
 import com.android.settings.R;
-import com.android.settings.applications.PackageManagerWrapper;
-import com.android.settings.applications.PackageManagerWrapperImpl;
 import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settings.widget.GearPreference;
 import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.wrapper.PackageManagerWrapper;
 
 public abstract class DefaultAppPreferenceController extends AbstractPreferenceController
         implements PreferenceControllerMixin {
@@ -44,7 +43,7 @@
 
     public DefaultAppPreferenceController(Context context) {
         super(context);
-        mPackageManager = new PackageManagerWrapperImpl(context.getPackageManager());
+        mPackageManager = new PackageManagerWrapper(context.getPackageManager());
         mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
         mUserId = UserHandle.myUserId();
     }
diff --git a/src/com/android/settings/applications/defaultapps/DefaultAutofillPreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultAutofillPreferenceController.java
index 1fd10ff..30aaf64 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultAutofillPreferenceController.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultAutofillPreferenceController.java
@@ -23,8 +23,7 @@
 import android.text.TextUtils;
 import android.view.autofill.AutofillManager;
 
-import com.android.settings.applications.AutofillManagerWrapper;
-import com.android.settings.applications.AutofillManagerWrapperImpl;
+import com.android.settings.wrapper.AutofillManagerWrapper;
 
 public class DefaultAutofillPreferenceController extends DefaultAppPreferenceController {
     private AutofillManagerWrapper mAutofillManager;
@@ -32,7 +31,7 @@
     public DefaultAutofillPreferenceController(Context context) {
         super(context);
 
-        mAutofillManager = new AutofillManagerWrapperImpl(
+        mAutofillManager = new AutofillManagerWrapper(
                 mContext.getSystemService(AutofillManager.class));
     }
 
diff --git a/src/com/android/settings/applications/defaultapps/DefaultHomePreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultHomePreferenceController.java
index 88b36b2..1b229e8 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultHomePreferenceController.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultHomePreferenceController.java
@@ -24,7 +24,7 @@
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 
-import com.android.settings.applications.PackageManagerWrapper;
+import com.android.settingslib.wrapper.PackageManagerWrapper;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/src/com/android/settings/applications/instantapps/InstantAppButtonsController.java b/src/com/android/settings/applications/instantapps/InstantAppButtonsController.java
index 16956df..28e612c 100644
--- a/src/com/android/settings/applications/instantapps/InstantAppButtonsController.java
+++ b/src/com/android/settings/applications/instantapps/InstantAppButtonsController.java
@@ -29,9 +29,8 @@
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
 import com.android.settings.applications.AppStoreUtil;
-import com.android.settings.applications.PackageManagerWrapper;
-import com.android.settings.applications.PackageManagerWrapperImpl;
 import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.wrapper.PackageManagerWrapper;
 
 /** Encapsulates a container for buttons relevant to instant apps */
 public class InstantAppButtonsController implements DialogInterface.OnClickListener {
@@ -62,7 +61,7 @@
       mFragment = fragment;
       mView = view;
       mShowDialogDelegate = showDialogDelegate;
-      mPackageManagerWrapper = new PackageManagerWrapperImpl(context.getPackageManager());
+      mPackageManagerWrapper = new PackageManagerWrapper(context.getPackageManager());
     }
 
     public InstantAppButtonsController setPackageName(String packageName) {
diff --git a/src/com/android/settings/dashboard/suggestions/SuggestionsChecks.java b/src/com/android/settings/dashboard/suggestions/SuggestionsChecks.java
index 4bed89b..eb969a5 100644
--- a/src/com/android/settings/dashboard/suggestions/SuggestionsChecks.java
+++ b/src/com/android/settings/dashboard/suggestions/SuggestionsChecks.java
@@ -32,6 +32,7 @@
 import com.android.settings.fingerprint.FingerprintSuggestionActivity;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.wallpaper.WallpaperSuggestionActivity;
+import com.android.settings.wrapper.WallpaperManagerWrapper;
 import com.android.settingslib.drawer.Tile;
 
 /**
diff --git a/src/com/android/settings/datausage/AppDataUsage.java b/src/com/android/settings/datausage/AppDataUsage.java
index 36d9d0f..5470e63 100644
--- a/src/com/android/settings/datausage/AppDataUsage.java
+++ b/src/com/android/settings/datausage/AppDataUsage.java
@@ -46,14 +46,13 @@
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
 import com.android.settings.applications.AppInfoBase;
-import com.android.settings.applications.PackageManagerWrapper;
-import com.android.settings.applications.PackageManagerWrapperImpl;
 import com.android.settings.widget.EntityHeaderController;
 import com.android.settingslib.AppItem;
 import com.android.settingslib.net.ChartData;
 import com.android.settingslib.net.ChartDataLoader;
 import com.android.settingslib.net.UidDetail;
 import com.android.settingslib.net.UidDetailProvider;
+import com.android.settingslib.wrapper.PackageManagerWrapper;
 
 public class AppDataUsage extends DataUsageBase implements Preference.OnPreferenceChangeListener,
         DataSaverBackend.Listener {
@@ -104,7 +103,7 @@
     @Override
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
-        mPackageManagerWrapper = new PackageManagerWrapperImpl(getPackageManager());
+        mPackageManagerWrapper = new PackageManagerWrapper(getPackageManager());
         final Bundle args = getArguments();
 
         try {
diff --git a/src/com/android/settings/deviceinfo/PrivateVolumeOptionMenuController.java b/src/com/android/settings/deviceinfo/PrivateVolumeOptionMenuController.java
index 88b9487..6047f8c 100644
--- a/src/com/android/settings/deviceinfo/PrivateVolumeOptionMenuController.java
+++ b/src/com/android/settings/deviceinfo/PrivateVolumeOptionMenuController.java
@@ -24,12 +24,12 @@
 import android.view.MenuItem;
 
 import com.android.settings.R;
-import com.android.settings.applications.PackageManagerWrapper;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnCreateOptionsMenu;
 import com.android.settingslib.core.lifecycle.events.OnOptionsItemSelected;
 import com.android.settingslib.core.lifecycle.events.OnPrepareOptionsMenu;
+import com.android.settingslib.wrapper.PackageManagerWrapper;
 
 import java.util.Objects;
 
diff --git a/src/com/android/settings/deviceinfo/StorageDashboardFragment.java b/src/com/android/settings/deviceinfo/StorageDashboardFragment.java
index dd0db9a..935e180 100644
--- a/src/com/android/settings/deviceinfo/StorageDashboardFragment.java
+++ b/src/com/android/settings/deviceinfo/StorageDashboardFragment.java
@@ -35,9 +35,6 @@
 import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.R;
 import com.android.settings.Utils;
-import com.android.settings.applications.PackageManagerWrapperImpl;
-import com.android.settings.applications.UserManagerWrapper;
-import com.android.settings.applications.UserManagerWrapperImpl;
 import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.deviceinfo.storage.AutomaticStorageManagementSwitchPreferenceController;
 import com.android.settings.deviceinfo.storage.CachedStorageValuesHelper;
@@ -49,10 +46,12 @@
 import com.android.settings.deviceinfo.storage.VolumeSizesLoader;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.search.Indexable;
+import com.android.settings.wrapper.UserManagerWrapper;
 import com.android.settingslib.applications.StorageStatsSource;
 import com.android.settingslib.core.AbstractPreferenceController;
 import com.android.settingslib.deviceinfo.PrivateStorageInfo;
 import com.android.settingslib.deviceinfo.StorageManagerVolumeProvider;
+import com.android.settingslib.wrapper.PackageManagerWrapper;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -95,7 +94,7 @@
     @VisibleForTesting
     void initializeOptionsMenu(Activity activity) {
         mOptionMenuController = new PrivateVolumeOptionMenuController(
-                activity, mVolume, new PackageManagerWrapperImpl(activity.getPackageManager()));
+                activity, mVolume, new PackageManagerWrapper(activity.getPackageManager()));
         getLifecycle().addObserver(mOptionMenuController);
         setHasOptionsMenu(true);
         activity.invalidateOptionsMenu();
@@ -178,7 +177,7 @@
         controllers.add(mPreferenceController);
 
         UserManagerWrapper userManager =
-                new UserManagerWrapperImpl(context.getSystemService(UserManager.class));
+                new UserManagerWrapper(context.getSystemService(UserManager.class));
         mSecondaryUsers = SecondaryUserController.getSecondaryUserControllers(context, userManager);
         controllers.addAll(mSecondaryUsers);
 
@@ -227,7 +226,7 @@
                 public List<AbstractPreferenceController> getPreferenceControllers(Context context) {
                     final StorageManager sm = context.getSystemService(StorageManager.class);
                     final UserManagerWrapper userManager =
-                            new UserManagerWrapperImpl(context.getSystemService(UserManager.class));
+                            new UserManagerWrapper(context.getSystemService(UserManager.class));
                     final List<AbstractPreferenceController> controllers = new ArrayList<>();
                     controllers.add(new StorageSummaryDonutPreferenceController(context));
                     controllers.add(new StorageItemPreferenceController(context, null /* host */,
@@ -244,10 +243,10 @@
             Bundle args) {
         Context context = getContext();
         return new StorageAsyncLoader(context,
-                new UserManagerWrapperImpl(context.getSystemService(UserManager.class)),
+                new UserManagerWrapper(context.getSystemService(UserManager.class)),
                 mVolume.fsUuid,
                 new StorageStatsSource(context),
-                new PackageManagerWrapperImpl(context.getPackageManager()));
+                new PackageManagerWrapper(context.getPackageManager()));
     }
 
     @Override
diff --git a/src/com/android/settings/deviceinfo/StorageProfileFragment.java b/src/com/android/settings/deviceinfo/StorageProfileFragment.java
index 9f3ce0c..f2383de 100644
--- a/src/com/android/settings/deviceinfo/StorageProfileFragment.java
+++ b/src/com/android/settings/deviceinfo/StorageProfileFragment.java
@@ -30,15 +30,15 @@
 import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.R;
 import com.android.settings.Utils;
-import com.android.settings.applications.PackageManagerWrapperImpl;
-import com.android.settings.applications.UserManagerWrapperImpl;
 import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.deviceinfo.storage.StorageAsyncLoader;
 import com.android.settings.deviceinfo.storage.StorageAsyncLoader.AppsStorageResult;
 import com.android.settings.deviceinfo.storage.StorageItemPreferenceController;
+import com.android.settings.wrapper.UserManagerWrapper;
 import com.android.settingslib.applications.StorageStatsSource;
 import com.android.settingslib.core.AbstractPreferenceController;
 import com.android.settingslib.deviceinfo.StorageManagerVolumeProvider;
+import com.android.settingslib.wrapper.PackageManagerWrapper;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -116,10 +116,10 @@
     public Loader<SparseArray<AppsStorageResult>> onCreateLoader(int id, Bundle args) {
         Context context = getContext();
         return new StorageAsyncLoader(context,
-                new UserManagerWrapperImpl(context.getSystemService(UserManager.class)),
+                new UserManagerWrapper(context.getSystemService(UserManager.class)),
                 mVolume.fsUuid,
                 new StorageStatsSource(context),
-                new PackageManagerWrapperImpl(context.getPackageManager()));
+                new PackageManagerWrapper(context.getPackageManager()));
     }
 
     @Override
diff --git a/src/com/android/settings/deviceinfo/storage/SecondaryUserController.java b/src/com/android/settings/deviceinfo/storage/SecondaryUserController.java
index 3c69ab1..4aeb782 100644
--- a/src/com/android/settings/deviceinfo/storage/SecondaryUserController.java
+++ b/src/com/android/settings/deviceinfo/storage/SecondaryUserController.java
@@ -27,9 +27,9 @@
 import android.util.SparseArray;
 
 import com.android.settings.Utils;
-import com.android.settings.applications.UserManagerWrapper;
 import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settings.deviceinfo.StorageItemPreference;
+import com.android.settings.wrapper.UserManagerWrapper;
 import com.android.settingslib.core.AbstractPreferenceController;
 
 import java.util.ArrayList;
diff --git a/src/com/android/settings/deviceinfo/storage/StorageAsyncLoader.java b/src/com/android/settings/deviceinfo/storage/StorageAsyncLoader.java
index f92a24e..2ce53f6 100644
--- a/src/com/android/settings/deviceinfo/storage/StorageAsyncLoader.java
+++ b/src/com/android/settings/deviceinfo/storage/StorageAsyncLoader.java
@@ -30,10 +30,10 @@
 import android.util.Log;
 import android.util.SparseArray;
 
-import com.android.settings.applications.PackageManagerWrapper;
-import com.android.settings.applications.UserManagerWrapper;
 import com.android.settings.utils.AsyncLoader;
+import com.android.settings.wrapper.UserManagerWrapper;
 import com.android.settingslib.applications.StorageStatsSource;
+import com.android.settingslib.wrapper.PackageManagerWrapper;
 
 import java.io.IOException;
 import java.util.Collections;
diff --git a/src/com/android/settings/deviceinfo/storage/UserProfileController.java b/src/com/android/settings/deviceinfo/storage/UserProfileController.java
index cf1e360..4870e7e 100644
--- a/src/com/android/settings/deviceinfo/storage/UserProfileController.java
+++ b/src/com/android/settings/deviceinfo/storage/UserProfileController.java
@@ -30,10 +30,10 @@
 import com.android.internal.logging.nano.MetricsProto;
 import com.android.internal.util.Preconditions;
 import com.android.settings.Utils;
-import com.android.settings.applications.UserManagerWrapper;
 import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settings.deviceinfo.StorageItemPreference;
 import com.android.settings.deviceinfo.StorageProfileFragment;
+import com.android.settings.wrapper.UserManagerWrapper;
 import com.android.settingslib.core.AbstractPreferenceController;
 import com.android.settingslib.drawer.SettingsDrawerActivity;
 
diff --git a/src/com/android/settings/display/BrightnessLevelPreferenceController.java b/src/com/android/settings/display/BrightnessLevelPreferenceController.java
index e1461dc..f9c9d53 100644
--- a/src/com/android/settings/display/BrightnessLevelPreferenceController.java
+++ b/src/com/android/settings/display/BrightnessLevelPreferenceController.java
@@ -31,6 +31,7 @@
 import android.util.Log;
 
 import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settings.wrapper.PowerManagerWrapper;
 import com.android.settingslib.core.AbstractPreferenceController;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
diff --git a/src/com/android/settings/enterprise/DevicePolicyManagerWrapperImpl.java b/src/com/android/settings/enterprise/DevicePolicyManagerWrapperImpl.java
deleted file mode 100644
index 69ee272..0000000
--- a/src/com/android/settings/enterprise/DevicePolicyManagerWrapperImpl.java
+++ /dev/null
@@ -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);
-    }
-}
diff --git a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java
index 159f57b..9217001 100644
--- a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java
+++ b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java
@@ -30,9 +30,10 @@
 import android.view.View;
 
 import com.android.settings.R;
-import com.android.settings.applications.PackageManagerWrapper;
-import com.android.settings.vpn2.ConnectivityManagerWrapper;
 import com.android.settings.vpn2.VpnUtils;
+import com.android.settings.wrapper.ConnectivityManagerWrapper;
+import com.android.settings.wrapper.DevicePolicyManagerWrapper;
+import com.android.settingslib.wrapper.PackageManagerWrapper;
 
 import java.util.Date;
 import java.util.List;
diff --git a/src/com/android/settings/fingerprint/FingerprintEnrollSidecar.java b/src/com/android/settings/fingerprint/FingerprintEnrollSidecar.java
index 9ab561d..20bb13b 100644
--- a/src/com/android/settings/fingerprint/FingerprintEnrollSidecar.java
+++ b/src/com/android/settings/fingerprint/FingerprintEnrollSidecar.java
@@ -29,8 +29,7 @@
 import com.android.settings.Utils;
 import com.android.settings.core.InstrumentedFragment;
 import com.android.settings.password.ChooseLockSettingsHelper;
-
-import com.android.settings.password.IFingerprintManager;
+import com.android.settings.wrapper.FingerprintManagerWrapper;
 
 import java.util.ArrayList;
 
@@ -48,7 +47,7 @@
     private byte[] mToken;
     private boolean mDone;
     private int mUserId;
-    private IFingerprintManager mFingerprintManager;
+    private FingerprintManagerWrapper mFingerprintManager;
     private ArrayList<QueuedEvent> mQueuedEvents;
 
     private abstract class QueuedEvent {
diff --git a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
index 66a0ca2..d96db68 100644
--- a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
+++ b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
@@ -45,8 +45,7 @@
 import com.android.settings.Utils;
 import com.android.settings.applications.LayoutPreference;
 import com.android.settings.dashboard.DashboardFragment;
-import com.android.settings.enterprise.DevicePolicyManagerWrapper;
-import com.android.settings.enterprise.DevicePolicyManagerWrapperImpl;
+import com.android.settings.wrapper.DevicePolicyManagerWrapper;
 import com.android.settings.fuelgauge.anomaly.Anomaly;
 import com.android.settings.fuelgauge.anomaly.AnomalyDialogFragment;
 import com.android.settings.fuelgauge.anomaly.AnomalyLoader;
@@ -194,7 +193,7 @@
         super.onAttach(activity);
 
         mState = ApplicationsState.getInstance(getActivity().getApplication());
-        mDpm = new DevicePolicyManagerWrapperImpl(
+        mDpm = new DevicePolicyManagerWrapper(
                 (DevicePolicyManager) activity.getSystemService(Context.DEVICE_POLICY_SERVICE));
         mUserManager = (UserManager) activity.getSystemService(Context.USER_SERVICE);
         mPackageManager = activity.getPackageManager();
diff --git a/src/com/android/settings/fuelgauge/AppButtonsPreferenceController.java b/src/com/android/settings/fuelgauge/AppButtonsPreferenceController.java
index 0d5bed8..20acee9 100644
--- a/src/com/android/settings/fuelgauge/AppButtonsPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/AppButtonsPreferenceController.java
@@ -50,9 +50,9 @@
 import com.android.settings.Utils;
 import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settings.core.instrumentation.MetricsFeatureProvider;
-import com.android.settings.enterprise.DevicePolicyManagerWrapper;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.widget.ActionButtonPreference;
+import com.android.settings.wrapper.DevicePolicyManagerWrapper;
 import com.android.settingslib.RestrictedLockUtils;
 import com.android.settingslib.applications.AppUtils;
 import com.android.settingslib.applications.ApplicationsState;
diff --git a/src/com/android/settings/fuelgauge/BackgroundActivityPreferenceController.java b/src/com/android/settings/fuelgauge/BackgroundActivityPreferenceController.java
index cea6d16..14aba85 100644
--- a/src/com/android/settings/fuelgauge/BackgroundActivityPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/BackgroundActivityPreferenceController.java
@@ -35,8 +35,7 @@
 import com.android.settings.Utils;
 import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
-import com.android.settings.enterprise.DevicePolicyManagerWrapper;
-import com.android.settings.enterprise.DevicePolicyManagerWrapperImpl;
+import com.android.settings.wrapper.DevicePolicyManagerWrapper;
 import com.android.settingslib.core.AbstractPreferenceController;
 
 /**
@@ -71,7 +70,7 @@
         mPowerWhitelistBackend = backend;
         mPackageManager = context.getPackageManager();
         mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
-        mDpm = new DevicePolicyManagerWrapperImpl(
+        mDpm = new DevicePolicyManagerWrapper(
                 (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE));
         mAppOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
         mUid = uid;
diff --git a/src/com/android/settings/fuelgauge/anomaly/AnomalyDetectionPolicy.java b/src/com/android/settings/fuelgauge/anomaly/AnomalyDetectionPolicy.java
index 4829ca0..57f0ab4 100644
--- a/src/com/android/settings/fuelgauge/anomaly/AnomalyDetectionPolicy.java
+++ b/src/com/android/settings/fuelgauge/anomaly/AnomalyDetectionPolicy.java
@@ -23,6 +23,8 @@
 import android.util.KeyValueListParser;
 import android.util.Log;
 
+import com.android.settings.wrapper.KeyValueListParserWrapper;
+
 /**
  * Class to store the policy for anomaly detection, which comes from
  * {@link android.provider.Settings.Global}
@@ -104,7 +106,7 @@
     private final KeyValueListParserWrapper mParserWrapper;
 
     public AnomalyDetectionPolicy(Context context) {
-        this(context, new KeyValueListParserWrapperImpl(new KeyValueListParser(',')));
+        this(context, new KeyValueListParserWrapper(new KeyValueListParser(',')));
     }
 
     @VisibleForTesting
diff --git a/src/com/android/settings/fuelgauge/anomaly/KeyValueListParserWrapperImpl.java b/src/com/android/settings/fuelgauge/anomaly/KeyValueListParserWrapperImpl.java
deleted file mode 100644
index f724034..0000000
--- a/src/com/android/settings/fuelgauge/anomaly/KeyValueListParserWrapperImpl.java
+++ /dev/null
@@ -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);
-    }
-}
diff --git a/src/com/android/settings/network/MobileNetworkPreferenceController.java b/src/com/android/settings/network/MobileNetworkPreferenceController.java
index 6e2c2d5..1199400 100644
--- a/src/com/android/settings/network/MobileNetworkPreferenceController.java
+++ b/src/com/android/settings/network/MobileNetworkPreferenceController.java
@@ -26,6 +26,7 @@
 
 import com.android.settings.Utils;
 import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settings.wrapper.RestrictedLockUtilsWrapper;
 import com.android.settingslib.core.AbstractPreferenceController;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnPause;
diff --git a/src/com/android/settings/network/NetworkScorerPicker.java b/src/com/android/settings/network/NetworkScorerPicker.java
index 1280cf5..187c9ce 100644
--- a/src/com/android/settings/network/NetworkScorerPicker.java
+++ b/src/com/android/settings/network/NetworkScorerPicker.java
@@ -30,6 +30,7 @@
 import com.android.settings.R;
 import com.android.settings.core.InstrumentedPreferenceFragment;
 import com.android.settings.widget.RadioButtonPreference;
+import com.android.settings.wrapper.NetworkScoreManagerWrapper;
 
 import java.util.List;
 
diff --git a/src/com/android/settings/network/NetworkScorerPickerPreferenceController.java b/src/com/android/settings/network/NetworkScorerPickerPreferenceController.java
index 8d4ea63..e25e62d 100644
--- a/src/com/android/settings/network/NetworkScorerPickerPreferenceController.java
+++ b/src/com/android/settings/network/NetworkScorerPickerPreferenceController.java
@@ -21,6 +21,7 @@
 
 import com.android.settings.R;
 import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settings.wrapper.NetworkScoreManagerWrapper;
 import com.android.settingslib.core.AbstractPreferenceController;
 
 import java.util.List;
diff --git a/src/com/android/settings/overlay/FeatureFactoryImpl.java b/src/com/android/settings/overlay/FeatureFactoryImpl.java
index 36c3bc9..d3fca68 100644
--- a/src/com/android/settings/overlay/FeatureFactoryImpl.java
+++ b/src/com/android/settings/overlay/FeatureFactoryImpl.java
@@ -25,8 +25,6 @@
 
 import com.android.settings.applications.ApplicationFeatureProvider;
 import com.android.settings.applications.ApplicationFeatureProviderImpl;
-import com.android.settings.applications.IPackageManagerWrapperImpl;
-import com.android.settings.applications.PackageManagerWrapperImpl;
 import com.android.settings.bluetooth.BluetoothFeatureProvider;
 import com.android.settings.bluetooth.BluetoothFeatureProviderImpl;
 import com.android.settings.connecteddevice.SmsMirroringFeatureProvider;
@@ -38,7 +36,6 @@
 import com.android.settings.dashboard.suggestions.SuggestionFeatureProviderImpl;
 import com.android.settings.datausage.DataPlanFeatureProvider;
 import com.android.settings.datausage.DataPlanFeatureProviderImpl;
-import com.android.settings.enterprise.DevicePolicyManagerWrapperImpl;
 import com.android.settings.enterprise.EnterprisePrivacyFeatureProvider;
 import com.android.settings.enterprise.EnterprisePrivacyFeatureProviderImpl;
 import com.android.settings.fuelgauge.PowerUsageFeatureProvider;
@@ -53,7 +50,10 @@
 import com.android.settings.security.SecurityFeatureProviderImpl;
 import com.android.settings.users.UserFeatureProvider;
 import com.android.settings.users.UserFeatureProviderImpl;
-import com.android.settings.vpn2.ConnectivityManagerWrapperImpl;
+import com.android.settings.wrapper.ConnectivityManagerWrapper;
+import com.android.settings.wrapper.DevicePolicyManagerWrapper;
+import com.android.settings.wrapper.IPackageManagerWrapper;
+import com.android.settingslib.wrapper.PackageManagerWrapper;
 
 /**
  * {@link FeatureFactory} implementation for AOSP Settings.
@@ -109,9 +109,9 @@
     public ApplicationFeatureProvider getApplicationFeatureProvider(Context context) {
         if (mApplicationFeatureProvider == null) {
             mApplicationFeatureProvider = new ApplicationFeatureProviderImpl(context,
-                    new PackageManagerWrapperImpl(context.getPackageManager()),
-                    new IPackageManagerWrapperImpl(AppGlobals.getPackageManager()),
-                    new DevicePolicyManagerWrapperImpl((DevicePolicyManager) context
+                    new PackageManagerWrapper(context.getPackageManager()),
+                    new IPackageManagerWrapper(AppGlobals.getPackageManager()),
+                    new DevicePolicyManagerWrapper((DevicePolicyManager) context
                             .getSystemService(Context.DEVICE_POLICY_SERVICE)));
         }
         return mApplicationFeatureProvider;
@@ -129,11 +129,11 @@
     public EnterprisePrivacyFeatureProvider getEnterprisePrivacyFeatureProvider(Context context) {
         if (mEnterprisePrivacyFeatureProvider == null) {
             mEnterprisePrivacyFeatureProvider = new EnterprisePrivacyFeatureProviderImpl(context,
-                    new DevicePolicyManagerWrapperImpl((DevicePolicyManager) context
+                    new DevicePolicyManagerWrapper((DevicePolicyManager) context
                             .getSystemService(Context.DEVICE_POLICY_SERVICE)),
-                    new PackageManagerWrapperImpl(context.getPackageManager()),
+                    new PackageManagerWrapper(context.getPackageManager()),
                     UserManager.get(context),
-                    new ConnectivityManagerWrapperImpl((ConnectivityManager) context
+                    new ConnectivityManagerWrapper((ConnectivityManager) context
                             .getSystemService(Context.CONNECTIVITY_SERVICE)),
                     context.getResources());
         }
diff --git a/src/com/android/settings/password/IFingerprintManager.java b/src/com/android/settings/password/IFingerprintManager.java
deleted file mode 100644
index 9402146..0000000
--- a/src/com/android/settings/password/IFingerprintManager.java
+++ /dev/null
@@ -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);
-}
diff --git a/src/com/android/settings/password/SetNewPasswordController.java b/src/com/android/settings/password/SetNewPasswordController.java
index 57aa8c1..a974da4 100644
--- a/src/com/android/settings/password/SetNewPasswordController.java
+++ b/src/com/android/settings/password/SetNewPasswordController.java
@@ -36,6 +36,7 @@
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.widget.LockPatternUtils;
 import com.android.settings.Utils;
+import com.android.settings.wrapper.FingerprintManagerWrapper;
 
 /**
  * Business logic for {@link SetNewPasswordActivity}.
@@ -56,7 +57,7 @@
      */
     private final int mTargetUserId;
     private final PackageManager mPackageManager;
-    @Nullable private final IFingerprintManager mFingerprintManager;
+    @Nullable private final FingerprintManagerWrapper mFingerprintManager;
     private final DevicePolicyManager mDevicePolicyManager;
     private final Ui mUi;
 
@@ -77,7 +78,7 @@
         }
         // Create a wrapper of FingerprintManager for testing, see IFingerPrintManager for details.
         final FingerprintManager fingerprintManager = Utils.getFingerprintManagerOrNull(context);
-        final IFingerprintManager fingerprintManagerWrapper =
+        final FingerprintManagerWrapper fingerprintManagerWrapper =
                 fingerprintManager == null
                         ? null
                         : new FingerprintManagerWrapper(fingerprintManager);
@@ -91,7 +92,7 @@
     SetNewPasswordController(
             int targetUserId,
             PackageManager packageManager,
-            IFingerprintManager fingerprintManager,
+            FingerprintManagerWrapper fingerprintManager,
             DevicePolicyManager devicePolicyManager,
             Ui ui) {
         mTargetUserId = targetUserId;
diff --git a/src/com/android/settings/search/InstalledAppResultLoader.java b/src/com/android/settings/search/InstalledAppResultLoader.java
index 9d80b73..69a4693 100644
--- a/src/com/android/settings/search/InstalledAppResultLoader.java
+++ b/src/com/android/settings/search/InstalledAppResultLoader.java
@@ -34,9 +34,9 @@
 import com.android.settings.R;
 import com.android.settings.SettingsActivity;
 import com.android.settings.applications.ManageApplications;
-import com.android.settings.applications.PackageManagerWrapper;
 import com.android.settings.dashboard.SiteMapManager;
 import com.android.settings.utils.AsyncLoader;
+import com.android.settingslib.wrapper.PackageManagerWrapper;
 
 import java.util.ArrayList;
 import java.util.HashSet;
diff --git a/src/com/android/settings/search/SearchFeatureProviderImpl.java b/src/com/android/settings/search/SearchFeatureProviderImpl.java
index 69c086f..420b847 100644
--- a/src/com/android/settings/search/SearchFeatureProviderImpl.java
+++ b/src/com/android/settings/search/SearchFeatureProviderImpl.java
@@ -21,9 +21,9 @@
 import android.text.TextUtils;
 import android.util.Log;
 
-import com.android.settings.applications.PackageManagerWrapperImpl;
 import com.android.settings.dashboard.SiteMapManager;
 import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.wrapper.PackageManagerWrapper;
 
 /**
  * FeatureProvider for the refactored search code.
@@ -50,7 +50,7 @@
     @Override
     public InstalledAppResultLoader getInstalledAppSearchLoader(Context context, String query) {
         return new InstalledAppResultLoader(
-                context, new PackageManagerWrapperImpl(context.getPackageManager()),
+                context, new PackageManagerWrapper(context.getPackageManager()),
                 cleanQuery(query), getSiteMapManager());
     }
 
diff --git a/src/com/android/settings/vpn2/ConnectivityManagerWrapperImpl.java b/src/com/android/settings/vpn2/ConnectivityManagerWrapperImpl.java
deleted file mode 100644
index f742cd2..0000000
--- a/src/com/android/settings/vpn2/ConnectivityManagerWrapperImpl.java
+++ /dev/null
@@ -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);
-    }
-}
diff --git a/src/com/android/settings/vpn2/VpnUtils.java b/src/com/android/settings/vpn2/VpnUtils.java
index a36cce8..1aa4ada 100644
--- a/src/com/android/settings/vpn2/VpnUtils.java
+++ b/src/com/android/settings/vpn2/VpnUtils.java
@@ -27,6 +27,7 @@
 
 import com.android.internal.net.LegacyVpnInfo;
 import com.android.internal.net.VpnConfig;
+import com.android.settings.wrapper.ConnectivityManagerWrapper;
 
 /**
  * Utility functions for vpn.
diff --git a/src/com/android/settings/webview/WebViewAppPicker.java b/src/com/android/settings/webview/WebViewAppPicker.java
index 380b964..362ca1f 100644
--- a/src/com/android/settings/webview/WebViewAppPicker.java
+++ b/src/com/android/settings/webview/WebViewAppPicker.java
@@ -30,9 +30,10 @@
 
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
-import com.android.settings.applications.PackageManagerWrapper;
 import com.android.settings.applications.defaultapps.DefaultAppInfo;
 import com.android.settings.applications.defaultapps.DefaultAppPickerFragment;
+import com.android.settings.wrapper.UserPackageWrapper;
+import com.android.settingslib.wrapper.PackageManagerWrapper;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/src/com/android/settings/webview/WebViewUpdateServiceWrapper.java b/src/com/android/settings/webview/WebViewUpdateServiceWrapper.java
index b40be19..e4eb0fc 100644
--- a/src/com/android/settings/webview/WebViewUpdateServiceWrapper.java
+++ b/src/com/android/settings/webview/WebViewUpdateServiceWrapper.java
@@ -28,6 +28,8 @@
 import android.widget.Toast;
 
 import com.android.settings.R;
+import com.android.settings.wrapper.UserPackageWrapper;
+import com.android.settings.wrapper.UserPackageWrapperImpl;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/src/com/android/settings/wifi/ConfigureWifiSettings.java b/src/com/android/settings/wifi/ConfigureWifiSettings.java
index 4199a6d..3c70048 100644
--- a/src/com/android/settings/wifi/ConfigureWifiSettings.java
+++ b/src/com/android/settings/wifi/ConfigureWifiSettings.java
@@ -28,12 +28,12 @@
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
 import com.android.settings.dashboard.DashboardFragment;
-import com.android.settings.network.NetworkScoreManagerWrapper;
 import com.android.settings.network.NetworkScorerPickerPreferenceController;
 import com.android.settings.network.WifiCallingPreferenceController;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.search.Indexable;
 import com.android.settings.wifi.p2p.WifiP2pPreferenceController;
+import com.android.settings.wrapper.NetworkScoreManagerWrapper;
 import com.android.settingslib.core.AbstractPreferenceController;
 
 import java.util.ArrayList;
diff --git a/src/com/android/settings/wifi/ConnectivityManagerWrapper.java b/src/com/android/settings/wifi/ConnectivityManagerWrapper.java
deleted file mode 100644
index 7317666..0000000
--- a/src/com/android/settings/wifi/ConnectivityManagerWrapper.java
+++ /dev/null
@@ -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);
-    }
-}
diff --git a/src/com/android/settings/wifi/UseOpenWifiPreferenceController.java b/src/com/android/settings/wifi/UseOpenWifiPreferenceController.java
index d44c8a9..c563fce 100644
--- a/src/com/android/settings/wifi/UseOpenWifiPreferenceController.java
+++ b/src/com/android/settings/wifi/UseOpenWifiPreferenceController.java
@@ -21,7 +21,7 @@
 
 import com.android.settings.R;
 import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settings.network.NetworkScoreManagerWrapper;
+import com.android.settings.wrapper.NetworkScoreManagerWrapper;
 import com.android.settingslib.core.AbstractPreferenceController;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
diff --git a/src/com/android/settings/wifi/WifiEnabler.java b/src/com/android/settings/wifi/WifiEnabler.java
index 7718898..9c43142 100644
--- a/src/com/android/settings/wifi/WifiEnabler.java
+++ b/src/com/android/settings/wifi/WifiEnabler.java
@@ -35,6 +35,7 @@
 import com.android.settings.R;
 import com.android.settings.core.instrumentation.MetricsFeatureProvider;
 import com.android.settings.widget.SwitchWidgetController;
+import com.android.settings.wrapper.ConnectivityManagerWrapper;
 import com.android.settingslib.RestrictedLockUtils;
 import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
 import com.android.settingslib.WirelessUtils;
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index f3b08bf..bc302b9 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -65,6 +65,7 @@
 import com.android.settings.widget.SummaryUpdater.OnSummaryChangeListener;
 import com.android.settings.widget.SwitchBarController;
 import com.android.settings.wifi.details.WifiNetworkDetailsFragment;
+import com.android.settings.wrapper.WifiManagerWrapper;
 import com.android.settingslib.RestrictedLockUtils;
 import com.android.settingslib.wifi.AccessPoint;
 import com.android.settingslib.wifi.AccessPoint.AccessPointListener;
diff --git a/src/com/android/settings/wifi/WifiWakeupPreferenceController.java b/src/com/android/settings/wifi/WifiWakeupPreferenceController.java
index efb8aa6..a3170c0 100644
--- a/src/com/android/settings/wifi/WifiWakeupPreferenceController.java
+++ b/src/com/android/settings/wifi/WifiWakeupPreferenceController.java
@@ -29,7 +29,7 @@
 
 import com.android.settings.R;
 import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settings.network.NetworkScoreManagerWrapper;
+import com.android.settings.wrapper.NetworkScoreManagerWrapper;
 import com.android.settingslib.core.AbstractPreferenceController;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
diff --git a/src/com/android/settings/wifi/WriteWifiConfigToNfcDialog.java b/src/com/android/settings/wifi/WriteWifiConfigToNfcDialog.java
index 52871f6..dfed801 100644
--- a/src/com/android/settings/wifi/WriteWifiConfigToNfcDialog.java
+++ b/src/com/android/settings/wifi/WriteWifiConfigToNfcDialog.java
@@ -20,7 +20,6 @@
 import android.app.AlertDialog;
 import android.content.Context;
 import android.content.DialogInterface;
-import android.net.wifi.WifiManager;
 import android.nfc.FormatException;
 import android.nfc.NdefMessage;
 import android.nfc.NdefRecord;
@@ -43,6 +42,7 @@
 import android.widget.TextView;
 
 import com.android.settings.R;
+import com.android.settings.wrapper.WifiManagerWrapper;
 import com.android.settingslib.wifi.AccessPoint;
 
 import java.io.IOException;
diff --git a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java
index 014fb0f..40acfeb 100644
--- a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java
+++ b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java
@@ -57,12 +57,12 @@
 import com.android.settings.applications.LayoutPreference;
 import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settings.core.instrumentation.MetricsFeatureProvider;
-import com.android.settings.vpn2.ConnectivityManagerWrapper;
 import com.android.settings.widget.ActionButtonPreference;
 import com.android.settings.widget.EntityHeaderController;
 import com.android.settings.wifi.WifiDetailPreference;
 import com.android.settings.wifi.WifiDialog;
 import com.android.settings.wifi.WifiDialog.WifiDialogListener;
+import com.android.settings.wrapper.ConnectivityManagerWrapper;
 import com.android.settingslib.core.AbstractPreferenceController;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
diff --git a/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java b/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java
index 765bebc..1609bef 100644
--- a/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java
+++ b/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java
@@ -31,9 +31,9 @@
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
 import com.android.settings.dashboard.DashboardFragment;
-import com.android.settings.vpn2.ConnectivityManagerWrapperImpl;
 import com.android.settings.wifi.WifiConfigUiBase;
 import com.android.settings.wifi.WifiDialog;
+import com.android.settings.wrapper.ConnectivityManagerWrapper;
 import com.android.settingslib.core.AbstractPreferenceController;
 import com.android.settingslib.wifi.AccessPoint;
 import java.util.ArrayList;
@@ -117,7 +117,7 @@
         ConnectivityManager cm = context.getSystemService(ConnectivityManager.class);
         mWifiDetailPreferenceController = WifiDetailPreferenceController.newInstance(
                 mAccessPoint,
-                new ConnectivityManagerWrapperImpl(cm),
+                new ConnectivityManagerWrapper(cm),
                 context,
                 this,
                 new Handler(Looper.getMainLooper()),  // UI thread.
diff --git a/src/com/android/settings/applications/AccessibilityManagerWrapperImpl.java b/src/com/android/settings/wrapper/AccessibilityManagerWrapper.java
similarity index 92%
rename from src/com/android/settings/applications/AccessibilityManagerWrapperImpl.java
rename to src/com/android/settings/wrapper/AccessibilityManagerWrapper.java
index 4ebaea7..4fd7ccf 100644
--- a/src/com/android/settings/applications/AccessibilityManagerWrapperImpl.java
+++ b/src/com/android/settings/wrapper/AccessibilityManagerWrapper.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.settings.applications;
+package com.android.settings.wrapper;
 
 import android.view.accessibility.AccessibilityManager;
 
@@ -23,7 +23,7 @@
  * The interface exists so that we can use a thin wrapper around the AccessibilityManager in
  * production code and a mock in tests.
  */
-public class AccessibilityManagerWrapperImpl {
+public class AccessibilityManagerWrapper {
 
     /**
      * Determines if the accessibility button within the system navigation area is supported.
diff --git a/src/com/android/settings/applications/AccessibilityServiceInfoWrapper.java b/src/com/android/settings/wrapper/AccessibilityServiceInfoWrapper.java
similarity index 67%
rename from src/com/android/settings/applications/AccessibilityServiceInfoWrapper.java
rename to src/com/android/settings/wrapper/AccessibilityServiceInfoWrapper.java
index 6ce0a4a..c920392 100644
--- a/src/com/android/settings/applications/AccessibilityServiceInfoWrapper.java
+++ b/src/com/android/settings/wrapper/AccessibilityServiceInfoWrapper.java
@@ -14,24 +14,34 @@
  * limitations under the License.
  */
 
-package com.android.settings.applications;
+package com.android.settings.wrapper;
 
 import android.accessibilityservice.AccessibilityServiceInfo;
 import android.content.ComponentName;
 
 /**
- * This interface replicates a subset of the
- * {@link android.accessibilityservice.AccessibilityServiceInfo}. The interface
+ * This class replicates a subset of the
+ * {@link android.accessibilityservice.AccessibilityServiceInfo}. The class
  * exists so that we can use a thin wrapper around it in production code and a mock in tests.
  * We cannot directly mock or shadow it, because some of the methods we rely on are newer than
  * the API version supported by Robolectric.
  */
-public interface AccessibilityServiceInfoWrapper {
+public class AccessibilityServiceInfoWrapper {
+
+    private final AccessibilityServiceInfo mServiceInfo;
+
+    public AccessibilityServiceInfoWrapper(AccessibilityServiceInfo serviceInfo) {
+        mServiceInfo = serviceInfo;
+    }
 
     /**
      * Returns the real {@code AccessibilityServiceInfo} object.
      */
-    AccessibilityServiceInfo getAccessibilityServiceInfo();
+    public AccessibilityServiceInfo getAccessibilityServiceInfo() {
+        return mServiceInfo;
+    }
 
-    ComponentName getComponentName();
+    public ComponentName getComponentName() {
+        return mServiceInfo.getComponentName();
+    }
 }
diff --git a/src/com/android/settings/applications/ActivityInfoWrapperImpl.java b/src/com/android/settings/wrapper/ActivityInfoWrapper.java
similarity index 66%
rename from src/com/android/settings/applications/ActivityInfoWrapperImpl.java
rename to src/com/android/settings/wrapper/ActivityInfoWrapper.java
index b70a1e8..37d0d42 100644
--- a/src/com/android/settings/applications/ActivityInfoWrapperImpl.java
+++ b/src/com/android/settings/wrapper/ActivityInfoWrapper.java
@@ -14,19 +14,26 @@
  * limitations under the License.
  */
 
-package com.android.settings.applications;
+package com.android.settings.wrapper;
 
 import android.content.pm.ActivityInfo;
 
-public class ActivityInfoWrapperImpl implements ActivityInfoWrapper {
+/**
+ * This class replicates a subset of the android.content.pm.ActivityInfo. The class
+ * exists so that we can use a thin wrapper around the ActivityInfo in production code and a mock in
+ * tests.
+ */
+public class ActivityInfoWrapper {
 
     private final ActivityInfo mInfo;
 
-    public ActivityInfoWrapperImpl(ActivityInfo info) {
+    public ActivityInfoWrapper(ActivityInfo info) {
         mInfo = info;
     }
 
-    @Override
+    /**
+     * Returns whether this activity supports picture-in-picture.
+     */
     public boolean supportsPictureInPicture() {
         return mInfo.supportsPictureInPicture();
     }
diff --git a/src/com/android/settings/applications/AutofillManagerWrapper.java b/src/com/android/settings/wrapper/AutofillManagerWrapper.java
similarity index 61%
rename from src/com/android/settings/applications/AutofillManagerWrapper.java
rename to src/com/android/settings/wrapper/AutofillManagerWrapper.java
index 04091b0..57c9375 100644
--- a/src/com/android/settings/applications/AutofillManagerWrapper.java
+++ b/src/com/android/settings/wrapper/AutofillManagerWrapper.java
@@ -14,28 +14,46 @@
  * limitations under the License.
  */
 
-package com.android.settings.applications;
+package com.android.settings.wrapper;
 
 import android.view.autofill.AutofillManager;
 
 /**
- * This interface replicates a subset of the android.view.autofill.AutofillManager (AFM). The
- * interface exists so that we can use a thin wrapper around the AFM in production code and a mock
+ * This class replicates a subset of the android.view.autofill.AutofillManager (AFM). The
+ * class exists so that we can use a thin wrapper around the AFM in production code and a mock
  * in tests. We cannot directly mock or shadow the AFM, because some of the methods we rely on are
  * newer than the API version supported by Robolectric.
  */
-public interface AutofillManagerWrapper {
+public class AutofillManagerWrapper {
+    private final AutofillManager mAfm;
+
+    public AutofillManagerWrapper(AutofillManager afm) {
+        mAfm = afm;
+    }
+
     /**
      * Calls {@code AutofillManager.hasAutofillFeature()}.
      *
      * @see AutofillManager#hasAutofillFeature
      */
-    public boolean hasAutofillFeature();
+    public boolean hasAutofillFeature() {
+        if (mAfm == null) {
+            return false;
+        }
+
+        return mAfm.hasAutofillFeature();
+    }
 
     /**
      * Calls {@code AutofillManager.isAutofillSupported()}.
      *
      * @see AutofillManager#isAutofillSupported
      */
-    public boolean isAutofillSupported();
+    public boolean isAutofillSupported() {
+        if (mAfm == null) {
+            return false;
+        }
+
+        return mAfm.isAutofillSupported();
+    }
 }
diff --git a/src/com/android/settings/vpn2/ConnectivityManagerWrapper.java b/src/com/android/settings/wrapper/ConnectivityManagerWrapper.java
similarity index 72%
rename from src/com/android/settings/vpn2/ConnectivityManagerWrapper.java
rename to src/com/android/settings/wrapper/ConnectivityManagerWrapper.java
index 9e20c9d..c80a97b 100644
--- a/src/com/android/settings/vpn2/ConnectivityManagerWrapper.java
+++ b/src/com/android/settings/wrapper/ConnectivityManagerWrapper.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.settings.vpn2;
+package com.android.settings.wrapper;
 
 import android.net.ConnectivityManager;
 import android.net.ConnectivityManager.NetworkCallback;
@@ -24,31 +24,43 @@
 import android.net.ProxyInfo;
 
 /**
- * This interface replicates a subset of the android.net.ConnectivityManager (CM). The interface
+ * This class replicates a subset of the android.net.ConnectivityManager (CM). The class
  * exists so that we can use a thin wrapper around the CM in production code and a mock in tests.
  * We cannot directly mock or shadow the CM, because some of the methods we rely on are marked as
  * hidden and are thus invisible to Robolectric.
  */
-public interface ConnectivityManagerWrapper {
+public class ConnectivityManagerWrapper {
+
+    private final ConnectivityManager mCm;
+
+    public ConnectivityManagerWrapper(ConnectivityManager cm) {
+        mCm = cm;
+    }
 
     /**
      * Returns the real ConnectivityManager object wrapped by this wrapper.
      */
-    public ConnectivityManager getConnectivityManager();
+    public ConnectivityManager getConnectivityManager() {
+        return mCm;
+    }
 
     /**
      * Calls {@code ConnectivityManager.getAlwaysOnVpnPackageForUser()}.
      *
      * @see android.net.ConnectivityManager#getAlwaysOnVpnPackageForUser
      */
-   String getAlwaysOnVpnPackageForUser(int userId);
+    public String getAlwaysOnVpnPackageForUser(int userId) {
+        return mCm.getAlwaysOnVpnPackageForUser(userId);
+    }
 
     /**
      * Calls {@code ConnectivityManager.getGlobalProxy()}.
      *
      * @see android.net.ConnectivityManager#getGlobalProxy
      */
-   ProxyInfo getGlobalProxy();
+    public ProxyInfo getGlobalProxy() {
+        return mCm.getGlobalProxy();
+    }
 
     /**
      * Calls {@code ConnectivityManager.registerNetworkCallback()}.
@@ -60,7 +72,9 @@
      * @see android.net.ConnectivityManager#registerNetworkCallback(NetworkRequest,NetworkCallback,Handler)
      */
     public void registerNetworkCallback(NetworkRequest request, NetworkCallback callback,
-            Handler handler);
+            Handler handler) {
+        mCm.registerNetworkCallback(request, callback, handler);
+    }
 
     /**
      * Calls {@code ConnectivityManager.startCaptivePortalApp()}.
@@ -71,5 +85,14 @@
      *
      * @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);
+    }
 }
diff --git a/src/com/android/settings/enterprise/DevicePolicyManagerWrapper.java b/src/com/android/settings/wrapper/DevicePolicyManagerWrapper.java
similarity index 60%
rename from src/com/android/settings/enterprise/DevicePolicyManagerWrapper.java
rename to src/com/android/settings/wrapper/DevicePolicyManagerWrapper.java
index ede241a..ed2eb46 100644
--- a/src/com/android/settings/enterprise/DevicePolicyManagerWrapper.java
+++ b/src/com/android/settings/wrapper/DevicePolicyManagerWrapper.java
@@ -14,9 +14,10 @@
  * limitations under the License.
  */
 
-package com.android.settings.enterprise;
+package com.android.settings.wrapper;
 
 import android.annotation.NonNull;
+import android.app.admin.DevicePolicyManager;
 import android.content.ComponentName;
 import android.content.Intent;
 import android.os.UserHandle;
@@ -25,137 +26,178 @@
 import java.util.List;
 
 /**
- * This interface replicates a subset of the android.app.admin.DevicePolicyManager (DPM). The
- * interface exists so that we can use a thin wrapper around the DPM in production code and a mock
+ * This class replicates a subset of the android.app.admin.DevicePolicyManager (DPM). The
+ * class exists so that we can use a thin wrapper around the DPM in production code and a mock
  * in tests. We cannot directly mock or shadow the DPM, because some of the methods we rely on are
  * newer than the API version supported by Robolectric.
  */
-public interface DevicePolicyManagerWrapper {
+public class DevicePolicyManagerWrapper {
+    private final DevicePolicyManager mDpm;
+
+    public DevicePolicyManagerWrapper(DevicePolicyManager dpm) {
+        mDpm = dpm;
+    }
+
     /**
      * Calls {@code DevicePolicyManager.getActiveAdminsAsUser()}.
      *
      * @see android.app.admin.DevicePolicyManager#getActiveAdminsAsUser
      */
-    public @Nullable List<ComponentName> getActiveAdminsAsUser(int userId);
+    public @Nullable List<ComponentName> getActiveAdminsAsUser(int userId) {
+        return mDpm.getActiveAdminsAsUser(userId);
+    }
 
     /**
      * Calls {@code DevicePolicyManager.getMaximumFailedPasswordsForWipe()}.
      *
      * @see android.app.admin.DevicePolicyManager#getMaximumFailedPasswordsForWipe
      */
-    int getMaximumFailedPasswordsForWipe(@Nullable ComponentName admin, int userHandle);
+    public int getMaximumFailedPasswordsForWipe(@Nullable ComponentName admin, int userHandle) {
+        return mDpm.getMaximumFailedPasswordsForWipe(admin, userHandle);
+    }
 
     /**
      * Calls {@code DevicePolicyManager.getDeviceOwnerComponentOnCallingUser()}.
      *
      * @see android.app.admin.DevicePolicyManager#getDeviceOwnerComponentOnCallingUser
      */
-    ComponentName getDeviceOwnerComponentOnCallingUser();
+    public ComponentName getDeviceOwnerComponentOnCallingUser() {
+        return mDpm.getDeviceOwnerComponentOnCallingUser();
+    }
 
     /**
      * Calls {@code DevicePolicyManager.getDeviceOwnerComponentOnAnyUser()}.
      *
      * @see android.app.admin.DevicePolicyManager#getDeviceOwnerComponentOnAnyUser
      */
-    ComponentName getDeviceOwnerComponentOnAnyUser();
+    public ComponentName getDeviceOwnerComponentOnAnyUser() {
+        return mDpm.getDeviceOwnerComponentOnAnyUser();
+    }
 
     /**
      * Calls {@code DevicePolicyManager.getProfileOwnerAsUser()}.
      *
      * @see android.app.admin.DevicePolicyManager#getProfileOwnerAsUser
      */
-    @Nullable ComponentName getProfileOwnerAsUser(final int userId);
+    public @Nullable ComponentName getProfileOwnerAsUser(final int userId) {
+        return mDpm.getProfileOwnerAsUser(userId);
+    }
 
     /**
      * Calls {@code DevicePolicyManager.getDeviceOwnerNameOnAnyUser()}.
      *
      * @see android.app.admin.DevicePolicyManager#getDeviceOwnerNameOnAnyUser
      */
-    CharSequence getDeviceOwnerOrganizationName();
+    public CharSequence getDeviceOwnerOrganizationName() {
+        return mDpm.getDeviceOwnerOrganizationName();
+    }
 
     /**
      * Calls {@code DevicePolicyManager.getPermissionGrantState()}.
      *
      * @see android.app.admin.DevicePolicyManager#getPermissionGrantState
      */
-    int getPermissionGrantState(@Nullable ComponentName admin, String packageName,
-            String permission);
+    public int getPermissionGrantState(@Nullable ComponentName admin, String packageName,
+            String permission) {
+        return mDpm.getPermissionGrantState(admin, packageName, permission);
+    }
 
     /**
      * Calls {@code DevicePolicyManager.isSecurityLoggingEnabled()}.
      *
      * @see android.app.admin.DevicePolicyManager#isSecurityLoggingEnabled
      */
-    boolean isSecurityLoggingEnabled(@Nullable ComponentName admin);
+    public boolean isSecurityLoggingEnabled(@Nullable ComponentName admin) {
+        return mDpm.isSecurityLoggingEnabled(admin);
+    }
 
     /**
      * Calls {@code DevicePolicyManager.isNetworkLoggingEnabled()}.
      *
      * @see android.app.admin.DevicePolicyManager#isNetworkLoggingEnabled
      */
-    boolean isNetworkLoggingEnabled(@Nullable ComponentName admin);
+    public boolean isNetworkLoggingEnabled(@Nullable ComponentName admin) {
+        return mDpm.isNetworkLoggingEnabled(admin);
+    }
 
     /**
      * Calls {@code DevicePolicyManager.getLastSecurityLogRetrievalTime()}.
      *
      * @see android.app.admin.DevicePolicyManager#getLastSecurityLogRetrievalTime
      */
-    long getLastSecurityLogRetrievalTime();
+    public long getLastSecurityLogRetrievalTime() {
+        return mDpm.getLastSecurityLogRetrievalTime();
+    }
 
     /**
      * Calls {@code DevicePolicyManager.getLastBugReportRequestTime()}.
      *
      * @see android.app.admin.DevicePolicyManager#getLastBugReportRequestTime
      */
-    long getLastBugReportRequestTime();
+    public long getLastBugReportRequestTime() {
+        return mDpm.getLastBugReportRequestTime();
+    }
 
     /**
      * Calls {@code DevicePolicyManager.getLastNetworkLogRetrievalTime()}.
      *
      * @see android.app.admin.DevicePolicyManager#getLastNetworkLogRetrievalTime
      */
-    long getLastNetworkLogRetrievalTime();
+    public long getLastNetworkLogRetrievalTime() {
+        return mDpm.getLastNetworkLogRetrievalTime();
+    }
 
     /**
      * Calls {@code DevicePolicyManager.isCurrentInputMethodSetByOwner()}.
      *
      * @see android.app.admin.DevicePolicyManager#isCurrentInputMethodSetByOwner
      */
-    boolean isCurrentInputMethodSetByOwner();
-
+    public boolean isCurrentInputMethodSetByOwner() {
+        return mDpm.isCurrentInputMethodSetByOwner();
+    }
 
     /**
      * Calls {@code DevicePolicyManager.getOwnerInstalledCaCerts()}.
      *
      * @see android.app.admin.DevicePolicyManager#getOwnerInstalledCaCerts
      */
-    List<String> getOwnerInstalledCaCerts(@NonNull UserHandle user);
+    public List<String> getOwnerInstalledCaCerts(@NonNull UserHandle user) {
+        return mDpm.getOwnerInstalledCaCerts(user);
+    }
 
     /**
      * Calls {@code DevicePolicyManager.isDeviceOwnerAppOnAnyUser()}.
      *
      * @see android.app.admin.DevicePolicyManager#isDeviceOwnerAppOnAnyUser
      */
-    boolean isDeviceOwnerAppOnAnyUser(String packageName);
+    public boolean isDeviceOwnerAppOnAnyUser(String packageName) {
+        return mDpm.isDeviceOwnerAppOnAnyUser(packageName);
+    }
 
     /**
      * Calls {@code DevicePolicyManager.packageHasActiveAdmins()}.
      *
      * @see android.app.admin.DevicePolicyManager#packageHasActiveAdmins
      */
-    boolean packageHasActiveAdmins(String packageName);
+    public boolean packageHasActiveAdmins(String packageName) {
+        return mDpm.packageHasActiveAdmins(packageName);
+    }
 
     /**
      * Calls {@code DevicePolicyManager.isUninstallInQueue()}.
      *
      * @see android.app.admin.DevicePolicyManager#isUninstallInQueue
      */
-    boolean isUninstallInQueue(String packageName);
+    public boolean isUninstallInQueue(String packageName) {
+        return mDpm.isUninstallInQueue(packageName);
+    }
 
     /**
      * Calls {@code DevicePolicyManager.createAdminSupportIntent()}.
      *
      * @see android.app.admin.DevicePolicyManager#createAdminSupportIntent
      */
-    Intent createAdminSupportIntent(String restriction);
+    public Intent createAdminSupportIntent(@NonNull String restriction) {
+        return mDpm.createAdminSupportIntent(restriction);
+    }
 }
diff --git a/src/com/android/settings/password/FingerprintManagerWrapper.java b/src/com/android/settings/wrapper/FingerprintManagerWrapper.java
similarity index 79%
rename from src/com/android/settings/password/FingerprintManagerWrapper.java
rename to src/com/android/settings/wrapper/FingerprintManagerWrapper.java
index 51b31af..9b43bfa 100644
--- a/src/com/android/settings/password/FingerprintManagerWrapper.java
+++ b/src/com/android/settings/wrapper/FingerprintManagerWrapper.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.settings.password;
+package com.android.settings.wrapper;
 
 import android.annotation.NonNull;
 import android.hardware.fingerprint.FingerprintManager;
@@ -24,10 +24,14 @@
 import com.android.internal.util.Preconditions;
 
 /**
- * Wrapper of {@link FingerprintManager}. Workaround for roboelectic testing. See
- * {@link IFingerprintManager} for details.
+ * Wrapper of {@link FingerprintManager}. Workaround for robolectic testing.
+ *
+ * This is the workaround to allow us test {@link SetNewPasswordController} which uses a new hidden
+ * API {@link android.hardware.fingerprint.FingerprintManager#hasEnrolledFingerprints(int)} that
+ * robolectric does not support yet. Having robolectic to support latest platform API is tracked
+ * in b/30995831.
  */
-public class FingerprintManagerWrapper implements IFingerprintManager {
+public class FingerprintManagerWrapper {
     private @NonNull FingerprintManager mFingerprintManager;
 
     public FingerprintManagerWrapper(@NonNull FingerprintManager fingerprintManager) {
@@ -35,27 +39,22 @@
         mFingerprintManager = fingerprintManager;
     }
 
-    @Override
     public boolean isHardwareDetected() {
         return mFingerprintManager.isHardwareDetected();
     }
 
-    @Override
     public boolean hasEnrolledFingerprints(int userId) {
         return mFingerprintManager.hasEnrolledFingerprints(userId);
     }
 
-    @Override
     public long preEnroll() {
         return mFingerprintManager.preEnroll();
     }
 
-    @Override
     public void setActiveUser(int userId) {
         mFingerprintManager.setActiveUser(userId);
     }
 
-    @Override
     public void enroll(
             byte[] token,
             CancellationSignal cancel,
diff --git a/src/com/android/settings/applications/IPackageManagerWrapper.java b/src/com/android/settings/wrapper/IPackageManagerWrapper.java
similarity index 60%
rename from src/com/android/settings/applications/IPackageManagerWrapper.java
rename to src/com/android/settings/wrapper/IPackageManagerWrapper.java
index b4d1b85..9bb2df7 100644
--- a/src/com/android/settings/applications/IPackageManagerWrapper.java
+++ b/src/com/android/settings/wrapper/IPackageManagerWrapper.java
@@ -14,62 +14,84 @@
  * limitations under the License.
  */
 
-package com.android.settings.applications;
+package com.android.settings.wrapper;
 
 import android.content.Intent;
+import android.content.pm.IPackageManager;
 import android.content.pm.PackageInfo;
 import android.content.pm.ParceledListSlice;
 import android.content.pm.ResolveInfo;
 import android.os.RemoteException;
 
 /**
- * This interface replicates a subset of the android.content.pm.IPackageManager (PMS). The interface
+ * This class replicates a subset of the android.content.pm.IPackageManager (PMS). The class
  * exists so that we can use a thin wrapper around the PMS in production code and a mock in tests.
  * We cannot directly mock or shadow the PMS, because some of the methods we rely on are newer than
  * the API version supported by Robolectric.
  */
-public interface IPackageManagerWrapper {
+public class IPackageManagerWrapper {
+
+    private final IPackageManager mPms;
+
+    public IPackageManagerWrapper(IPackageManager pms) {
+        mPms = pms;
+    }
 
     /**
      * Calls {@code IPackageManager.checkUidPermission()}.
      *
      * @see android.content.pm.IPackageManager#checkUidPermission
      */
-    int checkUidPermission(String permName, int uid) throws RemoteException;
+    public int checkUidPermission(String permName, int uid) throws RemoteException {
+        return mPms.checkUidPermission(permName, uid);
+    }
 
     /**
      * Calls {@code IPackageManager.findPersistentPreferredActivity()}.
      *
      * @see android.content.pm.IPackageManager#findPersistentPreferredActivity
      */
-    ResolveInfo findPersistentPreferredActivity(Intent intent, int userId) throws RemoteException;
+    public ResolveInfo findPersistentPreferredActivity(Intent intent, int userId)
+            throws RemoteException {
+        return mPms.findPersistentPreferredActivity(intent, userId);
+    }
 
     /**
      * Calls {@code IPackageManager.getPackageInfo()}.
      *
      * @see android.content.pm.IPackageManager#getPackageInfo
      */
-    PackageInfo getPackageInfo(String packageName, int flags, int userId) throws RemoteException;
+    public PackageInfo getPackageInfo(String packageName, int flags, int userId)
+            throws RemoteException {
+        return mPms.getPackageInfo(packageName, flags, userId);
+    }
 
     /**
      * Calls {@code IPackageManager.getAppOpPermissionPackages()}.
      *
      * @see android.content.pm.IPackageManager#getAppOpPermissionPackages
      */
-    String[] getAppOpPermissionPackages(String permissionName) throws RemoteException;
+    public String[] getAppOpPermissionPackages(String permissionName) throws RemoteException {
+        return mPms.getAppOpPermissionPackages(permissionName);
+    }
 
     /**
      * Calls {@code IPackageManager.isPackageAvailable()}.
      *
      * @see android.content.pm.IPackageManager#isPackageAvailable
      */
-    boolean isPackageAvailable(String packageName, int userId) throws RemoteException;
+    public boolean isPackageAvailable(String packageName, int userId) throws RemoteException {
+        return mPms.isPackageAvailable(packageName, userId);
+    }
 
     /**
      * Calls {@code IPackageManager.getPackagesHoldingPermissions()}.
      *
      * @see android.content.pm.IPackageManager#getPackagesHoldingPermissions
      */
-    ParceledListSlice<PackageInfo> getPackagesHoldingPermissions(
-        String[] permissions, int flags, int userId) throws RemoteException;
+    public ParceledListSlice<PackageInfo> getPackagesHoldingPermissions(
+        String[] permissions, int flags, int userId) throws RemoteException {
+        return mPms.getPackagesHoldingPermissions(permissions, flags, userId);
+    }
+
 }
diff --git a/src/com/android/settings/fuelgauge/anomaly/KeyValueListParserWrapper.java b/src/com/android/settings/wrapper/KeyValueListParserWrapper.java
similarity index 71%
rename from src/com/android/settings/fuelgauge/anomaly/KeyValueListParserWrapper.java
rename to src/com/android/settings/wrapper/KeyValueListParserWrapper.java
index 4a9c2a9..16dc50e 100644
--- a/src/com/android/settings/fuelgauge/anomaly/KeyValueListParserWrapper.java
+++ b/src/com/android/settings/wrapper/KeyValueListParserWrapper.java
@@ -14,22 +14,29 @@
  * limitations under the License.
  */
 
-package com.android.settings.fuelgauge.anomaly;
+package com.android.settings.wrapper;
 
 import android.util.KeyValueListParser;
 
 /**
- * This interface replicates a subset of the {@link KeyValueListParser}. The interface
+ * This class replicates a subset of the {@link KeyValueListParser}. The class
  * exists so that we can use a thin wrapper around the PM in production code and a mock in tests.
  * We cannot directly mock or shadow the {@link KeyValueListParser}, because some of the methods
  * we rely on are newer than the API version supported by Robolectric.
  */
-public interface KeyValueListParserWrapper {
+public class KeyValueListParserWrapper {
+    private KeyValueListParser mParser;
+
+    public KeyValueListParserWrapper(KeyValueListParser parser) {
+        mParser = parser;
+    }
 
     /**
      * Get real {@link KeyValueListParser}
      */
-    KeyValueListParser getKeyValueListParser();
+    public KeyValueListParser getKeyValueListParser() {
+        return mParser;
+    }
 
     /**
      * Resets the parser with a new string to parse. The string is expected to be in the following
@@ -41,7 +48,9 @@
      * @param str the string to parse.
      * @throws IllegalArgumentException if the string is malformed.
      */
-    void setString(String str) throws IllegalArgumentException;
+    public void setString(String str) throws IllegalArgumentException {
+        mParser.setString(str);
+    }
 
     /**
      * Get the value for key as a boolean.
@@ -49,7 +58,9 @@
      * @param defaultValue The value to return if the key was not found.
      * @return the string value associated with the key.
      */
-    boolean getBoolean(String key, boolean defaultValue);
+    public boolean getBoolean(String key, boolean defaultValue) {
+        return mParser.getBoolean(key, defaultValue);
+    }
 
     /**
      * Get the value for key as a long.
@@ -58,5 +69,7 @@
      *                     long.
      * @return the long value associated with the key.
      */
-    long getLong(String key, long defaultValue);
+    public long getLong(String key, long defaultValue) {
+        return mParser.getLong(key, defaultValue);
+    }
 }
diff --git a/src/com/android/settings/network/NetworkScoreManagerWrapper.java b/src/com/android/settings/wrapper/NetworkScoreManagerWrapper.java
similarity index 98%
rename from src/com/android/settings/network/NetworkScoreManagerWrapper.java
rename to src/com/android/settings/wrapper/NetworkScoreManagerWrapper.java
index 3489640..a07d645 100644
--- a/src/com/android/settings/network/NetworkScoreManagerWrapper.java
+++ b/src/com/android/settings/wrapper/NetworkScoreManagerWrapper.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package com.android.settings.network;
+package com.android.settings.wrapper;
 
 import android.annotation.Nullable;
 import android.net.NetworkScoreManager;
diff --git a/src/com/android/settings/display/PowerManagerWrapper.java b/src/com/android/settings/wrapper/PowerManagerWrapper.java
similarity index 97%
rename from src/com/android/settings/display/PowerManagerWrapper.java
rename to src/com/android/settings/wrapper/PowerManagerWrapper.java
index afa2f33..6357a3e 100644
--- a/src/com/android/settings/display/PowerManagerWrapper.java
+++ b/src/com/android/settings/wrapper/PowerManagerWrapper.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.settings.display;
+package com.android.settings.wrapper;
 
 import android.os.PowerManager;
 
diff --git a/src/com/android/settings/network/RestrictedLockUtilsWrapper.java b/src/com/android/settings/wrapper/RestrictedLockUtilsWrapper.java
similarity index 93%
rename from src/com/android/settings/network/RestrictedLockUtilsWrapper.java
rename to src/com/android/settings/wrapper/RestrictedLockUtilsWrapper.java
index de5b808..7a0185f 100644
--- a/src/com/android/settings/network/RestrictedLockUtilsWrapper.java
+++ b/src/com/android/settings/wrapper/RestrictedLockUtilsWrapper.java
@@ -1,4 +1,4 @@
-package com.android.settings.network;
+package com.android.settings.wrapper;
 
 import android.content.Context;
 import com.android.settingslib.RestrictedLockUtils;
diff --git a/src/com/android/settings/applications/UserManagerWrapperImpl.java b/src/com/android/settings/wrapper/UserManagerWrapper.java
similarity index 66%
rename from src/com/android/settings/applications/UserManagerWrapperImpl.java
rename to src/com/android/settings/wrapper/UserManagerWrapper.java
index 14ea64a..eeb648b 100644
--- a/src/com/android/settings/applications/UserManagerWrapperImpl.java
+++ b/src/com/android/settings/wrapper/UserManagerWrapper.java
@@ -14,26 +14,30 @@
  * limitations under the License.
  */
 
-package com.android.settings.applications;
+package com.android.settings.wrapper;
 
 import android.content.pm.UserInfo;
 import android.os.UserManager;
 
 import java.util.List;
 
-public class UserManagerWrapperImpl implements UserManagerWrapper {
+/**
+ * This class replicates a subset of the android.os.UserManager. The class
+ * exists so that we can use a thin wrapper around the UserManager in production code and a mock in
+ * tests. We cannot directly mock or shadow the UserManager, because some of the methods we rely on
+ * are newer than the API version supported by Robolectric or are hidden.
+ */
+public class UserManagerWrapper {
     private UserManager mUserManager;
 
-    public UserManagerWrapperImpl(UserManager userManager) {
+    public UserManagerWrapper(UserManager userManager) {
         mUserManager = userManager;
     }
 
-    @Override
     public UserInfo getPrimaryUser() {
         return mUserManager.getPrimaryUser();
     }
 
-    @Override
     public List<UserInfo> getUsers() {
         return mUserManager.getUsers();
     }
diff --git a/src/com/android/settings/webview/UserPackageWrapper.java b/src/com/android/settings/wrapper/UserPackageWrapper.java
similarity index 86%
rename from src/com/android/settings/webview/UserPackageWrapper.java
rename to src/com/android/settings/wrapper/UserPackageWrapper.java
index 8fbb10c..afa1d82 100644
--- a/src/com/android/settings/webview/UserPackageWrapper.java
+++ b/src/com/android/settings/wrapper/UserPackageWrapper.java
@@ -12,20 +12,16 @@
  * permissions and limitations under the License.
  */
 
-package com.android.settings.webview;
+package com.android.settings.wrapper;
 
-import android.content.Context;
 import android.content.pm.PackageInfo;
 import android.content.pm.UserInfo;
-import android.webkit.UserPackage;
-
-import java.util.List;
 
 /**
  * Wrapper class around android.webkit.UserPackage - to be able to use UserPackage in Robolectric
  * tests (such tests currently don't support mocking hidden classes).
  */
-interface UserPackageWrapper {
+public interface UserPackageWrapper {
     UserInfo getUserInfo();
     PackageInfo getPackageInfo();
     boolean isEnabledPackage();
diff --git a/src/com/android/settings/webview/UserPackageWrapperImpl.java b/src/com/android/settings/wrapper/UserPackageWrapperImpl.java
similarity index 83%
rename from src/com/android/settings/webview/UserPackageWrapperImpl.java
rename to src/com/android/settings/wrapper/UserPackageWrapperImpl.java
index 1ea7c2e..0a2b9cd 100644
--- a/src/com/android/settings/webview/UserPackageWrapperImpl.java
+++ b/src/com/android/settings/wrapper/UserPackageWrapperImpl.java
@@ -12,23 +12,19 @@
  * permissions and limitations under the License.
  */
 
-package com.android.settings.webview;
+package com.android.settings.wrapper;
 
-import android.content.Context;
 import android.content.pm.PackageInfo;
 import android.content.pm.UserInfo;
 import android.webkit.UserPackage;
 
-import java.util.ArrayList;
-import java.util.List;
-
 /**
  * Default implementation of UserPackageWrapper.
  */
-class UserPackageWrapperImpl implements UserPackageWrapper {
+public class UserPackageWrapperImpl implements UserPackageWrapper {
     private final UserPackage mUserPackage;
 
-    UserPackageWrapperImpl(UserPackage userPackage) {
+    public UserPackageWrapperImpl(UserPackage userPackage) {
         mUserPackage = userPackage;
     }
 
diff --git a/src/com/android/settings/dashboard/suggestions/WallpaperManagerWrapper.java b/src/com/android/settings/wrapper/WallpaperManagerWrapper.java
similarity index 94%
rename from src/com/android/settings/dashboard/suggestions/WallpaperManagerWrapper.java
rename to src/com/android/settings/wrapper/WallpaperManagerWrapper.java
index 9efe4fe..89015e5 100644
--- a/src/com/android/settings/dashboard/suggestions/WallpaperManagerWrapper.java
+++ b/src/com/android/settings/wrapper/WallpaperManagerWrapper.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.settings.dashboard.suggestions;
+package com.android.settings.wrapper;
 
 import android.app.WallpaperManager;
 import android.content.Context;
diff --git a/src/com/android/settings/wifi/WifiManagerWrapper.java b/src/com/android/settings/wrapper/WifiManagerWrapper.java
similarity index 93%
rename from src/com/android/settings/wifi/WifiManagerWrapper.java
rename to src/com/android/settings/wrapper/WifiManagerWrapper.java
index 69b5ee9..e24f5eb 100644
--- a/src/com/android/settings/wifi/WifiManagerWrapper.java
+++ b/src/com/android/settings/wrapper/WifiManagerWrapper.java
@@ -1,4 +1,4 @@
-package com.android.settings.wifi;
+package com.android.settings.wrapper;
 
 import android.net.wifi.WifiManager;
 
