blob: 3142ddfe9fb71fe40112c76b7eb3fddfe1beb64b [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;
Jason Monk07b75fe2015-05-14 16:47:03 -040022import com.android.internal.annotations.VisibleForTesting;
Jason Monk46dbfb42016-02-25 14:59:20 -050023import com.android.systemui.statusbar.policy.NetworkController.EmergencyListener;
Jason Monk07b75fe2015-05-14 16:47:03 -040024import com.android.systemui.statusbar.policy.NetworkController.IconState;
25import com.android.systemui.statusbar.policy.NetworkController.SignalCallback;
Jason Monk07b75fe2015-05-14 16:47:03 -040026
27import java.util.ArrayList;
28import java.util.List;
29
30
31/**
32 * Implements network listeners and forwards the calls along onto other listeners but on
33 * the current or specified Looper.
34 */
35public class CallbackHandler extends Handler implements EmergencyListener, SignalCallback {
36 private static final int MSG_EMERGENCE_CHANGED = 0;
37 private static final int MSG_SUBS_CHANGED = 1;
38 private static final int MSG_NO_SIM_VISIBLE_CHANGED = 2;
39 private static final int MSG_ETHERNET_CHANGED = 3;
40 private static final int MSG_AIRPLANE_MODE_CHANGED = 4;
41 private static final int MSG_MOBILE_DATA_ENABLED_CHANGED = 5;
42 private static final int MSG_ADD_REMOVE_EMERGENCY = 6;
43 private static final int MSG_ADD_REMOVE_SIGNAL = 7;
44
45 // All the callbacks.
46 private final ArrayList<EmergencyListener> mEmergencyListeners = new ArrayList<>();
47 private final ArrayList<SignalCallback> mSignalCallbacks = new ArrayList<>();
48
49 public CallbackHandler() {
50 super();
51 }
52
53 @VisibleForTesting
54 CallbackHandler(Looper looper) {
55 super(looper);
56 }
57
58 @Override
59 @SuppressWarnings("unchecked")
60 public void handleMessage(Message msg) {
61 switch (msg.what) {
62 case MSG_EMERGENCE_CHANGED:
63 for (EmergencyListener listener : mEmergencyListeners) {
64 listener.setEmergencyCallsOnly(msg.arg1 != 0);
65 }
66 break;
67 case MSG_SUBS_CHANGED:
68 for (SignalCallback signalCluster : mSignalCallbacks) {
69 signalCluster.setSubs((List<SubscriptionInfo>) msg.obj);
70 }
71 break;
72 case MSG_NO_SIM_VISIBLE_CHANGED:
73 for (SignalCallback signalCluster : mSignalCallbacks) {
74 signalCluster.setNoSims(msg.arg1 != 0);
75 }
76 break;
77 case MSG_ETHERNET_CHANGED:
78 for (SignalCallback signalCluster : mSignalCallbacks) {
79 signalCluster.setEthernetIndicators((IconState) msg.obj);
80 }
81 break;
82 case MSG_AIRPLANE_MODE_CHANGED:
83 for (SignalCallback signalCluster : mSignalCallbacks) {
84 signalCluster.setIsAirplaneMode((IconState) msg.obj);
85 }
86 break;
87 case MSG_MOBILE_DATA_ENABLED_CHANGED:
88 for (SignalCallback signalCluster : mSignalCallbacks) {
89 signalCluster.setMobileDataEnabled(msg.arg1 != 0);
90 }
91 break;
92 case MSG_ADD_REMOVE_EMERGENCY:
93 if (msg.arg1 != 0) {
94 mEmergencyListeners.add((EmergencyListener) msg.obj);
95 } else {
96 mEmergencyListeners.remove((EmergencyListener) msg.obj);
97 }
98 break;
99 case MSG_ADD_REMOVE_SIGNAL:
100 if (msg.arg1 != 0) {
101 mSignalCallbacks.add((SignalCallback) msg.obj);
102 } else {
103 mSignalCallbacks.remove((SignalCallback) msg.obj);
104 }
105 break;
106 }
107 }
108
109 @Override
110 public void setWifiIndicators(final boolean enabled, final IconState statusIcon,
111 final IconState qsIcon, final boolean activityIn, final boolean activityOut,
112 final String description) {
113 post(new Runnable() {
114 @Override
115 public void run() {
116 for (SignalCallback callback : mSignalCallbacks) {
117 callback.setWifiIndicators(enabled, statusIcon, qsIcon, activityIn, activityOut,
118 description);
119 }
120 }
121 });
122 }
123
124 @Override
125 public void setMobileDataIndicators(final IconState statusIcon, final IconState qsIcon,
Andrew Flynn2fdbe122015-06-01 16:34:21 -0400126 final int statusType, final int qsType,final boolean activityIn,
127 final boolean activityOut, final String typeContentDescription,
128 final String description, final boolean isWide, final int subId) {
Jason Monk07b75fe2015-05-14 16:47:03 -0400129 post(new Runnable() {
130 @Override
131 public void run() {
132 for (SignalCallback signalCluster : mSignalCallbacks) {
Andrew Flynn2fdbe122015-06-01 16:34:21 -0400133 signalCluster.setMobileDataIndicators(statusIcon, qsIcon, statusType, qsType,
134 activityIn, activityOut, typeContentDescription, description, isWide,
135 subId);
Jason Monk07b75fe2015-05-14 16:47:03 -0400136 }
137 }
138 });
139 }
140
141 @Override
142 public void setSubs(List<SubscriptionInfo> subs) {
143 obtainMessage(MSG_SUBS_CHANGED, subs).sendToTarget();
144 }
145
146 @Override
147 public void setNoSims(boolean show) {
148 obtainMessage(MSG_NO_SIM_VISIBLE_CHANGED, show ? 1 : 0, 0).sendToTarget();
149 }
150
151 @Override
152 public void setMobileDataEnabled(boolean enabled) {
153 obtainMessage(MSG_MOBILE_DATA_ENABLED_CHANGED, enabled ? 1 : 0, 0).sendToTarget();
154 }
155
156 @Override
157 public void setEmergencyCallsOnly(boolean emergencyOnly) {
158 obtainMessage(MSG_EMERGENCE_CHANGED, emergencyOnly ? 1 : 0, 0).sendToTarget();
159 }
160
161 @Override
162 public void setEthernetIndicators(IconState icon) {
163 obtainMessage(MSG_ETHERNET_CHANGED, icon).sendToTarget();;
164 }
165
166 @Override
167 public void setIsAirplaneMode(IconState icon) {
168 obtainMessage(MSG_AIRPLANE_MODE_CHANGED, icon).sendToTarget();;
169 }
170
171 public void setListening(EmergencyListener listener, boolean listening) {
172 obtainMessage(MSG_ADD_REMOVE_EMERGENCY, listening ? 1 : 0, 0, listener).sendToTarget();
173 }
174
175 public void setListening(SignalCallback listener, boolean listening) {
176 obtainMessage(MSG_ADD_REMOVE_SIGNAL, listening ? 1 : 0, 0, listener).sendToTarget();
177 }
178
179}