Add a subId extra to the respond via SMS intent.

In order to support replying to a caller via the same SIM that the
incoming call came through, add an extra to the respond via SMS intent
with the subId.

Bug: 18275919
Change-Id: I48ea3246194cb957045f12fea92a473ac0edaa23
diff --git a/src/com/android/server/telecom/PhoneAccountRegistrar.java b/src/com/android/server/telecom/PhoneAccountRegistrar.java
index 3550201..a156f6a 100644
--- a/src/com/android/server/telecom/PhoneAccountRegistrar.java
+++ b/src/com/android/server/telecom/PhoneAccountRegistrar.java
@@ -130,7 +130,7 @@
                 !TextUtils.isDigitsOnly(accountHandle.getId())) {
             // Since no decimals or negative numbers can be valid subscription ids, only a string of
             // numbers can be subscription id
-            return -1;
+            return SubscriptionManager.INVALID_SUB_ID;
         }
         return Integer.parseInt(accountHandle.getId());
     }
diff --git a/src/com/android/server/telecom/RespondViaSmsManager.java b/src/com/android/server/telecom/RespondViaSmsManager.java
index dcfa19a..ae7e713 100644
--- a/src/com/android/server/telecom/RespondViaSmsManager.java
+++ b/src/com/android/server/telecom/RespondViaSmsManager.java
@@ -18,6 +18,7 @@
 
 // TODO: Needed for move to system service: import com.android.internal.R;
 import com.android.internal.os.SomeArgs;
+import com.android.internal.telephony.PhoneConstants;
 import com.android.internal.telephony.SmsApplication;
 
 import android.content.ComponentName;
@@ -29,6 +30,7 @@
 import android.os.Handler;
 import android.os.Message;
 import android.telecom.Response;
+import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
 import android.widget.Toast;
 
@@ -140,8 +142,12 @@
     @Override
     public void onIncomingCallRejected(Call call, boolean rejectWithMessage, String textMessage) {
         if (rejectWithMessage && call.getHandle() != null) {
+            PhoneAccountRegistrar phoneAccountRegistrar =
+                    CallsManager.getInstance().getPhoneAccountRegistrar();
+            int subId = phoneAccountRegistrar.getSubscriptionIdForPhoneAccount(
+                    call.getTargetPhoneAccount());
             rejectCallWithMessage(call.getContext(), call.getHandle().getSchemeSpecificPart(),
-                    textMessage);
+                    textMessage, subId);
         }
     }
 
@@ -174,7 +180,8 @@
     /**
      * Reject the call with the specified message. If message is null this call is ignored.
      */
-    private void rejectCallWithMessage(Context context, String phoneNumber, String textMessage) {
+    private void rejectCallWithMessage(Context context, String phoneNumber, String textMessage,
+            int subId) {
         if (textMessage != null) {
             final ComponentName component =
                     SmsApplication.getDefaultRespondViaMessageApplication(context,
@@ -184,6 +191,9 @@
                 final Uri uri = Uri.fromParts(Constants.SCHEME_SMSTO, phoneNumber, null);
                 final Intent intent = new Intent(TelephonyManager.ACTION_RESPOND_VIA_MESSAGE, uri);
                 intent.putExtra(Intent.EXTRA_TEXT, textMessage);
+                if (subId != SubscriptionManager.INVALID_SUB_ID) {
+                    intent.putExtra(PhoneConstants.SUBSCRIPTION_KEY, subId);
+                }
 
                 SomeArgs args = SomeArgs.obtain();
                 args.arg1 = phoneNumber;