mirror of
https://github.com/mihonapp/mihon.git
synced 2024-11-10 20:57:24 +01:00
Allow to change sorting mode from the chapters fragment
This commit is contained in:
parent
ca7e5260f0
commit
e885469504
@ -72,6 +72,9 @@ public class Manga implements Serializable {
|
|||||||
public static final int SORT_ZA = 0x00000001;
|
public static final int SORT_ZA = 0x00000001;
|
||||||
public static final int SORT_MASK = 0x00000001;
|
public static final int SORT_MASK = 0x00000001;
|
||||||
|
|
||||||
|
// Generic filter that does not filter anything
|
||||||
|
public static final int SHOW_ALL = 0x00000000;
|
||||||
|
|
||||||
public static final int SHOW_UNREAD = 0x00000002;
|
public static final int SHOW_UNREAD = 0x00000002;
|
||||||
public static final int SHOW_READ = 0x00000004;
|
public static final int SHOW_READ = 0x00000004;
|
||||||
public static final int READ_MASK = 0x00000006;
|
public static final int READ_MASK = 0x00000006;
|
||||||
@ -80,8 +83,9 @@ public class Manga implements Serializable {
|
|||||||
public static final int SHOW_NOT_DOWNLOADED = 0x00000010;
|
public static final int SHOW_NOT_DOWNLOADED = 0x00000010;
|
||||||
public static final int DOWNLOADED_MASK = 0x00000018;
|
public static final int DOWNLOADED_MASK = 0x00000018;
|
||||||
|
|
||||||
// Generic filter that does not filter anything
|
public static final int SORTING_NUMBER = 0x00000000;
|
||||||
public static final int SHOW_ALL = 0x00000000;
|
public static final int SORTING_SOURCE = 0x00000100;
|
||||||
|
public static final int SORTING_MASK = 0x00000100;
|
||||||
|
|
||||||
public static final int DISPLAY_NAME = 0x00000000;
|
public static final int DISPLAY_NAME = 0x00000000;
|
||||||
public static final int DISPLAY_NUMBER = 0x00100000;
|
public static final int DISPLAY_NUMBER = 0x00100000;
|
||||||
@ -162,6 +166,10 @@ public class Manga implements Serializable {
|
|||||||
setFlags(filter, DOWNLOADED_MASK);
|
setFlags(filter, DOWNLOADED_MASK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setSorting(int sort) {
|
||||||
|
setFlags(sort, SORTING_MASK);
|
||||||
|
}
|
||||||
|
|
||||||
private void setFlags(int flag, int mask) {
|
private void setFlags(int flag, int mask) {
|
||||||
chapter_flags = (chapter_flags & ~mask) | (flag & mask);
|
chapter_flags = (chapter_flags & ~mask) | (flag & mask);
|
||||||
}
|
}
|
||||||
@ -183,6 +191,10 @@ public class Manga implements Serializable {
|
|||||||
return chapter_flags & DOWNLOADED_MASK;
|
return chapter_flags & DOWNLOADED_MASK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getSorting() {
|
||||||
|
return chapter_flags & SORTING_MASK;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object o) {
|
public boolean equals(Object o) {
|
||||||
if (this == o) return true;
|
if (this == o) return true;
|
||||||
|
@ -124,6 +124,7 @@ class ChaptersFragment : BaseRxFragment<ChaptersPresenter>(), ActionMode.Callbac
|
|||||||
when (item.itemId) {
|
when (item.itemId) {
|
||||||
R.id.action_display_mode -> showDisplayModeDialog()
|
R.id.action_display_mode -> showDisplayModeDialog()
|
||||||
R.id.manga_download -> showDownloadDialog()
|
R.id.manga_download -> showDownloadDialog()
|
||||||
|
R.id.action_sorting_mode -> showSortingDialog()
|
||||||
R.id.action_filter_unread -> {
|
R.id.action_filter_unread -> {
|
||||||
item.isChecked = !item.isChecked
|
item.isChecked = !item.isChecked
|
||||||
presenter.setReadFilter(item.isChecked)
|
presenter.setReadFilter(item.isChecked)
|
||||||
@ -135,7 +136,7 @@ class ChaptersFragment : BaseRxFragment<ChaptersPresenter>(), ActionMode.Callbac
|
|||||||
R.id.action_filter_empty -> {
|
R.id.action_filter_empty -> {
|
||||||
presenter.setReadFilter(false)
|
presenter.setReadFilter(false)
|
||||||
presenter.setDownloadedFilter(false)
|
presenter.setDownloadedFilter(false)
|
||||||
activity.supportInvalidateOptionsMenu();
|
activity.supportInvalidateOptionsMenu()
|
||||||
}
|
}
|
||||||
R.id.action_sort -> presenter.revertSortOrder()
|
R.id.action_sort -> presenter.revertSortOrder()
|
||||||
else -> return super.onOptionsItemSelected(item)
|
else -> return super.onOptionsItemSelected(item)
|
||||||
@ -192,15 +193,14 @@ class ChaptersFragment : BaseRxFragment<ChaptersPresenter>(), ActionMode.Callbac
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun showDisplayModeDialog() {
|
private fun showDisplayModeDialog() {
|
||||||
|
|
||||||
// Get available modes, ids and the selected mode
|
// Get available modes, ids and the selected mode
|
||||||
val modes = listOf(getString(R.string.show_title), getString(R.string.show_chapter_number))
|
val modes = intArrayOf(R.string.show_title, R.string.show_chapter_number)
|
||||||
val ids = intArrayOf(Manga.DISPLAY_NAME, Manga.DISPLAY_NUMBER)
|
val ids = intArrayOf(Manga.DISPLAY_NAME, Manga.DISPLAY_NUMBER)
|
||||||
val selectedIndex = if (presenter.manga.displayMode == Manga.DISPLAY_NAME) 0 else 1
|
val selectedIndex = if (presenter.manga.displayMode == Manga.DISPLAY_NAME) 0 else 1
|
||||||
|
|
||||||
MaterialDialog.Builder(activity)
|
MaterialDialog.Builder(activity)
|
||||||
.title(R.string.action_display_mode)
|
.title(R.string.action_display_mode)
|
||||||
.items(modes)
|
.items(modes.map { getString(it) })
|
||||||
.itemsIds(ids)
|
.itemsIds(ids)
|
||||||
.itemsCallbackSingleChoice(selectedIndex) { dialog, itemView, which, text ->
|
.itemsCallbackSingleChoice(selectedIndex) { dialog, itemView, which, text ->
|
||||||
// Save the new display mode
|
// Save the new display mode
|
||||||
@ -212,6 +212,24 @@ class ChaptersFragment : BaseRxFragment<ChaptersPresenter>(), ActionMode.Callbac
|
|||||||
.show()
|
.show()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun showSortingDialog() {
|
||||||
|
// Get available modes, ids and the selected mode
|
||||||
|
val modes = intArrayOf(R.string.sort_by_number, R.string.sort_by_source)
|
||||||
|
val ids = intArrayOf(Manga.SORTING_NUMBER, Manga.SORTING_SOURCE)
|
||||||
|
val selectedIndex = if (presenter.manga.sorting == Manga.SORTING_NUMBER) 0 else 1
|
||||||
|
|
||||||
|
MaterialDialog.Builder(activity)
|
||||||
|
.title(R.string.sorting_mode)
|
||||||
|
.items(modes.map { getString(it) })
|
||||||
|
.itemsIds(ids)
|
||||||
|
.itemsCallbackSingleChoice(selectedIndex) { dialog, itemView, which, text ->
|
||||||
|
// Save the new display mode
|
||||||
|
presenter.setSorting(itemView.id)
|
||||||
|
true
|
||||||
|
}
|
||||||
|
.show()
|
||||||
|
}
|
||||||
|
|
||||||
private fun showDownloadDialog() {
|
private fun showDownloadDialog() {
|
||||||
// Get available modes
|
// Get available modes
|
||||||
val modes = listOf(getString(R.string.download_1), getString(R.string.download_5), getString(R.string.download_10),
|
val modes = listOf(getString(R.string.download_1), getString(R.string.download_5), getString(R.string.download_10),
|
||||||
|
@ -123,11 +123,22 @@ class ChaptersPresenter : BasePresenter<ChaptersFragment>() {
|
|||||||
if (onlyDownloaded()) {
|
if (onlyDownloaded()) {
|
||||||
observable = observable.filter { chapter -> chapter.status == Download.DOWNLOADED }
|
observable = observable.filter { chapter -> chapter.status == Download.DOWNLOADED }
|
||||||
}
|
}
|
||||||
return observable.toSortedList { chapter, chapter2 ->
|
return observable.toSortedList { chapter1, chapter2 ->
|
||||||
|
when (manga.sorting) {
|
||||||
|
Manga.SORTING_NUMBER -> {
|
||||||
if (sortOrder())
|
if (sortOrder())
|
||||||
chapter2.chapter_number.compareTo(chapter.chapter_number)
|
chapter2.chapter_number.compareTo(chapter1.chapter_number)
|
||||||
else
|
else
|
||||||
chapter.chapter_number.compareTo(chapter2.chapter_number)
|
chapter1.chapter_number.compareTo(chapter2.chapter_number)
|
||||||
|
}
|
||||||
|
Manga.SORTING_SOURCE -> {
|
||||||
|
if (sortOrder())
|
||||||
|
chapter1.source_order.compareTo(chapter2.source_order)
|
||||||
|
else
|
||||||
|
chapter2.source_order.compareTo(chapter1.source_order)
|
||||||
|
}
|
||||||
|
else -> throw AssertionError("Unknown sorting method")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -239,6 +250,12 @@ class ChaptersPresenter : BasePresenter<ChaptersFragment>() {
|
|||||||
db.insertManga(manga).executeAsBlocking()
|
db.insertManga(manga).executeAsBlocking()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun setSorting(mode: Int) {
|
||||||
|
manga.sorting = mode
|
||||||
|
db.insertManga(manga).executeAsBlocking()
|
||||||
|
refreshChapters()
|
||||||
|
}
|
||||||
|
|
||||||
fun onlyDownloaded(): Boolean {
|
fun onlyDownloaded(): Boolean {
|
||||||
return manga.downloadedFilter == Manga.SHOW_DOWNLOADED
|
return manga.downloadedFilter == Manga.SHOW_DOWNLOADED
|
||||||
}
|
}
|
||||||
|
@ -33,6 +33,11 @@
|
|||||||
android:title="@string/action_display_mode"
|
android:title="@string/action_display_mode"
|
||||||
app:showAsAction="never" />
|
app:showAsAction="never" />
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_sorting_mode"
|
||||||
|
android:title="@string/sorting_mode"
|
||||||
|
app:showAsAction="never" />
|
||||||
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/manga_download"
|
android:id="@+id/manga_download"
|
||||||
android:title="@string/manga_download"
|
android:title="@string/manga_download"
|
||||||
|
@ -225,6 +225,9 @@
|
|||||||
<string name="fetch_chapters_error">Error while fetching chapters</string>
|
<string name="fetch_chapters_error">Error while fetching chapters</string>
|
||||||
<string name="show_title">Show title</string>
|
<string name="show_title">Show title</string>
|
||||||
<string name="show_chapter_number">Show chapter number</string>
|
<string name="show_chapter_number">Show chapter number</string>
|
||||||
|
<string name="sorting_mode">Sorting mode</string>
|
||||||
|
<string name="sort_by_source">By source</string>
|
||||||
|
<string name="sort_by_number">By chapter number</string>
|
||||||
<string name="manga_download">Download</string>
|
<string name="manga_download">Download</string>
|
||||||
<string name="download_1">Download next chapter</string>
|
<string name="download_1">Download next chapter</string>
|
||||||
<string name="download_5">Download next 5 chapters</string>
|
<string name="download_5">Download next 5 chapters</string>
|
||||||
|
Loading…
Reference in New Issue
Block a user