diff options
-rw-r--r-- | app/src/main/java/de/danoeh/antennapod/dialog/ProxyDialog.java | 101 | ||||
-rw-r--r-- | core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java | 13 |
2 files changed, 47 insertions, 67 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/ProxyDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/ProxyDialog.java index 375f676c8..13258b4ec 100644 --- a/app/src/main/java/de/danoeh/antennapod/dialog/ProxyDialog.java +++ b/app/src/main/java/de/danoeh/antennapod/dialog/ProxyDialog.java @@ -30,8 +30,7 @@ import de.danoeh.antennapod.R; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.service.download.AntennapodHttpClient; import de.danoeh.antennapod.core.service.download.ProxyConfig; -import io.reactivex.Single; -import io.reactivex.SingleOnSubscribe; +import io.reactivex.Completable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; @@ -41,9 +40,6 @@ import okhttp3.Request; import okhttp3.Response; public class ProxyDialog { - - private static final String TAG = "ProxyDialog"; - private final Context context; private AlertDialog dialog; @@ -116,32 +112,32 @@ public class ProxyDialog { types.add(Proxy.Type.SOCKS.name()); } ArrayAdapter<String> adapter = new ArrayAdapter<>(context, - android.R.layout.simple_spinner_item, types); + android.R.layout.simple_spinner_item, types); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spType.setAdapter(adapter); ProxyConfig proxyConfig = UserPreferences.getProxyConfig(); spType.setSelection(adapter.getPosition(proxyConfig.type.name())); etHost = content.findViewById(R.id.etHost); - if(!TextUtils.isEmpty(proxyConfig.host)) { + if (!TextUtils.isEmpty(proxyConfig.host)) { etHost.setText(proxyConfig.host); } etHost.addTextChangedListener(requireTestOnChange); etPort = content.findViewById(R.id.etPort); - if(proxyConfig.port > 0) { + if (proxyConfig.port > 0) { etPort.setText(String.valueOf(proxyConfig.port)); } etPort.addTextChangedListener(requireTestOnChange); etUsername = content.findViewById(R.id.etUsername); - if(!TextUtils.isEmpty(proxyConfig.username)) { + if (!TextUtils.isEmpty(proxyConfig.username)) { etUsername.setText(proxyConfig.username); } etUsername.addTextChangedListener(requireTestOnChange); etPassword = content.findViewById(R.id.etPassword); - if(!TextUtils.isEmpty(proxyConfig.password)) { - etPassword.setText(proxyConfig.username); + if (!TextUtils.isEmpty(proxyConfig.password)) { + etPassword.setText(proxyConfig.password); } etPassword.addTextChangedListener(requireTestOnChange); - if(proxyConfig.type == Proxy.Type.DIRECT) { + if (proxyConfig.type == Proxy.Type.DIRECT) { enableSettings(false); setTestRequired(false); } @@ -184,8 +180,8 @@ public class ProxyDialog { private boolean checkValidity() { boolean valid = true; - if(spType.getSelectedItemPosition() > 0) { - valid &= checkHost(); + if (spType.getSelectedItemPosition() > 0) { + valid = checkHost(); } valid &= checkPort(); return valid; @@ -193,11 +189,11 @@ public class ProxyDialog { private boolean checkHost() { String host = etHost.getText().toString(); - if(host.length() == 0) { + if (host.length() == 0) { etHost.setError(context.getString(R.string.proxy_host_empty_error)); return false; } - if(!"localhost".equals(host) && !Patterns.DOMAIN_NAME.matcher(host).matches()) { + if (!"localhost".equals(host) && !Patterns.DOMAIN_NAME.matcher(host).matches()) { etHost.setError(context.getString(R.string.proxy_host_invalid_error)); return false; } @@ -215,10 +211,10 @@ public class ProxyDialog { private int getPort() { String port = etPort.getText().toString(); - if(port.length() > 0) { + if (port.length() > 0) { try { return Integer.parseInt(port); - } catch(NumberFormatException e) { + } catch (NumberFormatException e) { // ignore } } @@ -226,7 +222,7 @@ public class ProxyDialog { } private void setTestRequired(boolean required) { - if(required) { + if (required) { testSuccessful = false; dialog.getButton(AlertDialog.BUTTON_POSITIVE).setText(R.string.proxy_test_label); } else { @@ -240,7 +236,7 @@ public class ProxyDialog { if (disposable != null) { disposable.dispose(); } - if(!checkValidity()) { + if (!checkValidity()) { setTestRequired(true); return; } @@ -251,7 +247,7 @@ public class ProxyDialog { txtvMessage.setTextColor(textColorPrimary); txtvMessage.setText("{fa-circle-o-notch spin} " + checking); txtvMessage.setVisibility(View.VISIBLE); - disposable = Single.create((SingleOnSubscribe<Response>) emitter -> { + disposable = Completable.create(emitter -> { String type = (String) spType.getSelectedItem(); String host = etHost.getText().toString(); String port = etPort.getText().toString(); @@ -263,59 +259,44 @@ public class ProxyDialog { } SocketAddress address = InetSocketAddress.createUnresolved(host, portValue); Proxy.Type proxyType = Proxy.Type.valueOf(type.toUpperCase(Locale.US)); - Proxy proxy = new Proxy(proxyType, address); OkHttpClient.Builder builder = AntennapodHttpClient.newBuilder() .connectTimeout(10, TimeUnit.SECONDS) - .proxy(proxy); - builder.interceptors().clear(); - OkHttpClient client = builder.build(); + .proxy(new Proxy(proxyType, address)); if (!TextUtils.isEmpty(username)) { - String credentials = Credentials.basic(username, password); - client.interceptors().add(chain -> { - Request request = chain.request().newBuilder() - .header("Proxy-Authorization", credentials).build(); - return chain.proceed(request); + builder.proxyAuthenticator((route, response) -> { + String credentials = Credentials.basic(username, password); + return response.request().newBuilder() + .header("Proxy-Authorization", credentials) + .build(); }); } - Request request = new Request.Builder() - .url("http://www.google.com") - .head() - .build(); - try { - Response response = client.newCall(request).execute(); - emitter.onSuccess(response); - } catch(IOException e) { + OkHttpClient client = builder.build(); + Request request = new Request.Builder().url("https://www.example.com").head().build(); + try (Response response = client.newCall(request).execute()) { + if (response.isSuccessful()) { + emitter.onComplete(); + } else { + emitter.onError(new IOException(response.message())); + } + } catch (IOException e) { emitter.onError(e); } }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe( - response -> { - int colorId; - String icon; - String result; - if(response.isSuccessful()) { - colorId = R.color.download_success_green; - icon = "{fa-check}"; - result = context.getString(R.string.proxy_test_successful); - } else { - colorId = R.color.download_failed_red; - icon = "{fa-close}"; - result = context.getString(R.string.proxy_test_failed); - } - int color = ContextCompat.getColor(context, colorId); - txtvMessage.setTextColor(color); - String message = String.format("%s %s: %s", icon, result, response.message()); + () -> { + txtvMessage.setTextColor(ContextCompat.getColor(context, R.color.download_success_green)); + String message = String.format("%s %s", "{fa-check}", + context.getString(R.string.proxy_test_successful)); txtvMessage.setText(message); - setTestRequired(!response.isSuccessful()); + setTestRequired(false); }, error -> { - String icon = "{fa-close}"; - String result = context.getString(R.string.proxy_test_failed); - int color = ContextCompat.getColor(context, R.color.download_failed_red); - txtvMessage.setTextColor(color); - String message = String.format("%s %s: %s", icon, result, error.getMessage()); + error.printStackTrace(); + txtvMessage.setTextColor(ContextCompat.getColor(context, R.color.download_failed_red)); + String message = String.format("%s %s: %s", "{fa-close}", + context.getString(R.string.proxy_test_failed), error.getMessage()); txtvMessage.setText(message); setTestRequired(true); } diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java index 4d1d44908..93a58af06 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java @@ -118,14 +118,13 @@ public class AntennapodHttpClient { if (config.type != Proxy.Type.DIRECT) { int port = config.port > 0 ? config.port : ProxyConfig.DEFAULT_PORT; SocketAddress address = InetSocketAddress.createUnresolved(config.host, port); - Proxy proxy = new Proxy(config.type, address); - builder.proxy(proxy); + builder.proxy(new Proxy(config.type, address)); if (!TextUtils.isEmpty(config.username) && config.password != null) { - String credentials = Credentials.basic(config.username, config.password); - builder.interceptors().add(chain -> { - Request request = chain.request().newBuilder() - .header("Proxy-Authorization", credentials).build(); - return chain.proceed(request); + builder.proxyAuthenticator((route, response) -> { + String credentials = Credentials.basic(config.username, config.password); + return response.request().newBuilder() + .header("Proxy-Authorization", credentials) + .build(); }); } } |