WifiTile.java revision e5557a972ca190cb82026a5dd0c53f4d119fa05a
1af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock/* 2af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * Copyright (C) 2014 The Android Open Source Project 3af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * 4af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * Licensed under the Apache License, Version 2.0 (the "License"); 5af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * you may not use this file except in compliance with the License. 6af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * You may obtain a copy of the License at 7af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * 8af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * http://www.apache.org/licenses/LICENSE-2.0 9af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * 10af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * Unless required by applicable law or agreed to in writing, software 11af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * distributed under the License is distributed on an "AS IS" BASIS, 12af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * See the License for the specific language governing permissions and 14af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * limitations under the License. 15af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock */ 16af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 17af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockpackage com.android.systemui.qs.tiles; 18af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 19af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport android.content.Context; 20af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport android.content.Intent; 21af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport android.content.res.Resources; 22af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport android.provider.Settings; 23ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlockimport android.util.Log; 247f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlockimport android.view.View; 257f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlockimport android.view.ViewGroup; 26af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 27af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport com.android.systemui.R; 28486b78e42652466f6241eb87d5bed60040db7a25John Spurlockimport com.android.systemui.qs.QSDetailItems; 29486b78e42652466f6241eb87d5bed60040db7a25John Spurlockimport com.android.systemui.qs.QSDetailItems.Item; 30af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport com.android.systemui.qs.QSTile; 31af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport com.android.systemui.qs.QSTileView; 32af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport com.android.systemui.qs.SignalTileView; 33af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport com.android.systemui.statusbar.policy.NetworkController; 347f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlockimport com.android.systemui.statusbar.policy.NetworkController.AccessPoint; 35af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport com.android.systemui.statusbar.policy.NetworkController.NetworkSignalChangedCallback; 36af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 37af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock/** Quick settings tile: Wifi **/ 38af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockpublic class WifiTile extends QSTile<QSTile.SignalState> { 39af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private static final Intent WIFI_SETTINGS = new Intent(Settings.ACTION_WIFI_SETTINGS); 40af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 41af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private final NetworkController mController; 427f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock private final WifiDetailAdapter mDetailAdapter; 43af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 44af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public WifiTile(Host host) { 45af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock super(host); 46af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mController = host.getNetworkController(); 477f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock mDetailAdapter = new WifiDetailAdapter(); 48ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock } 49ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock 50ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock @Override 51ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock public boolean supportsDualTargets() { 52ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock return true; 53af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 54af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 55af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock @Override 56af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock protected SignalState newTileState() { 57af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock return new SignalState(); 58af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 59af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 60af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock @Override 61ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock public void setListening(boolean listening) { 62ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock if (listening) { 63ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock mController.addNetworkSignalChangedCallback(mCallback); 647f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock mController.addAccessPointCallback(mDetailAdapter); 65ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock } else { 66ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock mController.removeNetworkSignalChangedCallback(mCallback); 677f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock mController.removeAccessPointCallback(mDetailAdapter); 68ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock } 69af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 70af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 71af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock @Override 727f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock public DetailAdapter getDetailAdapter() { 737f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock return mDetailAdapter; 747f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock } 757f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock 767f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock @Override 77af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public QSTileView createTileView(Context context) { 78af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock return new SignalTileView(context); 79af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 80af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 81af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock @Override 82af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock protected void handleClick() { 83af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mController.setWifiEnabled(!mState.enabled); 84af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 85af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 86af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock @Override 87af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock protected void handleSecondaryClick() { 88f84a1b87c73ba1500bf337509de6f24166e14493John Spurlock if (!mState.enabled) { 89f84a1b87c73ba1500bf337509de6f24166e14493John Spurlock mController.setWifiEnabled(true); 90f84a1b87c73ba1500bf337509de6f24166e14493John Spurlock mState.enabled = true; 91f84a1b87c73ba1500bf337509de6f24166e14493John Spurlock } 927f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock showDetail(true); 93af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 94af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 95af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock @Override 96af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock protected void handleUpdateState(SignalState state, Object arg) { 97af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock state.visible = true; 98ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock if (DEBUG) Log.d(TAG, "handleUpdateState arg=" + arg); 99ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock if (arg == null) return; 100af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock CallbackInfo cb = (CallbackInfo) arg; 101af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 102af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock boolean wifiConnected = cb.enabled && (cb.wifiSignalIconId > 0) && (cb.enabledDesc != null); 103af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock boolean wifiNotConnected = (cb.wifiSignalIconId > 0) && (cb.enabledDesc == null); 1047f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock boolean enabledChanging = state.enabled != cb.enabled; 1057f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock if (enabledChanging) { 106486b78e42652466f6241eb87d5bed60040db7a25John Spurlock mDetailAdapter.setItemsVisible(cb.enabled); 1077f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock fireToggleStateChanged(cb.enabled); 1087f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock } 1093d09bbd04fc5ee028316f6cd38178c8095faa653John Spurlock state.enabled = cb.enabled; 110af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock state.connected = wifiConnected; 111af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock state.activityIn = cb.enabled && cb.activityIn; 112af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock state.activityOut = cb.enabled && cb.activityOut; 113899f439a29ab1e609e7ba2aea3e9de3afef35c50John Spurlock state.filter = true; 114af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock final String signalContentDescription; 115af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock final Resources r = mContext.getResources(); 116c1d48a5b7174a8599b1a9f34e47635cab83e036cJohn Spurlock if (!state.enabled) { 117c1d48a5b7174a8599b1a9f34e47635cab83e036cJohn Spurlock state.iconId = R.drawable.ic_qs_wifi_disabled; 118c1d48a5b7174a8599b1a9f34e47635cab83e036cJohn Spurlock state.label = r.getString(R.string.quick_settings_wifi_label); 119c1d48a5b7174a8599b1a9f34e47635cab83e036cJohn Spurlock signalContentDescription = r.getString(R.string.accessibility_wifi_off); 120c1d48a5b7174a8599b1a9f34e47635cab83e036cJohn Spurlock } else if (wifiConnected) { 121af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock state.iconId = cb.wifiSignalIconId; 122af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock state.label = removeDoubleQuotes(cb.enabledDesc); 123af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock signalContentDescription = cb.wifiSignalContentDescription; 124af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else if (wifiNotConnected) { 125af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock state.iconId = R.drawable.ic_qs_wifi_0; 126af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock state.label = r.getString(R.string.quick_settings_wifi_label); 127af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock signalContentDescription = r.getString(R.string.accessibility_no_wifi); 128af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } else { 129af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock state.iconId = R.drawable.ic_qs_wifi_no_network; 130012d4a229c2373519b5ebc3e19d8b27d6ce55843John Spurlock state.label = r.getString(R.string.quick_settings_wifi_label); 131af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock signalContentDescription = r.getString(R.string.accessibility_wifi_off); 132af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 133af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock state.contentDescription = mContext.getString( 134af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock R.string.accessibility_quick_settings_wifi, 135e5557a972ca190cb82026a5dd0c53f4d119fa05aSelim Cinek signalContentDescription); 136e5557a972ca190cb82026a5dd0c53f4d119fa05aSelim Cinek String wifiName = state.label; 137e5557a972ca190cb82026a5dd0c53f4d119fa05aSelim Cinek if (state.connected) { 138e5557a972ca190cb82026a5dd0c53f4d119fa05aSelim Cinek wifiName = r.getString(R.string.accessibility_wifi_name, state.label); 139e5557a972ca190cb82026a5dd0c53f4d119fa05aSelim Cinek } 140e5557a972ca190cb82026a5dd0c53f4d119fa05aSelim Cinek state.dualLabelContentDescription = wifiName; 141af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 142af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 143af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private static String removeDoubleQuotes(String string) { 144af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if (string == null) return null; 145af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock final int length = string.length(); 146af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock if ((length > 1) && (string.charAt(0) == '"') && (string.charAt(length - 1) == '"')) { 147af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock return string.substring(1, length - 1); 148af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 149af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock return string; 150af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 151af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 152af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private static final class CallbackInfo { 153af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock boolean enabled; 154d5cd2fd15b8f2c9df9a3659cc294bf475e5aab13John Spurlock boolean connected; 155af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock int wifiSignalIconId; 156af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock String enabledDesc; 157af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock boolean activityIn; 158af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock boolean activityOut; 159af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock String wifiSignalContentDescription; 160ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock 161ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock @Override 162ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock public String toString() { 163ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock return new StringBuilder("CallbackInfo[") 164ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock .append("enabled=").append(enabled) 165d5cd2fd15b8f2c9df9a3659cc294bf475e5aab13John Spurlock .append(",connected=").append(connected) 166ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock .append(",wifiSignalIconId=").append(wifiSignalIconId) 167ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock .append(",enabledDesc=").append(enabledDesc) 168ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock .append(",activityIn=").append(activityIn) 169ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock .append(",activityOut=").append(activityOut) 170ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock .append(",wifiSignalContentDescription=").append(wifiSignalContentDescription) 171ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock .append(']').toString(); 172ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock } 173af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 174af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 175af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private final NetworkSignalChangedCallback mCallback = new NetworkSignalChangedCallback() { 176af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock @Override 177d5cd2fd15b8f2c9df9a3659cc294bf475e5aab13John Spurlock public void onWifiSignalChanged(boolean enabled, boolean connected, int wifiSignalIconId, 178af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock boolean activityIn, boolean activityOut, 179af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock String wifiSignalContentDescriptionId, String description) { 180ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock if (DEBUG) Log.d(TAG, "onWifiSignalChanged enabled=" + enabled); 181af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock final CallbackInfo info = new CallbackInfo(); 182af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock info.enabled = enabled; 183d5cd2fd15b8f2c9df9a3659cc294bf475e5aab13John Spurlock info.connected = connected; 184af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock info.wifiSignalIconId = wifiSignalIconId; 185af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock info.enabledDesc = description; 186af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock info.activityIn = activityIn; 187af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock info.activityOut = activityOut; 188af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock info.wifiSignalContentDescription = wifiSignalContentDescriptionId; 189af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock refreshState(info); 190af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 191af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 192af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock @Override 193af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public void onMobileDataSignalChanged(boolean enabled, 194af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock int mobileSignalIconId, 195af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock String mobileSignalContentDescriptionId, int dataTypeIconId, 196af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock boolean activityIn, boolean activityOut, 197899f439a29ab1e609e7ba2aea3e9de3afef35c50John Spurlock String dataTypeContentDescriptionId, String description, boolean noSim) { 198af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // noop 199af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 200af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 201af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock @Override 202af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public void onAirplaneModeChanged(boolean enabled) { 203af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock // noop 204af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 205b98f747c714ff8252471ca0a3295c2cb9ccb4f3aJohn Spurlock 206b98f747c714ff8252471ca0a3295c2cb9ccb4f3aJohn Spurlock @Override 207b98f747c714ff8252471ca0a3295c2cb9ccb4f3aJohn Spurlock public void onMobileDataEnabled(boolean enabled) { 208b98f747c714ff8252471ca0a3295c2cb9ccb4f3aJohn Spurlock // noop 209b98f747c714ff8252471ca0a3295c2cb9ccb4f3aJohn Spurlock } 210af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock }; 2117f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock 2127f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock private final class WifiDetailAdapter implements DetailAdapter, 213486b78e42652466f6241eb87d5bed60040db7a25John Spurlock NetworkController.AccessPointCallback, QSDetailItems.Callback { 2147f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock 215486b78e42652466f6241eb87d5bed60040db7a25John Spurlock private QSDetailItems mItems; 2167f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock private AccessPoint[] mAccessPoints; 2177f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock 2187f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock @Override 2197f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock public int getTitle() { 2207f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock return R.string.quick_settings_wifi_label; 2217f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock } 2227f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock 2237f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock public Intent getSettingsIntent() { 2247f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock return WIFI_SETTINGS; 2257f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock } 2267f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock 2277f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock @Override 2287f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock public Boolean getToggleState() { 2297f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock return mState.enabled; 2307f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock } 2317f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock 2327f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock @Override 2337f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock public void setToggleState(boolean state) { 2347f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock if (DEBUG) Log.d(TAG, "setToggleState " + state); 2357f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock mController.setWifiEnabled(state); 2367f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock showDetail(false); 2377f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock } 2387f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock 2397f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock @Override 2407f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock public View createDetailView(Context context, View convertView, ViewGroup parent) { 241486b78e42652466f6241eb87d5bed60040db7a25John Spurlock if (DEBUG) Log.d(TAG, "createDetailView convertView=" + (convertView != null)); 242486b78e42652466f6241eb87d5bed60040db7a25John Spurlock mAccessPoints = null; 243486b78e42652466f6241eb87d5bed60040db7a25John Spurlock mController.scanForAccessPoints(); 244486b78e42652466f6241eb87d5bed60040db7a25John Spurlock fireScanStateChanged(true); 245486b78e42652466f6241eb87d5bed60040db7a25John Spurlock mItems = QSDetailItems.convertOrInflate(context, convertView, parent); 246486b78e42652466f6241eb87d5bed60040db7a25John Spurlock mItems.setTagSuffix("Wifi"); 247486b78e42652466f6241eb87d5bed60040db7a25John Spurlock mItems.setCallback(this); 248486b78e42652466f6241eb87d5bed60040db7a25John Spurlock mItems.setEmptyState(R.drawable.ic_qs_wifi_detail_empty, 249486b78e42652466f6241eb87d5bed60040db7a25John Spurlock R.string.quick_settings_wifi_detail_empty_text); 2507f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock updateItems(); 251486b78e42652466f6241eb87d5bed60040db7a25John Spurlock setItemsVisible(mState.enabled); 2527f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock return mItems; 2537f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock } 2547f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock 2557f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock @Override 2567f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock public void onAccessPointsChanged(final AccessPoint[] accessPoints) { 257486b78e42652466f6241eb87d5bed60040db7a25John Spurlock mAccessPoints = accessPoints; 258486b78e42652466f6241eb87d5bed60040db7a25John Spurlock updateItems(); 259486b78e42652466f6241eb87d5bed60040db7a25John Spurlock if (accessPoints != null && accessPoints.length > 0) { 260486b78e42652466f6241eb87d5bed60040db7a25John Spurlock fireScanStateChanged(false); 261486b78e42652466f6241eb87d5bed60040db7a25John Spurlock } 2627f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock } 2637f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock 264486b78e42652466f6241eb87d5bed60040db7a25John Spurlock @Override 265486b78e42652466f6241eb87d5bed60040db7a25John Spurlock public void onDetailItemClick(Item item) { 266486b78e42652466f6241eb87d5bed60040db7a25John Spurlock if (item == null || item.tag == null) return; 267486b78e42652466f6241eb87d5bed60040db7a25John Spurlock final AccessPoint ap = (AccessPoint) item.tag; 268486b78e42652466f6241eb87d5bed60040db7a25John Spurlock if (!ap.isConnected) { 269486b78e42652466f6241eb87d5bed60040db7a25John Spurlock mController.connect(ap); 270486b78e42652466f6241eb87d5bed60040db7a25John Spurlock } 271486b78e42652466f6241eb87d5bed60040db7a25John Spurlock showDetail(false); 272486b78e42652466f6241eb87d5bed60040db7a25John Spurlock } 273486b78e42652466f6241eb87d5bed60040db7a25John Spurlock 274486b78e42652466f6241eb87d5bed60040db7a25John Spurlock @Override 275486b78e42652466f6241eb87d5bed60040db7a25John Spurlock public void onDetailItemDisconnect(Item item) { 276486b78e42652466f6241eb87d5bed60040db7a25John Spurlock // noop 277486b78e42652466f6241eb87d5bed60040db7a25John Spurlock } 278486b78e42652466f6241eb87d5bed60040db7a25John Spurlock 279486b78e42652466f6241eb87d5bed60040db7a25John Spurlock public void setItemsVisible(boolean visible) { 280486b78e42652466f6241eb87d5bed60040db7a25John Spurlock if (mItems == null) return; 281486b78e42652466f6241eb87d5bed60040db7a25John Spurlock mItems.setItemsVisible(visible); 2827f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock } 2837f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock 2847f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock private void updateItems() { 2857f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock if (mItems == null) return; 286486b78e42652466f6241eb87d5bed60040db7a25John Spurlock Item[] items = null; 287486b78e42652466f6241eb87d5bed60040db7a25John Spurlock if (mAccessPoints != null) { 288486b78e42652466f6241eb87d5bed60040db7a25John Spurlock items = new Item[mAccessPoints.length]; 289486b78e42652466f6241eb87d5bed60040db7a25John Spurlock for (int i = 0; i < mAccessPoints.length; i++) { 290486b78e42652466f6241eb87d5bed60040db7a25John Spurlock final AccessPoint ap = mAccessPoints[i]; 291486b78e42652466f6241eb87d5bed60040db7a25John Spurlock final Item item = new Item(); 292486b78e42652466f6241eb87d5bed60040db7a25John Spurlock item.tag = ap; 293486b78e42652466f6241eb87d5bed60040db7a25John Spurlock item.icon = ap.iconId; 294486b78e42652466f6241eb87d5bed60040db7a25John Spurlock item.line1 = ap.ssid; 295486b78e42652466f6241eb87d5bed60040db7a25John Spurlock if (ap.isConnected) { 296486b78e42652466f6241eb87d5bed60040db7a25John Spurlock item.line2 = mContext.getString(R.string.quick_settings_connected); 2977f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock } 298486b78e42652466f6241eb87d5bed60040db7a25John Spurlock items[i] = item; 299486b78e42652466f6241eb87d5bed60040db7a25John Spurlock } 3007f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock } 301486b78e42652466f6241eb87d5bed60040db7a25John Spurlock mItems.setItems(items); 3027f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock } 3037f8f22a53005f776c8ee4d299e748e74b077ffd9John Spurlock }; 304af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock} 305