From d853bb2c627f801e30917f95c8c666b5c2aaa803 Mon Sep 17 00:00:00 2001 From: Koitharu Date: Sat, 13 Aug 2022 16:27:53 +0300 Subject: [PATCH] Pages color filter implementation draft --- app/src/main/AndroidManifest.xml | 7 +- .../edit/FavouritesCategoryEditActivity.kt | 3 +- .../colorfilter/ColorFilterConfigActivity.kt | 108 ++++++++++++++++++ .../reader/ui/colorfilter/ShadowViewTarget.kt | 18 +++ .../ui/config/ReaderConfigBottomSheet.kt | 6 + .../main/res/drawable/ic_arrow_forward.xml | 15 ++- .../main/res/layout/activity_color_filter.xml | 108 ++++++++++++++++++ app/src/main/res/layout/item_main_header.xml | 14 --- .../main/res/layout/sheet_reader_config.xml | 11 ++ app/src/main/res/values/strings.xml | 1 + 10 files changed, 270 insertions(+), 21 deletions(-) create mode 100644 app/src/main/java/org/koitharu/kotatsu/reader/ui/colorfilter/ColorFilterConfigActivity.kt create mode 100644 app/src/main/java/org/koitharu/kotatsu/reader/ui/colorfilter/ShadowViewTarget.kt create mode 100644 app/src/main/res/layout/activity_color_filter.xml delete mode 100644 app/src/main/res/layout/item_main_header.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 22d6ecda5..5917b03bc 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -132,11 +132,14 @@ + + android:foregroundServiceType="dataSync" + android:stopWithTask="false" /> (), Slider.OnChangeListener { + + @Inject + lateinit var coil: ImageLoader + + @Inject + lateinit var mangaRepositoryFacotry: MangaRepository.Factory + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(ActivityColorFilterBinding.inflate(layoutInflater)) + supportActionBar?.run { + setDisplayHomeAsUpEnabled(true) + setHomeAsUpIndicator(materialR.drawable.abc_ic_clear_material) + } + binding.sliderLightness.addOnChangeListener(this) + binding.sliderSaturation.addOnChangeListener(this) + initPreview() + updateFilter() + } + + override fun onValueChange(slider: Slider, value: Float, fromUser: Boolean) { + updateFilter() + } + + override fun onWindowInsetsChanged(insets: Insets) { + binding.root.updatePadding( + left = insets.left, + right = insets.right, + ) + binding.scrollView.updatePadding( + bottom = insets.bottom, + ) + binding.toolbar.updateLayoutParams { + topMargin = insets.top + } + } + + private fun updateFilter() { + + fun Int.toColor() = Color.rgb(this, this, this) + + val cf = LightingColorFilter( + binding.sliderSaturation.value.roundToInt().toColor(), + binding.sliderLightness.value.roundToInt().toColor(), + ) + binding.imageViewAfter.colorFilter = cf + } + + private fun initPreview() { + val page = intent?.getParcelableExtra(EXTRA_PAGES)?.pages?.firstOrNull() + if (page == null) { + finishAfterTransition() + return + } + lifecycleScope.launch { + val repository = mangaRepositoryFacotry.create(page.source) + val url = repository.getPageUrl(page) + ImageRequest.Builder(this@ColorFilterConfigActivity) + .data(url) + .referer(page.referer) + .scale(Scale.FILL) + .size(ViewSizeResolver(binding.imageViewBefore)) + .allowRgb565(false) + .target(ShadowViewTarget(binding.imageViewBefore, binding.imageViewAfter)) + .enqueueWith(coil) + } + } + + companion object { + + private const val EXTRA_PAGES = "pages" + + fun newIntent(context: Context, page: MangaPage) = Intent(context, ColorFilterConfigActivity::class.java) + .putExtra(EXTRA_PAGES, ParcelableMangaPages(listOf(page))) + } +} diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/ui/colorfilter/ShadowViewTarget.kt b/app/src/main/java/org/koitharu/kotatsu/reader/ui/colorfilter/ShadowViewTarget.kt new file mode 100644 index 000000000..fcd05cbd3 --- /dev/null +++ b/app/src/main/java/org/koitharu/kotatsu/reader/ui/colorfilter/ShadowViewTarget.kt @@ -0,0 +1,18 @@ +package org.koitharu.kotatsu.reader.ui.colorfilter + +import android.graphics.drawable.Drawable +import android.widget.ImageView +import coil.target.ImageViewTarget + +class ShadowViewTarget( + view: ImageView, + private val shadowView: ImageView, +) : ImageViewTarget(view) { + + override var drawable: Drawable? + get() = super.drawable + set(value) { + super.drawable = value + shadowView.setImageDrawable(value?.constantState?.newDrawable()) + } +} diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/ui/config/ReaderConfigBottomSheet.kt b/app/src/main/java/org/koitharu/kotatsu/reader/ui/config/ReaderConfigBottomSheet.kt index e7f088c94..1ba6d2413 100644 --- a/app/src/main/java/org/koitharu/kotatsu/reader/ui/config/ReaderConfigBottomSheet.kt +++ b/app/src/main/java/org/koitharu/kotatsu/reader/ui/config/ReaderConfigBottomSheet.kt @@ -20,6 +20,7 @@ import org.koitharu.kotatsu.core.prefs.ReaderMode import org.koitharu.kotatsu.databinding.SheetReaderConfigBinding import org.koitharu.kotatsu.reader.ui.PageSaveContract import org.koitharu.kotatsu.reader.ui.ReaderViewModel +import org.koitharu.kotatsu.reader.ui.colorfilter.ColorFilterConfigActivity import org.koitharu.kotatsu.settings.SettingsActivity import org.koitharu.kotatsu.utils.ScreenOrientationHelper import org.koitharu.kotatsu.utils.ext.viewLifecycleScope @@ -59,6 +60,7 @@ class ReaderConfigBottomSheet : binding.buttonSavePage.setOnClickListener(this) binding.buttonScreenRotate.setOnClickListener(this) binding.buttonSettings.setOnClickListener(this) + binding.buttonColorFilter.setOnClickListener(this) binding.sliderTimer.addOnSliderTouchListener(this) binding.sliderTimer.setLabelFormatter(PageSwitchTimer.DelayLabelFormatter(view.resources)) @@ -80,6 +82,10 @@ class ReaderConfigBottomSheet : R.id.button_screen_rotate -> { orientationHelper?.toggleOrientation() } + R.id.button_color_filter -> { + val page = viewModel.getCurrentPage() ?: return + startActivity(ColorFilterConfigActivity.newIntent(v.context, page)) + } } } diff --git a/app/src/main/res/drawable/ic_arrow_forward.xml b/app/src/main/res/drawable/ic_arrow_forward.xml index 8d3848e66..d9a7ec3f8 100644 --- a/app/src/main/res/drawable/ic_arrow_forward.xml +++ b/app/src/main/res/drawable/ic_arrow_forward.xml @@ -1,5 +1,12 @@ - - + + diff --git a/app/src/main/res/layout/activity_color_filter.xml b/app/src/main/res/layout/activity_color_filter.xml new file mode 100644 index 000000000..782673328 --- /dev/null +++ b/app/src/main/res/layout/activity_color_filter.xml @@ -0,0 +1,108 @@ + + + + + +