aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java/moe/yuuta/ext/IResultListener.java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/moe/yuuta/ext/IResultListener.java')
-rw-r--r--app/src/main/java/moe/yuuta/ext/IResultListener.java102
1 files changed, 102 insertions, 0 deletions
diff --git a/app/src/main/java/moe/yuuta/ext/IResultListener.java b/app/src/main/java/moe/yuuta/ext/IResultListener.java
new file mode 100644
index 0000000..706b34a
--- /dev/null
+++ b/app/src/main/java/moe/yuuta/ext/IResultListener.java
@@ -0,0 +1,102 @@
+package moe.yuuta.ext;
+
+import android.os.Binder;
+import android.os.IBinder;
+import android.os.IInterface;
+import android.os.Parcel;
+import android.os.RemoteException;
+
+import androidx.annotation.NonNull;
+
+import moe.yuuta.gplicense.util.Base64;
+import moe.yuuta.gplicense.util.Base64DecoderException;
+
+public interface IResultListener extends IInterface {
+ abstract class Stub extends Binder implements IResultListener {
+ private static final String DESCRIPTOR;
+
+ static {
+ try {
+ // Base64 encoded -
+ // com.android.vending.licensing.ILicenseResultListener
+ DESCRIPTOR = new String(Base64.decode(
+ "Y29tLmFuZHJvaWQudmVuZGluZy5saWNlbnNpbmcuSUxpY2Vuc2VSZXN1bHRMaXN0ZW5lcg=="));
+ } catch (Base64DecoderException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ protected Stub() {
+ this.attachInterface(this, DESCRIPTOR);
+ }
+
+ static IResultListener asInterface(IBinder obj) {
+ if ((obj == null)) {
+ return null;
+ }
+ IInterface iin = obj.queryLocalInterface(DESCRIPTOR);
+ if (iin instanceof IResultListener) {
+ return (IResultListener) iin;
+ }
+ return new Stub.Proxy(obj);
+ }
+
+ @Override
+ public IBinder asBinder() {
+ return this;
+ }
+
+ @Override
+ public boolean onTransact(int code, @NonNull Parcel data, Parcel reply, int flags) throws RemoteException {
+ switch (code) {
+ case INTERFACE_TRANSACTION: {
+ reply.writeString(DESCRIPTOR);
+ return true;
+ }
+ case TRANSACTION: {
+ data.enforceInterface(DESCRIPTOR);
+ int responseCode = data.readInt();
+ String signedData = data.readString();
+ String signature = data.readString();
+ this.exec(responseCode, signedData, signature);
+ return true;
+ }
+ default: {
+ return super.onTransact(code, data, reply, flags);
+ }
+ }
+ }
+
+ private static class Proxy implements IResultListener {
+ private IBinder mRemote;
+
+ Proxy(IBinder remote) {
+ mRemote = remote;
+ }
+
+ @Override
+ public IBinder asBinder() {
+ return mRemote;
+ }
+
+ @Override
+ public void exec(int responseCode, String signedData, String signature) throws RemoteException {
+ Parcel args = Parcel.obtain();
+ try {
+ args.writeInterfaceToken(DESCRIPTOR);
+ args.writeInt(responseCode);
+ args.writeString(signedData);
+ args.writeString(signature);
+ mRemote.transact(TRANSACTION, args, null, IBinder.FLAG_ONEWAY);
+ } finally {
+ args.recycle();
+ }
+ }
+ }
+
+ static final int TRANSACTION = IBinder.FIRST_CALL_TRANSACTION;
+ }
+
+ // verifyLicense
+ void exec(int responseCode, String signedData, String signature) throws RemoteException;
+} \ No newline at end of file