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}