Loading core/java/android/provider/Settings.java +10 −0 Original line number Diff line number Diff line Loading @@ -4348,6 +4348,16 @@ public final class Settings { public static final String WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS = Global.WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS; /** * The number of milliseconds to hold on to a PendingIntent based request. This delay gives * the receivers of the PendingIntent an opportunity to make a new network request before * the Network satisfying the request is potentially removed. * * @hide */ public static final String CONNECTIVITY_RELEASE_PENDING_INTENT_DELAY_MS = "connectivity_release_pending_intent_delay_ms"; /** * Whether background data usage is allowed. * Loading services/core/java/com/android/server/ConnectivityService.java +19 −2 Original line number Diff line number Diff line Loading @@ -216,6 +216,10 @@ public class ConnectivityService extends IConnectivityManager.Stub private static final int SAMPLE_INTERVAL_ELAPSED_REQUEST_CODE = 0; // How long to delay to removal of a pending intent based request. // See Settings.Secure.CONNECTIVITY_RELEASE_PENDING_INTENT_DELAY_MS private final int mReleasePendingIntentDelayMs; private PendingIntent mSampleIntervalElapsedIntent; // Set network sampling interval at 12 minutes, this way, even if the timers get Loading Loading @@ -666,6 +670,9 @@ public class ConnectivityService extends IConnectivityManager.Stub loge("Error setting defaultDns using " + dns); } mReleasePendingIntentDelayMs = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.CONNECTIVITY_RELEASE_PENDING_INTENT_DELAY_MS, 5_000); mContext = checkNotNull(context, "missing Context"); mNetd = checkNotNull(netManager, "missing INetworkManagementService"); mPolicyManager = checkNotNull(policyManager, "missing INetworkPolicyManager"); Loading Loading @@ -3441,6 +3448,7 @@ public class ConnectivityService extends IConnectivityManager.Stub final NetworkRequest request; final PendingIntent mPendingIntent; boolean mPendingIntentSent; private final IBinder mBinder; final int mPid; final int mUid; Loading Loading @@ -3562,6 +3570,12 @@ public class ConnectivityService extends IConnectivityManager.Stub return networkRequest; } private void releasePendingNetworkRequestWithDelay(PendingIntent operation) { mHandler.sendMessageDelayed( mHandler.obtainMessage(EVENT_RELEASE_NETWORK_REQUEST_WITH_INTENT, getCallingUid(), 0, operation), mReleasePendingIntentDelayMs); } @Override public void releasePendingNetworkRequest(PendingIntent operation) { mHandler.sendMessage(mHandler.obtainMessage(EVENT_RELEASE_NETWORK_REQUEST_WITH_INTENT, Loading Loading @@ -3875,10 +3889,11 @@ public class ConnectivityService extends IConnectivityManager.Stub private void sendPendingIntentForRequest(NetworkRequestInfo nri, NetworkAgentInfo networkAgent, int notificationType) { if (notificationType == ConnectivityManager.CALLBACK_AVAILABLE) { if (notificationType == ConnectivityManager.CALLBACK_AVAILABLE && !nri.mPendingIntentSent) { Intent intent = new Intent(); intent.putExtra(ConnectivityManager.EXTRA_NETWORK, networkAgent.network); intent.putExtra(ConnectivityManager.EXTRA_NETWORK_REQUEST, nri.request); nri.mPendingIntentSent = true; sendIntent(nri.mPendingIntent, intent); } // else not handled Loading @@ -3902,7 +3917,9 @@ public class ConnectivityService extends IConnectivityManager.Stub String resultData, Bundle resultExtras) { if (DBG) log("Finished sending " + pendingIntent); mPendingIntentWakeLock.release(); releasePendingNetworkRequest(pendingIntent); // Release with a delay so the receiving client has an opportunity to put in its // own request. releasePendingNetworkRequestWithDelay(pendingIntent); } private void callCallbackForRequest(NetworkRequestInfo nri, Loading Loading
core/java/android/provider/Settings.java +10 −0 Original line number Diff line number Diff line Loading @@ -4348,6 +4348,16 @@ public final class Settings { public static final String WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS = Global.WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS; /** * The number of milliseconds to hold on to a PendingIntent based request. This delay gives * the receivers of the PendingIntent an opportunity to make a new network request before * the Network satisfying the request is potentially removed. * * @hide */ public static final String CONNECTIVITY_RELEASE_PENDING_INTENT_DELAY_MS = "connectivity_release_pending_intent_delay_ms"; /** * Whether background data usage is allowed. * Loading
services/core/java/com/android/server/ConnectivityService.java +19 −2 Original line number Diff line number Diff line Loading @@ -216,6 +216,10 @@ public class ConnectivityService extends IConnectivityManager.Stub private static final int SAMPLE_INTERVAL_ELAPSED_REQUEST_CODE = 0; // How long to delay to removal of a pending intent based request. // See Settings.Secure.CONNECTIVITY_RELEASE_PENDING_INTENT_DELAY_MS private final int mReleasePendingIntentDelayMs; private PendingIntent mSampleIntervalElapsedIntent; // Set network sampling interval at 12 minutes, this way, even if the timers get Loading Loading @@ -666,6 +670,9 @@ public class ConnectivityService extends IConnectivityManager.Stub loge("Error setting defaultDns using " + dns); } mReleasePendingIntentDelayMs = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.CONNECTIVITY_RELEASE_PENDING_INTENT_DELAY_MS, 5_000); mContext = checkNotNull(context, "missing Context"); mNetd = checkNotNull(netManager, "missing INetworkManagementService"); mPolicyManager = checkNotNull(policyManager, "missing INetworkPolicyManager"); Loading Loading @@ -3441,6 +3448,7 @@ public class ConnectivityService extends IConnectivityManager.Stub final NetworkRequest request; final PendingIntent mPendingIntent; boolean mPendingIntentSent; private final IBinder mBinder; final int mPid; final int mUid; Loading Loading @@ -3562,6 +3570,12 @@ public class ConnectivityService extends IConnectivityManager.Stub return networkRequest; } private void releasePendingNetworkRequestWithDelay(PendingIntent operation) { mHandler.sendMessageDelayed( mHandler.obtainMessage(EVENT_RELEASE_NETWORK_REQUEST_WITH_INTENT, getCallingUid(), 0, operation), mReleasePendingIntentDelayMs); } @Override public void releasePendingNetworkRequest(PendingIntent operation) { mHandler.sendMessage(mHandler.obtainMessage(EVENT_RELEASE_NETWORK_REQUEST_WITH_INTENT, Loading Loading @@ -3875,10 +3889,11 @@ public class ConnectivityService extends IConnectivityManager.Stub private void sendPendingIntentForRequest(NetworkRequestInfo nri, NetworkAgentInfo networkAgent, int notificationType) { if (notificationType == ConnectivityManager.CALLBACK_AVAILABLE) { if (notificationType == ConnectivityManager.CALLBACK_AVAILABLE && !nri.mPendingIntentSent) { Intent intent = new Intent(); intent.putExtra(ConnectivityManager.EXTRA_NETWORK, networkAgent.network); intent.putExtra(ConnectivityManager.EXTRA_NETWORK_REQUEST, nri.request); nri.mPendingIntentSent = true; sendIntent(nri.mPendingIntent, intent); } // else not handled Loading @@ -3902,7 +3917,9 @@ public class ConnectivityService extends IConnectivityManager.Stub String resultData, Bundle resultExtras) { if (DBG) log("Finished sending " + pendingIntent); mPendingIntentWakeLock.release(); releasePendingNetworkRequest(pendingIntent); // Release with a delay so the receiving client has an opportunity to put in its // own request. releasePendingNetworkRequestWithDelay(pendingIntent); } private void callCallbackForRequest(NetworkRequestInfo nri, Loading