Use view binding for sheets

This commit is contained in:
arkon 2020-07-12 16:53:46 -04:00
parent 4809d06d04
commit dc43e41896
5 changed files with 95 additions and 134 deletions

View file

@ -3,15 +3,13 @@ package eu.kanade.tachiyomi.ui.browse.source.browse
import android.app.Activity
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.ViewGroup
import com.google.android.material.bottomsheet.BottomSheetDialog
import eu.davidea.flexibleadapter.FlexibleAdapter
import eu.davidea.flexibleadapter.items.IFlexible
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.util.view.inflate
import eu.kanade.tachiyomi.databinding.SourceFilterSheetBinding
import eu.kanade.tachiyomi.widget.SimpleNavigationView
import kotlinx.android.synthetic.main.source_filter_sheet.view.filter_btn
import kotlinx.android.synthetic.main.source_filter_sheet.view.reset_btn
class SourceFilterSheet(
activity: Activity,
@ -46,14 +44,15 @@ class SourceFilterSheet(
.setDisplayHeadersAtStartUp(true)
.setStickyHeaders(true)
private val binding = SourceFilterSheetBinding.inflate(LayoutInflater.from(context), null, false)
init {
recycler.adapter = adapter
recycler.setHasFixedSize(true)
val view = inflate(R.layout.source_filter_sheet)
((view as ViewGroup).getChildAt(1) as ViewGroup).addView(recycler)
addView(view)
filter_btn.setOnClickListener { onFilterClicked() }
reset_btn.setOnClickListener { onResetClicked() }
(binding.root.getChildAt(1) as ViewGroup).addView(recycler)
addView(binding.root)
binding.filterBtn.setOnClickListener { onFilterClicked() }
binding.resetBtn.setOnClickListener { onResetClicked() }
}
}
}

View file

@ -1,28 +1,14 @@
package eu.kanade.tachiyomi.ui.reader
import android.view.View
import android.view.ViewGroup
import android.widget.SeekBar
import androidx.annotation.ColorInt
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.databinding.ReaderColorFilterSheetBinding
import eu.kanade.tachiyomi.widget.IgnoreFirstSpinnerListener
import eu.kanade.tachiyomi.widget.SimpleSeekBarListener
import kotlinx.android.synthetic.main.reader_color_filter_sheet.brightness_seekbar
import kotlinx.android.synthetic.main.reader_color_filter_sheet.color_filter_mode
import kotlinx.android.synthetic.main.reader_color_filter_sheet.custom_brightness
import kotlinx.android.synthetic.main.reader_color_filter_sheet.seekbar_color_filter_alpha
import kotlinx.android.synthetic.main.reader_color_filter_sheet.seekbar_color_filter_blue
import kotlinx.android.synthetic.main.reader_color_filter_sheet.seekbar_color_filter_green
import kotlinx.android.synthetic.main.reader_color_filter_sheet.seekbar_color_filter_red
import kotlinx.android.synthetic.main.reader_color_filter_sheet.switch_color_filter
import kotlinx.android.synthetic.main.reader_color_filter_sheet.txt_brightness_seekbar_value
import kotlinx.android.synthetic.main.reader_color_filter_sheet.txt_color_filter_alpha_value
import kotlinx.android.synthetic.main.reader_color_filter_sheet.txt_color_filter_blue_value
import kotlinx.android.synthetic.main.reader_color_filter_sheet.txt_color_filter_green_value
import kotlinx.android.synthetic.main.reader_color_filter_sheet.txt_color_filter_red_value
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.sample
@ -37,57 +23,58 @@ class ReaderColorFilterSheet(private val activity: ReaderActivity) : BottomSheet
private var sheetBehavior: BottomSheetBehavior<*>? = null
init {
val view = activity.layoutInflater.inflate(R.layout.reader_color_filter_sheet, null)
setContentView(view)
private val binding = ReaderColorFilterSheetBinding.inflate(activity.layoutInflater, null, false)
sheetBehavior = BottomSheetBehavior.from(view.parent as ViewGroup)
init {
setContentView(binding.root)
sheetBehavior = BottomSheetBehavior.from(binding.root.parent as ViewGroup)
preferences.colorFilter().asFlow()
.onEach { setColorFilter(it, view) }
.onEach { setColorFilter(it) }
.launchIn(activity.scope)
preferences.colorFilterMode().asFlow()
.onEach { setColorFilter(preferences.colorFilter().get(), view) }
.onEach { setColorFilter(preferences.colorFilter().get()) }
.launchIn(activity.scope)
preferences.customBrightness().asFlow()
.onEach { setCustomBrightness(it, view) }
.onEach { setCustomBrightness(it) }
.launchIn(activity.scope)
// Get color and update values
val color = preferences.colorFilterValue().get()
val brightness = preferences.customBrightnessValue().get()
val argb = setValues(color, view)
val argb = setValues(color)
// Set brightness value
txt_brightness_seekbar_value.text = brightness.toString()
brightness_seekbar.progress = brightness
binding.txtBrightnessSeekbarValue.text = brightness.toString()
binding.brightnessSeekbar.progress = brightness
// Initialize seekBar progress
seekbar_color_filter_alpha.progress = argb[0]
seekbar_color_filter_red.progress = argb[1]
seekbar_color_filter_green.progress = argb[2]
seekbar_color_filter_blue.progress = argb[3]
binding.seekbarColorFilterAlpha.progress = argb[0]
binding.seekbarColorFilterRed.progress = argb[1]
binding.seekbarColorFilterGreen.progress = argb[2]
binding.seekbarColorFilterBlue.progress = argb[3]
// Set listeners
switch_color_filter.isChecked = preferences.colorFilter().get()
switch_color_filter.setOnCheckedChangeListener { _, isChecked ->
binding.switchColorFilter.isChecked = preferences.colorFilter().get()
binding.switchColorFilter.setOnCheckedChangeListener { _, isChecked ->
preferences.colorFilter().set(isChecked)
}
custom_brightness.isChecked = preferences.customBrightness().get()
custom_brightness.setOnCheckedChangeListener { _, isChecked ->
binding.customBrightness.isChecked = preferences.customBrightness().get()
binding.customBrightness.setOnCheckedChangeListener { _, isChecked ->
preferences.customBrightness().set(isChecked)
}
color_filter_mode.onItemSelectedListener = IgnoreFirstSpinnerListener { position ->
binding.colorFilterMode.onItemSelectedListener = IgnoreFirstSpinnerListener { position ->
preferences.colorFilterMode().set(position)
}
color_filter_mode.setSelection(preferences.colorFilterMode().get(), false)
binding.colorFilterMode.setSelection(preferences.colorFilterMode().get(), false)
seekbar_color_filter_alpha.setOnSeekBarChangeListener(object : SimpleSeekBarListener() {
binding.seekbarColorFilterAlpha.setOnSeekBarChangeListener(object : SimpleSeekBarListener() {
override fun onProgressChanged(seekBar: SeekBar, value: Int, fromUser: Boolean) {
if (fromUser) {
setColorValue(value, ALPHA_MASK, 24)
@ -95,7 +82,7 @@ class ReaderColorFilterSheet(private val activity: ReaderActivity) : BottomSheet
}
})
seekbar_color_filter_red.setOnSeekBarChangeListener(object : SimpleSeekBarListener() {
binding.seekbarColorFilterRed.setOnSeekBarChangeListener(object : SimpleSeekBarListener() {
override fun onProgressChanged(seekBar: SeekBar, value: Int, fromUser: Boolean) {
if (fromUser) {
setColorValue(value, RED_MASK, 16)
@ -103,7 +90,7 @@ class ReaderColorFilterSheet(private val activity: ReaderActivity) : BottomSheet
}
})
seekbar_color_filter_green.setOnSeekBarChangeListener(object : SimpleSeekBarListener() {
binding.seekbarColorFilterGreen.setOnSeekBarChangeListener(object : SimpleSeekBarListener() {
override fun onProgressChanged(seekBar: SeekBar, value: Int, fromUser: Boolean) {
if (fromUser) {
setColorValue(value, GREEN_MASK, 8)
@ -111,7 +98,7 @@ class ReaderColorFilterSheet(private val activity: ReaderActivity) : BottomSheet
}
})
seekbar_color_filter_blue.setOnSeekBarChangeListener(object : SimpleSeekBarListener() {
binding.seekbarColorFilterBlue.setOnSeekBarChangeListener(object : SimpleSeekBarListener() {
override fun onProgressChanged(seekBar: SeekBar, value: Int, fromUser: Boolean) {
if (fromUser) {
setColorValue(value, BLUE_MASK, 0)
@ -119,7 +106,7 @@ class ReaderColorFilterSheet(private val activity: ReaderActivity) : BottomSheet
}
})
brightness_seekbar.setOnSeekBarChangeListener(object : SimpleSeekBarListener() {
binding.brightnessSeekbar.setOnSeekBarChangeListener(object : SimpleSeekBarListener() {
override fun onProgressChanged(seekBar: SeekBar, value: Int, fromUser: Boolean) {
if (fromUser) {
preferences.customBrightnessValue().set(value)
@ -137,40 +124,37 @@ class ReaderColorFilterSheet(private val activity: ReaderActivity) : BottomSheet
/**
* Set enabled status of seekBars belonging to color filter
* @param enabled determines if seekBar gets enabled
* @param view view of the dialog
*/
private fun setColorFilterSeekBar(enabled: Boolean, view: View) = with(view) {
seekbar_color_filter_red.isEnabled = enabled
seekbar_color_filter_green.isEnabled = enabled
seekbar_color_filter_blue.isEnabled = enabled
seekbar_color_filter_alpha.isEnabled = enabled
private fun setColorFilterSeekBar(enabled: Boolean) {
binding.seekbarColorFilterRed.isEnabled = enabled
binding.seekbarColorFilterGreen.isEnabled = enabled
binding.seekbarColorFilterBlue.isEnabled = enabled
binding.seekbarColorFilterAlpha.isEnabled = enabled
}
/**
* Set enabled status of seekBars belonging to custom brightness
* @param enabled value which determines if seekBar gets enabled
* @param view view of the dialog
*/
private fun setCustomBrightnessSeekBar(enabled: Boolean, view: View) = with(view) {
brightness_seekbar.isEnabled = enabled
private fun setCustomBrightnessSeekBar(enabled: Boolean) {
binding.brightnessSeekbar.isEnabled = enabled
}
/**
* Set the text value's of color filter
* @param color integer containing color information
* @param view view of the dialog
*/
fun setValues(color: Int, view: View): Array<Int> {
fun setValues(color: Int): Array<Int> {
val alpha = getAlphaFromColor(color)
val red = getRedFromColor(color)
val green = getGreenFromColor(color)
val blue = getBlueFromColor(color)
// Initialize values
txt_color_filter_alpha_value.text = alpha.toString()
txt_color_filter_red_value.text = red.toString()
txt_color_filter_green_value.text = green.toString()
txt_color_filter_blue_value.text = blue.toString()
binding.txtColorFilterAlphaValue.text = alpha.toString()
binding.txtColorFilterRedValue.text = red.toString()
binding.txtColorFilterGreenValue.text = green.toString()
binding.txtColorFilterBlueValue.text = blue.toString()
return arrayOf(alpha, red, green, blue)
}
@ -178,18 +162,17 @@ class ReaderColorFilterSheet(private val activity: ReaderActivity) : BottomSheet
/**
* Manages the custom brightness value subscription
* @param enabled determines if the subscription get (un)subscribed
* @param view view of the dialog
*/
private fun setCustomBrightness(enabled: Boolean, view: View) {
private fun setCustomBrightness(enabled: Boolean) {
if (enabled) {
preferences.customBrightnessValue().asFlow()
.sample(100)
.onEach { setCustomBrightnessValue(it, view) }
.onEach { setCustomBrightnessValue(it) }
.launchIn(activity.scope)
} else {
setCustomBrightnessValue(0, view, true)
setCustomBrightnessValue(0, true)
}
setCustomBrightnessSeekBar(enabled, view)
setCustomBrightnessSeekBar(enabled)
}
/**
@ -198,34 +181,32 @@ class ReaderColorFilterSheet(private val activity: ReaderActivity) : BottomSheet
* From 1 to 100 it sets that value as brightness.
* 0 sets system brightness and hides the overlay.
*/
private fun setCustomBrightnessValue(value: Int, view: View, isDisabled: Boolean = false) = with(view) {
private fun setCustomBrightnessValue(value: Int, isDisabled: Boolean = false) {
if (!isDisabled) {
txt_brightness_seekbar_value.text = value.toString()
binding.txtBrightnessSeekbarValue.text = value.toString()
}
}
/**
* Manages the color filter value subscription
* @param enabled determines if the subscription get (un)subscribed
* @param view view of the dialog
*/
private fun setColorFilter(enabled: Boolean, view: View) {
private fun setColorFilter(enabled: Boolean) {
if (enabled) {
preferences.colorFilterValue().asFlow()
.sample(100)
.onEach { setColorFilterValue(it, view) }
.onEach { setColorFilterValue(it) }
.launchIn(activity.scope)
}
setColorFilterSeekBar(enabled, view)
setColorFilterSeekBar(enabled)
}
/**
* Sets the color filter overlay of the screen. Determined by HEX of integer
* @param color hex of color.
* @param view view of the dialog
*/
private fun setColorFilterValue(@ColorInt color: Int, view: View) = with(view) {
setValues(color, view)
private fun setColorFilterValue(@ColorInt color: Int) {
setValues(color)
}
/**
@ -245,7 +226,7 @@ class ReaderColorFilterSheet(private val activity: ReaderActivity) : BottomSheet
* @param color color hex as int
* @return alpha of color
*/
fun getAlphaFromColor(color: Int): Int {
private fun getAlphaFromColor(color: Int): Int {
return color shr 24 and 0xFF
}
@ -254,7 +235,7 @@ class ReaderColorFilterSheet(private val activity: ReaderActivity) : BottomSheet
* @param color color hex as int
* @return red of color
*/
fun getRedFromColor(color: Int): Int {
private fun getRedFromColor(color: Int): Int {
return color shr 16 and 0xFF
}
@ -263,7 +244,7 @@ class ReaderColorFilterSheet(private val activity: ReaderActivity) : BottomSheet
* @param color color hex as int
* @return green of color
*/
fun getGreenFromColor(color: Int): Int {
private fun getGreenFromColor(color: Int): Int {
return color shr 8 and 0xFF
}
@ -272,7 +253,7 @@ class ReaderColorFilterSheet(private val activity: ReaderActivity) : BottomSheet
* @param color color hex as int
* @return blue of color
*/
fun getBlueFromColor(color: Int): Int {
private fun getBlueFromColor(color: Int): Int {
return color and 0xFF
}

View file

@ -5,11 +5,9 @@ import android.view.ViewGroup
import com.afollestad.materialdialogs.MaterialDialog
import com.google.android.material.bottomsheet.BottomSheetDialog
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.databinding.ReaderPageSheetBinding
import eu.kanade.tachiyomi.source.model.Page
import eu.kanade.tachiyomi.ui.reader.model.ReaderPage
import kotlinx.android.synthetic.main.reader_page_sheet.save_layout
import kotlinx.android.synthetic.main.reader_page_sheet.set_as_cover_layout
import kotlinx.android.synthetic.main.reader_page_sheet.share_layout
/**
* Sheet to show when a page is long clicked.
@ -19,14 +17,14 @@ class ReaderPageSheet(
private val page: ReaderPage
) : BottomSheetDialog(activity) {
private val view = activity.layoutInflater.inflate(R.layout.reader_page_sheet, null)
private val binding = ReaderPageSheetBinding.inflate(activity.layoutInflater, null, false)
init {
setContentView(view)
setContentView(binding.root)
set_as_cover_layout.setOnClickListener { setAsCover() }
share_layout.setOnClickListener { share() }
save_layout.setOnClickListener { save() }
binding.setAsCoverLayout.setOnClickListener { setAsCover() }
binding.shareLayout.setOnClickListener { share() }
binding.saveLayout.setOnClickListener { save() }
}
override fun onCreate(savedInstanceState: Bundle?) {

View file

@ -9,30 +9,13 @@ import com.google.android.material.bottomsheet.BottomSheetDialog
import com.tfcporciuncula.flow.Preference
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.databinding.ReaderSettingsSheetBinding
import eu.kanade.tachiyomi.ui.reader.viewer.pager.PagerViewer
import eu.kanade.tachiyomi.ui.reader.viewer.webtoon.WebtoonViewer
import eu.kanade.tachiyomi.util.view.gone
import eu.kanade.tachiyomi.util.view.invisible
import eu.kanade.tachiyomi.util.view.visible
import eu.kanade.tachiyomi.widget.IgnoreFirstSpinnerListener
import kotlinx.android.synthetic.main.reader_settings_sheet.always_show_chapter_transition
import kotlinx.android.synthetic.main.reader_settings_sheet.background_color
import kotlinx.android.synthetic.main.reader_settings_sheet.crop_borders
import kotlinx.android.synthetic.main.reader_settings_sheet.cutout_short
import kotlinx.android.synthetic.main.reader_settings_sheet.fullscreen
import kotlinx.android.synthetic.main.reader_settings_sheet.keepscreen
import kotlinx.android.synthetic.main.reader_settings_sheet.long_tap
import kotlinx.android.synthetic.main.reader_settings_sheet.navigation_prefs_group
import kotlinx.android.synthetic.main.reader_settings_sheet.page_transitions
import kotlinx.android.synthetic.main.reader_settings_sheet.pager_prefs_group
import kotlinx.android.synthetic.main.reader_settings_sheet.rotation_mode
import kotlinx.android.synthetic.main.reader_settings_sheet.scale_type
import kotlinx.android.synthetic.main.reader_settings_sheet.show_page_number
import kotlinx.android.synthetic.main.reader_settings_sheet.tapping_inverted
import kotlinx.android.synthetic.main.reader_settings_sheet.viewer
import kotlinx.android.synthetic.main.reader_settings_sheet.webtoon_prefs_group
import kotlinx.android.synthetic.main.reader_settings_sheet.webtoon_side_padding
import kotlinx.android.synthetic.main.reader_settings_sheet.zoom_start
import uy.kohesive.injekt.injectLazy
/**
@ -42,11 +25,11 @@ class ReaderSettingsSheet(private val activity: ReaderActivity) : BottomSheetDia
private val preferences by injectLazy<PreferencesHelper>()
private val binding = ReaderSettingsSheetBinding.inflate(activity.layoutInflater, null, false)
init {
// Use activity theme for this layout
val view = activity.layoutInflater.inflate(R.layout.reader_settings_sheet, null)
val scroll = NestedScrollView(activity)
scroll.addView(view)
scroll.addView(binding.root)
setContentView(scroll)
}
@ -69,7 +52,7 @@ class ReaderSettingsSheet(private val activity: ReaderActivity) : BottomSheetDia
* Init general reader preferences.
*/
private fun initGeneralPreferences() {
viewer.onItemSelectedListener = IgnoreFirstSpinnerListener { position ->
binding.viewer.onItemSelectedListener = IgnoreFirstSpinnerListener { position ->
activity.presenter.setMangaViewer(position)
val mangaViewer = activity.presenter.getMangaViewer()
@ -79,39 +62,39 @@ class ReaderSettingsSheet(private val activity: ReaderActivity) : BottomSheetDia
initPagerPreferences()
}
}
viewer.setSelection(activity.presenter.manga?.viewer ?: 0, false)
binding.viewer.setSelection(activity.presenter.manga?.viewer ?: 0, false)
rotation_mode.bindToPreference(preferences.rotation(), 1)
background_color.bindToIntPreference(preferences.readerTheme(), R.array.reader_themes_values)
show_page_number.bindToPreference(preferences.showPageNumber())
fullscreen.bindToPreference(preferences.fullscreen())
cutout_short.bindToPreference(preferences.cutoutShort())
keepscreen.bindToPreference(preferences.keepScreenOn())
long_tap.bindToPreference(preferences.readWithLongTap())
always_show_chapter_transition.bindToPreference(preferences.alwaysShowChapterTransition())
crop_borders.bindToPreference(preferences.cropBorders())
page_transitions.bindToPreference(preferences.pageTransitions())
binding.rotationMode.bindToPreference(preferences.rotation(), 1)
binding.backgroundColor.bindToIntPreference(preferences.readerTheme(), R.array.reader_themes_values)
binding.showPageNumber.bindToPreference(preferences.showPageNumber())
binding.fullscreen.bindToPreference(preferences.fullscreen())
binding.cutoutShort.bindToPreference(preferences.cutoutShort())
binding.keepscreen.bindToPreference(preferences.keepScreenOn())
binding.longTap.bindToPreference(preferences.readWithLongTap())
binding.alwaysShowChapterTransition.bindToPreference(preferences.alwaysShowChapterTransition())
binding.cropBorders.bindToPreference(preferences.cropBorders())
binding.pageTransitions.bindToPreference(preferences.pageTransitions())
}
/**
* Init the preferences for the pager reader.
*/
private fun initPagerPreferences() {
webtoon_prefs_group.invisible()
pager_prefs_group.visible()
binding.webtoonPrefsGroup.invisible()
binding.pagerPrefsGroup.visible()
scale_type.bindToPreference(preferences.imageScaleType(), 1)
zoom_start.bindToPreference(preferences.zoomStart(), 1)
binding.scaleType.bindToPreference(preferences.imageScaleType(), 1)
binding.zoomStart.bindToPreference(preferences.zoomStart(), 1)
}
/**
* Init the preferences for the webtoon reader.
*/
private fun initWebtoonPreferences() {
pager_prefs_group.invisible()
webtoon_prefs_group.visible()
binding.pagerPrefsGroup.invisible()
binding.webtoonPrefsGroup.visible()
webtoon_side_padding.bindToIntPreference(preferences.webtoonSidePadding(), R.array.webtoon_side_padding_values)
binding.webtoonSidePadding.bindToIntPreference(preferences.webtoonSidePadding(), R.array.webtoon_side_padding_values)
}
/**
@ -119,10 +102,10 @@ class ReaderSettingsSheet(private val activity: ReaderActivity) : BottomSheetDia
*/
private fun initNavigationPreferences() {
if (!preferences.readWithTapping().get()) {
navigation_prefs_group.gone()
binding.navigationPrefsGroup.gone()
}
tapping_inverted.bindToPreference(preferences.readWithTappingInverted())
binding.tappingInverted.bindToPreference(preferences.readWithTappingInverted())
}
/**

View file

@ -244,8 +244,8 @@
<string name="pref_true_color">32-bit color</string>
<string name="pref_true_color_summary">Reduces banding, but impacts performance</string>
<string name="pref_crop_borders">Crop borders</string>
<string name="pref_custom_brightness">Use custom brightness</string>
<string name="pref_custom_color_filter">Use custom color filter</string>
<string name="pref_custom_brightness">Custom brightness</string>
<string name="pref_custom_color_filter">Custom color filter</string>
<string name="pref_color_filter_mode">Color filter blend mode</string>
<string name="filter_mode_default">Default</string>
<string name="filter_mode_overlay">Overlay</string>