diff options
4 files changed, 100 insertions, 6 deletions
diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/RequestRoleFragment.java b/PermissionController/src/com/android/permissioncontroller/role/ui/RequestRoleFragment.java index d9b4a9c44..fb3a46d6a 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/RequestRoleFragment.java +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/RequestRoleFragment.java @@ -53,6 +53,7 @@ import com.android.permissioncontroller.permission.utils.PackageRemovalMonitor; import com.android.permissioncontroller.permission.utils.Utils; import com.android.permissioncontroller.role.model.UserDeniedManager; import com.android.permissioncontroller.role.utils.PackageUtils; +import com.android.permissioncontroller.role.utils.RoleUiBehaviorUtils; import com.android.permissioncontroller.role.utils.UiUtils; import com.android.role.controller.model.Role; import com.android.role.controller.model.Roles; @@ -674,12 +675,14 @@ public class RequestRoleFragment extends DialogFragment { } Pair<ApplicationInfo, Boolean> qualifyingApplication = getItem(position); + ApplicationInfo applicationInfo; boolean restricted; boolean checked; Drawable icon; String title; String subtitle; if (qualifyingApplication == null) { + applicationInfo = null; restricted = false; checked = mCheckedPackageName == null; icon = AppCompatResources.getDrawable(context, R.drawable.ic_remove_circle); @@ -687,7 +690,7 @@ public class RequestRoleFragment extends DialogFragment { subtitle = mHolderPackageName != null ? context.getString( R.string.request_role_current_default) : null; } else { - ApplicationInfo applicationInfo = qualifyingApplication.first; + applicationInfo = qualifyingApplication.first; restricted = mRole.getApplicationRestrictionIntentAsUser(applicationInfo, Process.myUserHandle(), context) != null; checked = Objects.equals(applicationInfo.packageName, mCheckedPackageName); @@ -708,11 +711,13 @@ public class RequestRoleFragment extends DialogFragment { holder.subtitleText.setVisibility(!TextUtils.isEmpty(subtitle) ? View.VISIBLE : View.GONE); holder.subtitleText.setText(subtitle); + RoleUiBehaviorUtils.prepareRequestRoleItemViewAsUser(mRole, holder, applicationInfo, + Process.myUserHandle(), context); return view; } - private static class ViewHolder { + private static class ViewHolder implements RequestRoleItemView { @NonNull public final ImageView iconImage; @@ -729,6 +734,21 @@ public class RequestRoleFragment extends DialogFragment { titleText = view.requireViewById(R.id.title); subtitleText = view.requireViewById(R.id.subtitle); } + + @Override + public ImageView getIconImageView() { + return iconImage; + } + + @Override + public TextView getTitleTextView() { + return titleText; + } + + @Override + public TextView getSubtitleTextView() { + return subtitleText; + } } } } diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/RequestRoleItemView.java b/PermissionController/src/com/android/permissioncontroller/role/ui/RequestRoleItemView.java new file mode 100644 index 000000000..25dea89ad --- /dev/null +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/RequestRoleItemView.java @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.permissioncontroller.role.ui; + +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; + +/** + * Item view for qualifying applications in role requests. + */ +public interface RequestRoleItemView { + + /** + * Get the {@link ImageView} for item icon. + */ + @NonNull + ImageView getIconImageView(); + + /** + * Get the {@link TextView} for item title. + */ + @NonNull + TextView getTitleTextView(); + + /** + * Get the {@link TextView} for item subtitle. + */ + @NonNull + TextView getSubtitleTextView(); +} diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/RoleUiBehavior.java b/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/RoleUiBehavior.java index 0a8f9113f..ae5c03676 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/RoleUiBehavior.java +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/RoleUiBehavior.java @@ -25,6 +25,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.preference.Preference; +import com.android.permissioncontroller.role.ui.RequestRoleItemView; import com.android.permissioncontroller.role.ui.TwoTargetPreference; import com.android.role.controller.model.Role; @@ -36,6 +37,19 @@ import java.util.List; public interface RoleUiBehavior { /** + * Prepare a {@link RequestRoleItemView} for this role and an application. + * + * @param role the role to prepare the preference for + * @param itemView the {@link RequestRoleItemView} for the application + * @param applicationInfo the {@link ApplicationInfo} for the application + * @param user the user for this role + * @param context the {@code Context} to retrieve system services + */ + default void prepareRequestRoleItemViewAsUser(@NonNull Role role, + @NonNull RequestRoleItemView itemView, @NonNull ApplicationInfo applicationInfo, + @NonNull UserHandle user, @NonNull Context context) {} + + /** * Get the {@link Intent} to manage this role, or {@code null} to use the default UI. * * @param role the role to get the intent for @@ -62,14 +76,14 @@ public interface RoleUiBehavior { default void preparePreferenceAsUser(@NonNull Role role, @NonNull TwoTargetPreference preference, @NonNull List<ApplicationInfo> applicationInfos, - @NonNull UserHandle user, - @NonNull Context context) {} + @NonNull UserHandle user, @NonNull Context context) {} /** - * Prepare a {@link Preference} for this role. + * Prepare a {@link Preference} for this role and an application. * * @param role the role to prepare the preference for - * @param preference the {@link Preference} for this role + * @param preference the {@link Preference} for the application + * @param applicationInfo the {@link ApplicationInfo} for the application * @param user the user for this role * @param context the {@code Context} to retrieve system services */ diff --git a/PermissionController/src/com/android/permissioncontroller/role/utils/RoleUiBehaviorUtils.java b/PermissionController/src/com/android/permissioncontroller/role/utils/RoleUiBehaviorUtils.java index 21d16695c..c11a74259 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/utils/RoleUiBehaviorUtils.java +++ b/PermissionController/src/com/android/permissioncontroller/role/utils/RoleUiBehaviorUtils.java @@ -25,6 +25,7 @@ import android.util.Log; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import com.android.permissioncontroller.role.ui.RequestRoleItemView; import com.android.permissioncontroller.role.ui.RoleApplicationPreference; import com.android.permissioncontroller.role.ui.RolePreference; import com.android.permissioncontroller.role.ui.behavior.RoleUiBehavior; @@ -61,6 +62,19 @@ public final class RoleUiBehaviorUtils { } /** + * @see RoleUiBehavior#prepareRequestRoleItemViewAsUser + */ + public static void prepareRequestRoleItemViewAsUser(@NonNull Role role, + @NonNull RequestRoleItemView itemView, @NonNull ApplicationInfo applicationInfo, + @NonNull UserHandle user, @NonNull Context context) { + RoleUiBehavior uiBehavior = getUiBehavior(role); + if (uiBehavior == null) { + return; + } + uiBehavior.prepareRequestRoleItemViewAsUser(role, itemView, applicationInfo, user, context); + } + + /** * @see RoleUiBehavior#getManageIntentAsUser */ @Nullable |