diff options
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod')
3 files changed, 65 insertions, 17 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 8f2629b43..c1008a380 100644 --- a/app/src/main/java/de/danoeh/antennapod/dialog/ProxyDialog.java +++ b/app/src/main/java/de/danoeh/antennapod/dialog/ProxyDialog.java @@ -3,6 +3,7 @@ package de.danoeh.antennapod.dialog; import android.app.Dialog; import android.content.Context; import android.content.res.TypedArray; +import android.os.Build; import android.support.v4.content.ContextCompat; import android.text.Editable; import android.text.TextUtils; @@ -23,6 +24,8 @@ import java.io.IOException; import java.net.InetSocketAddress; import java.net.Proxy; import java.net.SocketAddress; +import java.util.ArrayList; +import java.util.List; import java.util.concurrent.TimeUnit; import de.danoeh.antennapod.R; @@ -92,7 +95,11 @@ public class ProxyDialog { if(!TextUtils.isEmpty(port)) { portValue = Integer.valueOf(port); } - proxy = ProxyConfig.http(host, portValue, username, password); + if (Proxy.Type.valueOf(type) == Proxy.Type.SOCKS) { + proxy = ProxyConfig.socks(host, portValue, username, password); + } else { + proxy = ProxyConfig.http(host, portValue, username, password); + } } UserPreferences.setProxyConfig(proxy); AntennapodHttpClient.reinit(); @@ -103,7 +110,13 @@ public class ProxyDialog { .build(); View view = dialog.getCustomView(); spType = view.findViewById(R.id.spType); - String[] types = { Proxy.Type.DIRECT.name(), Proxy.Type.HTTP.name() }; + + List<String> types= new ArrayList<>(); + types.add(Proxy.Type.DIRECT.name()); + types.add(Proxy.Type.HTTP.name()); + if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + types.add(Proxy.Type.SOCKS.name()); + } ArrayAdapter<String> adapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, types); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java index b4aca3be0..0fe413954 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java @@ -49,6 +49,7 @@ import de.danoeh.antennapod.core.util.Converter; import de.danoeh.antennapod.core.util.FeedItemUtil; import de.danoeh.antennapod.core.util.LongList; import de.danoeh.antennapod.core.util.QueueSorter; +import de.danoeh.antennapod.core.util.SortOrder; import de.danoeh.antennapod.dialog.EpisodesApplyActionFragment; import de.danoeh.antennapod.menuhandler.FeedItemMenuHandler; import de.danoeh.antennapod.menuhandler.MenuItemUtils; @@ -276,6 +277,19 @@ public class QueueFragment extends Fragment { MenuItemUtils.refreshLockItem(getActivity(), menu); + // Show Lock Item only if queue is sorted manually + boolean keepSorted = UserPreferences.isQueueKeepSorted(); + MenuItem lockItem = menu.findItem(R.id.queue_lock); + lockItem.setVisible(!keepSorted); + + // Random sort is not supported in keep sorted mode + MenuItem sortRandomItem = menu.findItem(R.id.queue_sort_random); + sortRandomItem.setVisible(!keepSorted); + + // Set keep sorted checkbox + MenuItem keepSortedItem = menu.findItem(R.id.queue_keep_sorted); + keepSortedItem.setChecked(keepSorted); + isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(menu, R.id.refresh_item, updateRefreshMenuItemChecker); } } @@ -325,37 +339,50 @@ public class QueueFragment extends Fragment { EpisodesApplyActionFragment.newInstance(queue, ACTION_DELETE | ACTION_REMOVE_FROM_QUEUE)); return true; case R.id.queue_sort_episode_title_asc: - QueueSorter.sort(getActivity(), QueueSorter.Rule.EPISODE_TITLE_ASC, true); + setSortOrder(SortOrder.EPISODE_TITLE_A_Z); return true; case R.id.queue_sort_episode_title_desc: - QueueSorter.sort(getActivity(), QueueSorter.Rule.EPISODE_TITLE_DESC, true); + setSortOrder(SortOrder.EPISODE_TITLE_Z_A); return true; case R.id.queue_sort_date_asc: - QueueSorter.sort(getActivity(), QueueSorter.Rule.DATE_ASC, true); + setSortOrder(SortOrder.DATE_OLD_NEW); return true; case R.id.queue_sort_date_desc: - QueueSorter.sort(getActivity(), QueueSorter.Rule.DATE_DESC, true); + setSortOrder(SortOrder.DATE_NEW_OLD); return true; case R.id.queue_sort_duration_asc: - QueueSorter.sort(getActivity(), QueueSorter.Rule.DURATION_ASC, true); + setSortOrder(SortOrder.DURATION_SHORT_LONG); return true; case R.id.queue_sort_duration_desc: - QueueSorter.sort(getActivity(), QueueSorter.Rule.DURATION_DESC, true); + setSortOrder(SortOrder.DURATION_LONG_SHORT); return true; case R.id.queue_sort_feed_title_asc: - QueueSorter.sort(getActivity(), QueueSorter.Rule.FEED_TITLE_ASC, true); + setSortOrder(SortOrder.FEED_TITLE_A_Z); return true; case R.id.queue_sort_feed_title_desc: - QueueSorter.sort(getActivity(), QueueSorter.Rule.FEED_TITLE_DESC, true); + setSortOrder(SortOrder.FEED_TITLE_Z_A); return true; case R.id.queue_sort_random: - QueueSorter.sort(getActivity(), QueueSorter.Rule.RANDOM, true); + setSortOrder(SortOrder.RANDOM); return true; case R.id.queue_sort_smart_shuffle_asc: - QueueSorter.sort(getActivity(), QueueSorter.Rule.SMART_SHUFFLE_ASC, true); + setSortOrder(SortOrder.SMART_SHUFFLE_OLD_NEW); return true; case R.id.queue_sort_smart_shuffle_desc: - QueueSorter.sort(getActivity(), QueueSorter.Rule.SMART_SHUFFLE_DESC, true); + setSortOrder(SortOrder.SMART_SHUFFLE_NEW_OLD); + return true; + case R.id.queue_keep_sorted: + boolean keepSortedOld = UserPreferences.isQueueKeepSorted(); + boolean keepSortedNew = !keepSortedOld; + UserPreferences.setQueueKeepSorted(keepSortedNew); + if (keepSortedNew) { + SortOrder sortOrder = UserPreferences.getQueueKeepSortedOrder(); + QueueSorter.sort(sortOrder, true); + recyclerAdapter.setLocked(true); + } else { + recyclerAdapter.setLocked(UserPreferences.isQueueLocked()); + } + getActivity().invalidateOptionsMenu(); return true; default: return false; @@ -365,6 +392,15 @@ public class QueueFragment extends Fragment { } } + /** + * This method is called if the user clicks on a sort order menu item. + * + * @param sortOrder New sort order. + */ + private void setSortOrder(SortOrder sortOrder) { + UserPreferences.setQueueKeepSortedOrder(sortOrder); + QueueSorter.sort(sortOrder, true); + } @Override public boolean onContextItemSelected(MenuItem item) { @@ -670,5 +706,4 @@ public class QueueFragment extends Fragment { } }, error -> Log.e(TAG, Log.getStackTraceString(error))); } - } diff --git a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java index 074601dbc..156657a00 100644 --- a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java +++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java @@ -15,7 +15,6 @@ import de.danoeh.antennapod.core.gpoddernet.model.GpodnetEpisodeAction.Action; import de.danoeh.antennapod.core.preferences.GpodnetPreferences; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.service.playback.PlaybackService; -import de.danoeh.antennapod.core.storage.DBTasks; import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.util.FeedItemUtil; import de.danoeh.antennapod.core.util.IntentUtils; @@ -68,16 +67,17 @@ public class FeedItemMenuHandler { } boolean hasMedia = selectedItem.getMedia() != null; boolean isPlaying = hasMedia && selectedItem.getState() == FeedItem.State.PLAYING; + boolean keepSorted = UserPreferences.isQueueKeepSorted(); if (!isPlaying) { mi.setItemVisibility(R.id.skip_episode_item, false); } boolean isInQueue = selectedItem.isTagged(FeedItem.TAG_QUEUE); - if(queueAccess == null || queueAccess.size() == 0 || queueAccess.get(0) == selectedItem.getId()) { + if (queueAccess == null || queueAccess.size() == 0 || queueAccess.get(0) == selectedItem.getId() || keepSorted) { mi.setItemVisibility(R.id.move_to_top_item, false); } - if(queueAccess == null || queueAccess.size() == 0 || queueAccess.get(queueAccess.size()-1) == selectedItem.getId()) { + if (queueAccess == null || queueAccess.size() == 0 || queueAccess.get(queueAccess.size()-1) == selectedItem.getId() || keepSorted) { mi.setItemVisibility(R.id.move_to_bottom_item, false); } if (!isInQueue) { |