From b989030e7b68e7cd8afcad76d718f277d1b5b243 Mon Sep 17 00:00:00 2001 From: Rahul Patel Date: Thu, 5 Dec 2024 19:25:16 +0530 Subject: [PATCH] InstalledApps: Minor tweak --- .../com/aurora/store/data/model/MinimalApp.kt | 35 ++++++++++++++++--- ...PackageInfoView.kt => InstalledAppView.kt} | 17 ++++----- .../store/view/ui/all/AppsGamesFragment.kt | 19 +++++----- .../store/viewmodel/all/InstalledViewModel.kt | 4 ++- 4 files changed, 52 insertions(+), 23 deletions(-) rename app/src/main/java/com/aurora/store/view/epoxy/views/{PackageInfoView.kt => InstalledAppView.kt} (75%) diff --git a/app/src/main/java/com/aurora/store/data/model/MinimalApp.kt b/app/src/main/java/com/aurora/store/data/model/MinimalApp.kt index 28d1914c0..a3e0a648c 100644 --- a/app/src/main/java/com/aurora/store/data/model/MinimalApp.kt +++ b/app/src/main/java/com/aurora/store/data/model/MinimalApp.kt @@ -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) ) } } diff --git a/app/src/main/java/com/aurora/store/view/epoxy/views/PackageInfoView.kt b/app/src/main/java/com/aurora/store/view/epoxy/views/InstalledAppView.kt similarity index 75% rename from app/src/main/java/com/aurora/store/view/epoxy/views/PackageInfoView.kt rename to app/src/main/java/com/aurora/store/view/epoxy/views/InstalledAppView.kt index 37a7cd8ba..efaa492c4 100644 --- a/app/src/main/java/com/aurora/store/view/epoxy/views/PackageInfoView.kt +++ b/app/src/main/java/com/aurora/store/view/epoxy/views/InstalledAppView.kt @@ -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(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 diff --git a/app/src/main/java/com/aurora/store/view/ui/all/AppsGamesFragment.kt b/app/src/main/java/com/aurora/store/view/ui/all/AppsGamesFragment.kt index f69d46304..3f4565833 100644 --- a/app/src/main/java/com/aurora/store/view/ui/all/AppsGamesFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/all/AppsGamesFragment.kt @@ -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() { 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() { } } - private fun updateController(packages: List?) { + private fun updateController(packages: List?) { binding.recycler.withModels { setFilterDuplicates(true) if (packages == null) { @@ -116,12 +114,17 @@ class AppsGamesFragment : BaseFragment() { ) 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 } ) diff --git a/app/src/main/java/com/aurora/store/viewmodel/all/InstalledViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/all/InstalledViewModel.kt index d16ddfa01..87f11a56e 100644 --- a/app/src/main/java/com/aurora/store/viewmodel/all/InstalledViewModel.kt +++ b/app/src/main/java/com/aurora/store/viewmodel/all/InstalledViewModel.kt @@ -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?>(null) + private val _packages = MutableStateFlow?>(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) }