Implement stop sharing button visibility.
This commit is contained in:
parent
daa0734e5b
commit
83e79207c1
|
@ -64,7 +64,7 @@ class LiveLocationBottomSheetController @Inject constructor(
|
||||||
avatarRenderer(host.avatarRenderer)
|
avatarRenderer(host.avatarRenderer)
|
||||||
remainingTime(remainingTime)
|
remainingTime(remainingTime)
|
||||||
locationUpdateTimeMillis(liveLocationViewState.locationTimestampMillis)
|
locationUpdateTimeMillis(liveLocationViewState.locationTimestampMillis)
|
||||||
showStopSharingButton(false)
|
showStopSharingButton(liveLocationViewState.showStopSharingButton)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -65,8 +65,6 @@ abstract class LiveLocationUserItem : VectorEpoxyModel<LiveLocationUserItem.Hold
|
||||||
@EpoxyAttribute
|
@EpoxyAttribute
|
||||||
var showStopSharingButton: Boolean = false
|
var showStopSharingButton: Boolean = false
|
||||||
|
|
||||||
private var timer: CountUpTimer? = null
|
|
||||||
|
|
||||||
override fun bind(holder: Holder) {
|
override fun bind(holder: Holder) {
|
||||||
super.bind(holder)
|
super.bind(holder)
|
||||||
avatarRenderer.render(matrixItem, holder.itemUserAvatarImageView)
|
avatarRenderer.render(matrixItem, holder.itemUserAvatarImageView)
|
||||||
|
@ -80,7 +78,9 @@ abstract class LiveLocationUserItem : VectorEpoxyModel<LiveLocationUserItem.Hold
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
timer = CountUpTimer(1000).apply {
|
stopTimer(holder)
|
||||||
|
|
||||||
|
holder.timer = CountUpTimer(1000).apply {
|
||||||
tickListener = object : CountUpTimer.TickListener {
|
tickListener = object : CountUpTimer.TickListener {
|
||||||
override fun onTick(milliseconds: Long) {
|
override fun onTick(milliseconds: Long) {
|
||||||
holder.itemLastUpdatedAtTextView.text = getFormattedLastUpdatedAt(locationUpdateTimeMillis)
|
holder.itemLastUpdatedAtTextView.text = getFormattedLastUpdatedAt(locationUpdateTimeMillis)
|
||||||
|
@ -90,6 +90,16 @@ abstract class LiveLocationUserItem : VectorEpoxyModel<LiveLocationUserItem.Hold
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun unbind(holder: Holder) {
|
||||||
|
super.unbind(holder)
|
||||||
|
stopTimer(holder)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun stopTimer(holder: Holder) {
|
||||||
|
holder.timer?.stop()
|
||||||
|
holder.timer = null
|
||||||
|
}
|
||||||
|
|
||||||
private fun getFormattedLastUpdatedAt(locationUpdateTimeMillis: Long?): String {
|
private fun getFormattedLastUpdatedAt(locationUpdateTimeMillis: Long?): String {
|
||||||
if (locationUpdateTimeMillis == null) return ""
|
if (locationUpdateTimeMillis == null) return ""
|
||||||
val elapsedTime = clock.epochMillis() - locationUpdateTimeMillis
|
val elapsedTime = clock.epochMillis() - locationUpdateTimeMillis
|
||||||
|
@ -98,6 +108,7 @@ abstract class LiveLocationUserItem : VectorEpoxyModel<LiveLocationUserItem.Hold
|
||||||
}
|
}
|
||||||
|
|
||||||
class Holder : VectorEpoxyHolder() {
|
class Holder : VectorEpoxyHolder() {
|
||||||
|
var timer: CountUpTimer? = null
|
||||||
val itemUserAvatarImageView by bind<ImageView>(R.id.itemUserAvatarImageView)
|
val itemUserAvatarImageView by bind<ImageView>(R.id.itemUserAvatarImageView)
|
||||||
val itemUserDisplayNameTextView by bind<TextView>(R.id.itemUserDisplayNameTextView)
|
val itemUserDisplayNameTextView by bind<TextView>(R.id.itemUserDisplayNameTextView)
|
||||||
val itemRemainingTimeTextView by bind<TextView>(R.id.itemRemainingTimeTextView)
|
val itemRemainingTimeTextView by bind<TextView>(R.id.itemRemainingTimeTextView)
|
||||||
|
|
|
@ -39,5 +39,6 @@ data class UserLiveLocationViewState(
|
||||||
val pinDrawable: Drawable,
|
val pinDrawable: Drawable,
|
||||||
val locationData: LocationData,
|
val locationData: LocationData,
|
||||||
val endOfLiveTimestampMillis: Long?,
|
val endOfLiveTimestampMillis: Long?,
|
||||||
val locationTimestampMillis: Long?
|
val locationTimestampMillis: Long?,
|
||||||
|
val showStopSharingButton: Boolean
|
||||||
)
|
)
|
||||||
|
|
|
@ -44,14 +44,16 @@ class UserLiveLocationViewStateMapper @Inject constructor(
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
locationPinProvider.create(userId) { pinDrawable ->
|
locationPinProvider.create(userId) { pinDrawable ->
|
||||||
activeSessionHolder.getActiveSession().getUser(userId)?.toMatrixItem()?.let { matrixItem ->
|
val session = activeSessionHolder.getActiveSession()
|
||||||
|
session.getUser(userId)?.toMatrixItem()?.let { matrixItem ->
|
||||||
val locationTimestampMillis = liveLocationShareAggregatedSummary.lastLocationDataContent?.getBestTimestampMillis()
|
val locationTimestampMillis = liveLocationShareAggregatedSummary.lastLocationDataContent?.getBestTimestampMillis()
|
||||||
val viewState = UserLiveLocationViewState(
|
val viewState = UserLiveLocationViewState(
|
||||||
matrixItem = matrixItem,
|
matrixItem = matrixItem,
|
||||||
pinDrawable = pinDrawable,
|
pinDrawable = pinDrawable,
|
||||||
locationData = locationData,
|
locationData = locationData,
|
||||||
endOfLiveTimestampMillis = liveLocationShareAggregatedSummary.endOfLiveTimestampMillis,
|
endOfLiveTimestampMillis = liveLocationShareAggregatedSummary.endOfLiveTimestampMillis,
|
||||||
locationTimestampMillis = locationTimestampMillis
|
locationTimestampMillis = locationTimestampMillis,
|
||||||
|
showStopSharingButton = userId == session.myUserId
|
||||||
)
|
)
|
||||||
continuation.resume(viewState) {
|
continuation.resume(viewState) {
|
||||||
// do nothing on cancellation
|
// do nothing on cancellation
|
||||||
|
|
Loading…
Reference in New Issue