package ru.ltst.u2020mvp.data.prefs;
import android.content.SharedPreferences;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import com.f2prateek.rx.preferences.Preference;
import java.net.InetSocketAddress;
import java.net.Proxy;
import ru.ltst.u2020mvp.util.Strings;
import static java.net.Proxy.Type.HTTP;
public class InetSocketAddressPreferenceAdapter implements Preference.Adapter<InetSocketAddress> {
public static final InetSocketAddressPreferenceAdapter INSTANCE =
new InetSocketAddressPreferenceAdapter();
InetSocketAddressPreferenceAdapter() {
}
@Override public void set(@NonNull String key, @NonNull InetSocketAddress address,
@NonNull SharedPreferences.Editor editor) {
String host = null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
host = address.getHostString();
} else {
host = address.getHostName();
}
int port = address.getPort();
editor.putString(key, host + ":" + port);
}
@Override
public InetSocketAddress get(@NonNull String key, @NonNull SharedPreferences preferences) {
String value = preferences.getString(key, null);
assert value != null; // Not called unless value is present.
String[] parts = value.split(":", 2);
String host = parts[0];
int port = parts.length > 1 ? Integer.parseInt(parts[1]) : 80;
return InetSocketAddress.createUnresolved(host, port);
}
public static @Nullable InetSocketAddress parse(@Nullable String value) {
if (Strings.isBlank(value)) {
return null;
}
String[] parts = value.split(":", 2);
if (parts.length == 0) {
return null;
}
String host = parts[0];
int port = parts.length > 1 ? Integer.parseInt(parts[1]) : 80;
return InetSocketAddress.createUnresolved(host, port);
}
public static @Nullable Proxy createProxy(@Nullable InetSocketAddress address) {
if (address == null) {
return null;
}
return new Proxy(HTTP, address);
}
}