package cgeo.geocaching.settings;
import cgeo.geocaching.R;
import cgeo.geocaching.activity.ActivityMixin;
import cgeo.geocaching.network.Network;
import cgeo.geocaching.network.Parameters;
import cgeo.geocaching.ui.dialog.Dialogs;
import cgeo.geocaching.utils.AndroidRxUtils;
import cgeo.geocaching.utils.Log;
import android.app.ProgressDialog;
import android.content.Context;
import android.preference.Preference;
import android.util.AttributeSet;
import java.util.concurrent.Callable;
import io.reactivex.Observable;
import io.reactivex.functions.Consumer;
import okhttp3.Response;
import org.apache.commons.lang3.StringUtils;
public class RegisterSend2CgeoPreference extends AbstractClickablePreference {
public RegisterSend2CgeoPreference(final Context context, final AttributeSet attrs) {
super(context, attrs);
}
public RegisterSend2CgeoPreference(final Context context, final AttributeSet attrs, final int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected OnPreferenceClickListener getOnPreferenceClickListener(final SettingsActivity activity) {
return new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(final Preference preference) {
// satisfy static code analysis
if (activity == null) {
return true;
}
final String deviceName = Settings.getWebDeviceName();
if (StringUtils.isBlank(deviceName)) {
ActivityMixin.showToast(activity, R.string.err_missing_device_name);
return false;
}
final String deviceCode = Settings.getWebDeviceCode();
final ProgressDialog progressDialog = ProgressDialog.show(activity,
activity.getString(R.string.init_sendToCgeo),
activity.getString(R.string.init_sendToCgeo_registering), true);
progressDialog.setCancelable(false);
AndroidRxUtils.bindActivity(activity, Observable.defer(new Callable<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);
try {
final Response response = Network.getRequest("http://send2.cgeo.org/auth.html", params)
.flatMap(Network.withSuccess).blockingGet();
final String[] strings = StringUtils.split(Network.getResponseData(response), ',');
if (strings != null) {
Settings.setWebNameCode(nam, strings[0]);
return Observable.just(Integer.valueOf(strings[1].trim()));
}
} catch (final Exception e) {
Log.e("RegisterSend2CgeoPreference", e);
}
return Observable.empty();
}
}).first(0)).subscribeOn(AndroidRxUtils.networkScheduler).subscribe(new Consumer<Integer>() {
@Override
public void accept(final Integer pin) {
progressDialog.dismiss();
if (pin > 0) {
Dialogs.message(activity, R.string.init_sendToCgeo,
activity.getString(R.string.init_sendToCgeo_register_ok, pin));
} else {
Dialogs.message(activity, R.string.init_sendToCgeo, R.string.init_sendToCgeo_register_fail);
}
}
});
return true;
}
};
}
}