Move bookmark button to bottom reader bar
This commit is contained in:
@@ -4,7 +4,7 @@ import java.util.EnumSet
|
|||||||
|
|
||||||
enum class ReaderControl {
|
enum class ReaderControl {
|
||||||
|
|
||||||
PREV_CHAPTER, NEXT_CHAPTER, SLIDER, PAGES_SHEET, SCREEN_ROTATION, SAVE_PAGE, TIMER;
|
PREV_CHAPTER, NEXT_CHAPTER, SLIDER, PAGES_SHEET, SCREEN_ROTATION, SAVE_PAGE, TIMER, BOOKMARK;
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ import org.koitharu.kotatsu.core.util.ext.hasVisibleChildren
|
|||||||
import org.koitharu.kotatsu.core.util.ext.isRtl
|
import org.koitharu.kotatsu.core.util.ext.isRtl
|
||||||
import org.koitharu.kotatsu.core.util.ext.setValueRounded
|
import org.koitharu.kotatsu.core.util.ext.setValueRounded
|
||||||
import org.koitharu.kotatsu.databinding.LayoutReaderActionsBinding
|
import org.koitharu.kotatsu.databinding.LayoutReaderActionsBinding
|
||||||
|
import org.koitharu.kotatsu.details.ui.pager.ChaptersPagesSheet
|
||||||
import org.koitharu.kotatsu.details.ui.pager.ChaptersPagesSheet.Companion.TAB_PAGES
|
import org.koitharu.kotatsu.details.ui.pager.ChaptersPagesSheet.Companion.TAB_PAGES
|
||||||
import org.koitharu.kotatsu.reader.ui.ReaderControlDelegate.OnInteractionListener
|
import org.koitharu.kotatsu.reader.ui.ReaderControlDelegate.OnInteractionListener
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
@@ -40,7 +41,7 @@ class ReaderActionsView @JvmOverloads constructor(
|
|||||||
View.OnClickListener,
|
View.OnClickListener,
|
||||||
SharedPreferences.OnSharedPreferenceChangeListener,
|
SharedPreferences.OnSharedPreferenceChangeListener,
|
||||||
Slider.OnChangeListener,
|
Slider.OnChangeListener,
|
||||||
Slider.OnSliderTouchListener {
|
Slider.OnSliderTouchListener, View.OnLongClickListener {
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var settings: AppSettings
|
lateinit var settings: AppSettings
|
||||||
@@ -73,6 +74,14 @@ class ReaderActionsView @JvmOverloads constructor(
|
|||||||
binding.buttonPrev.isEnabled = value
|
binding.buttonPrev.isEnabled = value
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var isBookmarkAdded: Boolean = false
|
||||||
|
set(value) {
|
||||||
|
if (field != value) {
|
||||||
|
field = value
|
||||||
|
updateBookmarkButton()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var listener: OnInteractionListener? = null
|
var listener: OnInteractionListener? = null
|
||||||
|
|
||||||
init {
|
init {
|
||||||
@@ -85,6 +94,7 @@ class ReaderActionsView @JvmOverloads constructor(
|
|||||||
binding.buttonScreenRotation.initAction()
|
binding.buttonScreenRotation.initAction()
|
||||||
binding.buttonPagesThumbs.initAction()
|
binding.buttonPagesThumbs.initAction()
|
||||||
binding.buttonTimer.initAction()
|
binding.buttonTimer.initAction()
|
||||||
|
binding.buttonBookmark.initAction()
|
||||||
binding.slider.setLabelFormatter(PageLabelFormatter())
|
binding.slider.setLabelFormatter(PageLabelFormatter())
|
||||||
binding.slider.addOnChangeListener(this)
|
binding.slider.addOnChangeListener(this)
|
||||||
binding.slider.addOnSliderTouchListener(this)
|
binding.slider.addOnSliderTouchListener(this)
|
||||||
@@ -112,13 +122,22 @@ class ReaderActionsView @JvmOverloads constructor(
|
|||||||
R.id.button_prev -> listener?.switchChapterBy(-1)
|
R.id.button_prev -> listener?.switchChapterBy(-1)
|
||||||
R.id.button_next -> listener?.switchChapterBy(1)
|
R.id.button_next -> listener?.switchChapterBy(1)
|
||||||
R.id.button_save -> listener?.onSavePageClick()
|
R.id.button_save -> listener?.onSavePageClick()
|
||||||
R.id.button_timer -> listener?.onScrollTimerClick()
|
R.id.button_timer -> listener?.onScrollTimerClick(isLongClick = false)
|
||||||
R.id.button_pages_thumbs -> AppRouter.from(this)?.showChapterPagesSheet()
|
R.id.button_pages_thumbs -> AppRouter.from(this)?.showChapterPagesSheet()
|
||||||
R.id.button_screen_rotation -> listener?.toggleScreenOrientation()
|
R.id.button_screen_rotation -> listener?.toggleScreenOrientation()
|
||||||
R.id.button_options -> listener?.openMenu()
|
R.id.button_options -> listener?.openMenu()
|
||||||
|
R.id.button_bookmark -> listener?.onBookmarkClick()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onLongClick(v: View): Boolean = when (v.id) {
|
||||||
|
R.id.button_bookmark -> AppRouter.from(this)
|
||||||
|
?.showChapterPagesSheet(ChaptersPagesSheet.TAB_BOOKMARKS)
|
||||||
|
R.id.button_timer -> listener?.onScrollTimerClick(isLongClick = true)
|
||||||
|
R.id.button_options -> AppRouter.from(this)?.openReaderSettings()
|
||||||
|
else -> null
|
||||||
|
} != null
|
||||||
|
|
||||||
override fun onValueChange(slider: Slider, value: Float, fromUser: Boolean) {
|
override fun onValueChange(slider: Slider, value: Float, fromUser: Boolean) {
|
||||||
if (fromUser) {
|
if (fromUser) {
|
||||||
if (isSliderTracking) {
|
if (isSliderTracking) {
|
||||||
@@ -175,6 +194,7 @@ class ReaderActionsView @JvmOverloads constructor(
|
|||||||
binding.buttonScreenRotation.isVisible = ReaderControl.SCREEN_ROTATION in controls
|
binding.buttonScreenRotation.isVisible = ReaderControl.SCREEN_ROTATION in controls
|
||||||
binding.buttonSave.isVisible = ReaderControl.SAVE_PAGE in controls
|
binding.buttonSave.isVisible = ReaderControl.SAVE_PAGE in controls
|
||||||
binding.buttonTimer.isVisible = ReaderControl.TIMER in controls
|
binding.buttonTimer.isVisible = ReaderControl.TIMER in controls
|
||||||
|
binding.buttonBookmark.isVisible = ReaderControl.BOOKMARK in controls
|
||||||
binding.slider.isVisible = ReaderControl.SLIDER in controls
|
binding.slider.isVisible = ReaderControl.SLIDER in controls
|
||||||
adjustLayoutParams()
|
adjustLayoutParams()
|
||||||
}
|
}
|
||||||
@@ -190,6 +210,16 @@ class ReaderActionsView @JvmOverloads constructor(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun updateBookmarkButton() {
|
||||||
|
val button = binding.buttonBookmark
|
||||||
|
button.setIconResource(
|
||||||
|
if (isBookmarkAdded) R.drawable.ic_bookmark_added else R.drawable.ic_bookmark,
|
||||||
|
)
|
||||||
|
button.setTitle(
|
||||||
|
if (isBookmarkAdded) R.string.bookmark_remove else R.string.bookmark_add,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
private fun adjustLayoutParams() {
|
private fun adjustLayoutParams() {
|
||||||
val isSliderVisible = binding.slider.isVisible
|
val isSliderVisible = binding.slider.isVisible
|
||||||
repeat(childCount) { i ->
|
repeat(childCount) { i ->
|
||||||
@@ -222,6 +252,7 @@ class ReaderActionsView @JvmOverloads constructor(
|
|||||||
|
|
||||||
private fun Button.initAction() {
|
private fun Button.initAction() {
|
||||||
setOnClickListener(this@ReaderActionsView)
|
setOnClickListener(this@ReaderActionsView)
|
||||||
|
setOnLongClickListener(this@ReaderActionsView)
|
||||||
ViewCompat.setTooltipText(this, contentDescription)
|
ViewCompat.setTooltipText(this, contentDescription)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -114,6 +114,7 @@ class ReaderActivity :
|
|||||||
viewBinding.actionsView.listener = this
|
viewBinding.actionsView.listener = this
|
||||||
idlingDetector.bindToLifecycle(this)
|
idlingDetector.bindToLifecycle(this)
|
||||||
screenOrientationHelper.applySettings()
|
screenOrientationHelper.applySettings()
|
||||||
|
viewModel.isBookmarkAdded.observe(this) { viewBinding.actionsView.isBookmarkAdded = it }
|
||||||
scrollTimer.isActive.observe(this) { viewBinding.actionsView.setTimerActive(it) }
|
scrollTimer.isActive.observe(this) { viewBinding.actionsView.setTimerActive(it) }
|
||||||
viewBinding.timerControl.attach(scrollTimer, this)
|
viewBinding.timerControl.attach(scrollTimer, this)
|
||||||
if (resources.getBoolean(R.bool.is_tablet)) {
|
if (resources.getBoolean(R.bool.is_tablet)) {
|
||||||
@@ -371,12 +372,20 @@ class ReaderActivity :
|
|||||||
return reader.isResumed && supportFragmentManager.fragments.lastOrNull() === reader
|
return reader.isResumed && supportFragmentManager.fragments.lastOrNull() === reader
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onBookmarkClick() {
|
||||||
|
viewModel.toggleBookmark()
|
||||||
|
}
|
||||||
|
|
||||||
override fun onSavePageClick() {
|
override fun onSavePageClick() {
|
||||||
viewModel.saveCurrentPage(pageSaveHelper)
|
viewModel.saveCurrentPage(pageSaveHelper)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onScrollTimerClick() {
|
override fun onScrollTimerClick(isLongClick: Boolean) {
|
||||||
viewBinding.timerControl.showOrHide()
|
if (isLongClick) {
|
||||||
|
scrollTimer.setActive(!scrollTimer.isActive.value)
|
||||||
|
} else {
|
||||||
|
viewBinding.timerControl.showOrHide()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun toggleScreenOrientation() {
|
override fun toggleScreenOrientation() {
|
||||||
|
|||||||
@@ -138,11 +138,13 @@ class ReaderControlDelegate(
|
|||||||
|
|
||||||
fun toggleUiVisibility()
|
fun toggleUiVisibility()
|
||||||
|
|
||||||
|
fun onBookmarkClick()
|
||||||
|
|
||||||
fun openMenu()
|
fun openMenu()
|
||||||
|
|
||||||
fun onSavePageClick()
|
fun onSavePageClick()
|
||||||
|
|
||||||
fun onScrollTimerClick()
|
fun onScrollTimerClick(isLongClick: Boolean)
|
||||||
|
|
||||||
fun toggleScreenOrientation()
|
fun toggleScreenOrientation()
|
||||||
|
|
||||||
|
|||||||
@@ -14,26 +14,10 @@ class ReaderMenuProvider(
|
|||||||
menuInflater.inflate(R.menu.opt_reader, menu)
|
menuInflater.inflate(R.menu.opt_reader, menu)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onPrepareMenu(menu: Menu) {
|
|
||||||
menu.findItem(R.id.action_bookmark)?.let { bookmarkItem ->
|
|
||||||
val hasPages = viewModel.content.value.pages.isNotEmpty()
|
|
||||||
bookmarkItem.isEnabled = hasPages
|
|
||||||
if (hasPages) {
|
|
||||||
val hasBookmark = viewModel.isBookmarkAdded.value
|
|
||||||
bookmarkItem.setTitle(if (hasBookmark) R.string.bookmark_remove else R.string.bookmark_add)
|
|
||||||
bookmarkItem.setIcon(if (hasBookmark) R.drawable.ic_bookmark_added else R.drawable.ic_bookmark)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
|
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
|
||||||
return when (menuItem.itemId) {
|
return when (menuItem.itemId) {
|
||||||
R.id.action_bookmark -> {
|
R.id.action_info -> {
|
||||||
if (viewModel.isBookmarkAdded.value) {
|
// TODO
|
||||||
viewModel.removeBookmark()
|
|
||||||
} else {
|
|
||||||
viewModel.addBookmark()
|
|
||||||
}
|
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -346,39 +346,32 @@ class ReaderViewModel @Inject constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun addBookmark() {
|
fun toggleBookmark() {
|
||||||
if (bookmarkJob?.isActive == true) {
|
if (bookmarkJob?.isActive == true) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
bookmarkJob = launchJob(Dispatchers.Default) {
|
bookmarkJob = launchJob(Dispatchers.Default) {
|
||||||
loadingJob?.join()
|
loadingJob?.join()
|
||||||
val state = checkNotNull(readingState.value)
|
|
||||||
val page = checkNotNull(getCurrentPage()) { "Page not found" }
|
|
||||||
val bookmark = Bookmark(
|
|
||||||
manga = requireManga(),
|
|
||||||
pageId = page.id,
|
|
||||||
chapterId = state.chapterId,
|
|
||||||
page = state.page,
|
|
||||||
scroll = state.scroll,
|
|
||||||
imageUrl = page.preview.ifNullOrEmpty { page.url },
|
|
||||||
createdAt = Instant.now(),
|
|
||||||
percent = computePercent(state.chapterId, state.page),
|
|
||||||
)
|
|
||||||
bookmarksRepository.addBookmark(bookmark)
|
|
||||||
onShowToast.call(R.string.bookmark_added)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun removeBookmark() {
|
|
||||||
if (bookmarkJob?.isActive == true) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
bookmarkJob = launchJob {
|
|
||||||
loadingJob?.join()
|
|
||||||
val manga = requireManga()
|
|
||||||
val state = checkNotNull(getCurrentState())
|
val state = checkNotNull(getCurrentState())
|
||||||
bookmarksRepository.removeBookmark(manga.id, state.chapterId, state.page)
|
if (isBookmarkAdded.value) {
|
||||||
onShowToast.call(R.string.bookmark_removed)
|
val manga = requireManga()
|
||||||
|
bookmarksRepository.removeBookmark(manga.id, state.chapterId, state.page)
|
||||||
|
onShowToast.call(R.string.bookmark_removed)
|
||||||
|
} else {
|
||||||
|
val page = checkNotNull(getCurrentPage()) { "Page not found" }
|
||||||
|
val bookmark = Bookmark(
|
||||||
|
manga = requireManga(),
|
||||||
|
pageId = page.id,
|
||||||
|
chapterId = state.chapterId,
|
||||||
|
page = state.page,
|
||||||
|
scroll = state.scroll,
|
||||||
|
imageUrl = page.preview.ifNullOrEmpty { page.url },
|
||||||
|
createdAt = Instant.now(),
|
||||||
|
percent = computePercent(state.chapterId, state.page),
|
||||||
|
)
|
||||||
|
bookmarksRepository.addBookmark(bookmark)
|
||||||
|
onShowToast.call(R.string.bookmark_added)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,10 @@ import android.os.Bundle
|
|||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
import android.widget.Button
|
||||||
import android.widget.CompoundButton
|
import android.widget.CompoundButton
|
||||||
import androidx.core.view.WindowInsetsCompat
|
import androidx.core.view.WindowInsetsCompat
|
||||||
|
import androidx.core.view.children
|
||||||
import androidx.core.view.isGone
|
import androidx.core.view.isGone
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.core.view.updatePadding
|
import androidx.core.view.updatePadding
|
||||||
@@ -24,6 +26,7 @@ import org.koitharu.kotatsu.core.prefs.ReaderMode
|
|||||||
import org.koitharu.kotatsu.core.ui.sheet.BaseAdaptiveSheet
|
import org.koitharu.kotatsu.core.ui.sheet.BaseAdaptiveSheet
|
||||||
import org.koitharu.kotatsu.core.util.ext.consume
|
import org.koitharu.kotatsu.core.util.ext.consume
|
||||||
import org.koitharu.kotatsu.core.util.ext.findParentCallback
|
import org.koitharu.kotatsu.core.util.ext.findParentCallback
|
||||||
|
import org.koitharu.kotatsu.core.util.ext.observe
|
||||||
import org.koitharu.kotatsu.core.util.ext.viewLifecycleScope
|
import org.koitharu.kotatsu.core.util.ext.viewLifecycleScope
|
||||||
import org.koitharu.kotatsu.databinding.SheetReaderConfigBinding
|
import org.koitharu.kotatsu.databinding.SheetReaderConfigBinding
|
||||||
import org.koitharu.kotatsu.reader.domain.PageLoader
|
import org.koitharu.kotatsu.reader.domain.PageLoader
|
||||||
@@ -93,8 +96,16 @@ class ReaderConfigSheet :
|
|||||||
binding.buttonImageServer.setOnClickListener(this)
|
binding.buttonImageServer.setOnClickListener(this)
|
||||||
binding.buttonColorFilter.setOnClickListener(this)
|
binding.buttonColorFilter.setOnClickListener(this)
|
||||||
binding.buttonScrollTimer.setOnClickListener(this)
|
binding.buttonScrollTimer.setOnClickListener(this)
|
||||||
|
binding.buttonBookmark.setOnClickListener(this)
|
||||||
binding.switchDoubleReader.setOnCheckedChangeListener(this)
|
binding.switchDoubleReader.setOnCheckedChangeListener(this)
|
||||||
|
|
||||||
|
viewModel.isBookmarkAdded.observe(viewLifecycleOwner) {
|
||||||
|
binding.buttonBookmark.setText(if (it) R.string.bookmark_remove else R.string.bookmark_add)
|
||||||
|
binding.buttonBookmark.setCompoundDrawablesRelativeWithIntrinsicBounds(
|
||||||
|
if (it) R.drawable.ic_bookmark_checked else R.drawable.ic_bookmark, 0, 0, 0,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
viewLifecycleScope.launch {
|
viewLifecycleScope.launch {
|
||||||
val isAvailable = imageServerDelegate.isAvailable()
|
val isAvailable = imageServerDelegate.isAvailable()
|
||||||
if (isAvailable) {
|
if (isAvailable) {
|
||||||
@@ -120,7 +131,7 @@ class ReaderConfigSheet :
|
|||||||
}
|
}
|
||||||
|
|
||||||
R.id.button_scroll_timer -> {
|
R.id.button_scroll_timer -> {
|
||||||
findParentCallback(Callback::class.java)?.onScrollTimerClick() ?: return
|
findParentCallback(Callback::class.java)?.onScrollTimerClick(false) ?: return
|
||||||
dismissAllowingStateLoss()
|
dismissAllowingStateLoss()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -133,6 +144,10 @@ class ReaderConfigSheet :
|
|||||||
orientationHelper.isLandscape = !orientationHelper.isLandscape
|
orientationHelper.isLandscape = !orientationHelper.isLandscape
|
||||||
}
|
}
|
||||||
|
|
||||||
|
R.id.button_bookmark -> {
|
||||||
|
viewModel.toggleBookmark()
|
||||||
|
}
|
||||||
|
|
||||||
R.id.button_color_filter -> {
|
R.id.button_color_filter -> {
|
||||||
val page = viewModel.getCurrentPage() ?: return
|
val page = viewModel.getCurrentPage() ?: return
|
||||||
val manga = viewModel.getMangaOrNull() ?: return
|
val manga = viewModel.getMangaOrNull() ?: return
|
||||||
@@ -219,6 +234,8 @@ class ReaderConfigSheet :
|
|||||||
|
|
||||||
fun onSavePageClick()
|
fun onSavePageClick()
|
||||||
|
|
||||||
fun onScrollTimerClick()
|
fun onScrollTimerClick(isLongClick: Boolean)
|
||||||
|
|
||||||
|
fun onBookmarkClick()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,8 @@
|
|||||||
tools:layout_height="wrap_content"
|
tools:layout_height="wrap_content"
|
||||||
tools:layout_width="match_parent"
|
tools:layout_width="match_parent"
|
||||||
tools:orientation="horizontal"
|
tools:orientation="horizontal"
|
||||||
tools:parentTag="android.widget.LinearLayout">
|
tools:parentTag="android.widget.LinearLayout"
|
||||||
|
tools:style="?dockedToolbarStyle">
|
||||||
|
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
@@ -14,9 +15,10 @@
|
|||||||
|
|
||||||
<com.google.android.material.button.MaterialButton
|
<com.google.android.material.button.MaterialButton
|
||||||
android:id="@+id/button_prev"
|
android:id="@+id/button_prev"
|
||||||
style="@style/Widget.Kotatsu.IconButton.Action"
|
style="?materialIconButtonStyle"
|
||||||
android:layout_width="48dp"
|
android:layout_width="48dp"
|
||||||
android:layout_height="48dp"
|
android:layout_height="48dp"
|
||||||
|
android:layout_gravity="center"
|
||||||
android:contentDescription="@string/prev_chapter"
|
android:contentDescription="@string/prev_chapter"
|
||||||
app:icon="@drawable/ic_prev" />
|
app:icon="@drawable/ic_prev" />
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
@@ -39,9 +41,10 @@
|
|||||||
|
|
||||||
<com.google.android.material.button.MaterialButton
|
<com.google.android.material.button.MaterialButton
|
||||||
android:id="@+id/button_next"
|
android:id="@+id/button_next"
|
||||||
style="@style/Widget.Kotatsu.IconButton.Action"
|
style="?materialIconButtonStyle"
|
||||||
android:layout_width="48dp"
|
android:layout_width="48dp"
|
||||||
android:layout_height="48dp"
|
android:layout_height="48dp"
|
||||||
|
android:layout_gravity="center"
|
||||||
android:contentDescription="@string/next_chapter"
|
android:contentDescription="@string/next_chapter"
|
||||||
app:icon="@drawable/ic_next" />
|
app:icon="@drawable/ic_next" />
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
@@ -52,9 +55,10 @@
|
|||||||
|
|
||||||
<com.google.android.material.button.MaterialButton
|
<com.google.android.material.button.MaterialButton
|
||||||
android:id="@+id/button_save"
|
android:id="@+id/button_save"
|
||||||
style="@style/Widget.Kotatsu.IconButton.Action"
|
style="?materialIconButtonStyle"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="48dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="48dp"
|
||||||
|
android:layout_gravity="center"
|
||||||
android:contentDescription="@string/save_page"
|
android:contentDescription="@string/save_page"
|
||||||
app:icon="@drawable/ic_save" />
|
app:icon="@drawable/ic_save" />
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
@@ -65,10 +69,11 @@
|
|||||||
|
|
||||||
<com.google.android.material.button.MaterialButton
|
<com.google.android.material.button.MaterialButton
|
||||||
android:id="@+id/button_timer"
|
android:id="@+id/button_timer"
|
||||||
style="@style/Widget.Kotatsu.IconButton.Action"
|
style="?materialIconButtonStyle"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="48dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="48dp"
|
||||||
android:contentDescription="@string/save_page"
|
android:layout_gravity="center"
|
||||||
|
android:contentDescription="@string/automatic_scroll"
|
||||||
app:icon="@drawable/ic_timer" />
|
app:icon="@drawable/ic_timer" />
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
|
|
||||||
@@ -78,9 +83,10 @@
|
|||||||
|
|
||||||
<com.google.android.material.button.MaterialButton
|
<com.google.android.material.button.MaterialButton
|
||||||
android:id="@+id/button_screen_rotation"
|
android:id="@+id/button_screen_rotation"
|
||||||
style="@style/Widget.Kotatsu.IconButton.Action"
|
style="?materialIconButtonStyle"
|
||||||
android:layout_width="48dp"
|
android:layout_width="48dp"
|
||||||
android:layout_height="48dp"
|
android:layout_height="48dp"
|
||||||
|
android:layout_gravity="center"
|
||||||
android:contentDescription="@string/screen_orientation"
|
android:contentDescription="@string/screen_orientation"
|
||||||
app:icon="@drawable/ic_screen_rotation" />
|
app:icon="@drawable/ic_screen_rotation" />
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
@@ -90,10 +96,25 @@
|
|||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
<com.google.android.material.button.MaterialButton
|
<com.google.android.material.button.MaterialButton
|
||||||
android:id="@+id/button_pages_thumbs"
|
android:id="@+id/button_bookmark"
|
||||||
style="@style/Widget.Kotatsu.IconButton.Action"
|
style="?materialIconButtonStyle"
|
||||||
android:layout_width="48dp"
|
android:layout_width="48dp"
|
||||||
android:layout_height="48dp"
|
android:layout_height="48dp"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:contentDescription="@string/bookmark_add"
|
||||||
|
app:icon="@drawable/ic_bookmark" />
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<com.google.android.material.button.MaterialButton
|
||||||
|
android:id="@+id/button_pages_thumbs"
|
||||||
|
style="?materialIconButtonStyle"
|
||||||
|
android:layout_width="48dp"
|
||||||
|
android:layout_height="48dp"
|
||||||
|
android:layout_gravity="center"
|
||||||
android:contentDescription="@string/pages"
|
android:contentDescription="@string/pages"
|
||||||
app:icon="@drawable/ic_grid" />
|
app:icon="@drawable/ic_grid" />
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
@@ -104,9 +125,10 @@
|
|||||||
|
|
||||||
<com.google.android.material.button.MaterialButton
|
<com.google.android.material.button.MaterialButton
|
||||||
android:id="@+id/button_options"
|
android:id="@+id/button_options"
|
||||||
style="@style/Widget.Kotatsu.IconButton.Action"
|
style="?materialIconButtonStyle"
|
||||||
android:layout_width="48dp"
|
android:layout_width="48dp"
|
||||||
android:layout_height="48dp"
|
android:layout_height="48dp"
|
||||||
|
android:layout_gravity="center"
|
||||||
android:contentDescription="@string/options"
|
android:contentDescription="@string/options"
|
||||||
app:icon="@drawable/abc_ic_menu_overflow_material" />
|
app:icon="@drawable/abc_ic_menu_overflow_material" />
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
|
|||||||
@@ -38,32 +38,27 @@
|
|||||||
app:drawableStartCompat="@drawable/ic_save" />
|
app:drawableStartCompat="@drawable/ic_save" />
|
||||||
|
|
||||||
<org.koitharu.kotatsu.core.ui.widgets.ListItemTextView
|
<org.koitharu.kotatsu.core.ui.widgets.ListItemTextView
|
||||||
android:id="@+id/button_screen_rotate"
|
android:id="@+id/button_bookmark"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?android:listPreferredItemHeightSmall"
|
android:layout_height="?android:listPreferredItemHeightSmall"
|
||||||
android:drawablePadding="?android:listPreferredItemPaddingStart"
|
android:drawablePadding="?android:listPreferredItemPaddingStart"
|
||||||
android:paddingStart="?android:listPreferredItemPaddingStart"
|
android:paddingStart="?android:listPreferredItemPaddingStart"
|
||||||
android:paddingEnd="?android:listPreferredItemPaddingEnd"
|
android:paddingEnd="?android:listPreferredItemPaddingEnd"
|
||||||
android:text="@string/rotate_screen"
|
android:text="@string/bookmark_add"
|
||||||
android:textAppearance="?attr/textAppearanceButton"
|
android:textAppearance="?attr/textAppearanceButton"
|
||||||
android:visibility="gone"
|
app:drawableStartCompat="@drawable/ic_bookmark" />
|
||||||
app:drawableStartCompat="@drawable/ic_screen_rotation"
|
|
||||||
tools:visibility="visible" />
|
|
||||||
|
|
||||||
<com.google.android.material.materialswitch.MaterialSwitch
|
<org.koitharu.kotatsu.core.ui.widgets.ListItemTextView
|
||||||
android:id="@+id/switch_screen_lock_rotation"
|
android:id="@+id/button_image_server"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?android:listPreferredItemHeightSmall"
|
android:layout_height="?android:listPreferredItemHeightSmall"
|
||||||
android:drawablePadding="?android:listPreferredItemPaddingStart"
|
android:drawablePadding="?android:listPreferredItemPaddingStart"
|
||||||
android:ellipsize="end"
|
|
||||||
android:paddingStart="?android:listPreferredItemPaddingStart"
|
android:paddingStart="?android:listPreferredItemPaddingStart"
|
||||||
android:paddingEnd="?android:listPreferredItemPaddingEnd"
|
android:paddingEnd="?android:listPreferredItemPaddingEnd"
|
||||||
android:singleLine="true"
|
android:text="@string/image_server"
|
||||||
android:text="@string/lock_screen_rotation"
|
|
||||||
android:textAppearance="?attr/textAppearanceButton"
|
android:textAppearance="?attr/textAppearanceButton"
|
||||||
android:textColor="?colorOnSurfaceVariant"
|
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
app:drawableStartCompat="@drawable/ic_screen_rotation_lock"
|
app:drawableStartCompat="@drawable/ic_images"
|
||||||
tools:visibility="visible" />
|
tools:visibility="visible" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
@@ -137,15 +132,42 @@
|
|||||||
android:layout_height="?android:listPreferredItemHeightSmall"
|
android:layout_height="?android:listPreferredItemHeightSmall"
|
||||||
android:layout_marginTop="@dimen/margin_normal"
|
android:layout_marginTop="@dimen/margin_normal"
|
||||||
android:drawablePadding="?android:listPreferredItemPaddingStart"
|
android:drawablePadding="?android:listPreferredItemPaddingStart"
|
||||||
android:ellipsize="end"
|
|
||||||
android:paddingStart="?android:listPreferredItemPaddingStart"
|
android:paddingStart="?android:listPreferredItemPaddingStart"
|
||||||
android:paddingEnd="?android:listPreferredItemPaddingEnd"
|
android:paddingEnd="?android:listPreferredItemPaddingEnd"
|
||||||
android:singleLine="true"
|
|
||||||
android:text="@string/use_two_pages_landscape"
|
android:text="@string/use_two_pages_landscape"
|
||||||
android:textAppearance="?attr/textAppearanceButton"
|
android:textAppearance="?attr/textAppearanceButton"
|
||||||
android:textColor="?colorOnSurfaceVariant"
|
android:textColor="?colorOnSurfaceVariant"
|
||||||
app:drawableStartCompat="@drawable/ic_split_horizontal" />
|
app:drawableStartCompat="@drawable/ic_split_horizontal" />
|
||||||
|
|
||||||
|
<org.koitharu.kotatsu.core.ui.widgets.ListItemTextView
|
||||||
|
android:id="@+id/button_screen_rotate"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="?android:listPreferredItemHeightSmall"
|
||||||
|
android:drawablePadding="?android:listPreferredItemPaddingStart"
|
||||||
|
android:paddingStart="?android:listPreferredItemPaddingStart"
|
||||||
|
android:paddingEnd="?android:listPreferredItemPaddingEnd"
|
||||||
|
android:text="@string/rotate_screen"
|
||||||
|
android:textAppearance="?attr/textAppearanceButton"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:drawableStartCompat="@drawable/ic_screen_rotation"
|
||||||
|
tools:visibility="visible" />
|
||||||
|
|
||||||
|
<com.google.android.material.materialswitch.MaterialSwitch
|
||||||
|
android:id="@+id/switch_screen_lock_rotation"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="?android:listPreferredItemHeightSmall"
|
||||||
|
android:drawablePadding="?android:listPreferredItemPaddingStart"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:paddingStart="?android:listPreferredItemPaddingStart"
|
||||||
|
android:paddingEnd="?android:listPreferredItemPaddingEnd"
|
||||||
|
android:singleLine="true"
|
||||||
|
android:text="@string/lock_screen_rotation"
|
||||||
|
android:textAppearance="?attr/textAppearanceButton"
|
||||||
|
android:textColor="?colorOnSurfaceVariant"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:drawableStartCompat="@drawable/ic_screen_rotation_lock"
|
||||||
|
tools:visibility="visible" />
|
||||||
|
|
||||||
<org.koitharu.kotatsu.core.ui.widgets.ListItemTextView
|
<org.koitharu.kotatsu.core.ui.widgets.ListItemTextView
|
||||||
android:id="@+id/button_scroll_timer"
|
android:id="@+id/button_scroll_timer"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
@@ -168,19 +190,6 @@
|
|||||||
android:textAppearance="?attr/textAppearanceButton"
|
android:textAppearance="?attr/textAppearanceButton"
|
||||||
app:drawableStartCompat="@drawable/ic_appearance" />
|
app:drawableStartCompat="@drawable/ic_appearance" />
|
||||||
|
|
||||||
<org.koitharu.kotatsu.core.ui.widgets.ListItemTextView
|
|
||||||
android:id="@+id/button_image_server"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="?android:listPreferredItemHeightSmall"
|
|
||||||
android:drawablePadding="?android:listPreferredItemPaddingStart"
|
|
||||||
android:paddingStart="?android:listPreferredItemPaddingStart"
|
|
||||||
android:paddingEnd="?android:listPreferredItemPaddingEnd"
|
|
||||||
android:text="@string/image_server"
|
|
||||||
android:textAppearance="?attr/textAppearanceButton"
|
|
||||||
android:visibility="gone"
|
|
||||||
app:drawableStartCompat="@drawable/ic_images"
|
|
||||||
tools:visibility="visible" />
|
|
||||||
|
|
||||||
<org.koitharu.kotatsu.core.ui.widgets.ListItemTextView
|
<org.koitharu.kotatsu.core.ui.widgets.ListItemTextView
|
||||||
android:id="@+id/button_settings"
|
android:id="@+id/button_settings"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|||||||
@@ -4,10 +4,10 @@
|
|||||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_bookmark"
|
android:id="@+id/action_info"
|
||||||
android:enabled="false"
|
android:icon="@drawable/ic_info_outline"
|
||||||
android:icon="@drawable/ic_bookmark"
|
android:title="@string/details"
|
||||||
android:title="@string/bookmark_add"
|
android:visible="false"
|
||||||
app:showAsAction="always" />
|
app:showAsAction="always" />
|
||||||
|
|
||||||
</menu>
|
</menu>
|
||||||
|
|||||||
@@ -132,6 +132,7 @@
|
|||||||
<item>@string/screen_orientation</item>
|
<item>@string/screen_orientation</item>
|
||||||
<item>@string/save_page</item>
|
<item>@string/save_page</item>
|
||||||
<item>@string/automatic_scroll</item>
|
<item>@string/automatic_scroll</item>
|
||||||
|
<item>@string/bookmark_add</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="list_badges" translatable="false">
|
<string-array name="list_badges" translatable="false">
|
||||||
<item>@string/favourites</item>
|
<item>@string/favourites</item>
|
||||||
|
|||||||
@@ -118,10 +118,6 @@
|
|||||||
<item name="android:minHeight">42dp</item>
|
<item name="android:minHeight">42dp</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="Widget.Kotatsu.IconButton.Action" parent="Widget.Material3.Button.IconButton">
|
|
||||||
<item name="iconTint">?colorControlNormal</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style name="Widget.Kotatsu.ToggleButton" parent="Widget.Material3.Button.OutlinedButton">
|
<style name="Widget.Kotatsu.ToggleButton" parent="Widget.Material3.Button.OutlinedButton">
|
||||||
<item name="android:checkable">true</item>
|
<item name="android:checkable">true</item>
|
||||||
<item name="android:textAlignment">textStart</item>
|
<item name="android:textAlignment">textStart</item>
|
||||||
@@ -132,8 +128,6 @@
|
|||||||
<item name="android:textAlignment">center</item>
|
<item name="android:textAlignment">center</item>
|
||||||
<item name="iconPadding">2dp</item>
|
<item name="iconPadding">2dp</item>
|
||||||
<item name="android:singleLine">false</item>
|
<item name="android:singleLine">false</item>
|
||||||
<item name="android:lines">2</item>
|
|
||||||
<item name="android:maxLines">2</item>
|
|
||||||
<item name="iconGravity">top</item>
|
<item name="iconGravity">top</item>
|
||||||
<item name="android:paddingTop">12dp</item>
|
<item name="android:paddingTop">12dp</item>
|
||||||
<item name="android:paddingBottom">10dp</item>
|
<item name="android:paddingBottom">10dp</item>
|
||||||
|
|||||||
Reference in New Issue
Block a user