Home | History | Annotate | Download | only in users
      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