Prevent early destroying HotspotTile
Due to the switch to Async HotspotControllerImpl, if the controller is created with the tile it will think that tethering is not available (because it hasn't received callbacks saying otherwise yet) and the tile will be preemptively destroyed. This was observable on OTAs (or when doing a full flash). With this change, HotspotControllerImpl will assume that tethering is available by default and will signal callbacks if it learns that it's not. There are currently no other consumers of HotspotControllerImpl#isHotspotSupported. Fixes: 149492796 Test: atest HotspotControllerImplTest Test: manual full flash Change-Id: Id1461b7fbe973b732bc69c7ad77a30e0f66247d8
This commit is contained in:
@@ -56,8 +56,9 @@ public class HotspotControllerImpl implements HotspotController, WifiManager.Sof
|
||||
|
||||
private int mHotspotState;
|
||||
private volatile int mNumConnectedDevices;
|
||||
private volatile boolean mIsTetheringSupported;
|
||||
private volatile boolean mHasTetherableWifiRegexs;
|
||||
// Assume tethering is available until told otherwise
|
||||
private volatile boolean mIsTetheringSupported = true;
|
||||
private volatile boolean mHasTetherableWifiRegexs = true;
|
||||
private boolean mWaitingForTerminalState;
|
||||
|
||||
private TetheringManager.TetheringEventCallback mTetheringCallback =
|
||||
@@ -97,6 +98,15 @@ public class HotspotControllerImpl implements HotspotController, WifiManager.Sof
|
||||
new HandlerExecutor(backgroundHandler), mTetheringCallback);
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether hotspot is currently supported.
|
||||
*
|
||||
* This will return {@code true} immediately on creation of the controller, but may be updated
|
||||
* later. Callbacks from this controllers will notify if the state changes.
|
||||
*
|
||||
* @return {@code true} if hotspot is supported (or we haven't been told it's not)
|
||||
* @see #addCallback
|
||||
*/
|
||||
@Override
|
||||
public boolean isHotspotSupported() {
|
||||
return mIsTetheringSupported && mHasTetherableWifiRegexs
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
|
||||
package com.android.systemui.statusbar.policy;
|
||||
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.ArgumentMatchers.anyBoolean;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
@@ -140,13 +139,16 @@ public class HotspotControllerImplTest extends SysuiTestCase {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDefault_hotspotNotSupported() {
|
||||
assertFalse(mController.isHotspotSupported());
|
||||
public void testHotspotSupported_default() {
|
||||
assertTrue(mController.isHotspotSupported());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHotspotSupported_rightConditions() {
|
||||
mTetheringCallbackCaptor.getValue().onTetheringSupported(true);
|
||||
|
||||
assertTrue(mController.isHotspotSupported());
|
||||
|
||||
mTetheringCallbackCaptor.getValue()
|
||||
.onTetherableInterfaceRegexpsChanged(mTetheringInterfaceRegexps);
|
||||
|
||||
@@ -154,13 +156,21 @@ public class HotspotControllerImplTest extends SysuiTestCase {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHotspotSupported_callbackCalledOnChange() {
|
||||
public void testHotspotSupported_callbackCalledOnChange_tetheringSupported() {
|
||||
mController.addCallback(mCallback1);
|
||||
mTetheringCallbackCaptor.getValue().onTetheringSupported(false);
|
||||
|
||||
verify(mCallback1).onHotspotAvailabilityChanged(false);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHotspotSupported_callbackCalledOnChange_tetherableInterfaces() {
|
||||
when(mTetheringInterfaceRegexps.getTetherableWifiRegexs())
|
||||
.thenReturn(Collections.emptyList());
|
||||
mController.addCallback(mCallback1);
|
||||
mTetheringCallbackCaptor.getValue().onTetheringSupported(true);
|
||||
mTetheringCallbackCaptor.getValue()
|
||||
.onTetherableInterfaceRegexpsChanged(mTetheringInterfaceRegexps);
|
||||
|
||||
verify(mCallback1).onHotspotAvailabilityChanged(true);
|
||||
verify(mCallback1).onHotspotAvailabilityChanged(false);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user