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.