1c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling/* 2c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling * Copyright (C) 2017 The Android Open Source Project 3c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling * 4c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling * Licensed under the Apache License, Version 2.0 (the "License"); 5c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling * you may not use this file except in compliance with the License. 6c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling * You may obtain a copy of the License at 7c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling * 8c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling * http://www.apache.org/licenses/LICENSE-2.0 9c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling * 10c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling * Unless required by applicable law or agreed to in writing, software 11c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling * distributed under the License is distributed on an "AS IS" BASIS, 12c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling * See the License for the specific language governing permissions and 14c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling * limitations under the License. 15c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling */ 16c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling 17c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Lingpackage com.android.settings.wifi; 18c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling 19c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Lingimport android.content.BroadcastReceiver; 20c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Lingimport android.content.Context; 21c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Lingimport android.content.Intent; 22c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Lingimport android.content.IntentFilter; 23c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Lingimport android.net.wifi.WifiManager; 24c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Lingimport android.support.annotation.VisibleForTesting; 25c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Lingimport com.android.settings.R; 26c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Lingimport com.android.settings.widget.SummaryUpdater; 27c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Lingimport com.android.settingslib.wifi.WifiStatusTracker; 28c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling 2947ec3857a5c9551f95d3bf14484d98f8550241d8Doris Lingimport static android.net.wifi.WifiInfo.removeDoubleQuotes; 3047ec3857a5c9551f95d3bf14484d98f8550241d8Doris Ling 31c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling/** 32c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling * Helper class that listeners to wifi callback and notify client when there is update in 33c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling * wifi summary info. 34c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling */ 35c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Lingpublic final class WifiSummaryUpdater extends SummaryUpdater { 36c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling 37c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling private final WifiStatusTracker mWifiTracker; 38c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling private final BroadcastReceiver mReceiver; 39c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling 40c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling private static final IntentFilter INTENT_FILTER; 41c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling static { 42c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling INTENT_FILTER = new IntentFilter(); 43c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling INTENT_FILTER.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION); 44c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling INTENT_FILTER.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); 45c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling INTENT_FILTER.addAction(WifiManager.RSSI_CHANGED_ACTION); 46c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling } 47c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling 48c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling public WifiSummaryUpdater(Context context, OnSummaryChangeListener listener) { 49c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling this(context, listener, new WifiStatusTracker(context.getSystemService(WifiManager.class))); 50c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling } 51c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling 52c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling @VisibleForTesting 53c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling public WifiSummaryUpdater(Context context, OnSummaryChangeListener listener, 54c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling WifiStatusTracker wifiTracker) { 55c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling super(context, listener); 56c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling mWifiTracker = wifiTracker; 57c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling mReceiver = new BroadcastReceiver() { 58c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling @Override 59c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling public void onReceive(Context context, Intent intent) { 60c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling mWifiTracker.handleBroadcast(intent); 61c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling notifyChangeIfNeeded(); 62c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling } 63c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling }; 64c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling } 65c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling 66c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling @Override 67c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling public void register(boolean register) { 68c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling if (register) { 69c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling mContext.registerReceiver(mReceiver, INTENT_FILTER); 70c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling } else { 71c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling mContext.unregisterReceiver(mReceiver); 72c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling } 73c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling } 74c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling 75c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling @Override 76c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling public String getSummary() { 77c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling if (!mWifiTracker.enabled) { 785853f9742fb72ef155338b94f6904e635e87f675Doris Ling return mContext.getString(R.string.switch_off_text); 79c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling } 80c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling if (!mWifiTracker.connected) { 81c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling return mContext.getString(R.string.disconnected); 82c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling } 8347ec3857a5c9551f95d3bf14484d98f8550241d8Doris Ling return removeDoubleQuotes(mWifiTracker.ssid); 84c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling } 85c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling 86c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling} 87