Call server to update premium status

pull/14/head
Sam Bosley 14 years ago
parent 89c3650afd
commit 069a40d4f6

@ -46,7 +46,7 @@ import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.Preferences; 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.MetadataDao;
import com.todoroo.astrid.dao.TagDataDao; import com.todoroo.astrid.dao.TagDataDao;
import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDao;
@ -929,6 +929,19 @@ public final class ActFmSyncService {
pushAllQueuedUpdates(); 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) { private void pushQueuedUpdatesForTag(TagData tagData) {
Criterion criterion = null; Criterion criterion = null;
if (tagData.getValue(TagData.REMOTE_ID) < 1) { if (tagData.getValue(TagData.REMOTE_ID) < 1) {

@ -22,6 +22,7 @@ import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Join; import com.todoroo.andlib.sql.Join;
import com.todoroo.andlib.sql.Query; import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.utility.Preferences; import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.billing.BillingConstants;
import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria; import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria;
import com.todoroo.astrid.dao.TaskDao.TaskCriteria; import com.todoroo.astrid.dao.TaskDao.TaskCriteria;
import com.todoroo.astrid.data.Metadata; import com.todoroo.astrid.data.Metadata;
@ -167,6 +168,10 @@ public class ActFmSyncV2Provider extends SyncV2Provider {
/** fetch user status hash*/ /** fetch user status hash*/
@SuppressWarnings("nls") @SuppressWarnings("nls")
private void updateUserStatus() { private void updateUserStatus() {
if (Preferences.getBoolean(BillingConstants.PREF_NEEDS_SERVER_UPDATE, false)) {
actFmSyncService.updateUserSubscriptionStatus(null);
}
try { try {
JSONObject status = actFmSyncService.invoke("user_status"); //$NON-NLS-1$ JSONObject status = actFmSyncService.invoke("user_status"); //$NON-NLS-1$
if (status.has("id")) if (status.has("id"))
@ -177,7 +182,7 @@ public class ActFmSyncV2Provider extends SyncV2Provider {
Preferences.setString(ActFmPreferenceService.PREF_FIRST_NAME, status.optString("first_name")); Preferences.setString(ActFmPreferenceService.PREF_FIRST_NAME, status.optString("first_name"));
if (status.has("last_name")) if (status.has("last_name"))
Preferences.setString(ActFmPreferenceService.PREF_LAST_NAME, status.optString("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")); Preferences.setBoolean(ActFmPreferenceService.PREF_PREMIUM, status.optBoolean("premium"));
if (status.has("email")) if (status.has("email"))
Preferences.setString(ActFmPreferenceService.PREF_EMAIL, status.optString("email")); Preferences.setString(ActFmPreferenceService.PREF_EMAIL, status.optString("email"));

@ -76,4 +76,6 @@
<string name="premium_description_6">Support the Astrid Team!</string> <string name="premium_description_6">Support the Astrid Team!</string>
<string name="premium_already_subscribed">You are already subscribed to Astrid Premium!</string> <string name="premium_already_subscribed">You are already subscribed to Astrid Premium!</string>
<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_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>
</resources> </resources>

@ -21,8 +21,8 @@ import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.utility.DialogUtilities; import com.todoroo.andlib.utility.DialogUtilities;
import com.todoroo.andlib.utility.Preferences; 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.ActFmPreferenceService;
import com.todoroo.astrid.actfm.sync.ActFmSyncService;
import com.todoroo.astrid.billing.BillingConstants.PurchaseState; import com.todoroo.astrid.billing.BillingConstants.PurchaseState;
import com.todoroo.astrid.billing.BillingConstants.ResponseCode; import com.todoroo.astrid.billing.BillingConstants.ResponseCode;
import com.todoroo.astrid.billing.BillingService.RequestPurchase; import com.todoroo.astrid.billing.BillingService.RequestPurchase;
@ -43,7 +43,7 @@ public class BillingActivity extends Activity {
private Button buyMonth; private Button buyMonth;
private Button buyYear; private Button buyYear;
@Autowired private ActFmInvoker actFmInvoker; @Autowired private ActFmSyncService actFmSyncService;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
@ -196,8 +196,8 @@ public class BillingActivity extends Activity {
} }
@Override @Override
public void onPurchaseStateChange(PurchaseState purchaseState, String itemId, public void onPurchaseStateChange(PurchaseState purchaseState, final String itemId,
int quantity, long purchaseTime, String developerPayload, String purchaseToken) { int quantity, long purchaseTime, String developerPayload, final String purchaseToken) {
if (Constants.DEBUG) { if (Constants.DEBUG) {
Log.i(TAG, "onPurchaseStateChange() itemId: " + itemId + " " + purchaseState); Log.i(TAG, "onPurchaseStateChange() itemId: " + itemId + " " + purchaseState);
} }
@ -206,24 +206,26 @@ public class BillingActivity extends Activity {
Preferences.setString(BillingConstants.PREF_PURCHASE_TOKEN, purchaseToken); Preferences.setString(BillingConstants.PREF_PURCHASE_TOKEN, purchaseToken);
if (purchaseState == PurchaseState.PURCHASED) { if (purchaseState == PurchaseState.PURCHASED) {
try { new Thread() {
actFmInvoker.invoke("premium_update_android", "purchaseToken", purchaseToken, "productId", itemId); @Override
Preferences.setBoolean(ActFmPreferenceService.PREF_PREMIUM, true); public void run() {
Preferences.setBoolean(BillingConstants.PREF_NEEDS_SERVER_UPDATE, false); Preferences.setBoolean(ActFmPreferenceService.PREF_PREMIUM, true);
} catch (Exception e) { actFmSyncService.updateUserSubscriptionStatus(new Runnable() {
Preferences.setBoolean(BillingConstants.PREF_NEEDS_SERVER_UPDATE, true); @Override
// Reassure user public void run() {
} Toast.makeText(BillingActivity.this, R.string.premium_success_with_server_error, Toast.LENGTH_LONG).show();
System.err.println("====== SUCCESS! ======"); }
});
}
}.start();
} else if (purchaseState == PurchaseState.REFUNDED || purchaseState == PurchaseState.EXPIRED) { } else if (purchaseState == PurchaseState.REFUNDED || purchaseState == PurchaseState.EXPIRED) {
try { new Thread() {
Preferences.setBoolean(ActFmPreferenceService.PREF_PREMIUM, false); @Override
actFmInvoker.invoke("premium_update_android", "purchaseToken", purchaseToken, "productId", itemId); public void run() {
Preferences.setBoolean(BillingConstants.PREF_NEEDS_SERVER_UPDATE, false); Preferences.setBoolean(ActFmPreferenceService.PREF_PREMIUM, false);
} catch (Exception e) { actFmSyncService.updateUserSubscriptionStatus(null);
Preferences.setBoolean(BillingConstants.PREF_NEEDS_SERVER_UPDATE, true); }
} }.start();
System.err.println("====== REFUNDED OR EXPIRED ======");
} }
} }

Loading…
Cancel
Save