1abe1974a11364b577e94966ca87047d7889c8edfJason Monk/*
2abe1974a11364b577e94966ca87047d7889c8edfJason Monk * Copyright (C) 2015 The Android Open Source Project
3abe1974a11364b577e94966ca87047d7889c8edfJason Monk *
4abe1974a11364b577e94966ca87047d7889c8edfJason Monk * Licensed under the Apache License, Version 2.0 (the "License");
5abe1974a11364b577e94966ca87047d7889c8edfJason Monk * you may not use this file except in compliance with the License.
6abe1974a11364b577e94966ca87047d7889c8edfJason Monk * You may obtain a copy of the License at
7abe1974a11364b577e94966ca87047d7889c8edfJason Monk *
8abe1974a11364b577e94966ca87047d7889c8edfJason Monk *      http://www.apache.org/licenses/LICENSE-2.0
9abe1974a11364b577e94966ca87047d7889c8edfJason Monk *
10abe1974a11364b577e94966ca87047d7889c8edfJason Monk * Unless required by applicable law or agreed to in writing, software
11abe1974a11364b577e94966ca87047d7889c8edfJason Monk * distributed under the License is distributed on an "AS IS" BASIS,
12abe1974a11364b577e94966ca87047d7889c8edfJason Monk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13abe1974a11364b577e94966ca87047d7889c8edfJason Monk * See the License for the specific language governing permissions and
14abe1974a11364b577e94966ca87047d7889c8edfJason Monk * limitations under the License.
15abe1974a11364b577e94966ca87047d7889c8edfJason Monk */
16abe1974a11364b577e94966ca87047d7889c8edfJason Monkpackage com.android.systemui.qs.tiles;
17abe1974a11364b577e94966ca87047d7889c8edfJason Monk
18abe1974a11364b577e94966ca87047d7889c8edfJason Monkimport android.content.Context;
1976c67aa361f65dfb2f5e03d06cc1ccebce9cecd9Jason Monkimport android.content.Intent;
20abe1974a11364b577e94966ca87047d7889c8edfJason Monkimport android.graphics.drawable.Drawable;
2176c67aa361f65dfb2f5e03d06cc1ccebce9cecd9Jason Monkimport android.provider.Settings;
22abe1974a11364b577e94966ca87047d7889c8edfJason Monkimport android.util.Pair;
23c0d7058b14c24cd07912f5629c26b39b7b4673d5Winson
24383db5ebcc3a4a615faf249bf4f126f42e80b82eTamas Berghammerimport com.android.internal.logging.nano.MetricsProto.MetricsEvent;
259c7844cb91b43929d0a86b1c90aa1efb37f5463aJason Monkimport com.android.systemui.Dependency;
26e5b770e47d44a40d412c7d42010b2cf67920d9e3Jason Monkimport com.android.systemui.plugins.qs.DetailAdapter;
27702e2ebf9fbfb715c1d9b716683c9e4d182b575eJason Monkimport com.android.systemui.qs.QSHost;
28702e2ebf9fbfb715c1d9b716683c9e4d182b575eJason Monkimport com.android.systemui.plugins.qs.QSTile;
29702e2ebf9fbfb715c1d9b716683c9e4d182b575eJason Monkimport com.android.systemui.plugins.qs.QSTile.State;
30702e2ebf9fbfb715c1d9b716683c9e4d182b575eJason Monkimport com.android.systemui.qs.tileimpl.QSTileImpl;
31abe1974a11364b577e94966ca87047d7889c8edfJason Monkimport com.android.systemui.statusbar.policy.UserInfoController;
32abe1974a11364b577e94966ca87047d7889c8edfJason Monkimport com.android.systemui.statusbar.policy.UserSwitcherController;
33abe1974a11364b577e94966ca87047d7889c8edfJason Monk
34702e2ebf9fbfb715c1d9b716683c9e4d182b575eJason Monkpublic class UserTile extends QSTileImpl<State> implements UserInfoController.OnUserInfoChangedListener {
35abe1974a11364b577e94966ca87047d7889c8edfJason Monk
36abe1974a11364b577e94966ca87047d7889c8edfJason Monk    private final UserSwitcherController mUserSwitcherController;
37abe1974a11364b577e94966ca87047d7889c8edfJason Monk    private final UserInfoController mUserInfoController;
38abe1974a11364b577e94966ca87047d7889c8edfJason Monk    private Pair<String, Drawable> mLastUpdate;
39abe1974a11364b577e94966ca87047d7889c8edfJason Monk
40702e2ebf9fbfb715c1d9b716683c9e4d182b575eJason Monk    public UserTile(QSHost host) {
41abe1974a11364b577e94966ca87047d7889c8edfJason Monk        super(host);
429c7844cb91b43929d0a86b1c90aa1efb37f5463aJason Monk        mUserSwitcherController = Dependency.get(UserSwitcherController.class);
439c7844cb91b43929d0a86b1c90aa1efb37f5463aJason Monk        mUserInfoController = Dependency.get(UserInfoController.class);
44abe1974a11364b577e94966ca87047d7889c8edfJason Monk    }
45abe1974a11364b577e94966ca87047d7889c8edfJason Monk
46abe1974a11364b577e94966ca87047d7889c8edfJason Monk    @Override
4762b63a02d7ca630e3ad39991ea6550cab57e5d22Jason Monk    public State newTileState() {
48abe1974a11364b577e94966ca87047d7889c8edfJason Monk        return new QSTile.State();
49abe1974a11364b577e94966ca87047d7889c8edfJason Monk    }
50abe1974a11364b577e94966ca87047d7889c8edfJason Monk
51abe1974a11364b577e94966ca87047d7889c8edfJason Monk    @Override
5276c67aa361f65dfb2f5e03d06cc1ccebce9cecd9Jason Monk    public Intent getLongClickIntent() {
5376c67aa361f65dfb2f5e03d06cc1ccebce9cecd9Jason Monk        return new Intent(Settings.ACTION_USER_SETTINGS);
5476c67aa361f65dfb2f5e03d06cc1ccebce9cecd9Jason Monk    }
5576c67aa361f65dfb2f5e03d06cc1ccebce9cecd9Jason Monk
5676c67aa361f65dfb2f5e03d06cc1ccebce9cecd9Jason Monk    @Override
57abe1974a11364b577e94966ca87047d7889c8edfJason Monk    protected void handleClick() {
58abe1974a11364b577e94966ca87047d7889c8edfJason Monk        showDetail(true);
59abe1974a11364b577e94966ca87047d7889c8edfJason Monk    }
60abe1974a11364b577e94966ca87047d7889c8edfJason Monk
61abe1974a11364b577e94966ca87047d7889c8edfJason Monk    @Override
62abe1974a11364b577e94966ca87047d7889c8edfJason Monk    public DetailAdapter getDetailAdapter() {
63abe1974a11364b577e94966ca87047d7889c8edfJason Monk        return mUserSwitcherController.userDetailAdapter;
64abe1974a11364b577e94966ca87047d7889c8edfJason Monk    }
65abe1974a11364b577e94966ca87047d7889c8edfJason Monk
66abe1974a11364b577e94966ca87047d7889c8edfJason Monk    @Override
67abe1974a11364b577e94966ca87047d7889c8edfJason Monk    public int getMetricsCategory() {
68f6e9228b8a97603d3ceb8f0d61e8d87cf19bd21fChris Wren        return MetricsEvent.QS_USER_TILE;
69abe1974a11364b577e94966ca87047d7889c8edfJason Monk    }
70abe1974a11364b577e94966ca87047d7889c8edfJason Monk
71abe1974a11364b577e94966ca87047d7889c8edfJason Monk    @Override
72abe1974a11364b577e94966ca87047d7889c8edfJason Monk    public void setListening(boolean listening) {
73abe1974a11364b577e94966ca87047d7889c8edfJason Monk        if (listening) {
748852905b0b3837e326127c6dfef6f699124ce715Jason Monk            mUserInfoController.addCallback(this);
75abe1974a11364b577e94966ca87047d7889c8edfJason Monk        } else {
768852905b0b3837e326127c6dfef6f699124ce715Jason Monk            mUserInfoController.removeCallback(this);
77abe1974a11364b577e94966ca87047d7889c8edfJason Monk        }
78abe1974a11364b577e94966ca87047d7889c8edfJason Monk    }
79abe1974a11364b577e94966ca87047d7889c8edfJason Monk
80abe1974a11364b577e94966ca87047d7889c8edfJason Monk    @Override
8139c98e652fd3e0e3ea3a334d60ba6ee979985978Jason Monk    public CharSequence getTileLabel() {
8239c98e652fd3e0e3ea3a334d60ba6ee979985978Jason Monk        return getState().label;
8339c98e652fd3e0e3ea3a334d60ba6ee979985978Jason Monk    }
8439c98e652fd3e0e3ea3a334d60ba6ee979985978Jason Monk
8539c98e652fd3e0e3ea3a334d60ba6ee979985978Jason Monk    @Override
86abe1974a11364b577e94966ca87047d7889c8edfJason Monk    protected void handleUpdateState(State state, Object arg) {
87abe1974a11364b577e94966ca87047d7889c8edfJason Monk        final Pair<String, Drawable> p = arg != null ? (Pair<String, Drawable>) arg : mLastUpdate;
88ba2318eff373a729f9768b146350a001dd22e4c5Jason Monk        if (p != null) {
89ba2318eff373a729f9768b146350a001dd22e4c5Jason Monk            state.label = p.first;
90ba2318eff373a729f9768b146350a001dd22e4c5Jason Monk            // TODO: Better content description.
91ba2318eff373a729f9768b146350a001dd22e4c5Jason Monk            state.contentDescription = p.first;
92ba2318eff373a729f9768b146350a001dd22e4c5Jason Monk            state.icon = new Icon() {
93ba2318eff373a729f9768b146350a001dd22e4c5Jason Monk                @Override
94ba2318eff373a729f9768b146350a001dd22e4c5Jason Monk                public Drawable getDrawable(Context context) {
95ba2318eff373a729f9768b146350a001dd22e4c5Jason Monk                    return p.second;
96ba2318eff373a729f9768b146350a001dd22e4c5Jason Monk                }
97ba2318eff373a729f9768b146350a001dd22e4c5Jason Monk            };
98ba2318eff373a729f9768b146350a001dd22e4c5Jason Monk        } else {
99ba2318eff373a729f9768b146350a001dd22e4c5Jason Monk            // TODO: Default state.
100ba2318eff373a729f9768b146350a001dd22e4c5Jason Monk        }
101abe1974a11364b577e94966ca87047d7889c8edfJason Monk    }
102abe1974a11364b577e94966ca87047d7889c8edfJason Monk
103abe1974a11364b577e94966ca87047d7889c8edfJason Monk    @Override
104e1206377de1f07116b5b3986e5a48a088cdeae6aJiaquan He    public void onUserInfoChanged(String name, Drawable picture, String userAccount) {
105abe1974a11364b577e94966ca87047d7889c8edfJason Monk        mLastUpdate = new Pair<>(name, picture);
106abe1974a11364b577e94966ca87047d7889c8edfJason Monk        refreshState(mLastUpdate);
107abe1974a11364b577e94966ca87047d7889c8edfJason Monk    }
108abe1974a11364b577e94966ca87047d7889c8edfJason Monk}
109