summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Hai Zhang <zhanghai@google.com> 2024-02-24 01:40:56 +0000
committer Hai Zhang <zhanghai@google.com> 2024-02-28 19:59:43 +0000
commit43f3a1cf51a5fd68ce660a9938f6e2e8698ef816 (patch)
tree4f7ddb14f142408250ddbb5b3d6527a449b15597
parent2930a66c114b5cd7b490fb8d1ce19c286a2e75d1 (diff)
Create RoleUiBehavior.prepareRequestRoleItemViewAsUser().
As a generic way that allows WalletRoleUiBehavior to override the item text. LOW_COVERAGE_REASON=Trivial change in amount of actual code lines (excluding comments, declarations and interfaces), existing CUJ already covered by tests, the only thing uncovered should be the 3 getters Bug: 291794775 Test: presubmit Change-Id: Ia27c169fe5876da01562be089d98aefab024ea01
-rw-r--r--PermissionController/src/com/android/permissioncontroller/role/ui/RequestRoleFragment.java24
-rw-r--r--PermissionController/src/com/android/permissioncontroller/role/ui/RequestRoleItemView.java46
-rw-r--r--PermissionController/src/com/android/permissioncontroller/role/ui/behavior/RoleUiBehavior.java22
-rw-r--r--PermissionController/src/com/android/permissioncontroller/role/utils/RoleUiBehaviorUtils.java14
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