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);
+ }
+}