WifiSummaryUpdater.java revision c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924
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 29c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling/** 30c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling * Helper class that listeners to wifi callback and notify client when there is update in 31c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling * wifi summary info. 32c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling */ 33c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Lingpublic final class WifiSummaryUpdater extends SummaryUpdater { 34c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling 35c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling private final WifiStatusTracker mWifiTracker; 36c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling private final BroadcastReceiver mReceiver; 37c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling 38c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling private static final IntentFilter INTENT_FILTER; 39c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling static { 40c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling INTENT_FILTER = new IntentFilter(); 41c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling INTENT_FILTER.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION); 42c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling INTENT_FILTER.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); 43c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling INTENT_FILTER.addAction(WifiManager.RSSI_CHANGED_ACTION); 44c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling } 45c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling 46c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling public WifiSummaryUpdater(Context context, OnSummaryChangeListener listener) { 47c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling this(context, listener, new WifiStatusTracker(context.getSystemService(WifiManager.class))); 48c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling } 49c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling 50c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling @VisibleForTesting 51c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling public WifiSummaryUpdater(Context context, OnSummaryChangeListener listener, 52c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling WifiStatusTracker wifiTracker) { 53c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling super(context, listener); 54c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling mWifiTracker = wifiTracker; 55c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling mReceiver = new BroadcastReceiver() { 56c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling @Override 57c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling public void onReceive(Context context, Intent intent) { 58c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling mWifiTracker.handleBroadcast(intent); 59c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling notifyChangeIfNeeded(); 60c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling } 61c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling }; 62c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling } 63c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling 64c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling @Override 65c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling public void register(boolean register) { 66c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling if (register) { 67c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling mContext.registerReceiver(mReceiver, INTENT_FILTER); 68c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling } else { 69c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling mContext.unregisterReceiver(mReceiver); 70c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling } 71c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling } 72c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling 73c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling @Override 74c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling public String getSummary() { 75c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling if (!mWifiTracker.enabled) { 76c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling return mContext.getString(R.string.wifi_disabled_generic); 77c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling } 78c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling if (!mWifiTracker.connected) { 79c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling return mContext.getString(R.string.disconnected); 80c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling } 81c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling return mWifiTracker.ssid; 82c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling } 83c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling 84c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling} 85