Update feed ui

pull/112/head
Koitharu 4 years ago
parent 3c0c4ce9c0
commit 1f7252fd12
No known key found for this signature in database
GPG Key ID: 8E861F8CE6E7CE27

@ -1,6 +1,5 @@
package org.koitharu.kotatsu.tracker package org.koitharu.kotatsu.tracker
import org.koin.android.ext.koin.androidContext
import org.koin.androidx.viewmodel.dsl.viewModel import org.koin.androidx.viewmodel.dsl.viewModel
import org.koin.dsl.module import org.koin.dsl.module
import org.koitharu.kotatsu.tracker.domain.TrackingRepository import org.koitharu.kotatsu.tracker.domain.TrackingRepository
@ -11,5 +10,5 @@ val trackerModule
single { TrackingRepository(get()) } single { TrackingRepository(get()) }
viewModel { FeedViewModel(androidContext(), get()) } viewModel { FeedViewModel(get()) }
} }

@ -4,7 +4,9 @@ import android.os.Bundle
import android.view.* import android.view.*
import androidx.core.graphics.Insets import androidx.core.graphics.Insets
import androidx.core.view.updatePadding import androidx.core.view.updatePadding
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.divider.MaterialDividerItemDecoration
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
import org.koin.android.ext.android.get import org.koin.android.ext.android.get
import org.koin.androidx.viewmodel.ext.android.viewModel import org.koin.androidx.viewmodel.ext.android.viewModel
@ -50,6 +52,9 @@ class FeedFragment : BaseFragment<FragmentFeedBinding>(), PaginationScrollListen
adapter = feedAdapter adapter = feedAdapter
setHasFixedSize(true) setHasFixedSize(true)
addOnScrollListener(PaginationScrollListener(4, this@FeedFragment)) addOnScrollListener(PaginationScrollListener(4, this@FeedFragment))
val dividerDecoration = MaterialDividerItemDecoration(context, RecyclerView.VERTICAL)
dividerDecoration.setDividerInsetStartResource(context, R.dimen.feed_dividers_offset)
addItemDecoration(dividerDecoration)
} }
viewModel.content.observe(viewLifecycleOwner, this::onListChanged) viewModel.content.observe(viewLifecycleOwner, this::onListChanged)

