AppUpdateView: Show icons on incompatible updates buttons

- Slashed circle: Disabled
- Shield with a cross: Fails certificate verification

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2024-02-12 14:58:59 +05:30
parent 41b13c3429
commit d4552007a7
7 changed files with 64 additions and 14 deletions

View File

@@ -0,0 +1,22 @@
package com.aurora.extensions
import android.content.Context
import android.content.pm.PackageManager
import com.aurora.gplayapi.data.models.App
import com.aurora.store.util.CertUtil
fun App.isEnabled(context: Context): Boolean {
return context.packageManager.getApplicationInfo(
this.packageName,
PackageManager.GET_META_DATA
).enabled
}
fun App.hasValidCertificate(context: Context): Boolean {
return this.certificateSetList.any {
it.certificateSet in CertUtil.getEncodedCertificateHashes(
context,
this.packageName
)
}
}

View File

@@ -22,6 +22,7 @@ package com.aurora.store.view.custom.layouts.button
import android.content.Context
import android.util.AttributeSet
import android.widget.RelativeLayout
import androidx.annotation.DrawableRes
import com.aurora.extensions.getString
import com.aurora.extensions.runOnUiThread
import com.aurora.store.R
@@ -72,6 +73,12 @@ class UpdateButton : RelativeLayout {
B.btnPositive.text = getString(text)
}
fun setIcon(@DrawableRes drawable: Int) {
B.btnPositive.setIconResource(drawable)
B.btnNegative.setIconResource(drawable)
B.btnQueued.setIconResource(drawable)
}
fun updateState(downloadStatus: DownloadStatus) {
val displayChild = when (downloadStatus) {
DownloadStatus.QUEUED,

View File

@@ -32,7 +32,9 @@ import com.airbnb.epoxy.CallbackProp
import com.airbnb.epoxy.ModelProp
import com.airbnb.epoxy.ModelView
import com.airbnb.epoxy.OnViewRecycled
import com.aurora.extensions.hasValidCertificate
import com.aurora.extensions.invisible
import com.aurora.extensions.isEnabled
import com.aurora.extensions.px
import com.aurora.gplayapi.data.models.App
import com.aurora.store.R
@@ -81,6 +83,12 @@ class AppUpdateView : RelativeLayout {
transformations(RoundedCornersTransformation(8.px.toFloat()))
}
if (isEnabled(context)) {
if (!hasValidCertificate(context)) B.btnAction.setIcon(R.drawable.ic_security_fail)
} else {
B.btnAction.setIcon(R.drawable.ic_disabled)
}
B.txtLine2.text = developerName
B.txtLine3.text = ("${CommonUtil.addSiPrefix(size)}$updatedOn")
B.txtLine4.text = ("$versionName (${versionCode})")

View File

@@ -23,8 +23,8 @@ import android.app.Application
import android.util.Log
import androidx.core.content.pm.PackageInfoCompat
import androidx.lifecycle.viewModelScope
import com.aurora.extensions.hasValidCertificate
import com.aurora.gplayapi.data.models.App
import com.aurora.store.util.CertUtil
import com.aurora.store.util.DownloadWorkerUtil
import com.aurora.store.util.Preferences
import dagger.hilt.android.lifecycle.HiltViewModel
@@ -67,16 +67,7 @@ class UpdatesViewModel @Inject constructor(
}
}.sortedBy { it.displayName.lowercase(Locale.getDefault()) }.also { apps ->
if (!isExtendedUpdateEnabled) {
_updates.emit(
apps.filter { app ->
app.certificateSetList.any {
it.certificateSet in CertUtil.getEncodedCertificateHashes(
getApplication(),
app.packageName
)
}
}
)
_updates.emit(apps.filter { it.hasValidCertificate(getApplication()) })
} else {
_updates.emit(apps)
}