aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/settings
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/cgeo/geocaching/settings')
-rw-r--r--main/src/cgeo/geocaching/settings/AbstractCheckCredentialsPreference.java93
-rw-r--r--main/src/cgeo/geocaching/settings/AbstractClickablePreference.java30
-rw-r--r--main/src/cgeo/geocaching/settings/CheckECCredentialsPreference.java14
-rw-r--r--main/src/cgeo/geocaching/settings/CheckGcCredentialsPreference.java18
-rw-r--r--main/src/cgeo/geocaching/settings/OAuthPreference.java24
-rw-r--r--main/src/cgeo/geocaching/settings/RegisterSend2CgeoPreference.java118
-rw-r--r--main/src/cgeo/geocaching/settings/Settings.java18
-rw-r--r--main/src/cgeo/geocaching/settings/SettingsActivity.java110
-rw-r--r--main/src/cgeo/geocaching/settings/TemplateTextPreference.java2
9 files changed, 218 insertions, 209 deletions
diff --git a/main/src/cgeo/geocaching/settings/AbstractCheckCredentialsPreference.java b/main/src/cgeo/geocaching/settings/AbstractCheckCredentialsPreference.java
index d3aae5c..1efbc96 100644
--- a/main/src/cgeo/geocaching/settings/AbstractCheckCredentialsPreference.java
+++ b/main/src/cgeo/geocaching/settings/AbstractCheckCredentialsPreference.java
@@ -5,28 +5,23 @@ import cgeo.geocaching.activity.ActivityMixin;
import cgeo.geocaching.enumerations.StatusCode;
import cgeo.geocaching.network.Cookies;
import cgeo.geocaching.ui.dialog.Dialogs;
-import cgeo.geocaching.utils.Log;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.ImmutablePair;
+import rx.Observable;
+import rx.android.observables.AndroidObservable;
+import rx.functions.Action1;
+import rx.functions.Func0;
+import rx.schedulers.Schedulers;
-import android.annotation.SuppressLint;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
-import android.os.Handler;
-import android.os.Message;
import android.preference.Preference;
import android.util.AttributeSet;
-import android.view.View;
-import android.view.ViewGroup;
-public abstract class AbstractCheckCredentialsPreference extends Preference {
-
- public AbstractCheckCredentialsPreference(Context context) {
- super(context);
- }
+public abstract class AbstractCheckCredentialsPreference extends AbstractClickablePreference {
public AbstractCheckCredentialsPreference(Context context, AttributeSet attrs) {
super(context, attrs);
@@ -37,57 +32,25 @@ public abstract class AbstractCheckCredentialsPreference extends Preference {
}
@Override
- protected View onCreateView(ViewGroup parent) {
- setOnPreferenceClickListener(new LoginCheckClickListener());
- return super.onCreateView(parent);
+ protected OnPreferenceClickListener getOnPreferenceClickListener(final SettingsActivity activity) {
+ return new LoginCheckClickListener(activity);
}
protected abstract ImmutablePair<String, String> getCredentials();
- protected abstract Object login();
+ protected abstract ImmutablePair<StatusCode, Drawable> login();
private class LoginCheckClickListener implements OnPreferenceClickListener {
- private Resources res;
- private SettingsActivity activity;
-
- private ProgressDialog loginDialog;
- @SuppressLint("HandlerLeak")
- private Handler logInHandler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- try {
- if (loginDialog != null && loginDialog.isShowing()) {
- loginDialog.dismiss();
- }
+ final private SettingsActivity activity;
- if (msg.obj == null || (msg.obj instanceof Drawable)) {
- Dialogs.message(activity, R.string.init_login_popup, R.string.init_login_popup_ok, (Drawable) msg.obj);
- } else {
- Dialogs.message(activity, R.string.init_login_popup,
- res.getString(R.string.init_login_popup_failed_reason)
- + " "
- + ((StatusCode) msg.obj).getErrorString(res)
- + ".");
- }
- } catch (Exception e) {
- ActivityMixin.showToast(activity, R.string.err_login_failed);
- Log.e("SettingsActivity.logInHandler", e);
- } finally {
- if (loginDialog != null && loginDialog.isShowing()) {
- loginDialog.dismiss();
- }
- // enable/disable basic member preferences
- activity.initBasicMemberPreferences();
- }
- }
- };
+ LoginCheckClickListener(final SettingsActivity activity) {
+ this.activity = activity;
+ }
@Override
public boolean onPreferenceClick(Preference preference) {
- this.activity = (SettingsActivity) AbstractCheckCredentialsPreference.this.getContext();
- this.res = activity.getResources();
-
- ImmutablePair<String, String> credentials = getCredentials();
+ final Resources res = activity.getResources();
+ final ImmutablePair<String, String> credentials = getCredentials();
// check credentials for validity
if (StringUtils.isBlank(credentials.getLeft())
@@ -96,19 +59,33 @@ public abstract class AbstractCheckCredentialsPreference extends Preference {
return false;
}
- loginDialog = ProgressDialog.show(activity,
+ final ProgressDialog loginDialog = ProgressDialog.show(activity,
res.getString(R.string.init_login_popup),
res.getString(R.string.init_login_popup_working), true);
loginDialog.setCancelable(false);
Cookies.clearCookies();
- (new Thread() {
+ AndroidObservable.fromActivity(activity, Observable.defer(new Func0<Observable<ImmutablePair<StatusCode, Drawable>>>() {
@Override
- public void run() {
- Object payload = login();
- logInHandler.obtainMessage(0, payload).sendToTarget();
+ public Observable<ImmutablePair<StatusCode, Drawable>> call() {
+ return Observable.from(login());
+ }
+ }).subscribeOn(Schedulers.io())).subscribe(new Action1<ImmutablePair<StatusCode, Drawable>>() {
+ @Override
+ public void call(final ImmutablePair<StatusCode, Drawable> loginInfo) {
+ loginDialog.dismiss();
+ if (loginInfo.getLeft() == StatusCode.NO_ERROR) {
+ Dialogs.message(activity, R.string.init_login_popup, R.string.init_login_popup_ok, loginInfo.getRight());
+ } else {
+ Dialogs.message(activity, R.string.init_login_popup,
+ res.getString(R.string.init_login_popup_failed_reason)
+ + " "
+ + loginInfo.getLeft().getErrorString(res)
+ + ".");
+ }
+ activity.initBasicMemberPreferences();
}
- }).start();
+ });
return false; // no shared preference has to be changed
}
diff --git a/main/src/cgeo/geocaching/settings/AbstractClickablePreference.java b/main/src/cgeo/geocaching/settings/AbstractClickablePreference.java
new file mode 100644
index 0000000..f4080cd
--- /dev/null
+++ b/main/src/cgeo/geocaching/settings/AbstractClickablePreference.java
@@ -0,0 +1,30 @@
+package cgeo.geocaching.settings;
+
+import android.content.Context;
+import android.preference.Preference;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.ViewGroup;
+
+abstract class AbstractClickablePreference extends Preference {
+
+ final SettingsActivity activity;
+
+ public AbstractClickablePreference(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ activity = (SettingsActivity) context;
+ }
+
+ public AbstractClickablePreference(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ activity = (SettingsActivity) context;
+ }
+
+ @Override
+ protected View onCreateView(ViewGroup parent) {
+ setOnPreferenceClickListener(getOnPreferenceClickListener(activity));
+ return super.onCreateView(parent);
+ }
+
+ abstract protected OnPreferenceClickListener getOnPreferenceClickListener(final SettingsActivity activity);
+}
diff --git a/main/src/cgeo/geocaching/settings/CheckECCredentialsPreference.java b/main/src/cgeo/geocaching/settings/CheckECCredentialsPreference.java
index 46a3661..c1cf740 100644
--- a/main/src/cgeo/geocaching/settings/CheckECCredentialsPreference.java
+++ b/main/src/cgeo/geocaching/settings/CheckECCredentialsPreference.java
@@ -7,14 +7,11 @@ import cgeo.geocaching.enumerations.StatusCode;
import org.apache.commons.lang3.tuple.ImmutablePair;
import android.content.Context;
+import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
public class CheckECCredentialsPreference extends AbstractCheckCredentialsPreference {
- public CheckECCredentialsPreference(Context context) {
- super(context);
- }
-
public CheckECCredentialsPreference(Context context, AttributeSet attrs) {
super(context, attrs);
}
@@ -29,12 +26,7 @@ public class CheckECCredentialsPreference extends AbstractCheckCredentialsPrefer
}
@Override
- protected Object login() {
- final StatusCode loginResult = ECLogin.getInstance().login();
- Object payload = loginResult;
- if (loginResult == StatusCode.NO_ERROR) {
- payload = null;
- }
- return payload;
+ protected ImmutablePair<StatusCode, Drawable> login() {
+ return new ImmutablePair<StatusCode, Drawable>(ECLogin.getInstance().login(), null);
}
}
diff --git a/main/src/cgeo/geocaching/settings/CheckGcCredentialsPreference.java b/main/src/cgeo/geocaching/settings/CheckGcCredentialsPreference.java
index 12c8b24..8257fdd 100644
--- a/main/src/cgeo/geocaching/settings/CheckGcCredentialsPreference.java
+++ b/main/src/cgeo/geocaching/settings/CheckGcCredentialsPreference.java
@@ -6,14 +6,11 @@ import cgeo.geocaching.enumerations.StatusCode;
import org.apache.commons.lang3.tuple.ImmutablePair;
import android.content.Context;
+import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
public class CheckGcCredentialsPreference extends AbstractCheckCredentialsPreference {
- public CheckGcCredentialsPreference(Context context) {
- super(context);
- }
-
public CheckGcCredentialsPreference(Context context, AttributeSet attrs) {
super(context, attrs);
}
@@ -28,13 +25,14 @@ public class CheckGcCredentialsPreference extends AbstractCheckCredentialsPrefer
}
@Override
- protected Object login() {
+ protected ImmutablePair<StatusCode, Drawable> login() {
final StatusCode loginResult = GCLogin.getInstance().login();
- Object payload = loginResult;
- if (loginResult == StatusCode.NO_ERROR) {
- GCLogin.detectGcCustomDate();
- payload = GCLogin.getInstance().downloadAvatarAndGetMemberStatus();
+ switch (loginResult) {
+ case NO_ERROR:
+ GCLogin.detectGcCustomDate();
+ return new ImmutablePair<StatusCode, Drawable>(StatusCode.NO_ERROR, GCLogin.getInstance().downloadAvatarAndGetMemberStatus());
+ default:
+ return new ImmutablePair<StatusCode, Drawable>(loginResult, null);
}
- return payload;
}
}
diff --git a/main/src/cgeo/geocaching/settings/OAuthPreference.java b/main/src/cgeo/geocaching/settings/OAuthPreference.java
index 3550947..df77197 100644
--- a/main/src/cgeo/geocaching/settings/OAuthPreference.java
+++ b/main/src/cgeo/geocaching/settings/OAuthPreference.java
@@ -10,10 +10,8 @@ import android.content.Context;
import android.content.Intent;
import android.preference.Preference;
import android.util.AttributeSet;
-import android.view.View;
-import android.view.ViewGroup;
-public class OAuthPreference extends Preference {
+public class OAuthPreference extends AbstractClickablePreference {
private static final int NO_KEY = -1;
@@ -23,8 +21,8 @@ public class OAuthPreference extends Preference {
OCPL(R.string.pref_fakekey_ocpl_authorization, OCPLAuthorizationActivity.class),
TWITTER(R.string.pref_fakekey_twitter_authorization, TwitterAuthorizationActivity.class);
- public int prefKeyId;
- public Class<?> authActivity;
+ public final int prefKeyId;
+ public final Class<?> authActivity;
OAuthActivityMapping(int prefKeyId, Class<?> clazz) {
this.prefKeyId = prefKeyId;
@@ -44,11 +42,6 @@ public class OAuthPreference extends Preference {
return OAuthActivityMapping.NONE;
}
- public OAuthPreference(Context context) {
- super(context);
- this.oAuthMapping = getAuthorization();
- }
-
public OAuthPreference(Context context, AttributeSet attrs) {
super(context, attrs);
this.oAuthMapping = getAuthorization();
@@ -60,10 +53,9 @@ public class OAuthPreference extends Preference {
}
@Override
- protected View onCreateView(ViewGroup parent) {
- final SettingsActivity activity = (SettingsActivity) getContext();
-
- setOnPreferenceClickListener(new OnPreferenceClickListener() {
+ protected OnPreferenceClickListener getOnPreferenceClickListener(final SettingsActivity activity) {
+ activity.setOcAuthTitle(oAuthMapping.prefKeyId);
+ return new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
if (oAuthMapping.authActivity != null) {
@@ -74,9 +66,7 @@ public class OAuthPreference extends Preference {
}
return false; // no shared preference has to be changed
}
- });
+ };
- activity.setOcAuthTitle(oAuthMapping.prefKeyId);
- return super.onCreateView(parent);
}
}
diff --git a/main/src/cgeo/geocaching/settings/RegisterSend2CgeoPreference.java b/main/src/cgeo/geocaching/settings/RegisterSend2CgeoPreference.java
index 3e838ab..a1ab215 100644
--- a/main/src/cgeo/geocaching/settings/RegisterSend2CgeoPreference.java
+++ b/main/src/cgeo/geocaching/settings/RegisterSend2CgeoPreference.java
@@ -8,26 +8,19 @@ import cgeo.geocaching.ui.dialog.Dialogs;
import cgeo.geocaching.utils.Log;
import ch.boye.httpclientandroidlib.HttpResponse;
-
import org.apache.commons.lang3.StringUtils;
+import rx.Observable;
+import rx.android.observables.AndroidObservable;
+import rx.functions.Action1;
+import rx.functions.Func0;
+import rx.schedulers.Schedulers;
import android.app.ProgressDialog;
import android.content.Context;
-import android.os.Handler;
-import android.os.Message;
import android.preference.Preference;
import android.util.AttributeSet;
-import android.view.View;
-import android.view.ViewGroup;
-
-public class RegisterSend2CgeoPreference extends Preference {
- ProgressDialog progressDialog;
- SettingsActivity activity;
-
- public RegisterSend2CgeoPreference(Context context) {
- super(context);
- }
+public class RegisterSend2CgeoPreference extends AbstractClickablePreference {
public RegisterSend2CgeoPreference(Context context, AttributeSet attrs) {
super(context, attrs);
@@ -37,42 +30,9 @@ public class RegisterSend2CgeoPreference extends Preference {
super(context, attrs, defStyle);
}
- private Handler webAuthHandler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- // satisfy static code analysis
- if (activity == null) {
- return;
- }
-
- try {
- if (progressDialog != null && progressDialog.isShowing()) {
- progressDialog.dismiss();
- }
-
- if (msg.what > 0) {
- Dialogs.message(activity, R.string.init_sendToCgeo,
- activity.getString(R.string.init_sendToCgeo_register_ok)
- .replace("####", String.valueOf(msg.what)));
- } else {
- Dialogs.message(activity, R.string.init_sendToCgeo, R.string.init_sendToCgeo_register_fail);
- }
- } catch (Exception e) {
- ActivityMixin.showToast(activity, R.string.init_sendToCgeo_register_fail);
- Log.e("SettingsActivity.webHandler", e);
- }
-
- if (progressDialog != null && progressDialog.isShowing()) {
- progressDialog.dismiss();
- }
- }
- };
-
@Override
- protected View onCreateView(ViewGroup parent) {
- activity = (SettingsActivity) getContext();
-
- setOnPreferenceClickListener(new OnPreferenceClickListener() {
+ protected OnPreferenceClickListener getOnPreferenceClickListener(final SettingsActivity activity) {
+ return new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
// satisfy static code analysis
@@ -88,43 +48,51 @@ public class RegisterSend2CgeoPreference extends Preference {
return false;
}
- progressDialog = ProgressDialog.show(activity,
+ final ProgressDialog progressDialog = ProgressDialog.show(activity,
activity.getString(R.string.init_sendToCgeo),
activity.getString(R.string.init_sendToCgeo_registering), true);
progressDialog.setCancelable(false);
- (new Thread() {
-
- @Override
- public void run() {
- int pin = 0;
-
- final String nam = StringUtils.defaultString(deviceName);
- final String cod = StringUtils.defaultString(deviceCode);
-
- final Parameters params = new Parameters("name", nam, "code", cod);
- HttpResponse response = Network.getRequest("http://send2.cgeo.org/auth.html", params);
-
- if (response != null && response.getStatusLine().getStatusCode() == 200) {
- //response was OK
- String[] strings = StringUtils.split(Network.getResponseData(response), ',');
- try {
- pin = Integer.parseInt(strings[1].trim());
- } catch (Exception e) {
- Log.e("webDialog", e);
+ AndroidObservable.fromActivity(activity,
+ Observable.defer(new Func0<Observable<Integer>>() {
+ @Override
+ public Observable<Integer> call() {
+ final String nam = StringUtils.defaultString(deviceName);
+ final String cod = StringUtils.defaultString(deviceCode);
+
+ final Parameters params = new Parameters("name", nam, "code", cod);
+ HttpResponse response = Network.getRequest("http://send2.cgeo.org/auth.html", params);
+
+ if (response != null && response.getStatusLine().getStatusCode() == 200) {
+ //response was OK
+ final String[] strings = StringUtils.split(Network.getResponseData(response), ',');
+ Settings.setWebNameCode(nam, strings[0]);
+ try {
+ return Observable.from(Integer.parseInt(strings[1].trim()));
+ } catch (final Exception e) {
+ Log.e("RegisterSend2CgeoPreference", e);
+ }
+ }
+
+ return Observable.empty();
}
- String code = strings[0];
- Settings.setWebNameCode(nam, code);
+ }).firstOrDefault(0).subscribeOn(Schedulers.io())).subscribe(new Action1<Integer>() {
+ @Override
+ public void call(final Integer pin) {
+ progressDialog.dismiss();
+ if (pin > 0) {
+ Dialogs.message(activity, R.string.init_sendToCgeo,
+ activity.getString(R.string.init_sendToCgeo_register_ok)
+ .replace("####", String.valueOf(pin)));
+ } else {
+ Dialogs.message(activity, R.string.init_sendToCgeo, R.string.init_sendToCgeo_register_fail);
}
-
- webAuthHandler.sendEmptyMessage(pin);
}
- }).start();
+ });
return true;
}
- });
- return super.onCreateView(parent);
+ };
}
}
diff --git a/main/src/cgeo/geocaching/settings/Settings.java b/main/src/cgeo/geocaching/settings/Settings.java
index 0732866..6c3c984 100644
--- a/main/src/cgeo/geocaching/settings/Settings.java
+++ b/main/src/cgeo/geocaching/settings/Settings.java
@@ -54,8 +54,8 @@ public class Settings {
private final static int unitsMetric = 1;
// twitter api keys
- private final static String keyConsumerPublic = CryptUtils.rot13("ESnsCvAv3kEupF1GCR3jGj");
- private final static String keyConsumerSecret = CryptUtils.rot13("7vQWceACV9umEjJucmlpFe9FCMZSeqIqfkQ2BnhV9x");
+ private final static @NonNull String keyConsumerPublic = CryptUtils.rot13("ESnsCvAv3kEupF1GCR3jGj");
+ private final static @NonNull String keyConsumerSecret = CryptUtils.rot13("7vQWceACV9umEjJucmlpFe9FCMZSeqIqfkQ2BnhV9x");
public enum CoordInputFormatEnum {
Plain,
@@ -313,16 +313,16 @@ public class Settings {
return getBoolean(R.string.pref_connectorOXActive, false);
}
- public static boolean isPremiumMember() {
+ public static boolean isGCPremiumMember() {
// Basic Member, Premium Member, ???
- return GCConstants.MEMBER_STATUS_PM.equalsIgnoreCase(Settings.getMemberStatus());
+ return GCConstants.MEMBER_STATUS_PM.equalsIgnoreCase(Settings.getGCMemberStatus());
}
- public static String getMemberStatus() {
+ public static String getGCMemberStatus() {
return getString(R.string.pref_memberstatus, "");
}
- public static boolean setMemberStatus(final String memberStatus) {
+ public static boolean setGCMemberStatus(final String memberStatus) {
if (StringUtils.isBlank(memberStatus)) {
return remove(R.string.pref_memberstatus);
}
@@ -478,7 +478,7 @@ public class Settings {
}
public static boolean getLoadDirImg() {
- return !isPremiumMember() && getBoolean(R.string.pref_loaddirectionimg, true);
+ return !isGCPremiumMember() && getBoolean(R.string.pref_loaddirectionimg, true);
}
public static void setGcCustomDate(final String format) {
@@ -506,7 +506,7 @@ public class Settings {
}
public static boolean isShowCaptcha() {
- return !isPremiumMember() && getBoolean(R.string.pref_showcaptcha, false);
+ return !isGCPremiumMember() && getBoolean(R.string.pref_showcaptcha, false);
}
public static boolean isExcludeDisabledCaches() {
@@ -694,10 +694,12 @@ public class Settings {
return getBoolean(R.string.pref_skin, false);
}
+ @NonNull
public static String getKeyConsumerPublic() {
return keyConsumerPublic;
}
+ @NonNull
public static String getKeyConsumerSecret() {
return keyConsumerSecret;
}
diff --git a/main/src/cgeo/geocaching/settings/SettingsActivity.java b/main/src/cgeo/geocaching/settings/SettingsActivity.java
index 58acfc1..bcf6715 100644
--- a/main/src/cgeo/geocaching/settings/SettingsActivity.java
+++ b/main/src/cgeo/geocaching/settings/SettingsActivity.java
@@ -1,6 +1,7 @@
package cgeo.geocaching.settings;
import cgeo.geocaching.CgeoApplication;
+import cgeo.geocaching.DataStore;
import cgeo.geocaching.Intents;
import cgeo.geocaching.R;
import cgeo.geocaching.SelectMapfileActivity;
@@ -19,8 +20,10 @@ import cgeo.geocaching.utils.Log;
import org.apache.commons.lang3.StringUtils;
import org.openintents.intents.FileManagerIntents;
+import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
+import android.content.res.Resources;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
@@ -52,8 +55,7 @@ import java.util.Locale;
*/
public class SettingsActivity extends PreferenceActivity {
- private static final String INTENT_GOTO = "GOTO";
- private static final int INTENT_GOTO_SERVICES = 1;
+ private static final String INTENT_OPEN_SCREEN = "OPEN_SCREEN";
/**
* Enumeration for directory choosers. This is how we can retrieve information about the
@@ -89,18 +91,21 @@ public class SettingsActivity extends PreferenceActivity {
initPreferences();
Intent intent = getIntent();
- int gotoPage = intent.getIntExtra(INTENT_GOTO, 0);
- if (gotoPage == INTENT_GOTO_SERVICES) {
- // start with services screen
- PreferenceScreen main = (PreferenceScreen) getPreference(R.string.pref_fakekey_main_screen);
- try {
- if (main != null) {
- int index = getPreference(R.string.pref_fakekey_services_screen).getOrder();
- main.onItemClick(null, null, index, 0);
- }
- } catch (RuntimeException e) {
- Log.e("could not open services preferences", e);
- }
+ openInitialScreen(intent.getIntExtra(INTENT_OPEN_SCREEN, 0));
+ }
+
+ private void openInitialScreen(int initialScreen) {
+ if (initialScreen == 0) {
+ return;
+ }
+ PreferenceScreen screen = (PreferenceScreen) getPreference(initialScreen);
+ if (screen == null) {
+ return;
+ }
+ try {
+ setPreferenceScreen(screen);
+ } catch (RuntimeException e) {
+ Log.e("could not open preferences " + initialScreen, e);
}
}
@@ -121,6 +126,7 @@ public class SettingsActivity extends PreferenceActivity {
initSend2CgeoPreferences();
initServicePreferences();
initNavigationMenuPreferences();
+ initMaintenanceButtons();
for (int k : new int[] { R.string.pref_username, R.string.pref_password,
R.string.pref_pass_vote, R.string.pref_signature,
@@ -141,9 +147,9 @@ public class SettingsActivity extends PreferenceActivity {
getPreference(appEnum.preferenceKey).setEnabled(true);
}
}
- getPreference(R.string.pref_fakekey_basicmembers_screen)
- .setEnabled(!Settings.isPremiumMember());
- redrawScreen(R.string.pref_fakekey_navigation_menu_screen);
+ getPreference(R.string.preference_screen_basicmembers)
+ .setEnabled(!Settings.isGCPremiumMember());
+ redrawScreen(R.string.preference_screen_navigation_menu);
}
private void initServicePreferences() {
@@ -310,6 +316,35 @@ public class SettingsActivity extends PreferenceActivity {
});
}
+ public void initMaintenanceButtons() {
+ Preference dirMaintenance = getPreference(R.string.pref_fakekey_preference_maintenance_directories);
+ dirMaintenance.setOnPreferenceClickListener(new OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(final Preference preference) {
+ // disable the button, as the cleanup runs in background and should not be invoked a second time
+ preference.setEnabled(false);
+
+ Resources res = getResources();
+ final SettingsActivity activity = SettingsActivity.this;
+ final ProgressDialog dialog = ProgressDialog.show(activity, res.getString(R.string.init_maintenance), res.getString(R.string.init_maintenance_directories), true, false);
+ new Thread() {
+ @Override
+ public void run() {
+ DataStore.removeObsoleteCacheDirectories();
+ activity.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ dialog.dismiss();
+ }
+ });
+ }
+ }.start();
+
+ return true;
+ }
+ });
+ }
+
private void initDbLocationPreference() {
Preference p = getPreference(R.string.pref_dbonsdcard);
p.setPersistent(false);
@@ -336,21 +371,29 @@ public class SettingsActivity extends PreferenceActivity {
}
void initBasicMemberPreferences() {
- getPreference(R.string.pref_fakekey_basicmembers_screen)
- .setEnabled(!Settings.isPremiumMember());
+ getPreference(R.string.preference_screen_basicmembers)
+ .setEnabled(!Settings.isGCPremiumMember());
getPreference(R.string.pref_loaddirectionimg)
- .setEnabled(!Settings.isPremiumMember());
+ .setEnabled(!Settings.isGCPremiumMember());
getPreference(R.string.pref_showcaptcha)
- .setEnabled(!Settings.isPremiumMember());
+ .setEnabled(!Settings.isGCPremiumMember());
- redrawScreen(R.string.pref_fakekey_services_screen);
+ redrawScreen(R.string.preference_screen_services);
}
- void redrawScreen(int key) {
- PreferenceScreen screen = (PreferenceScreen) getPreference(key);
- if (screen == null) {
+ /**
+ * Refresh a preference screen. Has no effect when called for a preference, that is not actually a preference
+ * screen.
+ *
+ * @param key
+ * Key of a preference screen.
+ */
+ void redrawScreen(final int key) {
+ final Preference preference = getPreference(key);
+ if (!(preference instanceof PreferenceScreen)) {
return;
}
+ final PreferenceScreen screen = (PreferenceScreen) preference;
ListAdapter adapter = screen.getRootAdapter();
if (adapter instanceof BaseAdapter) {
((BaseAdapter) adapter).notifyDataSetChanged();
@@ -399,9 +442,9 @@ public class SettingsActivity extends PreferenceActivity {
: R.string.settings_authorize));
}
- public static void jumpToServicesPage(final Context fromActivity) {
+ public static void openForScreen(final int preferenceScreenKey, final Context fromActivity) {
final Intent intent = new Intent(fromActivity, SettingsActivity.class);
- intent.putExtra(INTENT_GOTO, INTENT_GOTO_SERVICES);
+ intent.putExtra(INTENT_OPEN_SCREEN, preferenceScreenKey);
fromActivity.startActivity(intent);
}
@@ -445,15 +488,15 @@ public class SettingsActivity extends PreferenceActivity {
break;
case R.string.pref_fakekey_ocde_authorization:
setOCDEAuthTitle();
- redrawScreen(R.string.pref_fakekey_services_screen);
+ redrawScreen(R.string.preference_screen_ocde);
break;
case R.string.pref_fakekey_ocpl_authorization:
setOCPLAuthTitle();
- redrawScreen(R.string.pref_fakekey_services_screen);
+ redrawScreen(R.string.preference_screen_ocpl);
break;
case R.string.pref_fakekey_twitter_authorization:
setTwitterAuthTitle();
- redrawScreen(R.string.pref_fakekey_services_screen);
+ redrawScreen(R.string.preference_screen_twitter);
break;
default:
throw new IllegalArgumentException();
@@ -582,6 +625,13 @@ public class SettingsActivity extends PreferenceActivity {
preferenceActivity.addPreferencesFromResource(preferencesResId);
}
+ @SuppressWarnings("deprecation")
+ @Override
+ public void setPreferenceScreen(PreferenceScreen preferenceScreen) {
+ // TODO replace with fragment based code
+ super.setPreferenceScreen(preferenceScreen);
+ }
+
private static boolean isPreference(final Preference preference, int preferenceKeyId) {
return getKey(preferenceKeyId).equals(preference.getKey());
}
diff --git a/main/src/cgeo/geocaching/settings/TemplateTextPreference.java b/main/src/cgeo/geocaching/settings/TemplateTextPreference.java
index a703231..667b02b 100644
--- a/main/src/cgeo/geocaching/settings/TemplateTextPreference.java
+++ b/main/src/cgeo/geocaching/settings/TemplateTextPreference.java
@@ -2,6 +2,7 @@ package cgeo.geocaching.settings;
import cgeo.geocaching.R;
import cgeo.geocaching.activity.ActivityMixin;
+import cgeo.geocaching.ui.dialog.Dialogs;
import cgeo.geocaching.utils.LogTemplateProvider;
import cgeo.geocaching.utils.LogTemplateProvider.LogTemplate;
@@ -49,6 +50,7 @@ public class TemplateTextPreference extends DialogPreference {
editText = (EditText) view.findViewById(R.id.signature_dialog_text);
editText.setText(getPersistedString(initialValue != null ? initialValue : StringUtils.EMPTY));
+ Dialogs.moveCursorToEnd(editText);
Button button = (Button) view.findViewById(R.id.signature_templates);
button.setOnClickListener(new View.OnClickListener() {