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