Add interface for SMS message read for financial app mainline module.
Test: Test will be done with the mainline module implementation of this
service.
Bug: 111207447
Change-Id: I3fdd53adbe27ff69ab98b0862e6bf2ae3e6bba77
diff --git a/Android.bp b/Android.bp
index 3095ca5..b668a6b 100644
--- a/Android.bp
+++ b/Android.bp
@@ -294,6 +294,7 @@
"core/java/android/service/notification/IConditionListener.aidl",
"core/java/android/service/notification/IConditionProvider.aidl",
"core/java/android/service/settings/suggestions/ISuggestionService.aidl",
+ "core/java/android/service/sms/IFinancialSmsService.aidl",
"core/java/android/service/vr/IPersistentVrStateCallbacks.aidl",
"core/java/android/service/vr/IVrListener.aidl",
"core/java/android/service/vr/IVrManager.aidl",
diff --git a/api/system-current.txt b/api/system-current.txt
index 81a3aa1..138b610 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -3684,7 +3684,8 @@
}
public static abstract interface WifiManager.NetworkRequestMatchCallback {
- method public abstract void onMatch(java.util.List<android.net.wifi.WifiConfiguration>);
+ method public abstract void onAbort();
+ method public abstract void onMatch(java.util.List<android.net.wifi.ScanResult>);
method public abstract void onUserSelectionCallbackRegistration(android.net.wifi.WifiManager.NetworkRequestUserSelectionCallback);
method public abstract void onUserSelectionConnectFailure(android.net.wifi.WifiConfiguration);
method public abstract void onUserSelectionConnectSuccess(android.net.wifi.WifiConfiguration);
@@ -4641,6 +4642,7 @@
method public abstract void onAddRoleHolder(java.lang.String, java.lang.String, android.app.role.RoleManagerCallback);
method public final android.os.IBinder onBind(android.content.Intent);
method public abstract void onClearRoleHolders(java.lang.String, android.app.role.RoleManagerCallback);
+ method public abstract void onGrantDefaultRoles(android.app.role.RoleManagerCallback);
method public abstract void onRemoveRoleHolder(java.lang.String, java.lang.String, android.app.role.RoleManagerCallback);
field public static final java.lang.String SERVICE_INTERFACE = "android.rolecontrollerservice.RoleControllerService";
}
@@ -4795,8 +4797,8 @@
public abstract class ApnService extends android.app.Service {
ctor public ApnService();
- method public abstract java.util.List<android.content.ContentValues> onRestoreApns(int);
method public android.os.IBinder onBind(android.content.Intent);
+ method public abstract java.util.List<android.content.ContentValues> onRestoreApns(int);
}
}
@@ -5159,6 +5161,16 @@
}
+package android.service.sms {
+
+ public abstract class FinancialSmsService extends android.app.Service {
+ method public android.os.IBinder onBind(android.content.Intent);
+ method public abstract android.database.CursorWindow onGetSmsMessages(android.os.Bundle);
+ field public static final java.lang.String ACTION_FINANCIAL_SERVICE_INTENT = "android.service.sms.action.FINANCIAL_SERVICE_INTENT";
+ }
+
+}
+
package android.service.textclassifier {
public abstract class TextClassifierService extends android.app.Service {
diff --git a/core/java/android/service/sms/FinancialSmsService.java b/core/java/android/service/sms/FinancialSmsService.java
new file mode 100644
index 0000000..5fb7249
--- /dev/null
+++ b/core/java/android/service/sms/FinancialSmsService.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2018 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 android.service.sms;
+
+import static com.android.internal.util.function.pooled.PooledLambda.obtainMessage;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.annotation.SystemApi;
+import android.app.Service;
+import android.content.Intent;
+import android.database.CursorWindow;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Looper;
+import android.os.RemoteCallback;
+import android.os.RemoteException;
+
+/**
+ * A service to support sms messages read for financial apps.
+ *
+ * {@hide}
+ */
+@SystemApi
+public abstract class FinancialSmsService extends Service {
+
+ private static final String TAG = "FinancialSmsService";
+
+ /**
+ * The {@link Intent} action that must be declared as handled by a service
+ * in its manifest for the system to recognize it as a quota providing
+ * service.
+ */
+ public static final String ACTION_FINANCIAL_SERVICE_INTENT =
+ "android.service.sms.action.FINANCIAL_SERVICE_INTENT";
+
+ /** {@hide} **/
+ public static final String EXTRA_SMS_MSGS = "sms_messages";
+
+ private FinancialSmsServiceWrapper mWrapper;
+
+ private void getSmsMessages(RemoteCallback callback, Bundle params) {
+ final Bundle data = new Bundle();
+ CursorWindow smsMessages = onGetSmsMessages(params);
+ if (smsMessages != null) {
+ data.putParcelable(EXTRA_SMS_MSGS, smsMessages);
+ }
+ callback.sendResult(data);
+ }
+
+ private final Handler mHandler = new Handler(Looper.getMainLooper(), null, true);
+
+ /** @hide */
+ public FinancialSmsService() {
+ }
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ mWrapper = new FinancialSmsServiceWrapper();
+ }
+
+ @Override
+ public IBinder onBind(Intent intent) {
+ return mWrapper;
+ }
+
+ /**
+ * Get sms messages for financial apps.
+ *
+ * @param params parameters passed in by the calling app.
+ * @return the {@code CursorWindow} with all sms messages for the app to read.
+ *
+ * {@hide}
+ */
+ @Nullable
+ @SystemApi
+ public abstract CursorWindow onGetSmsMessages(@NonNull Bundle params);
+
+ private final class FinancialSmsServiceWrapper extends IFinancialSmsService.Stub {
+ @Override
+ public void getSmsMessages(RemoteCallback callback, Bundle params) throws RemoteException {
+ mHandler.sendMessage(obtainMessage(
+ FinancialSmsService::getSmsMessages,
+ FinancialSmsService.this,
+ callback, params));
+ }
+ }
+
+}
diff --git a/core/java/android/service/sms/IFinancialSmsService.aidl b/core/java/android/service/sms/IFinancialSmsService.aidl
new file mode 100644
index 0000000..caabe58
--- /dev/null
+++ b/core/java/android/service/sms/IFinancialSmsService.aidl
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2018 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 android.service.sms;
+
+import android.os.Bundle;
+import android.os.RemoteCallback;
+
+/**
+ * Service used by financial apps to read sms messages.
+ *
+ * @hide
+ */
+oneway interface IFinancialSmsService
+{
+ void getSmsMessages(in RemoteCallback callback, in Bundle params);
+}
\ No newline at end of file
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index af814d9..e2dad94 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -3024,6 +3024,13 @@
<permission android:name="android.permission.BIND_TV_INPUT"
android:protectionLevel="signature|privileged" />
+ <!-- Must be required by an {@link android.service.sms.FinancialSmsService}
+ to ensure that only the system can bind to it.
+ @hide This is not a third-party API (intended for OEMs and system apps).
+ -->
+ <permission android:name="android.permission.BIND_FINANCIAL_SMS_SERVICE"
+ android:protectionLevel="signature" />
+
<!-- @SystemApi
Must be required by a {@link com.android.media.tv.remoteprovider.TvRemoteProvider}
to ensure that only the system can bind to it.