diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-01-19 04:29:12 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-01-19 04:29:12 +0000 |
commit | 23707dbcdb8f5a07fb7bff17f3b45013e1f97d40 (patch) | |
tree | 69c7bd3572f3e8a75001aef0f21c6173d6f0106b | |
parent | d01e5708f898bbfbd75be7aa4b03fbacaad8028d (diff) | |
parent | 2aef3464c8ac279225edc2fc3aed93019d2cd0e1 (diff) | |
download | Telephony-android12L-d2-s6-release.tar.gz |
Snap for 8092407 from 2aef3464c8ac279225edc2fc3aed93019d2cd0e1 to sc-d2-releaseandroid-12.1.0_r26android-12.1.0_r25android-12.1.0_r24android-12.1.0_r23android-12.1.0_r18android-12.1.0_r17android-12.1.0_r16android-12.1.0_r15android-12.1.0_r14android-12.1.0_r13android-12.1.0_r12android12L-d2-s8-releaseandroid12L-d2-s7-releaseandroid12L-d2-s6-releaseandroid12L-d2-s5-releaseandroid12L-d2-s4-releaseandroid12L-d2-s3-releaseandroid12L-d2-s2-releaseandroid12L-d2-s1-releaseandroid12L-d2-release
Change-Id: I1766ceae3d380ed7b9c8defb60c8b2bd19e20e80
-rw-r--r-- | src/com/android/phone/CallWaitingSwitchPreference.java | 35 |
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 |