• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2018 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.role.controller.model;
18 
19 import android.content.Context;
20 import android.content.pm.ApplicationInfo;
21 import android.os.UserHandle;
22 
23 import androidx.annotation.NonNull;
24 import androidx.annotation.Nullable;
25 
26 import java.util.List;
27 
28 /**
29  * Interface for behavior of a role.
30  */
31 public interface RoleBehavior {
32 
33     /**
34      * @see Role#getExclusivity()
35      */
36     @Nullable
getExclusivity()37     default Integer getExclusivity() {
38         return null;
39     }
40 
41     /**
42      * @see Role#onRoleAddedAsUser(UserHandle, Context)
43      */
onRoleAddedAsUser(@onNull Role role, @NonNull UserHandle user, @NonNull Context context)44     default void onRoleAddedAsUser(@NonNull Role role, @NonNull UserHandle user,
45             @NonNull Context context) {}
46 
47     /**
48      * @see Role#isAvailableAsUser(UserHandle, Context)
49      */
isAvailableAsUser(@onNull Role role, @NonNull UserHandle user, @NonNull Context context)50     default boolean isAvailableAsUser(@NonNull Role role, @NonNull UserHandle user,
51             @NonNull Context context) {
52         return true;
53     }
54 
55     /**
56      * @see Role#getDefaultHolders(Context)
57      */
58     @Nullable
getDefaultHoldersAsUser(@onNull Role role, @NonNull UserHandle user, @NonNull Context context)59     default List<String> getDefaultHoldersAsUser(@NonNull Role role, @NonNull UserHandle user,
60             @NonNull Context context) {
61         return null;
62     }
63 
64     /**
65      * @see Role#getFallbackHolder(Context)
66      */
67     @Nullable
getFallbackHolderAsUser(@onNull Role role, @NonNull UserHandle user, @NonNull Context context)68     default String getFallbackHolderAsUser(@NonNull Role role, @NonNull UserHandle user,
69             @NonNull Context context) {
70         return null;
71     }
72 
73     /**
74      * @see Role#shouldAllowBypassingQualification(Context)
75      */
76     @Nullable
shouldAllowBypassingQualification(@onNull Role role, @NonNull Context context)77     default Boolean shouldAllowBypassingQualification(@NonNull Role role,
78                                                       @NonNull Context context) {
79         return null;
80     }
81 
82     /**
83      * @see Role#isPackageQualified(String, Context)
84      */
85     @Nullable
isPackageQualifiedAsUser(@onNull Role role, @NonNull String packageName, @NonNull UserHandle user, @NonNull Context context)86     default Boolean isPackageQualifiedAsUser(@NonNull Role role, @NonNull String packageName,
87             @NonNull UserHandle user, @NonNull Context context) {
88         return null;
89     }
90 
91     /**
92      * @see Role#getQualifyingPackagesAsUser(UserHandle, Context)
93      */
94     @Nullable
getQualifyingPackagesAsUser(@onNull Role role, @NonNull UserHandle user, @NonNull Context context)95     default List<String> getQualifyingPackagesAsUser(@NonNull Role role, @NonNull UserHandle user,
96                                                      @NonNull Context context) {
97         return null;
98     }
99 
100     /**
101      * @see Role#grantAsUser(String, boolean, boolean, UserHandle, Context)
102      */
grantAsUser(@onNull Role role, @NonNull String packageName, @NonNull UserHandle user, @NonNull Context context)103     default void grantAsUser(@NonNull Role role, @NonNull String packageName,
104             @NonNull UserHandle user, @NonNull Context context) {}
105 
106     /**
107      * @see Role#revokeAsUser(String, boolean, boolean, UserHandle, Context)
108      */
revokeAsUser(@onNull Role role, @NonNull String packageName, @NonNull UserHandle user, @NonNull Context context)109     default void revokeAsUser(@NonNull Role role, @NonNull String packageName,
110             @NonNull UserHandle user, @NonNull Context context) {}
111 
112     /**
113      * @see Role#onHolderSelectedAsUser(String, UserHandle, Context)
114      */
onHolderSelectedAsUser(@onNull Role role, @NonNull String packageName, @NonNull UserHandle user, @NonNull Context context)115     default void onHolderSelectedAsUser(@NonNull Role role, @NonNull String packageName,
116             @NonNull UserHandle user, @NonNull Context context) {}
117 
118     /**
119      * @see Role#onHolderChangedAsUser(String, UserHandle, Context)
120      */
onHolderChangedAsUser(@onNull Role role, @NonNull UserHandle user, @NonNull Context context)121     default void onHolderChangedAsUser(@NonNull Role role, @NonNull UserHandle user,
122             @NonNull Context context) {}
123 
124     /**
125      * Check whether this role should be visible to user.
126      *
127      * @param role the role to check for
128      * @param user the user to check for
129      * @param context the `Context` to retrieve system services
130      *
131      * @return whether this role should be visible to user, or {@code null} if not overridden
132      */
133     @Nullable
isVisibleAsUser(@onNull Role role, @NonNull UserHandle user, @NonNull Context context)134     default Boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user,
135             @NonNull Context context) {
136         return null;
137     }
138 
139     /**
140      * Check whether a qualifying application should be visible to user.
141      *
142      * @param role the role to check for
143      * @param applicationInfo the {@link ApplicationInfo} for the application
144      * @param user the user for the application
145      * @param context the {@code Context} to retrieve system services
146      *
147      * @return whether the qualifying application should be visible to user
148      */
isApplicationVisibleAsUser(@onNull Role role, @NonNull ApplicationInfo applicationInfo, @NonNull UserHandle user, @NonNull Context context)149     default boolean isApplicationVisibleAsUser(@NonNull Role role,
150             @NonNull ApplicationInfo applicationInfo, @NonNull UserHandle user,
151             @NonNull Context context) {
152         return true;
153     }
154 }
155