mirror of https://github.com/M66B/NetGuard.git
Changed IAB logic
Still crashing: 11-19 09:18:19.688 28800 28800 E AndroidRuntime: java.lang.NullPointerException: Attempt to read from field 'com.google.android.finsky.protos.Acquisition$AutoDismissTemplate com.google.android.finsky.protos.Acquisition$PostAcquisitionPrompt.autoDismissTemplate' on a null object reference 11-19 09:18:19.688 28800 28800 E AndroidRuntime: at com.google.android.finsky.billing.SuccessStep.getLayoutResId(SuccessStep.java:75) 11-19 09:18:19.688 28800 28800 E AndroidRuntime: at com.google.android.finsky.billing.lightpurchase.PurchaseFragment.onStateChange(PurchaseFragment.java:31066) 11-19 09:18:19.688 28800 28800 E AndroidRuntime: at com.google.android.finsky.fragments.SidecarFragment.notifyListener(SidecarFragment.java:255) 11-19 09:18:19.688 28800 28800 E AndroidRuntime: at com.google.android.finsky.fragments.SidecarFragment.setState(SidecarFragment.java:250) 11-19 09:18:19.688 28800 28800 E AndroidRuntime: at com.google.android.finsky.billing.lightpurchase.CheckoutPurchaseSidecar.confirmAuthChoiceSelected(CheckoutPurchaseSidecar.java:631) 11-19 09:18:19.688 28800 28800 E AndroidRuntime: at com.google.android.finsky.billing.lightpurchase.purchasesteps.SuccessStepWithAuthChoices.onClick(SuccessStepWithAuthChoices.java:5156)
This commit is contained in:
parent
e66daf0e4d
commit
878ba1eeec
|
@ -20,6 +20,7 @@ package eu.faircode.netguard;
|
|||
*/
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.app.PendingIntent;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
|
@ -259,20 +260,12 @@ public class ActivityMain extends AppCompatActivity implements SharedPreferences
|
|||
SinkholeService.start(this);
|
||||
|
||||
} else if (requestCode == REQUEST_IAB) {
|
||||
if (resultCode == RESULT_OK) {
|
||||
// Handle donation
|
||||
Intent intent = new Intent(IAB.ACTION_PURCHASED);
|
||||
// Handle IAB result
|
||||
Intent intent = new Intent(IAB.ACTION_IAB);
|
||||
intent.putExtra("RESULT_CODE", resultCode);
|
||||
if (data != null)
|
||||
intent.putExtra("RESPONSE_CODE", data.getIntExtra("RESPONSE_CODE", -1));
|
||||
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
|
||||
} else {
|
||||
int response = (data == null ? -1 : data.getIntExtra("RESPONSE_CODE", -1));
|
||||
Log.i(TAG, "IAB response=" + IAB.getIABResult(response));
|
||||
|
||||
// Fail-safe
|
||||
Intent donate = new Intent(Intent.ACTION_VIEW);
|
||||
donate.setData(Uri.parse("http://www.netguard.me/"));
|
||||
if (donate.resolveActivity(getPackageManager()) != null)
|
||||
startActivity(donate);
|
||||
}
|
||||
|
||||
} else if (requestCode == REQUEST_INVITE) {
|
||||
// Do nothing
|
||||
|
@ -470,15 +463,16 @@ public class ActivityMain extends AppCompatActivity implements SharedPreferences
|
|||
@Override
|
||||
public void onClick(View view) {
|
||||
try {
|
||||
IntentSender sender = iab.getIntentSender();
|
||||
if (sender == null) {
|
||||
PendingIntent pi = iab.getIntentSender();
|
||||
if (pi == null) {
|
||||
Log.i(TAG, "Donate");
|
||||
Intent donate = new Intent(Intent.ACTION_VIEW);
|
||||
donate.setData(Uri.parse("http://www.netguard.me/"));
|
||||
startActivity(donate);
|
||||
} else {
|
||||
btnDonate.setEnabled(false);
|
||||
Log.i(TAG, "IAB donate");
|
||||
startIntentSenderForResult(sender, REQUEST_IAB, new Intent(), 0, 0, 0);
|
||||
startIntentSenderForResult(pi.getIntentSender(), REQUEST_IAB, new Intent(), 0, 0, 0);
|
||||
}
|
||||
} catch (Throwable ex) {
|
||||
Log.e(TAG, ex.toString() + "\n" + Log.getStackTraceString(ex));
|
||||
|
@ -486,24 +480,36 @@ public class ActivityMain extends AppCompatActivity implements SharedPreferences
|
|||
}
|
||||
});
|
||||
|
||||
// Handle donated
|
||||
final BroadcastReceiver onIABPurchased = new BroadcastReceiver() {
|
||||
// Handle IAB result
|
||||
final BroadcastReceiver onIABResult = new BroadcastReceiver() {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
Log.i(TAG, "IAB donated");
|
||||
int resultCode = intent.getIntExtra("RESULT_CODE", RESULT_CANCELED);
|
||||
int responseCode = intent.getIntExtra("RESPONSE_CODE", -1);
|
||||
final boolean ok = (resultCode == RESULT_OK);
|
||||
Log.i(TAG, "IAB result ok=" + ok + " response=" + IAB.getIABResult(responseCode));
|
||||
|
||||
runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (running) {
|
||||
btnDonate.setEnabled(true);
|
||||
if (ok) {
|
||||
btnDonate.setVisibility(View.GONE);
|
||||
tvThanks.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
Intent donate = new Intent(Intent.ACTION_VIEW);
|
||||
donate.setData(Uri.parse("http://www.netguard.me/"));
|
||||
if (donate.resolveActivity(getPackageManager()) != null)
|
||||
startActivity(donate);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
IntentFilter iff = new IntentFilter(IAB.ACTION_PURCHASED);
|
||||
LocalBroadcastManager.getInstance(this).registerReceiver(onIABPurchased, iff);
|
||||
IntentFilter iff = new IntentFilter(IAB.ACTION_IAB);
|
||||
LocalBroadcastManager.getInstance(this).registerReceiver(onIABResult, iff);
|
||||
|
||||
// Show dialog
|
||||
dialogAbout = new AlertDialog.Builder(this)
|
||||
|
@ -513,7 +519,7 @@ public class ActivityMain extends AppCompatActivity implements SharedPreferences
|
|||
@Override
|
||||
public void onDismiss(DialogInterface dialogInterface) {
|
||||
if (running)
|
||||
LocalBroadcastManager.getInstance(ActivityMain.this).unregisterReceiver(onIABPurchased);
|
||||
LocalBroadcastManager.getInstance(ActivityMain.this).unregisterReceiver(onIABResult);
|
||||
|
||||
iab.unbind();
|
||||
|
||||
|
|
|
@ -19,6 +19,7 @@ package eu.faircode.netguard;
|
|||
Copyright 2015 by Marcel Bokhorst (M66B)
|
||||
*/
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.PendingIntent;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
|
@ -50,7 +51,7 @@ public class IAB implements ServiceConnection {
|
|||
// adb shell am start -n eu.faircode.netguard/eu.faircode.netguard.ActivityMain
|
||||
private static final String SKU_DONATE = "donation";
|
||||
// private static final String SKU_DONATE = "android.test.purchased";
|
||||
public static final String ACTION_PURCHASED = "eu.faircode.netguard.IAB";
|
||||
public static final String ACTION_IAB = "eu.faircode.netguard.IAB";
|
||||
|
||||
public IAB(Context context) {
|
||||
this.context = context;
|
||||
|
@ -63,8 +64,8 @@ public class IAB implements ServiceConnection {
|
|||
context.bindService(serviceIntent, this, Context.BIND_AUTO_CREATE);
|
||||
}
|
||||
|
||||
public IntentSender getIntentSender() throws RemoteException {
|
||||
return (service != null && available ? IABgetIntent(SKU_DONATE) : null);
|
||||
public PendingIntent getIntentSender() throws RemoteException {
|
||||
return (service != null && available ? IABgetBuyIntent(SKU_DONATE) : null);
|
||||
}
|
||||
|
||||
public void unbind() {
|
||||
|
@ -82,7 +83,8 @@ public class IAB implements ServiceConnection {
|
|||
service = IInAppBillingService.Stub.asInterface(binder);
|
||||
|
||||
if (IABisPurchased(SKU_DONATE)) {
|
||||
Intent intent = new Intent(ACTION_PURCHASED);
|
||||
Intent intent = new Intent(ACTION_IAB);
|
||||
intent.putExtra("RESULT_CODE", Activity.RESULT_OK);
|
||||
LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
|
||||
} else
|
||||
available = (service != null && IABisAvailable(SKU_DONATE));
|
||||
|
@ -144,16 +146,15 @@ public class IAB implements ServiceConnection {
|
|||
return (skus != null && skus.contains(sku));
|
||||
}
|
||||
|
||||
private IntentSender IABgetIntent(String sku) throws RemoteException {
|
||||
Bundle bundle = service.getBuyIntent(IAB_VERSION, context.getPackageName(), sku, "inapp", "");
|
||||
private PendingIntent IABgetBuyIntent(String sku) throws RemoteException {
|
||||
Bundle bundle = service.getBuyIntent(IAB_VERSION, context.getPackageName(), sku, "inapp", "netguard");
|
||||
Log.i(TAG, "getBuyIntent");
|
||||
Util.logBundle(TAG, bundle);
|
||||
int response = (bundle == null ? -1 : bundle.getInt("RESPONSE_CODE", -1));
|
||||
Log.i(TAG, "Response=" + getIABResult(response));
|
||||
if (response != 0 || !bundle.containsKey("BUY_INTENT"))
|
||||
return null;
|
||||
PendingIntent pi = bundle.getParcelable("BUY_INTENT");
|
||||
return (pi == null ? null : pi.getIntentSender());
|
||||
return bundle.getParcelable("BUY_INTENT");
|
||||
}
|
||||
|
||||
public static String getIABResult(int responseCode) {
|
||||
|
|
Loading…
Reference in New Issue