Sync: add progress indicator for sync, need UI inputs.

This commit is contained in:
ganfra
2019-06-11 16:54:44 +02:00
parent 6323183119
commit 3dd161d65a
9 changed files with 123 additions and 39 deletions

View File

@ -19,6 +19,7 @@ package im.vector.riotredesign.features.home
import android.os.Bundle
import android.os.Parcelable
import android.view.LayoutInflater
import android.view.View
import androidx.core.view.forEachIndexed
import androidx.lifecycle.ViewModelProviders
import com.airbnb.mvrx.args
@ -26,6 +27,7 @@ import com.airbnb.mvrx.fragmentViewModel
import com.airbnb.mvrx.withState
import com.google.android.material.bottomnavigation.BottomNavigationItemView
import com.google.android.material.bottomnavigation.BottomNavigationMenuView
import im.vector.matrix.android.api.session.sync.SyncState
import im.vector.riotredesign.R
import im.vector.riotredesign.core.platform.ToolbarConfigurable
import im.vector.riotredesign.core.platform.VectorBaseFragment
@ -145,6 +147,10 @@ class HomeDetailFragment : VectorBaseFragment() {
unreadCounterBadgeViews[INDEX_CATCHUP].render(UnreadCounterBadgeView.State(it.notificationCountCatchup, it.notificationHighlightCatchup))
unreadCounterBadgeViews[INDEX_PEOPLE].render(UnreadCounterBadgeView.State(it.notificationCountPeople, it.notificationHighlightPeople))
unreadCounterBadgeViews[INDEX_ROOMS].render(UnreadCounterBadgeView.State(it.notificationCountRooms, it.notificationHighlightRooms))
syncProgressBar.visibility = when (it.syncState) {
is SyncState.RUNNING -> if (it.syncState.catchingUp) View.VISIBLE else View.GONE
else -> View.GONE
}
}
companion object {

View File

@ -18,6 +18,8 @@ package im.vector.riotredesign.features.home
import com.airbnb.mvrx.MvRxViewModelFactory
import com.airbnb.mvrx.ViewModelContext
import im.vector.matrix.android.api.session.Session
import im.vector.matrix.rx.rx
import im.vector.riotredesign.core.platform.VectorViewModel
import org.koin.android.ext.android.get
@ -25,6 +27,7 @@ import org.koin.android.ext.android.get
* View model used to update the home bottom bar notification counts
*/
class HomeDetailViewModel(initialState: HomeDetailViewState,
private val session: Session,
private val homeRoomListStore: HomeRoomListObservableStore)
: VectorViewModel<HomeDetailViewState>(initialState) {
@ -33,16 +36,29 @@ class HomeDetailViewModel(initialState: HomeDetailViewState,
@JvmStatic
override fun create(viewModelContext: ViewModelContext, state: HomeDetailViewState): HomeDetailViewModel? {
val homeRoomListStore = viewModelContext.activity.get<HomeRoomListObservableStore>()
return HomeDetailViewModel(state, homeRoomListStore)
val session = viewModelContext.activity.get<Session>()
return HomeDetailViewModel(state, session, homeRoomListStore)
}
}
init {
observeSyncState()
observeRoomSummaries()
}
// PRIVATE METHODS *****************************************************************************
private fun observeSyncState() {
session.rx()
.liveSyncState()
.subscribe { syncState ->
setState {
copy(syncState = syncState)
}
}
.disposeOnClear()
}
private fun observeRoomSummaries() {
homeRoomListStore
.observe()

View File

@ -17,6 +17,7 @@
package im.vector.riotredesign.features.home
import com.airbnb.mvrx.MvRxState
import im.vector.matrix.android.api.session.sync.SyncState
data class HomeDetailViewState(
val notificationCountCatchup: Int = 0,
@ -24,5 +25,6 @@ data class HomeDetailViewState(
val notificationCountPeople: Int = 0,
val notificationHighlightPeople: Boolean = false,
val notificationCountRooms: Int = 0,
val notificationHighlightRooms: Boolean = false
val notificationHighlightRooms: Boolean = false,
val syncState: SyncState = SyncState.IDLE
) : MvRxState

View File

@ -44,13 +44,26 @@
</androidx.appcompat.widget.Toolbar>
<ProgressBar
android:id="@+id/syncProgressBar"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:indeterminate="true"
android:visibility="gone"
android:background="?riotx_header_panel_background"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/groupToolbar"
tools:visibility="visible" />
<FrameLayout
android:id="@+id/roomListContainer"
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="?riotx_header_panel_background"
app:layout_constraintBottom_toTopOf="@+id/bottomNavigationView"
app:layout_constraintTop_toBottomOf="@+id/groupToolbar" />
app:layout_constraintTop_toBottomOf="@+id/syncProgressBar" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottomNavigationView"