diff options
3 files changed, 140 insertions, 185 deletions
diff --git a/main/src/cgeo/geocaching/settings/AbstractCheckCredentialsPreference.java b/main/src/cgeo/geocaching/settings/AbstractCheckCredentialsPreference.java new file mode 100644 index 0000000..69f6188 --- /dev/null +++ b/main/src/cgeo/geocaching/settings/AbstractCheckCredentialsPreference.java @@ -0,0 +1,119 @@ +package cgeo.geocaching.settings; + +import cgeo.geocaching.R; +import cgeo.geocaching.activity.ActivityMixin; +import cgeo.geocaching.enumerations.StatusCode; +import cgeo.geocaching.network.Cookies; +import cgeo.geocaching.utils.Log; + +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.tuple.ImmutablePair; + +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 AbstractCheckCredentialsPreference(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public AbstractCheckCredentialsPreference(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + @Override + protected View onCreateView(ViewGroup parent) { + setOnPreferenceClickListener(new LoginCheckClickListener()); + return super.onCreateView(parent); + } + + protected abstract ImmutablePair<String, String> getCredentials(); + + protected abstract Object 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(); + } + + if (msg.obj == null || (msg.obj instanceof Drawable)) { + ActivityMixin.helpDialog(activity, + res.getString(R.string.init_login_popup), + res.getString(R.string.init_login_popup_ok), + (Drawable) msg.obj); + } else { + ActivityMixin.helpDialog(activity, + res.getString(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) { + this.activity = (SettingsActivity) AbstractCheckCredentialsPreference.this.getContext(); + this.res = activity.getResources(); + + ImmutablePair<String, String> credentials = getCredentials(); + + // check credentials for validity + if (StringUtils.isBlank(credentials.getLeft()) + || StringUtils.isBlank(credentials.getRight())) { + ActivityMixin.showToast(activity, R.string.err_missing_auth); + return false; + } + + 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() { + @Override + public void run() { + Object payload = login(); + logInHandler.obtainMessage(0, payload).sendToTarget(); + } + }).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 7424fe6..f4f2fc7 100644 --- a/main/src/cgeo/geocaching/settings/CheckECCredentialsPreference.java +++ b/main/src/cgeo/geocaching/settings/CheckECCredentialsPreference.java @@ -1,28 +1,14 @@ package cgeo.geocaching.settings; -import cgeo.geocaching.R; -import cgeo.geocaching.activity.ActivityMixin; import cgeo.geocaching.connector.ec.ECLogin; import cgeo.geocaching.enumerations.StatusCode; -import cgeo.geocaching.network.Cookies; -import cgeo.geocaching.utils.Log; -import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.ImmutablePair; -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 class CheckECCredentialsPreference extends Preference { +public class CheckECCredentialsPreference extends AbstractCheckCredentialsPreference { public CheckECCredentialsPreference(Context context) { super(context); @@ -37,84 +23,17 @@ public class CheckECCredentialsPreference extends Preference { } @Override - protected View onCreateView(ViewGroup parent) { - setOnPreferenceClickListener(EC_LOGIN_CHECK); - return super.onCreateView(parent); + protected ImmutablePair<String, String> getCredentials() { + return Settings.getECLogin(); } - private final ECLoginCheck EC_LOGIN_CHECK = new ECLoginCheck(); - - private class ECLoginCheck 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(); - } - - if (msg.obj == null || (msg.obj instanceof Drawable)) { - ActivityMixin.helpDialog(activity, - res.getString(R.string.init_login_popup), - res.getString(R.string.init_login_popup_ok), - (Drawable) msg.obj); - } else { - ActivityMixin.helpDialog(activity, - res.getString(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(); - } - } - } - }; - - @Override - public boolean onPreferenceClick(Preference preference) { - this.activity = (SettingsActivity) CheckECCredentialsPreference.this.getContext(); - this.res = activity.getResources(); - - ImmutablePair<String, String> credentials = Settings.getECLogin(); - - // check credentials for validity - if (StringUtils.isBlank(credentials.getLeft()) - || StringUtils.isBlank(credentials.getRight())) { - ActivityMixin.showToast(activity, R.string.err_missing_auth); - return false; - } - - 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() { - @Override - public void run() { - final StatusCode loginResult = ECLogin.login(); - Object payload = loginResult; - if (loginResult == StatusCode.NO_ERROR) { - payload = null; - } - logInHandler.obtainMessage(0, payload).sendToTarget(); - } - }).start(); - - return false; // no shared preference has to be changed + @Override + protected Object login() { + final StatusCode loginResult = ECLogin.login(); + Object payload = loginResult; + if (loginResult == StatusCode.NO_ERROR) { + payload = null; } + return payload; } } diff --git a/main/src/cgeo/geocaching/settings/CheckGcCredentialsPreference.java b/main/src/cgeo/geocaching/settings/CheckGcCredentialsPreference.java index 724ab80..434f7d7 100644 --- a/main/src/cgeo/geocaching/settings/CheckGcCredentialsPreference.java +++ b/main/src/cgeo/geocaching/settings/CheckGcCredentialsPreference.java @@ -1,28 +1,14 @@ package cgeo.geocaching.settings; -import cgeo.geocaching.R; -import cgeo.geocaching.activity.ActivityMixin; import cgeo.geocaching.connector.gc.Login; import cgeo.geocaching.enumerations.StatusCode; -import cgeo.geocaching.network.Cookies; -import cgeo.geocaching.utils.Log; -import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.ImmutablePair; -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 class CheckGcCredentialsPreference extends Preference { +public class CheckGcCredentialsPreference extends AbstractCheckCredentialsPreference { public CheckGcCredentialsPreference(Context context) { super(context); @@ -37,87 +23,18 @@ public class CheckGcCredentialsPreference extends Preference { } @Override - protected View onCreateView(ViewGroup parent) { - setOnPreferenceClickListener(GC_LOGIN_CHECK); - return super.onCreateView(parent); + protected ImmutablePair<String, String> getCredentials() { + return Settings.getGcLogin(); } - private final GcLoginCheck GC_LOGIN_CHECK = new GcLoginCheck(); - - private class GcLoginCheck 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(); - } - - if (msg.obj == null || (msg.obj instanceof Drawable)) { - ActivityMixin.helpDialog(activity, - res.getString(R.string.init_login_popup), - res.getString(R.string.init_login_popup_ok), - (Drawable) msg.obj); - } else { - ActivityMixin.helpDialog(activity, - res.getString(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) { - this.activity = (SettingsActivity) CheckGcCredentialsPreference.this.getContext(); - this.res = activity.getResources(); - - ImmutablePair<String, String> credentials = Settings.getGcLogin(); - - // check credentials for validity - if (StringUtils.isBlank(credentials.getLeft()) - || StringUtils.isBlank(credentials.getRight())) { - ActivityMixin.showToast(activity, R.string.err_missing_auth); - return false; - } - - 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() { - @Override - public void run() { - final StatusCode loginResult = Login.login(); - Object payload = loginResult; - if (loginResult == StatusCode.NO_ERROR) { - Login.detectGcCustomDate(); - payload = Login.downloadAvatarAndGetMemberStatus(); - } - logInHandler.obtainMessage(0, payload).sendToTarget(); - } - }).start(); - - return false; // no shared preference has to be changed + @Override + protected Object login() { + final StatusCode loginResult = Login.login(); + Object payload = loginResult; + if (loginResult == StatusCode.NO_ERROR) { + Login.detectGcCustomDate(); + payload = Login.downloadAvatarAndGetMemberStatus(); } + return payload; } } |
