Merge "Change to not dump PII in IsimUiccRecords." into mnc-dev
diff --git a/src/java/com/android/internal/telephony/PhoneBase.java b/src/java/com/android/internal/telephony/PhoneBase.java
index 570f863..4037392 100644
--- a/src/java/com/android/internal/telephony/PhoneBase.java
+++ b/src/java/com/android/internal/telephony/PhoneBase.java
@@ -1314,6 +1314,7 @@
      * @return the original list with CDMA lat/long cleared if necessary
      */
     private List<CellInfo> privatizeCellInfoList(List<CellInfo> cellInfoList) {
+        if (cellInfoList == null) return null;
         int mode = Settings.Secure.getInt(getContext().getContentResolver(),
                 Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_OFF);
         if (mode == Settings.Secure.LOCATION_MODE_OFF) {
diff --git a/src/java/com/android/internal/telephony/dataconnection/DcController.java b/src/java/com/android/internal/telephony/dataconnection/DcController.java
index 39c25ff..98d1c3b 100644
--- a/src/java/com/android/internal/telephony/dataconnection/DcController.java
+++ b/src/java/com/android/internal/telephony/dataconnection/DcController.java
@@ -379,28 +379,28 @@
                 }
             }
 
-            // Temporary notification until RIL implementation is complete.
-            if (mOverallDataConnectionActiveState != newOverallDataConnectionActiveState) {
-                mOverallDataConnectionActiveState = newOverallDataConnectionActiveState;
-                long time = SystemClock.elapsedRealtimeNanos();
-                int dcPowerState;
-                switch (mOverallDataConnectionActiveState) {
-                    case DATA_CONNECTION_ACTIVE_PH_LINK_INACTIVE:
-                    case DATA_CONNECTION_ACTIVE_PH_LINK_DORMANT:
-                        dcPowerState = DataConnectionRealTimeInfo.DC_POWER_STATE_LOW;
-                        break;
-                    case DATA_CONNECTION_ACTIVE_PH_LINK_UP:
-                        dcPowerState = DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH;
-                        break;
-                    default:
-                        dcPowerState = DataConnectionRealTimeInfo.DC_POWER_STATE_UNKNOWN;
-                        break;
-                }
-                DataConnectionRealTimeInfo dcRtInfo =
-                        new DataConnectionRealTimeInfo(time , dcPowerState);
-                log("onDataStateChanged: notify DcRtInfo changed dcRtInfo=" + dcRtInfo);
-                mPhone.notifyDataConnectionRealTimeInfo(dcRtInfo);
-            }
+            // TODO: b/23319188 Enable/Disable this based on enable/disable of dormancy indications 
+            //if (mOverallDataConnectionActiveState != newOverallDataConnectionActiveState) {
+            //    mOverallDataConnectionActiveState = newOverallDataConnectionActiveState;
+            //    long time = SystemClock.elapsedRealtimeNanos();
+            //    int dcPowerState;
+            //    switch (mOverallDataConnectionActiveState) {
+            //        case DATA_CONNECTION_ACTIVE_PH_LINK_INACTIVE:
+            //        case DATA_CONNECTION_ACTIVE_PH_LINK_DORMANT:
+            //            dcPowerState = DataConnectionRealTimeInfo.DC_POWER_STATE_LOW;
+            //            break;
+            //        case DATA_CONNECTION_ACTIVE_PH_LINK_UP:
+            //            dcPowerState = DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH;
+            //            break;
+            //        default:
+            //            dcPowerState = DataConnectionRealTimeInfo.DC_POWER_STATE_UNKNOWN;
+            //            break;
+            //    }
+            //    DataConnectionRealTimeInfo dcRtInfo =
+            //            new DataConnectionRealTimeInfo(time , dcPowerState);
+            //    log("onDataStateChanged: notify DcRtInfo changed dcRtInfo=" + dcRtInfo);
+            //    mPhone.notifyDataConnectionRealTimeInfo(dcRtInfo); 
+            //}
 
             if (DBG) {
                 lr("onDataStateChanged: dcsToRetry=" + dcsToRetry
diff --git a/src/java/com/android/internal/telephony/dataconnection/DcSwitchStateMachine.java b/src/java/com/android/internal/telephony/dataconnection/DcSwitchStateMachine.java
index c11cd5b..68d3f50 100644
--- a/src/java/com/android/internal/telephony/dataconnection/DcSwitchStateMachine.java
+++ b/src/java/com/android/internal/telephony/dataconnection/DcSwitchStateMachine.java
@@ -193,6 +193,13 @@
             final PhoneBase pb = (PhoneBase)((PhoneProxy)mPhone).getActivePhone();
             pb.mCi.setDataAllowed(true, obtainMessage(EVENT_DATA_ALLOWED,
                     ++mCurrentAllowedSequence, 0));
+            // if we're on a carrier that unattaches us if we're idle for too long
+            // (on wifi) and they won't re-attach until we poke them.  Poke them!
+            // essentially react as Attached does here in Attaching.
+            if (pb.mDcTracker.getAutoAttachOnCreation()) {
+                if (DBG) log("AttachingState executeAll due to autoAttach");
+                DctController.getInstance().executeAllRequests(mId);
+            }
         }
 
         @Override
@@ -205,11 +212,16 @@
                     apnRequest.log("DcSwitchStateMachine.AttachingState: REQ_CONNECT");
                     if (DBG) log("AttachingState: REQ_CONNECT, apnRequest=" + apnRequest);
 
-                    // do nothing - wait til we attach and then we'll execute all requests
+                    final PhoneBase pb = (PhoneBase)((PhoneProxy)mPhone).getActivePhone();
+                    if (pb.mDcTracker.getAutoAttachOnCreation() == false) {
+                        // do nothing - wait til we attach and then we'll execute all requests
+                    } else {
+                        apnRequest.log("DcSwitchStateMachine processing due to autoAttach");
+                        DctController.getInstance().executeRequest(apnRequest);
+                    }
                     retVal = HANDLED;
                     break;
                 }
