diff --git a/app/src/main/java/com/aurora/extensions/App.kt b/app/src/main/java/com/aurora/extensions/App.kt new file mode 100644 index 000000000..b02ad7fb2 --- /dev/null +++ b/app/src/main/java/com/aurora/extensions/App.kt @@ -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 + ) + } +} diff --git a/app/src/main/java/com/aurora/store/view/custom/layouts/button/UpdateButton.kt b/app/src/main/java/com/aurora/store/view/custom/layouts/button/UpdateButton.kt index f8261d32a..f5b5196e0 100644 --- a/app/src/main/java/com/aurora/store/view/custom/layouts/button/UpdateButton.kt +++ b/app/src/main/java/com/aurora/store/view/custom/layouts/button/UpdateButton.kt @@ -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, diff --git a/app/src/main/java/com/aurora/store/view/epoxy/views/app/AppUpdateView.kt b/app/src/main/java/com/aurora/store/view/epoxy/views/app/AppUpdateView.kt index e973ff853..5cbe3b4ab 100644 --- a/app/src/main/java/com/aurora/store/view/epoxy/views/app/AppUpdateView.kt +++ b/app/src/main/java/com/aurora/store/view/epoxy/views/app/AppUpdateView.kt @@ -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})") diff --git a/app/src/main/java/com/aurora/store/viewmodel/all/UpdatesViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/all/UpdatesViewModel.kt index e93317044..f8f846af9 100644 --- a/app/src/main/java/com/aurora/store/viewmodel/all/UpdatesViewModel.kt +++ b/app/src/main/java/com/aurora/store/viewmodel/all/UpdatesViewModel.kt @@ -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) } diff --git a/app/src/main/res/drawable/ic_disabled.xml b/app/src/main/res/drawable/ic_disabled.xml new file mode 100644 index 000000000..a13a7ff14 --- /dev/null +++ b/app/src/main/res/drawable/ic_disabled.xml @@ -0,0 +1,11 @@ + + + + diff --git a/app/src/main/res/drawable/ic_security_fail.xml b/app/src/main/res/drawable/ic_security_fail.xml new file mode 100644 index 000000000..08b02ca58 --- /dev/null +++ b/app/src/main/res/drawable/ic_security_fail.xml @@ -0,0 +1,11 @@ + + + + diff --git a/app/src/main/res/layout/view_update_button.xml b/app/src/main/res/layout/view_update_button.xml index 773b548e1..83d37996e 100644 --- a/app/src/main/res/layout/view_update_button.xml +++ b/app/src/main/res/layout/view_update_button.xml @@ -36,7 +36,7 @@