Refactor batch edit - use the common FeedItem sorting logic
This commit is contained in:
parent
49c9e19c0d
commit
197a7b1f1a
@ -4,16 +4,6 @@ import android.app.AlertDialog;
|
|||||||
import android.content.res.TypedArray;
|
import android.content.res.TypedArray;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import androidx.annotation.IdRes;
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.annotation.PluralsRes;
|
|
||||||
import androidx.annotation.StringRes;
|
|
||||||
import com.google.android.material.snackbar.Snackbar;
|
|
||||||
import androidx.core.app.ActivityCompat;
|
|
||||||
import androidx.fragment.app.Fragment;
|
|
||||||
import androidx.collection.ArrayMap;
|
|
||||||
import androidx.appcompat.app.ActionBar;
|
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
@ -24,6 +14,17 @@ import android.view.ViewGroup;
|
|||||||
import android.widget.ArrayAdapter;
|
import android.widget.ArrayAdapter;
|
||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
|
|
||||||
|
import androidx.annotation.IdRes;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.PluralsRes;
|
||||||
|
import androidx.annotation.StringRes;
|
||||||
|
import androidx.appcompat.app.ActionBar;
|
||||||
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
import androidx.collection.ArrayMap;
|
||||||
|
import androidx.core.app.ActivityCompat;
|
||||||
|
import androidx.fragment.app.Fragment;
|
||||||
|
|
||||||
|
import com.google.android.material.snackbar.Snackbar;
|
||||||
import com.leinardi.android.speeddial.SpeedDialView;
|
import com.leinardi.android.speeddial.SpeedDialView;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -38,7 +39,9 @@ import de.danoeh.antennapod.core.feed.FeedItem;
|
|||||||
import de.danoeh.antennapod.core.storage.DBTasks;
|
import de.danoeh.antennapod.core.storage.DBTasks;
|
||||||
import de.danoeh.antennapod.core.storage.DBWriter;
|
import de.danoeh.antennapod.core.storage.DBWriter;
|
||||||
import de.danoeh.antennapod.core.storage.DownloadRequestException;
|
import de.danoeh.antennapod.core.storage.DownloadRequestException;
|
||||||
|
import de.danoeh.antennapod.core.util.FeedItemPermutors;
|
||||||
import de.danoeh.antennapod.core.util.LongList;
|
import de.danoeh.antennapod.core.util.LongList;
|
||||||
|
import de.danoeh.antennapod.core.util.SortOrder;
|
||||||
|
|
||||||
public class EpisodesApplyActionFragment extends Fragment {
|
public class EpisodesApplyActionFragment extends Fragment {
|
||||||
|
|
||||||
@ -263,6 +266,18 @@ public class EpisodesApplyActionFragment extends Fragment {
|
|||||||
mSelectToggle.setTitle(titleResId);
|
mSelectToggle.setTitle(titleResId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static final Map<Integer, SortOrder> menuItemIdToSortOrder;
|
||||||
|
static {
|
||||||
|
Map<Integer, SortOrder> map = new ArrayMap<>();
|
||||||
|
map.put(R.id.sort_title_a_z, SortOrder.EPISODE_TITLE_A_Z);
|
||||||
|
map.put(R.id.sort_title_z_a, SortOrder.EPISODE_TITLE_Z_A);
|
||||||
|
map.put(R.id.sort_date_new_old, SortOrder.DATE_NEW_OLD);
|
||||||
|
map.put(R.id.sort_date_old_new, SortOrder.DATE_OLD_NEW);
|
||||||
|
map.put(R.id.sort_duration_long_short, SortOrder.DURATION_LONG_SHORT);
|
||||||
|
map.put(R.id.sort_duration_short_long, SortOrder.DURATION_SHORT_LONG);
|
||||||
|
menuItemIdToSortOrder = Collections.unmodifiableMap(map);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
@StringRes int resId = 0;
|
@StringRes int resId = 0;
|
||||||
@ -305,24 +320,12 @@ public class EpisodesApplyActionFragment extends Fragment {
|
|||||||
checkWithMedia();
|
checkWithMedia();
|
||||||
resId = R.string.selected_has_media_label;
|
resId = R.string.selected_has_media_label;
|
||||||
break;
|
break;
|
||||||
case R.id.sort_title_a_z:
|
default: // handle various sort options
|
||||||
sortByTitle(false);
|
SortOrder sortOrder = menuItemIdToSortOrder.get(item.getItemId());
|
||||||
return true;
|
if (sortOrder != null) {
|
||||||
case R.id.sort_title_z_a:
|
sort(sortOrder);
|
||||||
sortByTitle(true);
|
return true;
|
||||||
return true;
|
}
|
||||||
case R.id.sort_date_new_old:
|
|
||||||
sortByDate(true);
|
|
||||||
return true;
|
|
||||||
case R.id.sort_date_old_new:
|
|
||||||
sortByDate(false);
|
|
||||||
return true;
|
|
||||||
case R.id.sort_duration_long_short:
|
|
||||||
sortByDuration(true);
|
|
||||||
return true;
|
|
||||||
case R.id.sort_duration_short_long:
|
|
||||||
sortByDuration(false);
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
if(resId != 0) {
|
if(resId != 0) {
|
||||||
Snackbar.make(getActivity().findViewById(R.id.content), resId, Snackbar.LENGTH_SHORT)
|
Snackbar.make(getActivity().findViewById(R.id.content), resId, Snackbar.LENGTH_SHORT)
|
||||||
@ -333,52 +336,9 @@ public class EpisodesApplyActionFragment extends Fragment {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sortByTitle(final boolean reverse) {
|
private void sort(@NonNull SortOrder sortOrder) {
|
||||||
Collections.sort(episodes, (lhs, rhs) -> {
|
FeedItemPermutors.getPermutor(sortOrder)
|
||||||
if (reverse) {
|
.reorder(episodes);
|
||||||
return -1 * lhs.getTitle().compareTo(rhs.getTitle());
|
|
||||||
} else {
|
|
||||||
return lhs.getTitle().compareTo(rhs.getTitle());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
refreshTitles();
|
|
||||||
refreshCheckboxes();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void sortByDate(final boolean reverse) {
|
|
||||||
Collections.sort(episodes, (lhs, rhs) -> {
|
|
||||||
if (lhs.getPubDate() == null) {
|
|
||||||
return -1;
|
|
||||||
} else if (rhs.getPubDate() == null) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
int code = lhs.getPubDate().compareTo(rhs.getPubDate());
|
|
||||||
if (reverse) {
|
|
||||||
return -1 * code;
|
|
||||||
} else {
|
|
||||||
return code;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
refreshTitles();
|
|
||||||
refreshCheckboxes();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void sortByDuration(final boolean reverse) {
|
|
||||||
Collections.sort(episodes, (lhs, rhs) -> {
|
|
||||||
int ordering;
|
|
||||||
if (!lhs.hasMedia()) {
|
|
||||||
ordering = 1;
|
|
||||||
} else if (!rhs.hasMedia()) {
|
|
||||||
ordering = -1;
|
|
||||||
} else {
|
|
||||||
ordering = lhs.getMedia().getDuration() - rhs.getMedia().getDuration();
|
|
||||||
}
|
|
||||||
if(reverse) {
|
|
||||||
return -1 * ordering;
|
|
||||||
} else {
|
|
||||||
return ordering;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
refreshTitles();
|
refreshTitles();
|
||||||
refreshCheckboxes();
|
refreshCheckboxes();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user