AppDetails: Update header layout to better show unknown apps

This commit is contained in:
Rahul Patel
2024-12-15 00:06:46 +05:30
parent c7fefb12c7
commit 5e40f0cb53
4 changed files with 49 additions and 14 deletions

View File

@@ -21,6 +21,7 @@ package com.aurora.extensions
import android.view.View
import android.view.inputmethod.InputMethodManager
import android.widget.TextView
import androidx.core.content.getSystemService
fun View.isVisible() = visibility == View.VISIBLE
@@ -51,3 +52,13 @@ fun View.hideKeyboard(): Boolean {
}
return false
}
fun TextView.updateText(text: String?) {
if (text.isNullOrEmpty()) {
hide()
} else {
show()
this.text = text
}
}

View File

@@ -27,11 +27,13 @@ import android.content.pm.PackageManager
import android.content.pm.PackageManager.PackageInfoFlags
import android.content.pm.SharedLibraryInfo
import android.graphics.Bitmap
import android.graphics.drawable.Drawable
import android.net.Uri
import android.os.Build
import android.provider.Settings
import android.util.Log
import androidx.annotation.RequiresApi
import androidx.appcompat.content.res.AppCompatResources
import androidx.core.content.pm.PackageInfoCompat
import androidx.core.graphics.drawable.toBitmap
import com.aurora.extensions.isHuawei
@@ -40,6 +42,7 @@ import com.aurora.extensions.isPAndAbove
import com.aurora.extensions.isTAndAbove
import com.aurora.extensions.isValidApp
import com.aurora.store.BuildConfig
import com.aurora.store.R
import java.util.Locale
object PackageUtil {
@@ -235,6 +238,20 @@ object PackageUtil {
}
}
fun getIconDrawableForPackage(context: Context, packageName: String): Drawable? {
val placeholder = AppCompatResources.getDrawable(context, R.drawable.bg_placeholder)
return try {
val packageInfo = context.packageManager.getPackageInfo(packageName, 0)
val applicationInfo = packageInfo.applicationInfo ?: return placeholder
applicationInfo.loadIcon(context.packageManager)
} catch (exception: Exception) {
Log.e(TAG, "Failed to get icon for package!", exception)
placeholder
}
}
private fun getAllSharedLibraries(context: Context, flags: Int = 0): List<SharedLibraryInfo> {
return if (isTAndAbove) {
context.packageManager.getSharedLibraries(PackageInfoFlags.of(flags.toLong()))

View File

@@ -40,7 +40,7 @@ import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import coil3.asDrawable
import coil3.load
import coil3.request.placeholder
import coil3.request.error
import coil3.request.transformations
import coil3.transform.CircleCropTransformation
import coil3.transform.RoundedCornersTransformation
@@ -55,6 +55,7 @@ import com.aurora.extensions.runOnUiThread
import com.aurora.extensions.share
import com.aurora.extensions.show
import com.aurora.extensions.toast
import com.aurora.extensions.updateText
import com.aurora.gplayapi.data.models.App
import com.aurora.gplayapi.data.models.Review
import com.aurora.gplayapi.data.models.StreamBundle
@@ -196,7 +197,7 @@ class AppDetailsFragment : BaseFragment<FragmentDetailsBinding>() {
}
// Show the basic app details, while the rest of the data is being fetched
updateAppHeader(app)
updateAppHeader(app, false)
// Toolbar
attachToolbar(app)
@@ -468,20 +469,25 @@ class AppDetailsFragment : BaseFragment<FragmentDetailsBinding>() {
}
}
private fun updateAppHeader(app: App) {
private fun updateAppHeader(app: App, isFullApp: Boolean = true) {
binding.layoutDetailsApp.apply {
val fallbackDrawable = if (isFullApp)
ContextCompat.getDrawable(requireContext(), R.drawable.bg_placeholder)
else
PackageUtil.getIconDrawableForPackage(requireContext(), app.packageName)
imgIcon.load(app.iconArtwork.url) {
placeholder(R.drawable.bg_placeholder)
error(fallbackDrawable)
transformations(RoundedCornersTransformation(32F))
listener { _, result ->
result.image.asDrawable(resources).let { iconDrawable = it }
}
}
packageName.text = app.packageName
txtLine1.text = app.displayName
txtLine2.text = app.developerName
txtLine3.text = ("${app.versionName} (${app.versionCode})")
packageName.updateText(app.packageName)
txtLine1.updateText(app.displayName)
txtLine2.updateText(app.developerName)
txtLine3.updateText(("${app.versionName} (${app.versionCode})"))
txtLine2.setOnClickListener {
findNavController().navigate(
@@ -490,10 +496,12 @@ class AppDetailsFragment : BaseFragment<FragmentDetailsBinding>() {
)
}
tags.add(getString((if (app.isFree) R.string.details_free else R.string.details_paid)))
tags.add(getString((if (app.containsAds) R.string.details_contains_ads else R.string.details_no_ads)))
txtLine4.text = tags.joinToString(separator = "")
// Do not show tags for web apps or unknown apps
if (isFullApp) {
tags.add(getString((if (app.isFree) R.string.details_free else R.string.details_paid)))
tags.add(getString((if (app.containsAds) R.string.details_contains_ads else R.string.details_no_ads)))
txtLine4.updateText(tags.joinToString(separator = ""))
}
}
}