InstalledApps: Minor tweak
This commit is contained in:
@@ -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)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
}
|
||||
)
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user