blob: 9984fcac8653b24d7297220653f53400a169ef09 [file] [log] [blame]
John Spurlockaf8d6c42014-05-07 17:49:08 -04001/*
2 * Copyright (C) 2014 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.systemui.qs.tiles;
18
Jason Monk51e4dc02014-07-22 12:00:47 -040019import android.content.BroadcastReceiver;
20import android.content.Context;
John Spurlockaf8d6c42014-05-07 17:49:08 -040021import android.content.Intent;
22
23import com.android.systemui.R;
John Spurlock3976f3d2014-08-04 17:45:16 -040024import com.android.systemui.qs.UsageTracker;
John Spurlockaf8d6c42014-05-07 17:49:08 -040025import com.android.systemui.qs.QSTile;
Jason Monk51e4dc02014-07-22 12:00:47 -040026import com.android.systemui.statusbar.policy.HotspotController;
John Spurlockaf8d6c42014-05-07 17:49:08 -040027
28/** Quick settings tile: Hotspot **/
Jason Monk51e4dc02014-07-22 12:00:47 -040029public class HotspotTile extends QSTile<QSTile.BooleanState> {
Jason Monk51e4dc02014-07-22 12:00:47 -040030 private final HotspotController mController;
Jason Monk51e4dc02014-07-22 12:00:47 -040031 private final Callback mCallback = new Callback();
John Spurlock3976f3d2014-08-04 17:45:16 -040032 private final UsageTracker mUsageTracker;
John Spurlockaf8d6c42014-05-07 17:49:08 -040033
34 public HotspotTile(Host host) {
35 super(host);
Jason Monk51e4dc02014-07-22 12:00:47 -040036 mController = host.getHotspotController();
John Spurlock3976f3d2014-08-04 17:45:16 -040037 mUsageTracker = new UsageTracker(host.getContext(), HotspotTile.class);
John Spurlockbceed062014-08-10 18:04:16 -040038 mUsageTracker.setListening(true);
39 }
40
41 @Override
42 protected void handleDestroy() {
43 super.handleDestroy();
44 mUsageTracker.setListening(false);
John Spurlockaf8d6c42014-05-07 17:49:08 -040045 }
46
47 @Override
Jason Monk51e4dc02014-07-22 12:00:47 -040048 protected BooleanState newTileState() {
49 return new BooleanState();
John Spurlockaf8d6c42014-05-07 17:49:08 -040050 }
51
52 @Override
John Spurlockccb6b9a2014-05-17 15:54:40 -040053 public void setListening(boolean listening) {
Jason Monk51e4dc02014-07-22 12:00:47 -040054 if (listening) {
55 mController.addCallback(mCallback);
Jason Monk51e4dc02014-07-22 12:00:47 -040056 } else {
57 mController.removeCallback(mCallback);
Jason Monk51e4dc02014-07-22 12:00:47 -040058 }
John Spurlockaf8d6c42014-05-07 17:49:08 -040059 }
60
61 @Override
62 protected void handleClick() {
Jason Monk51e4dc02014-07-22 12:00:47 -040063 final boolean isEnabled = (Boolean) mState.value;
64 mController.setHotspotEnabled(!isEnabled);
John Spurlockaf8d6c42014-05-07 17:49:08 -040065 }
66
67 @Override
Jason Monk51e4dc02014-07-22 12:00:47 -040068 protected void handleUpdateState(BooleanState state, Object arg) {
John Spurlock3976f3d2014-08-04 17:45:16 -040069 state.visible = mController.isHotspotSupported() && mUsageTracker.isRecentlyUsed();
John Spurlockaf8d6c42014-05-07 17:49:08 -040070 state.label = mContext.getString(R.string.quick_settings_hotspot_label);
Jason Monk51e4dc02014-07-22 12:00:47 -040071
72 state.value = mController.isHotspotEnabled();
73 state.iconId = state.visible && state.value ? R.drawable.ic_qs_hotspot_on
74 : R.drawable.ic_qs_hotspot_off;
75 }
76
Selim Cinek4fda7b22014-08-18 22:07:25 +020077 @Override
78 protected String composeChangeAnnouncement() {
79 if (mState.value) {
80 return mContext.getString(R.string.accessibility_quick_settings_hotspot_changed_on);
81 } else {
82 return mContext.getString(R.string.accessibility_quick_settings_hotspot_changed_off);
83 }
84 }
85
John Spurlocke2efefe2014-07-28 11:17:12 -040086 private final class Callback implements HotspotController.Callback {
Jason Monk51e4dc02014-07-22 12:00:47 -040087 @Override
88 public void onHotspotChanged(boolean enabled) {
89 refreshState();
90 }
Jason Monk51e4dc02014-07-22 12:00:47 -040091 };
92
93 /**
94 * This will catch broadcasts for changes in hotspot state so we can show
95 * the hotspot tile for a number of days after use.
96 */
97 public static class APChangedReceiver extends BroadcastReceiver {
John Spurlock3976f3d2014-08-04 17:45:16 -040098 private UsageTracker mUsageTracker;
99
Jason Monk51e4dc02014-07-22 12:00:47 -0400100 @Override
101 public void onReceive(Context context, Intent intent) {
John Spurlock3976f3d2014-08-04 17:45:16 -0400102 if (mUsageTracker == null) {
103 mUsageTracker = new UsageTracker(context, HotspotTile.class);
104 }
105 mUsageTracker.trackUsage();
Jason Monk51e4dc02014-07-22 12:00:47 -0400106 }
John Spurlockaf8d6c42014-05-07 17:49:08 -0400107 }
108}