blob: a1026967633f339417cdfeb4284d6ad0accf07d0 [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;
Tamas Berghammer383db5eb2016-06-22 15:21:38 +010021import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
Jason Monk9c7844c2017-01-18 15:21:53 -050022import com.android.systemui.Dependency;
Felipe Leme0281a992016-04-27 10:22:32 -070023import com.android.systemui.Prefs;
Jason Monk9a4ce132016-01-21 15:27:17 -050024import com.android.systemui.R;
Jason Monk702e2eb2017-03-03 16:53:44 -050025import com.android.systemui.plugins.qs.QSTile.BooleanState;
Rajeev Kumara8981f32017-07-19 18:12:47 -070026import com.android.systemui.qs.QSHost;
Jason Monk702e2eb2017-03-03 16:53:44 -050027import com.android.systemui.qs.tileimpl.QSTileImpl;
Felipe Leme0281a992016-04-27 10:22:32 -070028import com.android.systemui.statusbar.phone.SystemUIDialog;
Jason Monk9a4ce132016-01-21 15:27:17 -050029import com.android.systemui.statusbar.policy.DataSaverController;
Jason Monk9c7844c2017-01-18 15:21:53 -050030import com.android.systemui.statusbar.policy.NetworkController;
Jason Monk9a4ce132016-01-21 15:27:17 -050031
Jason Monk702e2eb2017-03-03 16:53:44 -050032public class DataSaverTile extends QSTileImpl<BooleanState> implements
Jason Monk9a4ce132016-01-21 15:27:17 -050033 DataSaverController.Listener{
34
35 private final DataSaverController mDataSaverController;
36
Jason Monk702e2eb2017-03-03 16:53:44 -050037 public DataSaverTile(QSHost host) {
Jason Monk9a4ce132016-01-21 15:27:17 -050038 super(host);
Jason Monk9c7844c2017-01-18 15:21:53 -050039 mDataSaverController = Dependency.get(NetworkController.class).getDataSaverController();
Jason Monk9a4ce132016-01-21 15:27:17 -050040 }
41
42 @Override
Jason Monk62b63a02016-02-02 15:15:31 -050043 public BooleanState newTileState() {
Jason Monk9a4ce132016-01-21 15:27:17 -050044 return new BooleanState();
45 }
46
47 @Override
Jason Monk1c6116c2017-09-06 17:33:01 -040048 public void handleSetListening(boolean listening) {
Jason Monk9a4ce132016-01-21 15:27:17 -050049 if (listening) {
Jason Monk88529052016-11-04 13:29:58 -040050 mDataSaverController.addCallback(this);
Jason Monk9a4ce132016-01-21 15:27:17 -050051 } else {
Jason Monk88529052016-11-04 13:29:58 -040052 mDataSaverController.removeCallback(this);
Jason Monk9a4ce132016-01-21 15:27:17 -050053 }
54 }
55
56 @Override
Jason Monk76c67aa2016-02-19 14:49:42 -050057 public Intent getLongClickIntent() {
Rajeev Kumara8981f32017-07-19 18:12:47 -070058 return CellularTile.getCellularSettingIntent(mContext);
Jason Monk76c67aa2016-02-19 14:49:42 -050059 }
Jason Monk76c67aa2016-02-19 14:49:42 -050060 @Override
Jason Monk9a4ce132016-01-21 15:27:17 -050061 protected void handleClick() {
Felipe Lemeac0dbbb2016-05-03 15:58:35 -070062 if (mState.value
63 || Prefs.getBoolean(mContext, Prefs.Key.QS_DATA_SAVER_DIALOG_SHOWN, false)) {
Felipe Leme0281a992016-04-27 10:22:32 -070064 // Do it right away.
65 toggleDataSaver();
66 return;
67 }
68 // Shows dialog first
69 SystemUIDialog dialog = new SystemUIDialog(mContext);
70 dialog.setTitle(com.android.internal.R.string.data_saver_enable_title);
71 dialog.setMessage(com.android.internal.R.string.data_saver_description);
72 dialog.setPositiveButton(com.android.internal.R.string.data_saver_enable_button,
Rajeev Kumara8981f32017-07-19 18:12:47 -070073 (OnClickListener) (dialogInterface, which) -> toggleDataSaver());
Felipe Leme0281a992016-04-27 10:22:32 -070074 dialog.setNegativeButton(com.android.internal.R.string.cancel, null);
75 dialog.setShowForAllUsers(true);
76 dialog.show();
77 Prefs.putBoolean(mContext, Prefs.Key.QS_DATA_SAVER_DIALOG_SHOWN, true);
78 }
79
80 private void toggleDataSaver() {
Jason Monk9a4ce132016-01-21 15:27:17 -050081 mState.value = !mDataSaverController.isDataSaverEnabled();
82 mDataSaverController.setDataSaverEnabled(mState.value);
83 refreshState(mState.value);
84 }
85
86 @Override
Jason Monk39c98e62016-03-16 09:18:35 -040087 public CharSequence getTileLabel() {
88 return mContext.getString(R.string.data_saver);
89 }
90
91 @Override
Jason Monk9a4ce132016-01-21 15:27:17 -050092 protected void handleUpdateState(BooleanState state, Object arg) {
93 state.value = arg instanceof Boolean ? (Boolean) arg
94 : mDataSaverController.isDataSaverEnabled();
Jason Monk32508852017-01-18 09:17:13 -050095 state.state = state.value ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE;
Jason Monk9a4ce132016-01-21 15:27:17 -050096 state.label = mContext.getString(R.string.data_saver);
Julia Reynolds20aef8a2016-05-04 16:44:08 -040097 state.contentDescription = state.label;
Jason Monk9a4ce132016-01-21 15:27:17 -050098 state.icon = ResourceIcon.get(state.value ? R.drawable.ic_data_saver
99 : R.drawable.ic_data_saver_off);
Jason Monk702e2eb2017-03-03 16:53:44 -0500100 state.expandedAccessibilityClassName = Switch.class.getName();
Jason Monk9a4ce132016-01-21 15:27:17 -0500101 }
102
103 @Override
104 public int getMetricsCategory() {
105 return MetricsEvent.QS_DATA_SAVER;
106 }
107
108 @Override
Felipe Leme3e5e8412016-03-09 15:44:23 -0800109 protected String composeChangeAnnouncement() {
110 if (mState.value) {
111 return mContext.getString(R.string.accessibility_quick_settings_data_saver_changed_on);
112 } else {
113 return mContext.getString(R.string.accessibility_quick_settings_data_saver_changed_off);
114 }
115 }
116
117 @Override
Jason Monk9a4ce132016-01-21 15:27:17 -0500118 public void onDataSaverChanged(boolean isDataSaving) {
119 refreshState(isDataSaving);
120 }
Rajeev Kumara8981f32017-07-19 18:12:47 -0700121}