blob: fd8b9c9534dc1836c3c50bb33486afad487a9b1f [file] [log] [blame]
Jason Monk9a4ce132016-01-21 15:27:17 -05001/*
2 * Copyright (C) 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
5 * except in compliance with the License. You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software distributed under the
10 * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
11 * KIND, either express or implied. See the License for the specific language governing
12 * permissions and limitations under the License.
13 */
14
15package com.android.systemui.qs.tiles;
16
Rajeev Kumara8981f32017-07-19 18:12:47 -070017import android.content.DialogInterface.OnClickListener;
Jason Monk76c67aa2016-02-19 14:49:42 -050018import android.content.Intent;
Jason Monk32508852017-01-18 09:17:13 -050019import android.service.quicksettings.Tile;
Julia Reynolds20aef8a2016-05-04 16:44:08 -040020import android.widget.Switch;
Gus Prevasab336792018-11-14 13:52:20 -050021
Tamas Berghammer383db5eb2016-06-22 15:21:38 +010022import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
Jason Monk9c7844c2017-01-18 15:21:53 -050023import com.android.systemui.Dependency;
Felipe Leme0281a992016-04-27 10:22:32 -070024import com.android.systemui.Prefs;
Jason Monk9a4ce132016-01-21 15:27:17 -050025import com.android.systemui.R;
Jason Monk702e2eb2017-03-03 16:53:44 -050026import com.android.systemui.plugins.qs.QSTile.BooleanState;
Rajeev Kumara8981f32017-07-19 18:12:47 -070027import com.android.systemui.qs.QSHost;
Jason Monk702e2eb2017-03-03 16:53:44 -050028import com.android.systemui.qs.tileimpl.QSTileImpl;
Felipe Leme0281a992016-04-27 10:22:32 -070029import com.android.systemui.statusbar.phone.SystemUIDialog;
Jason Monk9a4ce132016-01-21 15:27:17 -050030import com.android.systemui.statusbar.policy.DataSaverController;
Jason Monk9c7844c2017-01-18 15:21:53 -050031import com.android.systemui.statusbar.policy.NetworkController;
Jason Monk9a4ce132016-01-21 15:27:17 -050032
Jason Monk702e2eb2017-03-03 16:53:44 -050033public class DataSaverTile extends QSTileImpl<BooleanState> implements
Jason Monk9a4ce132016-01-21 15:27:17 -050034 DataSaverController.Listener{
35
36 private final DataSaverController mDataSaverController;
37
Jason Monk702e2eb2017-03-03 16:53:44 -050038 public DataSaverTile(QSHost host) {
Jason Monk9a4ce132016-01-21 15:27:17 -050039 super(host);
Jason Monk9c7844c2017-01-18 15:21:53 -050040 mDataSaverController = Dependency.get(NetworkController.class).getDataSaverController();
Jason Monk9a4ce132016-01-21 15:27:17 -050041 }
42
43 @Override
Jason Monk62b63a02016-02-02 15:15:31 -050044 public BooleanState newTileState() {
Jason Monk9a4ce132016-01-21 15:27:17 -050045 return new BooleanState();
46 }
47
48 @Override
Jason Monk1c6116c2017-09-06 17:33:01 -040049 public void handleSetListening(boolean listening) {
Jason Monk9a4ce132016-01-21 15:27:17 -050050 if (listening) {
Jason Monk88529052016-11-04 13:29:58 -040051 mDataSaverController.addCallback(this);
Jason Monk9a4ce132016-01-21 15:27:17 -050052 } else {
Jason Monk88529052016-11-04 13:29:58 -040053 mDataSaverController.removeCallback(this);
Jason Monk9a4ce132016-01-21 15:27:17 -050054 }
55 }
56
57 @Override
Jason Monk76c67aa2016-02-19 14:49:42 -050058 public Intent getLongClickIntent() {
Rohan Shah53f3f152018-02-28 15:13:31 -080059 return CellularTile.getCellularSettingIntent();
Jason Monk76c67aa2016-02-19 14:49:42 -050060 }
Jason Monk76c67aa2016-02-19 14:49:42 -050061 @Override
Jason Monk9a4ce132016-01-21 15:27:17 -050062 protected void handleClick() {
Felipe Lemeac0dbbb2016-05-03 15:58:35 -070063 if (mState.value
64 || Prefs.getBoolean(mContext, Prefs.Key.QS_DATA_SAVER_DIALOG_SHOWN, false)) {
Felipe Leme0281a992016-04-27 10:22:32 -070065 // Do it right away.
66 toggleDataSaver();
67 return;
68 }
69 // Shows dialog first
70 SystemUIDialog dialog = new SystemUIDialog(mContext);
71 dialog.setTitle(com.android.internal.R.string.data_saver_enable_title);
72 dialog.setMessage(com.android.internal.R.string.data_saver_description);
73 dialog.setPositiveButton(com.android.internal.R.string.data_saver_enable_button,
Rajeev Kumara8981f32017-07-19 18:12:47 -070074 (OnClickListener) (dialogInterface, which) -> toggleDataSaver());
Felipe Leme0281a992016-04-27 10:22:32 -070075 dialog.setNegativeButton(com.android.internal.R.string.cancel, null);
76 dialog.setShowForAllUsers(true);
77 dialog.show();
78 Prefs.putBoolean(mContext, Prefs.Key.QS_DATA_SAVER_DIALOG_SHOWN, true);
79 }
80
81 private void toggleDataSaver() {
Jason Monk9a4ce132016-01-21 15:27:17 -050082 mState.value = !mDataSaverController.isDataSaverEnabled();
83 mDataSaverController.setDataSaverEnabled(mState.value);
84 refreshState(mState.value);
85 }
86
87 @Override
Jason Monk39c98e62016-03-16 09:18:35 -040088 public CharSequence getTileLabel() {
89 return mContext.getString(R.string.data_saver);
90 }
91
92 @Override
Jason Monk9a4ce132016-01-21 15:27:17 -050093 protected void handleUpdateState(BooleanState state, Object arg) {
94 state.value = arg instanceof Boolean ? (Boolean) arg
95 : mDataSaverController.isDataSaverEnabled();
Jason Monk32508852017-01-18 09:17:13 -050096 state.state = state.value ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE;
Jason Monk9a4ce132016-01-21 15:27:17 -050097 state.label = mContext.getString(R.string.data_saver);
Julia Reynolds20aef8a2016-05-04 16:44:08 -040098 state.contentDescription = state.label;
Jason Monk9a4ce132016-01-21 15:27:17 -050099 state.icon = ResourceIcon.get(state.value ? R.drawable.ic_data_saver
100 : R.drawable.ic_data_saver_off);
Jason Monk702e2eb2017-03-03 16:53:44 -0500101 state.expandedAccessibilityClassName = Switch.class.getName();
Jason Monk9a4ce132016-01-21 15:27:17 -0500102 }
103
104 @Override
105 public int getMetricsCategory() {
106 return MetricsEvent.QS_DATA_SAVER;
107 }
108
109 @Override
Felipe Leme3e5e8412016-03-09 15:44:23 -0800110 protected String composeChangeAnnouncement() {
111 if (mState.value) {
112 return mContext.getString(R.string.accessibility_quick_settings_data_saver_changed_on);
113 } else {
114 return mContext.getString(R.string.accessibility_quick_settings_data_saver_changed_off);
115 }
116 }
117
118 @Override
Jason Monk9a4ce132016-01-21 15:27:17 -0500119 public void onDataSaverChanged(boolean isDataSaving) {
120 refreshState(isDataSaving);
121 }
Rajeev Kumara8981f32017-07-19 18:12:47 -0700122}