Merge branch 'LA.BF64.1.2.2_rb4.6' of git://codeaurora.org/platform/packages/services/Telecomm into cm-13.0
diff --git a/src/com/android/server/telecom/Call.java b/src/com/android/server/telecom/Call.java
index b86d658..7be5847 100644
--- a/src/com/android/server/telecom/Call.java
+++ b/src/com/android/server/telecom/Call.java
@@ -735,7 +735,6 @@
 
     void setTargetPhoneAccount(PhoneAccountHandle accountHandle) {
         if (!Objects.equals(mTargetPhoneAccountHandle, accountHandle)) {
-            Log.i(this, "setTargetPhoneAccount  %s ", accountHandle);
             mTargetPhoneAccountHandle = accountHandle;
             for (Listener l : mListeners) {
                 l.onTargetPhoneAccountChanged(this);
diff --git a/src/com/android/server/telecom/CallIntentProcessor.java b/src/com/android/server/telecom/CallIntentProcessor.java
index 7d7de17..3faa4d6 100644
--- a/src/com/android/server/telecom/CallIntentProcessor.java
+++ b/src/com/android/server/telecom/CallIntentProcessor.java
@@ -117,10 +117,17 @@
                 VideoProfile.STATE_AUDIO_ONLY);
         clientExtras.putInt(TelecomManager.EXTRA_START_CALL_WITH_VIDEO_STATE, videoState);
 
+        boolean isCallPull = intent.getBooleanExtra(TelephonyProperties.EXTRA_IS_CALL_PULL, false);
+        Log.d(CallIntentProcessor.class, "processOutgoingCallIntent callPull = " + isCallPull);
+        if (isCallPull) {
+            clientExtras.putBoolean(TelephonyProperties.EXTRA_IS_CALL_PULL, isCallPull);
+        }
+
         Log.i(CallIntentProcessor.class, " processOutgoingCallIntent handle = " + handle
                 + ",scheme = " + scheme + ", uriString = " + uriString
                 + ", isSkipSchemaParsing = " + isSkipSchemaParsing
-                + ", isAddParticipant = " + isAddParticipant);
+                + ", isAddParticipant = " + isAddParticipant
+                + ", isCallPull = " + isCallPull);
 
         final boolean isPrivilegedDialer = intent.getBooleanExtra(KEY_IS_PRIVILEGED_DIALER, false);
 
diff --git a/src/com/android/server/telecom/CallsManager.java b/src/com/android/server/telecom/CallsManager.java
index f1fcea8..82a20b6 100644
--- a/src/com/android/server/telecom/CallsManager.java
+++ b/src/com/android/server/telecom/CallsManager.java
@@ -1595,7 +1595,8 @@
                     break;
                 }
 
-                if (call.isAlive() || call.getState() == CallState.RINGING) {
+                if ((call.isAlive() && call.getState() != CallState.ON_HOLD)
+                     || call.getState() == CallState.RINGING) {
                     newForegroundCall = call;
                     // Don't break in case there's an active call that has priority.
                 }
@@ -1622,7 +1623,8 @@
                     break;
                 }
 
-                if (call.isAlive() || call.getState() == CallState.RINGING) {
+                if ((call.isAlive() && call.getState() != CallState.ON_HOLD)
+                     || call.getState() == CallState.RINGING) {
                     newForegroundCall = call;
                     // Don't break in case there's an active call that has priority.
                 }
diff --git a/src/com/android/server/telecom/ConnectionServiceWrapper.java b/src/com/android/server/telecom/ConnectionServiceWrapper.java
index f8e9f19..ff47c66 100644
--- a/src/com/android/server/telecom/ConnectionServiceWrapper.java
+++ b/src/com/android/server/telecom/ConnectionServiceWrapper.java
@@ -521,7 +521,14 @@
                     if (mCallIdMapper.isValidCallId(callId)
                             || mCallIdMapper.isValidConferenceId(callId)) {
                         Call call = mCallIdMapper.getCall(callId);
-                        if (call != null) {
+                        if (call != null && extras != null) {
+                            if (extras.getParcelable(EMR_DIAL_ACCOUNT) instanceof
+                                    PhoneAccountHandle) {
+                                PhoneAccountHandle account = extras.
+                                        getParcelable(EMR_DIAL_ACCOUNT);
+                                Log.d(this, "setTargetPhoneAccount, account = " + account);
+                                call.setTargetPhoneAccount(account);
+                            }
                             call.setExtras(extras);
                         }
                     }
@@ -613,26 +620,6 @@
                 Binder.restoreCallingIdentity(token);
             }
         }
-
-        @Override
-        public void setPhoneAccountHandle(String callId, PhoneAccountHandle pHandle) {
-            long token = Binder.clearCallingIdentity();
-            try {
-                synchronized (mLock) {
-                    logIncoming("setPhoneAccountHandle %s %s", callId, pHandle);
-                    if (mCallIdMapper.isValidCallId(callId)) {
-                        Call call = mCallIdMapper.getCall(callId);
-                        if (call != null) {
-                            call.setTargetPhoneAccount(pHandle);
-                        } else {
-                            Log.w(this, "setPhoneAccountHandle, unknown call id: %s", callId);
-                        }
-                    }
-                }
-            } finally {
-                Binder.restoreCallingIdentity(token);
-            }
-        }
     }
 
     private final Adapter mAdapter = new Adapter();
@@ -644,6 +631,7 @@
     private final ConnectionServiceRepository mConnectionServiceRepository;
     private final PhoneAccountRegistrar mPhoneAccountRegistrar;
     private final CallsManager mCallsManager;
+    private static final String EMR_DIAL_ACCOUNT = "emr_dial_account";
 
     /**
      * Creates a connection service.