DataSaverTile.java revision 9a4ce137eb5b73f9d7b097a26ae1c523c5b070e9
19a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk/* 29a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk * Copyright (C) 2016 The Android Open Source Project 39a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk * 49a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file 59a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk * except in compliance with the License. You may obtain a copy of the License at 69a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk * 79a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk * http://www.apache.org/licenses/LICENSE-2.0 89a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk * 99a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk * Unless required by applicable law or agreed to in writing, software distributed under the 109a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 119a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk * KIND, either express or implied. See the License for the specific language governing 129a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk * permissions and limitations under the License. 139a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk */ 149a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk 159a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monkpackage com.android.systemui.qs.tiles; 169a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk 179a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monkimport com.android.internal.logging.MetricsProto.MetricsEvent; 189a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monkimport com.android.systemui.R; 199a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monkimport com.android.systemui.qs.QSTile; 209a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monkimport com.android.systemui.statusbar.policy.DataSaverController; 219a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk 229a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monkpublic class DataSaverTile extends QSTile<QSTile.BooleanState> implements 239a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk DataSaverController.Listener{ 249a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk 259a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk private final DataSaverController mDataSaverController; 269a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk 279a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk public DataSaverTile(Host host) { 289a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk super(host); 299a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk mDataSaverController = host.getNetworkController().getDataSaverController(); 309a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk } 319a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk 329a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk @Override 339a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk protected BooleanState newTileState() { 349a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk return new BooleanState(); 359a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk } 369a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk 379a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk @Override 389a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk public void setListening(boolean listening) { 399a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk if (listening) { 409a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk mDataSaverController.addListener(this); 419a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk } else { 429a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk mDataSaverController.remListener(this); 439a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk } 449a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk } 459a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk 469a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk @Override 479a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk protected void handleClick() { 489a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk mState.value = !mDataSaverController.isDataSaverEnabled(); 499a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk mDataSaverController.setDataSaverEnabled(mState.value); 509a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk refreshState(mState.value); 519a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk } 529a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk 539a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk @Override 549a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk protected void handleUpdateState(BooleanState state, Object arg) { 559a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk state.value = arg instanceof Boolean ? (Boolean) arg 569a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk : mDataSaverController.isDataSaverEnabled(); 579a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk state.label = mContext.getString(R.string.data_saver); 589a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk state.contentDescription = mContext.getString(state.value ? 599a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk R.string.accessibility_data_saver_on : R.string.accessibility_data_saver_off); 609a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk state.icon = ResourceIcon.get(state.value ? R.drawable.ic_data_saver 619a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk : R.drawable.ic_data_saver_off); 629a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk } 639a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk 649a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk @Override 659a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk public int getMetricsCategory() { 669a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk return MetricsEvent.QS_DATA_SAVER; 679a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk } 689a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk 699a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk @Override 709a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk public void onDataSaverChanged(boolean isDataSaving) { 719a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk refreshState(isDataSaving); 729a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk } 739a4ce137eb5b73f9d7b097a26ae1c523c5b070e9Jason Monk}