diff options
author | Ravindra <c_rthat@codeaurora.org> | 2015-09-21 14:43:05 +0530 |
---|---|---|
committer | Linux Build Service Account <lnxbuild@localhost> | 2015-10-06 03:28:59 -0600 |
commit | d13db38a856f92670566cc96f87c87846259c575 (patch) | |
tree | 99b0c6eb59cfa49932888a10cc158e4f49e64b9a | |
parent | c96a60e262093e2ae4e4f31349c1864ce83a5bfb (diff) | |
download | frameworks_base-d13db38a856f92670566cc96f87c87846259c575.zip frameworks_base-d13db38a856f92670566cc96f87c87846259c575.tar.gz frameworks_base-d13db38a856f92670566cc96f87c87846259c575.tar.bz2 |
MSIM: set phone account handle changes for ECall
Add interface API between Telephony to Telecomm for
updating phoneAcount.
Currently on multisim, Telephony(PhoneApp) picks the best
possible sub for placing emergency call, after selecting the
best possible sub, Telephony uses this new interface API to update
the phoneAcount handle to Telecomm which inturn helps to display
the proper subId on which ECall placed.
Add cause codes for EMERGENCY_TEMP_FAILURE and EMERGENCY_TEMP_FAILURE
Change-Id: Ic0fdc01810ccc35479a1a9447c40e38122a155a9
CRs-Fixed: 722205,778800, 780893
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) |