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:
22
app/src/main/java/com/aurora/extensions/App.kt
Normal file
22
app/src/main/java/com/aurora/extensions/App.kt
Normal 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
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -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,
|
||||
|
||||
@@ -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})")
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
11
app/src/main/res/drawable/ic_disabled.xml
Normal file
11
app/src/main/res/drawable/ic_disabled.xml
Normal 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>
|
||||
11
app/src/main/res/drawable/ic_security_fail.xml
Normal file
11
app/src/main/res/drawable/ic_security_fail.xml
Normal 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>
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user