mirror of
https://github.com/mihonapp/mihon.git
synced 2025-11-13 12:38:58 +01:00
Utilize more KTX extensions (#7348)
This commit is contained in:
@@ -2,14 +2,14 @@ package eu.kanade.tachiyomi.ui.base.controller
|
||||
|
||||
import android.app.Activity
|
||||
import android.os.Bundle
|
||||
import android.text.Editable
|
||||
import android.text.TextWatcher
|
||||
import android.text.style.CharacterStyle
|
||||
import android.view.Menu
|
||||
import android.view.MenuInflater
|
||||
import android.view.MenuItem
|
||||
import androidx.annotation.StringRes
|
||||
import androidx.appcompat.widget.SearchView
|
||||
import androidx.core.text.getSpans
|
||||
import androidx.core.widget.doAfterTextChanged
|
||||
import androidx.viewbinding.ViewBinding
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.ui.base.presenter.BasePresenter
|
||||
@@ -59,17 +59,9 @@ abstract class SearchableNucleusController<VB : ViewBinding, P : BasePresenter<*
|
||||
val searchAutoComplete: SearchView.SearchAutoComplete = searchView.findViewById(
|
||||
R.id.search_src_text,
|
||||
)
|
||||
searchAutoComplete.addTextChangedListener(object : TextWatcher {
|
||||
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
|
||||
|
||||
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}
|
||||
|
||||
override fun afterTextChanged(editable: Editable) {
|
||||
editable.getSpans(0, editable.length, CharacterStyle::class.java)
|
||||
.forEach { editable.removeSpan(it) }
|
||||
}
|
||||
},
|
||||
)
|
||||
searchAutoComplete.doAfterTextChanged { editable ->
|
||||
editable?.getSpans<CharacterStyle>()?.forEach { editable.removeSpan(it) }
|
||||
}
|
||||
|
||||
searchView.queryTextEvents()
|
||||
.onEach {
|
||||
|
||||
@@ -19,7 +19,9 @@ import androidx.preference.Preference
|
||||
import androidx.preference.PreferenceGroupAdapter
|
||||
import androidx.preference.PreferenceManager
|
||||
import androidx.preference.PreferenceScreen
|
||||
import androidx.preference.get
|
||||
import androidx.preference.getOnBindEditTextListener
|
||||
import androidx.preference.isNotEmpty
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.preference.SharedPreferencesDataStore
|
||||
@@ -111,8 +113,8 @@ class SourcePreferencesController(bundle: Bundle? = null) :
|
||||
source.setupPreferenceScreen(newScreen)
|
||||
|
||||
// Reparent the preferences
|
||||
while (newScreen.preferenceCount != 0) {
|
||||
val pref = newScreen.getPreference(0)
|
||||
while (newScreen.isNotEmpty()) {
|
||||
val pref = newScreen[0]
|
||||
pref.isIconSpaceReserved = false
|
||||
pref.order = Int.MAX_VALUE // reset to default order
|
||||
|
||||
@@ -143,7 +145,7 @@ class SourcePreferencesController(bundle: Bundle? = null) :
|
||||
val screen = preference.parent!!
|
||||
|
||||
lastOpenPreferencePosition = (0 until screen.preferenceCount).indexOfFirst {
|
||||
screen.getPreference(it) === preference
|
||||
screen[it] === preference
|
||||
}
|
||||
|
||||
val f = when (preference) {
|
||||
@@ -169,7 +171,7 @@ class SourcePreferencesController(bundle: Bundle? = null) :
|
||||
override fun <T : Preference> findPreference(key: CharSequence): T? {
|
||||
// We track [lastOpenPreferencePosition] when displaying the dialog
|
||||
// [key] isn't useful since there may be duplicates
|
||||
return preferenceScreen!!.getPreference(lastOpenPreferencePosition!!) as T
|
||||
return preferenceScreen!![lastOpenPreferencePosition!!] as T
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ import android.view.MenuInflater
|
||||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.core.view.get
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.core.view.updatePadding
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
@@ -202,7 +203,7 @@ open class BrowseSourceController(bundle: Bundle) :
|
||||
numColumnsJob?.cancel()
|
||||
|
||||
var oldPosition = RecyclerView.NO_POSITION
|
||||
val oldRecycler = binding.catalogueView.getChildAt(1)
|
||||
val oldRecycler = binding.catalogueView[1]
|
||||
if (oldRecycler is RecyclerView) {
|
||||
oldPosition = (oldRecycler.layoutManager as LinearLayoutManager).findFirstVisibleItemPosition()
|
||||
oldRecycler.adapter = null
|
||||
|
||||
@@ -6,6 +6,7 @@ import android.util.AttributeSet
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.core.view.get
|
||||
import eu.davidea.flexibleadapter.FlexibleAdapter
|
||||
import eu.davidea.flexibleadapter.items.IFlexible
|
||||
import eu.kanade.tachiyomi.databinding.SourceFilterSheetBinding
|
||||
@@ -55,7 +56,7 @@ class SourceFilterSheet(
|
||||
init {
|
||||
recycler.adapter = adapter
|
||||
recycler.setHasFixedSize(true)
|
||||
(binding.root.getChildAt(1) as ViewGroup).addView(recycler)
|
||||
(binding.root[1] as ViewGroup).addView(recycler)
|
||||
addView(binding.root)
|
||||
binding.filterBtn.setOnClickListener { onFilterClicked() }
|
||||
binding.resetBtn.setOnClickListener { onResetClicked() }
|
||||
|
||||
@@ -3,11 +3,11 @@ package eu.kanade.tachiyomi.ui.reader
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
import android.graphics.Color
|
||||
import android.text.Spannable
|
||||
import android.text.SpannableString
|
||||
import android.text.style.ScaleXSpan
|
||||
import android.util.AttributeSet
|
||||
import androidx.appcompat.widget.AppCompatTextView
|
||||
import androidx.core.text.set
|
||||
import eu.kanade.tachiyomi.widget.OutlineSpan
|
||||
|
||||
/**
|
||||
@@ -31,10 +31,10 @@ class PageIndicatorTextView(
|
||||
// Also add a bit of spacing between each character, as the stroke overlaps them
|
||||
val finalText = SpannableString(currText.asIterable().joinToString("\u00A0")).apply {
|
||||
// Apply text outline
|
||||
setSpan(spanOutline, 1, length - 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
|
||||
set(1, length - 1, spanOutline)
|
||||
|
||||
for (i in 1..lastIndex step 2) {
|
||||
setSpan(ScaleXSpan(0.2f), i, i + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
|
||||
set(i, i + 1, ScaleXSpan(0.2f))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ import android.view.animation.AnimationUtils
|
||||
import android.widget.FrameLayout
|
||||
import android.widget.Toast
|
||||
import androidx.core.graphics.ColorUtils
|
||||
import androidx.core.transition.addListener
|
||||
import androidx.core.transition.doOnEnd
|
||||
import androidx.core.view.WindowCompat
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
import androidx.core.view.WindowInsetsControllerCompat
|
||||
@@ -621,9 +621,9 @@ class ReaderActivity : BaseRxActivity<ReaderPresenter>() {
|
||||
updateCropBordersShortcut()
|
||||
if (window.sharedElementEnterTransition is MaterialContainerTransform) {
|
||||
// Wait until transition is complete to avoid crash on API 26
|
||||
window.sharedElementEnterTransition.addListener(
|
||||
onEnd = { setOrientation(presenter.getMangaOrientationType()) },
|
||||
)
|
||||
window.sharedElementEnterTransition.doOnEnd {
|
||||
setOrientation(presenter.getMangaOrientationType())
|
||||
}
|
||||
} else {
|
||||
setOrientation(presenter.getMangaOrientationType())
|
||||
}
|
||||
|
||||
@@ -8,7 +8,8 @@ import android.util.AttributeSet
|
||||
import android.view.MotionEvent
|
||||
import android.view.View
|
||||
import android.view.ViewPropertyAnimator
|
||||
import androidx.core.graphics.withSave
|
||||
import androidx.core.graphics.withScale
|
||||
import androidx.core.graphics.withTranslation
|
||||
import androidx.core.view.isVisible
|
||||
import eu.kanade.tachiyomi.ui.reader.viewer.ViewerNavigation
|
||||
import eu.kanade.tachiyomi.ui.reader.viewer.navigation.DisabledNavigation
|
||||
@@ -63,17 +64,15 @@ class ReaderNavigationOverlayView(context: Context, attributeSet: AttributeSet)
|
||||
navigation?.regions?.forEach { region ->
|
||||
val rect = region.rectF
|
||||
|
||||
canvas?.withSave {
|
||||
// Scale rect from 1f,1f to screen width and height
|
||||
scale(width.toFloat(), height.toFloat())
|
||||
// Scale rect from 1f,1f to screen width and height
|
||||
canvas?.withScale(width.toFloat(), height.toFloat()) {
|
||||
regionPaint.color = context.getColor(region.type.colorRes)
|
||||
drawRect(rect, regionPaint)
|
||||
}
|
||||
// Don't want scale anymore because it messes with drawText
|
||||
canvas?.withSave {
|
||||
// Translate origin to rect start (left, top)
|
||||
translate((width * rect.left), (height * rect.top))
|
||||
|
||||
// Don't want scale anymore because it messes with drawText
|
||||
// Translate origin to rect start (left, top)
|
||||
canvas?.withTranslation(x = (width * rect.left), y = (height * rect.top)) {
|
||||
// Calculate center of rect width on screen
|
||||
val x = width * (abs(rect.left - rect.right) / 2)
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@ import androidx.annotation.AttrRes
|
||||
import androidx.annotation.CallSuper
|
||||
import androidx.annotation.StyleRes
|
||||
import androidx.appcompat.widget.AppCompatImageView
|
||||
import androidx.core.os.postDelayed
|
||||
import androidx.core.view.isVisible
|
||||
import coil.dispose
|
||||
import coil.imageLoader
|
||||
@@ -110,7 +111,7 @@ open class ReaderPageImageView @JvmOverloads constructor(
|
||||
|
||||
private fun SubsamplingScaleImageView.landscapeZoom(forward: Boolean) {
|
||||
if (config != null && config!!.landscapeZoom && config!!.minimumScaleType == SCALE_TYPE_CENTER_INSIDE && sWidth > sHeight && scale == minScale) {
|
||||
handler?.postDelayed({
|
||||
handler?.postDelayed(500) {
|
||||
val point = when (config!!.zoomStartPosition) {
|
||||
ZoomStartPosition.LEFT -> if (forward) PointF(0F, 0F) else PointF(sWidth.toFloat(), 0F)
|
||||
ZoomStartPosition.RIGHT -> if (forward) PointF(sWidth.toFloat(), 0F) else PointF(0F, 0F)
|
||||
@@ -123,7 +124,7 @@ open class ReaderPageImageView @JvmOverloads constructor(
|
||||
.withEasing(EASE_IN_OUT_QUAD)
|
||||
.withInterruptible(true)
|
||||
.start()
|
||||
}, 500,)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ import android.view.ViewGroup.LayoutParams.MATCH_PARENT
|
||||
import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
|
||||
import android.widget.LinearLayout
|
||||
import androidx.appcompat.widget.AppCompatTextView
|
||||
import androidx.core.view.updatePadding
|
||||
import com.google.android.material.progressindicator.CircularProgressIndicator
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.ui.reader.model.ChapterTransition
|
||||
@@ -55,7 +56,7 @@ class PagerTransitionHolder(
|
||||
orientation = VERTICAL
|
||||
gravity = Gravity.CENTER
|
||||
val sidePadding = 64.dpToPx
|
||||
setPadding(sidePadding, 0, sidePadding, 0)
|
||||
updatePadding(left = sidePadding, right = sidePadding)
|
||||
|
||||
val transitionView = ReaderTransitionView(context)
|
||||
addView(transitionView)
|
||||
|
||||
@@ -7,6 +7,8 @@ import androidx.preference.Preference
|
||||
import androidx.preference.PreferenceCategory
|
||||
import androidx.preference.PreferenceGroup
|
||||
import androidx.preference.PreferenceManager
|
||||
import androidx.preference.forEach
|
||||
import androidx.preference.get
|
||||
import eu.kanade.tachiyomi.ui.setting.SettingsAdvancedController
|
||||
import eu.kanade.tachiyomi.ui.setting.SettingsAppearanceController
|
||||
import eu.kanade.tachiyomi.ui.setting.SettingsBackupController
|
||||
@@ -56,7 +58,7 @@ object SettingsSearchHelper {
|
||||
val settingsPrefScreen = ctrl.setupPreferenceScreen(preferenceManager.createPreferenceScreen(context))
|
||||
val prefCount = settingsPrefScreen.preferenceCount
|
||||
for (i in 0 until prefCount) {
|
||||
val rootPref = settingsPrefScreen.getPreference(i)
|
||||
val rootPref = settingsPrefScreen[i]
|
||||
if (rootPref.title == null) continue // no title, not a preference. (note: only info notes appear to not have titles)
|
||||
getSettingSearchResult(ctrl, rootPref, "${settingsPrefScreen.title}")
|
||||
}
|
||||
@@ -86,18 +88,14 @@ object SettingsSearchHelper {
|
||||
when {
|
||||
pref is PreferenceGroup -> {
|
||||
val breadcrumbsStr = addLocalizedBreadcrumb(breadcrumbs, "${pref.title}")
|
||||
|
||||
for (x in 0 until pref.preferenceCount) {
|
||||
val subPref = pref.getPreference(x)
|
||||
getSettingSearchResult(ctrl, subPref, breadcrumbsStr) // recursion
|
||||
pref.forEach {
|
||||
getSettingSearchResult(ctrl, it, breadcrumbsStr) // recursion
|
||||
}
|
||||
}
|
||||
pref is PreferenceCategory -> {
|
||||
val breadcrumbsStr = addLocalizedBreadcrumb(breadcrumbs, "${pref.title}")
|
||||
|
||||
for (x in 0 until pref.preferenceCount) {
|
||||
val subPref = pref.getPreference(x)
|
||||
getSettingSearchResult(ctrl, subPref, breadcrumbsStr) // recursion
|
||||
pref.forEach {
|
||||
getSettingSearchResult(ctrl, it, breadcrumbsStr) // recursion
|
||||
}
|
||||
}
|
||||
(pref.title != null && pref.isVisible) -> {
|
||||
|
||||
Reference in New Issue
Block a user