WorkModeTile.java revision 1aec93f1819369bda9e6cb0bd282419808c304c3
11205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu/* 21205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu * Copyright (C) 2015 The Android Open Source Project 31205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu * 41205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu * Licensed under the Apache License, Version 2.0 (the "License"); 51205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu * you may not use this file except in compliance with the License. 61205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu * You may obtain a copy of the License at 71205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu * 81205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu * http://www.apache.org/licenses/LICENSE-2.0 91205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu * 101205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu * Unless required by applicable law or agreed to in writing, software 111205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu * distributed under the License is distributed on an "AS IS" BASIS, 121205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu * See the License for the specific language governing permissions and 141205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu * limitations under the License. 151205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu */ 161205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu 171205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xupackage com.android.systemui.qs.tiles; 181205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu 1976c67aa361f65dfb2f5e03d06cc1ccebce9cecd9Jason Monkimport android.content.Intent; 2076c67aa361f65dfb2f5e03d06cc1ccebce9cecd9Jason Monkimport android.provider.Settings; 211205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xuimport com.android.internal.logging.MetricsLogger; 22f6e9228b8a97603d3ceb8f0d61e8d87cf19bd21fChris Wrenimport com.android.internal.logging.MetricsProto.MetricsEvent; 231205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xuimport com.android.systemui.R; 241205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xuimport com.android.systemui.qs.QSTile; 25c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monkimport com.android.systemui.statusbar.phone.ManagedProfileController; 261205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu 271205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu/** Quick settings tile: Work profile on/off */ 28c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monkpublic class WorkModeTile extends QSTile<QSTile.BooleanState> implements 29c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk ManagedProfileController.Callback { 301205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu private final AnimationIcon mEnable = 311aec93f1819369bda9e6cb0bd282419808c304c3Jason Monk new AnimationIcon(R.drawable.ic_signal_workmode_enable_animation, 321aec93f1819369bda9e6cb0bd282419808c304c3Jason Monk R.drawable.ic_signal_workmode_disable); 331205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu private final AnimationIcon mDisable = 341aec93f1819369bda9e6cb0bd282419808c304c3Jason Monk new AnimationIcon(R.drawable.ic_signal_workmode_disable_animation, 351aec93f1819369bda9e6cb0bd282419808c304c3Jason Monk R.drawable.ic_signal_workmode_enable); 361205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu 37c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk private final ManagedProfileController mProfileController; 381205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu 391205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu public WorkModeTile(Host host) { 401205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu super(host); 41c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk mProfileController = host.getManagedProfileController(); 421205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu } 431205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu 441205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu @Override 4562b63a02d7ca630e3ad39991ea6550cab57e5d22Jason Monk public BooleanState newTileState() { 461205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu return new BooleanState(); 471205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu } 481205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu 491205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu @Override 50c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk public void setListening(boolean listening) { 51c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk if (listening) { 52c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk mProfileController.addCallback(this); 53c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk } else { 54c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk mProfileController.removeCallback(this); 55c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk } 561205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu } 571205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu 58c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk @Override 5976c67aa361f65dfb2f5e03d06cc1ccebce9cecd9Jason Monk public Intent getLongClickIntent() { 6076c67aa361f65dfb2f5e03d06cc1ccebce9cecd9Jason Monk return new Intent(Settings.ACTION_SYNC_SETTINGS); 6176c67aa361f65dfb2f5e03d06cc1ccebce9cecd9Jason Monk } 6276c67aa361f65dfb2f5e03d06cc1ccebce9cecd9Jason Monk 6376c67aa361f65dfb2f5e03d06cc1ccebce9cecd9Jason Monk @Override 64c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk public void handleClick() { 65c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk MetricsLogger.action(mContext, getMetricsCategory(), !mState.value); 66c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk mProfileController.setWorkModeEnabled(!mState.value); 671205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu } 681205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu 69c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk @Override 70c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk public boolean isAvailable() { 71c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk return mProfileController.hasActiveProfile(); 721205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu } 731205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu 74c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk @Override 75c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk public void onManagedProfileChanged() { 76c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk refreshState(mProfileController.isWorkModeEnabled()); 771205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu } 781205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu 79c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk @Override 80c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk public void onManagedProfileRemoved() { 81c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk mHost.removeTile(getTileSpec()); 821205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu } 831205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu 841205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu @Override 851205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu protected void handleUpdateState(BooleanState state, Object arg) { 8666239fbdfce1586555b339854b8a21f8187e805fJason Monk if (arg instanceof Boolean) { 8766239fbdfce1586555b339854b8a21f8187e805fJason Monk state.value = (Boolean) arg; 881205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu } else { 89c3f42c102422f70f5bbe67105e16515ce9c306a3Jason Monk state.value = mProfileController.isWorkModeEnabled(); 901205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu } 911205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu 921205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu state.label = mContext.getString(R.string.quick_settings_work_mode_label); 931205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu if (state.value) { 9466239fbdfce1586555b339854b8a21f8187e805fJason Monk state.icon = mEnable; 951205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu state.contentDescription = mContext.getString( 961205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu R.string.accessibility_quick_settings_work_mode_on); 971205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu } else { 9866239fbdfce1586555b339854b8a21f8187e805fJason Monk state.icon = mDisable; 991205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu state.contentDescription = mContext.getString( 1001205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu R.string.accessibility_quick_settings_work_mode_off); 1011205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu } 1021205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu } 1031205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu 1041205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu @Override 1051205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu public int getMetricsCategory() { 106f6e9228b8a97603d3ceb8f0d61e8d87cf19bd21fChris Wren return MetricsEvent.QS_WORKMODE; 1071205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu } 1081205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu 1091205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu @Override 1101205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu protected String composeChangeAnnouncement() { 1111205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu if (mState.value) { 1121205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu return mContext.getString(R.string.accessibility_quick_settings_work_mode_changed_on); 1131205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu } else { 1141205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu return mContext.getString(R.string.accessibility_quick_settings_work_mode_changed_off); 1151205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu } 1161205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu } 1171205fb1d92f51b5f36e5ba126c3942381f564821Rubin Xu} 118