Improve multi user settings screen

- Added switch and user delete functionality to details screen.
- Added robo tests.

Screenshots: http://shortn/_S6fbIMhAYO
Bug: 142798722
Test: Run robo tests with this command:
  make -j64 RunSettingsRoboTests ROBOTEST_FILTER="com.android.settings.users.*SettingsTest"
Change-Id: Id51c12c5470e30e2dffe93f3bd8c22380d8bdc1f
This commit is contained in:
Andras Kloczl
2020-04-21 11:32:12 +01:00
parent 18490b2dc8
commit d19dc306dd
16 changed files with 1478 additions and 523 deletions

View File

@@ -21,18 +21,16 @@ import android.graphics.drawable.Drawable;
import android.os.UserHandle;
import android.os.UserManager;
import android.util.AttributeSet;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import androidx.preference.PreferenceViewHolder;
import com.android.settings.R;
import com.android.settingslib.RestrictedLockUtilsInternal;
import com.android.settingslib.RestrictedPreference;
import java.util.Comparator;
/**
* Preference for a user that appear on {@link UserSettings} screen.
*/
public class UserPreference extends RestrictedPreference {
private static final int ALPHA_ENABLED = 255;
private static final int ALPHA_DISABLED = 102;
@@ -44,8 +42,7 @@ public class UserPreference extends RestrictedPreference {
if (p1 == null) {
return -1;
}
else if (p2 == null) {
} else if (p2 == null) {
return 1;
}
int sn1 = p1.getSerialNumber();
@@ -58,26 +55,15 @@ public class UserPreference extends RestrictedPreference {
return 0;
};
private OnClickListener mDeleteClickListener;
private OnClickListener mSettingsClickListener;
private int mSerialNumber = -1;
private int mUserId = USERID_UNKNOWN;
static final int SETTINGS_ID = R.id.manage_user;
static final int DELETE_ID = R.id.trash_user;
public UserPreference(Context context, AttributeSet attrs) {
this(context, attrs, USERID_UNKNOWN, null, null);
this(context, attrs, USERID_UNKNOWN);
}
UserPreference(Context context, AttributeSet attrs, int userId,
OnClickListener settingsListener,
OnClickListener deleteListener) {
UserPreference(Context context, AttributeSet attrs, int userId) {
super(context, attrs);
if (deleteListener != null || settingsListener != null) {
setWidgetLayoutResource(R.layout.restricted_preference_user_delete_widget);
}
mDeleteClickListener = deleteListener;
mSettingsClickListener = settingsListener;
mUserId = userId;
useAdminDisabledSummary(true);
}
@@ -92,62 +78,13 @@ public class UserPreference extends RestrictedPreference {
@Override
protected boolean shouldHideSecondTarget() {
if (isDisabledByAdmin()) {
// Disabled by admin, show no secondary target.
return true;
}
if (canDeleteUser()) {
// Need to show delete user target so don't hide.
return false;
}
// Hide if don't have advanced setting listener.
return mSettingsClickListener == null;
return true;
}
@Override
public void onBindViewHolder(PreferenceViewHolder view) {
super.onBindViewHolder(view);
final boolean disabledByAdmin = isDisabledByAdmin();
dimIcon(disabledByAdmin);
View userDeleteWidget = view.findViewById(R.id.user_delete_widget);
if (userDeleteWidget != null) {
userDeleteWidget.setVisibility(disabledByAdmin ? View.GONE : View.VISIBLE);
}
if (!disabledByAdmin) {
View deleteDividerView = view.findViewById(R.id.divider_delete);
View manageDividerView = view.findViewById(R.id.divider_manage);
View deleteView = view.findViewById(R.id.trash_user);
if (deleteView != null) {
if (canDeleteUser()) {
deleteView.setVisibility(View.VISIBLE);
deleteDividerView.setVisibility(View.VISIBLE);
deleteView.setOnClickListener(mDeleteClickListener);
deleteView.setTag(this);
} else {
deleteView.setVisibility(View.GONE);
deleteDividerView.setVisibility(View.GONE);
}
}
ImageView manageView = (ImageView) view.findViewById(R.id.manage_user);
if (manageView != null) {
if (mSettingsClickListener != null) {
manageView.setVisibility(View.VISIBLE);
manageDividerView.setVisibility(mDeleteClickListener == null
? View.VISIBLE : View.GONE);
manageView.setOnClickListener(mSettingsClickListener);
manageView.setTag(this);
} else {
manageView.setVisibility(View.GONE);
manageDividerView.setVisibility(View.GONE);
}
}
}
}
private boolean canDeleteUser() {
return mDeleteClickListener != null
&& !RestrictedLockUtilsInternal.hasBaseUserRestriction(getContext(),
UserManager.DISALLOW_REMOVE_USER, UserHandle.myUserId());
dimIcon(isDisabledByAdmin());
}
private int getSerialNumber() {