2 * Copyright (C) 2014 The Android Open Source Project
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package com.android.settings;
19 import android.content.Context;
20 import android.content.pm.UserInfo;
21 import android.content.res.Resources;
22 import android.database.DataSetObserver;
23 import android.graphics.drawable.BitmapDrawable;
24 import android.graphics.drawable.Drawable;
25 import android.os.UserHandle;
26 import android.os.UserManager;
27 import android.view.LayoutInflater;
28 import android.view.View;
29 import android.view.ViewGroup;
30 import android.widget.ImageView;
31 import android.widget.SpinnerAdapter;
32 import android.widget.TextView;
34 import com.android.internal.util.UserIcons;
36 import java.util.ArrayList;
39 * Adapter for a spinner that shows a list of users.
41 public class UserSpinnerAdapter implements SpinnerAdapter {
42 // TODO: Update UI. See: http://b/16518801
43 /** Holder for user details */
44 public static class UserDetails {
45 private final UserHandle mUserHandle;
46 private final String name;
47 private final Drawable icon;
49 public UserDetails(UserHandle userHandle, UserManager um, Context context) {
50 mUserHandle = userHandle;
51 UserInfo userInfo = um.getUserInfo(mUserHandle.getIdentifier());
52 if (userInfo.isManagedProfile()) {
53 name = context.getString(R.string.managed_user_title);
54 icon = Resources.getSystem().getDrawable(
55 com.android.internal.R.drawable.ic_corp_icon);
58 final int userId = userInfo.id;
59 if (um.getUserIcon(userId) != null) {
60 icon = new BitmapDrawable(context.getResources(), um.getUserIcon(userId));
62 icon = UserIcons.getDefaultUserIcon(userId, /* light= */ false);
67 private ArrayList<UserDetails> data;
68 private final LayoutInflater mInflater;
70 public UserSpinnerAdapter(Context context, ArrayList<UserDetails> users) {
72 throw new IllegalArgumentException("A list of user details must be provided");
75 mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
78 public UserHandle getUserHandle(int position) {
79 if (position < 0 || position >= data.size()) {
82 return data.get(position).mUserHandle;
86 public View getDropDownView(int position, View convertView, ViewGroup parent) {
87 final View row = convertView != null ? convertView : createUser(parent);
89 UserDetails user = data.get(position);
90 ((ImageView) row.findViewById(android.R.id.icon)).setImageDrawable(user.icon);
91 ((TextView) row.findViewById(android.R.id.title)).setText(user.name);
95 private View createUser(ViewGroup parent) {
96 return mInflater.inflate(R.layout.user_preference, parent, false);
100 public void registerDataSetObserver(DataSetObserver observer) {
101 // We don't support observers
105 public void unregisterDataSetObserver(DataSetObserver observer) {
106 // We don't support observers
110 public int getCount() {
115 public UserDetails getItem(int position) {
116 return data.get(position);
120 public long getItemId(int position) {
121 return data.get(position).mUserHandle.getIdentifier();
125 public boolean hasStableIds() {
130 public View getView(int position, View convertView, ViewGroup parent) {
131 return getDropDownView(position, convertView, parent);
135 public int getItemViewType(int position) {
140 public int getViewTypeCount() {
145 public boolean isEmpty() {
146 return data.isEmpty();