Skip to content

Commit f648ea3

Browse files
authored
Merge pull request #1209 from rho023/fix/favourite-tab-coloring
2 parents 2176ac4 + b61f149 commit f648ea3

File tree

2 files changed

+23
-11
lines changed

2 files changed

+23
-11
lines changed

app/src/main/kotlin/com/looker/droidify/ui/favourites/FavouriteFragmentAdapter.kt

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import androidx.core.view.isVisible
66
import androidx.recyclerview.widget.RecyclerView
77
import coil3.load
88
import com.looker.droidify.databinding.ProductItemBinding
9-
import com.looker.droidify.model.Product
9+
import com.looker.droidify.model.ProductItem
1010
import com.looker.droidify.model.Repository
1111
import com.looker.droidify.utility.common.extension.authentication
1212
import com.looker.droidify.utility.common.extension.corneredBackground
@@ -19,14 +19,14 @@ class FavouriteFragmentAdapter(
1919
private val onProductClick: (String) -> Unit
2020
) : RecyclerView.Adapter<FavouriteFragmentAdapter.ViewHolder>() {
2121

22-
inner class ViewHolder(binding: ProductItemBinding) : RecyclerView.ViewHolder(binding.root) {
22+
class ViewHolder(binding: ProductItemBinding) : RecyclerView.ViewHolder(binding.root) {
2323
val icon = binding.icon
2424
val name = binding.name
2525
val summary = binding.summary
2626
val version = binding.status
2727
}
2828

29-
var apps: List<List<Product>> = emptyList()
29+
var apps: List<ProductItem> = emptyList()
3030
set(value) {
3131
field = value
3232
notifyDataSetChanged()
@@ -47,29 +47,34 @@ class FavouriteFragmentAdapter(
4747
)
4848
).apply {
4949
itemView.setOnClickListener {
50-
if (apps.isNotEmpty() && apps[absoluteAdapterPosition].firstOrNull() != null) {
51-
onProductClick(apps[absoluteAdapterPosition].first().packageName)
50+
if (apps.isNotEmpty()) {
51+
onProductClick(apps[absoluteAdapterPosition].packageName)
5252
}
5353
}
5454
}
5555

5656
override fun getItemCount(): Int = apps.size
5757

5858
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
59-
val item = apps[position].first().item()
59+
val item = apps[position]
60+
val context = holder.itemView.context
61+
val installedVersion = item.installedVersion.nullIfEmpty()
62+
6063
val repository: Repository? = repositories[item.repositoryId]
6164
holder.name.text = item.name
6265
holder.summary.isVisible = item.summary.isNotEmpty()
6366
holder.summary.text = item.summary
67+
6468
if (repository != null) {
6569
val iconUrl = item.icon(holder.icon, repository)
6670
holder.icon.load(iconUrl) {
6771
authentication(repository.authentication)
6872
}
6973
}
74+
7075
holder.version.apply {
71-
text = item.installedVersion.nullIfEmpty() ?: item.version
72-
val isInstalled = item.installedVersion.nullIfEmpty() != null
76+
text = installedVersion ?: item.version
77+
val isInstalled = installedVersion != null
7378
when {
7479
item.canUpdate -> {
7580
backgroundTintList =

app/src/main/kotlin/com/looker/droidify/ui/favourites/FavouritesViewModel.kt

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import androidx.lifecycle.ViewModel
44
import com.looker.droidify.database.Database
55
import com.looker.droidify.datastore.SettingsRepository
66
import com.looker.droidify.datastore.get
7-
import com.looker.droidify.model.Product
7+
import com.looker.droidify.model.ProductItem
88
import com.looker.droidify.utility.common.extension.asStateFlow
99
import dagger.hilt.android.lifecycle.HiltViewModel
1010
import kotlinx.coroutines.flow.StateFlow
@@ -16,12 +16,19 @@ class FavouritesViewModel @Inject constructor(
1616
settingsRepository: SettingsRepository,
1717
) : ViewModel() {
1818

19-
val favouriteApps: StateFlow<List<List<Product>>> =
19+
val favouriteApps: StateFlow<List<ProductItem>> =
2020
settingsRepository
2121
.get { favouriteApps }
2222
.map { favourites ->
2323
favourites.mapNotNull { app ->
24-
Database.ProductAdapter.get(app, null).ifEmpty { null }
24+
val products = Database.ProductAdapter.get(app, null)
25+
val product = products.firstOrNull() ?: return@mapNotNull null
26+
val installed = Database.InstalledAdapter.get(app, null)
27+
28+
product.item().apply {
29+
this.installedVersion = installed?.version.orEmpty()
30+
this.canUpdate = product.canUpdate(installed)
31+
}
2532
}
2633
}.asStateFlow(emptyList())
2734

0 commit comments

Comments
 (0)