@@ -1,949 +0,0 @@ | |||||
package com.android.vending.billing; | |||||
/** | |||||
* InAppBillingService is the service that provides in-app billing version 3 and beyond. | |||||
* This service provides the following features: | |||||
* 1. Provides a new API to get details of in-app items published for the app including | |||||
* price, type, title and description. | |||||
* 2. The purchase flow is synchronous and purchase information is available immediately | |||||
* after it completes. | |||||
* 3. Purchase information of in-app purchases is maintained within the Google Play system | |||||
* till the purchase is consumed. | |||||
* 4. An API to consume a purchase of an inapp item. All purchases of one-time | |||||
* in-app items are consumable and thereafter can be purchased again. | |||||
* 5. An API to get current purchases of the user immediately. This will not contain any | |||||
* consumed purchases. | |||||
* | |||||
* All calls will give a response code with the following possible values | |||||
* RESULT_OK = 0 - success | |||||
* RESULT_USER_CANCELED = 1 - User pressed back or canceled a dialog | |||||
* RESULT_SERVICE_UNAVAILABLE = 2 - The network connection is down | |||||
* RESULT_BILLING_UNAVAILABLE = 3 - This billing API version is not supported for the type requested | |||||
* RESULT_ITEM_UNAVAILABLE = 4 - Requested SKU is not available for purchase | |||||
* RESULT_DEVELOPER_ERROR = 5 - Invalid arguments provided to the API | |||||
* RESULT_ERROR = 6 - Fatal error during the API action | |||||
* RESULT_ITEM_ALREADY_OWNED = 7 - Failure to purchase since item is already owned | |||||
* RESULT_ITEM_NOT_OWNED = 8 - Failure to consume since item is not owned | |||||
*/ | |||||
public interface IInAppBillingService extends android.os.IInterface | |||||
{ | |||||
/** Local-side IPC implementation stub class. */ | |||||
public static abstract class Stub extends android.os.Binder implements com.android.vending.billing.IInAppBillingService | |||||
{ | |||||
private static final java.lang.String DESCRIPTOR = "com.android.vending.billing.IInAppBillingService"; | |||||
/** Construct the stub at attach it to the interface. */ | |||||
public Stub() | |||||
{ | |||||
this.attachInterface(this, DESCRIPTOR); | |||||
} | |||||
/** | |||||
* Cast an IBinder object into an com.android.vending.billing.IInAppBillingService interface, | |||||
* generating a proxy if needed. | |||||
*/ | |||||
public static com.android.vending.billing.IInAppBillingService asInterface(android.os.IBinder obj) | |||||
{ | |||||
if ((obj==null)) { | |||||
return null; | |||||
} | |||||
android.os.IInterface iin = obj.queryLocalInterface(DESCRIPTOR); | |||||
if (((iin!=null)&&(iin instanceof com.android.vending.billing.IInAppBillingService))) { | |||||
return ((com.android.vending.billing.IInAppBillingService)iin); | |||||
} | |||||
return new com.android.vending.billing.IInAppBillingService.Stub.Proxy(obj); | |||||
} | |||||
@Override public android.os.IBinder asBinder() | |||||
{ | |||||
return this; | |||||
} | |||||
@Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException | |||||
{ | |||||
switch (code) | |||||
{ | |||||
case INTERFACE_TRANSACTION: | |||||
{ | |||||
reply.writeString(DESCRIPTOR); | |||||
return true; | |||||
} | |||||
case TRANSACTION_isBillingSupported: | |||||
{ | |||||
data.enforceInterface(DESCRIPTOR); | |||||
int _arg0; | |||||
_arg0 = data.readInt(); | |||||
java.lang.String _arg1; | |||||
_arg1 = data.readString(); | |||||
java.lang.String _arg2; | |||||
_arg2 = data.readString(); | |||||
int _result = this.isBillingSupported(_arg0, _arg1, _arg2); | |||||
reply.writeNoException(); | |||||
reply.writeInt(_result); | |||||
return true; | |||||
} | |||||
case TRANSACTION_getSkuDetails: | |||||
{ | |||||
data.enforceInterface(DESCRIPTOR); | |||||
int _arg0; | |||||
_arg0 = data.readInt(); | |||||
java.lang.String _arg1; | |||||
_arg1 = data.readString(); | |||||
java.lang.String _arg2; | |||||
_arg2 = data.readString(); | |||||
android.os.Bundle _arg3; | |||||
if ((0!=data.readInt())) { | |||||
_arg3 = android.os.Bundle.CREATOR.createFromParcel(data); | |||||
} | |||||
else { | |||||
_arg3 = null; | |||||
} | |||||
android.os.Bundle _result = this.getSkuDetails(_arg0, _arg1, _arg2, _arg3); | |||||
reply.writeNoException(); | |||||
if ((_result!=null)) { | |||||
reply.writeInt(1); | |||||
_result.writeToParcel(reply, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE); | |||||
} | |||||
else { | |||||
reply.writeInt(0); | |||||
} | |||||
return true; | |||||
} | |||||
case TRANSACTION_getBuyIntent: | |||||
{ | |||||
data.enforceInterface(DESCRIPTOR); | |||||
int _arg0; | |||||
_arg0 = data.readInt(); | |||||
java.lang.String _arg1; | |||||
_arg1 = data.readString(); | |||||
java.lang.String _arg2; | |||||
_arg2 = data.readString(); | |||||
java.lang.String _arg3; | |||||
_arg3 = data.readString(); | |||||
java.lang.String _arg4; | |||||
_arg4 = data.readString(); | |||||
android.os.Bundle _result = this.getBuyIntent(_arg0, _arg1, _arg2, _arg3, _arg4); | |||||
reply.writeNoException(); | |||||
if ((_result!=null)) { | |||||
reply.writeInt(1); | |||||
_result.writeToParcel(reply, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE); | |||||
} | |||||
else { | |||||
reply.writeInt(0); | |||||
} | |||||
return true; | |||||
} | |||||
case TRANSACTION_getPurchases: | |||||
{ | |||||
data.enforceInterface(DESCRIPTOR); | |||||
int _arg0; | |||||
_arg0 = data.readInt(); | |||||
java.lang.String _arg1; | |||||
_arg1 = data.readString(); | |||||
java.lang.String _arg2; | |||||
_arg2 = data.readString(); | |||||
java.lang.String _arg3; | |||||
_arg3 = data.readString(); | |||||
android.os.Bundle _result = this.getPurchases(_arg0, _arg1, _arg2, _arg3); | |||||
reply.writeNoException(); | |||||
if ((_result!=null)) { | |||||
reply.writeInt(1); | |||||
_result.writeToParcel(reply, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE); | |||||
} | |||||
else { | |||||
reply.writeInt(0); | |||||
} | |||||
return true; | |||||
} | |||||
case TRANSACTION_consumePurchase: | |||||
{ | |||||
data.enforceInterface(DESCRIPTOR); | |||||
int _arg0; | |||||
_arg0 = data.readInt(); | |||||
java.lang.String _arg1; | |||||
_arg1 = data.readString(); | |||||
java.lang.String _arg2; | |||||
_arg2 = data.readString(); | |||||
int _result = this.consumePurchase(_arg0, _arg1, _arg2); | |||||
reply.writeNoException(); | |||||
reply.writeInt(_result); | |||||
return true; | |||||
} | |||||
case TRANSACTION_stub: | |||||
{ | |||||
data.enforceInterface(DESCRIPTOR); | |||||
int _arg0; | |||||
_arg0 = data.readInt(); | |||||
java.lang.String _arg1; | |||||
_arg1 = data.readString(); | |||||
java.lang.String _arg2; | |||||
_arg2 = data.readString(); | |||||
int _result = this.stub(_arg0, _arg1, _arg2); | |||||
reply.writeNoException(); | |||||
reply.writeInt(_result); | |||||
return true; | |||||
} | |||||
case TRANSACTION_getBuyIntentToReplaceSkus: | |||||
{ | |||||
data.enforceInterface(DESCRIPTOR); | |||||
int _arg0; | |||||
_arg0 = data.readInt(); | |||||
java.lang.String _arg1; | |||||
_arg1 = data.readString(); | |||||
java.util.List<java.lang.String> _arg2; | |||||
_arg2 = data.createStringArrayList(); | |||||
java.lang.String _arg3; | |||||
_arg3 = data.readString(); | |||||
java.lang.String _arg4; | |||||
_arg4 = data.readString(); | |||||
java.lang.String _arg5; | |||||
_arg5 = data.readString(); | |||||
android.os.Bundle _result = this.getBuyIntentToReplaceSkus(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5); | |||||
reply.writeNoException(); | |||||
if ((_result!=null)) { | |||||
reply.writeInt(1); | |||||
_result.writeToParcel(reply, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE); | |||||
} | |||||
else { | |||||
reply.writeInt(0); | |||||
} | |||||
return true; | |||||
} | |||||
case TRANSACTION_getBuyIntentExtraParams: | |||||
{ | |||||
data.enforceInterface(DESCRIPTOR); | |||||
int _arg0; | |||||
_arg0 = data.readInt(); | |||||
java.lang.String _arg1; | |||||
_arg1 = data.readString(); | |||||
java.lang.String _arg2; | |||||
_arg2 = data.readString(); | |||||
java.lang.String _arg3; | |||||
_arg3 = data.readString(); | |||||
java.lang.String _arg4; | |||||
_arg4 = data.readString(); | |||||
android.os.Bundle _arg5; | |||||
if ((0!=data.readInt())) { | |||||
_arg5 = android.os.Bundle.CREATOR.createFromParcel(data); | |||||
} | |||||
else { | |||||
_arg5 = null; | |||||
} | |||||
android.os.Bundle _result = this.getBuyIntentExtraParams(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5); | |||||
reply.writeNoException(); | |||||
if ((_result!=null)) { | |||||
reply.writeInt(1); | |||||
_result.writeToParcel(reply, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE); | |||||
} | |||||
else { | |||||
reply.writeInt(0); | |||||
} | |||||
return true; | |||||
} | |||||
case TRANSACTION_getPurchaseHistory: | |||||
{ | |||||
data.enforceInterface(DESCRIPTOR); | |||||
int _arg0; | |||||
_arg0 = data.readInt(); | |||||
java.lang.String _arg1; | |||||
_arg1 = data.readString(); | |||||
java.lang.String _arg2; | |||||
_arg2 = data.readString(); | |||||
java.lang.String _arg3; | |||||
_arg3 = data.readString(); | |||||
android.os.Bundle _arg4; | |||||
if ((0!=data.readInt())) { | |||||
_arg4 = android.os.Bundle.CREATOR.createFromParcel(data); | |||||
} | |||||
else { | |||||
_arg4 = null; | |||||
} | |||||
android.os.Bundle _result = this.getPurchaseHistory(_arg0, _arg1, _arg2, _arg3, _arg4); | |||||
reply.writeNoException(); | |||||
if ((_result!=null)) { | |||||
reply.writeInt(1); | |||||
_result.writeToParcel(reply, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE); | |||||
} | |||||
else { | |||||
reply.writeInt(0); | |||||
} | |||||
return true; | |||||
} | |||||
case TRANSACTION_isBillingSupportedExtraParams: | |||||
{ | |||||
data.enforceInterface(DESCRIPTOR); | |||||
int _arg0; | |||||
_arg0 = data.readInt(); | |||||
java.lang.String _arg1; | |||||
_arg1 = data.readString(); | |||||
java.lang.String _arg2; | |||||
_arg2 = data.readString(); | |||||
android.os.Bundle _arg3; | |||||
if ((0!=data.readInt())) { | |||||
_arg3 = android.os.Bundle.CREATOR.createFromParcel(data); | |||||
} | |||||
else { | |||||
_arg3 = null; | |||||
} | |||||
int _result = this.isBillingSupportedExtraParams(_arg0, _arg1, _arg2, _arg3); | |||||
reply.writeNoException(); | |||||
reply.writeInt(_result); | |||||
return true; | |||||
} | |||||
} | |||||
return super.onTransact(code, data, reply, flags); | |||||
} | |||||
private static class Proxy implements com.android.vending.billing.IInAppBillingService | |||||
{ | |||||
private android.os.IBinder mRemote; | |||||
Proxy(android.os.IBinder remote) | |||||
{ | |||||
mRemote = remote; | |||||
} | |||||
@Override public android.os.IBinder asBinder() | |||||
{ | |||||
return mRemote; | |||||
} | |||||
public java.lang.String getInterfaceDescriptor() | |||||
{ | |||||
return DESCRIPTOR; | |||||
} | |||||
@Override public int isBillingSupported(int apiVersion, java.lang.String packageName, java.lang.String type) throws android.os.RemoteException | |||||
{ | |||||
android.os.Parcel _data = android.os.Parcel.obtain(); | |||||
android.os.Parcel _reply = android.os.Parcel.obtain(); | |||||
int _result; | |||||
try { | |||||
_data.writeInterfaceToken(DESCRIPTOR); | |||||
_data.writeInt(apiVersion); | |||||
_data.writeString(packageName); | |||||
_data.writeString(type); | |||||
mRemote.transact(Stub.TRANSACTION_isBillingSupported, _data, _reply, 0); | |||||
_reply.readException(); | |||||
_result = _reply.readInt(); | |||||
} | |||||
finally { | |||||
_reply.recycle(); | |||||
_data.recycle(); | |||||
} | |||||
return _result; | |||||
} | |||||
/** | |||||
* Provides details of a list of SKUs | |||||
* Given a list of SKUs of a valid type in the skusBundle, this returns a bundle | |||||
* with a list JSON strings containing the productId, price, title and description. | |||||
* This API can be called with a maximum of 20 SKUs. | |||||
* @param apiVersion billing API version that the app is using | |||||
* @param packageName the package name of the calling app | |||||
* @param type of the in-app items ("inapp" for one-time purchases | |||||
* and "subs" for subscriptions) | |||||
* @param skusBundle bundle containing a StringArrayList of SKUs with key "ITEM_ID_LIST" | |||||
* @return Bundle containing the following key-value pairs | |||||
* "RESPONSE_CODE" with int value, RESULT_OK(0) if success, appropriate response codes | |||||
* on failures. | |||||
* "DETAILS_LIST" with a StringArrayList containing purchase information | |||||
* in JSON format similar to: | |||||
* '{ "productId" : "exampleSku", | |||||
* "type" : "inapp", | |||||
* "price" : "$5.00", | |||||
* "price_currency": "USD", | |||||
* "price_amount_micros": 5000000, | |||||
* "title : "Example Title", | |||||
* "description" : "This is an example description" }' | |||||
*/ | |||||
@Override public android.os.Bundle getSkuDetails(int apiVersion, java.lang.String packageName, java.lang.String type, android.os.Bundle skusBundle) throws android.os.RemoteException | |||||
{ | |||||
android.os.Parcel _data = android.os.Parcel.obtain(); | |||||
android.os.Parcel _reply = android.os.Parcel.obtain(); | |||||
android.os.Bundle _result; | |||||
try { | |||||
_data.writeInterfaceToken(DESCRIPTOR); | |||||
_data.writeInt(apiVersion); | |||||
_data.writeString(packageName); | |||||
_data.writeString(type); | |||||
if ((skusBundle!=null)) { | |||||
_data.writeInt(1); | |||||
skusBundle.writeToParcel(_data, 0); | |||||
} | |||||
else { | |||||
_data.writeInt(0); | |||||
} | |||||
mRemote.transact(Stub.TRANSACTION_getSkuDetails, _data, _reply, 0); | |||||
_reply.readException(); | |||||
if ((0!=_reply.readInt())) { | |||||
_result = android.os.Bundle.CREATOR.createFromParcel(_reply); | |||||
} | |||||
else { | |||||
_result = null; | |||||
} | |||||
} | |||||
finally { | |||||
_reply.recycle(); | |||||
_data.recycle(); | |||||
} | |||||
return _result; | |||||
} | |||||
/** | |||||
* Returns a pending intent to launch the purchase flow for an in-app item by providing a SKU, | |||||
* the type, a unique purchase token and an optional developer payload. | |||||
* @param apiVersion billing API version that the app is using | |||||
* @param packageName package name of the calling app | |||||
* @param sku the SKU of the in-app item as published in the developer console | |||||
* @param type of the in-app item being purchased ("inapp" for one-time purchases | |||||
* and "subs" for subscriptions) | |||||
* @param developerPayload optional argument to be sent back with the purchase information | |||||
* @return Bundle containing the following key-value pairs | |||||
* "RESPONSE_CODE" with int value, RESULT_OK(0) if success, appropriate response codes | |||||
* on failures. | |||||
* "BUY_INTENT" - PendingIntent to start the purchase flow | |||||
* | |||||
* The Pending intent should be launched with startIntentSenderForResult. When purchase flow | |||||
* has completed, the onActivityResult() will give a resultCode of OK or CANCELED. | |||||
* If the purchase is successful, the result data will contain the following key-value pairs | |||||
* "RESPONSE_CODE" with int value, RESULT_OK(0) if success, appropriate response | |||||
* codes on failures. | |||||
* "INAPP_PURCHASE_DATA" - String in JSON format similar to | |||||
* '{"orderId":"12999763169054705758.1371079406387615", | |||||
* "packageName":"com.example.app", | |||||
* "productId":"exampleSku", | |||||
* "purchaseTime":1345678900000, | |||||
* "purchaseToken" : "122333444455555", | |||||
* "developerPayload":"example developer payload" }' | |||||
* "INAPP_DATA_SIGNATURE" - String containing the signature of the purchase data that | |||||
* was signed with the private key of the developer | |||||
*/ | |||||
@Override public android.os.Bundle getBuyIntent(int apiVersion, java.lang.String packageName, java.lang.String sku, java.lang.String type, java.lang.String developerPayload) throws android.os.RemoteException | |||||
{ | |||||
android.os.Parcel _data = android.os.Parcel.obtain(); | |||||
android.os.Parcel _reply = android.os.Parcel.obtain(); | |||||
android.os.Bundle _result; | |||||
try { | |||||
_data.writeInterfaceToken(DESCRIPTOR); | |||||
_data.writeInt(apiVersion); | |||||
_data.writeString(packageName); | |||||
_data.writeString(sku); | |||||
_data.writeString(type); | |||||
_data.writeString(developerPayload); | |||||
mRemote.transact(Stub.TRANSACTION_getBuyIntent, _data, _reply, 0); | |||||
_reply.readException(); | |||||
if ((0!=_reply.readInt())) { | |||||
_result = android.os.Bundle.CREATOR.createFromParcel(_reply); | |||||
} | |||||
else { | |||||
_result = null; | |||||
} | |||||
} | |||||
finally { | |||||
_reply.recycle(); | |||||
_data.recycle(); | |||||
} | |||||
return _result; | |||||
} | |||||
/** | |||||
* Returns the current SKUs owned by the user of the type and package name specified along with | |||||
* purchase information and a signature of the data to be validated. | |||||
* This will return all SKUs that have been purchased in V3 and managed items purchased using | |||||
* V1 and V2 that have not been consumed. | |||||
* @param apiVersion billing API version that the app is using | |||||
* @param packageName package name of the calling app | |||||
* @param type of the in-app items being requested ("inapp" for one-time purchases | |||||
* and "subs" for subscriptions) | |||||
* @param continuationToken to be set as null for the first call, if the number of owned | |||||
* skus are too many, a continuationToken is returned in the response bundle. | |||||
* This method can be called again with the continuation token to get the next set of | |||||
* owned skus. | |||||
* @return Bundle containing the following key-value pairs | |||||
* "RESPONSE_CODE" with int value, RESULT_OK(0) if success, appropriate response codes | |||||
on failures. | |||||
* "INAPP_PURCHASE_ITEM_LIST" - StringArrayList containing the list of SKUs | |||||
* "INAPP_PURCHASE_DATA_LIST" - StringArrayList containing the purchase information | |||||
* "INAPP_DATA_SIGNATURE_LIST"- StringArrayList containing the signatures | |||||
* of the purchase information | |||||
* "INAPP_CONTINUATION_TOKEN" - String containing a continuation token for the | |||||
* next set of in-app purchases. Only set if the | |||||
* user has more owned skus than the current list. | |||||
*/ | |||||
@Override public android.os.Bundle getPurchases(int apiVersion, java.lang.String packageName, java.lang.String type, java.lang.String continuationToken) throws android.os.RemoteException | |||||
{ | |||||
android.os.Parcel _data = android.os.Parcel.obtain(); | |||||
android.os.Parcel _reply = android.os.Parcel.obtain(); | |||||
android.os.Bundle _result; | |||||
try { | |||||
_data.writeInterfaceToken(DESCRIPTOR); | |||||
_data.writeInt(apiVersion); | |||||
_data.writeString(packageName); | |||||
_data.writeString(type); | |||||
_data.writeString(continuationToken); | |||||
mRemote.transact(Stub.TRANSACTION_getPurchases, _data, _reply, 0); | |||||
_reply.readException(); | |||||
if ((0!=_reply.readInt())) { | |||||
_result = android.os.Bundle.CREATOR.createFromParcel(_reply); | |||||
} | |||||
else { | |||||
_result = null; | |||||
} | |||||
} | |||||
finally { | |||||
_reply.recycle(); | |||||
_data.recycle(); | |||||
} | |||||
return _result; | |||||
} | |||||
@Override public int consumePurchase(int apiVersion, java.lang.String packageName, java.lang.String purchaseToken) throws android.os.RemoteException | |||||
{ | |||||
android.os.Parcel _data = android.os.Parcel.obtain(); | |||||
android.os.Parcel _reply = android.os.Parcel.obtain(); | |||||
int _result; | |||||
try { | |||||
_data.writeInterfaceToken(DESCRIPTOR); | |||||
_data.writeInt(apiVersion); | |||||
_data.writeString(packageName); | |||||
_data.writeString(purchaseToken); | |||||
mRemote.transact(Stub.TRANSACTION_consumePurchase, _data, _reply, 0); | |||||
_reply.readException(); | |||||
_result = _reply.readInt(); | |||||
} | |||||
finally { | |||||
_reply.recycle(); | |||||
_data.recycle(); | |||||
} | |||||
return _result; | |||||
} | |||||
@Override public int stub(int apiVersion, java.lang.String packageName, java.lang.String type) throws android.os.RemoteException | |||||
{ | |||||
android.os.Parcel _data = android.os.Parcel.obtain(); | |||||
android.os.Parcel _reply = android.os.Parcel.obtain(); | |||||
int _result; | |||||
try { | |||||
_data.writeInterfaceToken(DESCRIPTOR); | |||||
_data.writeInt(apiVersion); | |||||
_data.writeString(packageName); | |||||
_data.writeString(type); | |||||
mRemote.transact(Stub.TRANSACTION_stub, _data, _reply, 0); | |||||
_reply.readException(); | |||||
_result = _reply.readInt(); | |||||
} | |||||
finally { | |||||
_reply.recycle(); | |||||
_data.recycle(); | |||||
} | |||||
return _result; | |||||
} | |||||
/** | |||||
* Returns a pending intent to launch the purchase flow for upgrading or downgrading a | |||||
* subscription. The existing owned SKU(s) should be provided along with the new SKU that | |||||
* the user is upgrading or downgrading to. | |||||
* @param apiVersion billing API version that the app is using, must be 5 or later | |||||
* @param packageName package name of the calling app | |||||
* @param oldSkus the SKU(s) that the user is upgrading or downgrading from, | |||||
* if null or empty this method will behave like {@link #getBuyIntent} | |||||
* @param newSku the SKU that the user is upgrading or downgrading to | |||||
* @param type of the item being purchased, currently must be "subs" | |||||
* @param developerPayload optional argument to be sent back with the purchase information | |||||
* @return Bundle containing the following key-value pairs | |||||
* "RESPONSE_CODE" with int value, RESULT_OK(0) if success, appropriate response codes | |||||
* on failures. | |||||
* "BUY_INTENT" - PendingIntent to start the purchase flow | |||||
* | |||||
* The Pending intent should be launched with startIntentSenderForResult. When purchase flow | |||||
* has completed, the onActivityResult() will give a resultCode of OK or CANCELED. | |||||
* If the purchase is successful, the result data will contain the following key-value pairs | |||||
* "RESPONSE_CODE" with int value, RESULT_OK(0) if success, appropriate response | |||||
* codes on failures. | |||||
* "INAPP_PURCHASE_DATA" - String in JSON format similar to | |||||
* '{"orderId":"12999763169054705758.1371079406387615", | |||||
* "packageName":"com.example.app", | |||||
* "productId":"exampleSku", | |||||
* "purchaseTime":1345678900000, | |||||
* "purchaseToken" : "122333444455555", | |||||
* "developerPayload":"example developer payload" }' | |||||
* "INAPP_DATA_SIGNATURE" - String containing the signature of the purchase data that | |||||
* was signed with the private key of the developer | |||||
*/ | |||||
@Override public android.os.Bundle getBuyIntentToReplaceSkus(int apiVersion, java.lang.String packageName, java.util.List<java.lang.String> oldSkus, java.lang.String newSku, java.lang.String type, java.lang.String developerPayload) throws android.os.RemoteException | |||||
{ | |||||
android.os.Parcel _data = android.os.Parcel.obtain(); | |||||
android.os.Parcel _reply = android.os.Parcel.obtain(); | |||||
android.os.Bundle _result; | |||||
try { | |||||
_data.writeInterfaceToken(DESCRIPTOR); | |||||
_data.writeInt(apiVersion); | |||||
_data.writeString(packageName); | |||||
_data.writeStringList(oldSkus); | |||||
_data.writeString(newSku); | |||||
_data.writeString(type); | |||||
_data.writeString(developerPayload); | |||||
mRemote.transact(Stub.TRANSACTION_getBuyIntentToReplaceSkus, _data, _reply, 0); | |||||
_reply.readException(); | |||||
if ((0!=_reply.readInt())) { | |||||
_result = android.os.Bundle.CREATOR.createFromParcel(_reply); | |||||
} | |||||
else { | |||||
_result = null; | |||||
} | |||||
} | |||||
finally { | |||||
_reply.recycle(); | |||||
_data.recycle(); | |||||
} | |||||
return _result; | |||||
} | |||||
/** | |||||
* Returns a pending intent to launch the purchase flow for an in-app item. This method is | |||||
* a variant of the {@link #getBuyIntent} method and takes an additional {@code extraParams} | |||||
* parameter. This parameter is a Bundle of optional keys and values that affect the | |||||
* operation of the method. | |||||
* @param apiVersion billing API version that the app is using, must be 6 or later | |||||
* @param packageName package name of the calling app | |||||
* @param sku the SKU of the in-app item as published in the developer console | |||||
* @param type of the in-app item being purchased ("inapp" for one-time purchases | |||||
* and "subs" for subscriptions) | |||||
* @param developerPayload optional argument to be sent back with the purchase information | |||||
* @extraParams a Bundle with the following optional keys: | |||||
* "skusToReplace" - List<String> - an optional list of SKUs that the user is | |||||
* upgrading or downgrading from. | |||||
* Pass this field if the purchase is upgrading or downgrading | |||||
* existing subscriptions. | |||||
* The specified SKUs are replaced with the SKUs that the user is | |||||
* purchasing. Google Play replaces the specified SKUs at the start of | |||||
* the next billing cycle. | |||||
* "replaceSkusProration" - Boolean - whether the user should be credited for any unused | |||||
* subscription time on the SKUs they are upgrading or downgrading. | |||||
* If you set this field to true, Google Play swaps out the old SKUs | |||||
* and credits the user with the unused value of their subscription | |||||
* time on a pro-rated basis. | |||||
* Google Play applies this credit to the new subscription, and does | |||||
* not begin billing the user for the new subscription until after | |||||
* the credit is used up. | |||||
* If you set this field to false, the user does not receive credit for | |||||
* any unused subscription time and the recurrence date does not | |||||
* change. | |||||
* Default value is true. Ignored if you do not pass skusToReplace. | |||||
* "accountId" - String - an optional obfuscated string that is uniquely | |||||
* associated with the user's account in your app. | |||||
* If you pass this value, Google Play can use it to detect irregular | |||||
* activity, such as many devices making purchases on the same | |||||
* account in a short period of time. | |||||
* Do not use the developer ID or the user's Google ID for this field. | |||||
* In addition, this field should not contain the user's ID in | |||||
* cleartext. | |||||
* We recommend that you use a one-way hash to generate a string from | |||||
* the user's ID, and store the hashed string in this field. | |||||
* "vr" - Boolean - an optional flag indicating whether the returned intent | |||||
* should start a VR purchase flow. The apiVersion must also be 7 or | |||||
* later to use this flag. | |||||
*/ | |||||
@Override public android.os.Bundle getBuyIntentExtraParams(int apiVersion, java.lang.String packageName, java.lang.String sku, java.lang.String type, java.lang.String developerPayload, android.os.Bundle extraParams) throws android.os.RemoteException | |||||
{ | |||||
android.os.Parcel _data = android.os.Parcel.obtain(); | |||||
android.os.Parcel _reply = android.os.Parcel.obtain(); | |||||
android.os.Bundle _result; | |||||
try { | |||||
_data.writeInterfaceToken(DESCRIPTOR); | |||||
_data.writeInt(apiVersion); | |||||
_data.writeString(packageName); | |||||
_data.writeString(sku); | |||||
_data.writeString(type); | |||||
_data.writeString(developerPayload); | |||||
if ((extraParams!=null)) { | |||||
_data.writeInt(1); | |||||
extraParams.writeToParcel(_data, 0); | |||||
} | |||||
else { | |||||
_data.writeInt(0); | |||||
} | |||||
mRemote.transact(Stub.TRANSACTION_getBuyIntentExtraParams, _data, _reply, 0); | |||||
_reply.readException(); | |||||
if ((0!=_reply.readInt())) { | |||||
_result = android.os.Bundle.CREATOR.createFromParcel(_reply); | |||||
} | |||||
else { | |||||
_result = null; | |||||
} | |||||
} | |||||
finally { | |||||
_reply.recycle(); | |||||
_data.recycle(); | |||||
} | |||||
return _result; | |||||
} | |||||
/** | |||||
* Returns the most recent purchase made by the user for each SKU, even if that purchase is | |||||
* expired, canceled, or consumed. | |||||
* @param apiVersion billing API version that the app is using, must be 6 or later | |||||
* @param packageName package name of the calling app | |||||
* @param type of the in-app items being requested ("inapp" for one-time purchases | |||||
* and "subs" for subscriptions) | |||||
* @param continuationToken to be set as null for the first call, if the number of owned | |||||
* skus is too large, a continuationToken is returned in the response bundle. | |||||
* This method can be called again with the continuation token to get the next set of | |||||
* owned skus. | |||||
* @param extraParams a Bundle with extra params that would be appended into http request | |||||
* query string. Not used at this moment. Reserved for future functionality. | |||||
* @return Bundle containing the following key-value pairs | |||||
* "RESPONSE_CODE" with int value: RESULT_OK(0) if success, | |||||
* {@link IabHelper#BILLING_RESPONSE_RESULT_*} response codes on failures. | |||||
* | |||||
* "INAPP_PURCHASE_ITEM_LIST" - ArrayList<String> containing the list of SKUs | |||||
* "INAPP_PURCHASE_DATA_LIST" - ArrayList<String> containing the purchase information | |||||
* "INAPP_DATA_SIGNATURE_LIST"- ArrayList<String> containing the signatures | |||||
* of the purchase information | |||||
* "INAPP_CONTINUATION_TOKEN" - String containing a continuation token for the | |||||
* next set of in-app purchases. Only set if the | |||||
* user has more owned skus than the current list. | |||||
*/ | |||||
@Override public android.os.Bundle getPurchaseHistory(int apiVersion, java.lang.String packageName, java.lang.String type, java.lang.String continuationToken, android.os.Bundle extraParams) throws android.os.RemoteException | |||||
{ | |||||
android.os.Parcel _data = android.os.Parcel.obtain(); | |||||
android.os.Parcel _reply = android.os.Parcel.obtain(); | |||||
android.os.Bundle _result; | |||||
try { | |||||
_data.writeInterfaceToken(DESCRIPTOR); | |||||
_data.writeInt(apiVersion); | |||||
_data.writeString(packageName); | |||||
_data.writeString(type); | |||||
_data.writeString(continuationToken); | |||||
if ((extraParams!=null)) { | |||||
_data.writeInt(1); | |||||
extraParams.writeToParcel(_data, 0); | |||||
} | |||||
else { | |||||
_data.writeInt(0); | |||||
} | |||||
mRemote.transact(Stub.TRANSACTION_getPurchaseHistory, _data, _reply, 0); | |||||
_reply.readException(); | |||||
if ((0!=_reply.readInt())) { | |||||
_result = android.os.Bundle.CREATOR.createFromParcel(_reply); | |||||
} | |||||
else { | |||||
_result = null; | |||||
} | |||||
} | |||||
finally { | |||||
_reply.recycle(); | |||||
_data.recycle(); | |||||
} | |||||
return _result; | |||||
} | |||||
@Override public int isBillingSupportedExtraParams(int apiVersion, java.lang.String packageName, java.lang.String type, android.os.Bundle extraParams) throws android.os.RemoteException | |||||
{ | |||||
android.os.Parcel _data = android.os.Parcel.obtain(); | |||||
android.os.Parcel _reply = android.os.Parcel.obtain(); | |||||
int _result; | |||||
try { | |||||
_data.writeInterfaceToken(DESCRIPTOR); | |||||
_data.writeInt(apiVersion); | |||||
_data.writeString(packageName); | |||||
_data.writeString(type); | |||||
if ((extraParams!=null)) { | |||||
_data.writeInt(1); | |||||
extraParams.writeToParcel(_data, 0); | |||||
} | |||||
else { | |||||
_data.writeInt(0); | |||||
} | |||||
mRemote.transact(Stub.TRANSACTION_isBillingSupportedExtraParams, _data, _reply, 0); | |||||
_reply.readException(); | |||||
_result = _reply.readInt(); | |||||
} | |||||
finally { | |||||
_reply.recycle(); | |||||
_data.recycle(); | |||||
} | |||||
return _result; | |||||
} | |||||
} | |||||
static final int TRANSACTION_isBillingSupported = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0); | |||||
static final int TRANSACTION_getSkuDetails = (android.os.IBinder.FIRST_CALL_TRANSACTION + 1); | |||||
static final int TRANSACTION_getBuyIntent = (android.os.IBinder.FIRST_CALL_TRANSACTION + 2); | |||||
static final int TRANSACTION_getPurchases = (android.os.IBinder.FIRST_CALL_TRANSACTION + 3); | |||||
static final int TRANSACTION_consumePurchase = (android.os.IBinder.FIRST_CALL_TRANSACTION + 4); | |||||
static final int TRANSACTION_stub = (android.os.IBinder.FIRST_CALL_TRANSACTION + 5); | |||||
static final int TRANSACTION_getBuyIntentToReplaceSkus = (android.os.IBinder.FIRST_CALL_TRANSACTION + 6); | |||||
static final int TRANSACTION_getBuyIntentExtraParams = (android.os.IBinder.FIRST_CALL_TRANSACTION + 7); | |||||
static final int TRANSACTION_getPurchaseHistory = (android.os.IBinder.FIRST_CALL_TRANSACTION + 8); | |||||
static final int TRANSACTION_isBillingSupportedExtraParams = (android.os.IBinder.FIRST_CALL_TRANSACTION + 9); | |||||
} | |||||
public int isBillingSupported(int apiVersion, java.lang.String packageName, java.lang.String type) throws android.os.RemoteException; | |||||
/** | |||||
* Provides details of a list of SKUs | |||||
* Given a list of SKUs of a valid type in the skusBundle, this returns a bundle | |||||
* with a list JSON strings containing the productId, price, title and description. | |||||
* This API can be called with a maximum of 20 SKUs. | |||||
* @param apiVersion billing API version that the app is using | |||||
* @param packageName the package name of the calling app | |||||
* @param type of the in-app items ("inapp" for one-time purchases | |||||
* and "subs" for subscriptions) | |||||
* @param skusBundle bundle containing a StringArrayList of SKUs with key "ITEM_ID_LIST" | |||||
* @return Bundle containing the following key-value pairs | |||||
* "RESPONSE_CODE" with int value, RESULT_OK(0) if success, appropriate response codes | |||||
* on failures. | |||||
* "DETAILS_LIST" with a StringArrayList containing purchase information | |||||
* in JSON format similar to: | |||||
* '{ "productId" : "exampleSku", | |||||
* "type" : "inapp", | |||||
* "price" : "$5.00", | |||||
* "price_currency": "USD", | |||||
* "price_amount_micros": 5000000, | |||||
* "title : "Example Title", | |||||
* "description" : "This is an example description" }' | |||||
*/ | |||||
public android.os.Bundle getSkuDetails(int apiVersion, java.lang.String packageName, java.lang.String type, android.os.Bundle skusBundle) throws android.os.RemoteException; | |||||
/** | |||||
* Returns a pending intent to launch the purchase flow for an in-app item by providing a SKU, | |||||
* the type, a unique purchase token and an optional developer payload. | |||||
* @param apiVersion billing API version that the app is using | |||||
* @param packageName package name of the calling app | |||||
* @param sku the SKU of the in-app item as published in the developer console | |||||
* @param type of the in-app item being purchased ("inapp" for one-time purchases | |||||
* and "subs" for subscriptions) | |||||
* @param developerPayload optional argument to be sent back with the purchase information | |||||
* @return Bundle containing the following key-value pairs | |||||
* "RESPONSE_CODE" with int value, RESULT_OK(0) if success, appropriate response codes | |||||
* on failures. | |||||
* "BUY_INTENT" - PendingIntent to start the purchase flow | |||||
* | |||||
* The Pending intent should be launched with startIntentSenderForResult. When purchase flow | |||||
* has completed, the onActivityResult() will give a resultCode of OK or CANCELED. | |||||
* If the purchase is successful, the result data will contain the following key-value pairs | |||||
* "RESPONSE_CODE" with int value, RESULT_OK(0) if success, appropriate response | |||||
* codes on failures. | |||||
* "INAPP_PURCHASE_DATA" - String in JSON format similar to | |||||
* '{"orderId":"12999763169054705758.1371079406387615", | |||||
* "packageName":"com.example.app", | |||||
* "productId":"exampleSku", | |||||
* "purchaseTime":1345678900000, | |||||
* "purchaseToken" : "122333444455555", | |||||
* "developerPayload":"example developer payload" }' | |||||
* "INAPP_DATA_SIGNATURE" - String containing the signature of the purchase data that | |||||
* was signed with the private key of the developer | |||||
*/ | |||||
public android.os.Bundle getBuyIntent(int apiVersion, java.lang.String packageName, java.lang.String sku, java.lang.String type, java.lang.String developerPayload) throws android.os.RemoteException; | |||||
/** | |||||
* Returns the current SKUs owned by the user of the type and package name specified along with | |||||
* purchase information and a signature of the data to be validated. | |||||
* This will return all SKUs that have been purchased in V3 and managed items purchased using | |||||
* V1 and V2 that have not been consumed. | |||||
* @param apiVersion billing API version that the app is using | |||||
* @param packageName package name of the calling app | |||||
* @param type of the in-app items being requested ("inapp" for one-time purchases | |||||
* and "subs" for subscriptions) | |||||
* @param continuationToken to be set as null for the first call, if the number of owned | |||||
* skus are too many, a continuationToken is returned in the response bundle. | |||||
* This method can be called again with the continuation token to get the next set of | |||||
* owned skus. | |||||
* @return Bundle containing the following key-value pairs | |||||
* "RESPONSE_CODE" with int value, RESULT_OK(0) if success, appropriate response codes | |||||
on failures. | |||||
* "INAPP_PURCHASE_ITEM_LIST" - StringArrayList containing the list of SKUs | |||||
* "INAPP_PURCHASE_DATA_LIST" - StringArrayList containing the purchase information | |||||
* "INAPP_DATA_SIGNATURE_LIST"- StringArrayList containing the signatures | |||||
* of the purchase information | |||||
* "INAPP_CONTINUATION_TOKEN" - String containing a continuation token for the | |||||
* next set of in-app purchases. Only set if the | |||||
* user has more owned skus than the current list. | |||||
*/ | |||||
public android.os.Bundle getPurchases(int apiVersion, java.lang.String packageName, java.lang.String type, java.lang.String continuationToken) throws android.os.RemoteException; | |||||
public int consumePurchase(int apiVersion, java.lang.String packageName, java.lang.String purchaseToken) throws android.os.RemoteException; | |||||
public int stub(int apiVersion, java.lang.String packageName, java.lang.String type) throws android.os.RemoteException; | |||||
/** | |||||
* Returns a pending intent to launch the purchase flow for upgrading or downgrading a | |||||
* subscription. The existing owned SKU(s) should be provided along with the new SKU that | |||||
* the user is upgrading or downgrading to. | |||||
* @param apiVersion billing API version that the app is using, must be 5 or later | |||||
* @param packageName package name of the calling app | |||||
* @param oldSkus the SKU(s) that the user is upgrading or downgrading from, | |||||
* if null or empty this method will behave like {@link #getBuyIntent} | |||||
* @param newSku the SKU that the user is upgrading or downgrading to | |||||
* @param type of the item being purchased, currently must be "subs" | |||||
* @param developerPayload optional argument to be sent back with the purchase information | |||||
* @return Bundle containing the following key-value pairs | |||||
* "RESPONSE_CODE" with int value, RESULT_OK(0) if success, appropriate response codes | |||||
* on failures. | |||||
* "BUY_INTENT" - PendingIntent to start the purchase flow | |||||
* | |||||
* The Pending intent should be launched with startIntentSenderForResult. When purchase flow | |||||
* has completed, the onActivityResult() will give a resultCode of OK or CANCELED. | |||||
* If the purchase is successful, the result data will contain the following key-value pairs | |||||
* "RESPONSE_CODE" with int value, RESULT_OK(0) if success, appropriate response | |||||
* codes on failures. | |||||
* "INAPP_PURCHASE_DATA" - String in JSON format similar to | |||||
* '{"orderId":"12999763169054705758.1371079406387615", | |||||
* "packageName":"com.example.app", | |||||
* "productId":"exampleSku", | |||||
* "purchaseTime":1345678900000, | |||||
* "purchaseToken" : "122333444455555", | |||||
* "developerPayload":"example developer payload" }' | |||||
* "INAPP_DATA_SIGNATURE" - String containing the signature of the purchase data that | |||||
* was signed with the private key of the developer | |||||
*/ | |||||
public android.os.Bundle getBuyIntentToReplaceSkus(int apiVersion, java.lang.String packageName, java.util.List<java.lang.String> oldSkus, java.lang.String newSku, java.lang.String type, java.lang.String developerPayload) throws android.os.RemoteException; | |||||
/** | |||||
* Returns a pending intent to launch the purchase flow for an in-app item. This method is | |||||
* a variant of the {@link #getBuyIntent} method and takes an additional {@code extraParams} | |||||
* parameter. This parameter is a Bundle of optional keys and values that affect the | |||||
* operation of the method. | |||||
* @param apiVersion billing API version that the app is using, must be 6 or later | |||||
* @param packageName package name of the calling app | |||||
* @param sku the SKU of the in-app item as published in the developer console | |||||
* @param type of the in-app item being purchased ("inapp" for one-time purchases | |||||
* and "subs" for subscriptions) | |||||
* @param developerPayload optional argument to be sent back with the purchase information | |||||
* @extraParams a Bundle with the following optional keys: | |||||
* "skusToReplace" - List<String> - an optional list of SKUs that the user is | |||||
* upgrading or downgrading from. | |||||
* Pass this field if the purchase is upgrading or downgrading | |||||
* existing subscriptions. | |||||
* The specified SKUs are replaced with the SKUs that the user is | |||||
* purchasing. Google Play replaces the specified SKUs at the start of | |||||
* the next billing cycle. | |||||
* "replaceSkusProration" - Boolean - whether the user should be credited for any unused | |||||
* subscription time on the SKUs they are upgrading or downgrading. | |||||
* If you set this field to true, Google Play swaps out the old SKUs | |||||
* and credits the user with the unused value of their subscription | |||||
* time on a pro-rated basis. | |||||
* Google Play applies this credit to the new subscription, and does | |||||
* not begin billing the user for the new subscription until after | |||||
* the credit is used up. | |||||
* If you set this field to false, the user does not receive credit for | |||||
* any unused subscription time and the recurrence date does not | |||||
* change. | |||||
* Default value is true. Ignored if you do not pass skusToReplace. | |||||
* "accountId" - String - an optional obfuscated string that is uniquely | |||||
* associated with the user's account in your app. | |||||
* If you pass this value, Google Play can use it to detect irregular | |||||
* activity, such as many devices making purchases on the same | |||||
* account in a short period of time. | |||||
* Do not use the developer ID or the user's Google ID for this field. | |||||
* In addition, this field should not contain the user's ID in | |||||
* cleartext. | |||||
* We recommend that you use a one-way hash to generate a string from | |||||
* the user's ID, and store the hashed string in this field. | |||||
* "vr" - Boolean - an optional flag indicating whether the returned intent | |||||
* should start a VR purchase flow. The apiVersion must also be 7 or | |||||
* later to use this flag. | |||||
*/ | |||||
public android.os.Bundle getBuyIntentExtraParams(int apiVersion, java.lang.String packageName, java.lang.String sku, java.lang.String type, java.lang.String developerPayload, android.os.Bundle extraParams) throws android.os.RemoteException; | |||||
/** | |||||
* Returns the most recent purchase made by the user for each SKU, even if that purchase is | |||||
* expired, canceled, or consumed. | |||||
* @param apiVersion billing API version that the app is using, must be 6 or later | |||||
* @param packageName package name of the calling app | |||||
* @param type of the in-app items being requested ("inapp" for one-time purchases | |||||
* and "subs" for subscriptions) | |||||
* @param continuationToken to be set as null for the first call, if the number of owned | |||||
* skus is too large, a continuationToken is returned in the response bundle. | |||||
* This method can be called again with the continuation token to get the next set of | |||||
* owned skus. | |||||
* @param extraParams a Bundle with extra params that would be appended into http request | |||||
* query string. Not used at this moment. Reserved for future functionality. | |||||
* @return Bundle containing the following key-value pairs | |||||
* "RESPONSE_CODE" with int value: RESULT_OK(0) if success, | |||||
* {@link IabHelper#BILLING_RESPONSE_RESULT_*} response codes on failures. | |||||
* | |||||
* "INAPP_PURCHASE_ITEM_LIST" - ArrayList<String> containing the list of SKUs | |||||
* "INAPP_PURCHASE_DATA_LIST" - ArrayList<String> containing the purchase information | |||||
* "INAPP_DATA_SIGNATURE_LIST"- ArrayList<String> containing the signatures | |||||
* of the purchase information | |||||
* "INAPP_CONTINUATION_TOKEN" - String containing a continuation token for the | |||||
* next set of in-app purchases. Only set if the | |||||
* user has more owned skus than the current list. | |||||
*/ | |||||
public android.os.Bundle getPurchaseHistory(int apiVersion, java.lang.String packageName, java.lang.String type, java.lang.String continuationToken, android.os.Bundle extraParams) throws android.os.RemoteException; | |||||
public int isBillingSupportedExtraParams(int apiVersion, java.lang.String packageName, java.lang.String type, android.os.Bundle extraParams) throws android.os.RemoteException; | |||||
} |
@@ -1,164 +0,0 @@ | |||||
/* | |||||
============================================================================== | |||||
This file is part of the JUCE library. | |||||
Copyright (c) 2017 - ROLI Ltd. | |||||
JUCE is an open source library subject to commercial or open-source | |||||
licensing. | |||||
By using JUCE, you agree to the terms of both the JUCE 5 End-User License | |||||
Agreement and JUCE 5 Privacy Policy (both updated and effective as of the | |||||
27th April 2017). | |||||
End User License Agreement: www.juce.com/juce-5-licence | |||||
Privacy Policy: www.juce.com/juce-5-privacy-policy | |||||
Or: You may also use this code under the terms of the GPL v3 (see | |||||
www.gnu.org/licenses). | |||||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER | |||||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE | |||||
DISCLAIMED. | |||||
============================================================================== | |||||
*/ | |||||
package com.juce.audioperformancetest; | |||||
import android.content.ContentProvider; | |||||
import android.content.ContentValues; | |||||
import android.content.res.AssetFileDescriptor; | |||||
import android.content.res.Resources; | |||||
import android.database.Cursor; | |||||
import android.database.MatrixCursor; | |||||
import android.net.Uri; | |||||
import android.os.FileObserver; | |||||
import android.os.ParcelFileDescriptor; | |||||
import java.lang.String; | |||||
public final class SharingContentProvider extends ContentProvider | |||||
{ | |||||
private Object lock = new Object(); | |||||
private native void contentSharerFileObserverEvent (long host, int event, String path); | |||||
private native Cursor contentSharerQuery (Uri uri, String[] projection, String selection, | |||||
String[] selectionArgs, String sortOrder); | |||||
private native void contentSharerCursorClosed (long host); | |||||
private native AssetFileDescriptor contentSharerOpenFile (Uri uri, String mode); | |||||
private native String[] contentSharerGetStreamTypes (Uri uri, String mimeTypeFilter); | |||||
public final class ProviderFileObserver extends FileObserver | |||||
{ | |||||
public ProviderFileObserver (long hostToUse, String path, int mask) | |||||
{ | |||||
super (path, mask); | |||||
host = hostToUse; | |||||
} | |||||
public void onEvent (int event, String path) | |||||
{ | |||||
contentSharerFileObserverEvent (host, event, path); | |||||
} | |||||
private long host; | |||||
} | |||||
public final class ProviderCursor extends MatrixCursor | |||||
{ | |||||
ProviderCursor (long hostToUse, String[] columnNames) | |||||
{ | |||||
super (columnNames); | |||||
host = hostToUse; | |||||
} | |||||
@Override | |||||
public void close() | |||||
{ | |||||
super.close(); | |||||
contentSharerCursorClosed (host); | |||||
} | |||||
private long host; | |||||
} | |||||
@Override | |||||
public boolean onCreate() | |||||
{ | |||||
return true; | |||||
} | |||||
@Override | |||||
public Cursor query (Uri url, String[] projection, String selection, | |||||
String[] selectionArgs, String sortOrder) | |||||
{ | |||||
synchronized (lock) | |||||
{ | |||||
return contentSharerQuery (url, projection, selection, selectionArgs, sortOrder); | |||||
} | |||||
} | |||||
@Override | |||||
public Uri insert (Uri uri, ContentValues values) | |||||
{ | |||||
return null; | |||||
} | |||||
@Override | |||||
public int update (Uri uri, ContentValues values, String selection, | |||||
String[] selectionArgs) | |||||
{ | |||||
return 0; | |||||
} | |||||
@Override | |||||
public int delete (Uri uri, String selection, String[] selectionArgs) | |||||
{ | |||||
return 0; | |||||
} | |||||
@Override | |||||
public String getType (Uri uri) | |||||
{ | |||||
return null; | |||||
} | |||||
@Override | |||||
public AssetFileDescriptor openAssetFile (Uri uri, String mode) | |||||
{ | |||||
synchronized (lock) | |||||
{ | |||||
return contentSharerOpenFile (uri, mode); | |||||
} | |||||
} | |||||
@Override | |||||
public ParcelFileDescriptor openFile (Uri uri, String mode) | |||||
{ | |||||
synchronized (lock) | |||||
{ | |||||
AssetFileDescriptor result = contentSharerOpenFile (uri, mode); | |||||
if (result != null) | |||||
return result.getParcelFileDescriptor(); | |||||
return null; | |||||
} | |||||
} | |||||
@Override | |||||
public String[] getStreamTypes (Uri uri, String mimeTypeFilter) | |||||
{ | |||||
synchronized (lock) | |||||
{ | |||||
return contentSharerGetStreamTypes (uri, mimeTypeFilter); | |||||
} | |||||
} | |||||
} |
@@ -1,949 +0,0 @@ | |||||
package com.android.vending.billing; | |||||
/** | |||||
* InAppBillingService is the service that provides in-app billing version 3 and beyond. | |||||
* This service provides the following features: | |||||
* 1. Provides a new API to get details of in-app items published for the app including | |||||
* price, type, title and description. | |||||
* 2. The purchase flow is synchronous and purchase information is available immediately | |||||
* after it completes. | |||||
* 3. Purchase information of in-app purchases is maintained within the Google Play system | |||||
* till the purchase is consumed. | |||||
* 4. An API to consume a purchase of an inapp item. All purchases of one-time | |||||
* in-app items are consumable and thereafter can be purchased again. | |||||
* 5. An API to get current purchases of the user immediately. This will not contain any | |||||
* consumed purchases. | |||||
* | |||||
* All calls will give a response code with the following possible values | |||||
* RESULT_OK = 0 - success | |||||
* RESULT_USER_CANCELED = 1 - User pressed back or canceled a dialog | |||||
* RESULT_SERVICE_UNAVAILABLE = 2 - The network connection is down | |||||
* RESULT_BILLING_UNAVAILABLE = 3 - This billing API version is not supported for the type requested | |||||
* RESULT_ITEM_UNAVAILABLE = 4 - Requested SKU is not available for purchase | |||||
* RESULT_DEVELOPER_ERROR = 5 - Invalid arguments provided to the API | |||||
* RESULT_ERROR = 6 - Fatal error during the API action | |||||
* RESULT_ITEM_ALREADY_OWNED = 7 - Failure to purchase since item is already owned | |||||
* RESULT_ITEM_NOT_OWNED = 8 - Failure to consume since item is not owned | |||||
*/ | |||||
public interface IInAppBillingService extends android.os.IInterface | |||||
{ | |||||
/** Local-side IPC implementation stub class. */ | |||||
public static abstract class Stub extends android.os.Binder implements com.android.vending.billing.IInAppBillingService | |||||
{ | |||||
private static final java.lang.String DESCRIPTOR = "com.android.vending.billing.IInAppBillingService"; | |||||
/** Construct the stub at attach it to the interface. */ | |||||
public Stub() | |||||
{ | |||||
this.attachInterface(this, DESCRIPTOR); | |||||
} | |||||
/** | |||||
* Cast an IBinder object into an com.android.vending.billing.IInAppBillingService interface, | |||||
* generating a proxy if needed. | |||||
*/ | |||||
public static com.android.vending.billing.IInAppBillingService asInterface(android.os.IBinder obj) | |||||
{ | |||||
if ((obj==null)) { | |||||
return null; | |||||
} | |||||
android.os.IInterface iin = obj.queryLocalInterface(DESCRIPTOR); | |||||
if (((iin!=null)&&(iin instanceof com.android.vending.billing.IInAppBillingService))) { | |||||
return ((com.android.vending.billing.IInAppBillingService)iin); | |||||
} | |||||
return new com.android.vending.billing.IInAppBillingService.Stub.Proxy(obj); | |||||
} | |||||
@Override public android.os.IBinder asBinder() | |||||
{ | |||||
return this; | |||||
} | |||||
@Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException | |||||
{ | |||||
switch (code) | |||||
{ | |||||
case INTERFACE_TRANSACTION: | |||||
{ | |||||
reply.writeString(DESCRIPTOR); | |||||
return true; | |||||
} | |||||
case TRANSACTION_isBillingSupported: | |||||
{ | |||||
data.enforceInterface(DESCRIPTOR); | |||||
int _arg0; | |||||
_arg0 = data.readInt(); | |||||
java.lang.String _arg1; | |||||
_arg1 = data.readString(); | |||||
java.lang.String _arg2; | |||||
_arg2 = data.readString(); | |||||
int _result = this.isBillingSupported(_arg0, _arg1, _arg2); | |||||
reply.writeNoException(); | |||||
reply.writeInt(_result); | |||||
return true; | |||||
} | |||||
case TRANSACTION_getSkuDetails: | |||||
{ | |||||
data.enforceInterface(DESCRIPTOR); | |||||
int _arg0; | |||||
_arg0 = data.readInt(); | |||||
java.lang.String _arg1; | |||||
_arg1 = data.readString(); | |||||
java.lang.String _arg2; | |||||
_arg2 = data.readString(); | |||||
android.os.Bundle _arg3; | |||||
if ((0!=data.readInt())) { | |||||
_arg3 = android.os.Bundle.CREATOR.createFromParcel(data); | |||||
} | |||||
else { | |||||
_arg3 = null; | |||||
} | |||||
android.os.Bundle _result = this.getSkuDetails(_arg0, _arg1, _arg2, _arg3); | |||||
reply.writeNoException(); | |||||
if ((_result!=null)) { | |||||
reply.writeInt(1); | |||||
_result.writeToParcel(reply, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE); | |||||
} | |||||
else { | |||||
reply.writeInt(0); | |||||
} | |||||
return true; | |||||
} | |||||
case TRANSACTION_getBuyIntent: | |||||
{ | |||||
data.enforceInterface(DESCRIPTOR); | |||||
int _arg0; | |||||
_arg0 = data.readInt(); | |||||
java.lang.String _arg1; | |||||
_arg1 = data.readString(); | |||||
java.lang.String _arg2; | |||||
_arg2 = data.readString(); | |||||
java.lang.String _arg3; | |||||
_arg3 = data.readString(); | |||||
java.lang.String _arg4; | |||||
_arg4 = data.readString(); | |||||
android.os.Bundle _result = this.getBuyIntent(_arg0, _arg1, _arg2, _arg3, _arg4); | |||||
reply.writeNoException(); | |||||
if ((_result!=null)) { | |||||
reply.writeInt(1); | |||||
_result.writeToParcel(reply, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE); | |||||
} | |||||
else { | |||||
reply.writeInt(0); | |||||
} | |||||
return true; | |||||
} | |||||
case TRANSACTION_getPurchases: | |||||
{ | |||||
data.enforceInterface(DESCRIPTOR); | |||||
int _arg0; | |||||
_arg0 = data.readInt(); | |||||
java.lang.String _arg1; | |||||
_arg1 = data.readString(); | |||||
java.lang.String _arg2; | |||||
_arg2 = data.readString(); | |||||
java.lang.String _arg3; | |||||
_arg3 = data.readString(); | |||||
android.os.Bundle _result = this.getPurchases(_arg0, _arg1, _arg2, _arg3); | |||||
reply.writeNoException(); | |||||
if ((_result!=null)) { | |||||
reply.writeInt(1); | |||||
_result.writeToParcel(reply, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE); | |||||
} | |||||
else { | |||||
reply.writeInt(0); | |||||
} | |||||
return true; | |||||
} | |||||
case TRANSACTION_consumePurchase: | |||||
{ | |||||
data.enforceInterface(DESCRIPTOR); | |||||
int _arg0; | |||||
_arg0 = data.readInt(); | |||||
java.lang.String _arg1; | |||||
_arg1 = data.readString(); | |||||
java.lang.String _arg2; | |||||
_arg2 = data.readString(); | |||||
int _result = this.consumePurchase(_arg0, _arg1, _arg2); | |||||
reply.writeNoException(); | |||||
reply.writeInt(_result); | |||||
return true; | |||||
} | |||||
case TRANSACTION_stub: | |||||
{ | |||||
data.enforceInterface(DESCRIPTOR); | |||||
int _arg0; | |||||
_arg0 = data.readInt(); | |||||
java.lang.String _arg1; | |||||
_arg1 = data.readString(); | |||||
java.lang.String _arg2; | |||||
_arg2 = data.readString(); | |||||
int _result = this.stub(_arg0, _arg1, _arg2); | |||||
reply.writeNoException(); | |||||
reply.writeInt(_result); | |||||
return true; | |||||
} | |||||
case TRANSACTION_getBuyIntentToReplaceSkus: | |||||
{ | |||||
data.enforceInterface(DESCRIPTOR); | |||||
int _arg0; | |||||
_arg0 = data.readInt(); | |||||
java.lang.String _arg1; | |||||
_arg1 = data.readString(); | |||||
java.util.List<java.lang.String> _arg2; | |||||
_arg2 = data.createStringArrayList(); | |||||
java.lang.String _arg3; | |||||
_arg3 = data.readString(); | |||||
java.lang.String _arg4; | |||||
_arg4 = data.readString(); | |||||
java.lang.String _arg5; | |||||
_arg5 = data.readString(); | |||||
android.os.Bundle _result = this.getBuyIntentToReplaceSkus(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5); | |||||
reply.writeNoException(); | |||||
if ((_result!=null)) { | |||||
reply.writeInt(1); | |||||
_result.writeToParcel(reply, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE); | |||||
} | |||||
else { | |||||
reply.writeInt(0); | |||||
} | |||||
return true; | |||||
} | |||||
case TRANSACTION_getBuyIntentExtraParams: | |||||
{ | |||||
data.enforceInterface(DESCRIPTOR); | |||||
int _arg0; | |||||
_arg0 = data.readInt(); | |||||
java.lang.String _arg1; | |||||
_arg1 = data.readString(); | |||||
java.lang.String _arg2; | |||||
_arg2 = data.readString(); | |||||
java.lang.String _arg3; | |||||
_arg3 = data.readString(); | |||||
java.lang.String _arg4; | |||||
_arg4 = data.readString(); | |||||
android.os.Bundle _arg5; | |||||
if ((0!=data.readInt())) { | |||||
_arg5 = android.os.Bundle.CREATOR.createFromParcel(data); | |||||
} | |||||
else { | |||||
_arg5 = null; | |||||
} | |||||
android.os.Bundle _result = this.getBuyIntentExtraParams(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5); | |||||
reply.writeNoException(); | |||||
if ((_result!=null)) { | |||||
reply.writeInt(1); | |||||
_result.writeToParcel(reply, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE); | |||||
} | |||||
else { | |||||
reply.writeInt(0); | |||||
} | |||||
return true; | |||||
} | |||||
case TRANSACTION_getPurchaseHistory: | |||||
{ | |||||
data.enforceInterface(DESCRIPTOR); | |||||
int _arg0; | |||||
_arg0 = data.readInt(); | |||||
java.lang.String _arg1; | |||||
_arg1 = data.readString(); | |||||
java.lang.String _arg2; | |||||
_arg2 = data.readString(); | |||||
java.lang.String _arg3; | |||||
_arg3 = data.readString(); | |||||
android.os.Bundle _arg4; | |||||
if ((0!=data.readInt())) { | |||||
_arg4 = android.os.Bundle.CREATOR.createFromParcel(data); | |||||
} | |||||
else { | |||||
_arg4 = null; | |||||
} | |||||
android.os.Bundle _result = this.getPurchaseHistory(_arg0, _arg1, _arg2, _arg3, _arg4); | |||||
reply.writeNoException(); | |||||
if ((_result!=null)) { | |||||
reply.writeInt(1); | |||||
_result.writeToParcel(reply, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE); | |||||
} | |||||
else { | |||||
reply.writeInt(0); | |||||
} | |||||
return true; | |||||
} | |||||
case TRANSACTION_isBillingSupportedExtraParams: | |||||
{ | |||||
data.enforceInterface(DESCRIPTOR); | |||||
int _arg0; | |||||
_arg0 = data.readInt(); | |||||
java.lang.String _arg1; | |||||
_arg1 = data.readString(); | |||||
java.lang.String _arg2; | |||||
_arg2 = data.readString(); | |||||
android.os.Bundle _arg3; | |||||
if ((0!=data.readInt())) { | |||||
_arg3 = android.os.Bundle.CREATOR.createFromParcel(data); | |||||
} | |||||
else { | |||||
_arg3 = null; | |||||
} | |||||
int _result = this.isBillingSupportedExtraParams(_arg0, _arg1, _arg2, _arg3); | |||||
reply.writeNoException(); | |||||
reply.writeInt(_result); | |||||
return true; | |||||
} | |||||
} | |||||
return super.onTransact(code, data, reply, flags); | |||||
} | |||||
private static class Proxy implements com.android.vending.billing.IInAppBillingService | |||||
{ | |||||
private android.os.IBinder mRemote; | |||||
Proxy(android.os.IBinder remote) | |||||
{ | |||||
mRemote = remote; | |||||
} | |||||
@Override public android.os.IBinder asBinder() | |||||
{ | |||||
return mRemote; | |||||
} | |||||
public java.lang.String getInterfaceDescriptor() | |||||
{ | |||||
return DESCRIPTOR; | |||||
} | |||||
@Override public int isBillingSupported(int apiVersion, java.lang.String packageName, java.lang.String type) throws android.os.RemoteException | |||||
{ | |||||
android.os.Parcel _data = android.os.Parcel.obtain(); | |||||
android.os.Parcel _reply = android.os.Parcel.obtain(); | |||||
int _result; | |||||
try { | |||||
_data.writeInterfaceToken(DESCRIPTOR); | |||||
_data.writeInt(apiVersion); | |||||
_data.writeString(packageName); | |||||
_data.writeString(type); | |||||
mRemote.transact(Stub.TRANSACTION_isBillingSupported, _data, _reply, 0); | |||||
_reply.readException(); | |||||
_result = _reply.readInt(); | |||||
} | |||||
finally { | |||||
_reply.recycle(); | |||||
_data.recycle(); | |||||
} | |||||
return _result; | |||||
} | |||||
/** | |||||
* Provides details of a list of SKUs | |||||
* Given a list of SKUs of a valid type in the skusBundle, this returns a bundle | |||||
* with a list JSON strings containing the productId, price, title and description. | |||||
* This API can be called with a maximum of 20 SKUs. | |||||
* @param apiVersion billing API version that the app is using | |||||
* @param packageName the package name of the calling app | |||||
* @param type of the in-app items ("inapp" for one-time purchases | |||||
* and "subs" for subscriptions) | |||||
* @param skusBundle bundle containing a StringArrayList of SKUs with key "ITEM_ID_LIST" | |||||
* @return Bundle containing the following key-value pairs | |||||
* "RESPONSE_CODE" with int value, RESULT_OK(0) if success, appropriate response codes | |||||
* on failures. | |||||
* "DETAILS_LIST" with a StringArrayList containing purchase information | |||||
* in JSON format similar to: | |||||
* '{ "productId" : "exampleSku", | |||||
* "type" : "inapp", | |||||
* "price" : "$5.00", | |||||
* "price_currency": "USD", | |||||
* "price_amount_micros": 5000000, | |||||
* "title : "Example Title", | |||||
* "description" : "This is an example description" }' | |||||
*/ | |||||
@Override public android.os.Bundle getSkuDetails(int apiVersion, java.lang.String packageName, java.lang.String type, android.os.Bundle skusBundle) throws android.os.RemoteException | |||||
{ | |||||
android.os.Parcel _data = android.os.Parcel.obtain(); | |||||
android.os.Parcel _reply = android.os.Parcel.obtain(); | |||||
android.os.Bundle _result; | |||||
try { | |||||
_data.writeInterfaceToken(DESCRIPTOR); | |||||
_data.writeInt(apiVersion); | |||||
_data.writeString(packageName); | |||||
_data.writeString(type); | |||||
if ((skusBundle!=null)) { | |||||
_data.writeInt(1); | |||||
skusBundle.writeToParcel(_data, 0); | |||||
} | |||||
else { | |||||
_data.writeInt(0); | |||||
} | |||||
mRemote.transact(Stub.TRANSACTION_getSkuDetails, _data, _reply, 0); | |||||
_reply.readException(); | |||||
if ((0!=_reply.readInt())) { | |||||
_result = android.os.Bundle.CREATOR.createFromParcel(_reply); | |||||
} | |||||
else { | |||||
_result = null; | |||||
} | |||||
} | |||||
finally { | |||||
_reply.recycle(); | |||||
_data.recycle(); | |||||
} | |||||
return _result; | |||||
} | |||||
/** | |||||
* Returns a pending intent to launch the purchase flow for an in-app item by providing a SKU, | |||||
* the type, a unique purchase token and an optional developer payload. | |||||
* @param apiVersion billing API version that the app is using | |||||
* @param packageName package name of the calling app | |||||
* @param sku the SKU of the in-app item as published in the developer console | |||||
* @param type of the in-app item being purchased ("inapp" for one-time purchases | |||||
* and "subs" for subscriptions) | |||||
* @param developerPayload optional argument to be sent back with the purchase information | |||||
* @return Bundle containing the following key-value pairs | |||||
* "RESPONSE_CODE" with int value, RESULT_OK(0) if success, appropriate response codes | |||||
* on failures. | |||||
* "BUY_INTENT" - PendingIntent to start the purchase flow | |||||
* | |||||
* The Pending intent should be launched with startIntentSenderForResult. When purchase flow | |||||
* has completed, the onActivityResult() will give a resultCode of OK or CANCELED. | |||||
* If the purchase is successful, the result data will contain the following key-value pairs | |||||
* "RESPONSE_CODE" with int value, RESULT_OK(0) if success, appropriate response | |||||
* codes on failures. | |||||
* "INAPP_PURCHASE_DATA" - String in JSON format similar to | |||||
* '{"orderId":"12999763169054705758.1371079406387615", | |||||
* "packageName":"com.example.app", | |||||
* "productId":"exampleSku", | |||||
* "purchaseTime":1345678900000, | |||||
* "purchaseToken" : "122333444455555", | |||||
* "developerPayload":"example developer payload" }' | |||||
* "INAPP_DATA_SIGNATURE" - String containing the signature of the purchase data that | |||||
* was signed with the private key of the developer | |||||
*/ | |||||
@Override public android.os.Bundle getBuyIntent(int apiVersion, java.lang.String packageName, java.lang.String sku, java.lang.String type, java.lang.String developerPayload) throws android.os.RemoteException | |||||
{ | |||||
android.os.Parcel _data = android.os.Parcel.obtain(); | |||||
android.os.Parcel _reply = android.os.Parcel.obtain(); | |||||
android.os.Bundle _result; | |||||
try { | |||||
_data.writeInterfaceToken(DESCRIPTOR); | |||||
_data.writeInt(apiVersion); | |||||
_data.writeString(packageName); | |||||
_data.writeString(sku); | |||||
_data.writeString(type); | |||||
_data.writeString(developerPayload); | |||||
mRemote.transact(Stub.TRANSACTION_getBuyIntent, _data, _reply, 0); | |||||
_reply.readException(); | |||||
if ((0!=_reply.readInt())) { | |||||
_result = android.os.Bundle.CREATOR.createFromParcel(_reply); | |||||
} | |||||
else { | |||||
_result = null; | |||||
} | |||||
} | |||||
finally { | |||||
_reply.recycle(); | |||||
_data.recycle(); | |||||
} | |||||
return _result; | |||||
} | |||||
/** | |||||
* Returns the current SKUs owned by the user of the type and package name specified along with | |||||
* purchase information and a signature of the data to be validated. | |||||
* This will return all SKUs that have been purchased in V3 and managed items purchased using | |||||
* V1 and V2 that have not been consumed. | |||||
* @param apiVersion billing API version that the app is using | |||||
* @param packageName package name of the calling app | |||||
* @param type of the in-app items being requested ("inapp" for one-time purchases | |||||
* and "subs" for subscriptions) | |||||
* @param continuationToken to be set as null for the first call, if the number of owned | |||||
* skus are too many, a continuationToken is returned in the response bundle. | |||||
* This method can be called again with the continuation token to get the next set of | |||||
* owned skus. | |||||
* @return Bundle containing the following key-value pairs | |||||
* "RESPONSE_CODE" with int value, RESULT_OK(0) if success, appropriate response codes | |||||
on failures. | |||||
* "INAPP_PURCHASE_ITEM_LIST" - StringArrayList containing the list of SKUs | |||||
* "INAPP_PURCHASE_DATA_LIST" - StringArrayList containing the purchase information | |||||
* "INAPP_DATA_SIGNATURE_LIST"- StringArrayList containing the signatures | |||||
* of the purchase information | |||||
* "INAPP_CONTINUATION_TOKEN" - String containing a continuation token for the | |||||
* next set of in-app purchases. Only set if the | |||||
* user has more owned skus than the current list. | |||||
*/ | |||||
@Override public android.os.Bundle getPurchases(int apiVersion, java.lang.String packageName, java.lang.String type, java.lang.String continuationToken) throws android.os.RemoteException | |||||
{ | |||||
android.os.Parcel _data = android.os.Parcel.obtain(); | |||||
android.os.Parcel _reply = android.os.Parcel.obtain(); | |||||
android.os.Bundle _result; | |||||
try { | |||||
_data.writeInterfaceToken(DESCRIPTOR); | |||||
_data.writeInt(apiVersion); | |||||
_data.writeString(packageName); | |||||
_data.writeString(type); | |||||
_data.writeString(continuationToken); | |||||
mRemote.transact(Stub.TRANSACTION_getPurchases, _data, _reply, 0); | |||||
_reply.readException(); | |||||
if ((0!=_reply.readInt())) { | |||||
_result = android.os.Bundle.CREATOR.createFromParcel(_reply); | |||||
} | |||||
else { | |||||
_result = null; | |||||
} | |||||
} | |||||
finally { | |||||
_reply.recycle(); | |||||
_data.recycle(); | |||||
} | |||||
return _result; | |||||
} | |||||
@Override public int consumePurchase(int apiVersion, java.lang.String packageName, java.lang.String purchaseToken) throws android.os.RemoteException | |||||
{ | |||||
android.os.Parcel _data = android.os.Parcel.obtain(); | |||||
android.os.Parcel _reply = android.os.Parcel.obtain(); | |||||
int _result; | |||||
try { | |||||
_data.writeInterfaceToken(DESCRIPTOR); | |||||
_data.writeInt(apiVersion); | |||||
_data.writeString(packageName); | |||||
_data.writeString(purchaseToken); | |||||
mRemote.transact(Stub.TRANSACTION_consumePurchase, _data, _reply, 0); | |||||
_reply.readException(); | |||||
_result = _reply.readInt(); | |||||
} | |||||
finally { | |||||
_reply.recycle(); | |||||
_data.recycle(); | |||||
} | |||||
return _result; | |||||
} | |||||
@Override public int stub(int apiVersion, java.lang.String packageName, java.lang.String type) throws android.os.RemoteException | |||||
{ | |||||
android.os.Parcel _data = android.os.Parcel.obtain(); | |||||
android.os.Parcel _reply = android.os.Parcel.obtain(); | |||||
int _result; | |||||
try { | |||||
_data.writeInterfaceToken(DESCRIPTOR); | |||||
_data.writeInt(apiVersion); | |||||
_data.writeString(packageName); | |||||
_data.writeString(type); | |||||
mRemote.transact(Stub.TRANSACTION_stub, _data, _reply, 0); | |||||
_reply.readException(); | |||||
_result = _reply.readInt(); | |||||
} | |||||
finally { | |||||
_reply.recycle(); | |||||
_data.recycle(); | |||||
} | |||||
return _result; | |||||
} | |||||
/** | |||||
* Returns a pending intent to launch the purchase flow for upgrading or downgrading a | |||||
* subscription. The existing owned SKU(s) should be provided along with the new SKU that | |||||
* the user is upgrading or downgrading to. | |||||
* @param apiVersion billing API version that the app is using, must be 5 or later | |||||
* @param packageName package name of the calling app | |||||
* @param oldSkus the SKU(s) that the user is upgrading or downgrading from, | |||||
* if null or empty this method will behave like {@link #getBuyIntent} | |||||
* @param newSku the SKU that the user is upgrading or downgrading to | |||||
* @param type of the item being purchased, currently must be "subs" | |||||
* @param developerPayload optional argument to be sent back with the purchase information | |||||
* @return Bundle containing the following key-value pairs | |||||
* "RESPONSE_CODE" with int value, RESULT_OK(0) if success, appropriate response codes | |||||
* on failures. | |||||
* "BUY_INTENT" - PendingIntent to start the purchase flow | |||||
* | |||||
* The Pending intent should be launched with startIntentSenderForResult. When purchase flow | |||||
* has completed, the onActivityResult() will give a resultCode of OK or CANCELED. | |||||
* If the purchase is successful, the result data will contain the following key-value pairs | |||||
* "RESPONSE_CODE" with int value, RESULT_OK(0) if success, appropriate response | |||||
* codes on failures. | |||||
* "INAPP_PURCHASE_DATA" - String in JSON format similar to | |||||
* '{"orderId":"12999763169054705758.1371079406387615", | |||||
* "packageName":"com.example.app", | |||||
* "productId":"exampleSku", | |||||
* "purchaseTime":1345678900000, | |||||
* "purchaseToken" : "122333444455555", | |||||
* "developerPayload":"example developer payload" }' | |||||
* "INAPP_DATA_SIGNATURE" - String containing the signature of the purchase data that | |||||
* was signed with the private key of the developer | |||||
*/ | |||||
@Override public android.os.Bundle getBuyIntentToReplaceSkus(int apiVersion, java.lang.String packageName, java.util.List<java.lang.String> oldSkus, java.lang.String newSku, java.lang.String type, java.lang.String developerPayload) throws android.os.RemoteException | |||||
{ | |||||
android.os.Parcel _data = android.os.Parcel.obtain(); | |||||
android.os.Parcel _reply = android.os.Parcel.obtain(); | |||||
android.os.Bundle _result; | |||||
try { | |||||
_data.writeInterfaceToken(DESCRIPTOR); | |||||
_data.writeInt(apiVersion); | |||||
_data.writeString(packageName); | |||||
_data.writeStringList(oldSkus); | |||||
_data.writeString(newSku); | |||||
_data.writeString(type); | |||||
_data.writeString(developerPayload); | |||||
mRemote.transact(Stub.TRANSACTION_getBuyIntentToReplaceSkus, _data, _reply, 0); | |||||
_reply.readException(); | |||||
if ((0!=_reply.readInt())) { | |||||
_result = android.os.Bundle.CREATOR.createFromParcel(_reply); | |||||
} | |||||
else { | |||||
_result = null; | |||||
} | |||||
} | |||||
finally { | |||||
_reply.recycle(); | |||||
_data.recycle(); | |||||
} | |||||
return _result; | |||||
} | |||||
/** | |||||
* Returns a pending intent to launch the purchase flow for an in-app item. This method is | |||||
* a variant of the {@link #getBuyIntent} method and takes an additional {@code extraParams} | |||||
* parameter. This parameter is a Bundle of optional keys and values that affect the | |||||
* operation of the method. | |||||
* @param apiVersion billing API version that the app is using, must be 6 or later | |||||
* @param packageName package name of the calling app | |||||
* @param sku the SKU of the in-app item as published in the developer console | |||||
* @param type of the in-app item being purchased ("inapp" for one-time purchases | |||||
* and "subs" for subscriptions) | |||||
* @param developerPayload optional argument to be sent back with the purchase information | |||||
* @extraParams a Bundle with the following optional keys: | |||||
* "skusToReplace" - List<String> - an optional list of SKUs that the user is | |||||
* upgrading or downgrading from. | |||||
* Pass this field if the purchase is upgrading or downgrading | |||||
* existing subscriptions. | |||||
* The specified SKUs are replaced with the SKUs that the user is | |||||
* purchasing. Google Play replaces the specified SKUs at the start of | |||||
* the next billing cycle. | |||||
* "replaceSkusProration" - Boolean - whether the user should be credited for any unused | |||||
* subscription time on the SKUs they are upgrading or downgrading. | |||||
* If you set this field to true, Google Play swaps out the old SKUs | |||||
* and credits the user with the unused value of their subscription | |||||
* time on a pro-rated basis. | |||||
* Google Play applies this credit to the new subscription, and does | |||||
* not begin billing the user for the new subscription until after | |||||
* the credit is used up. | |||||
* If you set this field to false, the user does not receive credit for | |||||
* any unused subscription time and the recurrence date does not | |||||
* change. | |||||
* Default value is true. Ignored if you do not pass skusToReplace. | |||||
* "accountId" - String - an optional obfuscated string that is uniquely | |||||
* associated with the user's account in your app. | |||||
* If you pass this value, Google Play can use it to detect irregular | |||||
* activity, such as many devices making purchases on the same | |||||
* account in a short period of time. | |||||
* Do not use the developer ID or the user's Google ID for this field. | |||||
* In addition, this field should not contain the user's ID in | |||||
* cleartext. | |||||
* We recommend that you use a one-way hash to generate a string from | |||||
* the user's ID, and store the hashed string in this field. | |||||
* "vr" - Boolean - an optional flag indicating whether the returned intent | |||||
* should start a VR purchase flow. The apiVersion must also be 7 or | |||||
* later to use this flag. | |||||
*/ | |||||
@Override public android.os.Bundle getBuyIntentExtraParams(int apiVersion, java.lang.String packageName, java.lang.String sku, java.lang.String type, java.lang.String developerPayload, android.os.Bundle extraParams) throws android.os.RemoteException | |||||
{ | |||||
android.os.Parcel _data = android.os.Parcel.obtain(); | |||||
android.os.Parcel _reply = android.os.Parcel.obtain(); | |||||
android.os.Bundle _result; | |||||
try { | |||||
_data.writeInterfaceToken(DESCRIPTOR); | |||||
_data.writeInt(apiVersion); | |||||
_data.writeString(packageName); | |||||
_data.writeString(sku); | |||||
_data.writeString(type); | |||||
_data.writeString(developerPayload); | |||||
if ((extraParams!=null)) { | |||||
_data.writeInt(1); | |||||
extraParams.writeToParcel(_data, 0); | |||||
} | |||||
else { | |||||
_data.writeInt(0); | |||||
} | |||||
mRemote.transact(Stub.TRANSACTION_getBuyIntentExtraParams, _data, _reply, 0); | |||||
_reply.readException(); | |||||
if ((0!=_reply.readInt())) { | |||||
_result = android.os.Bundle.CREATOR.createFromParcel(_reply); | |||||
} | |||||
else { | |||||
_result = null; | |||||
} | |||||
} | |||||
finally { | |||||
_reply.recycle(); | |||||
_data.recycle(); | |||||
} | |||||
return _result; | |||||
} | |||||
/** | |||||
* Returns the most recent purchase made by the user for each SKU, even if that purchase is | |||||
* expired, canceled, or consumed. | |||||
* @param apiVersion billing API version that the app is using, must be 6 or later | |||||
* @param packageName package name of the calling app | |||||
* @param type of the in-app items being requested ("inapp" for one-time purchases | |||||
* and "subs" for subscriptions) | |||||
* @param continuationToken to be set as null for the first call, if the number of owned | |||||
* skus is too large, a continuationToken is returned in the response bundle. | |||||
* This method can be called again with the continuation token to get the next set of | |||||
* owned skus. | |||||
* @param extraParams a Bundle with extra params that would be appended into http request | |||||
* query string. Not used at this moment. Reserved for future functionality. | |||||
* @return Bundle containing the following key-value pairs | |||||
* "RESPONSE_CODE" with int value: RESULT_OK(0) if success, | |||||
* {@link IabHelper#BILLING_RESPONSE_RESULT_*} response codes on failures. | |||||
* | |||||
* "INAPP_PURCHASE_ITEM_LIST" - ArrayList<String> containing the list of SKUs | |||||
* "INAPP_PURCHASE_DATA_LIST" - ArrayList<String> containing the purchase information | |||||
* "INAPP_DATA_SIGNATURE_LIST"- ArrayList<String> containing the signatures | |||||
* of the purchase information | |||||
* "INAPP_CONTINUATION_TOKEN" - String containing a continuation token for the | |||||
* next set of in-app purchases. Only set if the | |||||
* user has more owned skus than the current list. | |||||
*/ | |||||
@Override public android.os.Bundle getPurchaseHistory(int apiVersion, java.lang.String packageName, java.lang.String type, java.lang.String continuationToken, android.os.Bundle extraParams) throws android.os.RemoteException | |||||
{ | |||||
android.os.Parcel _data = android.os.Parcel.obtain(); | |||||
android.os.Parcel _reply = android.os.Parcel.obtain(); | |||||
android.os.Bundle _result; | |||||
try { | |||||
_data.writeInterfaceToken(DESCRIPTOR); | |||||
_data.writeInt(apiVersion); | |||||
_data.writeString(packageName); | |||||
_data.writeString(type); | |||||
_data.writeString(continuationToken); | |||||
if ((extraParams!=null)) { | |||||
_data.writeInt(1); | |||||
extraParams.writeToParcel(_data, 0); | |||||
} | |||||
else { | |||||
_data.writeInt(0); | |||||
} | |||||
mRemote.transact(Stub.TRANSACTION_getPurchaseHistory, _data, _reply, 0); | |||||
_reply.readException(); | |||||
if ((0!=_reply.readInt())) { | |||||
_result = android.os.Bundle.CREATOR.createFromParcel(_reply); | |||||
} | |||||
else { | |||||
_result = null; | |||||
} | |||||
} | |||||
finally { | |||||
_reply.recycle(); | |||||
_data.recycle(); | |||||
} | |||||
return _result; | |||||
} | |||||
@Override public int isBillingSupportedExtraParams(int apiVersion, java.lang.String packageName, java.lang.String type, android.os.Bundle extraParams) throws android.os.RemoteException | |||||
{ | |||||
android.os.Parcel _data = android.os.Parcel.obtain(); | |||||
android.os.Parcel _reply = android.os.Parcel.obtain(); | |||||
int _result; | |||||
try { | |||||
_data.writeInterfaceToken(DESCRIPTOR); | |||||
_data.writeInt(apiVersion); | |||||
_data.writeString(packageName); | |||||
_data.writeString(type); | |||||
if ((extraParams!=null)) { | |||||
_data.writeInt(1); | |||||
extraParams.writeToParcel(_data, 0); | |||||
} | |||||
else { | |||||
_data.writeInt(0); | |||||
} | |||||
mRemote.transact(Stub.TRANSACTION_isBillingSupportedExtraParams, _data, _reply, 0); | |||||
_reply.readException(); | |||||
_result = _reply.readInt(); | |||||
} | |||||
finally { | |||||
_reply.recycle(); | |||||
_data.recycle(); | |||||
} | |||||
return _result; | |||||
} | |||||
} | |||||
static final int TRANSACTION_isBillingSupported = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0); | |||||
static final int TRANSACTION_getSkuDetails = (android.os.IBinder.FIRST_CALL_TRANSACTION + 1); | |||||
static final int TRANSACTION_getBuyIntent = (android.os.IBinder.FIRST_CALL_TRANSACTION + 2); | |||||
static final int TRANSACTION_getPurchases = (android.os.IBinder.FIRST_CALL_TRANSACTION + 3); | |||||
static final int TRANSACTION_consumePurchase = (android.os.IBinder.FIRST_CALL_TRANSACTION + 4); | |||||
static final int TRANSACTION_stub = (android.os.IBinder.FIRST_CALL_TRANSACTION + 5); | |||||
static final int TRANSACTION_getBuyIntentToReplaceSkus = (android.os.IBinder.FIRST_CALL_TRANSACTION + 6); | |||||
static final int TRANSACTION_getBuyIntentExtraParams = (android.os.IBinder.FIRST_CALL_TRANSACTION + 7); | |||||
static final int TRANSACTION_getPurchaseHistory = (android.os.IBinder.FIRST_CALL_TRANSACTION + 8); | |||||
static final int TRANSACTION_isBillingSupportedExtraParams = (android.os.IBinder.FIRST_CALL_TRANSACTION + 9); | |||||
} | |||||
public int isBillingSupported(int apiVersion, java.lang.String packageName, java.lang.String type) throws android.os.RemoteException; | |||||
/** | |||||
* Provides details of a list of SKUs | |||||
* Given a list of SKUs of a valid type in the skusBundle, this returns a bundle | |||||
* with a list JSON strings containing the productId, price, title and description. | |||||
* This API can be called with a maximum of 20 SKUs. | |||||
* @param apiVersion billing API version that the app is using | |||||
* @param packageName the package name of the calling app | |||||
* @param type of the in-app items ("inapp" for one-time purchases | |||||
* and "subs" for subscriptions) | |||||
* @param skusBundle bundle containing a StringArrayList of SKUs with key "ITEM_ID_LIST" | |||||
* @return Bundle containing the following key-value pairs | |||||
* "RESPONSE_CODE" with int value, RESULT_OK(0) if success, appropriate response codes | |||||
* on failures. | |||||
* "DETAILS_LIST" with a StringArrayList containing purchase information | |||||
* in JSON format similar to: | |||||
* '{ "productId" : "exampleSku", | |||||
* "type" : "inapp", | |||||
* "price" : "$5.00", | |||||
* "price_currency": "USD", | |||||
* "price_amount_micros": 5000000, | |||||
* "title : "Example Title", | |||||
* "description" : "This is an example description" }' | |||||
*/ | |||||
public android.os.Bundle getSkuDetails(int apiVersion, java.lang.String packageName, java.lang.String type, android.os.Bundle skusBundle) throws android.os.RemoteException; | |||||
/** | |||||
* Returns a pending intent to launch the purchase flow for an in-app item by providing a SKU, | |||||
* the type, a unique purchase token and an optional developer payload. | |||||
* @param apiVersion billing API version that the app is using | |||||
* @param packageName package name of the calling app | |||||
* @param sku the SKU of the in-app item as published in the developer console | |||||
* @param type of the in-app item being purchased ("inapp" for one-time purchases | |||||
* and "subs" for subscriptions) | |||||
* @param developerPayload optional argument to be sent back with the purchase information | |||||
* @return Bundle containing the following key-value pairs | |||||
* "RESPONSE_CODE" with int value, RESULT_OK(0) if success, appropriate response codes | |||||
* on failures. | |||||
* "BUY_INTENT" - PendingIntent to start the purchase flow | |||||
* | |||||
* The Pending intent should be launched with startIntentSenderForResult. When purchase flow | |||||
* has completed, the onActivityResult() will give a resultCode of OK or CANCELED. | |||||
* If the purchase is successful, the result data will contain the following key-value pairs | |||||
* "RESPONSE_CODE" with int value, RESULT_OK(0) if success, appropriate response | |||||
* codes on failures. | |||||
* "INAPP_PURCHASE_DATA" - String in JSON format similar to | |||||
* '{"orderId":"12999763169054705758.1371079406387615", | |||||
* "packageName":"com.example.app", | |||||
* "productId":"exampleSku", | |||||
* "purchaseTime":1345678900000, | |||||
* "purchaseToken" : "122333444455555", | |||||
* "developerPayload":"example developer payload" }' | |||||
* "INAPP_DATA_SIGNATURE" - String containing the signature of the purchase data that | |||||
* was signed with the private key of the developer | |||||
*/ | |||||
public android.os.Bundle getBuyIntent(int apiVersion, java.lang.String packageName, java.lang.String sku, java.lang.String type, java.lang.String developerPayload) throws android.os.RemoteException; | |||||
/** | |||||
* Returns the current SKUs owned by the user of the type and package name specified along with | |||||
* purchase information and a signature of the data to be validated. | |||||
* This will return all SKUs that have been purchased in V3 and managed items purchased using | |||||
* V1 and V2 that have not been consumed. | |||||
* @param apiVersion billing API version that the app is using | |||||
* @param packageName package name of the calling app | |||||
* @param type of the in-app items being requested ("inapp" for one-time purchases | |||||
* and "subs" for subscriptions) | |||||
* @param continuationToken to be set as null for the first call, if the number of owned | |||||
* skus are too many, a continuationToken is returned in the response bundle. | |||||
* This method can be called again with the continuation token to get the next set of | |||||
* owned skus. | |||||
* @return Bundle containing the following key-value pairs | |||||
* "RESPONSE_CODE" with int value, RESULT_OK(0) if success, appropriate response codes | |||||
on failures. | |||||
* "INAPP_PURCHASE_ITEM_LIST" - StringArrayList containing the list of SKUs | |||||
* "INAPP_PURCHASE_DATA_LIST" - StringArrayList containing the purchase information | |||||
* "INAPP_DATA_SIGNATURE_LIST"- StringArrayList containing the signatures | |||||
* of the purchase information | |||||
* "INAPP_CONTINUATION_TOKEN" - String containing a continuation token for the | |||||
* next set of in-app purchases. Only set if the | |||||
* user has more owned skus than the current list. | |||||
*/ | |||||
public android.os.Bundle getPurchases(int apiVersion, java.lang.String packageName, java.lang.String type, java.lang.String continuationToken) throws android.os.RemoteException; | |||||
public int consumePurchase(int apiVersion, java.lang.String packageName, java.lang.String purchaseToken) throws android.os.RemoteException; | |||||
public int stub(int apiVersion, java.lang.String packageName, java.lang.String type) throws android.os.RemoteException; | |||||
/** | |||||
* Returns a pending intent to launch the purchase flow for upgrading or downgrading a | |||||
* subscription. The existing owned SKU(s) should be provided along with the new SKU that | |||||
* the user is upgrading or downgrading to. | |||||
* @param apiVersion billing API version that the app is using, must be 5 or later | |||||
* @param packageName package name of the calling app | |||||
* @param oldSkus the SKU(s) that the user is upgrading or downgrading from, | |||||
* if null or empty this method will behave like {@link #getBuyIntent} | |||||
* @param newSku the SKU that the user is upgrading or downgrading to | |||||
* @param type of the item being purchased, currently must be "subs" | |||||
* @param developerPayload optional argument to be sent back with the purchase information | |||||
* @return Bundle containing the following key-value pairs | |||||
* "RESPONSE_CODE" with int value, RESULT_OK(0) if success, appropriate response codes | |||||
* on failures. | |||||
* "BUY_INTENT" - PendingIntent to start the purchase flow | |||||
* | |||||
* The Pending intent should be launched with startIntentSenderForResult. When purchase flow | |||||
* has completed, the onActivityResult() will give a resultCode of OK or CANCELED. | |||||
* If the purchase is successful, the result data will contain the following key-value pairs | |||||
* "RESPONSE_CODE" with int value, RESULT_OK(0) if success, appropriate response | |||||
* codes on failures. | |||||
* "INAPP_PURCHASE_DATA" - String in JSON format similar to | |||||
* '{"orderId":"12999763169054705758.1371079406387615", | |||||
* "packageName":"com.example.app", | |||||
* "productId":"exampleSku", | |||||
* "purchaseTime":1345678900000, | |||||
* "purchaseToken" : "122333444455555", | |||||
* "developerPayload":"example developer payload" }' | |||||
* "INAPP_DATA_SIGNATURE" - String containing the signature of the purchase data that | |||||
* was signed with the private key of the developer | |||||
*/ | |||||
public android.os.Bundle getBuyIntentToReplaceSkus(int apiVersion, java.lang.String packageName, java.util.List<java.lang.String> oldSkus, java.lang.String newSku, java.lang.String type, java.lang.String developerPayload) throws android.os.RemoteException; | |||||
/** | |||||
* Returns a pending intent to launch the purchase flow for an in-app item. This method is | |||||
* a variant of the {@link #getBuyIntent} method and takes an additional {@code extraParams} | |||||
* parameter. This parameter is a Bundle of optional keys and values that affect the | |||||
* operation of the method. | |||||
* @param apiVersion billing API version that the app is using, must be 6 or later | |||||
* @param packageName package name of the calling app | |||||
* @param sku the SKU of the in-app item as published in the developer console | |||||
* @param type of the in-app item being purchased ("inapp" for one-time purchases | |||||
* and "subs" for subscriptions) | |||||
* @param developerPayload optional argument to be sent back with the purchase information | |||||
* @extraParams a Bundle with the following optional keys: | |||||
* "skusToReplace" - List<String> - an optional list of SKUs that the user is | |||||
* upgrading or downgrading from. | |||||
* Pass this field if the purchase is upgrading or downgrading | |||||
* existing subscriptions. | |||||
* The specified SKUs are replaced with the SKUs that the user is | |||||
* purchasing. Google Play replaces the specified SKUs at the start of | |||||
* the next billing cycle. | |||||
* "replaceSkusProration" - Boolean - whether the user should be credited for any unused | |||||
* subscription time on the SKUs they are upgrading or downgrading. | |||||
* If you set this field to true, Google Play swaps out the old SKUs | |||||
* and credits the user with the unused value of their subscription | |||||
* time on a pro-rated basis. | |||||
* Google Play applies this credit to the new subscription, and does | |||||
* not begin billing the user for the new subscription until after | |||||
* the credit is used up. | |||||
* If you set this field to false, the user does not receive credit for | |||||
* any unused subscription time and the recurrence date does not | |||||
* change. | |||||
* Default value is true. Ignored if you do not pass skusToReplace. | |||||
* "accountId" - String - an optional obfuscated string that is uniquely | |||||
* associated with the user's account in your app. | |||||
* If you pass this value, Google Play can use it to detect irregular | |||||
* activity, such as many devices making purchases on the same | |||||
* account in a short period of time. | |||||
* Do not use the developer ID or the user's Google ID for this field. | |||||
* In addition, this field should not contain the user's ID in | |||||
* cleartext. | |||||
* We recommend that you use a one-way hash to generate a string from | |||||
* the user's ID, and store the hashed string in this field. | |||||
* "vr" - Boolean - an optional flag indicating whether the returned intent | |||||
* should start a VR purchase flow. The apiVersion must also be 7 or | |||||
* later to use this flag. | |||||
*/ | |||||
public android.os.Bundle getBuyIntentExtraParams(int apiVersion, java.lang.String packageName, java.lang.String sku, java.lang.String type, java.lang.String developerPayload, android.os.Bundle extraParams) throws android.os.RemoteException; | |||||
/** | |||||
* Returns the most recent purchase made by the user for each SKU, even if that purchase is | |||||
* expired, canceled, or consumed. | |||||
* @param apiVersion billing API version that the app is using, must be 6 or later | |||||
* @param packageName package name of the calling app | |||||
* @param type of the in-app items being requested ("inapp" for one-time purchases | |||||
* and "subs" for subscriptions) | |||||
* @param continuationToken to be set as null for the first call, if the number of owned | |||||
* skus is too large, a continuationToken is returned in the response bundle. | |||||
* This method can be called again with the continuation token to get the next set of | |||||
* owned skus. | |||||
* @param extraParams a Bundle with extra params that would be appended into http request | |||||
* query string. Not used at this moment. Reserved for future functionality. | |||||
* @return Bundle containing the following key-value pairs | |||||
* "RESPONSE_CODE" with int value: RESULT_OK(0) if success, | |||||
* {@link IabHelper#BILLING_RESPONSE_RESULT_*} response codes on failures. | |||||
* | |||||
* "INAPP_PURCHASE_ITEM_LIST" - ArrayList<String> containing the list of SKUs | |||||
* "INAPP_PURCHASE_DATA_LIST" - ArrayList<String> containing the purchase information | |||||
* "INAPP_DATA_SIGNATURE_LIST"- ArrayList<String> containing the signatures | |||||
* of the purchase information | |||||
* "INAPP_CONTINUATION_TOKEN" - String containing a continuation token for the | |||||
* next set of in-app purchases. Only set if the | |||||
* user has more owned skus than the current list. | |||||
*/ | |||||
public android.os.Bundle getPurchaseHistory(int apiVersion, java.lang.String packageName, java.lang.String type, java.lang.String continuationToken, android.os.Bundle extraParams) throws android.os.RemoteException; | |||||
public int isBillingSupportedExtraParams(int apiVersion, java.lang.String packageName, java.lang.String type, android.os.Bundle extraParams) throws android.os.RemoteException; | |||||
} |
@@ -1,155 +0,0 @@ | |||||
/* | |||||
============================================================================== | |||||
This file is part of the JUCE library. | |||||
Copyright (c) 2017 - ROLI Ltd. | |||||
JUCE is an open source library subject to commercial or open-source | |||||
licensing. | |||||
By using JUCE, you agree to the terms of both the JUCE 5 End-User License | |||||
Agreement and JUCE 5 Privacy Policy (both updated and effective as of the | |||||
27th April 2017). | |||||
End User License Agreement: www.juce.com/juce-5-licence | |||||
Privacy Policy: www.juce.com/juce-5-privacy-policy | |||||
Or: You may also use this code under the terms of the GPL v3 (see | |||||
www.gnu.org/licenses). | |||||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER | |||||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE | |||||
DISCLAIMED. | |||||
============================================================================== | |||||
*/ | |||||
package com.juce.networkgraphicsdemo; | |||||
import android.content.ContentProvider; | |||||
import android.content.ContentValues; | |||||
import android.content.res.AssetFileDescriptor; | |||||
import android.content.res.Resources; | |||||
import android.database.Cursor; | |||||
import android.database.MatrixCursor; | |||||
import android.net.Uri; | |||||
import android.os.FileObserver; | |||||
import android.os.ParcelFileDescriptor; | |||||
import java.lang.String; | |||||
public final class SharingContentProvider extends ContentProvider | |||||
{ | |||||
private Object lock = new Object(); | |||||
private native void contentSharerFileObserverEvent (long host, int event, String path); | |||||
private native Cursor contentSharerQuery (Uri uri, String[] projection, String selection, | |||||
String[] selectionArgs, String sortOrder); | |||||
private native void contentSharerCursorClosed (long host); | |||||
private native AssetFileDescriptor contentSharerOpenFile (Uri uri, String mode); | |||||
private native String[] contentSharerGetStreamTypes (Uri uri, String mimeTypeFilter); | |||||
public final class ProviderFileObserver extends FileObserver | |||||
{ | |||||
public ProviderFileObserver (long hostToUse, String path, int mask) | |||||
{ | |||||
super (path, mask); | |||||
host = hostToUse; | |||||
} | |||||
public void onEvent (int event, String path) | |||||
{ | |||||
contentSharerFileObserverEvent (host, event, path); | |||||
} | |||||
private long host; | |||||
} | |||||
public final class ProviderCursor extends MatrixCursor | |||||
{ | |||||
ProviderCursor (long hostToUse, String[] columnNames) | |||||
{ | |||||
super (columnNames); | |||||
host = hostToUse; | |||||
} | |||||
@Override | |||||
public void close() | |||||
{ | |||||
super.close(); | |||||
contentSharerCursorClosed (host); | |||||
} | |||||
private long host; | |||||
} | |||||
@Override | |||||
public boolean onCreate() | |||||
{ | |||||
return true; | |||||
} | |||||
@Override | |||||
public Cursor query (Uri url, String[] projection, String selection, | |||||
String[] selectionArgs, String sortOrder) | |||||
{ | |||||
synchronized (lock) | |||||
{ | |||||
return contentSharerQuery (url, projection, selection, selectionArgs, sortOrder); | |||||
} | |||||
} | |||||
@Override | |||||
public Uri insert (Uri uri, ContentValues values) | |||||
{ | |||||
return null; | |||||
} | |||||
@Override | |||||
public int update (Uri uri, ContentValues values, String selection, | |||||
String[] selectionArgs) | |||||
{ | |||||
return 0; | |||||
} | |||||
@Override | |||||
public int delete (Uri uri, String selection, String[] selectionArgs) | |||||
{ | |||||
return 0; | |||||
} | |||||
@Override | |||||
public String getType (Uri uri) | |||||
{ | |||||
return null; | |||||
} | |||||
@Override | |||||
public AssetFileDescriptor openAssetFile (Uri uri, String mode) | |||||
{ | |||||
synchronized (lock) | |||||
{ | |||||
return contentSharerOpenFile (uri, mode); | |||||
} | |||||
} | |||||
@Override | |||||
public ParcelFileDescriptor openFile (Uri uri, String mode) | |||||
{ | |||||
synchronized (lock) | |||||
{ | |||||
AssetFileDescriptor result = contentSharerOpenFile (uri, mode); | |||||
if (result != null) | |||||
return result.getParcelFileDescriptor(); | |||||
return null; | |||||
} | |||||
} | |||||
} |