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