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