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:
parent
86e20dfadd
commit
bda6de3208
17 changed files with 558 additions and 447 deletions
|
@ -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")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue