Hides DELETE button for system user, since sys users cannot be deleted.
Change-Id: I242cd1a146682c4cd93b7f1e5f91efce3485ac83
Fixes: 67384316
Test: Visually verified the existence and location of delete button for various user scenarios on mojave.
diff --git a/src/com/android/car/settings/users/UserDetailsSettingsFragment.java b/src/com/android/car/settings/users/UserDetailsSettingsFragment.java
index 6ff311a..a33e328 100644
--- a/src/com/android/car/settings/users/UserDetailsSettingsFragment.java
+++ b/src/com/android/car/settings/users/UserDetailsSettingsFragment.java
@@ -15,10 +15,9 @@
*/
package com.android.car.settings.users;
-import android.app.ActivityManager;
+import android.annotation.IdRes;
import android.content.pm.UserInfo;
import android.os.Bundle;
-import android.os.UserHandle;
import android.support.design.widget.TextInputEditText;
import android.view.View;
import android.widget.Button;
@@ -35,9 +34,6 @@
private static final String TAG = "UserDetailsSettingsFragment";
private UserInfo mUserInfo;
- private boolean mCurrentUserIsOwner;
- private boolean mIsCurrentUser;
-
private TextInputEditText mUserNameEditText;
private Button mOkButton;
private Button mCancelButton;
@@ -60,8 +56,6 @@
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mUserInfo = getArguments().getParcelable(EXTRA_USER_INFO);
- mCurrentUserIsOwner = ActivityManager.getCurrentUser() == UserHandle.USER_SYSTEM;
- mIsCurrentUser = ActivityManager.getCurrentUser() == mUserInfo.id;
}
@Override
@@ -78,8 +72,7 @@
configureUsernameEditing();
- showRemoveUserButton();
- showSwitchButton();
+ showActionButtons();
}
@Override
@@ -105,8 +98,9 @@
getActivity().onBackPressed();
});
- if (mIsCurrentUser /* Each user can edit their own name. */
- || mCurrentUserIsOwner /* Owner can edit everyone's name. */) {
+ // Each user can edit their own name. Owner can edit everyone's name.
+ if (mUserManagerHelper.userIsCurrentUser(mUserInfo)
+ || mUserManagerHelper.currentUserIsSystemUser()) {
allowUserNameEditing();
} else {
mUserNameEditText.setEnabled(false);
@@ -130,8 +124,25 @@
});
}
- private void showRemoveUserButton() {
- Button removeUserBtn = (Button) getActivity().findViewById(R.id.action_button1);
+ private void showActionButtons() {
+ if (mUserManagerHelper.userIsCurrentUser(mUserInfo)) {
+ // Already in current user, shouldn't show SWITCH button.
+ showRemoveUserButton(R.id.action_button1);
+ return;
+ }
+
+ showRemoveUserButton(R.id.action_button2);
+ showSwitchButton(R.id.action_button1);
+ }
+
+ private void showRemoveUserButton(@IdRes int buttonId) {
+ if (!mUserManagerHelper.userCanBeRemoved(mUserInfo)) {
+ // User cannot be removed, do not show delete button.
+ return;
+ }
+
+ Button removeUserBtn = (Button) getActivity().findViewById(buttonId);
+ removeUserBtn.setVisibility(View.VISIBLE);
removeUserBtn.setText(R.string.delete_button);
removeUserBtn
.setOnClickListener(v -> {
@@ -142,15 +153,13 @@
});
}
- private void showSwitchButton() {
- if (!mIsCurrentUser) {
- Button switchUserBtn = (Button) getActivity().findViewById(R.id.action_button2);
- switchUserBtn.setVisibility(View.VISIBLE);
- switchUserBtn.setText(R.string.user_switch);
- switchUserBtn.setOnClickListener(v -> {
- mUserManagerHelper.switchToUser(mUserInfo);
- getActivity().onBackPressed();
- });
- }
+ private void showSwitchButton(@IdRes int buttonId) {
+ Button switchUserBtn = (Button) getActivity().findViewById(buttonId);
+ switchUserBtn.setVisibility(View.VISIBLE);
+ switchUserBtn.setText(R.string.user_switch);
+ switchUserBtn.setOnClickListener(v -> {
+ mUserManagerHelper.switchToUser(mUserInfo);
+ getActivity().onBackPressed();
+ });
}
}
diff --git a/src/com/android/car/settings/users/UserManagerHelper.java b/src/com/android/car/settings/users/UserManagerHelper.java
index 28a6531..8627288 100644
--- a/src/com/android/car/settings/users/UserManagerHelper.java
+++ b/src/com/android/car/settings/users/UserManagerHelper.java
@@ -180,6 +180,45 @@
}
/**
+ * Checks whether the user is system user (admin).
+ *
+ * @param userInfo User to check against system user.
+ * @return {@code true} if system user, {@code false} otherwise.
+ */
+ public boolean userIsSystemUser(UserInfo userInfo) {
+ return userInfo.id == UserHandle.USER_SYSTEM;
+ }
+
+ /**
+ * Returns whether this user can be removed from the system.
+ *
+ * @param userInfo User to be removed
+ * @return {@code true} if they can be removed, {@code false} otherwise.
+ */
+ public boolean userCanBeRemoved(UserInfo userInfo) {
+ return !userIsSystemUser(userInfo);
+ }
+
+ /**
+ * Checks whether currently logged in user is also the system user (admin).
+ *
+ * @return {@code true} if current user is admin, {@code false} otherwise.
+ */
+ public boolean currentUserIsSystemUser() {
+ return userIsSystemUser(getCurrentUserInfo());
+ }
+
+ /**
+ * Checks whether passed in user is the user that's currently logged in.
+ *
+ * @param userInfo User to check.
+ * @return {@code true} if current user, {@code false} otherwise.
+ */
+ public boolean userIsCurrentUser(UserInfo userInfo) {
+ return getCurrentUserInfo().id == userInfo.id;
+ }
+
+ /**
* Switches (logs in) to another user.
*
* @param userInfo User to switch to.