1 /* 2 * Copyright (C) 2021 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.bedstead.remotedpc.managers; 18 19 import android.app.admin.DevicePolicyManager; 20 import android.app.admin.SystemUpdateInfo; 21 import android.content.ComponentName; 22 import android.content.IntentFilter; 23 import android.os.Bundle; 24 25 import androidx.annotation.NonNull; 26 27 import com.android.bedstead.remotedpc.processor.annotations.RemoteDpcAutomaticAdmin; 28 import com.android.bedstead.remotedpc.processor.annotations.RemoteDpcManager; 29 30 import java.util.List; 31 import java.util.Set; 32 33 /** 34 * Wrapper of {@link DevicePolicyManager} methods for use with Remote DPC 35 * 36 * <p>Methods called on this interface will behave as if they were called directly by the 37 * RemoteDPC instance. Return values and exceptions will behave as expected. 38 * 39 * <p>Methods on this interface must match exactly the methods declared by 40 * {@link DevicePolicyManager}, or else must be identical to a method declared by 41 * {@link DevicePolicyManager} except that it excludes a {@code ComponentName admin} first argument 42 * and must be annotated {@link RemoteDpcAutomaticAdmin}. 43 * 44 * <p>When using {@link RemoteDpcAutomaticAdmin}, there must also exist an identical method on the 45 * interface which includes the {@code ComponentName admin} argument. The RemoteDPC component name 46 * will be automatically provided when the {@link RemoteDpcAutomaticAdmin} annotated method is 47 * called. 48 */ 49 @RemoteDpcManager(managerClass = DevicePolicyManager.class) 50 public interface RemoteDevicePolicyManager { 51 52 /** See {@link DevicePolicyManager#isUsingUnifiedPassword(ComponentName)}. */ isUsingUnifiedPassword(@onNull ComponentName admin)53 boolean isUsingUnifiedPassword(@NonNull ComponentName admin); 54 /** See {@link DevicePolicyManager#isUsingUnifiedPassword(ComponentName)}. */ isUsingUnifiedPassword()55 @RemoteDpcAutomaticAdmin boolean isUsingUnifiedPassword(); 56 57 /** See {@link DevicePolicyManager#getCurrentFailedPasswordAttempts()}. */ getCurrentFailedPasswordAttempts()58 int getCurrentFailedPasswordAttempts(); 59 60 /** See {@link DevicePolicyManager#setLockTaskPackages(ComponentName, String[])}. */ setLockTaskPackages(@onNull ComponentName admin, @NonNull String[] packages)61 void setLockTaskPackages(@NonNull ComponentName admin, @NonNull String[] packages); 62 /** See {@link DevicePolicyManager#setLockTaskPackages(ComponentName, String[])}. */ setLockTaskPackages(@onNull String[] packages)63 @RemoteDpcAutomaticAdmin void setLockTaskPackages(@NonNull String[] packages); 64 65 /** See {@link DevicePolicyManager#getLockTaskPackages(ComponentName)}. */ getLockTaskPackages(@onNull ComponentName admin)66 @NonNull String[] getLockTaskPackages(@NonNull ComponentName admin); 67 /** See {@link DevicePolicyManager#getLockTaskPackages(ComponentName)}. */ getLockTaskPackages()68 @RemoteDpcAutomaticAdmin @NonNull String[] getLockTaskPackages(); 69 70 /** See {@link DevicePolicyManager#setLockTaskFeatures(ComponentName, int)}. */ setLockTaskFeatures( @onNull ComponentName admin, int flags)71 void setLockTaskFeatures( 72 @NonNull ComponentName admin, int flags); 73 /** See {@link DevicePolicyManager#setLockTaskFeatures(ComponentName, int)}. */ setLockTaskFeatures(int flags)74 @RemoteDpcAutomaticAdmin void setLockTaskFeatures(int flags); 75 76 /** See {@link DevicePolicyManager#getLockTaskFeatures(ComponentName)}. */ getLockTaskFeatures(@onNull ComponentName admin)77 int getLockTaskFeatures(@NonNull ComponentName admin); 78 /** See {@link DevicePolicyManager#getLockTaskFeatures(ComponentName)}. */ getLockTaskFeatures()79 @RemoteDpcAutomaticAdmin int getLockTaskFeatures(); 80 81 82 /** See {@link DevicePolicyManager#setUserControlDisabledPackages(ComponentName, List)}. */ setUserControlDisabledPackages( @onNull ComponentName admin, @NonNull List<String> packages)83 void setUserControlDisabledPackages( 84 @NonNull ComponentName admin, @NonNull List<String> packages); 85 /** See {@link DevicePolicyManager#setUserControlDisabledPackages(ComponentName, List)}. */ setUserControlDisabledPackages(@onNull List<String> packages)86 @RemoteDpcAutomaticAdmin void setUserControlDisabledPackages(@NonNull List<String> packages); 87 88 /** See {@link DevicePolicyManager#getUserControlDisabledPackages(ComponentName)}. */ getUserControlDisabledPackages(@onNull ComponentName admin)89 @NonNull List<String> getUserControlDisabledPackages(@NonNull ComponentName admin); 90 /** See {@link DevicePolicyManager#getUserControlDisabledPackages(ComponentName)}. */ getUserControlDisabledPackages()91 @RemoteDpcAutomaticAdmin @NonNull List<String> getUserControlDisabledPackages(); 92 93 94 /** See {@link DevicePolicyManager#addUserRestriction(ComponentName, String)}. */ addUserRestriction(@onNull ComponentName admin, String key)95 void addUserRestriction(@NonNull ComponentName admin, String key); 96 /** See {@link DevicePolicyManager#addUserRestriction(ComponentName, String)}. */ addUserRestriction(String key)97 @RemoteDpcAutomaticAdmin void addUserRestriction(String key); 98 99 /** See {@link DevicePolicyManager#clearUserRestriction(ComponentName, String)}. */ clearUserRestriction(@onNull ComponentName admin, String key)100 void clearUserRestriction(@NonNull ComponentName admin, String key); 101 /** See {@link DevicePolicyManager#clearUserRestriction(ComponentName, String)}. */ clearUserRestriction(String key)102 @RemoteDpcAutomaticAdmin void clearUserRestriction(String key); 103 104 /** See {@link DevicePolicyManager#getUserRestrictions(ComponentName)}. */ getUserRestrictions(@onNull ComponentName admin)105 @NonNull Bundle getUserRestrictions(@NonNull ComponentName admin); 106 /** See {@link DevicePolicyManager#getUserRestrictions(ComponentName)}. */ getUserRestrictions()107 @RemoteDpcAutomaticAdmin @NonNull Bundle getUserRestrictions(); 108 109 /** 110 * See {@link DevicePolicyManager#addCrossProfileIntentFilter(ComponentName, IntentFilter, 111 * int)}. 112 */ addCrossProfileIntentFilter(@onNull ComponentName admin, @NonNull IntentFilter filter, int flags)113 void addCrossProfileIntentFilter(@NonNull ComponentName admin, @NonNull IntentFilter filter, 114 int flags); 115 /** 116 * See {@link DevicePolicyManager#addCrossProfileIntentFilter(ComponentName, IntentFilter, 117 * int)}. 118 */ addCrossProfileIntentFilter(@onNull IntentFilter filter, int flags)119 @RemoteDpcAutomaticAdmin void addCrossProfileIntentFilter(@NonNull IntentFilter filter, 120 int flags); 121 122 /** See {@link DevicePolicyManager#clearCrossProfileIntentFilters(ComponentName)}. */ clearCrossProfileIntentFilters(@onNull ComponentName admin)123 void clearCrossProfileIntentFilters(@NonNull ComponentName admin); 124 /** See {@link DevicePolicyManager#clearCrossProfileIntentFilters(ComponentName)}. */ clearCrossProfileIntentFilters()125 @RemoteDpcAutomaticAdmin void clearCrossProfileIntentFilters(); 126 127 /** See {@link DevicePolicyManager#setPreferentialNetworkServiceEnabled(boolean)}. */ setPreferentialNetworkServiceEnabled(boolean enabled)128 void setPreferentialNetworkServiceEnabled(boolean enabled); 129 130 /** See {@link DevicePolicyManager#notifyPendingSystemUpdate(long)}. */ notifyPendingSystemUpdate(long updateReceivedTime)131 void notifyPendingSystemUpdate(long updateReceivedTime); 132 133 /** See {@link DevicePolicyManager#notifyPendingSystemUpdate(long, boolean)}. */ notifyPendingSystemUpdate(long updateReceivedTime, boolean isSecurityPatch)134 void notifyPendingSystemUpdate(long updateReceivedTime, boolean isSecurityPatch); 135 136 /** See {@link DevicePolicyManager#getPendingSystemUpdate(ComponentName}). */ getPendingSystemUpdate(ComponentName admin)137 SystemUpdateInfo getPendingSystemUpdate(ComponentName admin); 138 /** See {@link DevicePolicyManager#getPendingSystemUpdate(ComponentName}). */ getPendingSystemUpdate()139 @RemoteDpcAutomaticAdmin SystemUpdateInfo getPendingSystemUpdate(); 140 141 /** See {@link DevicePolicyManager#setAffiliationIds(ComponentName, Set)}. */ setAffiliationIds(ComponentName admin, Set<String> ids)142 void setAffiliationIds(ComponentName admin, Set<String> ids); 143 /** See {@link DevicePolicyManager#setAffiliationIds(ComponentName, Set)}. */ setAffiliationIds(Set<String> ids)144 @RemoteDpcAutomaticAdmin void setAffiliationIds(Set<String> ids); 145 146 /** See {@link android.app.admin.DevicePolicyManager#addPersistentPreferredActivity(ComponentName, IntentFilter, ComponentName)}. */ addPersistentPreferredActivity( ComponentName admin, IntentFilter filter, ComponentName activity)147 void addPersistentPreferredActivity( 148 ComponentName admin, IntentFilter filter, ComponentName activity); 149 150 /** See {@link android.app.admin.DevicePolicyManager#addPersistentPreferredActivity(ComponentName, IntentFilter, ComponentName)}. */ addPersistentPreferredActivity( IntentFilter filter, ComponentName activity)151 @RemoteDpcAutomaticAdmin void addPersistentPreferredActivity( 152 IntentFilter filter, ComponentName activity); 153 } 154