diff options
9 files changed, 102 insertions, 1 deletions
diff --git a/telecomm/java/android/telecom/Connection.java b/telecomm/java/android/telecom/Connection.java index 9c2cfd5..27c92bf 100644 --- a/telecomm/java/android/telecom/Connection.java +++ b/telecomm/java/android/telecom/Connection.java @@ -455,6 +455,7 @@ public abstract class Connection extends Conferenceable { public void onConferenceStarted() {} public void onConferenceMergeFailed(Connection c) {} public void onExtrasChanged(Connection c, Bundle extras) {} + public void onPhoneAccountChanged(Connection c, PhoneAccountHandle pHandle) {} } /** @@ -1117,6 +1118,7 @@ public abstract class Connection extends Conferenceable { private Conference mConference; private ConnectionService mConnectionService; private Bundle mExtras; + private PhoneAccountHandle mPhoneAccountHandle = null; /** * Create a new Connection. @@ -1626,6 +1628,23 @@ public abstract class Connection extends Conferenceable { } /** + * @hide. + */ + public final void setPhoneAccountHandle(PhoneAccountHandle pHandle) { + mPhoneAccountHandle = pHandle; + for (Listener l : mListeners) { + l.onPhoneAccountChanged(this, pHandle); + } + } + + /** + * @hide. + */ + public final PhoneAccountHandle getPhoneAccountHandle() { + return mPhoneAccountHandle; + } + + /** * @hide */ public final void setConnectionService(ConnectionService connectionService) { diff --git a/telecomm/java/android/telecom/ConnectionService.java b/telecomm/java/android/telecom/ConnectionService.java index 13497d7..019839f 100644 --- a/telecomm/java/android/telecom/ConnectionService.java +++ b/telecomm/java/android/telecom/ConnectionService.java @@ -625,6 +625,13 @@ public abstract class ConnectionService extends Service { mAdapter.setExtras(id, extras); } } + + @Override + public void onPhoneAccountChanged(Connection c, PhoneAccountHandle pHandle) { + String id = mIdByConnection.get(c); + Log.i(this, "Adapter onPhoneAccountChanged %s, %s", c, pHandle); + mAdapter.setPhoneAccountHandle(id, pHandle); + } }; /** {@inheritDoc} */ @@ -680,7 +687,7 @@ public abstract class ConnectionService extends Service { callId, request, new ParcelableConnection( - request.getAccountHandle(), + getAccountHandle(request, connection), connection.getState(), connection.getConnectionCapabilities(), connection.getAddress(), @@ -702,6 +709,18 @@ public abstract class ConnectionService extends Service { } } + /** @hide */ + public PhoneAccountHandle getAccountHandle( + final ConnectionRequest request, Connection connection) { + PhoneAccountHandle pHandle = connection.getPhoneAccountHandle(); + if (pHandle != null) { + Log.i(this, "getAccountHandle, return account handle from local, %s", pHandle); + return pHandle; + } else { + return request.getAccountHandle(); + } + } + private void abort(String callId) { Log.d(this, "abort %s", callId); findConnectionForAction(callId, "abort").onAbort(); diff --git a/telecomm/java/android/telecom/ConnectionServiceAdapter.java b/telecomm/java/android/telecom/ConnectionServiceAdapter.java index 4562514..8495f95 100644 --- a/telecomm/java/android/telecom/ConnectionServiceAdapter.java +++ b/telecomm/java/android/telecom/ConnectionServiceAdapter.java @@ -412,4 +412,14 @@ final class ConnectionServiceAdapter implements DeathRecipient { } } } + + void setPhoneAccountHandle(String callId, PhoneAccountHandle pHandle) { + Log.v(this, "setPhoneAccountHandle: %s, %s", callId, pHandle); + for (IConnectionServiceAdapter adapter : mAdapters) { + try { + adapter.setPhoneAccountHandle(callId, pHandle); + } catch (RemoteException ignored) { + } + } + } } diff --git a/telecomm/java/android/telecom/ConnectionServiceAdapterServant.java b/telecomm/java/android/telecom/ConnectionServiceAdapterServant.java index 293dc11..7162772 100644 --- a/telecomm/java/android/telecom/ConnectionServiceAdapterServant.java +++ b/telecomm/java/android/telecom/ConnectionServiceAdapterServant.java @@ -62,6 +62,7 @@ final class ConnectionServiceAdapterServant { private static final int MSG_ON_POST_DIAL_CHAR = 22; private static final int MSG_SET_CONFERENCE_MERGE_FAILED = 23; private static final int MSG_SET_EXTRAS = 24; + private static final int MSG_SET_PHONE_ACCOUNT = 25; private final IConnectionServiceAdapter mDelegate; @@ -223,6 +224,16 @@ final class ConnectionServiceAdapterServant { } break; } + case MSG_SET_PHONE_ACCOUNT: { + SomeArgs args = (SomeArgs) msg.obj; + try { + mDelegate.setPhoneAccountHandle( + (String) args.arg1, (PhoneAccountHandle) args.arg2); + } finally { + args.recycle(); + } + break; + } case MSG_SET_CONFERENCE_MERGE_FAILED: { SomeArgs args = (SomeArgs) msg.obj; try { @@ -419,6 +430,13 @@ final class ConnectionServiceAdapterServant { args.arg2 = extras; mHandler.obtainMessage(MSG_SET_EXTRAS, args).sendToTarget(); } + + public final void setPhoneAccountHandle(String connectionId, PhoneAccountHandle pHandle) { + SomeArgs args = SomeArgs.obtain(); + args.arg1 = connectionId; + args.arg2 = pHandle; + mHandler.obtainMessage(MSG_SET_PHONE_ACCOUNT, args).sendToTarget(); + } }; public ConnectionServiceAdapterServant(IConnectionServiceAdapter delegate) { diff --git a/telecomm/java/android/telecom/RemoteConnection.java b/telecomm/java/android/telecom/RemoteConnection.java index f960959..3cb8058 100644 --- a/telecomm/java/android/telecom/RemoteConnection.java +++ b/telecomm/java/android/telecom/RemoteConnection.java @@ -209,6 +209,11 @@ public final class RemoteConnection { * @param extras The extras containing other information associated with the connection. */ public void onExtrasChanged(RemoteConnection connection, @Nullable Bundle extras) {} + + /** @hide */ + public void setPhoneAccountHandle( + RemoteConnection connection, + PhoneAccountHandle pHandle) {} } /** @@ -1291,6 +1296,20 @@ public final class RemoteConnection { } } + /** @hide */ + void setPhoneAccountHandle(final PhoneAccountHandle pHandle) { + for (CallbackRecord record : mCallbackRecords) { + final RemoteConnection connection = this; + final Callback callback = record.getCallback(); + record.getHandler().post(new Runnable() { + @Override + public void run() { + callback.setPhoneAccountHandle(connection, pHandle); + } + }); + } + } + /** * Create a RemoteConnection represents a failure, and which will be in * {@link Connection#STATE_DISCONNECTED}. Attempting to use it for anything will almost diff --git a/telecomm/java/android/telecom/RemoteConnectionService.java b/telecomm/java/android/telecom/RemoteConnectionService.java index dc0de0c..c87b037 100644 --- a/telecomm/java/android/telecom/RemoteConnectionService.java +++ b/telecomm/java/android/telecom/RemoteConnectionService.java @@ -330,6 +330,11 @@ final class RemoteConnectionService { .setExtras(extras); } } + + public void setPhoneAccountHandle(String callId, PhoneAccountHandle pHandle) { + findConnectionForAction(callId, "setPhoneAccountHandle") + .setPhoneAccountHandle(pHandle); + } }; private final ConnectionServiceAdapterServant mServant = diff --git a/telecomm/java/com/android/internal/telecom/IConnectionServiceAdapter.aidl b/telecomm/java/com/android/internal/telecom/IConnectionServiceAdapter.aidl index 7647444..32c48b1 100644 --- a/telecomm/java/com/android/internal/telecom/IConnectionServiceAdapter.aidl +++ b/telecomm/java/com/android/internal/telecom/IConnectionServiceAdapter.aidl @@ -23,6 +23,7 @@ import android.telecom.ConnectionRequest; import android.telecom.DisconnectCause; import android.telecom.ParcelableConnection; import android.telecom.ParcelableConference; +import android.telecom.PhoneAccountHandle; import android.telecom.StatusHints; import com.android.internal.telecom.IVideoProvider; @@ -86,4 +87,6 @@ oneway interface IConnectionServiceAdapter { void addExistingConnection(String callId, in ParcelableConnection connection); void setExtras(String callId, in Bundle extras); + + void setPhoneAccountHandle(String callId, in PhoneAccountHandle pHandle); } diff --git a/telephony/java/android/telephony/DisconnectCause.java b/telephony/java/android/telephony/DisconnectCause.java index affdce2..7f0d83f 100644 --- a/telephony/java/android/telephony/DisconnectCause.java +++ b/telephony/java/android/telephony/DisconnectCause.java @@ -252,6 +252,11 @@ public class DisconnectCause { public static final int LOCAL_LOW_BATTERY = 91; public static final int LOW_BATTERY = 92; + /** EMERGENCY call failed with temporary fail cause */ + public static final int EMERGENCY_TEMP_FAILURE = 91; + /** EMERGENCY call failed with permanent fail cause */ + public static final int EMERGENCY_PERM_FAILURE = 92; + /** Private constructor to avoid class instantiation. */ private DisconnectCause() { // Do nothing. diff --git a/telephony/java/com/android/ims/ImsReasonInfo.java b/telephony/java/com/android/ims/ImsReasonInfo.java index 088936f..0244209 100644 --- a/telephony/java/com/android/ims/ImsReasonInfo.java +++ b/telephony/java/com/android/ims/ImsReasonInfo.java @@ -155,6 +155,9 @@ public class ImsReasonInfo implements Parcelable { public static final int CODE_SIP_USER_REJECTED = 361; // Others public static final int CODE_SIP_GLOBAL_ERROR = 362; + // Emergency failure + public static final int CODE_EMERGENCY_TEMP_FAILURE = 363; + public static final int CODE_EMERGENCY_PERM_FAILURE = 364; /** * MEDIA (IMS -> Telephony) |