Merge "[RCS]Make rcsProfile selectable"
diff --git a/testapps/TestRcsApp/TestApp/res/layout/provision_layout.xml b/testapps/TestRcsApp/TestApp/res/layout/provision_layout.xml
index d98dde2..a70cd4a 100644
--- a/testapps/TestRcsApp/TestApp/res/layout/provision_layout.xml
+++ b/testapps/TestRcsApp/TestApp/res/layout/provision_layout.xml
@@ -11,12 +11,30 @@
         android:layout_height="wrap_content"
         android:orientation="vertical">
 
+        <LinearLayout
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="@string/rcs_profile"
+                android:textSize="15dp"
+                android:textStyle="bold" />
+
+            <Spinner
+                android:id="@+id/rcs_profile_list"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content" />
+        </LinearLayout>
+
         <Button
             android:id="@+id/provisioning_register_btn"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_marginTop="10dp"
-            android:text="register"
+            android:text="@string/register_provisioning_callback"
             android:textAllCaps="false" />
 
         <Button
@@ -24,7 +42,7 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_marginTop="10dp"
-            android:text="unregister"
+            android:text="@string/unregister_provisioning_callback"
             android:textAllCaps="false" />
 
         <Button
@@ -33,7 +51,7 @@
             android:layout_height="wrap_content"
             android:layout_marginTop="10dp"
             android:layout_marginBottom="10dp"
-            android:text="isRcsVolteSingleRegCapable"
+            android:text="@string/isRcsVolteSingleRegCapable"
             android:textAllCaps="false" />
 
         <TextView
diff --git a/testapps/TestRcsApp/TestApp/res/values/donottranslate_strings.xml b/testapps/TestRcsApp/TestApp/res/values/donottranslate_strings.xml
index a193b46..502874f 100644
--- a/testapps/TestRcsApp/TestApp/res/values/donottranslate_strings.xml
+++ b/testapps/TestRcsApp/TestApp/res/values/donottranslate_strings.xml
@@ -6,6 +6,10 @@
     <string name="gba_test">GBA Test</string>
     <string name="test_msg_client">TestMessageClient</string>
     <string name="db_client">DBClient</string>
+    <string name="rcs_profile">RcsProfile:</string>
+    <string name="register_provisioning_callback">registerProvisioningCallback</string>
+    <string name="unregister_provisioning_callback">unRegisterProvisioningCallback</string>
+    <string name="isRcsVolteSingleRegCapable">isRcsVolteSingleRegCapable</string>
     <string name="result">Result:</string>
     <string name="callback_result">Callback Result:</string>
     <string name="initialize_delegate">initializeSipDelegate</string>
@@ -49,6 +53,10 @@
     <string name="registration_failed">Registration failed</string>
     <string name="version_info">Version: %s</string>
 
+    <string-array name="rcs_profile">
+        <item>UP_1.0</item>
+        <item>UP_2.3</item>
+    </string-array>
     <string-array name="organization">
         <item>NONE</item>
         <item>3GPP</item>
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 bae4a1a..0c2996c 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
@@ -20,6 +20,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
+import android.content.SharedPreferences;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
@@ -32,7 +33,11 @@
 import android.text.method.ScrollingMovementMethod;
 import android.util.Log;
 import android.view.MenuItem;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
 import android.widget.Button;
+import android.widget.Spinner;
 import android.widget.TextView;
 
 import androidx.annotation.NonNull;
@@ -47,15 +52,27 @@
 public class ProvisioningActivity extends AppCompatActivity {
 
     private static final String TAG = "TestRcsApp.ProvisioningActivity";
+    private static final String UP_10 = "UP_1.0";
+    private static final String UP_23 = "UP_2.3";
+    private static final String V_6 = "6.0";
+    private static final String V_9 = "9.0";
+    private static final String RCS_CONFIG = "CONFIG";
+    private static final String RCS_PROFILE = "RCS_PROFILE";
+    private static final String RCS_VERSION = "RCS_VERSION";
     private static final int MSG_RESULT = 1;
+
     private final ExecutorService mExecutorService = Executors.newSingleThreadExecutor();
     private int mDefaultSmsSubId;
     private ProvisioningManager mProvisioningManager;
+    private Spinner mRcsProfileSpinner;
+    private String mRcsVersion;
+    private String mRcsProfile;
     private Button mRegisterButton;
     private Button mUnRegisterButton;
     private Button mIsCapableButton;
     private TextView mSingleRegResult;
     private TextView mCallbackResult;
+    private SharedPreferences mPref;
     private SingleRegCapabilityReceiver mSingleRegCapabilityReceiver;
     private boolean mIsRegistered = false;
     private Handler mHandler;
@@ -85,10 +102,10 @@
             };
 
     // Static configuration.
-    private static RcsClientConfiguration getDefaultClientConfiguration() {
+    private RcsClientConfiguration getDefaultClientConfiguration() {
         return new RcsClientConfiguration(
-                /*rcsVersion=*/ "6.0",
-                /*rcsProfile=*/ "UP_1.0",
+                /*rcsVersion=*/ mRcsVersion,
+                /*rcsProfile=*/ mRcsProfile,
                 /*clientVendor=*/ "Goog",
                 /*clientVersion=*/ "RCSAndrd-1.0");
     }
@@ -112,6 +129,8 @@
                 }
             }
         };
+        mPref = getSharedPreferences(RCS_CONFIG, MODE_PRIVATE);
+        initRcsProfile();
     }
 
     @Override
@@ -206,6 +225,44 @@
         return SubscriptionManager.isValidSubscriptionId(mDefaultSmsSubId);
     }
 
