1fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina/* 2fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina * Copyright (C) 2014 The Android Open Source Project 3fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina * 4fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina * Licensed under the Apache License, Version 2.0 (the "License"); 5fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina * you may not use this file except in compliance with the License. 6fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina * You may obtain a copy of the License at 7fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina * 8fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina * http://www.apache.org/licenses/LICENSE-2.0 9fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina * 10fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina * Unless required by applicable law or agreed to in writing, software 11fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina * distributed under the License is distributed on an "AS IS" BASIS, 12fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina * See the License for the specific language governing permissions and 14fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina * limitations under the License. 15fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina */ 16fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 17fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghinapackage com.android.settings; 18fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 19fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghinaimport android.content.Context; 20fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghinaimport android.content.pm.UserInfo; 216b3b751492d01b23b87a4ee6b807dc00c3b5770eAlexandra Gherghinaimport android.content.res.Resources; 22fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghinaimport android.database.DataSetObserver; 237d3b6b4703e3fa280437bb5ac311af6482484449Alexandra Gherghinaimport android.graphics.drawable.BitmapDrawable; 24fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghinaimport android.graphics.drawable.Drawable; 25fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghinaimport android.os.UserHandle; 26fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghinaimport android.os.UserManager; 27fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghinaimport android.view.LayoutInflater; 28fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghinaimport android.view.View; 29fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghinaimport android.view.ViewGroup; 30fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghinaimport android.widget.ImageView; 31fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghinaimport android.widget.SpinnerAdapter; 32fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghinaimport android.widget.TextView; 33fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 34bc6e78f9da195af4c3a936bff22773ce867af0aaAlexandra Gherghinaimport com.android.internal.util.UserIcons; 35fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 36fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghinaimport java.util.ArrayList; 37fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 38fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina/** 39fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina * Adapter for a spinner that shows a list of users. 40fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina */ 41fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghinapublic class UserSpinnerAdapter implements SpinnerAdapter { 42fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina // TODO: Update UI. See: http://b/16518801 43fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina /** Holder for user details */ 44fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina public static class UserDetails { 45fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina private final UserHandle mUserHandle; 46fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina private final String name; 47fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina private final Drawable icon; 48fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 49fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina public UserDetails(UserHandle userHandle, UserManager um, Context context) { 50fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina mUserHandle = userHandle; 51fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina UserInfo userInfo = um.getUserInfo(mUserHandle.getIdentifier()); 526b3b751492d01b23b87a4ee6b807dc00c3b5770eAlexandra Gherghina if (userInfo.isManagedProfile()) { 536b3b751492d01b23b87a4ee6b807dc00c3b5770eAlexandra Gherghina name = context.getString(R.string.managed_user_title); 540ba89bd54c4b44b3803342da10b0c08b0bf76ad4Alan Viverette icon = context.getDrawable( 557d3b6b4703e3fa280437bb5ac311af6482484449Alexandra Gherghina com.android.internal.R.drawable.ic_corp_icon); 56fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } else { 576b3b751492d01b23b87a4ee6b807dc00c3b5770eAlexandra Gherghina name = userInfo.name; 587d3b6b4703e3fa280437bb5ac311af6482484449Alexandra Gherghina final int userId = userInfo.id; 597d3b6b4703e3fa280437bb5ac311af6482484449Alexandra Gherghina if (um.getUserIcon(userId) != null) { 607d3b6b4703e3fa280437bb5ac311af6482484449Alexandra Gherghina icon = new BitmapDrawable(context.getResources(), um.getUserIcon(userId)); 61bc6e78f9da195af4c3a936bff22773ce867af0aaAlexandra Gherghina } else { 627d3b6b4703e3fa280437bb5ac311af6482484449Alexandra Gherghina icon = UserIcons.getDefaultUserIcon(userId, /* light= */ false); 63bc6e78f9da195af4c3a936bff22773ce867af0aaAlexandra Gherghina } 64fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 65fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 66fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 67fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina private ArrayList<UserDetails> data; 68fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina private final LayoutInflater mInflater; 69fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 70fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina public UserSpinnerAdapter(Context context, ArrayList<UserDetails> users) { 71fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina if (users == null) { 72fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina throw new IllegalArgumentException("A list of user details must be provided"); 73fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 74fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina this.data = users; 75fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 76fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 77fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 78fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina public UserHandle getUserHandle(int position) { 79fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina if (position < 0 || position >= data.size()) { 80fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina return null; 81fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 82fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina return data.get(position).mUserHandle; 83fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 84fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 85fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina @Override 86fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina public View getDropDownView(int position, View convertView, ViewGroup parent) { 87fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina final View row = convertView != null ? convertView : createUser(parent); 88fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 89fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina UserDetails user = data.get(position); 90fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina ((ImageView) row.findViewById(android.R.id.icon)).setImageDrawable(user.icon); 91fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina ((TextView) row.findViewById(android.R.id.title)).setText(user.name); 92fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina return row; 93fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 94fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 95fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina private View createUser(ViewGroup parent) { 96fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina return mInflater.inflate(R.layout.user_preference, parent, false); 97fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 98fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 99fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina @Override 100fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina public void registerDataSetObserver(DataSetObserver observer) { 101fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina // We don't support observers 102fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 103fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 104fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina @Override 105fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina public void unregisterDataSetObserver(DataSetObserver observer) { 106fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina // We don't support observers 107fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 108fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 109fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina @Override 110fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina public int getCount() { 111fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina return data.size(); 112fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 113fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 114fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina @Override 115fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina public UserDetails getItem(int position) { 116fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina return data.get(position); 117fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 118fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 119fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina @Override 120fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina public long getItemId(int position) { 121fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina return data.get(position).mUserHandle.getIdentifier(); 122fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 123fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 124fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina @Override 125fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina public boolean hasStableIds() { 126fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina return false; 127fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 128fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 129fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina @Override 130fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina public View getView(int position, View convertView, ViewGroup parent) { 131fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina return getDropDownView(position, convertView, parent); 132fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 133fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 134fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina @Override 135fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina public int getItemViewType(int position) { 136fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina return 0; 137fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 138fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 139fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina @Override 140fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina public int getViewTypeCount() { 141fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina return 1; 142fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 143fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 144fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina @Override 145fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina public boolean isEmpty() { 146fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina return data.isEmpty(); 147fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 148fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina}