diff options
Diffstat (limited to 'main/src/cgeo/geocaching/settings')
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() { |
