mirror of
https://github.com/tachiyomiorg/tachiyomi.git
synced 2024-12-23 07:11:52 +01:00
Option to collaspe categories
Sort button on category now shows category direction Category name now a bit larger
This commit is contained in:
parent
3d6ad28437
commit
877cb43043
@ -25,6 +25,8 @@ interface Category : Serializable {
|
|||||||
val nameLower: String
|
val nameLower: String
|
||||||
get() = name.toLowerCase()
|
get() = name.toLowerCase()
|
||||||
|
|
||||||
|
var isHidden: Boolean
|
||||||
|
|
||||||
fun isAscending(): Boolean {
|
fun isAscending(): Boolean {
|
||||||
return ((mangaSort?.minus('a') ?: 0) % 2) != 1
|
return ((mangaSort?.minus('a') ?: 0) % 2) != 1
|
||||||
}
|
}
|
||||||
@ -47,7 +49,7 @@ interface Category : Serializable {
|
|||||||
LAST_READ_ASC, LAST_READ_DSC -> R.string.last_read
|
LAST_READ_ASC, LAST_READ_DSC -> R.string.last_read
|
||||||
TOTAL_ASC, TOTAL_DSC -> R.string.total_chapters
|
TOTAL_ASC, TOTAL_DSC -> R.string.total_chapters
|
||||||
DATE_ADDED_ASC, DATE_ADDED_DSC -> R.string.date_added
|
DATE_ADDED_ASC, DATE_ADDED_DSC -> R.string.date_added
|
||||||
else -> R.string.drag_and_drop
|
else -> if (id == -1) R.string.category else R.string.drag_and_drop
|
||||||
}
|
}
|
||||||
|
|
||||||
fun catSortingMode(): Int? = when (mangaSort) {
|
fun catSortingMode(): Int? = when (mangaSort) {
|
||||||
|
@ -18,6 +18,8 @@ class CategoryImpl : Category {
|
|||||||
|
|
||||||
override var isLast: Boolean? = null
|
override var isLast: Boolean? = null
|
||||||
|
|
||||||
|
override var isHidden: Boolean = false
|
||||||
|
|
||||||
override fun equals(other: Any?): Boolean {
|
override fun equals(other: Any?): Boolean {
|
||||||
if (this === other) return true
|
if (this === other) return true
|
||||||
if (other == null || javaClass != other.javaClass) return false
|
if (other == null || javaClass != other.javaClass) return false
|
||||||
|
@ -14,5 +14,9 @@ class LibraryManga : MangaImpl() {
|
|||||||
id = Long.MIN_VALUE
|
id = Long.MIN_VALUE
|
||||||
category = categoryId
|
category = categoryId
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun createHide(categoryId: Int): LibraryManga = createBlank(categoryId).apply {
|
||||||
|
status = -1
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -51,10 +51,6 @@ object PreferenceKeys {
|
|||||||
|
|
||||||
const val readWithVolumeKeysInverted = "reader_volume_keys_inverted"
|
const val readWithVolumeKeysInverted = "reader_volume_keys_inverted"
|
||||||
|
|
||||||
const val portraitColumns = "pref_library_columns_portrait_key"
|
|
||||||
|
|
||||||
const val landscapeColumns = "pref_library_columns_landscape_key"
|
|
||||||
|
|
||||||
const val updateOnlyNonCompleted = "pref_update_only_non_completed_key"
|
const val updateOnlyNonCompleted = "pref_update_only_non_completed_key"
|
||||||
|
|
||||||
const val autoUpdateTrack = "pref_auto_update_manga_sync_key"
|
const val autoUpdateTrack = "pref_auto_update_manga_sync_key"
|
||||||
|
@ -103,10 +103,6 @@ class PreferencesHelper(val context: Context) {
|
|||||||
|
|
||||||
fun readWithVolumeKeysInverted() = rxPrefs.getBoolean(Keys.readWithVolumeKeysInverted, false)
|
fun readWithVolumeKeysInverted() = rxPrefs.getBoolean(Keys.readWithVolumeKeysInverted, false)
|
||||||
|
|
||||||
fun portraitColumns() = rxPrefs.getInteger(Keys.portraitColumns, 0)
|
|
||||||
|
|
||||||
fun landscapeColumns() = rxPrefs.getInteger(Keys.landscapeColumns, 0)
|
|
||||||
|
|
||||||
fun updateOnlyNonCompleted() = prefs.getBoolean(Keys.updateOnlyNonCompleted, false)
|
fun updateOnlyNonCompleted() = prefs.getBoolean(Keys.updateOnlyNonCompleted, false)
|
||||||
|
|
||||||
fun autoUpdateTrack() = prefs.getBoolean(Keys.autoUpdateTrack, true)
|
fun autoUpdateTrack() = prefs.getBoolean(Keys.autoUpdateTrack, true)
|
||||||
@ -205,6 +201,8 @@ class PreferencesHelper(val context: Context) {
|
|||||||
|
|
||||||
fun automaticExtUpdates() = rxPrefs.getBoolean(Keys.automaticExtUpdates, false)
|
fun automaticExtUpdates() = rxPrefs.getBoolean(Keys.automaticExtUpdates, false)
|
||||||
|
|
||||||
|
fun collapsedCategories() = rxPrefs.getStringSet("collapsed_categories", mutableSetOf())
|
||||||
|
|
||||||
fun hiddenCatalogues() = rxPrefs.getStringSet("hidden_catalogues", mutableSetOf())
|
fun hiddenCatalogues() = rxPrefs.getStringSet("hidden_catalogues", mutableSetOf())
|
||||||
|
|
||||||
fun downloadNew() = rxPrefs.getBoolean(Keys.downloadNew, false)
|
fun downloadNew() = rxPrefs.getBoolean(Keys.downloadNew, false)
|
||||||
|
@ -153,7 +153,7 @@ class LibraryCategoryAdapter(val libraryListener: LibraryListener) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun getFirstLetter(name: String): String {
|
private fun getFirstLetter(name: String): String {
|
||||||
val letter = name.first()
|
val letter = name.firstOrNull() ?: '#'
|
||||||
return if (letter.isLetter()) letter.toString()
|
return if (letter.isLetter()) letter.toString()
|
||||||
.toUpperCase(Locale.ROOT) else "#"
|
.toUpperCase(Locale.ROOT) else "#"
|
||||||
}
|
}
|
||||||
@ -272,5 +272,6 @@ class LibraryCategoryAdapter(val libraryListener: LibraryListener) :
|
|||||||
fun sortCategory(catId: Int, sortBy: Int)
|
fun sortCategory(catId: Int, sortBy: Int)
|
||||||
fun selectAll(position: Int)
|
fun selectAll(position: Int)
|
||||||
fun allSelected(position: Int): Boolean
|
fun allSelected(position: Int): Boolean
|
||||||
|
fun toggleCategoryVisibility(position: Int)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -804,6 +804,11 @@ class LibraryController(
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun toggleCategoryVisibility(position: Int) {
|
||||||
|
val catId = (adapter.getItem(position) as? LibraryHeaderItem)?.category?.id ?: return
|
||||||
|
presenter.toggleCategoryVisibility(catId)
|
||||||
|
}
|
||||||
|
|
||||||
override fun sortCategory(catId: Int, sortBy: Int) {
|
override fun sortCategory(catId: Int, sortBy: Int) {
|
||||||
presenter.sortCategory(catId, sortBy)
|
presenter.sortCategory(catId, sortBy)
|
||||||
}
|
}
|
||||||
|
@ -18,11 +18,11 @@ import eu.davidea.flexibleadapter.FlexibleAdapter
|
|||||||
import eu.davidea.flexibleadapter.SelectableAdapter
|
import eu.davidea.flexibleadapter.SelectableAdapter
|
||||||
import eu.davidea.flexibleadapter.items.AbstractHeaderItem
|
import eu.davidea.flexibleadapter.items.AbstractHeaderItem
|
||||||
import eu.davidea.flexibleadapter.items.IFlexible
|
import eu.davidea.flexibleadapter.items.IFlexible
|
||||||
import eu.davidea.viewholders.FlexibleViewHolder
|
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.data.database.models.Category
|
import eu.kanade.tachiyomi.data.database.models.Category
|
||||||
import eu.kanade.tachiyomi.data.library.LibraryUpdateService
|
import eu.kanade.tachiyomi.data.library.LibraryUpdateService
|
||||||
import eu.kanade.tachiyomi.data.preference.getOrDefault
|
import eu.kanade.tachiyomi.data.preference.getOrDefault
|
||||||
|
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
||||||
import eu.kanade.tachiyomi.util.system.dpToPx
|
import eu.kanade.tachiyomi.util.system.dpToPx
|
||||||
import eu.kanade.tachiyomi.util.system.getResourceColor
|
import eu.kanade.tachiyomi.util.system.getResourceColor
|
||||||
import eu.kanade.tachiyomi.util.view.gone
|
import eu.kanade.tachiyomi.util.view.gone
|
||||||
@ -30,7 +30,6 @@ import eu.kanade.tachiyomi.util.view.invisible
|
|||||||
import eu.kanade.tachiyomi.util.view.updateLayoutParams
|
import eu.kanade.tachiyomi.util.view.updateLayoutParams
|
||||||
import eu.kanade.tachiyomi.util.view.visInvisIf
|
import eu.kanade.tachiyomi.util.view.visInvisIf
|
||||||
import eu.kanade.tachiyomi.util.view.visible
|
import eu.kanade.tachiyomi.util.view.visible
|
||||||
import kotlinx.android.synthetic.main.library_category_header_item.view.*
|
|
||||||
|
|
||||||
class LibraryHeaderItem(
|
class LibraryHeaderItem(
|
||||||
private val categoryF: (Int) -> Category,
|
private val categoryF: (Int) -> Category,
|
||||||
@ -83,7 +82,7 @@ class LibraryHeaderItem(
|
|||||||
}
|
}
|
||||||
|
|
||||||
class Holder(val view: View, private val adapter: LibraryCategoryAdapter, padEnd: Boolean) :
|
class Holder(val view: View, private val adapter: LibraryCategoryAdapter, padEnd: Boolean) :
|
||||||
FlexibleViewHolder(view, adapter, true) {
|
BaseFlexibleViewHolder(view, adapter, true) {
|
||||||
|
|
||||||
private val sectionText: TextView = view.findViewById(R.id.category_title)
|
private val sectionText: TextView = view.findViewById(R.id.category_title)
|
||||||
private val sortText: TextView = view.findViewById(R.id.category_sort)
|
private val sortText: TextView = view.findViewById(R.id.category_sort)
|
||||||
@ -96,6 +95,10 @@ class LibraryHeaderItem(
|
|||||||
marginEnd = (if (padEnd && adapter.recyclerView.paddingEnd == 0) 12 else 2).dpToPx
|
marginEnd = (if (padEnd && adapter.recyclerView.paddingEnd == 0) 12 else 2).dpToPx
|
||||||
}
|
}
|
||||||
updateButton.setOnClickListener { addCategoryToUpdate() }
|
updateButton.setOnClickListener { addCategoryToUpdate() }
|
||||||
|
sectionText.setOnLongClickListener {
|
||||||
|
adapter.libraryListener.toggleCategoryVisibility(adapterPosition)
|
||||||
|
true
|
||||||
|
}
|
||||||
sortText.setOnClickListener { it.post { showCatSortOptions() } }
|
sortText.setOnClickListener { it.post { showCatSortOptions() } }
|
||||||
checkboxImage.setOnClickListener { selectAll() }
|
checkboxImage.setOnClickListener { selectAll() }
|
||||||
updateButton.drawable.mutate()
|
updateButton.drawable.mutate()
|
||||||
@ -109,20 +112,25 @@ class LibraryHeaderItem(
|
|||||||
if (category.isFirst == true && category.isLast == true) sectionText.text = ""
|
if (category.isFirst == true && category.isLast == true) sectionText.text = ""
|
||||||
else sectionText.text = category.name
|
else sectionText.text = category.name
|
||||||
sortText.text = itemView.context.getString(R.string.sort_by_,
|
sortText.text = itemView.context.getString(R.string.sort_by_,
|
||||||
itemView.context.getString(
|
itemView.context.getString(category.sortRes())
|
||||||
when (category.sortingMode()) {
|
)
|
||||||
LibrarySort.LATEST_CHAPTER -> R.string.latest_chapter
|
|
||||||
LibrarySort.DRAG_AND_DROP ->
|
val isAscending = category.isAscending()
|
||||||
if (category.id == -1) R.string.category
|
val sortingMode = category.sortingMode()
|
||||||
else R.string.drag_and_drop
|
val sortDrawable = if (category.isHidden) R.drawable.ic_expand_more_white_24dp
|
||||||
LibrarySort.TOTAL -> R.string.total_chapters
|
else
|
||||||
LibrarySort.UNREAD -> R.string.unread
|
when {
|
||||||
LibrarySort.LAST_READ -> R.string.last_read
|
sortingMode == LibrarySort.DRAG_AND_DROP || sortingMode == null -> R.drawable
|
||||||
LibrarySort.ALPHA -> R.string.title
|
.ic_sort_white_24dp
|
||||||
LibrarySort.DATE_ADDED -> R.string.date_added
|
if (sortingMode == LibrarySort.DATE_ADDED ||
|
||||||
else -> R.string.drag_and_drop
|
sortingMode == LibrarySort.LATEST_CHAPTER ||
|
||||||
|
sortingMode == LibrarySort.LAST_READ) !isAscending else isAscending ->
|
||||||
|
R.drawable.ic_arrow_down_white_24dp
|
||||||
|
else -> R.drawable.ic_arrow_up_white_24dp
|
||||||
}
|
}
|
||||||
))
|
|
||||||
|
sortText.setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, sortDrawable, 0)
|
||||||
|
sortText.setText(if (category.isHidden) R.string.collasped else category.sortRes())
|
||||||
|
|
||||||
when {
|
when {
|
||||||
adapter.mode == SelectableAdapter.Mode.MULTI -> {
|
adapter.mode == SelectableAdapter.Mode.MULTI -> {
|
||||||
@ -157,8 +165,12 @@ class LibraryHeaderItem(
|
|||||||
private fun showCatSortOptions() {
|
private fun showCatSortOptions() {
|
||||||
val category =
|
val category =
|
||||||
(adapter.getItem(adapterPosition) as? LibraryHeaderItem)?.category ?: return
|
(adapter.getItem(adapterPosition) as? LibraryHeaderItem)?.category ?: return
|
||||||
|
if (category.isHidden) {
|
||||||
|
adapter.libraryListener.toggleCategoryVisibility(adapterPosition)
|
||||||
|
return
|
||||||
|
}
|
||||||
// Create a PopupMenu, giving it the clicked view for an anchor
|
// Create a PopupMenu, giving it the clicked view for an anchor
|
||||||
val popup = PopupMenu(itemView.context, view.category_sort)
|
val popup = PopupMenu(itemView.context, sortText)
|
||||||
|
|
||||||
// Inflate our menu resource into the PopupMenu's Menu
|
// Inflate our menu resource into the PopupMenu's Menu
|
||||||
popup.menuInflater.inflate(
|
popup.menuInflater.inflate(
|
||||||
@ -254,14 +266,17 @@ class LibraryHeaderItem(
|
|||||||
|
|
||||||
fun setSelection() {
|
fun setSelection() {
|
||||||
val allSelected = adapter.libraryListener.allSelected(adapterPosition)
|
val allSelected = adapter.libraryListener.allSelected(adapterPosition)
|
||||||
val drawable =
|
val drawable = ContextCompat.getDrawable(
|
||||||
ContextCompat.getDrawable(contentView.context,
|
contentView.context,
|
||||||
if (allSelected) R.drawable.ic_check_circle_white_24dp else
|
if (allSelected) R.drawable.ic_check_circle_white_24dp else R.drawable.ic_radio_button_unchecked_white_24dp
|
||||||
R.drawable.ic_radio_button_unchecked_white_24dp)
|
)
|
||||||
val tintedDrawable = drawable?.mutate()
|
val tintedDrawable = drawable?.mutate()
|
||||||
tintedDrawable?.setTint(ContextCompat.getColor(contentView.context,
|
tintedDrawable?.setTint(
|
||||||
if (allSelected) R.color.colorAccent
|
ContextCompat.getColor(
|
||||||
else R.color.gray_button))
|
contentView.context, if (allSelected) R.color.colorAccent
|
||||||
|
else R.color.gray_button
|
||||||
|
)
|
||||||
|
)
|
||||||
checkboxImage.setImageDrawable(tintedDrawable)
|
checkboxImage.setImageDrawable(tintedDrawable)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,13 +46,23 @@ class LibraryListHolder(
|
|||||||
*/
|
*/
|
||||||
override fun onSetValues(item: LibraryItem) {
|
override fun onSetValues(item: LibraryItem) {
|
||||||
|
|
||||||
|
title.visible()
|
||||||
|
constraint_layout.minHeight = 56.dpToPx
|
||||||
if (item.manga.isBlank()) {
|
if (item.manga.isBlank()) {
|
||||||
|
constraint_layout.minHeight = 0
|
||||||
|
if (item.manga.status == -1) {
|
||||||
|
title.gone()
|
||||||
|
} else
|
||||||
title.text = itemView.context.getString(R.string.category_is_empty)
|
title.text = itemView.context.getString(R.string.category_is_empty)
|
||||||
title.textAlignment = View.TEXT_ALIGNMENT_CENTER
|
title.textAlignment = View.TEXT_ALIGNMENT_CENTER
|
||||||
card.gone()
|
card.gone()
|
||||||
badge_view.gone()
|
badge_view.gone()
|
||||||
|
play_layout.gone()
|
||||||
|
padding.gone()
|
||||||
|
subtitle.gone()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
padding.visible()
|
||||||
card.visible()
|
card.visible()
|
||||||
title.textAlignment = View.TEXT_ALIGNMENT_TEXT_START
|
title.textAlignment = View.TEXT_ALIGNMENT_TEXT_START
|
||||||
|
|
||||||
|
@ -425,12 +425,27 @@ class LibraryPresenter(
|
|||||||
LibraryItem(it, libraryLayout, preferences.uniformGrid(), seekPref, headerItem)
|
LibraryItem(it, libraryLayout, preferences.uniformGrid(), seekPref, headerItem)
|
||||||
}.toMutableList()
|
}.toMutableList()
|
||||||
|
|
||||||
|
val categoriesHidden = preferences.collapsedCategories().getOrDefault().mapNotNull {
|
||||||
|
it.toIntOrNull()
|
||||||
|
}.toMutableSet()
|
||||||
|
|
||||||
if (showCategories) {
|
if (showCategories) {
|
||||||
categories.forEach { category ->
|
categories.forEach { category ->
|
||||||
if (category.id ?: 0 <= 0 && !categorySet.contains(category.id)) {
|
val catId = category.id ?: return@forEach
|
||||||
val headerItem = headerItems[category.id ?: 0]
|
if (catId > 0 && !categorySet.contains(catId)) {
|
||||||
|
val headerItem = headerItems[catId]
|
||||||
items.add(LibraryItem(
|
items.add(LibraryItem(
|
||||||
LibraryManga.createBlank(category.id!!),
|
LibraryManga.createBlank(catId),
|
||||||
|
libraryLayout,
|
||||||
|
preferences.uniformGrid(),
|
||||||
|
preferences.alwaysShowSeeker(),
|
||||||
|
headerItem
|
||||||
|
))
|
||||||
|
} else if (catId in categoriesHidden) {
|
||||||
|
val headerItem = headerItems[catId]
|
||||||
|
items.removeAll { it.manga.category == catId }
|
||||||
|
items.add(LibraryItem(
|
||||||
|
LibraryManga.createHide(catId),
|
||||||
libraryLayout,
|
libraryLayout,
|
||||||
preferences.uniformGrid(),
|
preferences.uniformGrid(),
|
||||||
preferences.alwaysShowSeeker(),
|
preferences.alwaysShowSeeker(),
|
||||||
@ -446,6 +461,10 @@ class LibraryPresenter(
|
|||||||
if (categorySet.contains(0))
|
if (categorySet.contains(0))
|
||||||
categories.add(0, createDefaultCategory())
|
categories.add(0, createDefaultCategory())
|
||||||
|
|
||||||
|
categories.forEach {
|
||||||
|
it.isHidden = it.id in categoriesHidden
|
||||||
|
}
|
||||||
|
|
||||||
this.allCategories = categories
|
this.allCategories = categories
|
||||||
this.categories = if (!showCategories) arrayListOf(categoryAll)
|
this.categories = if (!showCategories) arrayListOf(categoryAll)
|
||||||
else categories
|
else categories
|
||||||
@ -678,7 +697,21 @@ class LibraryPresenter(
|
|||||||
return catId in categories
|
return catId in categories
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun toggleCategoryVisibility(categoryId: Int) {
|
||||||
|
if (categoryId <= -1) return
|
||||||
|
val categoriesHidden = preferences.collapsedCategories().getOrDefault().mapNotNull {
|
||||||
|
it.toIntOrNull()
|
||||||
|
}.toMutableSet()
|
||||||
|
if (categoryId in categoriesHidden)
|
||||||
|
categoriesHidden.remove(categoryId)
|
||||||
|
else
|
||||||
|
categoriesHidden.add(categoryId)
|
||||||
|
preferences.collapsedCategories().set(categoriesHidden.map { it.toString() }.toMutableSet())
|
||||||
|
getLibrary()
|
||||||
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
// var catsHidden = mutableListOf<Int>()
|
||||||
private var lastLibraryItems: List<LibraryItem>? = null
|
private var lastLibraryItems: List<LibraryItem>? = null
|
||||||
private var lastCategories: List<Category>? = null
|
private var lastCategories: List<Category>? = null
|
||||||
|
|
||||||
|
@ -521,7 +521,7 @@ class MangaDetailsPresenter(
|
|||||||
asyncUpdateMangaAndChapters()
|
asyncUpdateMangaAndChapters()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun globalSort() = preferences.chaptersDescAsDefault().getOrDefault()
|
fun globalSort(): Boolean = preferences.chaptersDescAsDefault().getOrDefault()
|
||||||
|
|
||||||
fun setGlobalChapterSort(descend: Boolean) {
|
fun setGlobalChapterSort(descend: Boolean) {
|
||||||
preferences.chaptersDescAsDefault().set(descend)
|
preferences.chaptersDescAsDefault().set(descend)
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
<item android:id="@android:id/mask">
|
<item android:id="@android:id/mask">
|
||||||
<shape android:shape="rectangle">
|
<shape android:shape="rectangle">
|
||||||
<corners android:radius="4dp" />
|
<corners android:radius="4dp" />
|
||||||
<solid android:color="@color/gray_button" />
|
<solid android:color="@color/fullRippleColor" />
|
||||||
</shape>
|
</shape>
|
||||||
</item>
|
</item>
|
||||||
</ripple>
|
</ripple>
|
@ -5,6 +5,7 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
|
android:id="@+id/constraint_layout"
|
||||||
android:background="?attr/selectable_list_drawable"
|
android:background="?attr/selectable_list_drawable"
|
||||||
android:minHeight="@dimen/material_component_lists_single_line_with_avatar_height">
|
android:minHeight="@dimen/material_component_lists_single_line_with_avatar_height">
|
||||||
|
|
||||||
|
@ -6,25 +6,23 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:gravity="center_vertical">
|
android:gravity="center_vertical">
|
||||||
|
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/checkbox"
|
android:id="@+id/checkbox"
|
||||||
android:padding="5dp"
|
|
||||||
android:visibility="gone"
|
|
||||||
tools:visibility="visible"
|
|
||||||
tools:tint="?attr/colorAccent"
|
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:contentDescription="@string/select_all"
|
|
||||||
android:clickable="true"
|
|
||||||
android:focusable="true"
|
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="10dp"
|
||||||
|
android:clickable="true"
|
||||||
|
android:contentDescription="@string/select_all"
|
||||||
|
android:focusable="true"
|
||||||
|
android:padding="5dp"
|
||||||
android:src="@drawable/ic_check_circle_white_24dp"
|
android:src="@drawable/ic_check_circle_white_24dp"
|
||||||
android:layout_marginStart="2dp"
|
android:visibility="gone"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/category_title"
|
app:layout_constraintBottom_toBottomOf="@+id/category_title"
|
||||||
app:layout_constraintEnd_toStartOf="@+id/category_title"
|
app:layout_constraintEnd_toStartOf="@+id/category_title"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="@+id/category_title"
|
app:layout_constraintTop_toTopOf="@+id/category_title"
|
||||||
/>
|
tools:tint="?attr/colorAccent"
|
||||||
|
tools:visibility="visible" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/category_title"
|
android:id="@+id/category_title"
|
||||||
@ -32,18 +30,20 @@
|
|||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="8dp"
|
android:layout_marginStart="8dp"
|
||||||
|
android:layout_marginTop="32dp"
|
||||||
|
android:background="@drawable/square_ripple"
|
||||||
android:layout_marginBottom="10dp"
|
android:layout_marginBottom="10dp"
|
||||||
android:ellipsize="end"
|
android:ellipsize="end"
|
||||||
android:gravity="center|start"
|
android:gravity="center|start"
|
||||||
android:inputType="none"
|
android:inputType="none"
|
||||||
android:maxLines="2"
|
android:maxLines="2"
|
||||||
android:layout_marginTop="32dp"
|
android:textSize="22sp"
|
||||||
app:layout_constrainedWidth="true"
|
app:layout_constrainedWidth="true"
|
||||||
app:layout_constraintStart_toEndOf="@+id/checkbox"
|
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toStartOf="@id/update_button"
|
app:layout_constraintEnd_toStartOf="@id/update_button"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
|
||||||
app:layout_constraintHorizontal_bias="0.0"
|
app:layout_constraintHorizontal_bias="0.0"
|
||||||
|
app:layout_constraintStart_toEndOf="@+id/checkbox"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
tools:text="Title dfdsfsfsfsfsfdsfsfsfs" />
|
tools:text="Title dfdsfsfsfsfsfdsfsfsfs" />
|
||||||
|
|
||||||
<Space
|
<Space
|
||||||
@ -59,15 +59,15 @@
|
|||||||
android:id="@+id/update_button"
|
android:id="@+id/update_button"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="35dp"
|
android:layout_height="35dp"
|
||||||
android:padding="5dp"
|
|
||||||
android:clickable="true"
|
android:clickable="true"
|
||||||
android:focusable="true"
|
android:focusable="true"
|
||||||
android:tint="?attr/colorAccent"
|
android:padding="5dp"
|
||||||
android:src="@drawable/ic_refresh_white_24dp"
|
android:src="@drawable/ic_refresh_white_24dp"
|
||||||
|
android:tint="?attr/colorAccent"
|
||||||
app:layout_constraintBottom_toBottomOf="@id/category_title"
|
app:layout_constraintBottom_toBottomOf="@id/category_title"
|
||||||
app:layout_constraintTop_toTopOf="@id/category_title"
|
|
||||||
app:layout_constraintEnd_toStartOf="@id/space"
|
app:layout_constraintEnd_toStartOf="@id/space"
|
||||||
app:layout_constraintStart_toEndOf="@id/category_title"
|
app:layout_constraintStart_toEndOf="@id/category_title"
|
||||||
|
app:layout_constraintTop_toTopOf="@id/category_title"
|
||||||
app:rippleColor="@color/fullRippleColor" />
|
app:rippleColor="@color/fullRippleColor" />
|
||||||
|
|
||||||
<ProgressBar
|
<ProgressBar
|
||||||
@ -76,17 +76,18 @@
|
|||||||
android:layout_height="0dp"
|
android:layout_height="0dp"
|
||||||
android:layout_margin="5dp"
|
android:layout_margin="5dp"
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
tools:visibility="visible"
|
|
||||||
app:layout_constraintTop_toTopOf="@id/update_button"
|
|
||||||
app:layout_constraintBottom_toBottomOf="@id/update_button"
|
app:layout_constraintBottom_toBottomOf="@id/update_button"
|
||||||
|
app:layout_constraintEnd_toEndOf="@id/update_button"
|
||||||
app:layout_constraintStart_toStartOf="@id/update_button"
|
app:layout_constraintStart_toStartOf="@id/update_button"
|
||||||
app:layout_constraintEnd_toEndOf="@id/update_button"/>
|
app:layout_constraintTop_toTopOf="@id/update_button"
|
||||||
|
tools:visibility="visible" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/category_sort"
|
android:id="@+id/category_sort"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginEnd="2dp"
|
android:layout_marginEnd="2dp"
|
||||||
|
android:background="@drawable/square_ripple"
|
||||||
android:clickable="true"
|
android:clickable="true"
|
||||||
android:drawableEnd="@drawable/ic_sort_white_24dp"
|
android:drawableEnd="@drawable/ic_sort_white_24dp"
|
||||||
android:drawablePadding="6dp"
|
android:drawablePadding="6dp"
|
||||||
@ -94,7 +95,6 @@
|
|||||||
android:ellipsize="start"
|
android:ellipsize="start"
|
||||||
android:focusable="true"
|
android:focusable="true"
|
||||||
android:gravity="center|end"
|
android:gravity="center|end"
|
||||||
android:background="@drawable/square_ripple"
|
|
||||||
android:maxLines="2"
|
android:maxLines="2"
|
||||||
android:padding="6dp"
|
android:padding="6dp"
|
||||||
android:textAlignment="textEnd"
|
android:textAlignment="textEnd"
|
||||||
@ -108,6 +108,5 @@
|
|||||||
app:layout_constraintHorizontal_bias="1.0"
|
app:layout_constraintHorizontal_bias="1.0"
|
||||||
app:layout_constraintStart_toEndOf="@id/space"
|
app:layout_constraintStart_toEndOf="@id/space"
|
||||||
app:layout_constraintTop_toTopOf="@id/category_title"
|
app:layout_constraintTop_toTopOf="@id/category_title"
|
||||||
app:layout_constraintWidth_min="100dp"
|
|
||||||
tools:text="Drag and Drop" />
|
tools:text="Drag and Drop" />
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
@ -66,6 +66,7 @@
|
|||||||
<string name="_already_in_queue">%1$s is already in queue</string>
|
<string name="_already_in_queue">%1$s is already in queue</string>
|
||||||
<string name="create_new_category">Create new category</string>
|
<string name="create_new_category">Create new category</string>
|
||||||
<string name="category_is_empty">Category is empty</string>
|
<string name="category_is_empty">Category is empty</string>
|
||||||
|
<string name="category_is_hidden">Category is hidden</string>
|
||||||
<string name="top_category">Top category (%1$s)</string>
|
<string name="top_category">Top category (%1$s)</string>
|
||||||
<string name="default_category">Default category</string>
|
<string name="default_category">Default category</string>
|
||||||
<string name="first_category">First category</string>
|
<string name="first_category">First category</string>
|
||||||
@ -600,6 +601,7 @@
|
|||||||
<string name="charging">Charging</string>
|
<string name="charging">Charging</string>
|
||||||
<string name="clear">Clear</string>
|
<string name="clear">Clear</string>
|
||||||
<string name="close">Close</string>
|
<string name="close">Close</string>
|
||||||
|
<string name="collasped">Collapsed</string>
|
||||||
<string name="common">Common</string>
|
<string name="common">Common</string>
|
||||||
<string name="cover_of_image">Cover of manga</string>
|
<string name="cover_of_image">Cover of manga</string>
|
||||||
<string name="create">Create</string>
|
<string name="create">Create</string>
|
||||||
@ -637,6 +639,8 @@
|
|||||||
<string name="options">Options</string>
|
<string name="options">Options</string>
|
||||||
<string name="pause">Pause</string>
|
<string name="pause">Pause</string>
|
||||||
<string name="picture_saved">Picture saved</string>
|
<string name="picture_saved">Picture saved</string>
|
||||||
|
<string name="refresh">Refresh</string>
|
||||||
|
<string name="refreshing">Refreshing</string>
|
||||||
<string name="remove">Remove</string>
|
<string name="remove">Remove</string>
|
||||||
<string name="reorder">Reorder</string>
|
<string name="reorder">Reorder</string>
|
||||||
<string name="reset">Reset</string>
|
<string name="reset">Reset</string>
|
||||||
@ -656,6 +660,7 @@
|
|||||||
<string name="top">Top</string>
|
<string name="top">Top</string>
|
||||||
<string name="undo">Undo</string>
|
<string name="undo">Undo</string>
|
||||||
<string name="unknown_error">Unknown error</string>
|
<string name="unknown_error">Unknown error</string>
|
||||||
|
<string name="un_select_all">Un-select all</string>
|
||||||
<string name="use_default">Use default</string>
|
<string name="use_default">Use default</string>
|
||||||
<string name="view_all_errors">View all errors</string>
|
<string name="view_all_errors">View all errors</string>
|
||||||
<string name="view_chapters">View chapters</string>
|
<string name="view_chapters">View chapters</string>
|
||||||
|
BIN
captures/eu.kanade.tachiyomi.debug_2020.04.16_14.54.li
Normal file
BIN
captures/eu.kanade.tachiyomi.debug_2020.04.16_14.54.li
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user