Format Numbers correctly for the Network

1) Format Numbers in E164 format for network requests.
2) Set config to UP1.0 instead of UP2.3 for ACS

Test: check logcat when using app
Change-Id: I544f4c541721b8ca700fa2e6dc0f3ca134017324
diff --git a/testapps/TestRcsApp/TestApp/AndroidManifest.xml b/testapps/TestRcsApp/TestApp/AndroidManifest.xml
index 2ff1df0..6e52949 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="2"
-    android:versionName="1.0.1">
+    android:versionCode="3"
+    android:versionName="1.0.2_UP1.0">
 
     <uses-sdk
         android:minSdkVersion="30"
diff --git a/testapps/TestRcsApp/TestApp/res/layout/chat_layout.xml b/testapps/TestRcsApp/TestApp/res/layout/chat_layout.xml
index 374db9b..5dbf6b0 100644
--- a/testapps/TestRcsApp/TestApp/res/layout/chat_layout.xml
+++ b/testapps/TestRcsApp/TestApp/res/layout/chat_layout.xml
@@ -21,8 +21,9 @@
             android:id="@+id/destNum"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:inputType="number"
-            android:text="16504483120" />
+            android:inputType="phone"
+            android:digits="0123456789+"
+            android:hint="+15555551212" />
     </LinearLayout>
 
 
diff --git a/testapps/TestRcsApp/TestApp/res/layout/number_to_chat.xml b/testapps/TestRcsApp/TestApp/res/layout/number_to_chat.xml
index 5d71cd1..0390d51 100644
--- a/testapps/TestRcsApp/TestApp/res/layout/number_to_chat.xml
+++ b/testapps/TestRcsApp/TestApp/res/layout/number_to_chat.xml
@@ -20,8 +20,9 @@
             android:id="@+id/destNum"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:inputType="number"
-            android:text="16504396583" />
+            android:inputType="phone"
+            android:digits="0123456789+"
+            android:hint="+15555551212" />
     </LinearLayout>
 
     <Button
diff --git a/testapps/TestRcsApp/TestApp/res/layout/uce_layout.xml b/testapps/TestRcsApp/TestApp/res/layout/uce_layout.xml
index 0174d71..305c88e 100644
--- a/testapps/TestRcsApp/TestApp/res/layout/uce_layout.xml
+++ b/testapps/TestRcsApp/TestApp/res/layout/uce_layout.xml
@@ -34,8 +34,9 @@
                 android:id="@+id/number_list"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:inputType="number"
-                android:text="16504483123, 16504489023" />
+                android:inputType="phone"
+                android:digits="0123456789+,"
+                android:hint="+16505551212,+16505551213" />
         </LinearLayout>
 
         <Button
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 1619f14..1db4af7 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
@@ -40,6 +40,7 @@
 
 import com.google.android.sample.rcsclient.util.ChatManager;
 import com.google.android.sample.rcsclient.util.ChatProvider;
+import com.google.android.sample.rcsclient.util.NumberUtils;
 
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
@@ -58,6 +59,7 @@
     private boolean mSessionInitResult = false;
     private Button mSend;
     private String mDestNumber;
+    private TextView mDestNumberView;
     private EditText mNewMessage;
     private ChatObserver mChatObserver;
     private Handler mHandler;
@@ -89,6 +91,7 @@
 
             }
         };
+        mDestNumberView = findViewById(R.id.destNum);
         initDestNumber();
         mChatObserver = new ChatObserver(mHandler);
     }
@@ -96,8 +99,7 @@
     private void initDestNumber() {
         Intent intent = getIntent();
         mDestNumber = intent.getStringExtra(EXTRA_REMOTE_PHONE_NUMBER);
-        TextView destNumber = findViewById(R.id.destNum);
-        destNumber.setText(mDestNumber);
+        mDestNumberView.setText(mDestNumber);
     }
 
     @Override
