summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh/antennapod/dialog
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/dialog')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/dialog/AuthenticationDialog.java29
-rw-r--r--app/src/main/java/de/danoeh/antennapod/dialog/AutoFlattrPreferenceDialog.java36
-rw-r--r--app/src/main/java/de/danoeh/antennapod/dialog/EpisodesApplyActionFragment.java133
-rw-r--r--app/src/main/java/de/danoeh/antennapod/dialog/GpodnetSetHostnameDialog.java1
-rw-r--r--app/src/main/java/de/danoeh/antennapod/dialog/ProxyDialog.java320
-rw-r--r--app/src/main/java/de/danoeh/antennapod/dialog/RatingDialog.java28
-rw-r--r--app/src/main/java/de/danoeh/antennapod/dialog/SleepTimerDialog.java19
-rw-r--r--app/src/main/java/de/danoeh/antennapod/dialog/VariableSpeedDialog.java4
8 files changed, 442 insertions, 128 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/AuthenticationDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/AuthenticationDialog.java
index bdb2d68ba..6f9e221ec 100644
--- a/app/src/main/java/de/danoeh/antennapod/dialog/AuthenticationDialog.java
+++ b/app/src/main/java/de/danoeh/antennapod/dialog/AuthenticationDialog.java
@@ -2,13 +2,13 @@ package de.danoeh.antennapod.dialog;
import android.app.Dialog;
import android.content.Context;
-import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
+
import de.danoeh.antennapod.R;
/**
@@ -58,26 +58,13 @@ public abstract class AuthenticationDialog extends Dialog {
if (passwordInitialValue != null) {
etxtPassword.setText(passwordInitialValue);
}
- setOnCancelListener(new OnCancelListener() {
- @Override
- public void onCancel(DialogInterface dialog) {
- onCancelled();
- }
- });
- butCancel.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- cancel();
- }
- });
- butConfirm.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- onConfirmed(etxtUsername.getText().toString(),
- etxtPassword.getText().toString(),
- showSaveCredentialsCheckbox && saveUsernamePassword.isChecked());
- dismiss();
- }
+ setOnCancelListener(dialog -> onCancelled());
+ butCancel.setOnClickListener(v -> cancel());
+ butConfirm.setOnClickListener(v -> {
+ onConfirmed(etxtUsername.getText().toString(),
+ etxtPassword.getText().toString(),
+ showSaveCredentialsCheckbox && saveUsernamePassword.isChecked());
+ dismiss();
});
}
diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/AutoFlattrPreferenceDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/AutoFlattrPreferenceDialog.java
index 75b1bc8d2..93425949c 100644
--- a/app/src/main/java/de/danoeh/antennapod/dialog/AutoFlattrPreferenceDialog.java
+++ b/app/src/main/java/de/danoeh/antennapod/dialog/AutoFlattrPreferenceDialog.java
@@ -3,7 +3,6 @@ package de.danoeh.antennapod.dialog;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
-import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.view.View;
import android.widget.CheckBox;
@@ -42,12 +41,9 @@ public class AutoFlattrPreferenceDialog {
setStatusMsgText(activity, txtvStatus, initialValue);
skbPercent.setProgress(initialValue);
- chkAutoFlattr.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- skbPercent.setEnabled(chkAutoFlattr.isChecked());
- txtvStatus.setEnabled(chkAutoFlattr.isChecked());
- }
+ chkAutoFlattr.setOnClickListener(v -> {
+ skbPercent.setEnabled(chkAutoFlattr.isChecked());
+ txtvStatus.setEnabled(chkAutoFlattr.isChecked());
});
skbPercent.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@@ -69,20 +65,14 @@ public class AutoFlattrPreferenceDialog {
builder.setTitle(R.string.pref_auto_flattr_title)
.setView(view)
- .setPositiveButton(R.string.confirm_label, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- float progDouble = ((float) skbPercent.getProgress()) / 100.0f;
- callback.onConfirmed(chkAutoFlattr.isChecked(), progDouble);
- dialog.dismiss();
- }
+ .setPositiveButton(R.string.confirm_label, (dialog, which) -> {
+ float progDouble = ((float) skbPercent.getProgress()) / 100.0f;
+ callback.onConfirmed(chkAutoFlattr.isChecked(), progDouble);
+ dialog.dismiss();
})
- .setNegativeButton(R.string.cancel_label, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- callback.onCancelled();
- dialog.dismiss();
- }
+ .setNegativeButton(R.string.cancel_label, (dialog, which) -> {
+ callback.onCancelled();
+ dialog.dismiss();
})
.setCancelable(false).show();
}
@@ -97,10 +87,10 @@ public class AutoFlattrPreferenceDialog {
}
}
- public static interface AutoFlattrPreferenceDialogInterface {
- public void onCancelled();
+ public interface AutoFlattrPreferenceDialogInterface {
+ void onCancelled();
- public void onConfirmed(boolean autoFlattrEnabled, float autoFlattrValue);
+ void onConfirmed(boolean autoFlattrEnabled, float autoFlattrValue);
}
diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/EpisodesApplyActionFragment.java b/app/src/main/java/de/danoeh/antennapod/dialog/EpisodesApplyActionFragment.java
index 6432ebd4e..577a3ecbe 100644
--- a/app/src/main/java/de/danoeh/antennapod/dialog/EpisodesApplyActionFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/dialog/EpisodesApplyActionFragment.java
@@ -1,7 +1,6 @@
package de.danoeh.antennapod.dialog;
import android.content.res.TypedArray;
-import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
@@ -18,10 +17,6 @@ import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;
-import com.joanzapata.iconify.Icon;
-import com.joanzapata.iconify.IconDrawable;
-import com.joanzapata.iconify.fonts.FontAwesomeIcons;
-
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -39,6 +34,14 @@ public class EpisodesApplyActionFragment extends Fragment {
public String TAG = "EpisodeActionFragment";
+ public static final int ACTION_QUEUE = 1;
+ public static final int ACTION_MARK_PLAYED = 2;
+ public static final int ACTION_MARK_UNPLAYED = 4;
+ public static final int ACTION_DOWNLOAD = 8;
+ public static final int ACTION_REMOVE = 16;
+ public static final int ACTION_ALL = ACTION_QUEUE | ACTION_MARK_PLAYED | ACTION_MARK_UNPLAYED
+ | ACTION_DOWNLOAD | ACTION_REMOVE;
+
private ListView mListView;
private ArrayAdapter<String> mAdapter;
@@ -48,27 +51,26 @@ public class EpisodesApplyActionFragment extends Fragment {
private Button btnDownload;
private Button btnDelete;
- private final Map<Long,FeedItem> idMap;
- private final List<FeedItem> episodes;
- private final List<String> titles = new ArrayList();
+ private final Map<Long,FeedItem> idMap = new ArrayMap<>();
+ private final List<FeedItem> episodes = new ArrayList<>();
+ private int actions;
+ private final List<String> titles = new ArrayList<>();
private final LongList checkedIds = new LongList();
private MenuItem mSelectToggle;
- private int textColor;
-
- public EpisodesApplyActionFragment() {
- this.episodes = new ArrayList<>();
- this.idMap = new ArrayMap<>();
+ public static EpisodesApplyActionFragment newInstance(List<FeedItem> items) {
+ return newInstance(items, ACTION_ALL);
}
- public void setEpisodes(List<FeedItem> episodes) {
- this.episodes.clear();
- this.episodes.addAll(episodes);
- this.idMap.clear();
- for(FeedItem episode : episodes) {
- this.idMap.put(episode.getId(), episode);
+ public static EpisodesApplyActionFragment newInstance(List<FeedItem> items, int actions) {
+ EpisodesApplyActionFragment f = new EpisodesApplyActionFragment();
+ f.episodes.addAll(items);
+ for(FeedItem episode : items) {
+ f.idMap.put(episode.getId(), episode);
}
+ f.actions = actions;
+ return f;
}
@Override
@@ -103,16 +105,48 @@ public class EpisodesApplyActionFragment extends Fragment {
mListView.setAdapter(mAdapter);
checkAll();
+ int lastVisibleDiv = 0;
btnAddToQueue = (Button) view.findViewById(R.id.btnAddToQueue);
- btnAddToQueue.setOnClickListener(v -> queueChecked());
+ if((actions & ACTION_QUEUE) != 0) {
+ btnAddToQueue.setOnClickListener(v -> queueChecked());
+ lastVisibleDiv = R.id.divider1;
+ } else {
+ btnAddToQueue.setVisibility(View.GONE);
+ view.findViewById(R.id.divider1).setVisibility(View.GONE);
+ }
btnMarkAsPlayed = (Button) view.findViewById(R.id.btnMarkAsPlayed);
- btnMarkAsPlayed.setOnClickListener(v -> markedCheckedPlayed());
+ if((actions & ACTION_MARK_PLAYED) != 0) {
+ btnMarkAsPlayed.setOnClickListener(v -> markedCheckedPlayed());
+ lastVisibleDiv = R.id.divider2;
+ } else {
+ btnMarkAsPlayed.setVisibility(View.GONE);
+ view.findViewById(R.id.divider2).setVisibility(View.GONE);
+ }
btnMarkAsUnplayed = (Button) view.findViewById(R.id.btnMarkAsUnplayed);
- btnMarkAsUnplayed.setOnClickListener(v -> markedCheckedUnplayed());
+ if((actions & ACTION_MARK_UNPLAYED) != 0) {
+ btnMarkAsUnplayed.setOnClickListener(v -> markedCheckedUnplayed());
+ lastVisibleDiv = R.id.divider3;
+ } else {
+ btnMarkAsUnplayed.setVisibility(View.GONE);
+ view.findViewById(R.id.divider3).setVisibility(View.GONE);
+ }
btnDownload = (Button) view.findViewById(R.id.btnDownload);
- btnDownload.setOnClickListener(v -> downloadChecked());
+ if((actions & ACTION_DOWNLOAD) != 0) {
+ btnDownload.setOnClickListener(v -> downloadChecked());
+ lastVisibleDiv = R.id.divider4;
+ } else {
+ btnDownload.setVisibility(View.GONE);
+ view.findViewById(R.id.divider4).setVisibility(View.GONE);
+ }
btnDelete = (Button) view.findViewById(R.id.btnDelete);
- btnDelete.setOnClickListener(v -> deleteChecked());
+ if((actions & ACTION_REMOVE) != 0) {
+ btnDelete.setOnClickListener(v -> deleteChecked());
+ } else {
+ btnDelete.setVisibility(View.GONE);
+ if(lastVisibleDiv > 0) {
+ view.findViewById(lastVisibleDiv).setVisibility(View.GONE);
+ }
+ }
return view;
}
@@ -122,11 +156,6 @@ public class EpisodesApplyActionFragment extends Fragment {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.episodes_apply_action_options, menu);
- int[] attrs = { android.R.attr.textColor };
- TypedArray ta = getActivity().obtainStyledAttributes(attrs);
- textColor = ta.getColor(0, Color.GRAY);
- ta.recycle();
-
mSelectToggle = menu.findItem(R.id.select_toggle);
mSelectToggle.setOnMenuItemClickListener(item -> {
if (checkedIds.size() == episodes.size()) {
@@ -140,22 +169,21 @@ public class EpisodesApplyActionFragment extends Fragment {
@Override
public void onPrepareOptionsMenu (Menu menu) {
- /*
- * Prepare icon for select toggle button
- */
+ // Prepare icon for select toggle button
- // Find icon attribute
int[] icon = new int[1];
- if(checkedIds.size() == episodes.size()) icon[0] = R.attr.ic_check_box;
- else if(checkedIds.size() == 0) icon[0] = R.attr.ic_check_box_outline;
- else icon[0] = R.attr.ic_indeterminate_check_box;
+ if (checkedIds.size() == episodes.size()) {
+ icon[0] = R.attr.ic_check_box;
+ } else if (checkedIds.size() == 0) {
+ icon[0] = R.attr.ic_check_box_outline;
+ } else {
+ icon[0] = R.attr.ic_indeterminate_check_box;
+ }
- // Get Drawable from attribute
TypedArray a = getActivity().obtainStyledAttributes(icon);
Drawable iconDrawable = a.getDrawable(0);
a.recycle();
- // Set icon
mSelectToggle.setIcon(iconDrawable);
}
@@ -189,6 +217,14 @@ public class EpisodesApplyActionFragment extends Fragment {
checkDownloaded(false);
resId = R.string.selected_not_downloaded_label;
break;
+ case R.id.check_queued:
+ checkQueued(true);
+ resId = R.string.selected_queued_label;
+ break;
+ case R.id.check_not_queued:
+ checkQueued(false);
+ resId = R.string.selected_not_queued_label;
+ break;
case R.id.sort_title_a_z:
sortByTitle(false);
return true;
@@ -249,9 +285,9 @@ public class EpisodesApplyActionFragment extends Fragment {
private void sortByDuration(final boolean reverse) {
Collections.sort(episodes, (lhs, rhs) -> {
int ordering;
- if (false == lhs.hasMedia()) {
+ if (!lhs.hasMedia()) {
ordering = 1;
- } else if (false == rhs.hasMedia()) {
+ } else if (!rhs.hasMedia()) {
ordering = -1;
} else {
ordering = lhs.getMedia().getDuration() - rhs.getMedia().getDuration();
@@ -268,7 +304,7 @@ public class EpisodesApplyActionFragment extends Fragment {
private void checkAll() {
for (FeedItem episode : episodes) {
- if(false == checkedIds.contains(episode.getId())) {
+ if(!checkedIds.contains(episode.getId())) {
checkedIds.add(episode.getId());
}
}
@@ -310,6 +346,17 @@ public class EpisodesApplyActionFragment extends Fragment {
refreshCheckboxes();
}
+ private void checkQueued(boolean isQueued) {
+ for (FeedItem episode : episodes) {
+ if(episode.isTagged(FeedItem.TAG_QUEUE) == isQueued) {
+ checkedIds.add(episode.getId());
+ } else {
+ checkedIds.remove(episode.getId());
+ }
+ }
+ refreshCheckboxes();
+ }
+
private void refreshTitles() {
titles.clear();
for(FeedItem episode : episodes) {
@@ -344,14 +391,14 @@ public class EpisodesApplyActionFragment extends Fragment {
private void downloadChecked() {
// download the check episodes in the same order as they are currently displayed
- List<FeedItem> toDownload = new ArrayList<FeedItem>(checkedIds.size());
+ List<FeedItem> toDownload = new ArrayList<>(checkedIds.size());
for(FeedItem episode : episodes) {
if(checkedIds.contains(episode.getId())) {
toDownload.add(episode);
}
}
try {
- DBTasks.downloadFeedItems(getActivity(), toDownload.toArray(new FeedItem[0]));
+ DBTasks.downloadFeedItems(getActivity(), toDownload.toArray(new FeedItem[toDownload.size()]));
} catch (DownloadRequestException e) {
e.printStackTrace();
DownloadRequestErrorDialogCreator.newRequestErrorDialog(getActivity(), e.getMessage());
diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/GpodnetSetHostnameDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/GpodnetSetHostnameDialog.java
index 5f531e88f..b50e21d15 100644
--- a/app/src/main/java/de/danoeh/antennapod/dialog/GpodnetSetHostnameDialog.java
+++ b/app/src/main/java/de/danoeh/antennapod/dialog/GpodnetSetHostnameDialog.java
@@ -1,7 +1,6 @@
package de.danoeh.antennapod.dialog;
import android.content.Context;
-import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.text.Editable;
import android.text.InputType;
diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/ProxyDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/ProxyDialog.java
new file mode 100644
index 000000000..98a4b5356
--- /dev/null
+++ b/app/src/main/java/de/danoeh/antennapod/dialog/ProxyDialog.java
@@ -0,0 +1,320 @@
+package de.danoeh.antennapod.dialog;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.support.v4.content.ContextCompat;
+import android.text.Editable;
+import android.text.TextUtils;
+import android.text.TextWatcher;
+import android.util.Patterns;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
+import android.widget.EditText;
+import android.widget.Spinner;
+import android.widget.TextView;
+
+import com.afollestad.materialdialogs.DialogAction;
+import com.afollestad.materialdialogs.MaterialDialog;
+import com.afollestad.materialdialogs.internal.MDButton;
+import com.squareup.okhttp.Credentials;
+import com.squareup.okhttp.OkHttpClient;
+import com.squareup.okhttp.Request;
+import com.squareup.okhttp.Response;
+
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.net.Proxy;
+import java.net.SocketAddress;
+import java.util.concurrent.TimeUnit;
+
+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 rx.Observable;
+import rx.Subscriber;
+import rx.Subscription;
+import rx.android.schedulers.AndroidSchedulers;
+import rx.schedulers.Schedulers;
+
+public class ProxyDialog {
+
+ private static final String TAG = "ProxyDialog";
+
+ private Context context;
+
+ private MaterialDialog dialog;
+
+ private Spinner spType;
+ private EditText etHost;
+ private EditText etPort;
+ private EditText etUsername;
+ private EditText etPassword;
+
+ private boolean testSuccessful = false;
+ private TextView txtvMessage;
+ private Subscription subscription;
+
+ public ProxyDialog(Context context) {
+ this.context = context;
+ }
+
+ public Dialog createDialog() {
+ dialog = new MaterialDialog.Builder(context)
+ .title(R.string.pref_proxy_title)
+ .customView(R.layout.proxy_settings, true)
+ .positiveText(R.string.proxy_test_label)
+ .negativeText(R.string.cancel_label)
+ .onPositive((dialog1, which) -> {
+ if(!testSuccessful) {
+ dialog.getActionButton(DialogAction.POSITIVE).setEnabled(false);
+ test();
+ return;
+ }
+ String type = (String) ((Spinner) dialog1.findViewById(R.id.spType)).getSelectedItem();
+ ProxyConfig proxy;
+ if(Proxy.Type.valueOf(type) == Proxy.Type.DIRECT) {
+ proxy = ProxyConfig.direct();
+ } else {
+ String host = etHost.getText().toString();
+ String port = etPort.getText().toString();
+ String username = etUsername.getText().toString();
+ if(TextUtils.isEmpty(username)) {
+ username = null;
+ }
+ String password = etPassword.getText().toString();
+ if(TextUtils.isEmpty(password)) {
+ password = null;
+ }
+ int portValue = 0;
+ if(!TextUtils.isEmpty(port)) {
+ portValue = Integer.valueOf(port);
+ }
+ proxy = ProxyConfig.http(host, portValue, username, password);
+ }
+ UserPreferences.setProxyConfig(proxy);
+ AntennapodHttpClient.reinit();
+ dialog.dismiss();
+ })
+ .onNegative((dialog1, which) -> dialog1.dismiss())
+ .autoDismiss(false)
+ .build();
+ View view = dialog.getCustomView();
+ spType = (Spinner) view.findViewById(R.id.spType);
+ String[] types = { Proxy.Type.DIRECT.name(), Proxy.Type.HTTP.name() };
+ ArrayAdapter<String> adapter = new ArrayAdapter<>(context,
+ 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 = (EditText) view.findViewById(R.id.etHost);
+ if(!TextUtils.isEmpty(proxyConfig.host)) {
+ etHost.setText(proxyConfig.host);
+ }
+ etHost.addTextChangedListener(requireTestOnChange);
+ etPort = (EditText) view.findViewById(R.id.etPort);
+ if(proxyConfig.port > 0) {
+ etPort.setText(String.valueOf(proxyConfig.port));
+ }
+ etPort.addTextChangedListener(requireTestOnChange);
+ etUsername = (EditText) view.findViewById(R.id.etUsername);
+ if(!TextUtils.isEmpty(proxyConfig.username)) {
+ etUsername.setText(proxyConfig.username);
+ }
+ etUsername.addTextChangedListener(requireTestOnChange);
+ etPassword = (EditText) view.findViewById(R.id.etPassword);
+ if(!TextUtils.isEmpty(proxyConfig.password)) {
+ etPassword.setText(proxyConfig.username);
+ }
+ etPassword.addTextChangedListener(requireTestOnChange);
+ if(proxyConfig.type == Proxy.Type.DIRECT) {
+ enableSettings(false);
+ setTestRequired(false);
+ }
+ spType.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
+ @Override
+ public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
+ enableSettings(position > 0);
+ setTestRequired(position > 0);
+ }
+
+ @Override
+ public void onNothingSelected(AdapterView<?> parent) {
+ enableSettings(false);
+ }
+ });
+ txtvMessage = (TextView) view.findViewById(R.id.txtvMessage);
+ checkValidity();
+ return dialog;
+ }
+
+ private final TextWatcher requireTestOnChange = new TextWatcher() {
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
+
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before, int count) {}
+
+ @Override
+ public void afterTextChanged(Editable s) {
+ setTestRequired(true);
+ }
+ };
+
+ private void enableSettings(boolean enable) {
+ etHost.setEnabled(enable);
+ etPort.setEnabled(enable);
+ etUsername.setEnabled(enable);
+ etPassword.setEnabled(enable);
+ }
+
+ private boolean checkValidity() {
+ boolean valid = true;
+ if(spType.getSelectedItemPosition() > 0) {
+ valid &= checkHost();
+ }
+ valid &= checkPort();
+ return valid;
+ }
+
+ private boolean checkHost() {
+ String host = etHost.getText().toString();
+ 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()) {
+ etHost.setError(context.getString(R.string.proxy_host_invalid_error));
+ return false;
+ }
+ return true;
+ }
+
+ private boolean checkPort() {
+ int port = getPort();
+ if(port < 0 && port > 65535) {
+ etPort.setError(context.getString(R.string.proxy_port_invalid_error));
+ return false;
+ }
+ return true;
+ }
+
+ private int getPort() {
+ String port = etPort.getText().toString();
+ if(port.length() > 0) {
+ try {
+ return Integer.parseInt(port);
+ } catch(NumberFormatException e) {
+ // ignore
+ }
+ }
+ return 0;
+ }
+
+ private void setTestRequired(boolean required) {
+ if(required) {
+ testSuccessful = false;
+ MDButton button = dialog.getActionButton(DialogAction.POSITIVE);
+ button.setText(context.getText(R.string.proxy_test_label));
+ button.setEnabled(true);
+ } else {
+ testSuccessful = true;
+ MDButton button = dialog.getActionButton(DialogAction.POSITIVE);
+ button.setText(context.getText(android.R.string.ok));
+ button.setEnabled(true);
+ }
+ }
+
+ private void test() {
+ if(subscription != null) {
+ subscription.unsubscribe();
+ }
+ if(!checkValidity()) {
+ setTestRequired(true);
+ return;
+ }
+ TypedArray res = context.getTheme().obtainStyledAttributes(new int[] { android.R.attr.textColorPrimary });
+ int textColorPrimary = res.getColor(0, 0);
+ res.recycle();
+ String checking = context.getString(R.string.proxy_checking);
+ txtvMessage.setTextColor(textColorPrimary);
+ txtvMessage.setText("{fa-circle-o-notch spin} " + checking);
+ txtvMessage.setVisibility(View.VISIBLE);
+ subscription = Observable.create(new Observable.OnSubscribe<Response>() {
+ @Override
+ public void call(Subscriber<? super Response> subscriber) {
+ String type = (String) spType.getSelectedItem();
+ String host = etHost.getText().toString();
+ String port = etPort.getText().toString();
+ String username = etUsername.getText().toString();
+ String password = etPassword.getText().toString();
+ int portValue = 8080;
+ if(!TextUtils.isEmpty(port)) {
+ portValue = Integer.valueOf(port);
+ }
+ SocketAddress address = InetSocketAddress.createUnresolved(host, portValue);
+ Proxy.Type proxyType = Proxy.Type.valueOf(type.toUpperCase());
+ Proxy proxy = new Proxy(proxyType, address);
+ OkHttpClient client = AntennapodHttpClient.newHttpClient();
+ client.setConnectTimeout(10, TimeUnit.SECONDS);
+ client.setProxy(proxy);
+ client.interceptors().clear();
+ 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);
+ });
+ }
+ Request request = new Request.Builder()
+ .url("http://www.google.com")
+ .head()
+ .build();
+ try {
+ Response response = client.newCall(request).execute();
+ subscriber.onNext(response);
+ } catch(IOException e) {
+ subscriber.onError(e);
+ }
+ subscriber.onCompleted();
+ }
+ })
+ .subscribeOn(Schedulers.newThread())
+ .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.setText(message);
+ setTestRequired(!response.isSuccessful());
+ },
+ 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());
+ txtvMessage.setText(message);
+ setTestRequired(true);
+ }
+ );
+ }
+
+}
diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/RatingDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/RatingDialog.java
index ed0db92a4..64fc1fda4 100644
--- a/app/src/main/java/de/danoeh/antennapod/dialog/RatingDialog.java
+++ b/app/src/main/java/de/danoeh/antennapod/dialog/RatingDialog.java
@@ -94,11 +94,7 @@ public class RatingDialog {
long firstDate = mPreferences.getLong(KEY_FIRST_START_DATE, now);
long diff = now - firstDate;
long diffDays = TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS);
- if (diffDays >= AFTER_DAYS) {
- return true;
- } else {
- return false;
- }
+ return diffDays >= AFTER_DAYS;
}
@Nullable
@@ -107,30 +103,16 @@ public class RatingDialog {
if(context == null) {
return null;
}
- MaterialDialog dialog = new MaterialDialog.Builder(context)
+ return new MaterialDialog.Builder(context)
.title(R.string.rating_title)
.content(R.string.rating_message)
.positiveText(R.string.rating_now_label)
.negativeText(R.string.rating_never_label)
.neutralText(R.string.rating_later_label)
- .callback(new MaterialDialog.ButtonCallback() {
- @Override
- public void onPositive(MaterialDialog dialog) {
- rateNow();
- }
-
- @Override
- public void onNegative(MaterialDialog dialog) {
- saveRated();
- }
-
- @Override
- public void onNeutral(MaterialDialog dialog) {
- resetStartDate();
- }
- })
+ .onPositive((dialog, which) -> rateNow())
+ .onNegative((dialog, which) -> saveRated())
+ .onNeutral((dialog, which) -> resetStartDate())
.cancelListener(dialog1 -> resetStartDate())
.build();
- return dialog;
}
}
diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/SleepTimerDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/SleepTimerDialog.java
index 930079e40..8a13a75d9 100644
--- a/app/src/main/java/de/danoeh/antennapod/dialog/SleepTimerDialog.java
+++ b/app/src/main/java/de/danoeh/antennapod/dialog/SleepTimerDialog.java
@@ -1,17 +1,13 @@
package de.danoeh.antennapod.dialog;
-import android.app.Dialog;
import android.content.Context;
import android.content.SharedPreferences;
-import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
-import android.view.Window;
import android.view.inputmethod.InputMethodManager;
import android.widget.ArrayAdapter;
-import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Spinner;
@@ -58,14 +54,8 @@ public abstract class SleepTimerDialog {
builder.customView(R.layout.time_dialog, false);
builder.positiveText(R.string.set_sleeptimer_label);
builder.negativeText(R.string.cancel_label);
- builder.callback(new MaterialDialog.ButtonCallback() {
- @Override
- public void onNegative(MaterialDialog dialog) {
- dialog.dismiss();
- }
-
- @Override
- public void onPositive(MaterialDialog dialog) {
+ builder.onNegative((dialog, which) -> dialog.dismiss());
+ builder.onPositive((dialog, which) -> {
try {
savePreferences();
long input = readTimeMillis();
@@ -77,8 +67,7 @@ public abstract class SleepTimerDialog {
Toast.LENGTH_LONG);
toast.show();
}
- }
- });
+ });
dialog = builder.build();
View view = dialog.getView();
@@ -138,7 +127,7 @@ public abstract class SleepTimerDialog {
private long readTimeMillis() {
TimeUnit selectedUnit = units[spTimeUnit.getSelectedItemPosition()];
- long value = Long.valueOf(etxtTime.getText().toString());
+ long value = Long.parseLong(etxtTime.getText().toString());
return selectedUnit.toMillis(value);
}
diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/VariableSpeedDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/VariableSpeedDialog.java
index 3ed82b9bd..2bf9c4e7a 100644
--- a/app/src/main/java/de/danoeh/antennapod/dialog/VariableSpeedDialog.java
+++ b/app/src/main/java/de/danoeh/antennapod/dialog/VariableSpeedDialog.java
@@ -102,8 +102,8 @@ public class VariableSpeedDialog {
builder.setPositiveButton(android.R.string.ok,
(dialog, which) -> {
int choiceCount = 0;
- for (int i = 0; i < speedChecked.length; i++) {
- if (speedChecked[i]) {
+ for (boolean checked : speedChecked) {
+ if (checked) {
choiceCount++;
}
}