Merge "Import translations. DO NOT MERGE ANYWHERE" into 24D1-dev
diff --git a/src/com/android/phone/CallWaitingSwitchPreference.java b/src/com/android/phone/CallWaitingSwitchPreference.java
index 00407f3..a5bc92e 100644
--- a/src/com/android/phone/CallWaitingSwitchPreference.java
+++ b/src/com/android/phone/CallWaitingSwitchPreference.java
@@ -35,6 +35,8 @@
private int mUpdateStatus = TelephonyManager.CALL_WAITING_STATUS_UNKNOWN_ERROR;
private int mQueryStatus = TelephonyManager.CALL_WAITING_STATUS_UNKNOWN_ERROR;
private boolean mUssdMode = false;
+ private boolean mCwEnabled = false;
+ private boolean mCwClicked = false;
public CallWaitingSwitchPreference(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
@@ -60,6 +62,7 @@
PersistableBundle bundle = configManager.getConfigForSubId(phone.getSubId());
mUssdMode = (bundle != null) ? bundle.getBoolean(
CarrierConfigManager.KEY_USE_CALL_WAITING_USSD_BOOL, false) : false;
+ mCwEnabled = false;
if (!skipReading) {
Log.d(LOG_TAG, "init getCallWaitingStatus");
@@ -101,7 +104,9 @@
@Override
protected void onClick() {
super.onClick();
- mTelephonyManager.setCallWaitingEnabled(isChecked(), mExecutor, this::updateStatusCallBack);
+ mCwEnabled = isChecked();
+ mCwClicked = true;
+ mTelephonyManager.setCallWaitingEnabled(mCwEnabled, mExecutor, this::updateStatusCallBack);
if (mTcpListener != null) {
mIsDuringUpdateProcess = true;
mTcpListener.onStarted(this, false);
@@ -145,6 +150,8 @@
if (mTcpListener != null) {
mTcpListener.onError(CallWaitingSwitchPreference.this, error);
}
+ handleCwFallbackOnError();
+ setChecked(mCwEnabled);
} else if (mQueryStatus == TelephonyManager.CALL_WAITING_STATUS_UNKNOWN_ERROR
|| (mIsDuringUpdateProcess && (
mUpdateStatus != TelephonyManager.CALL_WAITING_STATUS_ENABLED
@@ -153,14 +160,21 @@
if (mTcpListener != null) {
mTcpListener.onError(CallWaitingSwitchPreference.this, RESPONSE_ERROR);
}
+ handleCwFallbackOnError();
+ setChecked(mCwEnabled);
} else {
- if (mQueryStatus == TelephonyManager.CALL_WAITING_STATUS_ENABLED) {
- setChecked(true);
- } else {
- setChecked(false);
- }
+ mCwEnabled = mQueryStatus == TelephonyManager.CALL_WAITING_STATUS_ENABLED;
+ setChecked(mCwEnabled);
}
mIsDuringUpdateProcess = false;
+ mCwClicked = false;
+ }
+ }
+
+ private void handleCwFallbackOnError() {
+ // Recover initial state before onClick.
+ if (mCwClicked) {
+ mCwEnabled = !mCwEnabled;
}
}
}