mirror of
https://github.com/nextcloud/talk-android
synced 2025-06-20 12:09:45 +01:00
Show relative timer on lobby screen
Resolves: #1557 Signed-off-by: Tim Krüger <t@timkrueger.me>
This commit is contained in:
parent
08a5088c48
commit
4e8c8eb8d7
@ -1119,20 +1119,26 @@ class ChatController(args: Bundle) :
|
||||
binding.messageInputView.visibility = View.GONE
|
||||
binding.progressBar.visibility = View.GONE
|
||||
|
||||
val sb = StringBuilder()
|
||||
sb.append(resources!!.getText(R.string.nc_lobby_waiting))
|
||||
.append("\n\n")
|
||||
|
||||
if (currentConversation?.lobbyTimer != null && currentConversation?.lobbyTimer !=
|
||||
0L
|
||||
) {
|
||||
binding.lobby.lobbyTextView.text = String.format(
|
||||
resources!!.getString(R.string.nc_lobby_waiting_with_date),
|
||||
DateUtils.getLocalDateStringFromTimestampForLobby(
|
||||
currentConversation?.lobbyTimer
|
||||
?: 0
|
||||
),
|
||||
currentConversation!!.description
|
||||
val timestamp = currentConversation?.lobbyTimer ?: 0
|
||||
val stringWithStartDate = String.format(
|
||||
resources!!.getString(R.string.nc_lobby_start_date),
|
||||
DateUtils.getLocalDateStringFromTimestampForLobby(timestamp)
|
||||
)
|
||||
} else {
|
||||
binding.lobby.lobbyTextView.setText(R.string.nc_lobby_waiting)
|
||||
val relativeTime = DateUtils.relativeStartTimeForLobby(timestamp, resources!!)
|
||||
|
||||
sb.append("$stringWithStartDate - $relativeTime")
|
||||
.append("\n\n")
|
||||
}
|
||||
|
||||
sb.append(currentConversation!!.description)
|
||||
binding.lobby.lobbyTextView.text = sb.toString()
|
||||
} else {
|
||||
binding.lobby.lobbyView.visibility = View.GONE
|
||||
binding.messagesListView.visibility = View.VISIBLE
|
||||
|
@ -20,12 +20,26 @@
|
||||
|
||||
package com.nextcloud.talk.utils
|
||||
|
||||
import android.content.res.Resources
|
||||
import android.icu.text.RelativeDateTimeFormatter
|
||||
import android.icu.text.RelativeDateTimeFormatter.Direction
|
||||
import android.icu.text.RelativeDateTimeFormatter.RelativeUnit
|
||||
import android.os.Build
|
||||
import com.nextcloud.talk.R
|
||||
import java.text.DateFormat
|
||||
import java.util.Calendar
|
||||
import java.util.Date
|
||||
import java.util.Locale
|
||||
import kotlin.math.roundToInt
|
||||
|
||||
object DateUtils {
|
||||
|
||||
private const val TIMESTAMP_CORRECTION_MULTIPLIER = 1000
|
||||
private const val SECOND_DIVIDER = 1000
|
||||
private const val MINUTES_DIVIDER = 60
|
||||
private const val HOURS_DIVIDER = 60
|
||||
private const val DAYS_DIVIDER = 24
|
||||
|
||||
fun getLocalDateTimeStringFromTimestamp(timestamp: Long): String {
|
||||
val cal = Calendar.getInstance()
|
||||
val tz = cal.timeZone
|
||||
@ -41,6 +55,50 @@ object DateUtils {
|
||||
}
|
||||
|
||||
fun getLocalDateStringFromTimestampForLobby(timestamp: Long): String {
|
||||
return getLocalDateTimeStringFromTimestamp(timestamp * 1000)
|
||||
return getLocalDateTimeStringFromTimestamp(timestamp * TIMESTAMP_CORRECTION_MULTIPLIER)
|
||||
}
|
||||
|
||||
fun relativeStartTimeForLobby(timestamp: Long, resources: Resources): String {
|
||||
|
||||
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
val fmt = RelativeDateTimeFormatter.getInstance()
|
||||
val timeLeftMillis = timestamp * TIMESTAMP_CORRECTION_MULTIPLIER - System.currentTimeMillis()
|
||||
val minutes = timeLeftMillis.toDouble() / SECOND_DIVIDER / MINUTES_DIVIDER
|
||||
val hours = minutes / HOURS_DIVIDER
|
||||
val days = hours / DAYS_DIVIDER
|
||||
|
||||
val minutesInt = minutes.roundToInt()
|
||||
val hoursInt = hours.roundToInt()
|
||||
val daysInt = days.roundToInt()
|
||||
|
||||
when {
|
||||
daysInt > 0 -> {
|
||||
fmt.format(
|
||||
daysInt.toDouble(),
|
||||
Direction.NEXT,
|
||||
RelativeUnit.DAYS
|
||||
)
|
||||
}
|
||||
hoursInt > 0 -> {
|
||||
fmt.format(
|
||||
hoursInt.toDouble(),
|
||||
Direction.NEXT,
|
||||
RelativeUnit.HOURS
|
||||
)
|
||||
}
|
||||
minutesInt > 1 -> {
|
||||
fmt.format(
|
||||
minutesInt.toDouble(),
|
||||
Direction.NEXT,
|
||||
RelativeUnit.MINUTES
|
||||
)
|
||||
}
|
||||
else -> {
|
||||
resources.getString(R.string.nc_lobby_start_soon)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
""
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -350,8 +350,8 @@
|
||||
<string name="nc_lobby">Lobby</string>
|
||||
<string name="nc_start_time">Start time</string>
|
||||
<string name="nc_lobby_waiting">You are currently waiting in the lobby.</string>
|
||||
<string name="nc_lobby_waiting_with_date">You are currently waiting in the lobby.\n\nThis meeting is scheduled for
|
||||
%1$s.\n\n%2$s</string>
|
||||
<string name="nc_lobby_start_date">This meeting is scheduled for %1$s</string>
|
||||
<string name="nc_lobby_start_soon">The meeting will start soon</string>
|
||||
<string name="nc_manual">Not set</string>
|
||||
|
||||
<!-- Errors -->
|
||||
|
Loading…
Reference in New Issue
Block a user