- Added realracing3-community.apk (71.57 MB) - Removed 32-bit support (armeabi-v7a) - Only includes arm64-v8a libraries - Decompiled source code included - Added README-community.md with analysis
371 lines
20 KiB
Java
371 lines
20 KiB
Java
package com.firemonkeys.cloudcellapi;
|
|
|
|
import android.content.SharedPreferences;
|
|
import android.os.AsyncTask;
|
|
import com.amazon.device.iap.PurchasingListener;
|
|
import com.amazon.device.iap.PurchasingService;
|
|
import com.amazon.device.iap.model.FulfillmentResult;
|
|
import com.amazon.device.iap.model.Product;
|
|
import com.amazon.device.iap.model.ProductDataResponse;
|
|
import com.amazon.device.iap.model.ProductType;
|
|
import com.amazon.device.iap.model.PurchaseResponse;
|
|
import com.amazon.device.iap.model.PurchaseUpdatesResponse;
|
|
import com.amazon.device.iap.model.Receipt;
|
|
import com.amazon.device.iap.model.UserData;
|
|
import com.amazon.device.iap.model.UserDataResponse;
|
|
import java.util.ArrayList;
|
|
import java.util.HashMap;
|
|
import java.util.HashSet;
|
|
import java.util.Iterator;
|
|
import java.util.Map;
|
|
|
|
/* loaded from: classes2.dex */
|
|
public class CC_AmazonStoreObserver_Class implements PurchasingListener {
|
|
private static final String CLASSNAME = "CC_AmazonStoreObserver_Class";
|
|
private static long m_nConstructCallback = 0;
|
|
private static long m_nProductDetailsCallback = 0;
|
|
private static long m_nPurchaseErrorCallback = 0;
|
|
private static long m_nPurchaseSucceedCallback = 0;
|
|
private static long m_nRestoreCallback = 0;
|
|
private static long m_nUserPointer = 0;
|
|
private static final String s_sAppTesterAccount1 = "l3HL7XppEMhrOGDnur9-ulvqomrSg6qyODKmah76lJU=";
|
|
private String currentUser;
|
|
private int m_nNumOutstandingProductRequests = 0;
|
|
Map<String, Product> mRetrievedProducts = null;
|
|
ArrayList<Receipt> mRestoreReceipts = new ArrayList<>();
|
|
String sActivePurchaseProductId = null;
|
|
|
|
/* JADX INFO: Access modifiers changed from: private */
|
|
public static native void ConstructCallback(boolean z, boolean z2, long j, long j2);
|
|
|
|
/* JADX INFO: Access modifiers changed from: private */
|
|
public static native void ProductDetailsCallback(boolean z, Product[] productArr, long j, long j2);
|
|
|
|
private static native void PurchaseErrorCallback(String str, long j, long j2, long j3);
|
|
|
|
private static native void PurchaseSucceedCallback(String str, Receipt receipt, long j, long j2);
|
|
|
|
private static native void RefreshCallback(boolean z, long j);
|
|
|
|
/* JADX INFO: Access modifiers changed from: private */
|
|
public static native void RestoreCallback(boolean z, String str, Receipt[] receiptArr, long j, long j2);
|
|
|
|
public String getCurrentUser() {
|
|
return this.currentUser;
|
|
}
|
|
|
|
public void setCurrentUser(String str) {
|
|
this.currentUser = str;
|
|
}
|
|
|
|
public CC_AmazonStoreObserver_Class(long j, long j2, long j3, long j4, long j5, long j6) {
|
|
m_nConstructCallback = j;
|
|
m_nProductDetailsCallback = j2;
|
|
m_nPurchaseSucceedCallback = j3;
|
|
m_nPurchaseErrorCallback = j4;
|
|
m_nRestoreCallback = j5;
|
|
m_nUserPointer = j6;
|
|
}
|
|
|
|
@Override // com.amazon.device.iap.PurchasingListener
|
|
public void onUserDataResponse(UserDataResponse userDataResponse) {
|
|
Logging.CC_TRACE(CLASSNAME, "onUserDataResponse recieved: Response " + userDataResponse);
|
|
Logging.CC_TRACE(CLASSNAME, "RequestId:" + userDataResponse.getRequestId());
|
|
Logging.CC_TRACE(CLASSNAME, "IdRequestStatus:" + userDataResponse.getRequestStatus());
|
|
new GetUserIdAsyncTask().execute(userDataResponse);
|
|
}
|
|
|
|
public class GetUserIdAsyncTask extends AsyncTask<UserDataResponse, Void, Boolean> {
|
|
private GetUserIdAsyncTask() {
|
|
}
|
|
|
|
@Override // android.os.AsyncTask
|
|
public Boolean doInBackground(UserDataResponse... userDataResponseArr) {
|
|
UserDataResponse userDataResponse = userDataResponseArr[0];
|
|
if (userDataResponse.getRequestStatus() == UserDataResponse.RequestStatus.SUCCESSFUL) {
|
|
Logging.CC_TRACE(CC_AmazonStoreObserver_Class.CLASSNAME, "doInBackground SUCCESSFUL");
|
|
CC_AmazonStoreObserver_Class.this.setCurrentUser(userDataResponse.getUserData().getUserId());
|
|
return Boolean.TRUE;
|
|
}
|
|
Logging.CC_TRACE(CC_AmazonStoreObserver_Class.CLASSNAME, "doInBackground: Unable to get user ID.");
|
|
return Boolean.FALSE;
|
|
}
|
|
|
|
@Override // android.os.AsyncTask
|
|
public void onPostExecute(Boolean bool) {
|
|
super.onPostExecute((GetUserIdAsyncTask) bool);
|
|
CC_AmazonStoreObserver_Class.ConstructCallback(bool.booleanValue(), bool.booleanValue(), CC_AmazonStoreObserver_Class.m_nConstructCallback, CC_AmazonStoreObserver_Class.m_nUserPointer);
|
|
}
|
|
}
|
|
|
|
public void getProductDetails(String[] strArr) {
|
|
Logging.CC_TRACE(CLASSNAME, "getProductDetails Begin");
|
|
if (this.mRetrievedProducts != null) {
|
|
Logging.CC_ERROR(CLASSNAME, "getProductDetails called when a previous request has not completed");
|
|
return;
|
|
}
|
|
int length = strArr.length;
|
|
if (length <= 0) {
|
|
Logging.CC_WARNING(CLASSNAME, "getProductDetails called with no product Ids");
|
|
return;
|
|
}
|
|
this.mRetrievedProducts = new HashMap();
|
|
int i = 0;
|
|
this.m_nNumOutstandingProductRequests = 0;
|
|
ArrayList arrayList = new ArrayList();
|
|
while (i < length) {
|
|
HashSet hashSet = new HashSet();
|
|
while (hashSet.size() < 100 && i < length) {
|
|
hashSet.add(strArr[i]);
|
|
i++;
|
|
}
|
|
Logging.CC_TRACE(CLASSNAME, "adding request for " + hashSet.size() + " products up to item " + i);
|
|
arrayList.add(hashSet);
|
|
}
|
|
this.m_nNumOutstandingProductRequests = arrayList.size();
|
|
Iterator it = arrayList.iterator();
|
|
while (it.hasNext()) {
|
|
PurchasingService.getProductData((HashSet) it.next());
|
|
}
|
|
}
|
|
|
|
@Override // com.amazon.device.iap.PurchasingListener
|
|
public void onProductDataResponse(ProductDataResponse productDataResponse) {
|
|
Logging.CC_TRACE(CLASSNAME, "onProductDataResponse recieved");
|
|
Logging.CC_TRACE(CLASSNAME, "ProductDataRequestStatus" + productDataResponse.getRequestStatus());
|
|
Logging.CC_TRACE(CLASSNAME, "ProductDataRequestId" + productDataResponse.getRequestId());
|
|
new ProductDataAsyncTask().execute(productDataResponse);
|
|
}
|
|
|
|
public class ProductDataAsyncTask extends AsyncTask<ProductDataResponse, Void, Void> {
|
|
private ProductDataAsyncTask() {
|
|
}
|
|
|
|
@Override // android.os.AsyncTask
|
|
public Void doInBackground(ProductDataResponse... productDataResponseArr) {
|
|
ProductDataResponse productDataResponse = productDataResponseArr[0];
|
|
CC_AmazonStoreObserver_Class cC_AmazonStoreObserver_Class = CC_AmazonStoreObserver_Class.this;
|
|
if (cC_AmazonStoreObserver_Class.mRetrievedProducts != null) {
|
|
cC_AmazonStoreObserver_Class.m_nNumOutstandingProductRequests--;
|
|
int i = AnonymousClass1.$SwitchMap$com$amazon$device$iap$model$ProductDataResponse$RequestStatus[productDataResponse.getRequestStatus().ordinal()];
|
|
if (i == 1 || i == 2) {
|
|
Map<String, Product> productData = productDataResponse.getProductData();
|
|
for (String str : productData.keySet()) {
|
|
Product product = productData.get(str);
|
|
Logging.CC_INFO(CC_AmazonStoreObserver_Class.CLASSNAME, String.format("Product: %s\n Type: %s\n SKU: %s\n Price: %s\n Description: %s\n", product.getTitle(), product.getProductType(), product.getSku(), product.getPrice(), product.getDescription()));
|
|
CC_AmazonStoreObserver_Class.this.mRetrievedProducts.put(str, product);
|
|
}
|
|
if (CC_AmazonStoreObserver_Class.this.m_nNumOutstandingProductRequests <= 0) {
|
|
Logging.CC_TRACE(CC_AmazonStoreObserver_Class.CLASSNAME, "retrieved products complete with " + CC_AmazonStoreObserver_Class.this.mRetrievedProducts.size() + " products");
|
|
Product[] productArr = (Product[]) CC_AmazonStoreObserver_Class.this.mRetrievedProducts.values().toArray(new Product[CC_AmazonStoreObserver_Class.this.mRetrievedProducts.size()]);
|
|
CC_AmazonStoreObserver_Class cC_AmazonStoreObserver_Class2 = CC_AmazonStoreObserver_Class.this;
|
|
cC_AmazonStoreObserver_Class2.mRetrievedProducts = null;
|
|
cC_AmazonStoreObserver_Class2.m_nNumOutstandingProductRequests = 0;
|
|
CC_AmazonStoreObserver_Class.ProductDetailsCallback(true, productArr, CC_AmazonStoreObserver_Class.m_nProductDetailsCallback, CC_AmazonStoreObserver_Class.m_nUserPointer);
|
|
}
|
|
} else if (i == 3) {
|
|
CC_AmazonStoreObserver_Class cC_AmazonStoreObserver_Class3 = CC_AmazonStoreObserver_Class.this;
|
|
cC_AmazonStoreObserver_Class3.mRetrievedProducts = null;
|
|
cC_AmazonStoreObserver_Class3.m_nNumOutstandingProductRequests = 0;
|
|
CC_AmazonStoreObserver_Class.ProductDetailsCallback(false, null, CC_AmazonStoreObserver_Class.m_nProductDetailsCallback, CC_AmazonStoreObserver_Class.m_nUserPointer);
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public void Purchase(String str) {
|
|
Logging.CC_INFO(CLASSNAME, "Purchasing " + str);
|
|
this.sActivePurchaseProductId = str;
|
|
PurchasingService.purchase(str);
|
|
}
|
|
|
|
@Override // com.amazon.device.iap.PurchasingListener
|
|
public void onPurchaseResponse(PurchaseResponse purchaseResponse) {
|
|
Logging.CC_TRACE(CLASSNAME, "onPurchaseResponse recieved");
|
|
Logging.CC_TRACE(CLASSNAME, "PurchaseRequestStatus: " + purchaseResponse.getRequestStatus());
|
|
Receipt receipt = purchaseResponse.getReceipt();
|
|
printReceipt(receipt);
|
|
int i = AnonymousClass1.$SwitchMap$com$amazon$device$iap$model$PurchaseResponse$RequestStatus[purchaseResponse.getRequestStatus().ordinal()];
|
|
if (i == 1) {
|
|
PurchaseSucceedCallback(purchaseResponse.getUserData().getUserId(), receipt, m_nPurchaseSucceedCallback, m_nUserPointer);
|
|
} else if (i == 2 || i == 3 || i == 4 || i == 5) {
|
|
PurchaseErrorCallback(this.sActivePurchaseProductId, purchaseResponse.getRequestStatus().ordinal(), m_nPurchaseErrorCallback, m_nUserPointer);
|
|
}
|
|
this.sActivePurchaseProductId = null;
|
|
}
|
|
|
|
public void CompleteTransaction(String str, Boolean bool) {
|
|
Logging.CC_TRACE(CLASSNAME, "CompleteTransaction");
|
|
Logging.CC_TRACE(CLASSNAME, "fulfilled: " + bool);
|
|
if (bool.booleanValue()) {
|
|
PurchasingService.notifyFulfillment(str, FulfillmentResult.FULFILLED);
|
|
} else {
|
|
PurchasingService.notifyFulfillment(str, FulfillmentResult.UNAVAILABLE);
|
|
}
|
|
}
|
|
|
|
public void RefreshStorePurchases() {
|
|
Logging.CC_TRACE(CLASSNAME, "RefreshStorePurchases");
|
|
PurchasingService.getPurchaseUpdates(false);
|
|
}
|
|
|
|
public void RestorePurchase() {
|
|
Logging.CC_TRACE(CLASSNAME, "RestorePurchase");
|
|
this.mRestoreReceipts.clear();
|
|
PurchasingService.getPurchaseUpdates(true);
|
|
}
|
|
|
|
@Override // com.amazon.device.iap.PurchasingListener
|
|
public void onPurchaseUpdatesResponse(PurchaseUpdatesResponse purchaseUpdatesResponse) {
|
|
Logging.CC_TRACE(CLASSNAME, "onPurchaseUpdatesRecived received: Response -" + purchaseUpdatesResponse);
|
|
Logging.CC_TRACE(CLASSNAME, "RequestStatus:" + purchaseUpdatesResponse.getRequestStatus());
|
|
Logging.CC_TRACE(CLASSNAME, "RequestID:" + purchaseUpdatesResponse.getRequestId());
|
|
new PurchaseUpdatesAsyncTask().execute(purchaseUpdatesResponse);
|
|
}
|
|
|
|
public class PurchaseUpdatesAsyncTask extends AsyncTask<PurchaseUpdatesResponse, Void, Boolean> {
|
|
private PurchaseUpdatesAsyncTask() {
|
|
}
|
|
|
|
@Override // android.os.AsyncTask
|
|
public Boolean doInBackground(PurchaseUpdatesResponse... purchaseUpdatesResponseArr) {
|
|
int i = 0;
|
|
PurchaseUpdatesResponse purchaseUpdatesResponse = purchaseUpdatesResponseArr[0];
|
|
String currentUser = CC_AmazonStoreObserver_Class.this.getCurrentUser();
|
|
UserData userData = purchaseUpdatesResponse.getUserData();
|
|
String userId = userData != null ? userData.getUserId() : null;
|
|
if (userId == null || (!userId.equals(currentUser) && (currentUser == null || (!currentUser.equals(CC_AmazonStoreObserver_Class.s_sAppTesterAccount1) && !userId.equals(""))))) {
|
|
if (userId == null) {
|
|
userId = "";
|
|
}
|
|
Logging.CC_WARNING(CC_AmazonStoreObserver_Class.CLASSNAME, "Reject PurchaseUpdatesAsyncTask for user " + userId + " Excepted user " + currentUser);
|
|
CC_AmazonStoreObserver_Class.RestoreCallback(false, userId, null, CC_AmazonStoreObserver_Class.m_nRestoreCallback, CC_AmazonStoreObserver_Class.m_nUserPointer);
|
|
return Boolean.FALSE;
|
|
}
|
|
int i2 = AnonymousClass1.$SwitchMap$com$amazon$device$iap$model$PurchaseUpdatesResponse$RequestStatus[purchaseUpdatesResponse.getRequestStatus().ordinal()];
|
|
if (i2 != 1) {
|
|
if (i2 != 2) {
|
|
return Boolean.FALSE;
|
|
}
|
|
CC_AmazonStoreObserver_Class.RestoreCallback(false, purchaseUpdatesResponse.getUserData().getUserId(), null, CC_AmazonStoreObserver_Class.m_nRestoreCallback, CC_AmazonStoreObserver_Class.m_nUserPointer);
|
|
return Boolean.FALSE;
|
|
}
|
|
for (Receipt receipt : purchaseUpdatesResponse.getReceipts()) {
|
|
if (AnonymousClass1.$SwitchMap$com$amazon$device$iap$model$ProductType[receipt.getProductType().ordinal()] == 1) {
|
|
Logging.CC_TRACE(CC_AmazonStoreObserver_Class.CLASSNAME, "PurchaseUpdatesAsyncTask: consumable product for Restore");
|
|
}
|
|
CC_AmazonStoreObserver_Class.this.mRestoreReceipts.add(receipt);
|
|
CC_AmazonStoreObserver_Class.this.printReceipt(receipt);
|
|
}
|
|
if (purchaseUpdatesResponse.hasMore()) {
|
|
Logging.CC_TRACE(CC_AmazonStoreObserver_Class.CLASSNAME, "Initiating Another Purchase Updates");
|
|
PurchasingService.getPurchaseUpdates(false);
|
|
} else {
|
|
Receipt[] receiptArr = new Receipt[CC_AmazonStoreObserver_Class.this.mRestoreReceipts.size()];
|
|
Iterator<Receipt> it = CC_AmazonStoreObserver_Class.this.mRestoreReceipts.iterator();
|
|
while (it.hasNext()) {
|
|
receiptArr[i] = it.next();
|
|
i++;
|
|
}
|
|
CC_AmazonStoreObserver_Class.this.mRestoreReceipts.clear();
|
|
CC_AmazonStoreObserver_Class.RestoreCallback(true, purchaseUpdatesResponse.getUserData().getUserId(), receiptArr, CC_AmazonStoreObserver_Class.m_nRestoreCallback, CC_AmazonStoreObserver_Class.m_nUserPointer);
|
|
}
|
|
return Boolean.TRUE;
|
|
}
|
|
|
|
@Override // android.os.AsyncTask
|
|
public void onPostExecute(Boolean bool) {
|
|
super.onPostExecute((PurchaseUpdatesAsyncTask) bool);
|
|
}
|
|
}
|
|
|
|
/* renamed from: com.firemonkeys.cloudcellapi.CC_AmazonStoreObserver_Class$1, reason: invalid class name */
|
|
public static /* synthetic */ class AnonymousClass1 {
|
|
static final /* synthetic */ int[] $SwitchMap$com$amazon$device$iap$model$ProductDataResponse$RequestStatus;
|
|
static final /* synthetic */ int[] $SwitchMap$com$amazon$device$iap$model$ProductType;
|
|
static final /* synthetic */ int[] $SwitchMap$com$amazon$device$iap$model$PurchaseResponse$RequestStatus;
|
|
static final /* synthetic */ int[] $SwitchMap$com$amazon$device$iap$model$PurchaseUpdatesResponse$RequestStatus;
|
|
|
|
static {
|
|
int[] iArr = new int[PurchaseUpdatesResponse.RequestStatus.values().length];
|
|
$SwitchMap$com$amazon$device$iap$model$PurchaseUpdatesResponse$RequestStatus = iArr;
|
|
try {
|
|
iArr[PurchaseUpdatesResponse.RequestStatus.SUCCESSFUL.ordinal()] = 1;
|
|
} catch (NoSuchFieldError unused) {
|
|
}
|
|
try {
|
|
$SwitchMap$com$amazon$device$iap$model$PurchaseUpdatesResponse$RequestStatus[PurchaseUpdatesResponse.RequestStatus.FAILED.ordinal()] = 2;
|
|
} catch (NoSuchFieldError unused2) {
|
|
}
|
|
int[] iArr2 = new int[ProductType.values().length];
|
|
$SwitchMap$com$amazon$device$iap$model$ProductType = iArr2;
|
|
try {
|
|
iArr2[ProductType.CONSUMABLE.ordinal()] = 1;
|
|
} catch (NoSuchFieldError unused3) {
|
|
}
|
|
try {
|
|
$SwitchMap$com$amazon$device$iap$model$ProductType[ProductType.ENTITLED.ordinal()] = 2;
|
|
} catch (NoSuchFieldError unused4) {
|
|
}
|
|
try {
|
|
$SwitchMap$com$amazon$device$iap$model$ProductType[ProductType.SUBSCRIPTION.ordinal()] = 3;
|
|
} catch (NoSuchFieldError unused5) {
|
|
}
|
|
int[] iArr3 = new int[PurchaseResponse.RequestStatus.values().length];
|
|
$SwitchMap$com$amazon$device$iap$model$PurchaseResponse$RequestStatus = iArr3;
|
|
try {
|
|
iArr3[PurchaseResponse.RequestStatus.SUCCESSFUL.ordinal()] = 1;
|
|
} catch (NoSuchFieldError unused6) {
|
|
}
|
|
try {
|
|
$SwitchMap$com$amazon$device$iap$model$PurchaseResponse$RequestStatus[PurchaseResponse.RequestStatus.ALREADY_PURCHASED.ordinal()] = 2;
|
|
} catch (NoSuchFieldError unused7) {
|
|
}
|
|
try {
|
|
$SwitchMap$com$amazon$device$iap$model$PurchaseResponse$RequestStatus[PurchaseResponse.RequestStatus.FAILED.ordinal()] = 3;
|
|
} catch (NoSuchFieldError unused8) {
|
|
}
|
|
try {
|
|
$SwitchMap$com$amazon$device$iap$model$PurchaseResponse$RequestStatus[PurchaseResponse.RequestStatus.INVALID_SKU.ordinal()] = 4;
|
|
} catch (NoSuchFieldError unused9) {
|
|
}
|
|
try {
|
|
$SwitchMap$com$amazon$device$iap$model$PurchaseResponse$RequestStatus[PurchaseResponse.RequestStatus.NOT_SUPPORTED.ordinal()] = 5;
|
|
} catch (NoSuchFieldError unused10) {
|
|
}
|
|
int[] iArr4 = new int[ProductDataResponse.RequestStatus.values().length];
|
|
$SwitchMap$com$amazon$device$iap$model$ProductDataResponse$RequestStatus = iArr4;
|
|
try {
|
|
iArr4[ProductDataResponse.RequestStatus.NOT_SUPPORTED.ordinal()] = 1;
|
|
} catch (NoSuchFieldError unused11) {
|
|
}
|
|
try {
|
|
$SwitchMap$com$amazon$device$iap$model$ProductDataResponse$RequestStatus[ProductDataResponse.RequestStatus.SUCCESSFUL.ordinal()] = 2;
|
|
} catch (NoSuchFieldError unused12) {
|
|
}
|
|
try {
|
|
$SwitchMap$com$amazon$device$iap$model$ProductDataResponse$RequestStatus[ProductDataResponse.RequestStatus.FAILED.ordinal()] = 3;
|
|
} catch (NoSuchFieldError unused13) {
|
|
}
|
|
}
|
|
}
|
|
|
|
private SharedPreferences getSharedPreferencesForCurrentUser() {
|
|
return CC_Component.GetActivity().getSharedPreferences(getCurrentUser(), 0);
|
|
}
|
|
|
|
private SharedPreferences.Editor getSharedPreferencesEditor() {
|
|
return getSharedPreferencesForCurrentUser().edit();
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: private */
|
|
public void printReceipt(Receipt receipt) {
|
|
if (receipt == null) {
|
|
Logging.CC_INFO(CLASSNAME, "Receipt: null");
|
|
} else {
|
|
Logging.CC_INFO(CLASSNAME, String.format("Receipt: ProductType: %s Sku: %s SubscriptionPeriod: %s - %s", receipt.getProductType(), receipt.getSku(), receipt.getPurchaseDate(), receipt.getCancelDate()));
|
|
}
|
|
}
|
|
}
|