Migrate to ViewBindings (#1072) - WIP
This commit is contained in:
parent
7de2494af2
commit
4d3c4b5afc
@ -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) {
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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()
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user