Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2900d4d1 authored by Chad Brubaker's avatar Chad Brubaker
Browse files

Add single use App specific incoming SMSes

This allows applications to request that an upcoming incoming SMS be
routed directly to the calling application and to do so without
needing the RECEIVE_SMS permission.

This is especially important for ephemeral applications which we do not
want to have the ability to get the RECEIVE_SMS permission but do want
to support SMS based phone number verification. Ephemeral apps can use
this API to receive and SMS from their backend but will not be able to
access other SMSes on the device.

This is done by providing the app a token which when included in a
subsequent SMS message causes the application provided PendingIntent to
be sent with the SMS message data attached.

Test: Verified that an SMS containing the code is routed to the app.
Test: runtest --path GsmInboundHandlerTest.java
Test: cts-tradefed run cts -m CtsPermission2TestCases

Bug: 33047670
Change-Id: Iea60bfd1d3f9b8f013b34a82a480c65006416c4c
parent 7f9d210e
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -37584,6 +37584,7 @@ package android.telephony {
  }
  public final class SmsManager {
    method public java.lang.String createAppSpecificSmsToken(android.app.PendingIntent);
    method public java.util.ArrayList<java.lang.String> divideMessage(java.lang.String);
    method public void downloadMultimediaMessage(android.content.Context, java.lang.String, android.net.Uri, android.os.Bundle, android.app.PendingIntent);
    method public android.os.Bundle getCarrierConfigValues();
+1 −0
Original line number Diff line number Diff line
@@ -40664,6 +40664,7 @@ package android.telephony {
  }
  public final class SmsManager {
    method public java.lang.String createAppSpecificSmsToken(android.app.PendingIntent);
    method public java.util.ArrayList<java.lang.String> divideMessage(java.lang.String);
    method public void downloadMultimediaMessage(android.content.Context, java.lang.String, android.net.Uri, android.os.Bundle, android.app.PendingIntent);
    method public android.os.Bundle getCarrierConfigValues();
+1 −0
Original line number Diff line number Diff line
@@ -37678,6 +37678,7 @@ package android.telephony {
  }
  public final class SmsManager {
    method public java.lang.String createAppSpecificSmsToken(android.app.PendingIntent);
    method public java.util.ArrayList<java.lang.String> divideMessage(java.lang.String);
    method public void downloadMultimediaMessage(android.content.Context, java.lang.String, android.net.Uri, android.os.Bundle, android.app.PendingIntent);
    method public android.os.Bundle getCarrierConfigValues();
+12 −0
Original line number Diff line number Diff line
@@ -447,4 +447,16 @@ interface ISms {
    void sendStoredMultipartText(int subId, String callingPkg, in Uri messageUri,
                String scAddress, in List<PendingIntent> sentIntents,
                in List<PendingIntent> deliveryIntents);

    /**
     * Create an app-only incoming SMS request for the calling package.
     *
     * If an incoming text contains the token returned by this method the provided
     * <code>PendingIntent</code> will be sent containing the SMS data.
     *
     * @param subId the SIM id.
     * @param callingPkg the package name of the calling app.
     * @param intent PendingIntent to be sent when an SMS is received containing the token.
     */
    String createAppSpecificSmsToken(int subId, String callingPkg, in PendingIntent intent);
}