Merge "[RCS]Use phone number as the key to manage session" am: 3131106eaf am: b70da5817b am: 4f1816de16
Original change: https://android-review.googlesource.com/c/platform/packages/services/Telephony/+/1642542
Change-Id: I4ea285671dd0c8dbd730f899797f5573f557b004
diff --git a/testapps/TestRcsApp/TestApp/AndroidManifest.xml b/testapps/TestRcsApp/TestApp/AndroidManifest.xml
index f439883..4e40120 100644
--- a/testapps/TestRcsApp/TestApp/AndroidManifest.xml
+++ b/testapps/TestRcsApp/TestApp/AndroidManifest.xml
@@ -19,8 +19,8 @@
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.google.android.sample.rcsclient"
- android:versionCode="8"
- android:versionName="1.0.7">
+ android:versionCode="9"
+ android:versionName="1.0.8">
<uses-sdk
android:minSdkVersion="30"
diff --git a/testapps/TestRcsApp/TestApp/src/com/google/android/sample/rcsclient/ChatActivity.java b/testapps/TestRcsApp/TestApp/src/com/google/android/sample/rcsclient/ChatActivity.java
index bb1283a..8f7e6a8 100644
--- a/testapps/TestRcsApp/TestApp/src/com/google/android/sample/rcsclient/ChatActivity.java
+++ b/testapps/TestRcsApp/TestApp/src/com/google/android/sample/rcsclient/ChatActivity.java
@@ -49,10 +49,10 @@
public class ChatActivity extends AppCompatActivity {
public static final String EXTRA_REMOTE_PHONE_NUMBER = "REMOTE_PHONE_NUMBER";
- public static final String TELURI_PREFIX = "tel:";
private static final String TAG = "TestRcsApp.ChatActivity";
private static final int INIT_LIST = 1;
private static final int SHOW_STATUS = 2;
+ private static final int EMPTY_MSG = 3;
private static final float TEXT_SIZE = 20.0f;
private static final int MARGIN_SIZE = 20;
private static final long TIMEOUT_IN_MS = 10000L;
@@ -85,6 +85,9 @@
case SHOW_STATUS:
mTips.setText(msg.obj.toString());
break;
+ case EMPTY_MSG:
+ mNewMessage.setText("");
+ break;
default:
Log.d(TAG, "unknown msg:" + msg.what);
break;
@@ -134,7 +137,7 @@
ChatActivity.this.getResources().getString(R.string.session_timeout)),
TIMEOUT_IN_MS);
ChatManager.getInstance(getApplicationContext(), mSubId).initChatSession(
- TELURI_PREFIX + mDestNumber, new SessionStateCallback() {
+ mDestNumber, new SessionStateCallback() {
@Override
public void onSuccess() {
Log.i(TAG, "session init succeeded");
@@ -176,7 +179,8 @@
ChatManager.getInstance(getApplicationContext(), mSubId).addNewMessage(
mNewMessage.getText().toString(), ChatManager.SELF, mDestNumber);
ChatManager.getInstance(getApplicationContext(), mSubId).sendMessage(
- TELURI_PREFIX + mDestNumber, mNewMessage.getText().toString());
+ mDestNumber, mNewMessage.getText().toString());
+ mHandler.sendMessage(mHandler.obtainMessage(EMPTY_MSG));
}
});
});
@@ -259,8 +263,7 @@
protected void onDestroy() {
super.onDestroy();
Log.i(TAG, "onDestroy");
- ChatManager.getInstance(getApplicationContext(), mSubId).terminateSession(
- TELURI_PREFIX + mDestNumber);
+ ChatManager.getInstance(getApplicationContext(), mSubId).terminateSession(mDestNumber);
}
@Override
diff --git a/testapps/TestRcsApp/TestApp/src/com/google/android/sample/rcsclient/UceActivity.java b/testapps/TestRcsApp/TestApp/src/com/google/android/sample/rcsclient/UceActivity.java
index 6835fea..0fae8f6 100644
--- a/testapps/TestRcsApp/TestApp/src/com/google/android/sample/rcsclient/UceActivity.java
+++ b/testapps/TestRcsApp/TestApp/src/com/google/android/sample/rcsclient/UceActivity.java
@@ -46,6 +46,7 @@
public class UceActivity extends AppCompatActivity {
private static final String TAG = "TestRcsApp.UceActivity";
+ private static final String TELURI_PREFIX = "tel:";
private Button mCapabilityButton;
private Button mAvailabilityButton;
private TextView mCapabilityResult;
@@ -146,7 +147,7 @@
public void onComplete() {
Log.i(TAG, "onComplete()");
- mCapabilityResult.append("complete");
+ mCapabilityResult.append("onComplete");
}
@@ -174,7 +175,7 @@
for (String number : numbers) {
String formattedNumber = NumberUtils.formatNumber(this, number);
if (formattedNumber != null) {
- contactList.add(Uri.parse(ChatActivity.TELURI_PREFIX + formattedNumber));
+ contactList.add(Uri.parse(TELURI_PREFIX + formattedNumber));
} else {
Log.w(TAG, "number formatted improperly, skipping: " + number);
}
diff --git a/testapps/TestRcsApp/TestApp/src/com/google/android/sample/rcsclient/util/ChatManager.java b/testapps/TestRcsApp/TestApp/src/com/google/android/sample/rcsclient/util/ChatManager.java
index ec048b8..399a860 100644
--- a/testapps/TestRcsApp/TestApp/src/com/google/android/sample/rcsclient/util/ChatManager.java
+++ b/testapps/TestRcsApp/TestApp/src/com/google/android/sample/rcsclient/util/ChatManager.java
@@ -55,6 +55,7 @@
public class ChatManager {
public static final String SELF = "self";
private static final String TAG = "TestRcsApp.ChatManager";
+ private static final String TELURI_PREFIX = "tel:";
private static AddressFactory sAddressFactory = new AddressFactoryImpl();
private static HashMap<Integer, ChatManager> sChatManagerInstances = new HashMap<>();
private final ExecutorService mFixedThreadPool = Executors.newFixedThreadPool(5);
@@ -65,7 +66,7 @@
private SimpleRcsClient mSimpleRcsClient;
private State mState;
private int mSubId;
- private HashMap<URI, SimpleChatSession> mContactSessionMap = new HashMap<>();
+ private HashMap<String, SimpleChatSession> mContactSessionMap = new HashMap<>();
private RcsStateChangedCallback mRcsStateChangedCallback;
private ChatManager(Context context, int subId) {
@@ -90,15 +91,14 @@
mRcsStateChangedCallback.notifyStateChange(oldState, newState);
});
mImsService.setListener((session) -> {
- Log.i(TAG, "onIncomingSession()");
- mContactSessionMap.put(session.getRemoteUri(), session);
+ Log.i(TAG, "onIncomingSession():" + session.getRemoteUri());
+ String phoneNumber = getNumberFromUri(session.getRemoteUri().toString());
+ mContactSessionMap.put(phoneNumber, session);
session.setListener(
// implement onMessageReceived()
(message) -> {
mFixedThreadPool.execute(() -> {
String msg = message.content();
- String phoneNumber = getNumberFromUri(
- session.getRemoteUri().toString());
if (TextUtils.isEmpty(phoneNumber)) {
Log.i(TAG, "dest number is empty, uri:"
+ session.getRemoteUri());
@@ -173,33 +173,34 @@
/**
* Initiate 1 to 1 chat session.
- * @param telUriContact destination tel Uri.
+ *
+ * @param contact destination phone number.
* @param callback callback for session state.
*/
- public void initChatSession(String telUriContact, SessionStateCallback callback) {
+ public void initChatSession(String contact, SessionStateCallback callback) {
if (mState != State.REGISTERED) {
Log.i(TAG, "Could not init session due to State = " + mState);
return;
}
- URI uri = createUri(telUriContact);
- if (mContactSessionMap.containsKey(uri)) {
+ Log.i(TAG, "initChatSession contact: " + contact);
+ if (mContactSessionMap.containsKey(contact)) {
callback.onSuccess();
- Log.i(TAG, "uri exists");
+ Log.i(TAG, "contact exists");
return;
}
Futures.addCallback(
- mImsService.startOriginatingChatSession(telUriContact),
+ mImsService.startOriginatingChatSession(TELURI_PREFIX + contact),
new FutureCallback<SimpleChatSession>() {
@Override
public void onSuccess(SimpleChatSession chatSession) {
- mContactSessionMap.put(chatSession.getRemoteUri(), chatSession);
+ String phoneNumber = getNumberFromUri(
+ chatSession.getRemoteUri().toString());
+ mContactSessionMap.put(phoneNumber, chatSession);
chatSession.setListener(
// implement onMessageReceived()
(message) -> {
mFixedThreadPool.execute(() -> {
String msg = message.content();
- String phoneNumber = getNumberFromUri(
- chatSession.getRemoteUri().toString());
if (TextUtils.isEmpty(phoneNumber)) {
Log.i(TAG, "dest number is empty, uri:"
+ chatSession.getRemoteUri());
@@ -222,13 +223,14 @@
/**
* Send a chat message.
- * @param telUriContact destination tel Uri.
+ *
+ * @param contact destination phone number.
* @param message chat message.
*/
- public void sendMessage(String telUriContact, String message) {
- SimpleChatSession chatSession = mContactSessionMap.get(createUri(telUriContact));
+ public void sendMessage(String contact, String message) {
+ SimpleChatSession chatSession = mContactSessionMap.get(contact);
if (chatSession == null) {
- Log.i(TAG, "session is unavailable for telUriContact = " + telUriContact);
+ Log.i(TAG, "session is unavailable for contact = " + contact);
return;
}
chatSession.sendMessage(message);
@@ -240,22 +242,23 @@
/**
* Terminate the chat session.
- * @param telUriContact destination tel Uri
+ *
+ * @param contact destination phone number.
*/
- public void terminateSession(String telUriContact) {
+ public void terminateSession(String contact) {
Log.i(TAG, "terminateSession");
- URI uri = createUri(telUriContact);
- SimpleChatSession chatSession = mContactSessionMap.get(uri);
+ SimpleChatSession chatSession = mContactSessionMap.get(contact);
if (chatSession == null) {
- Log.i(TAG, "session is unavailable for telUriContact = " + telUriContact);
+ Log.i(TAG, "session is unavailable for contact = " + contact);
return;
}
chatSession.terminate();
- mContactSessionMap.remove(uri);
+ mContactSessionMap.remove(contact);
}
/**
* Insert chat information into database.
+ *
* @param message chat message.
* @param src source phone number.
* @param dest destination phone number.