diff options
8 files changed, 46 insertions, 13 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java index 3e359d216234..d3bab5f41f39 100644 --- a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java +++ b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java @@ -224,7 +224,9 @@ public class WifiTracker implements LifecycleObserver, OnStart, OnStop, OnDestro mConnectivityManager = connectivityManager; // check if verbose logging developer option has been turned on or off - sVerboseLogging = mWifiManager != null && (mWifiManager.getVerboseLoggingLevel() > 0); + sVerboseLogging = Settings.Global.getInt( + mContext.getContentResolver(), + Settings.Global.WIFI_VERBOSE_LOGGING_ENABLED, 0) > 0; mFilter = filter; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java index 001e09406e3a..16a39750a9bd 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java @@ -73,6 +73,7 @@ public class HotspotTile extends QSTileImpl<BooleanState> { if (listening) { refreshState(); } + mHotspotController.handleSetListening(listening); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotController.java index 830b50e35490..8b06a9fa05a1 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotController.java @@ -20,6 +20,8 @@ import com.android.systemui.Dumpable; import com.android.systemui.statusbar.policy.HotspotController.Callback; public interface HotspotController extends CallbackController<Callback>, Dumpable { + void handleSetListening(boolean listening); + boolean isHotspotEnabled(); boolean isHotspotTransient(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotControllerImpl.java index db2be0e78e9a..1c6d12f15e4c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotControllerImpl.java @@ -51,6 +51,7 @@ public class HotspotControllerImpl implements HotspotController, WifiManager.Sof private int mHotspotState; private int mNumConnectedDevices; private boolean mWaitingForTerminalState; + private boolean mListening; /** */ @@ -105,14 +106,18 @@ public class HotspotControllerImpl implements HotspotController, WifiManager.Sof if (DEBUG) Log.d(TAG, "addCallback " + callback); mCallbacks.add(callback); if (mWifiManager != null) { - if (mCallbacks.size() == 1) { - mWifiManager.registerSoftApCallback(this, mMainHandler); - } else { - // mWifiManager#registerSoftApCallback triggers a call to onNumClientsChanged - // on the Main Handler. In order to always update the callback on added, we - // make this call when adding callbacks after the first. - mMainHandler.post(() -> - callback.onHotspotChanged(isHotspotEnabled(), mNumConnectedDevices)); + if (mListening) { + if (mCallbacks.size() == 1) { + mWifiManager.registerSoftApCallback(this, mMainHandler); + } else { + // mWifiManager#registerSoftApCallback triggers a call to + // onNumClientsChanged on the Main Handler. In order to always update the + // callback on added, we make this call when adding callbacks after the + // first. + mMainHandler.post(() -> + callback.onHotspotChanged(isHotspotEnabled(), + mNumConnectedDevices)); + } } } } @@ -124,13 +129,24 @@ public class HotspotControllerImpl implements HotspotController, WifiManager.Sof if (DEBUG) Log.d(TAG, "removeCallback " + callback); synchronized (mCallbacks) { mCallbacks.remove(callback); - if (mCallbacks.isEmpty() && mWifiManager != null) { + if (mCallbacks.isEmpty() && mWifiManager != null && mListening) { mWifiManager.unregisterSoftApCallback(this); } } } @Override + public void handleSetListening(boolean listening) { + // Wait for the first |handleSetListening(true))| to register softap callbacks (for lazy + // registration of the softap callbacks). + if (mListening || !listening) return; + mListening = true; + if (mCallbacks.size() >= 1) { + mWifiManager.registerSoftApCallback(this, mMainHandler); + } + } + + @Override public boolean isHotspotEnabled() { return mHotspotState == WifiManager.WIFI_AP_STATE_ENABLED; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java index d545dc8f7428..b338f511dda8 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java @@ -312,6 +312,7 @@ public class NetworkControllerImpl extends BroadcastReceiver filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); filter.addAction(ConnectivityManager.INET_CONDITION_ACTION); filter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED); + filter.addAction(Intent.ACTION_BOOT_COMPLETED); filter.addAction(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED); mContext.registerReceiver(this, filter, null, mReceiverHandler); mListening = true; @@ -513,6 +514,9 @@ public class NetworkControllerImpl extends BroadcastReceiver recalculateEmergency(); } break; + case Intent.ACTION_BOOT_COMPLETED: + mWifiSignalController.handleBootCompleted(); + break; case CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED: mConfig = Config.readConfig(mContext); mReceiverHandler.post(this::handleConfigurationChanged); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiSignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiSignalController.java index 6f63544d3cfa..a441f660ecb7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiSignalController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiSignalController.java @@ -38,6 +38,7 @@ import java.util.Objects; public class WifiSignalController extends SignalController<WifiSignalController.WifiState, SignalController.IconGroup> { private final boolean mHasMobileData; + private final WifiManager mWifiManager; private final WifiStatusTracker mWifiTracker; public WifiSignalController(Context context, boolean hasMobileData, @@ -49,13 +50,11 @@ public class WifiSignalController extends context.getSystemService(NetworkScoreManager.class); ConnectivityManager connectivityManager = context.getSystemService(ConnectivityManager.class); + mWifiManager = wifiManager; mWifiTracker = new WifiStatusTracker(mContext, wifiManager, networkScoreManager, connectivityManager, this::handleStatusUpdated); mWifiTracker.setListening(true); mHasMobileData = hasMobileData; - if (wifiManager != null) { - wifiManager.registerTrafficStateCallback(new WifiTrafficStateCallback(), null); - } // WiFi only has one state. mCurrentState.iconGroup = mLastState.iconGroup = new IconGroup( "Wi-Fi Icons", @@ -128,6 +127,10 @@ public class WifiSignalController extends notifyListenersIfNecessary(); } + public void handleBootCompleted() { + mWifiManager.registerTrafficStateCallback(new WifiTrafficStateCallback(), null); + } + /** * Handler to receive the data activity on wifi. */ diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/HotspotControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/HotspotControllerImplTest.java index 3e4c4d6a7a8a..556ed5c30496 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/HotspotControllerImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/HotspotControllerImplTest.java @@ -73,6 +73,7 @@ public class HotspotControllerImplTest extends SysuiTestCase { any(Handler.class)); mController = new HotspotControllerImpl(mContext, new Handler(mLooper.getLooper())); + mController.handleSetListening(true); } @Test diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeHotspotController.java b/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeHotspotController.java index 016160aea433..c9681ac558f9 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeHotspotController.java +++ b/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeHotspotController.java @@ -26,6 +26,10 @@ public class FakeHotspotController extends BaseLeakChecker<Callback> implements } @Override + public void handleSetListening(boolean listening) { + } + + @Override public boolean isHotspotEnabled() { return false; } |