diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 9a27b38c..b2007d39 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -21,7 +21,7 @@ android { minSdk = 24 targetSdk = 34 versionCode = 16 - versionName = "1.1-beta38" + versionName = "1.1-beta39" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/java/com/skyd/anivu/model/repository/ReadRepository.kt b/app/src/main/java/com/skyd/anivu/model/repository/ReadRepository.kt index d5d1c0f9..44247579 100644 --- a/app/src/main/java/com/skyd/anivu/model/repository/ReadRepository.kt +++ b/app/src/main/java/com/skyd/anivu/model/repository/ReadRepository.kt @@ -5,6 +5,7 @@ import com.skyd.anivu.model.bean.ArticleWithEnclosureBean import com.skyd.anivu.model.db.dao.ArticleDao import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.flow.flowOn import javax.inject.Inject @@ -13,6 +14,7 @@ class ReadRepository @Inject constructor( ) : BaseRepository() { fun requestArticleWithEnclosure(articleId: String): Flow { return articleDao.getArticleWithEnclosures(articleId = articleId) + .filterNotNull() .flowOn(Dispatchers.IO) } } \ No newline at end of file diff --git a/app/src/main/java/com/skyd/anivu/ui/fragment/read/ReadFragment.kt b/app/src/main/java/com/skyd/anivu/ui/fragment/read/ReadFragment.kt index 2b617364..c5c311a5 100644 --- a/app/src/main/java/com/skyd/anivu/ui/fragment/read/ReadFragment.kt +++ b/app/src/main/java/com/skyd/anivu/ui/fragment/read/ReadFragment.kt @@ -18,11 +18,14 @@ import com.skyd.anivu.ext.addInsetsByPadding import com.skyd.anivu.ext.collectIn import com.skyd.anivu.ext.dataStore import com.skyd.anivu.ext.getOrDefault +import com.skyd.anivu.ext.gone import com.skyd.anivu.ext.ifNullOfBlank import com.skyd.anivu.ext.openBrowser import com.skyd.anivu.ext.popBackStackWithLifecycle import com.skyd.anivu.ext.startWith +import com.skyd.anivu.ext.toDateTimeString import com.skyd.anivu.ext.toHtml +import com.skyd.anivu.ext.visible import com.skyd.anivu.model.bean.ArticleWithEnclosureBean import com.skyd.anivu.model.bean.LinkEnclosureBean import com.skyd.anivu.model.preference.rss.ParseLinkTagAsEnclosurePreference @@ -86,25 +89,46 @@ class ReadFragment : BaseFragment() { } is ArticleState.Success -> { - binding.topAppBar.menu?.apply { - findItem(R.id.action_read_fragment_open_in_browser)?.isEnabled = true - findItem(R.id.action_read_fragment_share)?.isEnabled = true - } val article = articleState.article - binding.tvReadFragmentContent.post { - binding.tvReadFragmentContent.text = article.article.content - .ifNullOfBlank { article.article.description.orEmpty() } - .toHtml( - imageGetter = ImageGetter( - context = requireContext(), - maxWidth = { binding.tvReadFragmentContent.width }, - onSuccess = { _, _ -> - binding.tvReadFragmentContent.text = - binding.tvReadFragmentContent.text - } - ), - tagHandler = null, - ) + + with(binding) { + topAppBar.menu?.apply { + findItem(R.id.action_read_fragment_open_in_browser)?.isEnabled = true + findItem(R.id.action_read_fragment_share)?.isEnabled = true + } + + tvReadFragmentTitle.text = article.article.title + + val date = article.article.date + if (date == null) { + tvReadFragmentDate.gone() + } else { + tvReadFragmentDate.visible() + tvReadFragmentDate.text = date.toDateTimeString(context = requireContext()) + } + + val author = article.article.author + if (author.isNullOrBlank()) { + tvReadFragmentAuthor.gone() + } else { + tvReadFragmentAuthor.text = author + tvReadFragmentAuthor.visible() + } + + tvReadFragmentContent.post { + tvReadFragmentContent.text = article.article.content + .ifNullOfBlank { article.article.description.orEmpty() } + .toHtml( + imageGetter = ImageGetter( + context = requireContext(), + maxWidth = { tvReadFragmentContent.width }, + onSuccess = { _, _ -> + tvReadFragmentContent.text = tvReadFragmentContent.text + } + ), + tagHandler = null, + ) + } } enclosureBottomSheet?.updateData(getEnclosuresList(requireContext(), article)) diff --git a/app/src/main/java/com/skyd/anivu/ui/mpv/controller/PointerInputDetector.kt b/app/src/main/java/com/skyd/anivu/ui/mpv/controller/PointerInputDetector.kt index 0960cd5e..6537ee22 100644 --- a/app/src/main/java/com/skyd/anivu/ui/mpv/controller/PointerInputDetector.kt +++ b/app/src/main/java/com/skyd/anivu/ui/mpv/controller/PointerInputDetector.kt @@ -256,7 +256,7 @@ internal fun Modifier.detectControllerGestures( }, onGesture = onGesture@{ _: Offset, pan: Offset, zoom: Float, rotation: Float -> with(transformState()) { - transformStateCallback.onVideoOffset(videoOffset + pan) + transformStateCallback.onVideoOffset(videoOffset + pan / videoZoom) transformStateCallback.onVideoRotate(videoRotate + rotation) transformStateCallback.onVideoZoom(videoZoom * zoom) } diff --git a/app/src/main/res/layout/fragment_read.xml b/app/src/main/res/layout/fragment_read.xml index 1deaf8c9..0c3b99e7 100644 --- a/app/src/main/res/layout/fragment_read.xml +++ b/app/src/main/res/layout/fragment_read.xml @@ -33,12 +33,61 @@ android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> - + android:orientation="vertical"> + + + + + + + + + + + + 请选择一个 OPML 文件 同步 通过 OPML 文件来导入与导出订阅数据 + 速度 导入了 %d 项,花费 %.2f 秒