UserSpinnerAdapter.java revision 6b3b751492d01b23b87a4ee6b807dc00c3b5770e
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; 23fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghinaimport android.graphics.Bitmap; 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 34fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghinaimport com.android.settings.drawable.CircleFramedDrawable; 356b3b751492d01b23b87a4ee6b807dc00c3b5770eAlexandra Gherghinaimport com.android.settings.R; 36fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 37fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghinaimport java.util.ArrayList; 38fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 39fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina/** 40fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina * Adapter for a spinner that shows a list of users. 41fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina */ 42fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghinapublic class UserSpinnerAdapter implements SpinnerAdapter { 43fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina // TODO: Update UI. See: http://b/16518801 44fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina /** Holder for user details */ 45fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina public static class UserDetails { 46fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina private final UserHandle mUserHandle; 47fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina private final String name; 48fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina private final Drawable icon; 49fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 50fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina public UserDetails(UserHandle userHandle, UserManager um, Context context) { 51fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina mUserHandle = userHandle; 52fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina UserInfo userInfo = um.getUserInfo(mUserHandle.getIdentifier()); 536b3b751492d01b23b87a4ee6b807dc00c3b5770eAlexandra Gherghina if (userInfo.isManagedProfile()) { 546b3b751492d01b23b87a4ee6b807dc00c3b5770eAlexandra Gherghina name = context.getString(R.string.managed_user_title); 556b3b751492d01b23b87a4ee6b807dc00c3b5770eAlexandra Gherghina icon = Resources.getSystem().getDrawable( 566b3b751492d01b23b87a4ee6b807dc00c3b5770eAlexandra Gherghina com.android.internal.R.drawable.ic_corp_icon); 57fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } else { 586b3b751492d01b23b87a4ee6b807dc00c3b5770eAlexandra Gherghina name = userInfo.name; 596b3b751492d01b23b87a4ee6b807dc00c3b5770eAlexandra Gherghina Bitmap bitmap = um.getUserIcon(userHandle.getIdentifier()); 606b3b751492d01b23b87a4ee6b807dc00c3b5770eAlexandra Gherghina icon = (bitmap == null) ? null : CircleFramedDrawable.getInstance(context, bitmap); 61fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 62fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 63fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 64fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina private ArrayList<UserDetails> data; 65fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina private final LayoutInflater mInflater; 66fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 67fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina public UserSpinnerAdapter(Context context, ArrayList<UserDetails> users) { 68fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina if (users == null) { 69fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina throw new IllegalArgumentException("A list of user details must be provided"); 70fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 71fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina this.data = users; 72fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 73fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 74fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 75fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina public UserHandle getUserHandle(int position) { 76fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina if (position < 0 || position >= data.size()) { 77fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina return null; 78fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 79fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina return data.get(position).mUserHandle; 80fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 81fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 82fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina @Override 83fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina public View getDropDownView(int position, View convertView, ViewGroup parent) { 84fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina final View row = convertView != null ? convertView : createUser(parent); 85fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 86fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina UserDetails user = data.get(position); 87fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina ((ImageView) row.findViewById(android.R.id.icon)).setImageDrawable(user.icon); 88fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina ((TextView) row.findViewById(android.R.id.title)).setText(user.name); 89fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina return row; 90fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 91fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 92fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina private View createUser(ViewGroup parent) { 93fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina return mInflater.inflate(R.layout.user_preference, parent, false); 94fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 95fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 96fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina @Override 97fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina public void registerDataSetObserver(DataSetObserver observer) { 98fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina // We don't support observers 99fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 100fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 101fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina @Override 102fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina public void unregisterDataSetObserver(DataSetObserver observer) { 103fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina // We don't support observers 104fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 105fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 106fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina @Override 107fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina public int getCount() { 108fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina return data.size(); 109fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 110fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 111fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina @Override 112fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina public UserDetails getItem(int position) { 113fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina return data.get(position); 114fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 115fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 116fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina @Override 117fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina public long getItemId(int position) { 118fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina return data.get(position).mUserHandle.getIdentifier(); 119fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 120fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 121fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina @Override 122fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina public boolean hasStableIds() { 123fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina return false; 124fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 125fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 126fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina @Override 127fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina public View getView(int position, View convertView, ViewGroup parent) { 128fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina return getDropDownView(position, convertView, parent); 129fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 130fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 131fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina @Override 132fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina public int getItemViewType(int position) { 133fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina return 0; 134fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 135fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 136fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina @Override 137fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina public int getViewTypeCount() { 138fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina return 1; 139fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 140fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 141fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina @Override 142fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina public boolean isEmpty() { 143fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina return data.isEmpty(); 144fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 145fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina}