diff --git a/play-services-basement/src/main/java/org/microg/gms/common/GmsService.java b/play-services-basement/src/main/java/org/microg/gms/common/GmsService.java
index 25d08f1f00..7493a9d03d 100644
--- a/play-services-basement/src/main/java/org/microg/gms/common/GmsService.java
+++ b/play-services-basement/src/main/java/org/microg/gms/common/GmsService.java
@@ -138,7 +138,7 @@ public enum GmsService {
AD_CONSENT_LOOKUP(195, "com.google.android.gms.ads.service.CONSENT_LOOKUP"),
CREDENTIAL_MANAGER(196, "com.google.android.gms.credential.manager.service.firstparty.START"),
PHONE_INTERNAL(197, "com.google.android.gms.auth.api.phone.service.InternalService.START"),
- PAY(198, "com.google.android.gms.pay.service.BIND"),
+ PAY(198, "com.google.android.gms.pay.service.BIND", "com.google.android.gms.pay.service.THIRD_PARTY"),
ASTERISM(199, "com.google.android.gms.asterism.service.START"),
MODULE_RESTORE(201, "com.google.android.gms.backup.GMS_MODULE_RESTORE"),
FACS_CACHE(202, "com.google.android.gms.facs.cache.service.START"),
diff --git a/play-services-pay/build.gradle b/play-services-pay/build.gradle
index 9316c929e2..0441efdfd4 100644
--- a/play-services-pay/build.gradle
+++ b/play-services-pay/build.gradle
@@ -38,4 +38,5 @@ dependencies {
api project(':play-services-base')
implementation "androidx.annotation:annotation:$annotationVersion"
+ annotationProcessor project(':safe-parcel-processor')
}
diff --git a/play-services-pay/core/src/main/AndroidManifest.xml b/play-services-pay/core/src/main/AndroidManifest.xml
index 54279f4795..6dcde5f10b 100644
--- a/play-services-pay/core/src/main/AndroidManifest.xml
+++ b/play-services-pay/core/src/main/AndroidManifest.xml
@@ -1,5 +1,4 @@
-
-
@@ -7,23 +6,34 @@
+ android:name="com.google.android.gms.pay.main.PayActivity"
+ android:exported="true"
+ android:process=":ui"
+ android:targetActivity="org.microg.gms.pay.PayActivity">
-
-
-
+
+
+
+
-
+
+
+
+
+
+
+
+
diff --git a/play-services-pay/core/src/main/kotlin/com/google/android/gms/pay/service/PayThirdPartyService.kt b/play-services-pay/core/src/main/kotlin/com/google/android/gms/pay/service/PayThirdPartyService.kt
new file mode 100644
index 0000000000..b6dbc18625
--- /dev/null
+++ b/play-services-pay/core/src/main/kotlin/com/google/android/gms/pay/service/PayThirdPartyService.kt
@@ -0,0 +1,86 @@
+package com.google.android.gms.pay.service
+
+import android.util.Log
+import com.google.android.gms.common.Feature
+import com.google.android.gms.common.api.CommonStatusCodes
+import com.google.android.gms.common.api.Status
+import com.google.android.gms.common.internal.ConnectionInfo
+import com.google.android.gms.common.internal.GetServiceRequest
+import com.google.android.gms.common.internal.IGmsCallbacks
+import com.google.android.gms.pay.CheckReadinessForEmoneyRequest
+import com.google.android.gms.pay.GetMdocCredentialRequest
+import com.google.android.gms.pay.GetPayApiAvailabilityStatusRequest
+import com.google.android.gms.pay.GetPendingIntentForWalletOnWearRequest
+import com.google.android.gms.pay.NotifyCardTapEventRequest
+import com.google.android.gms.pay.NotifyEmoneyCardStatusUpdateRequest
+import com.google.android.gms.pay.PushEmoneyCardRequest
+import com.google.android.gms.pay.SavePassesRequest
+import com.google.android.gms.pay.SyncBundleRequest
+import com.google.android.gms.pay.internal.IPayServiceCallbacks
+import com.google.android.gms.pay.internal.IThirdPartyPayService
+import org.microg.gms.BaseService
+import org.microg.gms.common.GmsService
+
+
+private const val TAG = "PayThirdPartyService"
+
+class PayThirdPartyService : BaseService(TAG, GmsService.PAY) {
+
+ override fun handleServiceRequest(callback: IGmsCallbacks, request: GetServiceRequest, service: GmsService) {
+ runCatching {
+ Log.d(TAG, "handleServiceRequest: ")
+ callback.onPostInitCompleteWithConnectionInfo(CommonStatusCodes.SUCCESS, PayThirdPartyServiceImpl().asBinder(), ConnectionInfo().apply {
+ features = arrayOf(Feature("pay_get_pay_api_availability_status", 3),
+ Feature("pay_save_passes", 5),
+ Feature("pay_save_passes_jwt", 3),
+ Feature("pay_sync_bundle", 2),
+ Feature("pay_get_pending_intent_for_wallet_on_wear", 2),
+ Feature("pay_get_mdoc_credential_pending_intent", 1),
+ Feature("pay_notify_card_tap_event", 1),
+ Feature("pay_check_readiness_for_emoney", 1),
+ Feature("pay_push_emoney_card", 1),
+ Feature("pay_notify_emoney_card_status_update", 1)
+ )
+ })
+ }
+ }
+}
+
+class PayThirdPartyServiceImpl : IThirdPartyPayService.Stub() {
+ override fun getPayApiAvailabilityStatus(request: GetPayApiAvailabilityStatusRequest?, callback: IPayServiceCallbacks) {
+ callback.onGetPayApiAvailabilityStatus(Status.SUCCESS, 2)
+ }
+
+ override fun savePasses(request: SavePassesRequest?, callback: IPayServiceCallbacks) {
+ callback.onSavePasses(Status(CommonStatusCodes.SERVICE_MISSING))
+ }
+
+ override fun syncBundle(request: SyncBundleRequest?, callback: IPayServiceCallbacks?) {
+ Log.d(TAG, "syncBundle Not yet implemented")
+ }
+
+ override fun getPendingForWalletOnWear(request: GetPendingIntentForWalletOnWearRequest?, callback: IPayServiceCallbacks?) {
+ Log.d(TAG, "getPendingForWalletOnWear Not yet implemented")
+ }
+
+ override fun getMdocCredential(request: GetMdocCredentialRequest?, callback: IPayServiceCallbacks?) {
+ Log.d(TAG, "getMdocCredential Not yet implemented")
+ }
+
+ override fun notifyCardTapEvent(request: NotifyCardTapEventRequest?, callback: IPayServiceCallbacks?) {
+ Log.d(TAG, "notifyCardTapEvent Not yet implemented")
+ }
+
+ override fun checkReadinessForEmoney(request: CheckReadinessForEmoneyRequest?, callback: IPayServiceCallbacks?) {
+ Log.d(TAG, "checkReadinessForEmoney Not yet implemented")
+ }
+
+ override fun pushEmoneyCard(request: PushEmoneyCardRequest?, callback: IPayServiceCallbacks?) {
+ Log.d(TAG, "pushEmoneyCard Not yet implemented")
+ }
+
+ override fun notifyEmoneyCardStatusUpdate(request: NotifyEmoneyCardStatusUpdateRequest?, callback: IPayServiceCallbacks?) {
+ Log.d(TAG, "notifyEmoneyCardStatusUpdate Not yet implemented")
+ }
+
+}
\ No newline at end of file
diff --git a/play-services-pay/src/main/aidl/com/google/android/gms/pay/CheckReadinessForEmoneyRequest.aidl b/play-services-pay/src/main/aidl/com/google/android/gms/pay/CheckReadinessForEmoneyRequest.aidl
new file mode 100644
index 0000000000..650f6d40c7
--- /dev/null
+++ b/play-services-pay/src/main/aidl/com/google/android/gms/pay/CheckReadinessForEmoneyRequest.aidl
@@ -0,0 +1,3 @@
+package com.google.android.gms.pay;
+
+parcelable CheckReadinessForEmoneyRequest;
\ No newline at end of file
diff --git a/play-services-pay/src/main/aidl/com/google/android/gms/pay/GetMdocCredentialRequest.aidl b/play-services-pay/src/main/aidl/com/google/android/gms/pay/GetMdocCredentialRequest.aidl
new file mode 100644
index 0000000000..8c2b01fa74
--- /dev/null
+++ b/play-services-pay/src/main/aidl/com/google/android/gms/pay/GetMdocCredentialRequest.aidl
@@ -0,0 +1,3 @@
+package com.google.android.gms.pay;
+
+parcelable GetMdocCredentialRequest;
\ No newline at end of file
diff --git a/play-services-pay/src/main/aidl/com/google/android/gms/pay/GetPayApiAvailabilityStatusRequest.aidl b/play-services-pay/src/main/aidl/com/google/android/gms/pay/GetPayApiAvailabilityStatusRequest.aidl
new file mode 100644
index 0000000000..5d2aa8240f
--- /dev/null
+++ b/play-services-pay/src/main/aidl/com/google/android/gms/pay/GetPayApiAvailabilityStatusRequest.aidl
@@ -0,0 +1,3 @@
+package com.google.android.gms.pay;
+
+parcelable GetPayApiAvailabilityStatusRequest;
\ No newline at end of file
diff --git a/play-services-pay/src/main/aidl/com/google/android/gms/pay/GetPendingIntentForWalletOnWearRequest.aidl b/play-services-pay/src/main/aidl/com/google/android/gms/pay/GetPendingIntentForWalletOnWearRequest.aidl
new file mode 100644
index 0000000000..06006c91a7
--- /dev/null
+++ b/play-services-pay/src/main/aidl/com/google/android/gms/pay/GetPendingIntentForWalletOnWearRequest.aidl
@@ -0,0 +1,3 @@
+package com.google.android.gms.pay;
+
+parcelable GetPendingIntentForWalletOnWearRequest;
\ No newline at end of file
diff --git a/play-services-pay/src/main/aidl/com/google/android/gms/pay/GetWalletStatusResponse.aidl b/play-services-pay/src/main/aidl/com/google/android/gms/pay/GetWalletStatusResponse.aidl
new file mode 100644
index 0000000000..789caac8d9
--- /dev/null
+++ b/play-services-pay/src/main/aidl/com/google/android/gms/pay/GetWalletStatusResponse.aidl
@@ -0,0 +1,3 @@
+package com.google.android.gms.pay;
+
+parcelable GetWalletStatusResponse;
\ No newline at end of file
diff --git a/play-services-pay/src/main/aidl/com/google/android/gms/pay/NotifyCardTapEventRequest.aidl b/play-services-pay/src/main/aidl/com/google/android/gms/pay/NotifyCardTapEventRequest.aidl
new file mode 100644
index 0000000000..7d1635c152
--- /dev/null
+++ b/play-services-pay/src/main/aidl/com/google/android/gms/pay/NotifyCardTapEventRequest.aidl
@@ -0,0 +1,3 @@
+package com.google.android.gms.pay;
+
+parcelable NotifyCardTapEventRequest;
\ No newline at end of file
diff --git a/play-services-pay/src/main/aidl/com/google/android/gms/pay/NotifyEmoneyCardStatusUpdateRequest.aidl b/play-services-pay/src/main/aidl/com/google/android/gms/pay/NotifyEmoneyCardStatusUpdateRequest.aidl
new file mode 100644
index 0000000000..54e64ab406
--- /dev/null
+++ b/play-services-pay/src/main/aidl/com/google/android/gms/pay/NotifyEmoneyCardStatusUpdateRequest.aidl
@@ -0,0 +1,3 @@
+package com.google.android.gms.pay;
+
+parcelable NotifyEmoneyCardStatusUpdateRequest;
\ No newline at end of file
diff --git a/play-services-pay/src/main/aidl/com/google/android/gms/pay/PushEmoneyCardRequest.aidl b/play-services-pay/src/main/aidl/com/google/android/gms/pay/PushEmoneyCardRequest.aidl
new file mode 100644
index 0000000000..471277aede
--- /dev/null
+++ b/play-services-pay/src/main/aidl/com/google/android/gms/pay/PushEmoneyCardRequest.aidl
@@ -0,0 +1,3 @@
+package com.google.android.gms.pay;
+
+parcelable PushEmoneyCardRequest;
\ No newline at end of file
diff --git a/play-services-pay/src/main/aidl/com/google/android/gms/pay/SavePassesRequest.aidl b/play-services-pay/src/main/aidl/com/google/android/gms/pay/SavePassesRequest.aidl
new file mode 100644
index 0000000000..af8c464793
--- /dev/null
+++ b/play-services-pay/src/main/aidl/com/google/android/gms/pay/SavePassesRequest.aidl
@@ -0,0 +1,3 @@
+package com.google.android.gms.pay;
+
+parcelable SavePassesRequest;
\ No newline at end of file
diff --git a/play-services-pay/src/main/aidl/com/google/android/gms/pay/SyncBundleRequest.aidl b/play-services-pay/src/main/aidl/com/google/android/gms/pay/SyncBundleRequest.aidl
new file mode 100644
index 0000000000..112095437f
--- /dev/null
+++ b/play-services-pay/src/main/aidl/com/google/android/gms/pay/SyncBundleRequest.aidl
@@ -0,0 +1,3 @@
+package com.google.android.gms.pay;
+
+parcelable SyncBundleRequest;
\ No newline at end of file
diff --git a/play-services-pay/src/main/aidl/com/google/android/gms/pay/internal/IPayServiceCallbacks.aidl b/play-services-pay/src/main/aidl/com/google/android/gms/pay/internal/IPayServiceCallbacks.aidl
new file mode 100644
index 0000000000..9d93117945
--- /dev/null
+++ b/play-services-pay/src/main/aidl/com/google/android/gms/pay/internal/IPayServiceCallbacks.aidl
@@ -0,0 +1,21 @@
+package com.google.android.gms.pay.internal;
+
+import android.app.PendingIntent;
+import com.google.android.gms.common.api.Status;
+import com.google.android.gms.pay.GetWalletStatusResponse;
+
+
+interface IPayServiceCallbacks {
+ void onStatusResult(in Status status, in byte[] bArr) = 14;
+
+ void onSavePasses(in Status status) = 17;
+
+ void onGetPayApiAvailabilityStatus(in Status status, int i) = 19;
+
+ void onGetPendingIntent(in Status status, in PendingIntent pendingIntent) = 3;
+
+ void onError(in Status status) = 1;
+
+ void onGetWalletStatus(in Status status, in GetWalletStatusResponse getWalletStatusResponse) = 21;
+
+}
\ No newline at end of file
diff --git a/play-services-pay/src/main/aidl/com/google/android/gms/pay/internal/IThirdPartyPayService.aidl b/play-services-pay/src/main/aidl/com/google/android/gms/pay/internal/IThirdPartyPayService.aidl
new file mode 100644
index 0000000000..3d8b61e8df
--- /dev/null
+++ b/play-services-pay/src/main/aidl/com/google/android/gms/pay/internal/IThirdPartyPayService.aidl
@@ -0,0 +1,24 @@
+package com.google.android.gms.pay.internal;
+
+import com.google.android.gms.pay.GetPayApiAvailabilityStatusRequest;
+import com.google.android.gms.pay.internal.IPayServiceCallbacks;
+import com.google.android.gms.pay.SavePassesRequest;
+import com.google.android.gms.pay.SyncBundleRequest;
+import com.google.android.gms.pay.CheckReadinessForEmoneyRequest;
+import com.google.android.gms.pay.GetMdocCredentialRequest;
+import com.google.android.gms.pay.GetPendingIntentForWalletOnWearRequest;
+import com.google.android.gms.pay.NotifyCardTapEventRequest;
+import com.google.android.gms.pay.PushEmoneyCardRequest;
+import com.google.android.gms.pay.NotifyEmoneyCardStatusUpdateRequest;
+
+interface IThirdPartyPayService {
+ void getPayApiAvailabilityStatus(in GetPayApiAvailabilityStatusRequest request, in IPayServiceCallbacks callback) = 1;
+ void savePasses(in SavePassesRequest request, in IPayServiceCallbacks callback) = 2;
+ void syncBundle(in SyncBundleRequest request, in IPayServiceCallbacks callback) = 3;
+ void getPendingForWalletOnWear(in GetPendingIntentForWalletOnWearRequest request,in IPayServiceCallbacks callback) = 4;
+ void getMdocCredential(in GetMdocCredentialRequest request, in IPayServiceCallbacks callback) = 5;
+ void notifyCardTapEvent(in NotifyCardTapEventRequest request, in IPayServiceCallbacks callback) = 6;
+ void checkReadinessForEmoney(in CheckReadinessForEmoneyRequest request, in IPayServiceCallbacks callback) = 7;
+ void pushEmoneyCard(in PushEmoneyCardRequest request, in IPayServiceCallbacks callback) = 8;
+ void notifyEmoneyCardStatusUpdate(in NotifyEmoneyCardStatusUpdateRequest request, in IPayServiceCallbacks callback) = 9;
+}
\ No newline at end of file
diff --git a/play-services-pay/src/main/java/com/google/android/gms/pay/CheckReadinessForEmoneyRequest.java b/play-services-pay/src/main/java/com/google/android/gms/pay/CheckReadinessForEmoneyRequest.java
new file mode 100644
index 0000000000..7c250d4d73
--- /dev/null
+++ b/play-services-pay/src/main/java/com/google/android/gms/pay/CheckReadinessForEmoneyRequest.java
@@ -0,0 +1,28 @@
+package com.google.android.gms.pay;
+
+import android.os.Parcel;
+
+import com.google.android.gms.common.internal.safeparcel.AbstractSafeParcelable;
+import com.google.android.gms.common.internal.safeparcel.SafeParcelable;
+import com.google.android.gms.common.internal.safeparcel.SafeParcelableCreatorAndWriter;
+
+@SafeParcelable.Class
+public class CheckReadinessForEmoneyRequest extends AbstractSafeParcelable {
+ @Field(1)
+ public String serviceProvider;
+ @Field(2)
+ public String accountName;
+
+ @Constructor
+ public CheckReadinessForEmoneyRequest(@Param(1) String serviceProvider, @Param(2) String accountName) {
+ this.serviceProvider = serviceProvider;
+ this.accountName = accountName;
+ }
+
+ @Override
+ public void writeToParcel(Parcel out, int flags) {
+ CREATOR.writeToParcel(this, out, flags);
+ }
+
+ public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(CheckReadinessForEmoneyRequest.class);
+}
diff --git a/play-services-pay/src/main/java/com/google/android/gms/pay/GetMdocCredentialRequest.java b/play-services-pay/src/main/java/com/google/android/gms/pay/GetMdocCredentialRequest.java
new file mode 100644
index 0000000000..7ab743c2df
--- /dev/null
+++ b/play-services-pay/src/main/java/com/google/android/gms/pay/GetMdocCredentialRequest.java
@@ -0,0 +1,36 @@
+package com.google.android.gms.pay;
+
+import android.os.Parcel;
+
+import com.google.android.gms.common.internal.safeparcel.AbstractSafeParcelable;
+import com.google.android.gms.common.internal.safeparcel.SafeParcelable;
+import com.google.android.gms.common.internal.safeparcel.SafeParcelableCreatorAndWriter;
+
+@SafeParcelable.Class
+public class GetMdocCredentialRequest extends AbstractSafeParcelable {
+ @Field(1)
+ public String unknownFieldA;
+ @Field(2)
+ public byte[] unknownFieldB;
+ @Field(5)
+ public byte[] unknownFieldC;
+
+ @Constructor
+ public GetMdocCredentialRequest(@Param(1) String unknownFieldA, @Param(2) byte[] unknownFieldB, @Param(5) byte[] unknownFieldC) {
+ this.unknownFieldA = unknownFieldA;
+ this.unknownFieldB = unknownFieldB;
+ this.unknownFieldC = unknownFieldC;
+ }
+
+ @Constructor
+ public GetMdocCredentialRequest() {
+
+ }
+
+ @Override
+ public void writeToParcel(Parcel out, int flags) {
+ CREATOR.writeToParcel(this, out, flags);
+ }
+
+ public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(GetMdocCredentialRequest.class);
+}
diff --git a/play-services-pay/src/main/java/com/google/android/gms/pay/GetPayApiAvailabilityStatusRequest.java b/play-services-pay/src/main/java/com/google/android/gms/pay/GetPayApiAvailabilityStatusRequest.java
new file mode 100644
index 0000000000..0c4fe9968c
--- /dev/null
+++ b/play-services-pay/src/main/java/com/google/android/gms/pay/GetPayApiAvailabilityStatusRequest.java
@@ -0,0 +1,33 @@
+package com.google.android.gms.pay;
+
+import android.os.Parcel;
+
+import com.google.android.gms.common.internal.safeparcel.AbstractSafeParcelable;
+import com.google.android.gms.common.internal.safeparcel.SafeParcelable;
+import com.google.android.gms.common.internal.safeparcel.SafeParcelableCreatorAndWriter;
+
+
+@SafeParcelable.Class
+public class GetPayApiAvailabilityStatusRequest extends AbstractSafeParcelable {
+ @Field(1)
+ public int requestType;
+
+ @Constructor
+ public GetPayApiAvailabilityStatusRequest(@Param(1) int requestType) {
+ this.requestType = requestType;
+ }
+
+ @Override
+ public void writeToParcel(Parcel out, int flags) {
+ CREATOR.writeToParcel(this, out, flags);
+ }
+
+ public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(GetPayApiAvailabilityStatusRequest.class);
+
+ @Override
+ public String toString() {
+ return "GetPayApiAvailabilityStatusRequest{" +
+ "requestType=" + requestType +
+ '}';
+ }
+}
diff --git a/play-services-pay/src/main/java/com/google/android/gms/pay/GetPendingIntentForWalletOnWearRequest.java b/play-services-pay/src/main/java/com/google/android/gms/pay/GetPendingIntentForWalletOnWearRequest.java
new file mode 100644
index 0000000000..0d0d1e5732
--- /dev/null
+++ b/play-services-pay/src/main/java/com/google/android/gms/pay/GetPendingIntentForWalletOnWearRequest.java
@@ -0,0 +1,28 @@
+package com.google.android.gms.pay;
+
+import android.os.Parcel;
+
+import com.google.android.gms.common.internal.safeparcel.AbstractSafeParcelable;
+import com.google.android.gms.common.internal.safeparcel.SafeParcelable;
+import com.google.android.gms.common.internal.safeparcel.SafeParcelableCreatorAndWriter;
+
+@SafeParcelable.Class
+public class GetPendingIntentForWalletOnWearRequest extends AbstractSafeParcelable {
+ @Field(2)
+ public String wearNodeId;
+ @Field(3)
+ public int intentSource;
+
+ @Constructor
+ public GetPendingIntentForWalletOnWearRequest(@Param(2) String wearNodeId, @Param(3) int intentSource) {
+ this.wearNodeId = wearNodeId;
+ this.intentSource = intentSource;
+ }
+
+ @Override
+ public void writeToParcel(Parcel out, int flags) {
+ CREATOR.writeToParcel(this, out, flags);
+ }
+
+ public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(GetPendingIntentForWalletOnWearRequest.class);
+}
diff --git a/play-services-pay/src/main/java/com/google/android/gms/pay/GetWalletStatusResponse.java b/play-services-pay/src/main/java/com/google/android/gms/pay/GetWalletStatusResponse.java
new file mode 100644
index 0000000000..fbb1c9caa4
--- /dev/null
+++ b/play-services-pay/src/main/java/com/google/android/gms/pay/GetWalletStatusResponse.java
@@ -0,0 +1,32 @@
+package com.google.android.gms.pay;
+
+import android.os.Parcel;
+
+import com.google.android.gms.common.internal.safeparcel.AbstractSafeParcelable;
+import com.google.android.gms.common.internal.safeparcel.SafeParcelable;
+import com.google.android.gms.common.internal.safeparcel.SafeParcelableCreatorAndWriter;
+
+@SafeParcelable.Class
+public class GetWalletStatusResponse extends AbstractSafeParcelable {
+ @Field(1)
+ public boolean a;
+ @Field(2)
+ public int[] b;
+
+ @Constructor
+ public GetWalletStatusResponse() {
+ }
+
+ @Constructor
+ public GetWalletStatusResponse(@Param(1) boolean a, @Param(2) int[] b) {
+ this.a = a;
+ this.b = b;
+ }
+
+ @Override
+ public void writeToParcel(Parcel out, int flags) {
+ CREATOR.writeToParcel(this, out, flags);
+ }
+
+ public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(GetWalletStatusResponse.class);
+}
diff --git a/play-services-pay/src/main/java/com/google/android/gms/pay/NotifyCardTapEventRequest.java b/play-services-pay/src/main/java/com/google/android/gms/pay/NotifyCardTapEventRequest.java
new file mode 100644
index 0000000000..cd5db4901c
--- /dev/null
+++ b/play-services-pay/src/main/java/com/google/android/gms/pay/NotifyCardTapEventRequest.java
@@ -0,0 +1,25 @@
+package com.google.android.gms.pay;
+
+import android.os.Parcel;
+
+import com.google.android.gms.common.internal.safeparcel.AbstractSafeParcelable;
+import com.google.android.gms.common.internal.safeparcel.SafeParcelable;
+import com.google.android.gms.common.internal.safeparcel.SafeParcelableCreatorAndWriter;
+
+@SafeParcelable.Class
+public class NotifyCardTapEventRequest extends AbstractSafeParcelable {
+ @Field(1)
+ public String eventJson;
+
+ @Constructor
+ public NotifyCardTapEventRequest(@Param(1) String eventJson) {
+ this.eventJson = eventJson;
+ }
+
+ @Override
+ public void writeToParcel(Parcel out, int flags) {
+ CREATOR.writeToParcel(this, out, flags);
+ }
+
+ public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(NotifyCardTapEventRequest.class);
+}
diff --git a/play-services-pay/src/main/java/com/google/android/gms/pay/NotifyEmoneyCardStatusUpdateRequest.java b/play-services-pay/src/main/java/com/google/android/gms/pay/NotifyEmoneyCardStatusUpdateRequest.java
new file mode 100644
index 0000000000..338b8cc736
--- /dev/null
+++ b/play-services-pay/src/main/java/com/google/android/gms/pay/NotifyEmoneyCardStatusUpdateRequest.java
@@ -0,0 +1,25 @@
+package com.google.android.gms.pay;
+
+import android.os.Parcel;
+
+import com.google.android.gms.common.internal.safeparcel.AbstractSafeParcelable;
+import com.google.android.gms.common.internal.safeparcel.SafeParcelable;
+import com.google.android.gms.common.internal.safeparcel.SafeParcelableCreatorAndWriter;
+
+@SafeParcelable.Class
+public class NotifyEmoneyCardStatusUpdateRequest extends AbstractSafeParcelable {
+ @Field(1)
+ public String eMoneyCardStatusUpdateJson;
+
+ @Constructor
+ public NotifyEmoneyCardStatusUpdateRequest(@Param(1) String eMoneyCardStatusUpdateJson) {
+ this.eMoneyCardStatusUpdateJson = eMoneyCardStatusUpdateJson;
+ }
+
+ @Override
+ public void writeToParcel(Parcel out, int flags) {
+ CREATOR.writeToParcel(this, out, flags);
+ }
+
+ public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(NotifyEmoneyCardStatusUpdateRequest.class);
+}
diff --git a/play-services-pay/src/main/java/com/google/android/gms/pay/PushEmoneyCardRequest.java b/play-services-pay/src/main/java/com/google/android/gms/pay/PushEmoneyCardRequest.java
new file mode 100644
index 0000000000..1ac76d79bd
--- /dev/null
+++ b/play-services-pay/src/main/java/com/google/android/gms/pay/PushEmoneyCardRequest.java
@@ -0,0 +1,25 @@
+package com.google.android.gms.pay;
+
+import android.os.Parcel;
+
+import com.google.android.gms.common.internal.safeparcel.AbstractSafeParcelable;
+import com.google.android.gms.common.internal.safeparcel.SafeParcelable;
+import com.google.android.gms.common.internal.safeparcel.SafeParcelableCreatorAndWriter;
+
+@SafeParcelable.Class
+public class PushEmoneyCardRequest extends AbstractSafeParcelable {
+ @Field(1)
+ public String eMoneyCardJson;
+
+ @Constructor
+ public PushEmoneyCardRequest(@Param(1) String eMoneyCardJson) {
+ this.eMoneyCardJson = eMoneyCardJson;
+ }
+
+ @Override
+ public void writeToParcel(Parcel out, int flags) {
+ CREATOR.writeToParcel(this, out, flags);
+ }
+
+ public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(PushEmoneyCardRequest.class);
+}
diff --git a/play-services-pay/src/main/java/com/google/android/gms/pay/SavePassesRequest.java b/play-services-pay/src/main/java/com/google/android/gms/pay/SavePassesRequest.java
new file mode 100644
index 0000000000..a9521aa90e
--- /dev/null
+++ b/play-services-pay/src/main/java/com/google/android/gms/pay/SavePassesRequest.java
@@ -0,0 +1,28 @@
+package com.google.android.gms.pay;
+
+import android.os.Parcel;
+
+import com.google.android.gms.common.internal.safeparcel.AbstractSafeParcelable;
+import com.google.android.gms.common.internal.safeparcel.SafeParcelable;
+import com.google.android.gms.common.internal.safeparcel.SafeParcelableCreatorAndWriter;
+
+@SafeParcelable.Class
+public class SavePassesRequest extends AbstractSafeParcelable {
+ @Field(1)
+ public String passesJson;
+ @Field(2)
+ public String jwtToken;
+
+ @Constructor
+ public SavePassesRequest(@Param(1) String passesJson, @Param(2) String jwtToken) {
+ this.passesJson = passesJson;
+ this.jwtToken = jwtToken;
+ }
+
+ @Override
+ public void writeToParcel(Parcel out, int flags) {
+ CREATOR.writeToParcel(this, out, flags);
+ }
+
+ public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(SavePassesRequest.class);
+}
diff --git a/play-services-pay/src/main/java/com/google/android/gms/pay/SyncBundleRequest.java b/play-services-pay/src/main/java/com/google/android/gms/pay/SyncBundleRequest.java
new file mode 100644
index 0000000000..53ddbd4d51
--- /dev/null
+++ b/play-services-pay/src/main/java/com/google/android/gms/pay/SyncBundleRequest.java
@@ -0,0 +1,25 @@
+package com.google.android.gms.pay;
+
+import android.os.Parcel;
+
+import com.google.android.gms.common.internal.safeparcel.AbstractSafeParcelable;
+import com.google.android.gms.common.internal.safeparcel.SafeParcelable;
+import com.google.android.gms.common.internal.safeparcel.SafeParcelableCreatorAndWriter;
+
+@SafeParcelable.Class
+public class SyncBundleRequest extends AbstractSafeParcelable {
+ @Field(1)
+ public String unknownField;
+
+ @Constructor
+ public SyncBundleRequest(@Param(1) String unknownField) {
+ this.unknownField = unknownField;
+ }
+
+ @Override
+ public void writeToParcel(Parcel out, int flags) {
+ CREATOR.writeToParcel(this, out, flags);
+ }
+
+ public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(SyncBundleRequest.class);
+}