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.internal.util.CharSequences; 20 import com.android.settings.R; 21 22 import android.content.Context; 23 import android.os.UserHandle; 24 import android.os.UserManager; 25 import android.preference.Preference; 26 import android.util.AttributeSet; 27 import android.view.View; 28 import android.view.View.OnClickListener; 29 30 public class UserPreference extends Preference { 31 32 public static final int USERID_UNKNOWN = -10; 33 34 private OnClickListener mDeleteClickListener; 35 private OnClickListener mSettingsClickListener; 36 private int mSerialNumber = -1; 37 private int mUserId = USERID_UNKNOWN; 38 private boolean mRestricted; 39 private boolean mSelf; 40 static final int SETTINGS_ID = R.id.manage_user; 41 static final int DELETE_ID = R.id.trash_user; 42 43 public UserPreference(Context context, AttributeSet attrs) { 44 this(context, attrs, USERID_UNKNOWN, null, null); 45 } 46 47 UserPreference(Context context, AttributeSet attrs, int userId, 48 OnClickListener settingsListener, 49 OnClickListener deleteListener) { 50 super(context, attrs); 51 if (deleteListener != null || settingsListener != null) { 52 setWidgetLayoutResource(R.layout.preference_user_delete_widget); 53 } 54 mDeleteClickListener = deleteListener; 55 mSettingsClickListener = settingsListener; 56 mUserId = userId; 57 } 58 59 @Override 60 protected void onBindView(View view) { 61 View deleteDividerView = view.findViewById(R.id.divider_delete); 62 View manageDividerView = view.findViewById(R.id.divider_manage); 63 View deleteView = view.findViewById(R.id.trash_user); 64 if (deleteView != null) { 65 if (mDeleteClickListener != null) { 66 deleteView.setOnClickListener(mDeleteClickListener); 67 deleteView.setTag(this); 68 } else { 69 deleteView.setVisibility(View.GONE); 70 deleteDividerView.setVisibility(View.GONE); 71 } 72 } 73 View manageView = view.findViewById(R.id.manage_user); 74 if (manageView != null) { 75 if (mSettingsClickListener != null) { 76 manageView.setOnClickListener(mSettingsClickListener); 77 manageView.setTag(this); 78 if (mDeleteClickListener != null) { 79 manageDividerView.setVisibility(View.GONE); 80 } 81 } else { 82 manageView.setVisibility(View.GONE); 83 manageDividerView.setVisibility(View.GONE); 84 } 85 } 86 super.onBindView(view); 87 } 88 89 private int getSerialNumber() { 90 if (mUserId == UserHandle.myUserId()) return Integer.MIN_VALUE; 91 if (mSerialNumber < 0) { 92 // If the userId is unknown 93 if (mUserId == USERID_UNKNOWN) return Integer.MAX_VALUE; 94 mSerialNumber = ((UserManager) getContext().getSystemService(Context.USER_SERVICE)) 95 .getUserSerialNumber(mUserId); 96 if (mSerialNumber < 0) return mUserId; 97 } 98 return mSerialNumber; 99 } 100 101 public int getUserId() { 102 return mUserId; 103 } 104 105 public int compareTo(Preference another) { 106 if (another instanceof UserPreference) { 107 return getSerialNumber() > ((UserPreference) another).getSerialNumber() ? 1 : -1; 108 } else { 109 return 1; 110 } 111 } 112 } 113