-
                 case EVENT_DATA_ALLOWED: {
                     AsyncResult ar = (AsyncResult)msg.obj;
                     if (mCurrentAllowedSequence != msg.arg1) {
@@ -253,6 +265,14 @@
                     if (DBG) {
                         log("AttachingState: REQ_DISCONNECT_ALL" );
                     }
+                    final PhoneBase pb = (PhoneBase)((PhoneProxy)mPhone).getActivePhone();
+                    if (pb.mDcTracker.getAutoAttachOnCreation()) {
+                        // if AutoAttachOnCreation, then we may have executed requests
+                        // without ever actually getting to Attached, so release the request
+                        // here in that case.
+                        if (DBG) log("releasingAll due to autoAttach");
+                        DctController.getInstance().releaseAllRequests(mId);
+                    }
 
                     // modem gets unhappy if we try to detach while attaching
                     // wait til attach finishes.
diff --git a/src/java/com/android/internal/telephony/dataconnection/DcTracker.java b/src/java/com/android/internal/telephony/dataconnection/DcTracker.java
index 8d02de9..0a453b0 100644
--- a/src/java/com/android/internal/telephony/dataconnection/DcTracker.java
+++ b/src/java/com/android/internal/telephony/dataconnection/DcTracker.java
@@ -695,7 +695,7 @@
             notifyOffApnsOfAvailability(Phone.REASON_DATA_ATTACHED);
         }
         if (mAutoAttachOnCreationConfig) {
-            mAutoAttachOnCreation = true;
+            mAutoAttachOnCreation.set(true);
         }
         setupDataOnConnectableApns(Phone.REASON_DATA_ATTACHED);
     }
@@ -742,7 +742,7 @@
             state = mPhone.getCallTracker().getState();
         }
         boolean allowed =
-                    (attachedState || mAutoAttachOnCreation) &&
+                    (attachedState || mAutoAttachOnCreation.get()) &&
                     recordsLoaded &&
                     (state == PhoneConstants.State.IDLE ||
                      mPhone.getServiceStateTracker().isConcurrentVoiceAndDataAllowed()) &&
