diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2021-05-03 22:24:29 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2021-05-03 22:24:29 +0000 |
commit | ffe812be3dcdeac6d2c4fcb8b28ba565fae6ae41 (patch) | |
tree | 1c9ef987f3cffdcef7f394efce1e173bd47fff72 | |
parent | 7e8ab0ca503dfda013e92eb1bd43fcd9825ee9bf (diff) | |
parent | f99758e47a4e4104365608aeafc8ec3ce6b7f785 (diff) | |
download | Mms-ffe812be3dcdeac6d2c4fcb8b28ba565fae6ae41.tar.gz |
Merge "Release the N/W request when SIM is removed" am: 12f0501462 am: 662fe1498f am: f99758e47aandroid-12.1.0_r9android-12.1.0_r8android-12.1.0_r7android-12.1.0_r22android-12.1.0_r21android-12.1.0_r20android-12.1.0_r19android-12.1.0_r11android-12.1.0_r10android-12.0.0_r32android-12.0.0_r29android-12.0.0_r28android-12.0.0_r27android-12.0.0_r26android-12.0.0_r21android-12.0.0_r20android-12.0.0_r19android-12.0.0_r18android-12.0.0_r16android12L-devandroid12-qpr3-s7-releaseandroid12-qpr3-s6-releaseandroid12-qpr3-s5-releaseandroid12-qpr3-s4-releaseandroid12-qpr3-s3-releaseandroid12-qpr3-s2-releaseandroid12-qpr3-s1-releaseandroid12-qpr3-releaseandroid12-qpr1-releaseandroid12-qpr1-d-s3-releaseandroid12-qpr1-d-s2-releaseandroid12-qpr1-d-s1-releaseandroid12-qpr1-d-releaseandroid12-dev
Original change: https://android-review.googlesource.com/c/platform/packages/services/Mms/+/1115032
Change-Id: I12caaeb4656abd86fc20e03eab2b855d21b7536b
-rw-r--r-- | src/com/android/mms/service/MmsNetworkManager.java | 94 |
1 files changed, 86 insertions, 8 deletions
diff --git a/src/com/android/mms/service/MmsNetworkManager.java b/src/com/android/mms/service/MmsNetworkManager.java index 5e16c3f..af4d8a4 100644 --- a/src/com/android/mms/service/MmsNetworkManager.java +++ b/src/com/android/mms/service/MmsNetworkManager.java @@ -16,7 +16,10 @@ package com.android.mms.service; +import android.content.BroadcastReceiver; import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; import android.net.ConnectivityManager; import android.net.Network; import android.net.NetworkCapabilities; @@ -26,6 +29,10 @@ import android.net.TelephonyNetworkSpecifier; import android.os.Handler; import android.os.Looper; import android.provider.DeviceConfig; +import android.telephony.SubscriptionManager; +import android.telephony.TelephonyManager; + +import com.android.internal.telephony.PhoneConstants; import com.android.mms.service.exception.MmsNetworkException; @@ -77,6 +84,59 @@ public class MmsNetworkManager { // The SIM ID which we use to connect private final int mSubId; + // The current Phone ID for this MmsNetworkManager + private int mPhoneId; + + // If ACTION_SIM_CARD_STATE_CHANGED intent receiver is registered + private boolean mReceiverRegistered; + + /** + * This receiver listens to ACTION_SIM_CARD_STATE_CHANGED after starting a new NetworkRequest. + * If ACTION_SIM_CARD_STATE_CHANGED with SIM_STATE_ABSENT for a SIM card corresponding to the + * current NetworkRequest is received, it just releases the NetworkRequest without waiting for + * timeout. + */ + private final BroadcastReceiver mReceiver = + new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + final int simState = + intent.getIntExtra( + TelephonyManager.EXTRA_SIM_STATE, + TelephonyManager.SIM_STATE_UNKNOWN); + final int phoneId = + intent.getIntExtra( + PhoneConstants.PHONE_KEY, + SubscriptionManager.INVALID_PHONE_INDEX); + LogUtil.i("MmsNetworkManager: received ACTION_SIM_CARD_STATE_CHANGED" + + ", state=" + simStateString(simState) + ", phoneId=" + phoneId); + + if (mPhoneId == phoneId && simState == TelephonyManager.SIM_STATE_ABSENT) { + synchronized (MmsNetworkManager.this) { + releaseRequestLocked(mNetworkCallback); + MmsNetworkManager.this.notifyAll(); + } + } + } + }; + + private static String simStateString(int state) { + switch (state) { + case TelephonyManager.SIM_STATE_UNKNOWN: + return "UNKNOWN"; + case TelephonyManager.SIM_STATE_ABSENT: + return "ABSENT"; + case TelephonyManager.SIM_STATE_CARD_IO_ERROR: + return "CARD_IO_ERROR"; + case TelephonyManager.SIM_STATE_CARD_RESTRICTED: + return "CARD_RESTRICTED"; + case TelephonyManager.SIM_STATE_PRESENT: + return "PRESENT"; + default: + return "INVALID"; + } + } + /** * Network callback for our network request */ @@ -160,26 +220,44 @@ public class MmsNetworkManager { } // Not available, so start a new request if not done yet if (mNetworkCallback == null) { + mPhoneId = SubscriptionManager.getPhoneId(mSubId); + if (mPhoneId == SubscriptionManager.INVALID_PHONE_INDEX + || mPhoneId == SubscriptionManager.DEFAULT_PHONE_INDEX) { + throw new MmsNetworkException("Invalid Phone Id: " + mPhoneId); + } + LogUtil.d(requestId, "MmsNetworkManager: start new network request"); startNewNetworkRequestLocked(networkRequestTimeoutMillis); + + // Register a receiver to listen to ACTION_SIM_CARD_STATE_CHANGED + mContext.registerReceiver( + mReceiver, + new IntentFilter(TelephonyManager.ACTION_SIM_CARD_STATE_CHANGED)); + mReceiverRegistered = true; } try { this.wait(networkRequestTimeoutMillis + ADDITIONAL_NETWORK_ACQUIRE_TIMEOUT_MILLIS); } catch (InterruptedException e) { LogUtil.w(requestId, "MmsNetworkManager: acquire network wait interrupted"); } + + if (mReceiverRegistered) { + // Unregister the receiver. + mContext.unregisterReceiver(mReceiver); + mReceiverRegistered = false; + } + if (mNetwork != null) { // Success return; } - // Timed out - LogUtil.e(requestId, - "MmsNetworkManager: timed out with networkRequestTimeoutMillis=" - + networkRequestTimeoutMillis - + " and ADDITIONAL_NETWORK_ACQUIRE_TIMEOUT_MILLIS=" - + ADDITIONAL_NETWORK_ACQUIRE_TIMEOUT_MILLIS); - if (mNetworkCallback != null) { + if (mNetworkCallback != null) { // Timed out + LogUtil.e(requestId, + "MmsNetworkManager: timed out with networkRequestTimeoutMillis=" + + networkRequestTimeoutMillis + + " and ADDITIONAL_NETWORK_ACQUIRE_TIMEOUT_MILLIS=" + + ADDITIONAL_NETWORK_ACQUIRE_TIMEOUT_MILLIS); // Release the network request and wake up all the MmsRequests for fast-fail // together. // TODO: Start new network request for remaining MmsRequests? @@ -187,7 +265,7 @@ public class MmsNetworkManager { this.notifyAll(); } - throw new MmsNetworkException("Acquiring network timed out"); + throw new MmsNetworkException("Acquiring network failed"); } } |