Handle other error cases for in app billing verification

pull/14/head
Sam Bosley 13 years ago
parent bbcf54daac
commit 86692eeebc

@ -958,7 +958,7 @@ public final class ActFmSyncService {
pushAllQueuedUpdates();
}
public void updateUserSubscriptionStatus(Runnable onSuccess, Runnable onError) {
public void updateUserSubscriptionStatus(Runnable onSuccess, Runnable onRecoverableError, Runnable onInvalidToken) {
String purchaseToken = Preferences.getStringValue(BillingConstants.PREF_PURCHASE_TOKEN);
String productId = Preferences.getStringValue(BillingConstants.PREF_PRODUCT_ID);
try {
@ -969,9 +969,21 @@ public final class ActFmSyncService {
if (onSuccess != null)
onSuccess.run();
} catch (Exception e) {
if (e instanceof ActFmServiceException) {
ActFmServiceException ae = (ActFmServiceException)e;
if (ae.result != null && ae.result.optString("status").equals("error")) {
if (ae.result.optString("code").equals("invalid_purchase_token")) { // Not a valid purchase--expired or duolicate
Preferences.setBoolean(ActFmPreferenceService.PREF_LOCAL_PREMIUM, false);
Preferences.setBoolean(BillingConstants.PREF_NEEDS_SERVER_UPDATE, false);
if (onInvalidToken != null)
onInvalidToken.run();
return;
}
}
}
Preferences.setBoolean(BillingConstants.PREF_NEEDS_SERVER_UPDATE, true);
if (onError != null)
onError.run();
if (onRecoverableError != null)
onRecoverableError.run();
}
}

@ -176,7 +176,7 @@ public class ActFmSyncV2Provider extends SyncV2Provider {
@SuppressWarnings("nls")
public void updateUserStatus() {
if (Preferences.getBoolean(BillingConstants.PREF_NEEDS_SERVER_UPDATE, false)) {
actFmSyncService.updateUserSubscriptionStatus(null, null);
actFmSyncService.updateUserSubscriptionStatus(null, null, null);
}
try {

@ -95,5 +95,6 @@
<string name="premium_login_prompt">You need to have an Astrid.com account in order to subscribe to premium. Please log in or sign up.</string>
<string name="premium_success">Thanks for subscribing to Astrid Premium!</string>
<string name="premium_success_with_server_error">Thanks for subscribing to Astrid Premium! The new features will be unlocked for you on astrid.com soon, and should be available on your phone right away.</string>
<string name="premium_verification_error">The premium subscription for this Google Play account is connected to a different user. To link additional emails to your account, visit astrid.com/users/profile</string>
</resources>

@ -76,7 +76,7 @@ public abstract class AstridPurchaseObserver extends PurchaseObserver {
if (actFmPreferenceService.isLoggedIn()) {
actFmSyncService.updateUserSubscriptionStatus(new Runnable() {
@Override
public void run() {
public void run() { // On Success
Preferences.setBoolean(ActFmPreferenceService.PREF_PREMIUM, true);
mActivity.runOnUiThread(new Runnable() {
@Override
@ -91,7 +91,7 @@ public abstract class AstridPurchaseObserver extends PurchaseObserver {
}
});
}
}, new Runnable() {
}, new Runnable() { // On Recoverable error
@Override
public void run() {
mActivity.runOnUiThread(new Runnable() {
@ -107,6 +107,17 @@ public abstract class AstridPurchaseObserver extends PurchaseObserver {
}
});
}
}, new Runnable() { // On invalid token
@Override
public void run() {
DialogUtilities.okDialog(mActivity, mActivity.getString(R.string.DLG_information_title),
0, mActivity.getString(R.string.premium_verification_error), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mActivity.finish();
}
});
}
});
} else {
Preferences.setBoolean(BillingConstants.PREF_NEEDS_SERVER_UPDATE, true);
@ -119,7 +130,7 @@ public abstract class AstridPurchaseObserver extends PurchaseObserver {
public void run() {
Preferences.setBoolean(ActFmPreferenceService.PREF_LOCAL_PREMIUM, false);
if (actFmPreferenceService.isLoggedIn())
actFmSyncService.updateUserSubscriptionStatus(null, null);
actFmSyncService.updateUserSubscriptionStatus(null, null, null);
}
}.start();
}

Loading…
Cancel
Save