blob: e1bb19a6f69fac0a7298b90a98f7945c55807582 [file] [log] [blame]
Jason Monk07b75fe2015-05-14 16:47:03 -04001/*
2 * Copyright (C) 2015 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 */
16package com.android.systemui.statusbar.policy;
17
18import android.os.Handler;
19import android.os.Looper;
20import android.os.Message;
21import android.telephony.SubscriptionInfo;
Gus Prevasab336792018-11-14 13:52:20 -050022
Jason Monk07b75fe2015-05-14 16:47:03 -040023import com.android.internal.annotations.VisibleForTesting;
Jason Monk46dbfb42016-02-25 14:59:20 -050024import com.android.systemui.statusbar.policy.NetworkController.EmergencyListener;
Jason Monk07b75fe2015-05-14 16:47:03 -040025import com.android.systemui.statusbar.policy.NetworkController.IconState;
26import com.android.systemui.statusbar.policy.NetworkController.SignalCallback;
Jason Monk07b75fe2015-05-14 16:47:03 -040027
28import java.util.ArrayList;
29import java.util.List;
30
31
32/**
33 * Implements network listeners and forwards the calls along onto other listeners but on
34 * the current or specified Looper.
35 */
36public class CallbackHandler extends Handler implements EmergencyListener, SignalCallback {
37 private static final int MSG_EMERGENCE_CHANGED = 0;
38 private static final int MSG_SUBS_CHANGED = 1;
39 private static final int MSG_NO_SIM_VISIBLE_CHANGED = 2;
40 private static final int MSG_ETHERNET_CHANGED = 3;
41 private static final int MSG_AIRPLANE_MODE_CHANGED = 4;
42 private static final int MSG_MOBILE_DATA_ENABLED_CHANGED = 5;
43 private static final int MSG_ADD_REMOVE_EMERGENCY = 6;
44 private static final int MSG_ADD_REMOVE_SIGNAL = 7;
45
46 // All the callbacks.
47 private final ArrayList<EmergencyListener> mEmergencyListeners = new ArrayList<>();
48 private final ArrayList<SignalCallback> mSignalCallbacks = new ArrayList<>();
49
50 public CallbackHandler() {
Jason Monk9c7844c2017-01-18 15:21:53 -050051 super(Looper.getMainLooper());
Jason Monk07b75fe2015-05-14 16:47:03 -040052 }
53
54 @VisibleForTesting
55 CallbackHandler(Looper looper) {
56 super(looper);
57 }
58
59 @Override
60 @SuppressWarnings("unchecked")
61 public void handleMessage(Message msg) {
62 switch (msg.what) {
63 case MSG_EMERGENCE_CHANGED:
64 for (EmergencyListener listener : mEmergencyListeners) {
65 listener.setEmergencyCallsOnly(msg.arg1 != 0);
66 }
67 break;
68 case MSG_SUBS_CHANGED:
69 for (SignalCallback signalCluster : mSignalCallbacks) {
70 signalCluster.setSubs((List<SubscriptionInfo>) msg.obj);
71 }
72 break;
73 case MSG_NO_SIM_VISIBLE_CHANGED:
74 for (SignalCallback signalCluster : mSignalCallbacks) {
Jason Monk1ff77662017-09-29 11:17:05 -040075 signalCluster.setNoSims(msg.arg1 != 0, msg.arg2 != 0);
Jason Monk07b75fe2015-05-14 16:47:03 -040076 }
77 break;
78 case MSG_ETHERNET_CHANGED:
79 for (SignalCallback signalCluster : mSignalCallbacks) {
80 signalCluster.setEthernetIndicators((IconState) msg.obj);
81 }
82 break;
83 case MSG_AIRPLANE_MODE_CHANGED:
84 for (SignalCallback signalCluster : mSignalCallbacks) {
85 signalCluster.setIsAirplaneMode((IconState) msg.obj);
86 }
87 break;
88 case MSG_MOBILE_DATA_ENABLED_CHANGED:
89 for (SignalCallback signalCluster : mSignalCallbacks) {
90 signalCluster.setMobileDataEnabled(msg.arg1 != 0);
91 }
92 break;
93 case MSG_ADD_REMOVE_EMERGENCY:
94 if (msg.arg1 != 0) {
95 mEmergencyListeners.add((EmergencyListener) msg.obj);
96 } else {
97 mEmergencyListeners.remove((EmergencyListener) msg.obj);
98 }
99 break;
100 case MSG_ADD_REMOVE_SIGNAL:
101 if (msg.arg1 != 0) {
102 mSignalCallbacks.add((SignalCallback) msg.obj);
103 } else {
104 mSignalCallbacks.remove((SignalCallback) msg.obj);
105 }
106 break;
107 }
108 }
109
110 @Override
111 public void setWifiIndicators(final boolean enabled, final IconState statusIcon,
112 final IconState qsIcon, final boolean activityIn, final boolean activityOut,
Amin Shaikhe74dbdd2018-03-09 16:05:30 -0500113 final String description, boolean isTransient, String secondaryLabel) {
Jason Monk7e6c83c2017-04-26 14:35:24 -0400114 post(new Runnable() {
115 @Override
116 public void run() {
117 for (SignalCallback callback : mSignalCallbacks) {
118 callback.setWifiIndicators(enabled, statusIcon, qsIcon, activityIn, activityOut,
Amin Shaikhe74dbdd2018-03-09 16:05:30 -0500119 description, isTransient, secondaryLabel);
Jason Monk7e6c83c2017-04-26 14:35:24 -0400120 }
Jason Monk07b75fe2015-05-14 16:47:03 -0400121 }
122 });
123 }
124
125 @Override
Jason Monk7e6c83c2017-04-26 14:35:24 -0400126 public void setMobileDataIndicators(final IconState statusIcon, final IconState qsIcon,
127 final int statusType, final int qsType,final boolean activityIn,
Andrew Flynn2fdbe122015-06-01 16:34:21 -0400128 final boolean activityOut, final String typeContentDescription,
Jason Monk7e6c83c2017-04-26 14:35:24 -0400129 final String description, final boolean isWide, final int subId, boolean roaming) {
130 post(new Runnable() {
131 @Override
132 public void run() {
133 for (SignalCallback signalCluster : mSignalCallbacks) {
134 signalCluster.setMobileDataIndicators(statusIcon, qsIcon, statusType, qsType,
135 activityIn, activityOut, typeContentDescription, description, isWide,
136 subId, roaming);
137 }
Jason Monk07b75fe2015-05-14 16:47:03 -0400138 }
139 });
140 }
141
142 @Override
143 public void setSubs(List<SubscriptionInfo> subs) {
144 obtainMessage(MSG_SUBS_CHANGED, subs).sendToTarget();
145 }
146
147 @Override
Jason Monk1ff77662017-09-29 11:17:05 -0400148 public void setNoSims(boolean show, boolean simDetected) {
149 obtainMessage(MSG_NO_SIM_VISIBLE_CHANGED, show ? 1 : 0, simDetected ? 1 : 0).sendToTarget();
Jason Monk07b75fe2015-05-14 16:47:03 -0400150 }
151
152 @Override
153 public void setMobileDataEnabled(boolean enabled) {
154 obtainMessage(MSG_MOBILE_DATA_ENABLED_CHANGED, enabled ? 1 : 0, 0).sendToTarget();
155 }
156
157 @Override
158 public void setEmergencyCallsOnly(boolean emergencyOnly) {
159 obtainMessage(MSG_EMERGENCE_CHANGED, emergencyOnly ? 1 : 0, 0).sendToTarget();
160 }
161
162 @Override
163 public void setEthernetIndicators(IconState icon) {
164 obtainMessage(MSG_ETHERNET_CHANGED, icon).sendToTarget();;
165 }
166
167 @Override
168 public void setIsAirplaneMode(IconState icon) {
169 obtainMessage(MSG_AIRPLANE_MODE_CHANGED, icon).sendToTarget();;
170 }
171
172 public void setListening(EmergencyListener listener, boolean listening) {
173 obtainMessage(MSG_ADD_REMOVE_EMERGENCY, listening ? 1 : 0, 0, listener).sendToTarget();
174 }
175
176 public void setListening(SignalCallback listener, boolean listening) {
177 obtainMessage(MSG_ADD_REMOVE_SIGNAL, listening ? 1 : 0, 0, listener).sendToTarget();
178 }
179
180}