From f00e5c4ed8b52dedfc1715cbe042b3668c6ef948 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 9 Jun 2020 14:10:06 +0200 Subject: [PATCH] Removed hardcoded date format to use user-defined Android settings --- .../history/adapters/CallLogsListAdapter.kt | 4 +- .../history/viewmodels/CallLogViewModel.kt | 3 +- .../adapters/RecordingsListAdapter.kt | 4 +- .../viewmodels/RecordingViewModel.kt | 3 +- .../java/org/linphone/utils/TimestampUtils.kt | 43 ++++++++++++++++--- 5 files changed, 43 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/org/linphone/activities/main/history/adapters/CallLogsListAdapter.kt b/app/src/main/java/org/linphone/activities/main/history/adapters/CallLogsListAdapter.kt index b455e70ab..ddc20438d 100644 --- a/app/src/main/java/org/linphone/activities/main/history/adapters/CallLogsListAdapter.kt +++ b/app/src/main/java/org/linphone/activities/main/history/adapters/CallLogsListAdapter.kt @@ -27,8 +27,6 @@ import androidx.databinding.DataBindingUtil import androidx.lifecycle.MutableLiveData import androidx.lifecycle.Observer import androidx.recyclerview.widget.DiffUtil -import java.text.SimpleDateFormat -import java.util.* import org.linphone.R import org.linphone.activities.main.history.viewmodels.CallLogViewModel import org.linphone.activities.main.viewmodels.ListTopBarViewModel @@ -122,7 +120,7 @@ class CallLogsListAdapter(val selectionViewModel: ListTopBarViewModel) : Lifecyc } else if (TimestampUtils.isYesterday(date)) { return context.getString(R.string.yesterday) } - return SimpleDateFormat("EEE d MMM", Locale.getDefault()).format(Date(date * 1000)) + return TimestampUtils.toString(date, onlyDate = true, shortDate = false) } } diff --git a/app/src/main/java/org/linphone/activities/main/history/viewmodels/CallLogViewModel.kt b/app/src/main/java/org/linphone/activities/main/history/viewmodels/CallLogViewModel.kt index bf93ff04a..07824adbf 100644 --- a/app/src/main/java/org/linphone/activities/main/history/viewmodels/CallLogViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/history/viewmodels/CallLogViewModel.kt @@ -93,8 +93,7 @@ class CallLogViewModel(val callLog: CallLog) : GenericContactViewModel(callLog.r } val date: String by lazy { - val pattern = if (TimestampUtils.isToday(callLog.startDate)) "HH:mm" else "yyyy/MM/dd - HH:mm" - SimpleDateFormat(pattern, Locale.getDefault()).format(Date(callLog.startDate * 1000)) + TimestampUtils.toString(callLog.startDate) } val startCallEvent: MutableLiveData> by lazy { diff --git a/app/src/main/java/org/linphone/activities/main/recordings/adapters/RecordingsListAdapter.kt b/app/src/main/java/org/linphone/activities/main/recordings/adapters/RecordingsListAdapter.kt index b47f75b37..13c7e1946 100644 --- a/app/src/main/java/org/linphone/activities/main/recordings/adapters/RecordingsListAdapter.kt +++ b/app/src/main/java/org/linphone/activities/main/recordings/adapters/RecordingsListAdapter.kt @@ -27,8 +27,6 @@ import android.view.ViewGroup import androidx.databinding.DataBindingUtil import androidx.lifecycle.Observer import androidx.recyclerview.widget.DiffUtil -import java.text.SimpleDateFormat -import java.util.* import org.linphone.R import org.linphone.activities.main.recordings.viewmodels.RecordingViewModel import org.linphone.activities.main.viewmodels.ListTopBarViewModel @@ -131,7 +129,7 @@ class RecordingsListAdapter(val selectionViewModel: ListTopBarViewModel) : Lifec } else if (TimestampUtils.isYesterday(date, false)) { return context.getString(R.string.yesterday) } - return SimpleDateFormat("EEE d MMM", Locale.getDefault()).format(Date(date)) + return TimestampUtils.toString(date, onlyDate = true, timestampInSecs = false, shortDate = false) } } diff --git a/app/src/main/java/org/linphone/activities/main/recordings/viewmodels/RecordingViewModel.kt b/app/src/main/java/org/linphone/activities/main/recordings/viewmodels/RecordingViewModel.kt index e9cb2d631..328418077 100644 --- a/app/src/main/java/org/linphone/activities/main/recordings/viewmodels/RecordingViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/recordings/viewmodels/RecordingViewModel.kt @@ -21,6 +21,7 @@ package org.linphone.activities.main.recordings.viewmodels import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel +import java.text.DateFormat import java.text.SimpleDateFormat import java.util.* import java.util.regex.Pattern @@ -49,7 +50,7 @@ class RecordingViewModel(val path: String) : ViewModel(), Comparable>() diff --git a/app/src/main/java/org/linphone/utils/TimestampUtils.kt b/app/src/main/java/org/linphone/utils/TimestampUtils.kt index ee62a6e73..ef992f3be 100644 --- a/app/src/main/java/org/linphone/utils/TimestampUtils.kt +++ b/app/src/main/java/org/linphone/utils/TimestampUtils.kt @@ -19,8 +19,10 @@ */ package org.linphone.utils +import java.text.DateFormat import java.text.SimpleDateFormat import java.util.* +import org.linphone.core.tools.Log class TimestampUtils { companion object { @@ -53,14 +55,37 @@ class TimestampUtils { return isSameDay(cal1.time, cal2.time) } - fun toString(timestamp: Long, onlyDate: Boolean = false, timestampInSecs: Boolean = true): String { - val format = if (isToday(timestamp)) { - "HH:mm" + private fun isSameYear(timestamp: Long, timestampInSecs: Boolean = true): Boolean { + val cal = Calendar.getInstance() + cal.timeInMillis = if (timestampInSecs) timestamp * 1000 else timestamp + return isSameYear(cal, Calendar.getInstance()) + } + + fun toString( + timestamp: Long, + onlyDate: Boolean = false, + timestampInSecs: Boolean = true, + shortDate: Boolean = true + ): String { + val dateFormat = if (isToday(timestamp, timestampInSecs)) { + DateFormat.getTimeInstance(DateFormat.SHORT) } else { - if (onlyDate) "dd/MM" else "dd/MM HH:mm" + if (onlyDate) { + DateFormat.getDateInstance(if (shortDate) DateFormat.SHORT else DateFormat.FULL) + } else { + DateFormat.getDateTimeInstance(if (shortDate) DateFormat.SHORT else DateFormat.MEDIUM, DateFormat.SHORT) + } + } as SimpleDateFormat + + if (isSameYear(timestamp, timestampInSecs)) { + // Remove the year part of the format + dateFormat.applyPattern( + dateFormat.toPattern().replace("/?y+/?|\\s?y+\\s?".toRegex(),"") + ) } + val millis = if (timestampInSecs) timestamp * 1000 else timestamp - return SimpleDateFormat(format, Locale.getDefault()).format(Date(millis)) + return dateFormat.format(Date(millis)) } private fun isSameDay( @@ -71,5 +96,13 @@ class TimestampUtils { cal1[Calendar.YEAR] == cal2[Calendar.YEAR] && cal1[Calendar.DAY_OF_YEAR] == cal2[Calendar.DAY_OF_YEAR] } + + private fun isSameYear( + cal1: Calendar, + cal2: Calendar + ): Boolean { + return cal1[Calendar.ERA] == cal2[Calendar.ERA] && + cal1[Calendar.YEAR] == cal2[Calendar.YEAR] + } } }