summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-01-19 04:29:12 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-01-19 04:29:12 +0000
commit23707dbcdb8f5a07fb7bff17f3b45013e1f97d40 (patch)
tree69c7bd3572f3e8a75001aef0f21c6173d6f0106b
parentd01e5708f898bbfbd75be7aa4b03fbacaad8028d (diff)
parent2aef3464c8ac279225edc2fc3aed93019d2cd0e1 (diff)
downloadTelephony-android12L-d2-s6-release.tar.gz
Change-Id: I1766ceae3d380ed7b9c8defb60c8b2bd19e20e80
-rw-r--r--src/com/android/phone/CallWaitingSwitchPreference.java35
1 files changed, 31 insertions, 4 deletions
diff --git a/src/com/android/phone/CallWaitingSwitchPreference.java b/src/com/android/phone/CallWaitingSwitchPreference.java
index 01dd3b204..609488ce0 100644
--- a/src/com/android/phone/CallWaitingSwitchPreference.java
+++ b/src/com/android/phone/CallWaitingSwitchPreference.java
@@ -6,28 +6,34 @@ import static com.android.phone.TimeConsumingPreferenceActivity.RESPONSE_ERROR;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
+import android.os.PersistableBundle;
import android.preference.SwitchPreference;
+import android.telephony.CarrierConfigManager;
import android.telephony.TelephonyManager;
import android.util.AttributeSet;
import android.util.Log;
import com.android.internal.telephony.Phone;
-import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+import java.util.function.Consumer;
public class CallWaitingSwitchPreference extends SwitchPreference {
private static final String LOG_TAG = "CallWaitingSwitchPreference";
+ private static final int DELAY_MILLIS_FOR_USSD = 1000;
private final boolean DBG = (PhoneGlobals.DBG_LEVEL >= 2);
private final MyHandler mHandler = new MyHandler();
private Phone mPhone;
private TimeConsumingPreferenceListener mTcpListener;
- private Executor mExecutor;
+ private ScheduledExecutorService mExecutor;
private TelephonyManager mTelephonyManager;
private boolean mIsDuringUpdateProcess = false;
private int mUpdateStatus = TelephonyManager.CALL_WAITING_STATUS_UNKNOWN_ERROR;
private int mQueryStatus = TelephonyManager.CALL_WAITING_STATUS_UNKNOWN_ERROR;
+ private boolean mUssdMode = false;
public CallWaitingSwitchPreference(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
@@ -45,9 +51,14 @@ public class CallWaitingSwitchPreference extends SwitchPreference {
TimeConsumingPreferenceListener listener, boolean skipReading, Phone phone) {
mPhone = phone;
mTcpListener = listener;
- mExecutor = Executors.newSingleThreadExecutor();
+ mExecutor = Executors.newSingleThreadScheduledExecutor();
mTelephonyManager = getContext().getSystemService(
TelephonyManager.class).createForSubscriptionId(phone.getSubId());
+ CarrierConfigManager configManager = getContext().getSystemService(
+ CarrierConfigManager.class);
+ PersistableBundle bundle = configManager.getConfigForSubId(phone.getSubId());
+ mUssdMode = (bundle != null) ? bundle.getBoolean(
+ CarrierConfigManager.KEY_USE_CALL_WAITING_USSD_BOOL, false) : false;
if (!skipReading) {
Log.d(LOG_TAG, "init getCallWaitingStatus");
@@ -67,7 +78,23 @@ public class CallWaitingSwitchPreference extends SwitchPreference {
private void updateStatusCallBack(int result) {
Log.d(LOG_TAG, "updateStatusCallBack: CW state " + result + ", and re get");
mUpdateStatus = result;
- mTelephonyManager.getCallWaitingStatus(mExecutor, this::queryStatusCallBack);
+ if (mUssdMode) {
+ Log.d(LOG_TAG, "updateStatusCallBack: USSD mode needs to wait 1s since Framework"
+ + " has the limitation");
+ Consumer<Integer> resultListener = this::queryStatusCallBack;
+ try {
+ mExecutor.schedule(new Runnable() {
+ @Override
+ public void run() {
+ mTelephonyManager.getCallWaitingStatus(mExecutor, resultListener);
+ }
+ }, DELAY_MILLIS_FOR_USSD, TimeUnit.MILLISECONDS);
+ } catch (Exception e) {
+ Log.d(LOG_TAG, "Exception while waiting: " + e);
+ }
+ } else {
+ mTelephonyManager.getCallWaitingStatus(mExecutor, this::queryStatusCallBack);
+ }
}
@Override