Add: Horizontal and vertical apps' items' classes

This commit is contained in:
machiav3lli 2021-12-26 01:39:26 +01:00
parent f35ef9f265
commit 3f440dff2a
3 changed files with 135 additions and 4 deletions

View File

@ -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<ItemAppHorizXBinding>() {
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<Any>) {
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
}
}

View File

@ -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<ItemAppVerticalXBinding>() {
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<Any>) {
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
}
}
}

View File

@ -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" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/label"
android:id="@+id/name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="2dp"
android:layout_marginBottom="2dp"
android:ellipsize="end"
android:gravity="center_horizontal"
android:maxLines="1"
android:textAppearance="@style/TextAppearance.Material3.BodyMedium"
app:layout_constraintBottom_toTopOf="@id/version"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/icon" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/version"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="2dp"
android:ellipsize="end"
android:gravity="center_horizontal"
android:maxLines="1"
android:textAppearance="@style/TextAppearance.Material3.BodyMedium"
android:textAppearance="@style/TextAppearance.Material3.LabelSmall"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/icon" />
app:layout_constraintTop_toBottomOf="@id/name" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>