+    private void initRcsProfile() {
+        mRcsProfileSpinner = findViewById(R.id.rcs_profile_list);
+        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
+                R.array.rcs_profile, android.R.layout.simple_spinner_item);
+        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+        mRcsProfileSpinner.setAdapter(adapter);
+        mRcsProfileSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
+            @Override
+            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
+                Log.i(TAG, "rcs profile position:" + position);
+                switch (position) {
+                    case 0:
+                        mRcsProfile = UP_10;
+                        mRcsVersion = V_6;
+                        break;
+                    case 1:
+                        mRcsProfile = UP_23;
+                        mRcsVersion = V_9;
+                        break;
+                    default:
+                        Log.e(TAG, "invalid position:" + position);
+                        return;
+                }
+                mPref.edit().putString(RCS_PROFILE, mRcsProfile)
+                        .putString(RCS_VERSION, mRcsVersion)
+                        .commit();
+            }
+
+            @Override
+            public void onNothingSelected(AdapterView<?> parent) {
+                // TODO Auto-generated method stub
+            }
+        });
+        mRcsProfile = mPref.getString(RCS_PROFILE, UP_10);
+        mRcsVersion = mPref.getString(RCS_VERSION, V_6);
+        mRcsProfileSpinner.setSelection(mRcsProfile.equals(UP_10) ? 0 : 1);
+    }
+
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
         if (item.getItemId() == android.R.id.home) {
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 bbecbc2..6835fea 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
@@ -106,7 +106,7 @@
 
                             public void onComplete() {
                                 Log.i(TAG, "onComplete()");
-                                mCapabilityResult.append("complete");
+                                mCapabilityResult.append("onComplete");
 
                             }
 
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 4489349..ec048b8 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
@@ -71,7 +71,8 @@
     private ChatManager(Context context, int subId) {
         mContext = context;
         mSubId = subId;
-        mProvisioningController = StaticConfigProvisioningController.createForSubscriptionId(subId);
+        mProvisioningController = StaticConfigProvisioningController.createForSubscriptionId(subId,
+                context);
         ImsManager imsManager = mContext.getSystemService(ImsManager.class);
         mRegistrationController = new RegistrationControllerImpl(subId, mFixedThreadPool,
                 imsManager);
diff --git a/testapps/TestRcsApp/aosp_test_rcsclient/src/com/android/libraries/rcs/simpleclient/provisioning/StaticConfigProvisioningController.java b/testapps/TestRcsApp/aosp_test_rcsclient/src/com/android/libraries/rcs/simpleclient/provisioning/StaticConfigProvisioningController.java
index 83f41d4..b8b1f21 100644
--- a/testapps/TestRcsApp/aosp_test_rcsclient/src/com/android/libraries/rcs/simpleclient/provisioning/StaticConfigProvisioningController.java
+++ b/testapps/TestRcsApp/aosp_test_rcsclient/src/com/android/libraries/rcs/simpleclient/provisioning/StaticConfigProvisioningController.java
@@ -16,6 +16,8 @@
 
 package com.android.libraries.rcs.simpleclient.provisioning;
 
+import android.content.Context;
+import android.content.SharedPreferences;
 import android.os.Build.VERSION_CODES;
 import android.telephony.SubscriptionManager;
 import android.telephony.ims.ImsException;
@@ -45,29 +47,35 @@
     private Optional<RcsProvisioningCallback> storedCallback = Optional.empty();
     private Optional<ProvisioningStateChangeCallback> stateChangeCallback = Optional.empty();
     private Optional<byte[]> configXmlData = Optional.empty();
+    private Context context;
 
-    private StaticConfigProvisioningController(int subId) {
+    private StaticConfigProvisioningController(int subId, Context context) {
         this.provisioningManager = ProvisioningManager.createForSubscriptionId(subId);
+        this.context = context;
     }
 
     @RequiresApi(api = VERSION_CODES.R)
-    public static StaticConfigProvisioningController createWithDefaultSubscriptionId() {
+    public static StaticConfigProvisioningController createWithDefaultSubscriptionId(
+            Context context) {
         return new StaticConfigProvisioningController(
-                SubscriptionManager.getActiveDataSubscriptionId());
+                SubscriptionManager.getActiveDataSubscriptionId(), context);
     }
 
-    public static StaticConfigProvisioningController createForSubscriptionId(int subscriptionId) {
-        return new StaticConfigProvisioningController(subscriptionId);
+    /** Create ProvisioningController */
+    public static StaticConfigProvisioningController createForSubscriptionId(int subscriptionId,
+            Context context) {
+        return new StaticConfigProvisioningController(subscriptionId, context);
     }
 
     // Static configuration.
-    private static RcsClientConfiguration getDefaultClientConfiguration() {
+    private RcsClientConfiguration getDefaultClientConfiguration() {
+        SharedPreferences pref = context.getSharedPreferences("CONFIG", context.MODE_PRIVATE);
 
         return new RcsClientConfiguration(
-                /*rcsVersion=*/ "6.0",
-                /*rcsProfile=*/ "UP_2.3",
+                /*rcsVersion=*/ pref.getString("RCS_VERSION", "6.0"),
+                /*rcsProfile=*/ pref.getString("RCS_PROFILE", "UP_1.0"),
                 /*clientVendor=*/ "Goog",
-                /*clientVersion=*/ "RCSAndrd-1.0");//"RCS fake library 1.0");
+                /*clientVersion=*/ "RCSAndrd-1.0");
     }
 
     @Override