WifiSummaryUpdater.java revision 5853f9742fb72ef155338b94f6904e635e87f675
1ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov/* 2ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov * Copyright (C) 2017 The Android Open Source Project 3ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov * 4ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov * Licensed under the Apache License, Version 2.0 (the "License"); 5ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov * you may not use this file except in compliance with the License. 6ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov * You may obtain a copy of the License at 7ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov * 8ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov * http://www.apache.org/licenses/LICENSE-2.0 9ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov * 10ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov * Unless required by applicable law or agreed to in writing, software 11ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov * distributed under the License is distributed on an "AS IS" BASIS, 12ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov * See the License for the specific language governing permissions and 14ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov * limitations under the License. 15ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov */ 16ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov 17ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganovpackage com.android.settings.wifi; 18ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov 19ed6b9dff563c5e22f040ff37e12c0d771e0478aeAndreas Gampeimport android.content.BroadcastReceiver; 2035aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslavimport android.content.Context; 2135aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslavimport android.content.Intent; 2235aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslavimport android.content.IntentFilter; 23ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganovimport android.net.wifi.WifiManager; 24ea70d22dc8dc5d61f075edf6d03f86f6a68169cdMatt Sarettimport android.support.annotation.VisibleForTesting; 2535aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslavimport com.android.settings.R; 2635aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslavimport com.android.settings.widget.SummaryUpdater; 27b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillipsimport com.android.settingslib.wifi.WifiStatusTracker; 2835aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav 29ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganovimport static android.net.wifi.WifiInfo.removeDoubleQuotes; 30ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov 31dccca44ffda4836b56a21da95a046c9708ffd49csergeyv/** 32dccca44ffda4836b56a21da95a046c9708ffd49csergeyv * Helper class that listeners to wifi callback and notify client when there is update in 33ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov * wifi summary info. 34ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov */ 3535aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslavpublic final class WifiSummaryUpdater extends SummaryUpdater { 366811f4e92cbb64e72a0d13eb9b99b5894bd59c76Svetoslav 3735aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav private final WifiStatusTracker mWifiTracker; 38b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips private final BroadcastReceiver mReceiver; 39b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips 40b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips private static final IntentFilter INTENT_FILTER; 41b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips static { 4235aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav INTENT_FILTER = new IntentFilter(); 4335aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav INTENT_FILTER.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION); 44ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov INTENT_FILTER.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); 4535aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav INTENT_FILTER.addAction(WifiManager.RSSI_CHANGED_ACTION); 46b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips } 47b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips 48b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips public WifiSummaryUpdater(Context context, OnSummaryChangeListener listener) { 49b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips this(context, listener, new WifiStatusTracker(context.getSystemService(WifiManager.class))); 5035aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav } 51ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov 52b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips @VisibleForTesting 53b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips public WifiSummaryUpdater(Context context, OnSummaryChangeListener listener, 5435aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav WifiStatusTracker wifiTracker) { 5535aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav super(context, listener); 5635aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav mWifiTracker = wifiTracker; 5735aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav mReceiver = new BroadcastReceiver() { 5835aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav @Override 5935aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav public void onReceive(Context context, Intent intent) { 6035aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav mWifiTracker.handleBroadcast(intent); 6135aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav notifyChangeIfNeeded(); 6235aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav } 6335aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav }; 6435aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav } 6535aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav 6635aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav @Override 6735aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav public void register(boolean register) { 6835aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav if (register) { 6935aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav mContext.registerReceiver(mReceiver, INTENT_FILTER); 7035aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav } else { 7135aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav mContext.unregisterReceiver(mReceiver); 7235aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav } 7335aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav } 7435aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav 75b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips @Override 7671487eb0ceb2b7dea02649e78d99bb5952f5eaefMike Reed public String getSummary() { 7735aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav if (!mWifiTracker.enabled) { 7835aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav return mContext.getString(R.string.switch_off_text); 7935aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav } 80ff4adde5737be08d3e2d03fbe588c591d27d4a74Svetoslav Ganov if (!mWifiTracker.connected) { 8135aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav return mContext.getString(R.string.disconnected); 8235aacf2eb325d24c67d01f4dbd706ed26ab9e8c3Svetoslav } 83b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips return removeDoubleQuotes(mWifiTracker.ssid); 84b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips } 85260ab726486317496bc12a57d599ea96dcde3284Mike Reed 86b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips} 87b59508fce51b23f0201f4dcba7e4f18bab4f9d1aRobert Phillips