@@ -754,7 +754,7 @@
                     desiredPowerState;
         if (!allowed && DBG) {
             String reason = "";
-            if (!(attachedState || mAutoAttachOnCreation)) {
+            if (!(attachedState || mAutoAttachOnCreation.get())) {
                 reason += " - Attached= " + attachedState;
             }
             if (!recordsLoaded) reason += " - SIM not loaded";
@@ -1313,8 +1313,8 @@
         Message msg = obtainMessage();
         msg.what = DctConstants.EVENT_DATA_SETUP_COMPLETE;
         msg.obj = apnContext;
-        dcac.bringUp(apnContext, getInitialMaxRetry(), profileId, radioTech, mAutoAttachOnCreation,
-                msg);
+        dcac.bringUp(apnContext, getInitialMaxRetry(), profileId, radioTech,
+                mAutoAttachOnCreation.get(), msg);
 
         if (DBG) log("setupData: initing!");
         return true;
diff --git a/src/java/com/android/internal/telephony/dataconnection/DcTrackerBase.java b/src/java/com/android/internal/telephony/dataconnection/DcTrackerBase.java
index 8d1323a..5c0226e 100644
--- a/src/java/com/android/internal/telephony/dataconnection/DcTrackerBase.java
+++ b/src/java/com/android/internal/telephony/dataconnection/DcTrackerBase.java
@@ -71,6 +71,7 @@
 import java.util.Map.Entry;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.PriorityQueue;
@@ -235,7 +236,7 @@
 
     // When false we will not auto attach and manually attaching is required.
     protected boolean mAutoAttachOnCreationConfig = false;
-    protected boolean mAutoAttachOnCreation = false;
+    protected AtomicBoolean mAutoAttachOnCreation = new AtomicBoolean(false);
 
     // State of screen
     // (TODO: Reconsider tying directly to screen, maybe this is
@@ -617,7 +618,7 @@
         }
 
         SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(mPhone.getContext());
-        mAutoAttachOnCreation = sp.getBoolean(PhoneBase.DATA_DISABLED_ON_BOOT_KEY, false);
+        mAutoAttachOnCreation.set(sp.getBoolean(PhoneBase.DATA_DISABLED_ON_BOOT_KEY, false));
 
         mSubscriptionManager = SubscriptionManager.from(mPhone.getContext());
         mSubscriptionManager
@@ -1914,6 +1915,10 @@
         sendMessage(msg);
     }
 
+    public boolean getAutoAttachOnCreation() {
+        return mAutoAttachOnCreation.get();
+    }
+
     public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
         pw.println("DcTrackerBase:");
         pw.println(" RADIO_TESTS=" + RADIO_TESTS);
@@ -1943,7 +1948,7 @@
         pw.println(" mIsWifiConnected=" + mIsWifiConnected);
         pw.println(" mReconnectIntent=" + mReconnectIntent);
         pw.println(" mCidActive=" + mCidActive);
-        pw.println(" mAutoAttachOnCreation=" + mAutoAttachOnCreation);
+        pw.println(" mAutoAttachOnCreation=" + mAutoAttachOnCreation.get());
         pw.println(" mIsScreenOn=" + mIsScreenOn);
         pw.println(" mUniqueIdGenerator=" + mUniqueIdGenerator);
         pw.flush();
diff --git a/src/java/com/android/internal/telephony/uicc/IccRecords.java b/src/java/com/android/internal/telephony/uicc/IccRecords.java
index 4049d4b..d91c4e7 100644
--- a/src/java/com/android/internal/telephony/uicc/IccRecords.java
+++ b/src/java/com/android/internal/telephony/uicc/IccRecords.java
@@ -25,6 +25,8 @@
 
 import android.telephony.Rlog;
 import android.telephony.TelephonyManager;
+import android.text.TextUtils;
+
 import com.android.internal.telephony.CommandsInterface;
 import com.android.internal.telephony.uicc.IccCardApplicationStatus.AppState;
 
@@ -713,7 +715,11 @@
         pw.println(" mRecordsToLoad=" + mRecordsToLoad);
         pw.println(" mRdnCache=" + mAdnCache);
         pw.println(" iccid=" + mIccId);
-        pw.println(" mMsisdn=" + mMsisdn);
+        if (TextUtils.isEmpty(mMsisdn)) {
+            pw.println(" mMsisdn=null");
+        } else {
+            pw.println(" mMsisdn=" + (VDBG ? mMsisdn : "XXX"));
+        }
         pw.println(" mMsisdnTag=" + mMsisdnTag);
         pw.println(" mVoiceMailNum=" + mVoiceMailNum);
         pw.println(" mVoiceMailTag=" + mVoiceMailTag);