diff --git a/app/build.gradle b/app/build.gradle index 7d1fea5ef..1368b79fc 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,8 +15,8 @@ android { applicationId 'org.koitharu.kotatsu' minSdkVersion 21 targetSdkVersion 32 - versionCode 418 - versionName '3.4.6' + versionCode 419 + versionName '3.4.7' generatedDensities = [] testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -84,7 +84,7 @@ afterEvaluate { } } dependencies { - implementation('com.github.nv95:kotatsu-parsers:fadb06aabb') { + implementation('com.github.nv95:kotatsu-parsers:7588617316') { exclude group: 'org.json', module: 'json' } diff --git a/app/src/main/java/org/koitharu/kotatsu/base/ui/widgets/SelectableTextView.kt b/app/src/main/java/org/koitharu/kotatsu/base/ui/widgets/SelectableTextView.kt new file mode 100644 index 000000000..e931853f0 --- /dev/null +++ b/app/src/main/java/org/koitharu/kotatsu/base/ui/widgets/SelectableTextView.kt @@ -0,0 +1,29 @@ +package org.koitharu.kotatsu.base.ui.widgets + +import android.content.Context +import android.text.Selection +import android.text.Spannable +import android.util.AttributeSet +import android.view.MotionEvent +import androidx.annotation.AttrRes +import com.google.android.material.textview.MaterialTextView + +class SelectableTextView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + @AttrRes defStyleAttr: Int = android.R.attr.textViewStyle, +) : MaterialTextView(context, attrs, defStyleAttr) { + + override fun dispatchTouchEvent(event: MotionEvent?): Boolean { + fixSelectionRange() + return super.dispatchTouchEvent(event) + } + + // https://stackoverflow.com/questions/22810147/error-when-selecting-text-from-textview-java-lang-indexoutofboundsexception-se + private fun fixSelectionRange() { + if (selectionStart < 0 || selectionEnd < 0) { + val spannableText = text as? Spannable ?: return + Selection.setSelection(spannableText, text.length) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/list/ui/MangaListFragment.kt b/app/src/main/java/org/koitharu/kotatsu/list/ui/MangaListFragment.kt index a695176c7..fe1c23770 100644 --- a/app/src/main/java/org/koitharu/kotatsu/list/ui/MangaListFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/list/ui/MangaListFragment.kt @@ -107,7 +107,7 @@ abstract class MangaListFragment : setOnRefreshListener(this@MangaListFragment) isEnabled = isSwipeRefreshEnabled } - addMenuProvider(MangaListMenuProvider(childFragmentManager)) + addMenuProvider(MangaListMenuProvider(this)) viewModel.listMode.observe(viewLifecycleOwner, ::onListModeChanged) viewModel.gridScale.observe(viewLifecycleOwner, ::onGridScaleChanged) diff --git a/app/src/main/java/org/koitharu/kotatsu/list/ui/MangaListMenuProvider.kt b/app/src/main/java/org/koitharu/kotatsu/list/ui/MangaListMenuProvider.kt index 5950cd546..592ed9369 100644 --- a/app/src/main/java/org/koitharu/kotatsu/list/ui/MangaListMenuProvider.kt +++ b/app/src/main/java/org/koitharu/kotatsu/list/ui/MangaListMenuProvider.kt @@ -4,11 +4,11 @@ import android.view.Menu import android.view.MenuInflater import android.view.MenuItem import androidx.core.view.MenuProvider -import androidx.fragment.app.FragmentManager +import androidx.fragment.app.Fragment import org.koitharu.kotatsu.R class MangaListMenuProvider( - private val fragmentManager: FragmentManager, + private val fragment: Fragment, ) : MenuProvider { override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) { @@ -17,7 +17,7 @@ class MangaListMenuProvider( override fun onMenuItemSelected(menuItem: MenuItem): Boolean = when (menuItem.itemId) { R.id.action_list_mode -> { - ListModeSelectDialog.show(fragmentManager) + ListModeSelectDialog.show(fragment.childFragmentManager) true } else -> false diff --git a/app/src/main/res/layout-w600dp/fragment_details.xml b/app/src/main/res/layout-w600dp/fragment_details.xml index da0609645..05271da72 100644 --- a/app/src/main/res/layout-w600dp/fragment_details.xml +++ b/app/src/main/res/layout-w600dp/fragment_details.xml @@ -218,7 +218,7 @@ app:layout_constraintTop_toBottomOf="@id/recyclerView_bookmarks" tools:visibility="visible" /> -