From 3f440dff2a358623d3616ec8b0a3a7afb155c9f8 Mon Sep 17 00:00:00 2001 From: machiav3lli Date: Sun, 26 Dec 2021 01:39:26 +0100 Subject: [PATCH] Add: Horizontal and vertical apps' items' classes --- .../com/looker/droidify/ui/items/HAppItem.kt | 40 ++++++++++ .../com/looker/droidify/ui/items/VAppItem.kt | 76 +++++++++++++++++++ src/main/res/layout/item_app_horiz_x.xml | 23 +++++- 3 files changed, 135 insertions(+), 4 deletions(-) create mode 100644 src/main/kotlin/com/looker/droidify/ui/items/HAppItem.kt create mode 100644 src/main/kotlin/com/looker/droidify/ui/items/VAppItem.kt diff --git a/src/main/kotlin/com/looker/droidify/ui/items/HAppItem.kt b/src/main/kotlin/com/looker/droidify/ui/items/HAppItem.kt new file mode 100644 index 00000000..9e804367 --- /dev/null +++ b/src/main/kotlin/com/looker/droidify/ui/items/HAppItem.kt @@ -0,0 +1,40 @@ +package com.looker.droidify.ui.items + +import android.view.LayoutInflater +import android.view.ViewGroup +import coil.load +import coil.transform.RoundedCornersTransformation +import com.looker.droidify.R +import com.looker.droidify.databinding.ItemAppHorizXBinding +import com.looker.droidify.entity.ProductItem +import com.looker.droidify.entity.Repository +import com.looker.droidify.network.CoilDownloader +import com.looker.droidify.utility.Utils +import com.looker.droidify.utility.extension.resources.toPx +import com.mikepenz.fastadapter.binding.AbstractBindingItem + +class HAppItem(val item: ProductItem, val repository: Repository) : + AbstractBindingItem() { + override val type: Int + get() = R.id.fastadapter_item + + override fun createBinding(inflater: LayoutInflater, parent: ViewGroup?) + : ItemAppHorizXBinding = ItemAppHorizXBinding.inflate(inflater, parent, false) + + override fun bindView(binding: ItemAppHorizXBinding, payloads: List) { + val (progressIcon, defaultIcon) = Utils.getDefaultApplicationIcons(binding.icon.context) + + binding.name.text = item.name + binding.icon.load( + CoilDownloader.createIconUri( + binding.icon, item.packageName, + item.icon, item.metadataIcon, repository + ) + ) { + transformations(RoundedCornersTransformation(4.toPx)) + placeholder(progressIcon) + error(defaultIcon) + } + binding.version.text = if (item.canUpdate) item.version else item.installedVersion + } +} \ No newline at end of file diff --git a/src/main/kotlin/com/looker/droidify/ui/items/VAppItem.kt b/src/main/kotlin/com/looker/droidify/ui/items/VAppItem.kt new file mode 100644 index 00000000..ea810272 --- /dev/null +++ b/src/main/kotlin/com/looker/droidify/ui/items/VAppItem.kt @@ -0,0 +1,76 @@ +package com.looker.droidify.ui.items + +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.core.content.res.ResourcesCompat +import coil.load +import coil.transform.RoundedCornersTransformation +import com.looker.droidify.R +import com.looker.droidify.databinding.ItemAppVerticalXBinding +import com.looker.droidify.entity.ProductItem +import com.looker.droidify.entity.Repository +import com.looker.droidify.network.CoilDownloader +import com.looker.droidify.utility.Utils +import com.looker.droidify.utility.extension.resources.getColorFromAttr +import com.looker.droidify.utility.extension.resources.sizeScaled +import com.looker.droidify.utility.extension.resources.toPx +import com.looker.droidify.utility.extension.text.nullIfEmpty +import com.mikepenz.fastadapter.binding.AbstractBindingItem + +class VAppItem(val item: ProductItem, val repository: Repository) : + AbstractBindingItem() { + override val type: Int + get() = R.id.fastadapter_item + + override fun createBinding(inflater: LayoutInflater, parent: ViewGroup?) + : ItemAppVerticalXBinding = ItemAppVerticalXBinding.inflate(inflater, parent, false) + + override fun bindView(binding: ItemAppVerticalXBinding, payloads: List) { + val (progressIcon, defaultIcon) = Utils.getDefaultApplicationIcons(binding.icon.context) + + binding.name.text = item.name + binding.summary.text = + if (item.name == item.summary) "" else item.summary + binding.summary.visibility = + if (binding.summary.text.isNotEmpty()) View.VISIBLE else View.GONE + binding.icon.load( + CoilDownloader.createIconUri( + binding.icon, item.packageName, + item.icon, item.metadataIcon, repository + ) + ) { + transformations(RoundedCornersTransformation(4.toPx)) + placeholder(progressIcon) + error(defaultIcon) + } + binding.status.apply { + if (item.canUpdate) { + text = item.version + if (background == null) { + background = + ResourcesCompat.getDrawable( + binding.root.resources, + R.drawable.background_border, + context.theme + ) + resources.sizeScaled(6).let { setPadding(it, it, it, it) } + backgroundTintList = + context.getColorFromAttr(R.attr.colorSecondaryContainer) + setTextColor(context.getColorFromAttr(R.attr.colorSecondary)) + } + } else { + text = item.installedVersion.nullIfEmpty() ?: item.version + if (background != null) { + setPadding(0, 0, 0, 0) + setTextColor(binding.status.context.getColorFromAttr(android.R.attr.colorControlNormal)) + background = null + } + } + } + val enabled = item.compatible || item.installedVersion.isNotEmpty() + sequenceOf(binding.name, binding.status, binding.summary).forEach { + it.isEnabled = enabled + } + } +} \ No newline at end of file diff --git a/src/main/res/layout/item_app_horiz_x.xml b/src/main/res/layout/item_app_horiz_x.xml index 038d4d4a..a42b2e3b 100644 --- a/src/main/res/layout/item_app_horiz_x.xml +++ b/src/main/res/layout/item_app_horiz_x.xml @@ -23,23 +23,38 @@ android:elevation="8dp" android:src="@drawable/ic_application_default" android:tint="?colorPrimary" - app:layout_constraintBottom_toTopOf="@id/label" + app:layout_constraintBottom_toTopOf="@id/name" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> + + + app:layout_constraintTop_toBottomOf="@id/name" /> \ No newline at end of file