Migrate to ViewBindings (#1072) - WIP

This commit is contained in:
Benoit Marty 2020-12-16 03:38:07 +01:00
parent 7de2494af2
commit 4d3c4b5afc
8 changed files with 78 additions and 63 deletions

View File

@ -23,7 +23,7 @@ import android.widget.LinearLayout
import androidx.core.content.withStyledAttributes import androidx.core.content.withStyledAttributes
import im.vector.app.R import im.vector.app.R
import im.vector.app.core.extensions.setTextOrHide import im.vector.app.core.extensions.setTextOrHide
import im.vector.app.databinding.ItemTimelineEventPollResultItemBinding
class PollResultLineView @JvmOverloads constructor( class PollResultLineView @JvmOverloads constructor(
context: Context, context: Context,
@ -31,34 +31,37 @@ class PollResultLineView @JvmOverloads constructor(
defStyleAttr: Int = 0 defStyleAttr: Int = 0
) : LinearLayout(context, attrs, defStyleAttr) { ) : LinearLayout(context, attrs, defStyleAttr) {
private val views: ItemTimelineEventPollResultItemBinding
var label: String? = null var label: String? = null
set(value) { set(value) {
field = value field = value
pollResultItemLabel.setTextOrHide(value) views.pollResultItemLabel.setTextOrHide(value)
} }
var percent: String? = null var percent: String? = null
set(value) { set(value) {
field = value field = value
pollResultItemPercent.setTextOrHide(value) views.pollResultItemPercent.setTextOrHide(value)
} }
var optionSelected: Boolean = false var optionSelected: Boolean = false
set(value) { set(value) {
field = value field = value
pollResultItemSelectedIcon.visibility = if (value) View.VISIBLE else View.INVISIBLE views.pollResultItemSelectedIcon.visibility = if (value) View.VISIBLE else View.INVISIBLE
} }
var isWinner: Boolean = false var isWinner: Boolean = false
set(value) { set(value) {
field = value field = value
// Text in main color // Text in main color
pollResultItemLabel.setTypeface(pollResultItemLabel.typeface, if (value) Typeface.BOLD else Typeface.NORMAL) views.pollResultItemLabel.setTypeface(views.pollResultItemLabel.typeface, if (value) Typeface.BOLD else Typeface.NORMAL)
pollResultItemPercent.setTypeface(pollResultItemPercent.typeface, if (value) Typeface.BOLD else Typeface.NORMAL) views.pollResultItemPercent.setTypeface(views.pollResultItemPercent.typeface, if (value) Typeface.BOLD else Typeface.NORMAL)
} }
init { init {
inflate(context, R.layout.item_timeline_event_poll_result_item, this) inflate(context, R.layout.item_timeline_event_poll_result_item, this)
views = ItemTimelineEventPollResultItemBinding.bind(this)
orientation = HORIZONTAL orientation = HORIZONTAL
context.withStyledAttributes(attrs, R.styleable.PollResultLineView) { context.withStyledAttributes(attrs, R.styleable.PollResultLineView) {

View File

@ -23,6 +23,7 @@ import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.view.isVisible import androidx.core.view.isVisible
import im.vector.app.R import im.vector.app.R
import im.vector.app.core.extensions.setTextOrHide import im.vector.app.core.extensions.setTextOrHide
import im.vector.app.databinding.UrlPreviewBinding
import im.vector.app.features.home.room.detail.timeline.TimelineEventController import im.vector.app.features.home.room.detail.timeline.TimelineEventController
import im.vector.app.features.media.ImageContentRenderer import im.vector.app.features.media.ImageContentRenderer
@ -38,10 +39,13 @@ class PreviewUrlView @JvmOverloads constructor(
defStyleAttr: Int = 0 defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr), View.OnClickListener { ) : ConstraintLayout(context, attrs, defStyleAttr), View.OnClickListener {
private val views: UrlPreviewBinding
var delegate: TimelineEventController.PreviewUrlCallback? = null var delegate: TimelineEventController.PreviewUrlCallback? = null
init { init {
setupView() setupView()
views = UrlPreviewBinding.bind(this)
} }
private var state: PreviewUrlUiState = PreviewUrlUiState.Unknown private var state: PreviewUrlUiState = PreviewUrlUiState.Unknown
@ -90,7 +94,7 @@ class PreviewUrlView @JvmOverloads constructor(
inflate(context, R.layout.url_preview, this) inflate(context, R.layout.url_preview, this)
setOnClickListener(this) setOnClickListener(this)
url_preview_close.setOnClickListener { onCloseClick() } views.urlPreviewClose.setOnClickListener { onCloseClick() }
} }
private fun renderHidden() { private fun renderHidden() {
@ -104,19 +108,19 @@ class PreviewUrlView @JvmOverloads constructor(
private fun renderData(previewUrlData: PreviewUrlData, imageContentRenderer: ImageContentRenderer) { private fun renderData(previewUrlData: PreviewUrlData, imageContentRenderer: ImageContentRenderer) {
isVisible = true isVisible = true
url_preview_title.setTextOrHide(previewUrlData.title) views.urlPreviewTitle.setTextOrHide(previewUrlData.title)
url_preview_image.isVisible = previewUrlData.mxcUrl?.let { imageContentRenderer.render(it, url_preview_image) }.orFalse() views.urlPreviewImage.isVisible = previewUrlData.mxcUrl?.let { imageContentRenderer.render(it, views.urlPreviewImage) }.orFalse()
url_preview_description.setTextOrHide(previewUrlData.description) views.urlPreviewDescription.setTextOrHide(previewUrlData.description)
url_preview_site.setTextOrHide(previewUrlData.siteName.takeIf { it != previewUrlData.title }) views.urlPreviewSite.setTextOrHide(previewUrlData.siteName.takeIf { it != previewUrlData.title })
} }
/** /**
* Hide all views that are not visible in all state * Hide all views that are not visible in all state
*/ */
private fun hideAll() { private fun hideAll() {
url_preview_title.isVisible = false views.urlPreviewTitle.isVisible = false
url_preview_image.isVisible = false views.urlPreviewImage.isVisible = false
url_preview_description.isVisible = false views.urlPreviewDescription.isVisible = false
url_preview_site.isVisible = false views.urlPreviewSite.isVisible = false
} }
} }

View File

@ -21,6 +21,7 @@ import android.util.AttributeSet
import android.view.View import android.view.View
import android.widget.RelativeLayout import android.widget.RelativeLayout
import im.vector.app.R import im.vector.app.R
import im.vector.app.databinding.ViewRoomWidgetsBannerBinding
import org.matrix.android.sdk.api.session.widgets.model.Widget import org.matrix.android.sdk.api.session.widgets.model.Widget
@ -34,10 +35,13 @@ class RoomWidgetsBannerView @JvmOverloads constructor(
fun onViewWidgetsClicked() fun onViewWidgetsClicked()
} }
private val views: ViewRoomWidgetsBannerBinding
var callback: Callback? = null var callback: Callback? = null
init { init {
setupView() setupView()
views = ViewRoomWidgetsBannerBinding.bind(this)
} }
private fun setupView() { private fun setupView() {
@ -53,7 +57,7 @@ class RoomWidgetsBannerView @JvmOverloads constructor(
visibility = View.GONE visibility = View.GONE
} else { } else {
visibility = View.VISIBLE visibility = View.VISIBLE
activeWidgetsLabel.text = context.resources.getQuantityString(R.plurals.active_widgets, widgets.size, widgets.size) views.activeWidgetsLabel.text = context.resources.getQuantityString(R.plurals.active_widgets, widgets.size, widgets.size)
} }
} }
} }

View File

@ -119,7 +119,7 @@ class RoomListFragment @Inject constructor(
}.exhaustive }.exhaustive
} }
createChatFabMenu.listener = this views.createChatFabMenu.listener = this
sharedActionViewModel sharedActionViewModel
.observe() .observe()
@ -134,10 +134,10 @@ class RoomListFragment @Inject constructor(
override fun onDestroyView() { override fun onDestroyView() {
roomController.removeModelBuildListener(modelBuildListener) roomController.removeModelBuildListener(modelBuildListener)
modelBuildListener = null modelBuildListener = null
roomListView.cleanup() views.roomListView.cleanup()
roomController.listener = null roomController.listener = null
stateRestorer.clear() stateRestorer.clear()
createChatFabMenu.listener = null views.createChatFabMenu.listener = null
super.onDestroyView() super.onDestroyView()
} }
@ -147,35 +147,35 @@ class RoomListFragment @Inject constructor(
private fun setupCreateRoomButton() { private fun setupCreateRoomButton() {
when (roomListParams.displayMode) { when (roomListParams.displayMode) {
RoomListDisplayMode.NOTIFICATIONS -> createChatFabMenu.isVisible = true RoomListDisplayMode.NOTIFICATIONS -> views.createChatFabMenu.isVisible = true
RoomListDisplayMode.PEOPLE -> createChatRoomButton.isVisible = true RoomListDisplayMode.PEOPLE -> views.createChatRoomButton.isVisible = true
RoomListDisplayMode.ROOMS -> createGroupRoomButton.isVisible = true RoomListDisplayMode.ROOMS -> views.createGroupRoomButton.isVisible = true
else -> Unit // No button in this mode else -> Unit // No button in this mode
} }
createChatRoomButton.debouncedClicks { views.createChatRoomButton.debouncedClicks {
createDirectChat() createDirectChat()
} }
createGroupRoomButton.debouncedClicks { views.createGroupRoomButton.debouncedClicks {
openRoomDirectory() openRoomDirectory()
} }
// Hide FAB when list is scrolling // Hide FAB when list is scrolling
roomListView.addOnScrollListener( views.roomListView.addOnScrollListener(
object : RecyclerView.OnScrollListener() { object : RecyclerView.OnScrollListener() {
override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) { override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
createChatFabMenu.removeCallbacks(showFabRunnable) views.createChatFabMenu.removeCallbacks(showFabRunnable)
when (newState) { when (newState) {
RecyclerView.SCROLL_STATE_IDLE -> { RecyclerView.SCROLL_STATE_IDLE -> {
createChatFabMenu.postDelayed(showFabRunnable, 250) views.createChatFabMenu.postDelayed(showFabRunnable, 250)
} }
RecyclerView.SCROLL_STATE_DRAGGING, RecyclerView.SCROLL_STATE_DRAGGING,
RecyclerView.SCROLL_STATE_SETTLING -> { RecyclerView.SCROLL_STATE_SETTLING -> {
when (roomListParams.displayMode) { when (roomListParams.displayMode) {
RoomListDisplayMode.NOTIFICATIONS -> createChatFabMenu.hide() RoomListDisplayMode.NOTIFICATIONS -> views.createChatFabMenu.hide()
RoomListDisplayMode.PEOPLE -> createChatRoomButton.hide() RoomListDisplayMode.PEOPLE -> views.createChatRoomButton.hide()
RoomListDisplayMode.ROOMS -> createGroupRoomButton.hide() RoomListDisplayMode.ROOMS -> views.createGroupRoomButton.hide()
else -> Unit else -> Unit
} }
} }
@ -186,7 +186,7 @@ class RoomListFragment @Inject constructor(
fun filterRoomsWith(filter: String) { fun filterRoomsWith(filter: String) {
// Scroll the list to top // Scroll the list to top
roomListView.scrollToPosition(0) views.roomListView.scrollToPosition(0)
roomListViewModel.handle(RoomListAction.FilterWith(filter)) roomListViewModel.handle(RoomListAction.FilterWith(filter))
} }
@ -202,23 +202,23 @@ class RoomListFragment @Inject constructor(
private fun setupRecyclerView() { private fun setupRecyclerView() {
val layoutManager = LinearLayoutManager(context) val layoutManager = LinearLayoutManager(context)
stateRestorer = LayoutManagerStateRestorer(layoutManager).register() stateRestorer = LayoutManagerStateRestorer(layoutManager).register()
roomListView.layoutManager = layoutManager views.roomListView.layoutManager = layoutManager
roomListView.itemAnimator = RoomListAnimator() views.roomListView.itemAnimator = RoomListAnimator()
roomListView.setRecycledViewPool(sharedViewPool) views.roomListView.setRecycledViewPool(sharedViewPool)
layoutManager.recycleChildrenOnDetach = true layoutManager.recycleChildrenOnDetach = true
roomController.listener = this roomController.listener = this
modelBuildListener = OnModelBuildFinishedListener { it.dispatchTo(stateRestorer) } modelBuildListener = OnModelBuildFinishedListener { it.dispatchTo(stateRestorer) }
roomController.addModelBuildListener(modelBuildListener) roomController.addModelBuildListener(modelBuildListener)
roomListView.adapter = roomController.adapter views.roomListView.adapter = roomController.adapter
stateView.contentView = roomListView views.stateView.contentView = views.roomListView
} }
private val showFabRunnable = Runnable { private val showFabRunnable = Runnable {
if (isAdded) { if (isAdded) {
when (roomListParams.displayMode) { when (roomListParams.displayMode) {
RoomListDisplayMode.NOTIFICATIONS -> createChatFabMenu.show() RoomListDisplayMode.NOTIFICATIONS -> views.createChatFabMenu.show()
RoomListDisplayMode.PEOPLE -> createChatRoomButton.show() RoomListDisplayMode.PEOPLE -> views.createChatRoomButton.show()
RoomListDisplayMode.ROOMS -> createGroupRoomButton.show() RoomListDisplayMode.ROOMS -> views.createGroupRoomButton.show()
else -> Unit else -> Unit
} }
} }
@ -289,7 +289,7 @@ class RoomListFragment @Inject constructor(
if (filteredRooms.isNullOrEmpty()) { if (filteredRooms.isNullOrEmpty()) {
renderEmptyState(allRooms) renderEmptyState(allRooms)
} else { } else {
stateView.state = StateView.State.Content views.stateView.state = StateView.State.Content
} }
} }
@ -332,11 +332,11 @@ class RoomListFragment @Inject constructor(
// Always display the content in this mode, because if the footer // Always display the content in this mode, because if the footer
StateView.State.Content StateView.State.Content
} }
stateView.state = emptyState views.stateView.state = emptyState
} }
private fun renderLoading() { private fun renderLoading() {
stateView.state = StateView.State.Loading views.stateView.state = StateView.State.Loading
} }
private fun renderFailure(error: Throwable) { private fun renderFailure(error: Throwable) {
@ -344,11 +344,11 @@ class RoomListFragment @Inject constructor(
is Failure.NetworkConnection -> getString(R.string.network_error_please_check_and_retry) is Failure.NetworkConnection -> getString(R.string.network_error_please_check_and_retry)
else -> getString(R.string.unknown_error) else -> getString(R.string.unknown_error)
} }
stateView.state = StateView.State.Error(message) views.stateView.state = StateView.State.Error(message)
} }
override fun onBackPressed(toolbarButton: Boolean): Boolean { override fun onBackPressed(toolbarButton: Boolean): Boolean {
if (createChatFabMenu.onBackPressed()) { if (views.createChatFabMenu.onBackPressed()) {
return true return true
} }
return false return false

View File

@ -75,12 +75,12 @@ class RoomListQuickActionsBottomSheet :
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
sharedActionViewModel = activityViewModelProvider.get(RoomListQuickActionsSharedActionViewModel::class.java) sharedActionViewModel = activityViewModelProvider.get(RoomListQuickActionsSharedActionViewModel::class.java)
views.views.bottomSheetRecyclerView.configureWith(roomListActionsEpoxyController, viewPool = sharedViewPool, hasFixedSize = false, disableItemAnimation = true) views.bottomSheetRecyclerView.configureWith(roomListActionsEpoxyController, viewPool = sharedViewPool, hasFixedSize = false, disableItemAnimation = true)
roomListActionsEpoxyController.listener = this roomListActionsEpoxyController.listener = this
} }
override fun onDestroyView() { override fun onDestroyView() {
views.views.bottomSheetRecyclerView.cleanup() views.bottomSheetRecyclerView.cleanup()
roomListActionsEpoxyController.listener = null roomListActionsEpoxyController.listener = null
super.onDestroyView() super.onDestroyView()
} }

View File

@ -22,28 +22,31 @@ import androidx.constraintlayout.motion.widget.MotionLayout
import androidx.core.view.isVisible import androidx.core.view.isVisible
import com.google.android.material.floatingactionbutton.FloatingActionButton import com.google.android.material.floatingactionbutton.FloatingActionButton
import im.vector.app.R import im.vector.app.R
import im.vector.app.databinding.MotionNotifsFabMenuMergeBinding
class NotifsFabMenuView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, class NotifsFabMenuView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null,
defStyleAttr: Int = 0) : MotionLayout(context, attrs, defStyleAttr) { defStyleAttr: Int = 0) : MotionLayout(context, attrs, defStyleAttr) {
private val views: MotionNotifsFabMenuMergeBinding
var listener: Listener? = null var listener: Listener? = null
init { init {
inflate(context, R.layout.motion_notifs_fab_menu_merge, this) inflate(context, R.layout.motion_notifs_fab_menu_merge, this)
views = MotionNotifsFabMenuMergeBinding.bind(this)
} }
override fun onFinishInflate() { override fun onFinishInflate() {
super.onFinishInflate() super.onFinishInflate()
listOf(createRoomItemChat, createRoomItemChatLabel) listOf(views.createRoomItemChat, views.createRoomItemChatLabel)
.forEach { .forEach {
it.setOnClickListener { it.setOnClickListener {
closeFabMenu() closeFabMenu()
listener?.createDirectChat() listener?.createDirectChat()
} }
} }
listOf(createRoomItemGroup, createRoomItemGroupLabel) listOf(views.createRoomItemGroup, views.createRoomItemGroupLabel)
.forEach { .forEach {
it.setOnClickListener { it.setOnClickListener {
closeFabMenu() closeFabMenu()
@ -51,7 +54,7 @@ class NotifsFabMenuView @JvmOverloads constructor(context: Context, attrs: Attri
} }
} }
createRoomTouchGuard.setOnClickListener { views.createRoomTouchGuard.setOnClickListener {
closeFabMenu() closeFabMenu()
} }
} }
@ -59,22 +62,22 @@ class NotifsFabMenuView @JvmOverloads constructor(context: Context, attrs: Attri
override fun transitionToEnd() { override fun transitionToEnd() {
super.transitionToEnd() super.transitionToEnd()
createRoomButton.contentDescription = context.getString(R.string.a11y_create_menu_close) views.createRoomButton.contentDescription = context.getString(R.string.a11y_create_menu_close)
} }
override fun transitionToStart() { override fun transitionToStart() {
super.transitionToStart() super.transitionToStart()
createRoomButton.contentDescription = context.getString(R.string.a11y_create_menu_open) views.createRoomButton.contentDescription = context.getString(R.string.a11y_create_menu_open)
} }
fun show() { fun show() {
isVisible = true isVisible = true
createRoomButton.show() views.createRoomButton.show()
} }
fun hide() { fun hide() {
createRoomButton.hide(object : FloatingActionButton.OnVisibilityChangedListener() { views.createRoomButton.hide(object : FloatingActionButton.OnVisibilityChangedListener() {
override fun onHidden(fab: FloatingActionButton?) { override fun onHidden(fab: FloatingActionButton?) {
super.onHidden(fab) super.onHidden(fab)
isVisible = false isVisible = false

View File

@ -22,6 +22,7 @@ import android.content.Intent
import android.view.View import android.view.View
import android.view.Window import android.view.Window
import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.ActivityResultLauncher
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityOptionsCompat import androidx.core.app.ActivityOptionsCompat
import androidx.core.app.TaskStackBuilder import androidx.core.app.TaskStackBuilder
import androidx.core.util.Pair import androidx.core.util.Pair
@ -99,7 +100,7 @@ class DefaultNavigator @Inject constructor(
val tx = session.cryptoService().verificationService().getExistingTransaction(otherUserId, sasTransactionId) val tx = session.cryptoService().verificationService().getExistingTransaction(otherUserId, sasTransactionId)
?: return ?: return
(tx as? IncomingSasVerificationTransaction)?.performAccept() (tx as? IncomingSasVerificationTransaction)?.performAccept()
if (context is VectorBaseActivity) { if (context is AppCompatActivity) {
VerificationBottomSheet.withArgs( VerificationBottomSheet.withArgs(
roomId = null, roomId = null,
otherUserId = otherUserId, otherUserId = otherUserId,
@ -115,7 +116,7 @@ class DefaultNavigator @Inject constructor(
session.myUserId, session.myUserId,
listOf(otherSessionId) listOf(otherSessionId)
) )
if (context is VectorBaseActivity) { if (context is AppCompatActivity) {
VerificationBottomSheet.withArgs( VerificationBottomSheet.withArgs(
roomId = null, roomId = null,
otherUserId = session.myUserId, otherUserId = session.myUserId,
@ -130,7 +131,7 @@ class DefaultNavigator @Inject constructor(
.getCryptoDeviceInfo(session.myUserId) .getCryptoDeviceInfo(session.myUserId)
.filter { it.deviceId != session.sessionParams.deviceId } .filter { it.deviceId != session.sessionParams.deviceId }
.map { it.deviceId } .map { it.deviceId }
if (context is VectorBaseActivity) { if (context is AppCompatActivity) {
if (otherSessions.isNotEmpty()) { if (otherSessions.isNotEmpty()) {
val pr = session.cryptoService().verificationService().requestKeyVerification( val pr = session.cryptoService().verificationService().requestKeyVerification(
supportedVerificationMethodsProvider.provide(), supportedVerificationMethodsProvider.provide(),
@ -147,14 +148,14 @@ class DefaultNavigator @Inject constructor(
override fun waitSessionVerification(context: Context) { override fun waitSessionVerification(context: Context) {
val session = sessionHolder.getSafeActiveSession() ?: return val session = sessionHolder.getSafeActiveSession() ?: return
if (context is VectorBaseActivity) { if (context is AppCompatActivity) {
VerificationBottomSheet.forSelfVerification(session) VerificationBottomSheet.forSelfVerification(session)
.show(context.supportFragmentManager, VerificationBottomSheet.WAITING_SELF_VERIF_TAG) .show(context.supportFragmentManager, VerificationBottomSheet.WAITING_SELF_VERIF_TAG)
} }
} }
override fun upgradeSessionSecurity(context: Context, initCrossSigningOnly: Boolean) { override fun upgradeSessionSecurity(context: Context, initCrossSigningOnly: Boolean) {
if (context is VectorBaseActivity) { if (context is AppCompatActivity) {
BootstrapBottomSheet.show( BootstrapBottomSheet.show(
context.supportFragmentManager, context.supportFragmentManager,
if (initCrossSigningOnly) SetupMode.CROSS_SIGNING_ONLY else SetupMode.NORMAL if (initCrossSigningOnly) SetupMode.CROSS_SIGNING_ONLY else SetupMode.NORMAL
@ -163,7 +164,7 @@ class DefaultNavigator @Inject constructor(
} }
override fun openGroupDetail(groupId: String, context: Context, buildTask: Boolean) { override fun openGroupDetail(groupId: String, context: Context, buildTask: Boolean) {
if (context is VectorBaseActivity) { if (context is VectorBaseActivity<*>) {
context.notImplemented("Open group detail") context.notImplemented("Open group detail")
} else { } else {
context.toast(R.string.not_implemented) context.toast(R.string.not_implemented)
@ -230,7 +231,7 @@ class DefaultNavigator @Inject constructor(
override fun openKeysBackupSetup(context: Context, showManualExport: Boolean) { override fun openKeysBackupSetup(context: Context, showManualExport: Boolean) {
// if cross signing is enabled we should propose full 4S // if cross signing is enabled we should propose full 4S
sessionHolder.getSafeActiveSession()?.let { session -> sessionHolder.getSafeActiveSession()?.let { session ->
if (session.cryptoService().crossSigningService().canCrossSign() && context is VectorBaseActivity) { if (session.cryptoService().crossSigningService().canCrossSign() && context is AppCompatActivity) {
BootstrapBottomSheet.show(context.supportFragmentManager, SetupMode.NORMAL) BootstrapBottomSheet.show(context.supportFragmentManager, SetupMode.NORMAL)
} else { } else {
context.startActivity(KeysBackupSetupActivity.intent(context, showManualExport)) context.startActivity(KeysBackupSetupActivity.intent(context, showManualExport))
@ -239,7 +240,7 @@ class DefaultNavigator @Inject constructor(
} }
override fun open4SSetup(context: Context, setupMode: SetupMode) { override fun open4SSetup(context: Context, setupMode: SetupMode) {
if (context is VectorBaseActivity) { if (context is AppCompatActivity) {
BootstrapBottomSheet.show(context.supportFragmentManager, setupMode) BootstrapBottomSheet.show(context.supportFragmentManager, setupMode)
} }
} }

View File

@ -272,7 +272,7 @@ class PopupAlertManager @Inject constructor(private val avatarRenderer: Lazy<Ava
private fun shouldBeDisplayedIn(alert: VectorAlert?, activity: Activity): Boolean { private fun shouldBeDisplayedIn(alert: VectorAlert?, activity: Activity): Boolean {
return alert != null return alert != null
&& activity !is PinActivity && activity !is PinActivity
&& activity is VectorBaseActivity && activity is VectorBaseActivity<*>
&& alert.shouldBeDisplayedIn.invoke(activity) && alert.shouldBeDisplayedIn.invoke(activity)
} }
} }