InstalledApps: Minor tweak

This commit is contained in:
Rahul Patel
2024-12-05 19:25:16 +05:30
parent c2f6f6d9d4
commit b989030e7b
4 changed files with 52 additions and 23 deletions

View File

@@ -2,34 +2,61 @@ package com.aurora.store.data.model
import android.content.Context
import android.content.pm.PackageInfo
import android.graphics.Bitmap
import android.graphics.drawable.Drawable
import android.os.Parcelable
import androidx.core.content.pm.PackageInfoCompat
import com.aurora.gplayapi.data.models.App
import com.aurora.store.data.room.update.Update
import com.aurora.store.util.PackageUtil
import kotlinx.parcelize.IgnoredOnParcel
import kotlinx.parcelize.Parcelize
@Parcelize
data class MinimalApp(
val packageName: String,
val versionName: String,
val versionCode: Int,
val displayName: String
val displayName: String,
@IgnoredOnParcel
val icon: Bitmap? = null
) : Parcelable {
companion object {
fun fromApp(app: App): MinimalApp {
return MinimalApp(app.packageName, app.versionCode, app.displayName)
return MinimalApp(
app.packageName,
app.versionName,
app.versionCode,
app.displayName
)
}
fun toApp(minimalApp: MinimalApp): App {
return App(minimalApp.packageName).apply {
versionName = minimalApp.versionName ?: ""
versionCode = minimalApp.versionCode
displayName = minimalApp.displayName
}
}
fun fromUpdate(update: Update): MinimalApp {
return MinimalApp(update.packageName, update.versionCode, update.displayName)
return MinimalApp(
update.packageName,
update.versionName,
update.versionCode,
update.displayName
)
}
fun fromPackageInfo(context: Context, packageInfo: PackageInfo): MinimalApp {
return MinimalApp(
packageInfo.packageName,
packageInfo.versionName ?: "",
PackageInfoCompat.getLongVersionCode(packageInfo).toInt(),
packageInfo.applicationInfo!!.loadLabel(context.packageManager).toString()
packageInfo.applicationInfo!!.loadLabel(context.packageManager).toString(),
PackageUtil.getIconForPackage(context, packageInfo.packageName)
)
}
}

View File

@@ -20,9 +20,7 @@
package com.aurora.store.view.epoxy.views
import android.content.Context
import android.content.pm.PackageInfo
import android.util.AttributeSet
import androidx.core.content.pm.PackageInfoCompat
import coil3.load
import coil3.request.placeholder
import coil3.request.transformations
@@ -31,30 +29,29 @@ import com.airbnb.epoxy.CallbackProp
import com.airbnb.epoxy.ModelProp
import com.airbnb.epoxy.ModelView
import com.aurora.store.R
import com.aurora.store.data.model.MinimalApp
import com.aurora.store.databinding.ViewPackageBinding
import com.aurora.store.util.PackageUtil
@ModelView(
autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT,
baseModelClass = BaseModel::class
)
class PackageInfoView @JvmOverloads constructor(
class InstalledAppView @JvmOverloads constructor(
context: Context?,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : BaseView<ViewPackageBinding>(context, attrs, defStyleAttr) {
@ModelProp(options = [ModelProp.Option.IgnoreRequireHashCode])
fun packageInfo(packageInfo: PackageInfo) {
val appInfo = packageInfo.applicationInfo!!
binding.imgIcon.load(PackageUtil.getIconForPackage(context, appInfo.packageName)) {
fun packageInfo(app: MinimalApp) {
binding.imgIcon.load(app.icon) {
placeholder(R.drawable.bg_placeholder)
transformations(RoundedCornersTransformation(25F))
}
binding.txtLine1.text = appInfo.loadLabel(context.packageManager)
binding.txtLine2.text = appInfo.packageName
binding.txtLine3.text = ("${packageInfo.versionName}.${PackageInfoCompat.getLongVersionCode(packageInfo)}")
binding.txtLine1.text = app.displayName
binding.txtLine2.text = app.packageName
binding.txtLine3.text = ("${app.versionName} (${app.versionCode})")
}
@CallbackProp

View File

@@ -19,7 +19,6 @@
package com.aurora.store.view.ui.all
import android.content.pm.PackageInfo
import android.os.Bundle
import android.text.Editable
import android.text.TextWatcher
@@ -32,7 +31,7 @@ import com.aurora.store.data.event.InstallerEvent
import com.aurora.store.data.model.MinimalApp
import com.aurora.store.databinding.FragmentGenericWithSearchBinding
import com.aurora.store.view.epoxy.views.HeaderViewModel_
import com.aurora.store.view.epoxy.views.PackageInfoViewModel_
import com.aurora.store.view.epoxy.views.InstalledAppViewModel_
import com.aurora.store.view.epoxy.views.shimmer.AppListViewShimmerModel_
import com.aurora.store.view.ui.commons.BaseFragment
import com.aurora.store.viewmodel.all.InstalledViewModel
@@ -79,8 +78,7 @@ class AppsGamesFragment : BaseFragment<FragmentGenericWithSearchBinding>() {
updateController(viewModel.packages.value)
} else {
val filteredPackages = viewModel.packages.value?.filter {
it.applicationInfo!!.loadLabel(requireContext().packageManager)
.contains(s, true) || it.packageName.contains(s, true)
it.displayName.contains(s, true) || it.packageName.contains(s, true)
}
updateController(filteredPackages)
}
@@ -98,7 +96,7 @@ class AppsGamesFragment : BaseFragment<FragmentGenericWithSearchBinding>() {
}
}
private fun updateController(packages: List<PackageInfo>?) {
private fun updateController(packages: List<MinimalApp>?) {
binding.recycler.withModels {
setFilterDuplicates(true)
if (packages == null) {
@@ -116,12 +114,17 @@ class AppsGamesFragment : BaseFragment<FragmentGenericWithSearchBinding>() {
)
packages.forEach { app ->
add(
PackageInfoViewModel_()
InstalledAppViewModel_()
.id(app.packageName.hashCode())
.packageInfo(app)
.click { _ -> openDetailsFragment(app.packageName) }
.click { _ ->
openDetailsFragment(
app.packageName,
MinimalApp.toApp(app)
)
}
.longClick { _ ->
openAppMenuSheet(MinimalApp.fromPackageInfo(requireContext(), app))
openAppMenuSheet(app)
false
}
)

View File

@@ -24,6 +24,7 @@ import android.content.pm.PackageInfo
import android.util.Log
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.aurora.store.data.model.MinimalApp
import com.aurora.store.util.PackageUtil
import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext
@@ -40,7 +41,7 @@ class InstalledViewModel @Inject constructor(
private val TAG = InstalledViewModel::class.java.simpleName
private val _packages = MutableStateFlow<List<PackageInfo>?>(null)
private val _packages = MutableStateFlow<List<MinimalApp>?>(null)
val packages = _packages.asStateFlow()
init {
@@ -51,6 +52,7 @@ class InstalledViewModel @Inject constructor(
viewModelScope.launch(Dispatchers.IO) {
try {
_packages.value = PackageUtil.getAllValidPackages(context)
.map { MinimalApp.fromPackageInfo(context, it) }
} catch (exception: Exception) {
Log.e(TAG, "Failed to fetch apps", exception)
}