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.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