1 /* 2 * Copyright (C) 2012 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.settings.users; 18 19 import com.android.settings.R; 20 21 import android.content.Context; 22 import android.os.UserHandle; 23 import android.os.UserManager; 24 import android.preference.Preference; 25 import android.util.AttributeSet; 26 import android.view.View; 27 import android.view.View.OnClickListener; 28 29 import java.util.Comparator; 30 31 public class UserPreference extends Preference { 32 33 public static final int USERID_UNKNOWN = -10; 34 public static final int USERID_GUEST_DEFAULTS = -11; 35 public static final Comparator<UserPreference> SERIAL_NUMBER_COMPARATOR = 36 new Comparator<UserPreference>() { 37 @Override 38 public int compare(UserPreference p1, UserPreference p2) { 39 int sn1 = p1.getSerialNumber(); 40 int sn2 = p2.getSerialNumber(); 41 if (sn1 < sn2) { 42 return -1; 43 } else if (sn1 > sn2) { 44 return 1; 45 } 46 return 0; 47 } 48 }; 49 50 private OnClickListener mDeleteClickListener; 51 private OnClickListener mSettingsClickListener; 52 private int mSerialNumber = -1; 53 private int mUserId = USERID_UNKNOWN; 54 static final int SETTINGS_ID = R.id.manage_user; 55 static final int DELETE_ID = R.id.trash_user; 56 57 public UserPreference(Context context, AttributeSet attrs) { 58 this(context, attrs, USERID_UNKNOWN, null, null); 59 } 60 61 UserPreference(Context context, AttributeSet attrs, int userId, 62 OnClickListener settingsListener, 63 OnClickListener deleteListener) { 64 super(context, attrs); 65 if (deleteListener != null || settingsListener != null) { 66 setWidgetLayoutResource(R.layout.preference_user_delete_widget); 67 } 68 mDeleteClickListener = deleteListener; 69 mSettingsClickListener = settingsListener; 70 mUserId = userId; 71 } 72 73 @Override 74 protected void onBindView(View view) { 75 UserManager um = (UserManager) getContext().getSystemService(Context.USER_SERVICE); 76 View deleteDividerView = view.findViewById(R.id.divider_delete); 77 View manageDividerView = view.findViewById(R.id.divider_manage); 78 View deleteView = view.findViewById(R.id.trash_user); 79 if (deleteView != null) { 80 if (mDeleteClickListener != null 81 && !um.hasUserRestriction(UserManager.DISALLOW_REMOVE_USER)) { 82 deleteView.setOnClickListener(mDeleteClickListener); 83 deleteView.setTag(this); 84 } else { 85 deleteView.setVisibility(View.GONE); 86 deleteDividerView.setVisibility(View.GONE); 87 } 88 } 89 View manageView = view.findViewById(R.id.manage_user); 90 if (manageView != null) { 91 if (mSettingsClickListener != null) { 92 manageView.setOnClickListener(mSettingsClickListener); 93 manageView.setTag(this); 94 if (mDeleteClickListener != null) { 95 manageDividerView.setVisibility(View.GONE); 96 } 97 } else { 98 manageView.setVisibility(View.GONE); 99 manageDividerView.setVisibility(View.GONE); 100 } 101 } 102 super.onBindView(view); 103 } 104 105 private int getSerialNumber() { 106 if (mUserId == UserHandle.myUserId()) return Integer.MIN_VALUE; 107 if (mSerialNumber < 0) { 108 // If the userId is unknown 109 if (mUserId == USERID_UNKNOWN) { 110 return Integer.MAX_VALUE; 111 } else if (mUserId == USERID_GUEST_DEFAULTS) { 112 return Integer.MAX_VALUE - 1; 113 } 114 mSerialNumber = ((UserManager) getContext().getSystemService(Context.USER_SERVICE)) 115 .getUserSerialNumber(mUserId); 116 if (mSerialNumber < 0) return mUserId; 117 } 118 return mSerialNumber; 119 } 120 121 public int getUserId() { 122 return mUserId; 123 } 124 } 125