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 24f6e9228b8a97603d3ceb8f0d61e8d87cf19bd21fChris Wrenimport com.android.internal.logging.MetricsProto.MetricsEvent; 25abe1974a11364b577e94966ca87047d7889c8edfJason Monkimport com.android.systemui.qs.QSTile; 26abe1974a11364b577e94966ca87047d7889c8edfJason Monkimport com.android.systemui.statusbar.policy.UserInfoController; 27abe1974a11364b577e94966ca87047d7889c8edfJason Monkimport com.android.systemui.statusbar.policy.UserSwitcherController; 28abe1974a11364b577e94966ca87047d7889c8edfJason Monk 29abe1974a11364b577e94966ca87047d7889c8edfJason Monkpublic class UserTile extends QSTile<QSTile.State> implements UserInfoController.OnUserInfoChangedListener { 30abe1974a11364b577e94966ca87047d7889c8edfJason Monk 31abe1974a11364b577e94966ca87047d7889c8edfJason Monk private final UserSwitcherController mUserSwitcherController; 32abe1974a11364b577e94966ca87047d7889c8edfJason Monk private final UserInfoController mUserInfoController; 33abe1974a11364b577e94966ca87047d7889c8edfJason Monk private Pair<String, Drawable> mLastUpdate; 34abe1974a11364b577e94966ca87047d7889c8edfJason Monk 35abe1974a11364b577e94966ca87047d7889c8edfJason Monk public UserTile(Host host) { 36abe1974a11364b577e94966ca87047d7889c8edfJason Monk super(host); 37abe1974a11364b577e94966ca87047d7889c8edfJason Monk mUserSwitcherController = host.getUserSwitcherController(); 38abe1974a11364b577e94966ca87047d7889c8edfJason Monk mUserInfoController = host.getUserInfoController(); 39abe1974a11364b577e94966ca87047d7889c8edfJason Monk } 40abe1974a11364b577e94966ca87047d7889c8edfJason Monk 41abe1974a11364b577e94966ca87047d7889c8edfJason Monk @Override 4262b63a02d7ca630e3ad39991ea6550cab57e5d22Jason Monk public State newTileState() { 43abe1974a11364b577e94966ca87047d7889c8edfJason Monk return new QSTile.State(); 44abe1974a11364b577e94966ca87047d7889c8edfJason Monk } 45abe1974a11364b577e94966ca87047d7889c8edfJason Monk 46abe1974a11364b577e94966ca87047d7889c8edfJason Monk @Override 4776c67aa361f65dfb2f5e03d06cc1ccebce9cecd9Jason Monk public Intent getLongClickIntent() { 4876c67aa361f65dfb2f5e03d06cc1ccebce9cecd9Jason Monk return new Intent(Settings.ACTION_USER_SETTINGS); 4976c67aa361f65dfb2f5e03d06cc1ccebce9cecd9Jason Monk } 5076c67aa361f65dfb2f5e03d06cc1ccebce9cecd9Jason Monk 5176c67aa361f65dfb2f5e03d06cc1ccebce9cecd9Jason Monk @Override 52abe1974a11364b577e94966ca87047d7889c8edfJason Monk protected void handleClick() { 53abe1974a11364b577e94966ca87047d7889c8edfJason Monk showDetail(true); 54abe1974a11364b577e94966ca87047d7889c8edfJason Monk } 55abe1974a11364b577e94966ca87047d7889c8edfJason Monk 56abe1974a11364b577e94966ca87047d7889c8edfJason Monk @Override 57abe1974a11364b577e94966ca87047d7889c8edfJason Monk public DetailAdapter getDetailAdapter() { 58abe1974a11364b577e94966ca87047d7889c8edfJason Monk return mUserSwitcherController.userDetailAdapter; 59abe1974a11364b577e94966ca87047d7889c8edfJason Monk } 60abe1974a11364b577e94966ca87047d7889c8edfJason Monk 61abe1974a11364b577e94966ca87047d7889c8edfJason Monk @Override 62abe1974a11364b577e94966ca87047d7889c8edfJason Monk public int getMetricsCategory() { 63f6e9228b8a97603d3ceb8f0d61e8d87cf19bd21fChris Wren return MetricsEvent.QS_USER_TILE; 64abe1974a11364b577e94966ca87047d7889c8edfJason Monk } 65abe1974a11364b577e94966ca87047d7889c8edfJason Monk 66abe1974a11364b577e94966ca87047d7889c8edfJason Monk @Override 67abe1974a11364b577e94966ca87047d7889c8edfJason Monk public void setListening(boolean listening) { 68abe1974a11364b577e94966ca87047d7889c8edfJason Monk if (listening) { 69abe1974a11364b577e94966ca87047d7889c8edfJason Monk mUserInfoController.addListener(this); 70abe1974a11364b577e94966ca87047d7889c8edfJason Monk } else { 71abe1974a11364b577e94966ca87047d7889c8edfJason Monk mUserInfoController.remListener(this); 72abe1974a11364b577e94966ca87047d7889c8edfJason Monk } 73abe1974a11364b577e94966ca87047d7889c8edfJason Monk } 74abe1974a11364b577e94966ca87047d7889c8edfJason Monk 75abe1974a11364b577e94966ca87047d7889c8edfJason Monk @Override 7639c98e652fd3e0e3ea3a334d60ba6ee979985978Jason Monk public CharSequence getTileLabel() { 7739c98e652fd3e0e3ea3a334d60ba6ee979985978Jason Monk return getState().label; 7839c98e652fd3e0e3ea3a334d60ba6ee979985978Jason Monk } 7939c98e652fd3e0e3ea3a334d60ba6ee979985978Jason Monk 8039c98e652fd3e0e3ea3a334d60ba6ee979985978Jason Monk @Override 81abe1974a11364b577e94966ca87047d7889c8edfJason Monk protected void handleUpdateState(State state, Object arg) { 82abe1974a11364b577e94966ca87047d7889c8edfJason Monk final Pair<String, Drawable> p = arg != null ? (Pair<String, Drawable>) arg : mLastUpdate; 83ba2318eff373a729f9768b146350a001dd22e4c5Jason Monk if (p != null) { 84ba2318eff373a729f9768b146350a001dd22e4c5Jason Monk state.label = p.first; 85ba2318eff373a729f9768b146350a001dd22e4c5Jason Monk // TODO: Better content description. 86ba2318eff373a729f9768b146350a001dd22e4c5Jason Monk state.contentDescription = p.first; 87ba2318eff373a729f9768b146350a001dd22e4c5Jason Monk state.icon = new Icon() { 88ba2318eff373a729f9768b146350a001dd22e4c5Jason Monk @Override 89ba2318eff373a729f9768b146350a001dd22e4c5Jason Monk public Drawable getDrawable(Context context) { 90ba2318eff373a729f9768b146350a001dd22e4c5Jason Monk return p.second; 91ba2318eff373a729f9768b146350a001dd22e4c5Jason Monk } 92ba2318eff373a729f9768b146350a001dd22e4c5Jason Monk }; 93ba2318eff373a729f9768b146350a001dd22e4c5Jason Monk } else { 94ba2318eff373a729f9768b146350a001dd22e4c5Jason Monk // TODO: Default state. 95ba2318eff373a729f9768b146350a001dd22e4c5Jason Monk } 96abe1974a11364b577e94966ca87047d7889c8edfJason Monk } 97abe1974a11364b577e94966ca87047d7889c8edfJason Monk 98abe1974a11364b577e94966ca87047d7889c8edfJason Monk @Override 99abe1974a11364b577e94966ca87047d7889c8edfJason Monk public void onUserInfoChanged(String name, Drawable picture) { 100abe1974a11364b577e94966ca87047d7889c8edfJason Monk mLastUpdate = new Pair<>(name, picture); 101abe1974a11364b577e94966ca87047d7889c8edfJason Monk refreshState(mLastUpdate); 102abe1974a11364b577e94966ca87047d7889c8edfJason Monk } 103abe1974a11364b577e94966ca87047d7889c8edfJason Monk} 104