forked from GitHub-Mirror/riotX-android
Integrate keysbackup banner
This commit is contained in:
parent
5621f0661e
commit
4827b76b80
@ -20,20 +20,26 @@ import android.os.Bundle
|
|||||||
import android.os.Parcelable
|
import android.os.Parcelable
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import androidx.core.view.forEachIndexed
|
import androidx.core.view.forEachIndexed
|
||||||
|
import androidx.lifecycle.Observer
|
||||||
import androidx.lifecycle.ViewModelProviders
|
import androidx.lifecycle.ViewModelProviders
|
||||||
import com.airbnb.mvrx.args
|
import com.airbnb.mvrx.args
|
||||||
import com.airbnb.mvrx.fragmentViewModel
|
import com.airbnb.mvrx.fragmentViewModel
|
||||||
import com.airbnb.mvrx.withState
|
import com.airbnb.mvrx.withState
|
||||||
import com.google.android.material.bottomnavigation.BottomNavigationItemView
|
import com.google.android.material.bottomnavigation.BottomNavigationItemView
|
||||||
import com.google.android.material.bottomnavigation.BottomNavigationMenuView
|
import com.google.android.material.bottomnavigation.BottomNavigationMenuView
|
||||||
|
import im.vector.matrix.android.api.session.Session
|
||||||
|
import im.vector.matrix.android.api.session.crypto.keysbackup.KeysBackupState
|
||||||
import im.vector.riotredesign.R
|
import im.vector.riotredesign.R
|
||||||
import im.vector.riotredesign.core.platform.ToolbarConfigurable
|
import im.vector.riotredesign.core.platform.ToolbarConfigurable
|
||||||
import im.vector.riotredesign.core.platform.VectorBaseFragment
|
import im.vector.riotredesign.core.platform.VectorBaseFragment
|
||||||
|
import im.vector.riotredesign.core.ui.views.KeysBackupBanner
|
||||||
import im.vector.riotredesign.features.home.room.list.RoomListFragment
|
import im.vector.riotredesign.features.home.room.list.RoomListFragment
|
||||||
import im.vector.riotredesign.features.home.room.list.RoomListParams
|
import im.vector.riotredesign.features.home.room.list.RoomListParams
|
||||||
import im.vector.riotredesign.features.home.room.list.UnreadCounterBadgeView
|
import im.vector.riotredesign.features.home.room.list.UnreadCounterBadgeView
|
||||||
|
import im.vector.riotredesign.features.workers.signout.SignOutViewModel
|
||||||
import kotlinx.android.parcel.Parcelize
|
import kotlinx.android.parcel.Parcelize
|
||||||
import kotlinx.android.synthetic.main.fragment_home_detail.*
|
import kotlinx.android.synthetic.main.fragment_home_detail.*
|
||||||
|
import org.koin.android.ext.android.inject
|
||||||
|
|
||||||
|
|
||||||
@Parcelize
|
@Parcelize
|
||||||
@ -50,7 +56,7 @@ private const val INDEX_CATCHUP = 0
|
|||||||
private const val INDEX_PEOPLE = 1
|
private const val INDEX_PEOPLE = 1
|
||||||
private const val INDEX_ROOMS = 2
|
private const val INDEX_ROOMS = 2
|
||||||
|
|
||||||
class HomeDetailFragment : VectorBaseFragment() {
|
class HomeDetailFragment : VectorBaseFragment(), KeysBackupBanner.Delegate {
|
||||||
|
|
||||||
private val params: HomeDetailParams by args()
|
private val params: HomeDetailParams by args()
|
||||||
private val unreadCounterBadgeViews = arrayListOf<UnreadCounterBadgeView>()
|
private val unreadCounterBadgeViews = arrayListOf<UnreadCounterBadgeView>()
|
||||||
@ -59,6 +65,8 @@ class HomeDetailFragment : VectorBaseFragment() {
|
|||||||
private val viewModel: HomeDetailViewModel by fragmentViewModel()
|
private val viewModel: HomeDetailViewModel by fragmentViewModel()
|
||||||
private lateinit var navigationViewModel: HomeNavigationViewModel
|
private lateinit var navigationViewModel: HomeNavigationViewModel
|
||||||
|
|
||||||
|
private val session by inject<Session>()
|
||||||
|
|
||||||
override fun getLayoutResId(): Int {
|
override fun getLayoutResId(): Int {
|
||||||
return R.layout.fragment_home_detail
|
return R.layout.fragment_home_detail
|
||||||
}
|
}
|
||||||
@ -73,6 +81,41 @@ class HomeDetailFragment : VectorBaseFragment() {
|
|||||||
switchDisplayMode(currentDisplayMode)
|
switchDisplayMode(currentDisplayMode)
|
||||||
setupBottomNavigationView()
|
setupBottomNavigationView()
|
||||||
setupToolbar()
|
setupToolbar()
|
||||||
|
setupKeysBackupBanner()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setupKeysBackupBanner() {
|
||||||
|
// Keys backup banner
|
||||||
|
// Use the SignOutViewModel, it observe the keys backup state and this is what we need here
|
||||||
|
val model = ViewModelProviders.of(this).get(SignOutViewModel::class.java)
|
||||||
|
|
||||||
|
model.init(session)
|
||||||
|
|
||||||
|
model.keysBackupState.observe(this, Observer { keysBackupState ->
|
||||||
|
when (keysBackupState) {
|
||||||
|
null ->
|
||||||
|
homeKeysBackupBanner.render(KeysBackupBanner.State.Hidden, false)
|
||||||
|
KeysBackupState.Disabled ->
|
||||||
|
homeKeysBackupBanner.render(KeysBackupBanner.State.Setup(model.getNumberOfKeysToBackup()), false)
|
||||||
|
KeysBackupState.NotTrusted,
|
||||||
|
KeysBackupState.WrongBackUpVersion ->
|
||||||
|
// In this case, getCurrentBackupVersion() should not return ""
|
||||||
|
homeKeysBackupBanner.render(KeysBackupBanner.State.Recover(model.getCurrentBackupVersion()), false)
|
||||||
|
KeysBackupState.WillBackUp,
|
||||||
|
KeysBackupState.BackingUp ->
|
||||||
|
homeKeysBackupBanner.render(KeysBackupBanner.State.BackingUp, false)
|
||||||
|
KeysBackupState.ReadyToBackUp ->
|
||||||
|
if (model.canRestoreKeys()) {
|
||||||
|
homeKeysBackupBanner.render(KeysBackupBanner.State.Update(model.getCurrentBackupVersion()), false)
|
||||||
|
} else {
|
||||||
|
homeKeysBackupBanner.render(KeysBackupBanner.State.Hidden, false)
|
||||||
|
}
|
||||||
|
else ->
|
||||||
|
homeKeysBackupBanner.render(KeysBackupBanner.State.Hidden, false)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
homeKeysBackupBanner.delegate = this
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -140,6 +183,17 @@ class HomeDetailFragment : VectorBaseFragment() {
|
|||||||
.commit()
|
.commit()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ==========================================================================================
|
||||||
|
* KeysBackupBanner Listener
|
||||||
|
* ========================================================================================== */
|
||||||
|
|
||||||
|
override fun setupKeysBackup() {
|
||||||
|
navigator.openKeysBackupSetup(requireActivity(), false)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun recoverKeysBackup() {
|
||||||
|
navigator.openKeysBackupManager(requireActivity())
|
||||||
|
}
|
||||||
|
|
||||||
override fun invalidate() = withState(viewModel) {
|
override fun invalidate() = withState(viewModel) {
|
||||||
unreadCounterBadgeViews[INDEX_CATCHUP].render(UnreadCounterBadgeView.State(it.notificationCountCatchup, it.notificationHighlightCatchup))
|
unreadCounterBadgeViews[INDEX_CATCHUP].render(UnreadCounterBadgeView.State(it.notificationCountCatchup, it.notificationHighlightCatchup))
|
||||||
|
@ -19,6 +19,8 @@ package im.vector.riotredesign.features.navigation
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import im.vector.matrix.android.api.session.room.model.roomdirectory.PublicRoom
|
import im.vector.matrix.android.api.session.room.model.roomdirectory.PublicRoom
|
||||||
|
import im.vector.riotredesign.features.crypto.keysbackup.settings.KeysBackupManageActivity
|
||||||
|
import im.vector.riotredesign.features.crypto.keysbackup.setup.KeysBackupSetupActivity
|
||||||
import im.vector.riotredesign.features.debug.DebugMenuActivity
|
import im.vector.riotredesign.features.debug.DebugMenuActivity
|
||||||
import im.vector.riotredesign.features.home.room.detail.RoomDetailActivity
|
import im.vector.riotredesign.features.home.room.detail.RoomDetailActivity
|
||||||
import im.vector.riotredesign.features.home.room.detail.RoomDetailArgs
|
import im.vector.riotredesign.features.home.room.detail.RoomDetailArgs
|
||||||
@ -53,4 +55,12 @@ class DefaultNavigator : Navigator {
|
|||||||
override fun openDebug(context: Context) {
|
override fun openDebug(context: Context) {
|
||||||
context.startActivity(Intent(context, DebugMenuActivity::class.java))
|
context.startActivity(Intent(context, DebugMenuActivity::class.java))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun openKeysBackupSetup(context: Context, showManualExport: Boolean) {
|
||||||
|
context.startActivity(KeysBackupSetupActivity.intent(context, showManualExport))
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun openKeysBackupManager(context: Context) {
|
||||||
|
context.startActivity(KeysBackupManageActivity.intent(context))
|
||||||
|
}
|
||||||
}
|
}
|
@ -31,4 +31,7 @@ interface Navigator {
|
|||||||
|
|
||||||
fun openDebug(context: Context)
|
fun openDebug(context: Context)
|
||||||
|
|
||||||
|
fun openKeysBackupSetup(context: Context, showManualExport: Boolean)
|
||||||
|
|
||||||
|
fun openKeysBackupManager(context: Context)
|
||||||
}
|
}
|
@ -44,13 +44,24 @@
|
|||||||
|
|
||||||
</androidx.appcompat.widget.Toolbar>
|
</androidx.appcompat.widget.Toolbar>
|
||||||
|
|
||||||
|
<im.vector.riotredesign.core.ui.views.KeysBackupBanner
|
||||||
|
android:id="@+id/homeKeysBackupBanner"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="?vctr_list_header_background_color"
|
||||||
|
android:minHeight="67dp"
|
||||||
|
app:layout_constraintBottom_toTopOf="@+id/roomListContainer"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/groupToolbar" />
|
||||||
|
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
android:id="@+id/roomListContainer"
|
android:id="@+id/roomListContainer"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="0dp"
|
android:layout_height="0dp"
|
||||||
android:background="?riotx_header_panel_background"
|
android:background="?riotx_header_panel_background"
|
||||||
app:layout_constraintBottom_toTopOf="@+id/bottomNavigationView"
|
app:layout_constraintBottom_toTopOf="@+id/bottomNavigationView"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/groupToolbar" />
|
app:layout_constraintTop_toBottomOf="@+id/homeKeysBackupBanner" />
|
||||||
|
|
||||||
<com.google.android.material.bottomnavigation.BottomNavigationView
|
<com.google.android.material.bottomnavigation.BottomNavigationView
|
||||||
android:id="@+id/bottomNavigationView"
|
android:id="@+id/bottomNavigationView"
|
||||||
|
@ -1,11 +1,12 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<merge xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
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"
|
||||||
android:background="?vctr_list_header_background_color"
|
android:background="?vctr_list_header_background_color"
|
||||||
android:minHeight="67dp">
|
android:minHeight="67dp"
|
||||||
|
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout">
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/view_keys_backup_banner_picto"
|
android:id="@+id/view_keys_backup_banner_picto"
|
||||||
@ -101,4 +102,4 @@
|
|||||||
android:background="?vctr_line_divider"
|
android:background="?vctr_line_divider"
|
||||||
app:layout_constraintBottom_toBottomOf="parent" />
|
app:layout_constraintBottom_toBottomOf="parent" />
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</merge>
|
Loading…
Reference in New Issue
Block a user