Update SubscriptionManager API by replacing 'id' & 'idx' with 'index'.
am: ecfdf63e6f
Change-Id: Ifa2d16b078a183f36f8d95217d16e4e9bb3bbdaf
diff --git a/src/com/android/mms/service/MmsNetworkManager.java b/src/com/android/mms/service/MmsNetworkManager.java
index c2e2f6a..a37d31c 100644
--- a/src/com/android/mms/service/MmsNetworkManager.java
+++ b/src/com/android/mms/service/MmsNetworkManager.java
@@ -22,6 +22,8 @@
import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
import android.net.NetworkRequest;
+import android.os.Handler;
+import android.os.Looper;
import android.os.SystemClock;
import com.android.mms.service.exception.MmsNetworkException;
@@ -37,6 +39,9 @@
// to make sure we don't bail prematurely
private static final int NETWORK_ACQUIRE_TIMEOUT_MILLIS =
NETWORK_REQUEST_TIMEOUT_MILLIS + (5 * 1000);
+ // Waiting time used before releasing a network prematurely. This allows the MMS download
+ // acknowledgement messages to be sent using the same network that was used to download the data
+ private static final int NETWORK_RELEASE_TIMEOUT_MILLIS = 5 * 1000;
private final Context mContext;
@@ -57,6 +62,12 @@
// The MMS HTTP client for this network
private MmsHttpClient mMmsHttpClient;
+ // The handler used for delayed release of the network
+ private final Handler mReleaseHandler;
+
+ // The task that does the delayed releasing of the network.
+ private final Runnable mNetworkReleaseTask;
+
// The SIM ID which we use to connect
private final int mSubId;
@@ -103,11 +114,23 @@
mConnectivityManager = null;
mMmsHttpClient = null;
mSubId = subId;
+ mReleaseHandler = new Handler(Looper.getMainLooper());
mNetworkRequest = new NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
.addCapability(NetworkCapabilities.NET_CAPABILITY_MMS)
.setNetworkSpecifier(Integer.toString(mSubId))
.build();
+
+ mNetworkReleaseTask = new Runnable() {
+ @Override
+ public void run() {
+ synchronized (this) {
+ if (mMmsRequestCount < 1) {
+ releaseRequestLocked(mNetworkCallback);
+ }
+ }
+ }
+ };
}
/**
@@ -118,6 +141,8 @@
*/
public void acquireNetwork(final String requestId) throws MmsNetworkException {
synchronized (this) {
+ // Since we are acquiring the network, remove the network release task if exists.
+ mReleaseHandler.removeCallbacks(mNetworkReleaseTask);
mMmsRequestCount += 1;
if (mNetwork != null) {
// Already available
@@ -155,14 +180,25 @@
* Release the MMS network when nobody is holding on to it.
*
* @param requestId request ID for logging
+ * @param shouldDelayRelease whether the release should be delayed for 5 seconds, the regular
+ * use case is to delay this for DownloadRequests to use the network
+ * for sending an acknowledgement on the same network
*/
- public void releaseNetwork(final String requestId) {
+ public void releaseNetwork(final String requestId, final boolean shouldDelayRelease) {
synchronized (this) {
if (mMmsRequestCount > 0) {
mMmsRequestCount -= 1;
LogUtil.d(requestId, "MmsNetworkManager: release, count=" + mMmsRequestCount);
if (mMmsRequestCount < 1) {
- releaseRequestLocked(mNetworkCallback);
+ if (shouldDelayRelease) {
+ // remove previously posted task and post a delayed task on the release
+ // handler to release the network
+ mReleaseHandler.removeCallbacks(mNetworkReleaseTask);
+ mReleaseHandler.postDelayed(mNetworkReleaseTask,
+ NETWORK_RELEASE_TIMEOUT_MILLIS);
+ } else {
+ releaseRequestLocked(mNetworkCallback);
+ }
}
}
}
diff --git a/src/com/android/mms/service/MmsRequest.java b/src/com/android/mms/service/MmsRequest.java
index 4eeac08..ec8b334 100644
--- a/src/com/android/mms/service/MmsRequest.java
+++ b/src/com/android/mms/service/MmsRequest.java
@@ -173,7 +173,7 @@
// Success
break;
} finally {
- networkManager.releaseNetwork(requestId);
+ networkManager.releaseNetwork(requestId, this instanceof DownloadRequest);
}
} catch (ApnException e) {
LogUtil.e(requestId, "APN failure", e);