1
0
Fork 0
mirror of https://github.com/anyproto/anytype-kotlin.git synced 2025-06-08 05:47:05 +09:00

DROID-3590 Vault 2.0 | Ui + logic, part 1 (#2494)

This commit is contained in:
Konstantin Ivanov 2025-06-05 15:17:08 +02:00 committed by GitHub
parent 86e20dfadd
commit bda6de3208
Signed by: github
GPG key ID: B5690EEEBB952194
17 changed files with 558 additions and 447 deletions

View file

@ -8,6 +8,7 @@ import com.anytypeio.anytype.core_models.TimeInSeconds
import com.anytypeio.anytype.domain.misc.DateProvider
import com.anytypeio.anytype.domain.misc.DateType
import com.anytypeio.anytype.domain.misc.LocaleProvider
import com.anytypeio.anytype.domain.resources.StringResourceProvider
import java.text.DateFormat
import java.text.SimpleDateFormat
import java.time.Instant
@ -24,7 +25,8 @@ import timber.log.Timber
class DateProviderImpl @Inject constructor(
private val defaultZoneId: ZoneId,
private val localeProvider: LocaleProvider,
private val appDefaultDateFormatProvider: AppDefaultDateFormatProvider
private val appDefaultDateFormatProvider: AppDefaultDateFormatProvider,
private val stringResourceProvider: StringResourceProvider
) : DateProvider {
private val defaultDateFormat get() = appDefaultDateFormatProvider.provide()
@ -148,6 +150,7 @@ class DateProviderImpl @Inject constructor(
try {
val locale = localeProvider.locale()
val formatter = SimpleDateFormat(pattern, locale)
formatter.timeZone = java.util.TimeZone.getTimeZone(defaultZoneId)
return formatter.format(Date(timestamp))
} catch (e: Exception) {
Timber.e(e, "Error formatting timestamp to date string")
@ -256,6 +259,38 @@ class DateProviderImpl @Inject constructor(
// Check if the year is within the desired range
return year in yearRange.first()..yearRange.last()
}
override fun getChatPreviewDate(
timeInSeconds: TimeInSeconds,
timeStyle: Int
): String {
val dateType = calculateDateType(timeInSeconds)
val timestamp = timeInSeconds * 1000 // Convert seconds to milliseconds
return when (dateType) {
DateType.TODAY -> {
// Show time in HH:mm format
formatToDateString(timestamp, "HH:mm")
}
DateType.YESTERDAY -> {
// Show "Yesterday" localized
stringResourceProvider.getYesterday()
}
else -> {
// Check if it's current year
val currentYear = getLocalDateOfTime(System.currentTimeMillis()).year
val messageYear = getLocalDateOfTime(timestamp).year
if (currentYear == messageYear) {
// Show "MMM d" format (e.g., "Apr 12")
formatToDateString(timestamp, "MMM d")
} else {
// Show "MMM d, yyyy" format (e.g., "Apr 12, 2024")
formatToDateString(timestamp, "MMM d, yyyy")
}
}
}
}
}

View file

@ -5,8 +5,11 @@ import com.anytypeio.anytype.device.providers.AppDefaultDateFormatProviderImpl
import com.anytypeio.anytype.device.providers.DateProviderImpl
import com.anytypeio.anytype.domain.misc.DateProvider
import com.anytypeio.anytype.domain.misc.LocaleProvider
import com.anytypeio.anytype.domain.resources.StringResourceProvider
import com.anytypeio.anytype.domain.vault.ObserveVaultSettings
import java.time.ZoneId
import java.time.LocalDateTime
import java.time.ZoneOffset
import java.util.Locale
import kotlinx.coroutines.test.StandardTestDispatcher
import kotlinx.coroutines.test.runTest
@ -27,6 +30,9 @@ class DateProviderImplTest {
@Mock
lateinit var observeVaultSettings: ObserveVaultSettings
@Mock
lateinit var stringResourceProvider: StringResourceProvider
lateinit var dateProviderImpl: DateProvider
lateinit var appDefaultDateFormatProvider: AppDefaultDateFormatProvider
@ -36,7 +42,8 @@ class DateProviderImplTest {
MockitoAnnotations.openMocks(this)
appDefaultDateFormatProvider = AppDefaultDateFormatProviderImpl(localeProvider)
Mockito.`when`(localeProvider.locale()).thenReturn(Locale.getDefault())
Mockito.`when`(localeProvider.language()).thenReturn("en")
Mockito.`when`(localeProvider.language()).thenReturn(Locale.getDefault().language)
Mockito.`when`(stringResourceProvider.getYesterday()).thenReturn("Yesterday")
}
@Test
@ -78,6 +85,7 @@ class DateProviderImplTest {
defaultZoneId = zoneId,
localeProvider = localeProvider,
appDefaultDateFormatProvider = appDefaultDateFormatProvider,
stringResourceProvider = stringResourceProvider
)
val startOfDayInLocalZone =
dateProviderImpl.adjustFromStartOfDayInUserTimeZoneToUTC(
@ -127,6 +135,7 @@ class DateProviderImplTest {
defaultZoneId = zoneId,
localeProvider = localeProvider,
appDefaultDateFormatProvider = appDefaultDateFormatProvider,
stringResourceProvider = stringResourceProvider
)
val startOfDayInLocalZone =
dateProviderImpl.adjustFromStartOfDayInUserTimeZoneToUTC(utcTimestamp * 1000)
@ -173,6 +182,7 @@ class DateProviderImplTest {
defaultZoneId = zoneId,
localeProvider = localeProvider,
appDefaultDateFormatProvider = appDefaultDateFormatProvider,
stringResourceProvider = stringResourceProvider
)
val startOfDayInLocalZone =
dateProviderImpl.adjustFromStartOfDayInUserTimeZoneToUTC(utcTimestamp * 1000)
@ -218,6 +228,7 @@ class DateProviderImplTest {
defaultZoneId = zoneId,
localeProvider = localeProvider,
appDefaultDateFormatProvider = appDefaultDateFormatProvider,
stringResourceProvider = stringResourceProvider
)
val startOfDayInLocalZone =
dateProviderImpl.adjustFromStartOfDayInUserTimeZoneToUTC(utcTimestamp * 1000)