@@ -119,7 +121,12 @@
             return;
         }
         try {
-
+            // Reformat so that the number matches the one sent to the network.
+            String formattedNumber = NumberUtils.formatNumber(this, mDestNumber);
+            if (formattedNumber != null) {
+                mDestNumber = formattedNumber;
+            }
+            mDestNumberView.setText(mDestNumber);
             ChatManager.getInstance(getApplicationContext(), subId).initChatSession(
                     TELURI_PREFIX + mDestNumber, new SessionStateCallback() {
                         @Override
diff --git a/testapps/TestRcsApp/TestApp/src/com/google/android/sample/rcsclient/PhoneNumberActivity.java b/testapps/TestRcsApp/TestApp/src/com/google/android/sample/rcsclient/PhoneNumberActivity.java
index a277994..b432979 100644
--- a/testapps/TestRcsApp/TestApp/src/com/google/android/sample/rcsclient/PhoneNumberActivity.java
+++ b/testapps/TestRcsApp/TestApp/src/com/google/android/sample/rcsclient/PhoneNumberActivity.java
@@ -22,10 +22,13 @@
 import android.view.MenuItem;
 import android.widget.Button;
 import android.widget.EditText;
+import android.widget.Toast;
 
 import androidx.annotation.Nullable;
 import androidx.appcompat.app.AppCompatActivity;
 
+import com.google.android.sample.rcsclient.util.NumberUtils;
+
 /** An activity to let user input phone number to chat. */
 public class PhoneNumberActivity extends AppCompatActivity {
 
@@ -43,11 +46,16 @@
         mChatButton = this.findViewById(R.id.launch_chat_btn);
         mPhoneNumber = findViewById(R.id.destNum);
         mChatButton.setOnClickListener(view -> {
-            Intent intent = new Intent(PhoneNumberActivity.this, ChatActivity.class);
-            intent.putExtra(ChatActivity.EXTRA_REMOTE_PHONE_NUMBER,
+            String formattedNumber = NumberUtils.formatNumber(PhoneNumberActivity.this,
                     mPhoneNumber.getText().toString());
-            PhoneNumberActivity.this.startActivity(intent);
-
+            if (formattedNumber != null) {
+                Intent intent = new Intent(PhoneNumberActivity.this, ChatActivity.class);
+                intent.putExtra(ChatActivity.EXTRA_REMOTE_PHONE_NUMBER, formattedNumber);
+                PhoneNumberActivity.this.startActivity(intent);
+            } else {
+                Toast.makeText(this, "Invalid Number format!",
+                        Toast.LENGTH_LONG).show();
+            }
         });
     }
 
diff --git a/testapps/TestRcsApp/TestApp/src/com/google/android/sample/rcsclient/ProvisioningActivity.java b/testapps/TestRcsApp/TestApp/src/com/google/android/sample/rcsclient/ProvisioningActivity.java
index da0cf39..aa90487 100644
--- a/testapps/TestRcsApp/TestApp/src/com/google/android/sample/rcsclient/ProvisioningActivity.java
+++ b/testapps/TestRcsApp/TestApp/src/com/google/android/sample/rcsclient/ProvisioningActivity.java
@@ -88,7 +88,7 @@
     private static RcsClientConfiguration getDefaultClientConfiguration() {
         return new RcsClientConfiguration(
                 /*rcsVersion=*/ "6.0",
-                /*rcsProfile=*/ "UP_2.3",
+                /*rcsProfile=*/ "UP_1.0",
                 /*clientVendor=*/ "Goog",
                 /*clientVersion=*/ "RCSAndrd-1.0");
     }
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 9edb817..10f588c 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
@@ -35,16 +35,15 @@
 import androidx.annotation.Nullable;
 import androidx.appcompat.app.AppCompatActivity;
 
+import com.google.android.sample.rcsclient.util.NumberUtils;
+
 import java.util.ArrayList;
 import java.util.List;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
 
 /** An activity to verify UCE. */
 public class UceActivity extends AppCompatActivity {
 
     private static final String TAG = "TestRcsApp.UceActivity";
-    private final ExecutorService mExecutorService = Executors.newSingleThreadExecutor();
     private Button mCapabilityButton;
     private Button mAvailabilityButton;
     private TextView mCapabilityResult;
@@ -72,16 +71,16 @@
         mCapabilityResult = findViewById(R.id.capability_result);
         mAvailabilityResult = findViewById(R.id.capability_result);
 
-        List<Uri> contactList = getContectList();
         mImsRcsManager = getImsRcsManager(mDefaultSmsSubId);
         mCapabilityButton.setOnClickListener(view -> {
+            List<Uri> contactList = getContectList();
             if (contactList.size() == 0) {
                 Log.i(TAG, "empty contact list");
                 return;
             }
             mCapabilityResult.setText("pending...\n");
             try {
-                mImsRcsManager.getUceAdapter().requestCapabilities(contactList, mExecutorService,
+                mImsRcsManager.getUceAdapter().requestCapabilities(contactList, getMainExecutor(),
                         new RcsUceAdapter.CapabilitiesCallback() {
                             public void onCapabilitiesReceived(
                                     List<RcsContactUceCapability> contactCapabilities) {
@@ -113,6 +112,7 @@
         });
 
         mAvailabilityButton.setOnClickListener(view -> {
+            List<Uri> contactList = getContectList();
             if (contactList.size() == 0) {
                 Log.i(TAG, "empty contact list");
                 return;
@@ -120,7 +120,7 @@
             mAvailabilityResult.setText("pending...\n");
             try {
                 mImsRcsManager.getUceAdapter().requestAvailability(contactList.get(0),
-                        mExecutorService, new RcsUceAdapter.CapabilitiesCallback() {
+                        getMainExecutor(), new RcsUceAdapter.CapabilitiesCallback() {
                             public void onCapabilitiesReceived(
                                     List<RcsContactUceCapability> contactCapabilities) {
                                 Log.i(TAG, "onCapabilitiesReceived()");
@@ -153,13 +153,18 @@
 
     private List<Uri> getContectList() {
         mNumbers = findViewById(R.id.number_list);
-        String []numbers;
+        String[] numbers;
         ArrayList<Uri> contactList = new ArrayList<>();
         if (!TextUtils.isEmpty(mNumbers.getText().toString())) {
             String numberList = mNumbers.getText().toString().trim();
             numbers = numberList.split(",");
             for (String number : numbers) {
-                contactList.add(Uri.parse(ChatActivity.TELURI_PREFIX + number));
+                String formattedNumber = NumberUtils.formatNumber(this, number);
+                if (formattedNumber != null) {
+                    contactList.add(Uri.parse(ChatActivity.TELURI_PREFIX + formattedNumber));
+                } else {
+                    Log.w(TAG, "number formatted improperly, skipping: " + number);
+                }
             }
         }
 
@@ -206,6 +211,10 @@
                 if (t.getServiceCapabilities() != null) {
                     RcsContactPresenceTuple.ServiceCapabilities servCaps =
                             t.getServiceCapabilities();
+                    b.append(", servCaps=(audio=");
+                    b.append(servCaps.isAudioCapable());
+                    b.append(", video=");
+                    b.append(servCaps.isVideoCapable());
                     b.append(", servCaps=(supported=");
                     b.append(servCaps.getSupportedDuplexModes());
                     b.append("), servCaps=(unsupported=");
diff --git a/testapps/TestRcsApp/TestApp/src/com/google/android/sample/rcsclient/util/NumberUtils.java b/testapps/TestRcsApp/TestApp/src/com/google/android/sample/rcsclient/util/NumberUtils.java
new file mode 100644
index 0000000..72cbf3f
--- /dev/null
+++ b/testapps/TestRcsApp/TestApp/src/com/google/android/sample/rcsclient/util/NumberUtils.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.android.sample.rcsclient.util;
+
+import android.content.Context;
+import android.telephony.PhoneNumberUtils;
+import android.telephony.TelephonyManager;
+
+public class NumberUtils {
+
+    /**
+     * Format a number in E164 format.
+     * <p>
+     * Note: if the number can not be formatted, this method will return null.
+     */
+    public static String formatNumber(Context context, String number) {
+        TelephonyManager manager = context.getSystemService(TelephonyManager.class);
+        String simCountryIso = manager.getSimCountryIso().toUpperCase();
+        return PhoneNumberUtils.formatNumberToE164(number, simCountryIso);
+    }
+}