summaryrefslogtreecommitdiffstats
path: root/telecomm
diff options
context:
space:
mode:
Diffstat (limited to 'telecomm')
-rw-r--r--telecomm/java/android/telecom/Connection.java19
-rw-r--r--telecomm/java/android/telecom/ConnectionService.java21
-rw-r--r--telecomm/java/android/telecom/ConnectionServiceAdapter.java10
-rw-r--r--telecomm/java/android/telecom/ConnectionServiceAdapterServant.java18
-rw-r--r--telecomm/java/android/telecom/RemoteConnection.java19
-rw-r--r--telecomm/java/android/telecom/RemoteConnectionService.java5
-rw-r--r--telecomm/java/com/android/internal/telecom/IConnectionServiceAdapter.aidl3
7 files changed, 94 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);
}