[Settings] Avoid SIM toggle switch loopback

API provided by SwitchBar widget would lead to callback when
SIM toggle switch operation failure and set UI back.
However, set UI back (rollback the UI) would lead to another
trigger to SIM toggle switch. This would generate endless
events and keep system budy.

To avoid from this callback, a check need to be done prior to UI
take action. Therefore, changing APIs to fit into this concept.

Bug: 155770954
Test: make RunSettingsRoboTests -j ROBOTEST_FILTER=MobileNetworkSwitchControllerTest
Change-Id: Iaea1012acdbe449a882ced08b596c64b9f99256f
This commit is contained in:
Bonian Chen
2020-05-26 21:08:59 +08:00
parent ec156b7035
commit b381ac0bad

View File

@@ -75,13 +75,14 @@ public class MobileNetworkSwitchController extends BasePreferenceController impl
mSwitchBar.setSwitchBarText(R.string.mobile_network_use_sim_on,
R.string.mobile_network_use_sim_off);
mSwitchBar.addOnSwitchChangeListener((switchView, isChecked) -> {
mSwitchBar.getSwitch().setOnBeforeCheckedChangeListener((toggleSwitch, isChecked) -> {
// TODO b/135222940: re-evaluate whether to use
// mSubscriptionManager#isSubscriptionEnabled
if (mSubscriptionManager.isActiveSubscriptionId(mSubId) != isChecked
&& (!mSubscriptionManager.setSubscriptionEnabled(mSubId, isChecked))) {
mSwitchBar.setChecked(!isChecked);
return true;
}
return false;
});
update();
}
@@ -106,7 +107,7 @@ public class MobileNetworkSwitchController extends BasePreferenceController impl
mSwitchBar.hide();
} else {
mSwitchBar.show();
mSwitchBar.setChecked(mSubscriptionManager.isActiveSubscriptionId(mSubId));
mSwitchBar.setCheckedInternal(mSubscriptionManager.isActiveSubscriptionId(mSubId));
}
}