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.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) {

@ -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"));

@ -76,4 +76,6 @@
<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_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>

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

Loading…
Cancel
Save