You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tasks/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmPreferenceService.java

240 lines
7.0 KiB
Java

/**
* Copyright (c) 2012 Todoroo Inc
*
* See the file "LICENSE" for the full license governing this code.
*/
package com.todoroo.astrid.actfm.sync;
import android.text.TextUtils;
import com.timsu.astrid.R;
import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.billing.BillingConstants;
import com.todoroo.astrid.dao.RemoteModelDao;
import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.service.PremiumUnlockService;
import com.todoroo.astrid.sync.SyncProviderUtilities;
import com.todoroo.astrid.utility.AstridPreferences;
import org.json.JSONException;
import org.json.JSONObject;
/**
* Methods for working with GTasks preferences
*
* @author timsu
*/
public class ActFmPreferenceService extends SyncProviderUtilities {
/**
* add-on identifier
*/
public static final String IDENTIFIER = "actfm"; //$NON-NLS-1$
@Override
public String getIdentifier() {
return IDENTIFIER;
}
@Override
public int getSyncIntervalKey() {
return R.string.actfm_APr_interval_key;
}
@Override
public void clearLastSyncDate() {
super.clearLastSyncDate();
Preferences.setInt(ActFmPreferenceService.PREF_SERVER_TIME, 0);
}
@Override
public boolean shouldShowToast() {
if (Preferences.getBoolean(AstridPreferences.P_FIRST_TASK, true)) {
return false;
}
return super.shouldShowToast();
}
// --- user management
@Override
public void setToken(String setting) {
super.setToken(setting);
if (TextUtils.isEmpty(setting)) {
RemoteModelDao.setOutstandingEntryFlags(RemoteModelDao.OUTSTANDING_FLAG_UNINITIALIZED);
} else {
RemoteModelDao.setOutstandingEntryFlags(RemoteModelDao.OUTSTANDING_ENTRY_FLAG_ENQUEUE_MESSAGES | RemoteModelDao.OUTSTANDING_ENTRY_FLAG_RECORD_OUTSTANDING);
}
}
/**
* @return true if the user is now or has ever been logged in
*/
public boolean wasLoggedIn() {
return RemoteModel.isValidUuid(userId());
}
/**
* @return get user id
*/
public static String userId() {
try {
String value = Preferences.getStringValue(PREF_USER_ID);
if (value == null) {
return Long.toString(Preferences.getLong(PREF_USER_ID, -2L));
}
return value;
} catch (Exception e) {
return Long.toString(Preferences.getLong(PREF_USER_ID, -2L));
}
}
/**
* Act.fm current user id
*/
public static final String PREF_USER_ID = IDENTIFIER + "_user"; //$NON-NLS-1$
/**
* Act.fm current user name
*/
public static final String PREF_NAME = IDENTIFIER + "_name"; //$NON-NLS-1$
/**
* Act.fm current user first name
*/
public static final String PREF_FIRST_NAME = IDENTIFIER + "_first_name"; //$NON-NLS-1$
/**
* Act.fm current user last name
*/
public static final String PREF_LAST_NAME = IDENTIFIER + "_last_name"; //$NON-NLS-1$
/**
* Act.fm current user premium status
*/
public static final String PREF_PREMIUM = IDENTIFIER + "_premium"; //$NON-NLS-1$
/**
* Local knowledge of current premium status
*/
public static final String PREF_LOCAL_PREMIUM = IDENTIFIER + "_local_premium"; //$NON-NLS-1$
/**
* Act.fm current user picture
*/
public static final String PREF_PICTURE = IDENTIFIER + "_picture"; //$NON-NLS-1$
/**
* Act.fm current user email
*/
public static final String PREF_EMAIL = IDENTIFIER + "_email"; //$NON-NLS-1$
/**
* Act.fm last sync server time
*/
public static final String PREF_SERVER_TIME = IDENTIFIER + "_time"; //$NON-NLS-1$
private static JSONObject user = null;
@Override
protected void reportLastErrorImpl(String lastError, String type) {
}
public synchronized static JSONObject thisUser() {
if (user == null) {
user = new JSONObject();
populateUser();
}
return user;
}
public synchronized static void reloadThisUser() {
if (user == null) {
return;
}
populateUser();
}
private static void populateUser() {
try {
user.put("name", Preferences.getStringValue(PREF_NAME));
user.put("first_name", Preferences.getStringValue(PREF_FIRST_NAME));
user.put("last_name", Preferences.getStringValue(PREF_LAST_NAME));
user.put("premium", isPremiumUser());
user.put("email", Preferences.getStringValue(PREF_EMAIL));
user.put("picture", Preferences.getStringValue(PREF_PICTURE));
user.put("id", ActFmPreferenceService.userId());
} catch (JSONException e) {
throw new RuntimeException(e);
}
}
public static boolean isPremiumUser() {
if (Preferences.getBoolean(PremiumUnlockService.PREF_KILL_SWITCH, false)) {
return true;
}
if (Preferences.getBoolean(BillingConstants.PREF_NEEDS_SERVER_UPDATE, false)) {
return Preferences.getBoolean(PREF_LOCAL_PREMIUM, false);
}
return Preferences.getBoolean(PREF_PREMIUM, false);
}
public static void premiumLogout() {
Preferences.setBoolean(BillingConstants.PREF_NEEDS_SERVER_UPDATE, false);
Preferences.setBoolean(PREF_LOCAL_PREMIUM, false);
Preferences.setBoolean(PREF_PREMIUM, false);
}
@Override
public String getLoggedInUserName() {
String name = Preferences.getStringValue(PREF_NAME);
if (TextUtils.isEmpty(name)) {
String firstName = Preferences.getStringValue(PREF_FIRST_NAME);
if (!TextUtils.isEmpty(firstName)) {
name = firstName;
}
String lastName = Preferences.getStringValue(PREF_FIRST_NAME);
if (!TextUtils.isEmpty(lastName)) {
if (!TextUtils.isEmpty(name)) {
name += " "; //$NON-NLS-1$
}
name += lastName;
}
if (name == null) {
name = ""; //$NON-NLS-1$
}
}
return name;
}
public static String thisUserName() {
JSONObject thisUser = thisUser();
String name = thisUser.optString("name");
if (!(TextUtils.isEmpty(name) || "null".equals(name))) {
return name;
}
String firstName = thisUser.optString("first_name");
boolean firstNameEmpty = TextUtils.isEmpty(firstName) || "null".equals(firstName);
String lastName = thisUser.optString("last_name");
boolean lastNameEmpty = TextUtils.isEmpty(lastName) || "null".equals(lastName);
if (firstNameEmpty && lastNameEmpty) {
return thisUser.optString("email");
}
StringBuilder nameBuilder = new StringBuilder();
if (!firstNameEmpty) {
nameBuilder.append(firstName).append(" ");
}
if (!lastNameEmpty) {
nameBuilder.append(lastName);
}
return nameBuilder.toString().trim();
}
}