Don't process NetworkRequests when there are none.

getTopPriorityRequestPhoneId was making up DEFAULT Id when
there were no requests.  This bogus data was confusing onProcessRequest
and causing it to think we were working with the wrong phone, triggering
a PS detatch.

bug:21988698
Change-Id: Idf9928ac75327509f81c47ecea48d75fbabc89b2
diff --git a/src/java/com/android/internal/telephony/dataconnection/DctController.java b/src/java/com/android/internal/telephony/dataconnection/DctController.java
index ce7bae9..ea8dfb1 100644
--- a/src/java/com/android/internal/telephony/dataconnection/DctController.java
+++ b/src/java/com/android/internal/telephony/dataconnection/DctController.java
@@ -16,6 +16,9 @@
 
 package com.android.internal.telephony.dataconnection;
 
+import static android.telephony.SubscriptionManager.DEFAULT_PHONE_INDEX;
+import static android.telephony.SubscriptionManager.INVALID_PHONE_INDEX;
+
 import android.content.Context;
 import android.database.ContentObserver;
 import android.net.ConnectivityManager;
@@ -350,8 +353,8 @@
         //2-2. If no, set data not allow on the current PS subscription
         //2-2-1. Set data allow on the selected subscription
 
-        int phoneId = getTopPriorityRequestPhoneId();
-        int activePhoneId = -1;
+        int requestedPhoneId = getTopPriorityRequestPhoneId();
+        int activePhoneId = INVALID_PHONE_INDEX;
 
         for (int i=0; i<mDcSwitchStateMachine.length; i++) {
             if (!mDcSwitchAsyncChannel[i].isIdleSync()) {
@@ -360,18 +363,26 @@
             }
         }
 
-        logd("onProcessRequest phoneId=" + phoneId
+        logd("onProcessRequest requestedPhoneId=" + requestedPhoneId
                 + ", activePhoneId=" + activePhoneId);
 
-        if (activePhoneId == -1 || activePhoneId == phoneId) {
+        if (requestedPhoneId == INVALID_PHONE_INDEX) {
+            // we have no network request - don't bother with this
+            return;
+        }
+
+        // if we have no active phones or the active phone is the desired, make requests
+        if (activePhoneId == INVALID_PHONE_INDEX || activePhoneId == requestedPhoneId) {
             Iterator<Integer> iterator = mRequestInfos.keySet().iterator();
             while (iterator.hasNext()) {
                 RequestInfo requestInfo = mRequestInfos.get(iterator.next());
-                if (getRequestPhoneId(requestInfo.request) == phoneId && !requestInfo.executed) {
-                    mDcSwitchAsyncChannel[phoneId].connect(requestInfo);
+                if (getRequestPhoneId(requestInfo.request) == requestedPhoneId &&
+                        !requestInfo.executed) {
+                    mDcSwitchAsyncChannel[requestedPhoneId].connect(requestInfo);
                 }
             }
         } else {
+            // otherwise detatch so we can try connecting to the high-priority phone
             mDcSwitchAsyncChannel[activePhoneId].disconnectAll();
         }
     }
@@ -430,7 +441,7 @@
         final int topPriPhone = getTopPriorityRequestPhoneId();
         logd("onRetryAttach phoneId=" + phoneId + " topPri phone = " + topPriPhone);
 
-        if (phoneId != -1 && phoneId == topPriPhone) {
+        if (phoneId != INVALID_PHONE_INDEX && phoneId == topPriPhone) {
             mDcSwitchAsyncChannel[phoneId].retryConnect();
         }
     }
@@ -485,33 +496,21 @@
     }
 
     private int getTopPriorityRequestPhoneId() {
-        RequestInfo retRequestInfo = null;
-        int phoneId = 0;
+        int phoneId = INVALID_PHONE_INDEX;
         int priority = -1;
 
         //TODO: Handle SIM Switch
         for (int i=0; i<mPhoneNum; i++) {
-            Iterator<Integer> iterator = mRequestInfos.keySet().iterator();
-            while (iterator.hasNext()) {
-                RequestInfo requestInfo = mRequestInfos.get(iterator.next());
+            for (RequestInfo requestInfo : mRequestInfos.values()) {
                 logd("selectExecPhone requestInfo = " + requestInfo);
                 if (getRequestPhoneId(requestInfo.request) == i &&
                         priority < requestInfo.priority) {
                     priority = requestInfo.priority;
-                    retRequestInfo = requestInfo;
+                    phoneId = i;
                 }
             }
         }
 
-        if (retRequestInfo != null) {
-            phoneId = getRequestPhoneId(retRequestInfo.request);
-        } else {
-            int defaultDds = mSubController.getDefaultDataSubId();
-            phoneId = mSubController.getPhoneId(defaultDds);
-            logd("getTopPriorityRequestPhoneId: RequestInfo list is empty, " +
-                    "use Dds sub phone id");
-        }
-
         logd("getTopPriorityRequestPhoneId = " + phoneId
                 + ", priority = " + priority);
 
@@ -617,12 +616,6 @@
             subId = Integer.parseInt(specifier);
         }
         int phoneId = mSubController.getPhoneId(subId);
-        if (!SubscriptionManager.isValidPhoneId(phoneId)) {
-            phoneId = 0;
-            if (!SubscriptionManager.isValidPhoneId(phoneId)) {
-                throw new RuntimeException("Should not happen, no valid phoneId");
-            }
-        }
         return phoneId;
     }