Avoid disabling the Wi-Fi hotspot switch causing Talkback confusion

- Use local variables to filter inappropriate callbacks when the switch is busy

Bug: 374234537
Flag: EXEMPT bugfix
Test: Manual testing
atest -c WifiTetherSwitchBarControllerTest

Change-Id: If5237230c73cae5a6230a6d3fdaa65a8511bdcd8
This commit is contained in:
Weng Su
2024-10-23 04:35:13 +08:00
parent 46c45023d2
commit 259d3a47c8
2 changed files with 10 additions and 6 deletions

View File

@@ -57,6 +57,9 @@ public class WifiTetherSwitchBarController implements
private final ConnectivityManager mConnectivityManager;
private final WifiManager mWifiManager;
@VisibleForTesting
boolean mIsSwitchBusy;
@VisibleForTesting
DataSaverBackend mDataSaverBackend;
@VisibleForTesting
@@ -102,8 +105,8 @@ public class WifiTetherSwitchBarController implements
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// Filter out unnecessary callbacks when switch is disabled.
if (!buttonView.isEnabled()) return;
// Filter out inappropriate callbacks when switch is busy.
if (mIsSwitchBusy) return;
if (isChecked) {
startTether();
@@ -115,14 +118,14 @@ public class WifiTetherSwitchBarController implements
void stopTether() {
if (!isWifiApActivated()) return;
mSwitchBar.setEnabled(false);
mIsSwitchBusy = true;
mConnectivityManager.stopTethering(TETHERING_WIFI);
}
void startTether() {
if (isWifiApActivated()) return;
mSwitchBar.setEnabled(false);
mIsSwitchBusy = true;
mConnectivityManager.startTethering(TETHERING_WIFI, true /* showProvisioningUi */,
mOnStartTetheringCallback, new Handler(Looper.getMainLooper()));
}
@@ -159,6 +162,7 @@ public class WifiTetherSwitchBarController implements
private void updateWifiSwitch() {
mSwitchBar.setEnabled(!mDataSaverBackend.isDataSaverEnabled());
mIsSwitchBusy = false;
}
@Override

View File

@@ -147,8 +147,8 @@ public class WifiTetherSwitchBarControllerTest {
}
@Test
public void onSwitchChanged_switchNotEnabled_doNothingForTethering() {
when(mSwitch.isEnabled()).thenReturn(false);
public void onSwitchChanged_switchIsBusy_doNothingForTethering() {
mController.mIsSwitchBusy = true;
mController.onCheckedChanged(mSwitch, true);