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(); } }