From a278333eb46e63eaf8587da03fd4959c59f1d7e5 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 9 Jul 2024 13:26:11 +0200 Subject: [PATCH] Fixed time zone not displayed in meeting details --- .../ui/main/meetings/model/TimeZoneModel.kt | 3 +- .../meetings/viewmodel/MeetingViewModel.kt | 12 +----- .../java/org/linphone/utils/TimestampUtils.kt | 38 +++++++++++-------- 3 files changed, 25 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/org/linphone/ui/main/meetings/model/TimeZoneModel.kt b/app/src/main/java/org/linphone/ui/main/meetings/model/TimeZoneModel.kt index 0db61373b..3f558749b 100644 --- a/app/src/main/java/org/linphone/ui/main/meetings/model/TimeZoneModel.kt +++ b/app/src/main/java/org/linphone/ui/main/meetings/model/TimeZoneModel.kt @@ -19,12 +19,11 @@ */ package org.linphone.ui.main.meetings.model -import androidx.annotation.UiThread import java.util.TimeZone import java.util.concurrent.TimeUnit import kotlin.math.abs -class TimeZoneModel @UiThread constructor(timeZone: TimeZone) : Comparable { +class TimeZoneModel(timeZone: TimeZone) : Comparable { val id: String = timeZone.id private val hours: Long = TimeUnit.MILLISECONDS.toHours(timeZone.rawOffset.toLong()) diff --git a/app/src/main/java/org/linphone/ui/main/meetings/viewmodel/MeetingViewModel.kt b/app/src/main/java/org/linphone/ui/main/meetings/viewmodel/MeetingViewModel.kt index d7eaf330e..313f802a5 100644 --- a/app/src/main/java/org/linphone/ui/main/meetings/viewmodel/MeetingViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/meetings/viewmodel/MeetingViewModel.kt @@ -22,10 +22,8 @@ package org.linphone.ui.main.meetings.viewmodel import androidx.annotation.UiThread import androidx.annotation.WorkerThread import androidx.lifecycle.MutableLiveData -import java.util.Locale import java.util.TimeZone import org.linphone.LinphoneApplication.Companion.coreContext -import org.linphone.R import org.linphone.core.Address import org.linphone.core.ChatRoom import org.linphone.core.ConferenceInfo @@ -36,7 +34,7 @@ import org.linphone.core.Participant import org.linphone.core.tools.Log import org.linphone.ui.GenericViewModel import org.linphone.ui.main.meetings.model.ParticipantModel -import org.linphone.utils.AppUtils +import org.linphone.ui.main.meetings.model.TimeZoneModel import org.linphone.utils.Event import org.linphone.utils.TimestampUtils @@ -229,13 +227,7 @@ class MeetingViewModel @UiThread constructor() : GenericViewModel() { endTimeStamp.postValue(end * 1000) dateTime.postValue("$date | $startTime - $endTime") - timezone.postValue( - AppUtils.getFormattedString( - R.string.meeting_schedule_timezone_title, - TimeZone.getDefault().displayName - ) - .replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() } - ) + timezone.postValue(TimeZoneModel(TimeZone.getDefault()).toString()) val organizerAddress = conferenceInfo.organizer if (organizerAddress != null) { diff --git a/app/src/main/java/org/linphone/utils/TimestampUtils.kt b/app/src/main/java/org/linphone/utils/TimestampUtils.kt index e0015ad14..603a6d4e4 100644 --- a/app/src/main/java/org/linphone/utils/TimestampUtils.kt +++ b/app/src/main/java/org/linphone/utils/TimestampUtils.kt @@ -26,6 +26,7 @@ import java.time.format.TextStyle import java.util.Calendar import java.util.Date import java.util.Locale +import java.util.TimeZone import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.R @@ -35,17 +36,17 @@ class TimestampUtils { @AnyThread fun isToday(timestamp: Long, timestampInSecs: Boolean = true): Boolean { - val cal = Calendar.getInstance() + val cal = getCalendar() cal.timeInMillis = if (timestampInSecs) timestamp * 1000 else timestamp - return isSameDay(cal, Calendar.getInstance()) + return isSameDay(cal, getCalendar()) } @AnyThread fun isAfterToday(timestamp: Long, timestampInSecs: Boolean = true): Boolean { - val cal = Calendar.getInstance() + val cal = getCalendar() cal.timeInMillis = if (timestampInSecs) timestamp * 1000 else timestamp - val tomorrow = Calendar.getInstance() + val tomorrow = getCalendar() tomorrow.timeInMillis = System.currentTimeMillis() if (cal.get(Calendar.ERA) > tomorrow.get(Calendar.ERA)) return true @@ -61,16 +62,16 @@ class TimestampUtils { @AnyThread fun isYesterday(timestamp: Long, timestampInSecs: Boolean = true): Boolean { - val yesterday = Calendar.getInstance() + val yesterday = getCalendar() yesterday.roll(Calendar.DAY_OF_MONTH, -1) - val cal = Calendar.getInstance() + val cal = getCalendar() cal.timeInMillis = if (timestampInSecs) timestamp * 1000 else timestamp return isSameDay(cal, yesterday) } @AnyThread fun dayOfWeek(timestamp: Long, timestampInSecs: Boolean = true): String { - val calendar = Calendar.getInstance() + val calendar = getCalendar() calendar.timeInMillis = if (timestampInSecs) timestamp * 1000 else timestamp val dayName = calendar.getDisplayName( Calendar.DAY_OF_WEEK, @@ -92,14 +93,14 @@ class TimestampUtils { @AnyThread fun dayOfMonth(timestamp: Long, timestampInSecs: Boolean = true): String { - val calendar = Calendar.getInstance() + val calendar = getCalendar() calendar.timeInMillis = if (timestampInSecs) timestamp * 1000 else timestamp return calendar.get(Calendar.DAY_OF_MONTH).toString() } @AnyThread fun firstAndLastDayOfWeek(timestamp: Long, timestampInSecs: Boolean = true): String { - val calendar = Calendar.getInstance() + val calendar = getCalendar() calendar.timeInMillis = if (timestampInSecs) timestamp * 1000 else timestamp while (calendar.get(Calendar.DAY_OF_WEEK) != calendar.firstDayOfWeek) { calendar.add(Calendar.DATE, -1) @@ -126,7 +127,7 @@ class TimestampUtils { @AnyThread fun month(timestamp: Long, timestampInSecs: Boolean = true): String { - val calendar = Calendar.getInstance() + val calendar = getCalendar() calendar.timeInMillis = if (timestampInSecs) timestamp * 1000 else timestamp val month = calendar.getDisplayName( Calendar.MONTH, @@ -136,7 +137,7 @@ class TimestampUtils { ?.replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() } ?: "?" - val now = Calendar.getInstance() + val now = getCalendar() if (isSameYear(now, calendar)) { return month } @@ -150,7 +151,7 @@ class TimestampUtils { val use24hFormat = android.text.format.DateFormat.is24HourFormat( coreContext.context ) - val calendar = Calendar.getInstance() + val calendar = getCalendar() calendar.timeInMillis = if (timestampInSecs) time * 1000 else time return if (use24hFormat) { @@ -166,14 +167,14 @@ class TimestampUtils { if (duration >= 3600) "HH:mm:ss" else "mm:ss", Locale.getDefault() ) - val cal = Calendar.getInstance() + val cal = getCalendar() cal[0, 0, 0, 0, 0] = duration return dateFormat.format(cal.time) } @AnyThread fun toFullString(time: Long, timestampInSecs: Boolean = true): String { - val calendar = Calendar.getInstance() + val calendar = getCalendar() calendar.timeInMillis = if (timestampInSecs) time * 1000 else time return SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(calendar.time) @@ -200,9 +201,9 @@ class TimestampUtils { } } as SimpleDateFormat - val cal = Calendar.getInstance() + val cal = getCalendar() cal.timeInMillis = if (timestampInSecs) timestamp * 1000 else timestamp - val now = Calendar.getInstance() + val now = getCalendar() if (hideYear && isSameYear(cal, now)) { // Remove the year part of the format dateFormat.applyPattern( @@ -264,5 +265,10 @@ class TimestampUtils { return cal1.get(Calendar.ERA) == cal2.get(Calendar.ERA) && cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR) } + + @AnyThread + private fun getCalendar(): Calendar { + return Calendar.getInstance(TimeZone.getDefault()) + } } }