diff options
3 files changed, 26 insertions, 52 deletions
diff --git a/main/src/cgeo/geocaching/settings/AbstractCheckCredentialsPreference.java b/main/src/cgeo/geocaching/settings/AbstractCheckCredentialsPreference.java index 9508c26..bcc6942 100644 --- a/main/src/cgeo/geocaching/settings/AbstractCheckCredentialsPreference.java +++ b/main/src/cgeo/geocaching/settings/AbstractCheckCredentialsPreference.java @@ -5,18 +5,19 @@ 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; @@ -40,48 +41,15 @@ public abstract class AbstractCheckCredentialsPreference extends AbstractClickab protected abstract Object login(); private class LoginCheckClickListener implements OnPreferenceClickListener { - final private Resources res; final private SettingsActivity activity; LoginCheckClickListener(final SettingsActivity activity) { this.activity = activity; - this.res = activity.getResources(); } - private ProgressDialog loginDialog; - @SuppressLint("HandlerLeak") - private Handler logInHandler = new Handler() { - @Override - public void handleMessage(Message msg) { - try { - if (loginDialog != null && loginDialog.isShowing()) { - loginDialog.dismiss(); - } - - 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(); - } - } - }; - @Override public boolean onPreferenceClick(Preference preference) { + final Resources res = activity.getResources(); final ImmutablePair<String, String> credentials = getCredentials(); // check credentials for validity @@ -91,19 +59,33 @@ public abstract class AbstractCheckCredentialsPreference extends AbstractClickab 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<?>>() { + @Override + public Observable<?> call() { + return Observable.from(login()); + } + }).subscribeOn(Schedulers.io())).subscribe(new Action1<Object>() { @Override - public void run() { - Object payload = login(); - logInHandler.obtainMessage(0, payload).sendToTarget(); + public void call(final Object obj) { + loginDialog.dismiss(); + if (obj == null || obj instanceof Drawable) { + Dialogs.message(activity, R.string.init_login_popup, R.string.init_login_popup_ok, (Drawable) obj); + } else { + Dialogs.message(activity, R.string.init_login_popup, + res.getString(R.string.init_login_popup_failed_reason) + + " " + + ((StatusCode) obj).getErrorString(res) + + "."); + } + activity.initBasicMemberPreferences(); } - }).start(); + }); return false; // no shared preference has to be changed } diff --git a/main/src/cgeo/geocaching/settings/CheckECCredentialsPreference.java b/main/src/cgeo/geocaching/settings/CheckECCredentialsPreference.java index 46a3661..661e111 100644 --- a/main/src/cgeo/geocaching/settings/CheckECCredentialsPreference.java +++ b/main/src/cgeo/geocaching/settings/CheckECCredentialsPreference.java @@ -11,10 +11,6 @@ import android.util.AttributeSet; public class CheckECCredentialsPreference extends AbstractCheckCredentialsPreference { - public CheckECCredentialsPreference(Context context) { - super(context); - } - public CheckECCredentialsPreference(Context context, AttributeSet attrs) { super(context, attrs); } diff --git a/main/src/cgeo/geocaching/settings/CheckGcCredentialsPreference.java b/main/src/cgeo/geocaching/settings/CheckGcCredentialsPreference.java index 12c8b24..f65ba1b 100644 --- a/main/src/cgeo/geocaching/settings/CheckGcCredentialsPreference.java +++ b/main/src/cgeo/geocaching/settings/CheckGcCredentialsPreference.java @@ -10,10 +10,6 @@ import android.util.AttributeSet; public class CheckGcCredentialsPreference extends AbstractCheckCredentialsPreference { - public CheckGcCredentialsPreference(Context context) { - super(context); - } - public CheckGcCredentialsPreference(Context context, AttributeSet attrs) { super(context, attrs); } |
