/* * 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.wrapper; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UserIdInt; import android.app.admin.DevicePolicyManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.os.UserHandle; import java.util.List; /** * 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 class DevicePolicyManagerWrapper { private final DevicePolicyManager mDpm; public DevicePolicyManagerWrapper(DevicePolicyManager dpm) { mDpm = dpm; } public static @Nullable DevicePolicyManagerWrapper from(Context context) { DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE); return dpm == null ? null : new DevicePolicyManagerWrapper(dpm); } /** * Calls {@code DevicePolicyManager.getActiveAdminsAsUser()}. * * @see DevicePolicyManager#getActiveAdminsAsUser */ public @Nullable List getActiveAdminsAsUser(int userId) { return mDpm.getActiveAdminsAsUser(userId); } /** * Calls {@code DevicePolicyManager.getMaximumFailedPasswordsForWipe()}. * * @see DevicePolicyManager#getMaximumFailedPasswordsForWipe */ public int getMaximumFailedPasswordsForWipe(@Nullable ComponentName admin, int userHandle) { return mDpm.getMaximumFailedPasswordsForWipe(admin, userHandle); } /** * Calls {@code DevicePolicyManager.getDeviceOwnerComponentOnCallingUser()}. * * @see DevicePolicyManager#getDeviceOwnerComponentOnCallingUser */ public ComponentName getDeviceOwnerComponentOnCallingUser() { return mDpm.getDeviceOwnerComponentOnCallingUser(); } /** * Calls {@code DevicePolicyManager.getDeviceOwnerComponentOnAnyUser()}. * * @see DevicePolicyManager#getDeviceOwnerComponentOnAnyUser */ public ComponentName getDeviceOwnerComponentOnAnyUser() { return mDpm.getDeviceOwnerComponentOnAnyUser(); } /** * Calls {@code DevicePolicyManager.getProfileOwnerAsUser()}. * * @see DevicePolicyManager#getProfileOwnerAsUser */ public @Nullable ComponentName getProfileOwnerAsUser(final int userId) { return mDpm.getProfileOwnerAsUser(userId); } /** * Calls {@code DevicePolicyManager.getDeviceOwnerNameOnAnyUser()}. * * @see DevicePolicyManager#getDeviceOwnerNameOnAnyUser */ public CharSequence getDeviceOwnerOrganizationName() { return mDpm.getDeviceOwnerOrganizationName(); } /** * Calls {@code DevicePolicyManager.getPermissionGrantState()}. * * @see DevicePolicyManager#getPermissionGrantState */ public int getPermissionGrantState(@Nullable ComponentName admin, String packageName, String permission) { return mDpm.getPermissionGrantState(admin, packageName, permission); } /** * Calls {@code DevicePolicyManager.isSecurityLoggingEnabled()}. * * @see DevicePolicyManager#isSecurityLoggingEnabled */ public boolean isSecurityLoggingEnabled(@Nullable ComponentName admin) { return mDpm.isSecurityLoggingEnabled(admin); } /** * Calls {@code DevicePolicyManager.isNetworkLoggingEnabled()}. * * @see DevicePolicyManager#isNetworkLoggingEnabled */ public boolean isNetworkLoggingEnabled(@Nullable ComponentName admin) { return mDpm.isNetworkLoggingEnabled(admin); } /** * Calls {@code DevicePolicyManager.getLastSecurityLogRetrievalTime()}. * * @see DevicePolicyManager#getLastSecurityLogRetrievalTime */ public long getLastSecurityLogRetrievalTime() { return mDpm.getLastSecurityLogRetrievalTime(); } /** * Calls {@code DevicePolicyManager.getLastBugReportRequestTime()}. * * @see DevicePolicyManager#getLastBugReportRequestTime */ public long getLastBugReportRequestTime() { return mDpm.getLastBugReportRequestTime(); } /** * Calls {@code DevicePolicyManager.getLastNetworkLogRetrievalTime()}. * * @see DevicePolicyManager#getLastNetworkLogRetrievalTime */ public long getLastNetworkLogRetrievalTime() { return mDpm.getLastNetworkLogRetrievalTime(); } /** * Calls {@code DevicePolicyManager.isCurrentInputMethodSetByOwner()}. * * @see DevicePolicyManager#isCurrentInputMethodSetByOwner */ public boolean isCurrentInputMethodSetByOwner() { return mDpm.isCurrentInputMethodSetByOwner(); } /** * Calls {@code DevicePolicyManager.getOwnerInstalledCaCerts()}. * * @see DevicePolicyManager#getOwnerInstalledCaCerts */ public List getOwnerInstalledCaCerts(@NonNull UserHandle user) { return mDpm.getOwnerInstalledCaCerts(user); } /** * Calls {@code DevicePolicyManager.isDeviceOwnerAppOnAnyUser()}. * * @see DevicePolicyManager#isDeviceOwnerAppOnAnyUser */ public boolean isDeviceOwnerAppOnAnyUser(String packageName) { return mDpm.isDeviceOwnerAppOnAnyUser(packageName); } /** * Calls {@code DevicePolicyManager.packageHasActiveAdmins()}. * * @see DevicePolicyManager#packageHasActiveAdmins */ public boolean packageHasActiveAdmins(String packageName) { return mDpm.packageHasActiveAdmins(packageName); } /** * Calls {@code DevicePolicyManager.isUninstallInQueue()}. * * @see DevicePolicyManager#isUninstallInQueue */ public boolean isUninstallInQueue(String packageName) { return mDpm.isUninstallInQueue(packageName); } /** * Calls {@code DevicePolicyManager.createAdminSupportIntent()}. * * @see DevicePolicyManager#createAdminSupportIntent(String) */ public Intent createAdminSupportIntent(@NonNull String restriction) { return mDpm.createAdminSupportIntent(restriction); } /** * Calls {@code DevicePolicyManager#getDeviceOwnerUserId()}. * * @see DevicePolicyManager#getDeviceOwnerUserId() */ public int getDeviceOwnerUserId() { return mDpm.getDeviceOwnerUserId(); } /** * Calls {@code DevicePolicyManager#getMaximumTimeToLock()}. * * @see DevicePolicyManager#getMaximumTimeToLock(ComponentName, int) */ public long getMaximumTimeToLock(@Nullable ComponentName admin, @UserIdInt int userHandle) { return mDpm.getMaximumTimeToLock(admin, userHandle); } }