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)
}

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M791,905L700,814Q651,846 595.5,863Q540,880 480,880Q397,880 324,848.5Q251,817 197,763Q143,709 111.5,636Q80,563 80,480Q80,420 97,364.5Q114,309 146,260L55,169L112,112L848,848L791,905ZM480,800Q523,800 563.5,789Q604,778 642,756L204,318Q182,356 171,396.5Q160,437 160,480Q160,613 253.5,706.5Q347,800 480,800ZM814,700L756,642Q778,604 789,563.5Q800,523 800,480Q800,347 706.5,253.5Q613,160 480,160Q437,160 396.5,171Q356,182 318,204L260,146Q309,114 364.5,97Q420,80 480,80Q563,80 636,111.5Q709,143 763,197Q817,251 848.5,324Q880,397 880,480Q880,540 863,595.5Q846,651 814,700ZM537,423L537,423Q537,423 537,423Q537,423 537,423Q537,423 537,423Q537,423 537,423Q537,423 537,423Q537,423 537,423ZM423,537Q423,537 423,537Q423,537 423,537L423,537Q423,537 423,537Q423,537 423,537Q423,537 423,537Q423,537 423,537Z"/>
</vector>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M396,620L480,536L564,620L620,564L536,480L620,396L564,340L480,424L396,340L340,396L424,480L340,564L396,620ZM480,880Q341,845 250.5,720.5Q160,596 160,444L160,200L480,80L800,200L800,444Q800,596 709.5,720.5Q619,845 480,880ZM480,796Q584,763 652,664Q720,565 720,444L720,255L480,165L240,255L240,444Q240,565 308,664Q376,763 480,796ZM480,480Q480,480 480,480Q480,480 480,480L480,480L480,480L480,480L480,480Q480,480 480,480Q480,480 480,480Z"/>
</vector>

View File

@@ -36,7 +36,7 @@
<com.google.android.material.button.MaterialButton
android:id="@+id/btnPositive"
style="@style/Widget.Material3.Button.OutlinedButton"
style="@style/Widget.Material3.Button.OutlinedButton.Icon"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/action_update"
@@ -49,7 +49,7 @@
<com.google.android.material.button.MaterialButton
android:id="@+id/btnQueued"
style="@style/Widget.Material3.Button.OutlinedButton"
style="@style/Widget.Material3.Button.OutlinedButton.Icon"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:enabled="false"
@@ -63,7 +63,7 @@
<com.google.android.material.button.MaterialButton
android:id="@+id/btnNegative"
style="@style/Widget.Material3.Button.OutlinedButton"
style="@style/Widget.Material3.Button.OutlinedButton.Icon"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/action_cancel"