diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncService.java b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncService.java
index 5b2d728aa..231291a0d 100644
--- a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncService.java
+++ b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncService.java
@@ -46,7 +46,7 @@ import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.Preferences;
-import com.todoroo.astrid.actfm.sync.ActFmSyncService.JsonHelper;
+import com.todoroo.astrid.billing.BillingConstants;
import com.todoroo.astrid.dao.MetadataDao;
import com.todoroo.astrid.dao.TagDataDao;
import com.todoroo.astrid.dao.TaskDao;
@@ -929,6 +929,19 @@ public final class ActFmSyncService {
pushAllQueuedUpdates();
}
+ public void updateUserSubscriptionStatus(Runnable onError) {
+ String purchaseToken = Preferences.getStringValue(BillingConstants.PREF_PURCHASE_TOKEN);
+ String productId = Preferences.getStringValue(BillingConstants.PREF_PRODUCT_ID);
+ try {
+ actFmInvoker.invoke("premium_update_android", "purchaseToken", purchaseToken, "productId", productId);
+ Preferences.setBoolean(BillingConstants.PREF_NEEDS_SERVER_UPDATE, false);
+ } catch (Exception e) {
+ Preferences.setBoolean(BillingConstants.PREF_NEEDS_SERVER_UPDATE, true);
+ if (onError != null)
+ onError.run();
+ }
+ }
+
private void pushQueuedUpdatesForTag(TagData tagData) {
Criterion criterion = null;
if (tagData.getValue(TagData.REMOTE_ID) < 1) {
diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncV2Provider.java b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncV2Provider.java
index cd706d1f6..7f5171a91 100644
--- a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncV2Provider.java
+++ b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncV2Provider.java
@@ -22,6 +22,7 @@ import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Join;
import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.utility.Preferences;
+import com.todoroo.astrid.billing.BillingConstants;
import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria;
import com.todoroo.astrid.dao.TaskDao.TaskCriteria;
import com.todoroo.astrid.data.Metadata;
@@ -167,6 +168,10 @@ public class ActFmSyncV2Provider extends SyncV2Provider {
/** fetch user status hash*/
@SuppressWarnings("nls")
private void updateUserStatus() {
+ if (Preferences.getBoolean(BillingConstants.PREF_NEEDS_SERVER_UPDATE, false)) {
+ actFmSyncService.updateUserSubscriptionStatus(null);
+ }
+
try {
JSONObject status = actFmSyncService.invoke("user_status"); //$NON-NLS-1$
if (status.has("id"))
@@ -177,7 +182,7 @@ public class ActFmSyncV2Provider extends SyncV2Provider {
Preferences.setString(ActFmPreferenceService.PREF_FIRST_NAME, status.optString("first_name"));
if (status.has("last_name"))
Preferences.setString(ActFmPreferenceService.PREF_LAST_NAME, status.optString("last_name"));
- if (status.has("premium"))
+ if (status.has("premium") && !Preferences.getBoolean(BillingConstants.PREF_NEEDS_SERVER_UPDATE, false))
Preferences.setBoolean(ActFmPreferenceService.PREF_PREMIUM, status.optBoolean("premium"));
if (status.has("email"))
Preferences.setString(ActFmPreferenceService.PREF_EMAIL, status.optString("email"));
diff --git a/astrid/res/values/strings-premium.xml b/astrid/res/values/strings-premium.xml
index 932f500cf..426ca0234 100644
--- a/astrid/res/values/strings-premium.xml
+++ b/astrid/res/values/strings-premium.xml
@@ -76,4 +76,6 @@
Support the Astrid Team!
You are already subscribed to Astrid Premium!
You need to have an Astrid.com account in order to subscribe to premium. Please log in or sign up.
+ Thanks for subscribing to Astrid Premium!
+ 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.
diff --git a/astrid/src/com/todoroo/astrid/billing/BillingActivity.java b/astrid/src/com/todoroo/astrid/billing/BillingActivity.java
index c798ba1a9..6e03f35d2 100644
--- a/astrid/src/com/todoroo/astrid/billing/BillingActivity.java
+++ b/astrid/src/com/todoroo/astrid/billing/BillingActivity.java
@@ -21,8 +21,8 @@ import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.utility.DialogUtilities;
import com.todoroo.andlib.utility.Preferences;
-import com.todoroo.astrid.actfm.sync.ActFmInvoker;
import com.todoroo.astrid.actfm.sync.ActFmPreferenceService;
+import com.todoroo.astrid.actfm.sync.ActFmSyncService;
import com.todoroo.astrid.billing.BillingConstants.PurchaseState;
import com.todoroo.astrid.billing.BillingConstants.ResponseCode;
import com.todoroo.astrid.billing.BillingService.RequestPurchase;
@@ -43,7 +43,7 @@ public class BillingActivity extends Activity {
private Button buyMonth;
private Button buyYear;
- @Autowired private ActFmInvoker actFmInvoker;
+ @Autowired private ActFmSyncService actFmSyncService;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -196,8 +196,8 @@ public class BillingActivity extends Activity {
}
@Override
- public void onPurchaseStateChange(PurchaseState purchaseState, String itemId,
- int quantity, long purchaseTime, String developerPayload, String purchaseToken) {
+ public void onPurchaseStateChange(PurchaseState purchaseState, final String itemId,
+ int quantity, long purchaseTime, String developerPayload, final String purchaseToken) {
if (Constants.DEBUG) {
Log.i(TAG, "onPurchaseStateChange() itemId: " + itemId + " " + purchaseState);
}
@@ -206,24 +206,26 @@ public class BillingActivity extends Activity {
Preferences.setString(BillingConstants.PREF_PURCHASE_TOKEN, purchaseToken);
if (purchaseState == PurchaseState.PURCHASED) {
- try {
- actFmInvoker.invoke("premium_update_android", "purchaseToken", purchaseToken, "productId", itemId);
- Preferences.setBoolean(ActFmPreferenceService.PREF_PREMIUM, true);
- Preferences.setBoolean(BillingConstants.PREF_NEEDS_SERVER_UPDATE, false);
- } catch (Exception e) {
- Preferences.setBoolean(BillingConstants.PREF_NEEDS_SERVER_UPDATE, true);
- // Reassure user
- }
- System.err.println("====== SUCCESS! ======");
+ new Thread() {
+ @Override
+ public void run() {
+ Preferences.setBoolean(ActFmPreferenceService.PREF_PREMIUM, true);
+ actFmSyncService.updateUserSubscriptionStatus(new Runnable() {
+ @Override
+ public void run() {
+ Toast.makeText(BillingActivity.this, R.string.premium_success_with_server_error, Toast.LENGTH_LONG).show();
+ }
+ });
+ }
+ }.start();
} else if (purchaseState == PurchaseState.REFUNDED || purchaseState == PurchaseState.EXPIRED) {
- try {
- Preferences.setBoolean(ActFmPreferenceService.PREF_PREMIUM, false);
- actFmInvoker.invoke("premium_update_android", "purchaseToken", purchaseToken, "productId", itemId);
- Preferences.setBoolean(BillingConstants.PREF_NEEDS_SERVER_UPDATE, false);
- } catch (Exception e) {
- Preferences.setBoolean(BillingConstants.PREF_NEEDS_SERVER_UPDATE, true);
- }
- System.err.println("====== REFUNDED OR EXPIRED ======");
+ new Thread() {
+ @Override
+ public void run() {
+ Preferences.setBoolean(ActFmPreferenceService.PREF_PREMIUM, false);
+ actFmSyncService.updateUserSubscriptionStatus(null);
+ }
+ }.start();
}
}