diff options
26 files changed, 203 insertions, 176 deletions
diff --git a/PermissionController/role-controller/java/com/android/role/controller/behavior/AssistantRoleBehavior.java b/PermissionController/role-controller/java/com/android/role/controller/behavior/AssistantRoleBehavior.java index 7ab0b9bd2..c20734cde 100644 --- a/PermissionController/role-controller/java/com/android/role/controller/behavior/AssistantRoleBehavior.java +++ b/PermissionController/role-controller/java/com/android/role/controller/behavior/AssistantRoleBehavior.java @@ -38,6 +38,7 @@ import androidx.annotation.Nullable; import com.android.role.controller.model.Role; import com.android.role.controller.model.RoleBehavior; +import com.android.role.controller.model.VisibilityMixin; import com.android.role.controller.util.UserUtils; import org.xmlpull.v1.XmlPullParserException; @@ -193,4 +194,10 @@ public class AssistantRoleBehavior implements RoleBehavior { return true; } + + @Override + public boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user, + @NonNull Context context) { + return VisibilityMixin.isVisible("config_showDefaultAssistant", false, user, context); + } } diff --git a/PermissionController/role-controller/java/com/android/role/controller/behavior/BrowserRoleBehavior.java b/PermissionController/role-controller/java/com/android/role/controller/behavior/BrowserRoleBehavior.java index f64c3bcf0..0261e1eee 100644 --- a/PermissionController/role-controller/java/com/android/role/controller/behavior/BrowserRoleBehavior.java +++ b/PermissionController/role-controller/java/com/android/role/controller/behavior/BrowserRoleBehavior.java @@ -31,6 +31,7 @@ import com.android.modules.utils.build.SdkLevel; import com.android.role.controller.model.Permissions; import com.android.role.controller.model.Role; import com.android.role.controller.model.RoleBehavior; +import com.android.role.controller.model.VisibilityMixin; import com.android.role.controller.util.CollectionUtils; import com.android.role.controller.util.PackageUtils; import com.android.role.controller.util.UserUtils; @@ -154,4 +155,10 @@ public class BrowserRoleBehavior implements RoleBehavior { } } } + + @Override + public boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user, + @NonNull Context context) { + return VisibilityMixin.isVisible("config_showBrowserRole", true, user, context); + } } diff --git a/PermissionController/role-controller/java/com/android/role/controller/behavior/DialerRoleBehavior.java b/PermissionController/role-controller/java/com/android/role/controller/behavior/DialerRoleBehavior.java index d0ee2d5bf..57b5412dc 100644 --- a/PermissionController/role-controller/java/com/android/role/controller/behavior/DialerRoleBehavior.java +++ b/PermissionController/role-controller/java/com/android/role/controller/behavior/DialerRoleBehavior.java @@ -26,6 +26,7 @@ import com.android.modules.utils.build.SdkLevel; import com.android.role.controller.model.Permissions; import com.android.role.controller.model.Role; import com.android.role.controller.model.RoleBehavior; +import com.android.role.controller.model.VisibilityMixin; import com.android.role.controller.util.PackageUtils; import java.util.Arrays; @@ -73,4 +74,10 @@ public class DialerRoleBehavior implements RoleBehavior { user, context); } } + + @Override + public boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user, + @NonNull Context context) { + return VisibilityMixin.isVisible("config_showDialerRole", true, user, context); + } } diff --git a/PermissionController/role-controller/java/com/android/role/controller/behavior/EmergencyRoleBehavior.java b/PermissionController/role-controller/java/com/android/role/controller/behavior/EmergencyRoleBehavior.java index 5c23a996e..f19c86596 100644 --- a/PermissionController/role-controller/java/com/android/role/controller/behavior/EmergencyRoleBehavior.java +++ b/PermissionController/role-controller/java/com/android/role/controller/behavior/EmergencyRoleBehavior.java @@ -26,6 +26,7 @@ import androidx.annotation.Nullable; import com.android.role.controller.model.Role; import com.android.role.controller.model.RoleBehavior; +import com.android.role.controller.model.VisibilityMixin; import com.android.role.controller.util.PackageUtils; import java.util.List; @@ -68,4 +69,10 @@ public class EmergencyRoleBehavior implements RoleBehavior { } return fallbackPackageInfo != null ? fallbackPackageInfo.packageName : null; } + + @Override + public boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user, + @NonNull Context context) { + return VisibilityMixin.isVisible("config_showDefaultEmergency", false, user, context); + } } diff --git a/PermissionController/role-controller/java/com/android/role/controller/behavior/HomeRoleBehavior.java b/PermissionController/role-controller/java/com/android/role/controller/behavior/HomeRoleBehavior.java index 5bdd5f682..4bf5a6294 100644 --- a/PermissionController/role-controller/java/com/android/role/controller/behavior/HomeRoleBehavior.java +++ b/PermissionController/role-controller/java/com/android/role/controller/behavior/HomeRoleBehavior.java @@ -35,6 +35,7 @@ import com.android.role.controller.model.AppOpPermissions; import com.android.role.controller.model.Permissions; import com.android.role.controller.model.Role; import com.android.role.controller.model.RoleBehavior; +import com.android.role.controller.model.VisibilityMixin; import com.android.role.controller.util.UserUtils; import java.util.Arrays; @@ -113,7 +114,7 @@ public class HomeRoleBehavior implements RoleBehavior { /** * Check if the application is a settings application */ - public static boolean isSettingsApplicationAsUser(@NonNull ApplicationInfo applicationInfo, + private static boolean isSettingsApplicationAsUser(@NonNull ApplicationInfo applicationInfo, @NonNull UserHandle user, @NonNull Context context) { Context userContext = UserUtils.getUserContext(context, user); PackageManager userPackageManager = userContext.getPackageManager(); @@ -213,4 +214,17 @@ public class HomeRoleBehavior implements RoleBehavior { final int flags = permissionInfo.getProtectionFlags(); return (flags & PermissionInfo.PROTECTION_FLAG_ROLE) == PermissionInfo.PROTECTION_FLAG_ROLE; } + + @Override + public boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user, + @NonNull Context context) { + return VisibilityMixin.isVisible("config_showDefaultHome", false, user, context); + } + + @Override + public boolean isApplicationVisibleAsUser(@NonNull Role role, + @NonNull ApplicationInfo applicationInfo, @NonNull UserHandle user, + @NonNull Context context) { + return !isSettingsApplicationAsUser(applicationInfo, user, context); + } } diff --git a/PermissionController/role-controller/java/com/android/role/controller/behavior/SmsRoleBehavior.java b/PermissionController/role-controller/java/com/android/role/controller/behavior/SmsRoleBehavior.java index 6e5c5c920..b614594c5 100644 --- a/PermissionController/role-controller/java/com/android/role/controller/behavior/SmsRoleBehavior.java +++ b/PermissionController/role-controller/java/com/android/role/controller/behavior/SmsRoleBehavior.java @@ -30,6 +30,7 @@ import com.android.modules.utils.build.SdkLevel; import com.android.role.controller.model.Permissions; import com.android.role.controller.model.Role; import com.android.role.controller.model.RoleBehavior; +import com.android.role.controller.model.VisibilityMixin; import com.android.role.controller.util.CollectionUtils; import com.android.role.controller.util.PackageUtils; import com.android.role.controller.util.UserUtils; @@ -129,4 +130,10 @@ public class SmsRoleBehavior implements RoleBehavior { user, context); } } + + @Override + public boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user, + @NonNull Context context) { + return VisibilityMixin.isVisible("config_showSmsRole", true, user, context); + } } diff --git a/PermissionController/role-controller/java/com/android/role/controller/model/Role.java b/PermissionController/role-controller/java/com/android/role/controller/model/Role.java index e80ea1194..6c7eb7d9e 100644 --- a/PermissionController/role-controller/java/com/android/role/controller/model/Role.java +++ b/PermissionController/role-controller/java/com/android/role/controller/model/Role.java @@ -949,6 +949,40 @@ public class Role { RoleManagerCompat.setRoleFallbackEnabledAsUser(this, false, user, context); } + /** + * Check whether this role should be visible to user. + * + * @param user the user to check for + * @param context the `Context` to retrieve system services + * + * @return whether this role should be visible to user + */ + public boolean isVisibleAsUser(@NonNull UserHandle user, @NonNull Context context) { + RoleBehavior behavior = getBehavior(); + if (behavior == null) { + return isVisible(); + } + return isVisible() && behavior.isVisibleAsUser(this, user, context); + } + + /** + * Check whether a qualifying application should be visible to user. + * + * @param applicationInfo the {@link ApplicationInfo} for the application + * @param user the user for the application + * @param context the {@code Context} to retrieve system services + * + * @return whether the qualifying application should be visible to user + */ + public boolean isApplicationVisibleAsUser(@NonNull ApplicationInfo applicationInfo, + @NonNull UserHandle user, @NonNull Context context) { + RoleBehavior behavior = getBehavior(); + if (behavior == null) { + return true; + } + return behavior.isApplicationVisibleAsUser(this, applicationInfo, user, context); + } + @Override public String toString() { return "Role{" diff --git a/PermissionController/role-controller/java/com/android/role/controller/model/RoleBehavior.java b/PermissionController/role-controller/java/com/android/role/controller/model/RoleBehavior.java index 34d2282a7..4bc1873d5 100644 --- a/PermissionController/role-controller/java/com/android/role/controller/model/RoleBehavior.java +++ b/PermissionController/role-controller/java/com/android/role/controller/model/RoleBehavior.java @@ -17,6 +17,7 @@ package com.android.role.controller.model; import android.content.Context; +import android.content.pm.ApplicationInfo; import android.os.UserHandle; import androidx.annotation.NonNull; @@ -112,4 +113,34 @@ public interface RoleBehavior { */ default void onHolderChangedAsUser(@NonNull Role role, @NonNull UserHandle user, @NonNull Context context) {} + + /** + * Check whether this role should be visible to user. + * + * @param role the role to check for + * @param user the user to check for + * @param context the `Context` to retrieve system services + * + * @return whether this role should be visible to user + */ + default boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user, + @NonNull Context context) { + return true; + } + + /** + * Check whether a qualifying application should be visible to user. + * + * @param role the role to check for + * @param applicationInfo the {@link ApplicationInfo} for the application + * @param user the user for the application + * @param context the {@code Context} to retrieve system services + * + * @return whether the qualifying application should be visible to user + */ + default boolean isApplicationVisibleAsUser(@NonNull Role role, + @NonNull ApplicationInfo applicationInfo, @NonNull UserHandle user, + @NonNull Context context) { + return true; + } } diff --git a/PermissionController/src/com/android/permissioncontroller/role/model/VisibilityMixin.java b/PermissionController/role-controller/java/com/android/role/controller/model/VisibilityMixin.java index 90cda72ca..d4f56fe37 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/model/VisibilityMixin.java +++ b/PermissionController/role-controller/java/com/android/role/controller/model/VisibilityMixin.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.permissioncontroller.role.model; +package com.android.role.controller.model; import android.content.Context; import android.content.res.Resources; @@ -23,8 +23,7 @@ import android.util.Log; import androidx.annotation.NonNull; -import com.android.role.controller.model.Role; -import com.android.role.controller.model.RoleBehavior; +import com.android.role.controller.util.ContextUtils; /** * Mixin for {@link RoleBehavior#isVisibleAsUser(Role, UserHandle, Context)} that returns whether @@ -37,11 +36,26 @@ public class VisibilityMixin { private VisibilityMixin() {} /** - * @see Role#isVisibleAsUser(UserHandle, Context) + * Get the boolean resource value that represents whether a role is visible to the user. + * + * @param resourceName the name of the resource + * @param isPermissionControllerResource if {@code true}, and if the current SDK level is at + * least V, get the resource from a PermissionController context for the given user. + * Otherwise, get the resource the provided context. + * @param user the user to get the PermissionController context for + * @param context the `Context` to retrieve the resource (and system services) + * + * @return whether this role should be visible to user */ - public static boolean isVisible(@NonNull String resourceName, @NonNull Context context) { - Resources resources = context.getResources(); - int resourceId = resources.getIdentifier(resourceName, "bool", "android"); + public static boolean isVisible(@NonNull String resourceName, + boolean isPermissionControllerResource, @NonNull UserHandle user, + @NonNull Context context) { + Context packageContext = isPermissionControllerResource + ? ContextUtils.getPermissionControllerContext(user, context) : context; + Resources resources = packageContext.getResources(); + String packageName = isPermissionControllerResource ? packageContext.getPackageName() : + "android"; + int resourceId = resources.getIdentifier(resourceName, "bool", packageName); if (resourceId == 0) { Log.w(LOG_TAG, "Cannot find resource for visibility: " + resourceName); return true; diff --git a/PermissionController/role-controller/java/com/android/role/controller/util/ContextUtils.java b/PermissionController/role-controller/java/com/android/role/controller/util/ContextUtils.java new file mode 100644 index 000000000..73ac266dc --- /dev/null +++ b/PermissionController/role-controller/java/com/android/role/controller/util/ContextUtils.java @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2023 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.role.controller.util; + +import android.content.Context; +import android.content.pm.PackageManager; +import android.os.UserHandle; + +import androidx.annotation.NonNull; + +import com.android.modules.utils.build.SdkLevel; + +/** + * Utility methods for dealing with {@link Context}s. + */ +public final class ContextUtils { + + private ContextUtils() {} + + /** + * Create a Context for the PermissionController app for the given user. + * + * @param user the user of the application + * @param context the context to clone + * + * @return The PermissionController context for the given user + */ + @NonNull + public static Context getPermissionControllerContext(@NonNull UserHandle user, + @NonNull Context context) { + if (!SdkLevel.isAtLeastV()) { + // We don't have the getPermissionControllerPackageName() API below V, + // but role controller always runs in PermissionController and in its own user below V. + return context; + } + String packageName = context.getPackageManager().getPermissionControllerPackageName(); + try { + return context.createPackageContextAsUser(packageName, 0, user); + } catch (PackageManager.NameNotFoundException e) { + throw new RuntimeException("Cannot create PermissionController context", e); + } + } +} diff --git a/PermissionController/src/com/android/permissioncontroller/PermissionControllerApplication.java b/PermissionController/src/com/android/permissioncontroller/PermissionControllerApplication.java index 729a5ec43..50da28149 100644 --- a/PermissionController/src/com/android/permissioncontroller/PermissionControllerApplication.java +++ b/PermissionController/src/com/android/permissioncontroller/PermissionControllerApplication.java @@ -33,7 +33,6 @@ import com.android.permissioncontroller.permission.utils.Utils; import com.android.permissioncontroller.privacysources.SafetyCenterAccessibilityListener; import com.android.permissioncontroller.role.model.RoleParserInitializer; import com.android.permissioncontroller.role.ui.SpecialAppAccessListActivity; -import com.android.permissioncontroller.role.utils.RoleUiBehaviorUtils; import com.android.role.controller.model.Role; import com.android.role.controller.model.Roles; @@ -73,7 +72,7 @@ public final class PermissionControllerApplication extends Application { Role role = roles.valueAt(i); if (!role.isAvailableAsUser(Process.myUserHandle(), this) - || !RoleUiBehaviorUtils.isVisible(role, this)) { + || !role.isVisibleAsUser(Process.myUserHandle(), this)) { continue; } if (!role.isExclusive()) { diff --git a/PermissionController/src/com/android/permissioncontroller/role/service/RoleControllerServiceImpl.java b/PermissionController/src/com/android/permissioncontroller/role/service/RoleControllerServiceImpl.java index 45f1236bb..38fe22b76 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/service/RoleControllerServiceImpl.java +++ b/PermissionController/src/com/android/permissioncontroller/role/service/RoleControllerServiceImpl.java @@ -31,7 +31,6 @@ import androidx.annotation.WorkerThread; import com.android.permissioncontroller.permission.utils.CollectionUtils; import com.android.permissioncontroller.role.utils.PackageUtils; -import com.android.permissioncontroller.role.utils.RoleUiBehaviorUtils; import com.android.role.controller.model.Role; import com.android.role.controller.model.Roles; import com.android.role.controller.util.UserUtils; @@ -437,8 +436,8 @@ public class RoleControllerServiceImpl extends RoleControllerService { } ApplicationInfo applicationInfo = PackageUtils.getApplicationInfoAsUser(packageName, mUser, this); - if (applicationInfo == null || !RoleUiBehaviorUtils.isApplicationVisibleAsUser(role, - applicationInfo, mUser, this)) { + if (applicationInfo == null || !role.isApplicationVisibleAsUser(applicationInfo, mUser, + this)) { return false; } return true; @@ -454,7 +453,7 @@ public class RoleControllerServiceImpl extends RoleControllerService { return false; } - return RoleUiBehaviorUtils.isVisibleAsUser(role, mUser, this); + return role.isVisibleAsUser(mUser, this); } private static boolean checkFlags(int flags, int allowedFlags) { diff --git a/PermissionController/src/com/android/permissioncontroller/role/service/RoleSearchIndexablesProvider.java b/PermissionController/src/com/android/permissioncontroller/role/service/RoleSearchIndexablesProvider.java index 9a0067dbf..870e2c03a 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/service/RoleSearchIndexablesProvider.java +++ b/PermissionController/src/com/android/permissioncontroller/role/service/RoleSearchIndexablesProvider.java @@ -29,7 +29,6 @@ import androidx.annotation.Nullable; import com.android.permissioncontroller.R; import com.android.permissioncontroller.permission.service.BaseSearchIndexablesProvider; import com.android.permissioncontroller.role.model.RoleParserInitializer; -import com.android.permissioncontroller.role.utils.RoleUiBehaviorUtils; import com.android.role.controller.model.Role; import com.android.role.controller.model.Roles; @@ -63,7 +62,7 @@ public class RoleSearchIndexablesProvider extends BaseSearchIndexablesProvider { long token = Binder.clearCallingIdentity(); try { if (!role.isAvailableAsUser(Process.myUserHandle(), context) - || !RoleUiBehaviorUtils.isVisible(role, context)) { + || !role.isVisibleAsUser(Process.myUserHandle(), context)) { continue; } } finally { diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppActivity.java b/PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppActivity.java index 0e7e51a02..41f1a06a9 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppActivity.java +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppActivity.java @@ -32,7 +32,6 @@ import com.android.permissioncontroller.R; import com.android.permissioncontroller.role.ui.auto.AutoDefaultAppFragment; import com.android.permissioncontroller.role.ui.handheld.HandheldDefaultAppFragment; import com.android.permissioncontroller.role.ui.wear.WearDefaultAppFragment; -import com.android.permissioncontroller.role.utils.RoleUiBehaviorUtils; import com.android.role.controller.model.Role; import com.android.role.controller.model.Roles; @@ -89,7 +88,7 @@ public class DefaultAppActivity extends SettingsActivity { return; } - if (!RoleUiBehaviorUtils.isVisibleAsUser(role, user, this)) { + if (!role.isVisibleAsUser(user, this)) { Log.e(LOG_TAG, "Role is invisible: " + roleName); finish(); return; diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/RequestRoleActivity.java b/PermissionController/src/com/android/permissioncontroller/role/ui/RequestRoleActivity.java index 856416fbb..279e55266 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/RequestRoleActivity.java +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/RequestRoleActivity.java @@ -39,7 +39,6 @@ import com.android.permissioncontroller.permission.utils.CollectionUtils; import com.android.permissioncontroller.role.model.UserDeniedManager; import com.android.permissioncontroller.role.ui.wear.WearRequestRoleFragment; import com.android.permissioncontroller.role.utils.PackageUtils; -import com.android.permissioncontroller.role.utils.RoleUiBehaviorUtils; import com.android.role.controller.model.Role; import com.android.role.controller.model.Roles; @@ -113,7 +112,7 @@ public class RequestRoleActivity extends FragmentActivity { return; } - if (!RoleUiBehaviorUtils.isVisible(role, this)) { + if (!role.isVisibleAsUser(Process.myUserHandle(), this)) { Log.e(LOG_TAG, "Role is invisible: " + mRoleName); reportRequestResult( PermissionControllerStatsLog.ROLE_REQUEST_RESULT_REPORTED__RESULT__IGNORED); diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/RoleListLiveData.java b/PermissionController/src/com/android/permissioncontroller/role/ui/RoleListLiveData.java index b9011bd78..e6df3ed8a 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/RoleListLiveData.java +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/RoleListLiveData.java @@ -30,7 +30,6 @@ import androidx.lifecycle.LiveData; import com.android.permissioncontroller.AsyncTaskLiveData; import com.android.permissioncontroller.role.utils.PackageUtils; -import com.android.permissioncontroller.role.utils.RoleUiBehaviorUtils; import com.android.role.controller.model.Role; import com.android.role.controller.model.Roles; @@ -97,7 +96,7 @@ public class RoleListLiveData extends AsyncTaskLiveData<List<RoleItem>> continue; } - if (!RoleUiBehaviorUtils.isVisibleAsUser(role, mUser, mContext)) { + if (!role.isVisibleAsUser(mUser, mContext)) { continue; } diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/RoleLiveData.java b/PermissionController/src/com/android/permissioncontroller/role/ui/RoleLiveData.java index 3ccb1d8bc..bb492f76d 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/RoleLiveData.java +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/RoleLiveData.java @@ -30,7 +30,6 @@ import androidx.lifecycle.LiveData; import com.android.permissioncontroller.AsyncTaskLiveData; import com.android.permissioncontroller.role.utils.PackageUtils; -import com.android.permissioncontroller.role.utils.RoleUiBehaviorUtils; import com.android.role.controller.model.Role; import java.util.ArrayList; @@ -95,8 +94,7 @@ public class RoleLiveData extends AsyncTaskLiveData<List<Pair<ApplicationInfo, B + qualifyingPackageName); continue; } - if (!RoleUiBehaviorUtils.isApplicationVisibleAsUser(mRole, qualifyingApplicationInfo, - mUser, mContext)) { + if (!mRole.isApplicationVisibleAsUser(qualifyingApplicationInfo, mUser, mContext)) { continue; } boolean isHolderApplication = holderPackageNames.contains(qualifyingPackageName); diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/AssistantRoleUiBehavior.java b/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/AssistantRoleUiBehavior.java index 40bd7a33e..4df3ccf99 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/AssistantRoleUiBehavior.java +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/AssistantRoleUiBehavior.java @@ -26,7 +26,6 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.android.permissioncontroller.R; -import com.android.permissioncontroller.role.model.VisibilityMixin; import com.android.role.controller.model.Role; /*** @@ -34,12 +33,6 @@ import com.android.role.controller.model.Role; */ public class AssistantRoleUiBehavior implements RoleUiBehavior { - @Override - public boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user, - @NonNull Context context) { - return VisibilityMixin.isVisible("config_showDefaultAssistant", context); - } - @Nullable @Override public Intent getManageIntentAsUser(@NonNull Role role, @NonNull UserHandle user, diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/BrowserRoleUiBehavior.java b/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/BrowserRoleUiBehavior.java deleted file mode 100644 index 018b0db41..000000000 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/BrowserRoleUiBehavior.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2022 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.behavior; - -import android.content.Context; -import android.os.UserHandle; - -import androidx.annotation.NonNull; - -import com.android.permissioncontroller.R; -import com.android.role.controller.model.Role; - -/*** - * Class for UI behavior of Browser role - */ -public class BrowserRoleUiBehavior implements RoleUiBehavior { - - @Override - public boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user, - @NonNull Context context) { - return context.getResources().getBoolean(R.bool.config_showBrowserRole); - } -} diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/DialerRoleUiBehavior.java b/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/DialerRoleUiBehavior.java index e6b8dabe1..ab87e24cf 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/DialerRoleUiBehavior.java +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/DialerRoleUiBehavior.java @@ -49,12 +49,6 @@ public class DialerRoleUiBehavior implements RoleUiBehavior { } } - @Override - public boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user, - @NonNull Context context) { - return context.getResources().getBoolean(R.bool.config_showDialerRole); - } - @Nullable @Override public CharSequence getConfirmationMessage(@NonNull Role role, @NonNull String packageName, diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/EmergencyRoleUiBehavior.java b/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/EmergencyRoleUiBehavior.java index 8a62ee7eb..f891bb3ed 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/EmergencyRoleUiBehavior.java +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/EmergencyRoleUiBehavior.java @@ -17,13 +17,11 @@ package com.android.permissioncontroller.role.ui.behavior; import android.content.Context; -import android.os.UserHandle; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.android.permissioncontroller.role.model.EncryptionUnawareConfirmationMixin; -import com.android.permissioncontroller.role.model.VisibilityMixin; import com.android.role.controller.model.Role; /*** @@ -31,12 +29,6 @@ import com.android.role.controller.model.Role; */ public class EmergencyRoleUiBehavior implements RoleUiBehavior { - @Override - public boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user, - @NonNull Context context) { - return VisibilityMixin.isVisible("config_showDefaultEmergency", context); - } - @Nullable @Override public CharSequence getConfirmationMessage(@NonNull Role role, @NonNull String packageName, diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/HomeRoleUiBehavior.java b/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/HomeRoleUiBehavior.java index e49fc0d3d..323325d0b 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/HomeRoleUiBehavior.java +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/HomeRoleUiBehavior.java @@ -34,10 +34,8 @@ import androidx.preference.Preference; import com.android.permissioncontroller.R; import com.android.permissioncontroller.permission.utils.CollectionUtils; import com.android.permissioncontroller.permission.utils.Utils; -import com.android.permissioncontroller.role.model.VisibilityMixin; import com.android.permissioncontroller.role.ui.TwoTargetPreference; import com.android.permissioncontroller.role.utils.UserUtils; -import com.android.role.controller.behavior.HomeRoleBehavior; import com.android.role.controller.model.Role; /*** @@ -48,12 +46,6 @@ public class HomeRoleUiBehavior implements RoleUiBehavior { private static final String LOG_TAG = HomeRoleUiBehavior.class.getSimpleName(); @Override - public boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user, - @NonNull Context context) { - return VisibilityMixin.isVisible("config_showDefaultHome", context); - } - - @Override public void preparePreferenceAsUser(@NonNull Role role, @NonNull TwoTargetPreference preference, @NonNull UserHandle user, @NonNull Context context) { TwoTargetPreference.OnSecondTargetClickListener listener = null; @@ -82,14 +74,6 @@ public class HomeRoleUiBehavior implements RoleUiBehavior { } @Override - public boolean isApplicationVisibleAsUser(@NonNull Role role, - @NonNull ApplicationInfo applicationInfo, @NonNull UserHandle user, - @NonNull Context context) { - // Home is not available for work profile, so we can just use the current user. - return !HomeRoleBehavior.isSettingsApplicationAsUser(applicationInfo, user, context); - } - - @Override public void prepareApplicationPreferenceAsUser(@NonNull Role role, @NonNull Preference preference, @NonNull ApplicationInfo applicationInfo, @NonNull UserHandle user, @NonNull Context context) { 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 6e3b47fba..29dc5d2fc 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/RoleUiBehavior.java +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/RoleUiBehavior.java @@ -34,20 +34,6 @@ import com.android.role.controller.model.Role; public interface RoleUiBehavior { /** - * Check whether this role should be visible to user. - * - * @param role the role to check for - * @param user the user to check for - * @param context the `Context` to retrieve system services - * - * @return whether this role should be visible to user - */ - default boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user, - @NonNull Context context) { - return true; - } - - /** * 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 @@ -76,21 +62,6 @@ public interface RoleUiBehavior { @NonNull Context context) {} /** - * Check whether a qualifying application should be visible to user. - * - * @param applicationInfo the {@link ApplicationInfo} for the application - * @param user the user for the application - * @param context the {@code Context} to retrieve system services - * - * @return whether the qualifying application should be visible to user - */ - default boolean isApplicationVisibleAsUser(@NonNull Role role, - @NonNull ApplicationInfo applicationInfo, @NonNull UserHandle user, - @NonNull Context context) { - return true; - } - - /** * Prepare a {@link Preference} for this role. * * @param role the role to prepare the preference for diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/SmsRoleUiBehavior.java b/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/SmsRoleUiBehavior.java index 9fc9be3d4..e27bc1a30 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/SmsRoleUiBehavior.java +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/SmsRoleUiBehavior.java @@ -17,12 +17,10 @@ package com.android.permissioncontroller.role.ui.behavior; import android.content.Context; -import android.os.UserHandle; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import com.android.permissioncontroller.R; import com.android.permissioncontroller.role.model.EncryptionUnawareConfirmationMixin; import com.android.role.controller.model.Role; @@ -31,12 +29,6 @@ import com.android.role.controller.model.Role; */ public class SmsRoleUiBehavior implements RoleUiBehavior { - @Override - public boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user, - @NonNull Context context) { - return context.getResources().getBoolean(R.bool.config_showSmsRole); - } - @Nullable @Override public CharSequence getConfirmationMessage(@NonNull Role role, @NonNull String packageName, diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/specialappaccess/SpecialAppAccessActivity.java b/PermissionController/src/com/android/permissioncontroller/role/ui/specialappaccess/SpecialAppAccessActivity.java index 1616d9f93..472464061 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/specialappaccess/SpecialAppAccessActivity.java +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/specialappaccess/SpecialAppAccessActivity.java @@ -31,7 +31,6 @@ import com.android.permissioncontroller.R; import com.android.permissioncontroller.role.ui.SettingsActivity; import com.android.permissioncontroller.role.ui.auto.AutoSpecialAppAccessFragment; import com.android.permissioncontroller.role.ui.specialappaccess.handheld.HandheldSpecialAppAccessFragment; -import com.android.permissioncontroller.role.utils.RoleUiBehaviorUtils; import com.android.role.controller.model.Role; import com.android.role.controller.model.Roles; @@ -78,7 +77,7 @@ public class SpecialAppAccessActivity extends SettingsActivity { return; } - if (!RoleUiBehaviorUtils.isVisible(role, this)) { + if (!role.isVisibleAsUser(Process.myUserHandle(), this)) { Log.e(LOG_TAG, "Role is invisible: " + roleName); finish(); return; diff --git a/PermissionController/src/com/android/permissioncontroller/role/utils/RoleUiBehaviorUtils.java b/PermissionController/src/com/android/permissioncontroller/role/utils/RoleUiBehaviorUtils.java index 6081695b5..7ebc1ebd1 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/utils/RoleUiBehaviorUtils.java +++ b/PermissionController/src/com/android/permissioncontroller/role/utils/RoleUiBehaviorUtils.java @@ -19,7 +19,6 @@ package com.android.permissioncontroller.role.utils; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; -import android.os.Process; import android.os.UserHandle; import android.os.UserManager; import android.util.Log; @@ -63,30 +62,6 @@ public final class RoleUiBehaviorUtils { } /** - * @see RoleUiBehavior#isVisibleAsUser - */ - public static boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user, - @NonNull Context context) { - RoleUiBehavior uiBehavior = getUiBehavior(role); - if (uiBehavior == null) { - return role.isVisible(); - } - return role.isVisible() && uiBehavior.isVisibleAsUser(role, user, context); - } - - /** - * Check whether this role should be visible to user, for current user. - * - * @param context the `Context` to retrieve system services - * - * @return whether this role should be visible to user. - */ - public static boolean isVisible(@NonNull Role role, @NonNull Context context) { - return isVisibleAsUser(role, Process.myUserHandle(), context); - } - - - /** * @see RoleUiBehavior#getManageIntentAsUser */ @Nullable @@ -115,19 +90,6 @@ public final class RoleUiBehaviorUtils { } /** - * @see RoleUiBehavior#isApplicationVisibleAsUser - */ - public static boolean isApplicationVisibleAsUser(@NonNull Role role, - @NonNull ApplicationInfo applicationInfo, @NonNull UserHandle user, - @NonNull Context context) { - RoleUiBehavior uiBehavior = getUiBehavior(role); - if (uiBehavior == null) { - return true; - } - return uiBehavior.isApplicationVisibleAsUser(role, applicationInfo, user, context); - } - - /** * @see RoleUiBehavior#prepareApplicationPreferenceAsUser */ public static void prepareApplicationPreferenceAsUser(@NonNull Role role, |