@ -1,6 +1,5 @@
package org.koitharu.kotatsu.tracker.ui package org.koitharu.kotatsu.tracker.ui
import android.content.Context
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
@ -22,7 +21,6 @@ import org.koitharu.kotatsu.utils.ext.asLiveDataDistinct
import org.koitharu.kotatsu.utils.ext.mapItems import org.koitharu.kotatsu.utils.ext.mapItems
class FeedViewModel( class FeedViewModel(
context: Context,
private val repository: TrackingRepository private val repository: TrackingRepository
) : BaseViewModel() { ) : BaseViewModel() {
@ -34,7 +32,7 @@ class FeedViewModel(
val onFeedCleared = SingleLiveEvent<Unit>() val onFeedCleared = SingleLiveEvent<Unit>()
val content = combine( val content = combine(
logList.filterNotNull().mapItems { logList.filterNotNull().mapItems {
it.toFeedItem(context.resources) it.toFeedItem()
}, },
hasNextPage hasNextPage
) { list, isHasNextPage -> ) { list, isHasNextPage ->

@ -12,6 +12,7 @@ import org.koitharu.kotatsu.list.ui.model.ListModel
import org.koitharu.kotatsu.tracker.ui.model.FeedItem import org.koitharu.kotatsu.tracker.ui.model.FeedItem
import org.koitharu.kotatsu.utils.ext.enqueueWith import org.koitharu.kotatsu.utils.ext.enqueueWith
import org.koitharu.kotatsu.utils.ext.newImageRequest import org.koitharu.kotatsu.utils.ext.newImageRequest
import org.koitharu.kotatsu.utils.ext.textAndVisible
fun feedItemAD( fun feedItemAD(
coil: ImageLoader, coil: ImageLoader,
@ -39,6 +40,11 @@ fun feedItemAD(
binding.textViewTitle.text = item.title binding.textViewTitle.text = item.title
binding.badge.text = item.subtitle binding.badge.text = item.subtitle
binding.textViewChapters.text = item.chapters binding.textViewChapters.text = item.chapters
binding.textViewTruncated.textAndVisible = if (item.truncated > 0) {
getString(R.string._and_x_more, item.truncated)
} else {
null
}
} }
onViewRecycled { onViewRecycled {

@ -9,5 +9,6 @@ data class FeedItem(
val title: String, val title: String,
val subtitle: String, val subtitle: String,
val chapters: CharSequence, val chapters: CharSequence,
val manga: Manga val manga: Manga,
val truncated: Int,
) : ListModel ) : ListModel

@ -1,19 +1,15 @@
package org.koitharu.kotatsu.tracker.ui.model package org.koitharu.kotatsu.tracker.ui.model
import android.content.res.Resources
import org.koitharu.kotatsu.R
import org.koitharu.kotatsu.core.model.TrackingLogItem import org.koitharu.kotatsu.core.model.TrackingLogItem
fun TrackingLogItem.toFeedItem(resources: Resources): FeedItem { fun TrackingLogItem.toFeedItem(): FeedItem {
val chaptersString = if (chapters.size > MAX_CHAPTERS) { val truncate = chapters.size > MAX_CHAPTERS
val chaptersString = if (truncate) {
chapters.joinToString( chapters.joinToString(
separator = "\n", separator = "\n",
limit = MAX_CHAPTERS - 1, limit = MAX_CHAPTERS - 1,
truncated = resources.getString( truncated = "",
R.string._and_x_more, ).trimEnd()
chapters.size - MAX_CHAPTERS + 1
)
)
} else { } else {
chapters.joinToString("\n") chapters.joinToString("\n")
} }
@ -23,7 +19,8 @@ fun TrackingLogItem.toFeedItem(resources: Resources): FeedItem {
title = manga.title, title = manga.title,
subtitle = chapters.size.toString(), subtitle = chapters.size.toString(),
chapters = chaptersString, chapters = chaptersString,
manga = manga manga = manga,
truncated = chapters.size - MAX_CHAPTERS + 1,
) )
} }

@ -6,8 +6,8 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingStart="8dp" android:paddingVertical="6dp"
android:paddingEnd="8dp"> android:paddingHorizontal="8dp">
<com.google.android.material.card.MaterialCardView <com.google.android.material.card.MaterialCardView
android:id="@+id/card_cover" android:id="@+id/card_cover"
@ -75,11 +75,26 @@
android:layout_marginStart="16dp" android:layout_marginStart="16dp"
android:layout_marginEnd="8dp" android:layout_marginEnd="8dp"
android:layout_marginBottom="4dp" android:layout_marginBottom="4dp"
android:layout_marginTop="4dp"
android:ellipsize="none" android:ellipsize="none"
app:layout_constraintBottom_toBottomOf="parent" android:lineSpacingExtra="4sp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/card_cover" app:layout_constraintStart_toEndOf="@id/card_cover"
app:layout_constraintTop_toBottomOf="@id/title_container" app:layout_constraintTop_toBottomOf="@id/title_container"
tools:text="@tools:sample/lorem[25]" /> tools:text="@tools:sample/lorem[25]" />
<TextView
android:id="@+id/textView_truncated"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="4dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="4dp"
android:textColor="?android:textColorHint"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/card_cover"
app:layout_constraintTop_toBottomOf="@id/textView_chapters"
tools:text="@string/_and_x_more" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

@ -25,6 +25,7 @@
<dimen name="list_footer_height_inner">36dp</dimen> <dimen name="list_footer_height_inner">36dp</dimen>
<dimen name="list_footer_height_outer">48dp</dimen> <dimen name="list_footer_height_outer">48dp</dimen>
<dimen name="screen_padding">16dp</dimen> <dimen name="screen_padding">16dp</dimen>
<dimen name="feed_dividers_offset">72dp</dimen>
<!--Text dimens--> <!--Text dimens-->
<dimen name="text_size_h1">22sp</dimen> <dimen name="text_size_h1">22sp</dimen>

Loading…
Cancel
Save