Fix EmergencyCallHelper to always use the current phone object.

EmergencyCallHelper could use the wrong phone object when called
on an encrypted device while it's changing from GSM to CDMA mode.
Remove local mPhone field and call mCM.getDefaultPhone() to get
the current phone object before each call.

Bug: 11561165
Change-Id: Ie6a23d78050f2dffbf92761e3ca0ee283e4192e3
diff --git a/src/com/android/phone/EmergencyCallHelper.java b/src/com/android/phone/EmergencyCallHelper.java
index 866f2be..47f0e54 100644
--- a/src/com/android/phone/EmergencyCallHelper.java
+++ b/src/com/android/phone/EmergencyCallHelper.java
@@ -20,7 +20,6 @@
 import com.android.internal.telephony.Connection;
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.PhoneConstants;
-import com.android.phone.Constants.CallStatusCode;
 
 import android.content.Context;
 import android.content.Intent;
@@ -67,7 +66,6 @@
     private CallController mCallController;
     private PhoneGlobals mApp;
     private CallManager mCM;
-    private Phone mPhone;
     private String mNumber;  // The emergency number we're trying to dial
     private int mNumRetriesSoFar;
 
@@ -136,7 +134,7 @@
     /**
      * Actual implementation of startEmergencyCallFromAirplaneModeSequence(),
      * guaranteed to run on the handler thread.
-     * @see startEmergencyCallFromAirplaneModeSequence()
+     * @see #startEmergencyCallFromAirplaneModeSequence
      */
     private void startSequenceInternal(Message msg) {
         if (DBG) log("startSequenceInternal(): msg = " + msg);
@@ -153,9 +151,6 @@
 
         mNumRetriesSoFar = 0;
 
-        // Reset mPhone to whatever the current default phone is right now.
-        mPhone = mApp.mCM.getDefaultPhone();
-
         // Wake lock to make sure the processor doesn't go to sleep midway
         // through the emergency call sequence.
         PowerManager pm = (PowerManager) mApp.getSystemService(Context.POWER_SERVICE);
@@ -269,7 +264,7 @@
      */
     private void onRetryTimeout() {
         PhoneConstants.State phoneState = mCM.getState();
-        int serviceState = mPhone.getServiceState().getState();
+        int serviceState = mCM.getDefaultPhone().getServiceState().getState();
         if (DBG) log("onRetryTimeout():  phone state " + phoneState
                      + ", service state " + serviceState
                      + ", mNumRetriesSoFar = " + mNumRetriesSoFar);
@@ -346,7 +341,7 @@
             // in airplane mode.)  In this case just turn the radio
             // back on.
             if (DBG) log("==> (Apparently) not in airplane mode; manually powering radio on...");
-            mPhone.setRadioPower(true);
+            mCM.getDefaultPhone().setRadioPower(true);
         }
     }
 
@@ -370,7 +365,7 @@
 
         if (DBG) log("- placing call to '" + mNumber + "'...");
         int callStatus = PhoneUtils.placeCall(mApp,
-                                              mPhone,
+                                              mCM.getDefaultPhone(),
                                               mNumber,
                                               null,  // contactUri
                                               true); // isEmergencyCall
@@ -479,14 +474,16 @@
         // Unregister first, just to make sure we never register ourselves
         // twice.  (We need this because Phone.registerForServiceStateChanged()
         // does not prevent multiple registration of the same handler.)
-        mPhone.unregisterForServiceStateChanged(this);  // Safe even if not currently registered
-        mPhone.registerForServiceStateChanged(this, SERVICE_STATE_CHANGED, null);
+        Phone phone = mCM.getDefaultPhone();
+        phone.unregisterForServiceStateChanged(this);  // Safe even if not currently registered
+        phone.registerForServiceStateChanged(this, SERVICE_STATE_CHANGED, null);
     }
 
     private void unregisterForServiceStateChanged() {
         // This method is safe to call even if we haven't set mPhone yet.
-        if (mPhone != null) {
-            mPhone.unregisterForServiceStateChanged(this);  // Safe even if unnecessary
+        Phone phone = mCM.getDefaultPhone();
+        if (phone != null) {
+            phone.unregisterForServiceStateChanged(this);  // Safe even if unnecessary
         }
         removeMessages(SERVICE_STATE_CHANGED);  // Clean up any pending messages too
     }