1 /* 2 * Copyright (C) 2017 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 */ 16 17 package com.android.settings.wifi; 18 19 import android.content.BroadcastReceiver; 20 import android.content.Context; 21 import android.content.Intent; 22 import android.content.IntentFilter; 23 import android.net.ConnectivityManager; 24 import android.net.NetworkScoreManager; 25 import android.net.wifi.WifiInfo; 26 import android.net.wifi.WifiManager; 27 import android.support.annotation.VisibleForTesting; 28 import android.text.TextUtils; 29 30 import com.android.settings.R; 31 import com.android.settings.widget.SummaryUpdater; 32 import com.android.settingslib.wifi.WifiStatusTracker; 33 34 /** 35 * Helper class that listeners to wifi callback and notify client when there is update in 36 * wifi summary info. 37 */ 38 public final class WifiSummaryUpdater extends SummaryUpdater { 39 40 private final WifiStatusTracker mWifiTracker; 41 private final BroadcastReceiver mReceiver; 42 43 private static final IntentFilter INTENT_FILTER; 44 static { 45 INTENT_FILTER = new IntentFilter(); 46 INTENT_FILTER.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION); 47 INTENT_FILTER.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); 48 INTENT_FILTER.addAction(WifiManager.RSSI_CHANGED_ACTION); 49 } 50 WifiSummaryUpdater(Context context, OnSummaryChangeListener listener)51 public WifiSummaryUpdater(Context context, OnSummaryChangeListener listener) { 52 this(context, listener, null); 53 } 54 55 @VisibleForTesting WifiSummaryUpdater(Context context, OnSummaryChangeListener listener, WifiStatusTracker wifiTracker)56 public WifiSummaryUpdater(Context context, OnSummaryChangeListener listener, 57 WifiStatusTracker wifiTracker) { 58 super(context, listener); 59 mWifiTracker = wifiTracker != null ? wifiTracker : 60 new WifiStatusTracker(context, context.getSystemService(WifiManager.class), 61 context.getSystemService(NetworkScoreManager.class), 62 context.getSystemService(ConnectivityManager.class), 63 this::notifyChangeIfNeeded); 64 mReceiver = new BroadcastReceiver() { 65 @Override 66 public void onReceive(Context context, Intent intent) { 67 mWifiTracker.handleBroadcast(intent); 68 notifyChangeIfNeeded(); 69 } 70 }; 71 } 72 73 @Override register(boolean register)74 public void register(boolean register) { 75 if (register) { 76 mContext.registerReceiver(mReceiver, INTENT_FILTER); 77 } else { 78 mContext.unregisterReceiver(mReceiver); 79 } 80 mWifiTracker.setListening(register); 81 } 82 83 @Override getSummary()84 public String getSummary() { 85 if (!mWifiTracker.enabled) { 86 return mContext.getString(R.string.switch_off_text); 87 } 88 if (!mWifiTracker.connected) { 89 return mContext.getString(R.string.disconnected); 90 } 91 String ssid = WifiInfo.removeDoubleQuotes(mWifiTracker.ssid); 92 if (TextUtils.isEmpty(mWifiTracker.statusLabel)) { 93 return ssid; 94 } 95 return mContext.getResources().getString( 96 com.android.settingslib.R.string.preference_summary_default_combination, 97 ssid, mWifiTracker.statusLabel); 98 } 99 } 100