1 /* 2 * Copyright (C) 2022 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.permissioncontroller.role.utils; 18 19 import android.content.Context; 20 import android.content.Intent; 21 import android.content.pm.ApplicationInfo; 22 import android.os.UserHandle; 23 import android.util.Log; 24 25 import androidx.annotation.NonNull; 26 import androidx.annotation.Nullable; 27 28 import com.android.permissioncontroller.role.ui.RequestRoleItemView; 29 import com.android.permissioncontroller.role.ui.RoleApplicationPreference; 30 import com.android.permissioncontroller.role.ui.RolePreference; 31 import com.android.permissioncontroller.role.ui.behavior.RoleUiBehavior; 32 import com.android.role.controller.model.Role; 33 34 import java.util.List; 35 36 /** 37 * Utility methods for Role UI behavior 38 */ 39 public final class RoleUiBehaviorUtils { 40 41 private static final String LOG_TAG = RoleUiBehaviorUtils.class.getSimpleName(); 42 43 /** 44 * Get the role ui behavior if available 45 */ 46 @Nullable getUiBehavior(@onNull Role role)47 private static RoleUiBehavior getUiBehavior(@NonNull Role role) { 48 String uiBehaviorName = role.getUiBehaviorName(); 49 if (uiBehaviorName == null) { 50 return null; 51 } 52 RoleUiBehavior uiBehavior; 53 String uiBehaviorClassName = RoleUiBehavior.class.getPackage().getName() + '.' 54 + uiBehaviorName; 55 try { 56 uiBehavior = (RoleUiBehavior) Class.forName(uiBehaviorClassName).newInstance(); 57 } catch (ClassNotFoundException | IllegalAccessException | InstantiationException e) { 58 Log.e(LOG_TAG, "Unable to instantiate UI behavior: " + uiBehaviorClassName, e); 59 return null; 60 } 61 return uiBehavior; 62 } 63 64 /** 65 * @see RoleUiBehavior#prepareRequestRoleItemViewAsUser 66 */ prepareRequestRoleItemViewAsUser(@onNull Role role, @NonNull RequestRoleItemView itemView, @NonNull ApplicationInfo applicationInfo, @NonNull UserHandle user, @NonNull Context context)67 public static void prepareRequestRoleItemViewAsUser(@NonNull Role role, 68 @NonNull RequestRoleItemView itemView, @NonNull ApplicationInfo applicationInfo, 69 @NonNull UserHandle user, @NonNull Context context) { 70 RoleUiBehavior uiBehavior = getUiBehavior(role); 71 if (uiBehavior == null) { 72 return; 73 } 74 uiBehavior.prepareRequestRoleItemViewAsUser(role, itemView, applicationInfo, user, context); 75 } 76 77 /** 78 * @see RoleUiBehavior#getManageIntentAsUser 79 */ 80 @Nullable getManageIntentAsUser(@onNull Role role, @NonNull UserHandle user, @NonNull Context context)81 public static Intent getManageIntentAsUser(@NonNull Role role, @NonNull UserHandle user, 82 @NonNull Context context) { 83 RoleUiBehavior uiBehavior = getUiBehavior(role); 84 if (uiBehavior == null) { 85 return null; 86 } 87 return uiBehavior.getManageIntentAsUser(role, user, context); 88 } 89 90 /** 91 * @see RoleUiBehavior#preparePreferenceAsUser 92 */ preparePreferenceAsUser(@onNull Role role, @NonNull List<ApplicationInfo> applicationInfos, @NonNull RolePreference preference, @NonNull UserHandle user, @NonNull Context context)93 public static void preparePreferenceAsUser(@NonNull Role role, 94 @NonNull List<ApplicationInfo> applicationInfos, @NonNull RolePreference preference, 95 @NonNull UserHandle user, @NonNull Context context) { 96 RoleUiBehavior uiBehavior = getUiBehavior(role); 97 if (uiBehavior == null) { 98 return; 99 } 100 uiBehavior.preparePreferenceAsUser(role, preference, applicationInfos, user, context); 101 } 102 103 /** 104 * @see RoleUiBehavior#prepareApplicationPreferenceAsUser 105 */ prepareApplicationPreferenceAsUser(@onNull Role role, @NonNull RoleApplicationPreference preference, @NonNull ApplicationInfo applicationInfo, @NonNull UserHandle user, @NonNull Context context)106 public static void prepareApplicationPreferenceAsUser(@NonNull Role role, 107 @NonNull RoleApplicationPreference preference, 108 @NonNull ApplicationInfo applicationInfo, @NonNull UserHandle user, 109 @NonNull Context context) { 110 RoleUiBehavior uiBehavior = getUiBehavior(role); 111 if (uiBehavior == null) { 112 return; 113 } 114 uiBehavior.prepareApplicationPreferenceAsUser( 115 role, preference.asTwoStatePreference(), applicationInfo, user, 116 context); 117 } 118 119 /** 120 * @see RoleUiBehavior#getConfirmationMessage 121 */ 122 @Nullable getConfirmationMessage(@onNull Role role, @NonNull String packageName, @NonNull Context context)123 public static CharSequence getConfirmationMessage(@NonNull Role role, 124 @NonNull String packageName, @NonNull Context context) { 125 RoleUiBehavior uiBehavior = getUiBehavior(role); 126 if (uiBehavior == null) { 127 return null; 128 } 129 return uiBehavior.getConfirmationMessage(role, packageName, context); 130 } 131 } 132