Added progressbars to repo items
This commit is contained in:
parent
d6d82edff5
commit
027a5695f2
@ -102,6 +102,8 @@ class RepoItem(val item: Repo) : ComparableRvItem<RepoItem>() {
|
|||||||
|
|
||||||
override val layoutRes: Int = R.layout.item_repo_md2
|
override val layoutRes: Int = R.layout.item_repo_md2
|
||||||
|
|
||||||
|
val progress = KObservableField(0)
|
||||||
|
|
||||||
override fun contentSameAs(other: RepoItem): Boolean = item == other.item
|
override fun contentSameAs(other: RepoItem): Boolean = item == other.item
|
||||||
override fun itemSameAs(other: RepoItem): Boolean = item.id == other.item.id
|
override fun itemSameAs(other: RepoItem): Boolean = item.id == other.item.id
|
||||||
}
|
}
|
||||||
|
@ -10,12 +10,15 @@ import com.topjohnwu.magisk.data.database.RepoByNameDao
|
|||||||
import com.topjohnwu.magisk.data.database.RepoByUpdatedDao
|
import com.topjohnwu.magisk.data.database.RepoByUpdatedDao
|
||||||
import com.topjohnwu.magisk.databinding.ComparableRvItem
|
import com.topjohnwu.magisk.databinding.ComparableRvItem
|
||||||
import com.topjohnwu.magisk.extensions.subscribeK
|
import com.topjohnwu.magisk.extensions.subscribeK
|
||||||
|
import com.topjohnwu.magisk.model.download.RemoteFileService
|
||||||
|
import com.topjohnwu.magisk.model.entity.internal.DownloadSubject
|
||||||
import com.topjohnwu.magisk.model.entity.module.Module
|
import com.topjohnwu.magisk.model.entity.module.Module
|
||||||
import com.topjohnwu.magisk.model.entity.module.Repo
|
import com.topjohnwu.magisk.model.entity.module.Repo
|
||||||
import com.topjohnwu.magisk.model.entity.recycler.LoadingItem
|
import com.topjohnwu.magisk.model.entity.recycler.LoadingItem
|
||||||
import com.topjohnwu.magisk.model.entity.recycler.ModuleItem
|
import com.topjohnwu.magisk.model.entity.recycler.ModuleItem
|
||||||
import com.topjohnwu.magisk.model.entity.recycler.RepoItem
|
import com.topjohnwu.magisk.model.entity.recycler.RepoItem
|
||||||
import com.topjohnwu.magisk.model.entity.recycler.SectionTitle
|
import com.topjohnwu.magisk.model.entity.recycler.SectionTitle
|
||||||
|
import com.topjohnwu.magisk.model.events.dialog.ModuleInstallDialog
|
||||||
import com.topjohnwu.magisk.redesign.compat.CompatViewModel
|
import com.topjohnwu.magisk.redesign.compat.CompatViewModel
|
||||||
import com.topjohnwu.magisk.redesign.home.itemBindingOf
|
import com.topjohnwu.magisk.redesign.home.itemBindingOf
|
||||||
import com.topjohnwu.magisk.redesign.superuser.diffListOf
|
import com.topjohnwu.magisk.redesign.superuser.diffListOf
|
||||||
@ -27,6 +30,7 @@ import io.reactivex.android.schedulers.AndroidSchedulers
|
|||||||
import io.reactivex.disposables.Disposable
|
import io.reactivex.disposables.Disposable
|
||||||
import me.tatarka.bindingcollectionadapter2.BindingRecyclerViewAdapter
|
import me.tatarka.bindingcollectionadapter2.BindingRecyclerViewAdapter
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
|
import kotlin.math.roundToInt
|
||||||
|
|
||||||
class ModuleViewModel(
|
class ModuleViewModel(
|
||||||
private val repoName: RepoByNameDao,
|
private val repoName: RepoByNameDao,
|
||||||
@ -72,6 +76,19 @@ class ModuleViewModel(
|
|||||||
|
|
||||||
// ---
|
// ---
|
||||||
|
|
||||||
|
init {
|
||||||
|
RemoteFileService.reset()
|
||||||
|
RemoteFileService.progressBroadcast.observeForever {
|
||||||
|
val (progress, subject) = it ?: return@observeForever
|
||||||
|
if (subject !is DownloadSubject.Module) {
|
||||||
|
return@observeForever
|
||||||
|
}
|
||||||
|
update(subject.module, progress.times(100).roundToInt())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---
|
||||||
|
|
||||||
override fun refresh() = Single.fromCallable { Module.loadModules() }
|
override fun refresh() = Single.fromCallable { Module.loadModules() }
|
||||||
.map { it.map { ModuleItem(it) } }
|
.map { it.map { ModuleItem(it) } }
|
||||||
.map { it.order() }
|
.map { it.order() }
|
||||||
@ -150,6 +167,11 @@ class ModuleViewModel(
|
|||||||
return me
|
return me
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun update(repo: Repo, progress: Int) = Single.fromCallable { itemsRemote }
|
||||||
|
.map { it.first { it.item.id == repo.id } }
|
||||||
|
.subscribeK { it.progress.value = progress }
|
||||||
|
.add()
|
||||||
|
|
||||||
// ---
|
// ---
|
||||||
|
|
||||||
@UiThread
|
@UiThread
|
||||||
|
@ -105,10 +105,29 @@
|
|||||||
|
|
||||||
<ProgressBar
|
<ProgressBar
|
||||||
style="?styleProgressDeterminate"
|
style="?styleProgressDeterminate"
|
||||||
|
goneUnless="@{item.progress > 0 && item.progress < 100}"
|
||||||
|
progressAnimated="@{item.progress}"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_gravity="bottom"
|
android:layout_gravity="bottom"
|
||||||
tools:progress="40" />
|
tools:progress="40" />
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="bottom">
|
||||||
|
|
||||||
|
<androidx.core.widget.ContentLoadingProgressBar
|
||||||
|
style="?styleProgressIndeterminate"
|
||||||
|
goneUnless="@{item.progress == -100}"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:layout_marginTop="-4dp"
|
||||||
|
android:layout_marginBottom="-5dp"
|
||||||
|
tools:progress="40" />
|
||||||
|
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
</com.google.android.material.card.MaterialCardView>
|
</com.google.android.material.card.MaterialCardView>
|
||||||
|
|
||||||
</layout>
|
</layout>
|
||||||
|
Loading…
Reference in New Issue
Block a user