Improvements to download progress UI

Switch to LinearProgressIndicator where possible and show an indeterminate
progress bar while download progress is below 1%

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2023-12-31 14:56:22 +05:30
parent fe88345734
commit f851a5ad3e
7 changed files with 54 additions and 73 deletions

View File

@@ -20,14 +20,10 @@
package com.aurora.store.view.epoxy.views.app package com.aurora.store.view.epoxy.views.app
import android.content.Context import android.content.Context
import android.graphics.Color
import android.graphics.PorterDuff
import android.graphics.PorterDuffColorFilter
import android.util.AttributeSet import android.util.AttributeSet
import android.view.View import android.view.View
import android.widget.RelativeLayout import android.widget.RelativeLayout
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.graphics.ColorUtils
import androidx.core.text.HtmlCompat import androidx.core.text.HtmlCompat
import androidx.core.view.isVisible import androidx.core.view.isVisible
import coil.load import coil.load
@@ -73,11 +69,6 @@ class AppUpdateView : RelativeLayout {
private fun init(context: Context?) { private fun init(context: Context?) {
val view = inflate(context, R.layout.view_app_update, this) val view = inflate(context, R.layout.view_app_update, this)
B = ViewAppUpdateBinding.bind(view) B = ViewAppUpdateBinding.bind(view)
B.progressDownload.progressDrawable?.apply {
val alphaColor = ColorUtils.setAlphaComponent(Color.GRAY, 100)
colorFilter = PorterDuffColorFilter(alphaColor, PorterDuff.Mode.SRC_IN)
}
} }
@ModelProp @ModelProp
@@ -118,6 +109,7 @@ class AppUpdateView : RelativeLayout {
if (download != null) { if (download != null) {
/*Inflate Download details*/ /*Inflate Download details*/
B.btnAction.updateState(download.status) B.btnAction.updateState(download.status)
B.progressDownload.isIndeterminate = download.progress < 1
when (download.status) { when (download.status) {
DownloadStatus.QUEUED -> { DownloadStatus.QUEUED -> {
B.progressDownload.progress = 0 B.progressDownload.progress = 0

View File

@@ -249,7 +249,9 @@ class AppDetailsFragment : BaseFragment(R.layout.fragment_details) {
if (it.isFinished) flip(0) else flip(1) if (it.isFinished) flip(0) else flip(1)
when (it.status) { when (it.status) {
DownloadStatus.QUEUED, DownloadStatus.QUEUED -> {
updateProgress(it.progress)
}
DownloadStatus.DOWNLOADING -> { DownloadStatus.DOWNLOADING -> {
updateProgress(it.progress, it.speed, it.timeRemaining) updateProgress(it.progress, it.speed, it.timeRemaining)
} }
@@ -580,13 +582,10 @@ class AppDetailsFragment : BaseFragment(R.layout.fragment_details) {
binding.layoutDetailsInstall.apply { binding.layoutDetailsInstall.apply {
txtProgressPercent.text = ("${progress}%") txtProgressPercent.text = ("${progress}%")
progressDownload.apply {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { this.progress = progress
progressDownload.setProgress(progress, true) isIndeterminate = progress < 1
} else {
progressDownload.progress = progress
} }
txtEta.text = CommonUtil.getETAString(requireContext(), timeRemaining) txtEta.text = CommonUtil.getETAString(requireContext(), timeRemaining)
txtSpeed.text = CommonUtil.getDownloadSpeedString(requireContext(), speed) txtSpeed.text = CommonUtil.getDownloadSpeedString(requireContext(), speed)
} }

View File

@@ -1,37 +0,0 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ Aurora Store
~ Copyright (C) 2021, Rahul Kumar Patel <whyorean@gmail.com>
~
~ Aurora Store is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by
~ the Free Software Foundation, either version 2 of the License, or
~ (at your option) any later version.
~
~ Aurora Store is distributed in the hope that it will be useful,
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
~ GNU General Public License for more details.
~
~ You should have received a copy of the GNU General Public License
~ along with Aurora Store. If not, see <http://www.gnu.org/licenses/>.
~
-->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape>
<corners android:radius="8dp" />
<solid android:color="@color/colorScrim" />
</shape>
</item>
<item android:id="@android:id/progress">
<clip>
<shape>
<corners android:radius="8dp" />
<solid android:color="@color/colorScrimAlt" />
</shape>
</clip>
</item>
</layer-list>

View File

@@ -60,15 +60,22 @@
android:gravity="center_vertical" android:gravity="center_vertical"
android:weightSum="4"> android:weightSum="4">
<ProgressBar <com.google.android.material.progressindicator.LinearProgressIndicator
android:id="@+id/progress_download" android:id="@+id/progress_download"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/icon_size_small" android:layout_height="match_parent"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_toStartOf="@id/img_cancel" android:layout_toStartOf="@id/img_cancel"
android:indeterminateTint="@color/colorScrim" android:indeterminate="true"
android:progressDrawable="@drawable/progressbar_bg" android:indeterminateTint="@color/colorScrimAlt"
app:indicatorColor="@color/colorScrimAlt"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:trackColor="@color/colorScrim"
app:trackCornerRadius="10dp"
app:trackThickness="@dimen/icon_size_small"
tools:progress="40" /> tools:progress="40" />
<LinearLayout <LinearLayout
@@ -159,4 +166,4 @@
android:textColor="@color/colorWhite" android:textColor="@color/colorWhite"
tools:text="@string/purchase_invalid" /> tools:text="@string/purchase_invalid" />
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>

View File

@@ -52,14 +52,15 @@
<com.google.android.material.progressindicator.CircularProgressIndicator <com.google.android.material.progressindicator.CircularProgressIndicator
android:id="@+id/progress_download" android:id="@+id/progress_download"
style="@style/Widget.Material3.CircularProgressIndicator" android:layout_width="match_parent"
android:layout_width="@dimen/icon_size_medium" android:layout_height="match_parent"
android:layout_height="@dimen/icon_size_medium"
android:layout_centerInParent="true" android:layout_centerInParent="true"
android:background="@drawable/progressbar_bg" android:indeterminate="true"
android:indeterminate="false" android:indeterminateTint="@color/colorScrimAlt"
android:visibility="invisible" android:visibility="gone"
app:trackThickness="24dp" app:indicatorColor="@color/colorScrimAlt"
app:trackColor="@color/colorScrim"
app:trackThickness="@dimen/icon_size_default"
tools:progress="40" /> tools:progress="40" />
</RelativeLayout> </RelativeLayout>

View File

@@ -21,6 +21,7 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="?android:attr/selectableItemBackground" android:background="?android:attr/selectableItemBackground"
android:paddingStart="@dimen/padding_small" android:paddingStart="@dimen/padding_small"
android:paddingEnd="@dimen/padding_small"> android:paddingEnd="@dimen/padding_small">
@@ -61,12 +62,19 @@
android:textAlignment="viewStart" android:textAlignment="viewStart"
tools:text="Status" /> tools:text="Status" />
<ProgressBar <com.google.android.material.progressindicator.LinearProgressIndicator
android:id="@+id/progress_download" android:id="@+id/progress_download"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="match_parent"
android:indeterminate="false"
android:max="100" android:max="100"
app:indicatorColor="@color/colorAccent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:trackColor="@android:color/darker_gray"
app:trackCornerRadius="10dp"
tools:progress="75" /> tools:progress="75" />
<LinearLayout <LinearLayout

View File

@@ -18,6 +18,8 @@
--> -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="@dimen/margin_normal" android:layout_marginStart="@dimen/margin_normal"
@@ -34,12 +36,21 @@
android:textColor="?android:attr/textColorPrimary" android:textColor="?android:attr/textColorPrimary"
android:textStyle="bold" /> android:textStyle="bold" />
<ProgressBar <com.google.android.material.progressindicator.LinearProgressIndicator
android:id="@+id/avg_rating" android:id="@+id/avg_rating"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="8dp" android:layout_height="match_parent"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_toEndOf="@+id/avg_num" android:layout_toEndOf="@+id/avg_num"
android:progressDrawable="@drawable/bg_progressbar" /> android:indeterminate="false"
app:indicatorColor="@color/colorAccent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:trackColor="@android:color/darker_gray"
app:trackCornerRadius="10dp"
app:trackThickness="8dp"
tools:progress="40" />
</RelativeLayout> </RelativeLayout>