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}