Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import com.anytypeio.anytype.core_models.Relation
import com.anytypeio.anytype.core_models.SearchResult
import com.anytypeio.anytype.core_models.SubscriptionEvent
import com.anytypeio.anytype.core_models.primitives.SpaceId
import com.anytypeio.anytype.device.providers.AppDefaultDateFormatProviderImpl
import com.anytypeio.anytype.device.providers.DateProviderImpl
import com.anytypeio.anytype.domain.auth.interactor.ClearLastOpenedObject
import com.anytypeio.anytype.domain.auth.repo.AuthRepository
Expand Down Expand Up @@ -81,7 +82,6 @@ import java.util.Locale
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.emptyFlow
import kotlinx.coroutines.test.StandardTestDispatcher
import kotlinx.coroutines.test.TestScope
import org.mockito.Mock
import org.mockito.Mockito
import org.mockito.MockitoAnnotations
Expand Down Expand Up @@ -242,8 +242,7 @@ abstract class TestObjectSetSetup {
private val dateProvider = DateProviderImpl(
defaultZoneId = ZoneId.systemDefault(),
localeProvider = localeProvider,
vaultSettings = observeVaultSettings,
scope = TestScope()
appDefaultDateFormatProvider = AppDefaultDateFormatProviderImpl(localeProvider)
)

open fun setup() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ import com.anytypeio.anytype.domain.objects.StoreOfObjectTypes
import com.anytypeio.anytype.domain.objects.StoreOfRelations
import com.anytypeio.anytype.domain.page.CloseBlock
import com.anytypeio.anytype.domain.page.CreateObject
import com.anytypeio.anytype.domain.primitives.FieldParser
import com.anytypeio.anytype.domain.search.SubscriptionEventChannel
import com.anytypeio.anytype.domain.templates.GetTemplates
import com.anytypeio.anytype.domain.workspace.NotificationsChannel
Expand Down Expand Up @@ -276,4 +277,5 @@ interface HomeScreenDependencies : ComponentDependencies {
fun spaceViewSubscriptionContainer(): SpaceViewSubscriptionContainer
fun featureToggles(): FeatureToggles
fun payloadDelegator(): PayloadDelegator
fun fieldParser(): FieldParser
}
11 changes: 3 additions & 8 deletions app/src/main/java/com/anytypeio/anytype/di/main/UtilModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ import com.anytypeio.anytype.core_utils.tools.DefaultUrlValidator
import com.anytypeio.anytype.core_utils.tools.FeatureToggles
import com.anytypeio.anytype.core_utils.tools.ThreadInfo
import com.anytypeio.anytype.core_utils.tools.UrlValidator
import com.anytypeio.anytype.device.providers.AppDefaultDateFormatProvider
import com.anytypeio.anytype.device.providers.DateProviderImpl
import com.anytypeio.anytype.di.main.ConfigModule.DEFAULT_APP_COROUTINE_SCOPE
import com.anytypeio.anytype.domain.config.Gateway
import com.anytypeio.anytype.domain.debugging.DebugConfig
import com.anytypeio.anytype.domain.debugging.Logger
Expand All @@ -24,7 +24,6 @@ import com.anytypeio.anytype.domain.misc.LocaleProvider
import com.anytypeio.anytype.domain.misc.UrlBuilder
import com.anytypeio.anytype.domain.primitives.FieldParser
import com.anytypeio.anytype.domain.primitives.FieldParserImpl
import com.anytypeio.anytype.domain.vault.ObserveVaultSettings
import com.anytypeio.anytype.middleware.interactor.MiddlewareProtobufLogger
import com.anytypeio.anytype.middleware.interactor.ProtobufConverterProvider
import com.anytypeio.anytype.other.BasicLogger
Expand All @@ -34,9 +33,7 @@ import dagger.Binds
import dagger.Module
import dagger.Provides
import java.time.ZoneId
import javax.inject.Named
import javax.inject.Singleton
import kotlinx.coroutines.CoroutineScope

@Module(includes = [UtilModule.Bindings::class])
object UtilModule {
Expand Down Expand Up @@ -64,13 +61,11 @@ object UtilModule {
@Singleton
fun provideDateProvider(
localeProvider: LocaleProvider,
observeVaultSettings: ObserveVaultSettings,
@Named(DEFAULT_APP_COROUTINE_SCOPE) scope: CoroutineScope
appDefaultDateFormatProvider: AppDefaultDateFormatProvider
): DateProvider = DateProviderImpl(
defaultZoneId = ZoneId.systemDefault(),
localeProvider = localeProvider,
vaultSettings = observeVaultSettings,
scope = scope
appDefaultDateFormatProvider = appDefaultDateFormatProvider
)

@JvmStatic
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ const val DEFAULT_SHOW_INTRODUCE_VAULT = true
/**
* The default value for showing the time
*/
const val DEFAULT_TIME_STYLE = DateFormat.DEFAULT
const val DEFAULT_DATE_FORMAT_STYLE = DateFormat.DEFAULT

/**
* The date range for the date picker.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.anytypeio.anytype.device.providers

import com.anytypeio.anytype.core_models.DEFAULT_TIME_STYLE
import com.anytypeio.anytype.core_models.DEFAULT_DATE_FORMAT_STYLE
import com.anytypeio.anytype.core_models.FALLBACK_DATE_PATTERN
import com.anytypeio.anytype.domain.misc.LocaleProvider
import java.text.DateFormat
Expand Down Expand Up @@ -34,7 +34,7 @@ class AppDefaultDateFormatProviderImpl @Inject constructor(
override fun provide(): String {
return try {
val locale = localeProvider.locale()
val dateFormat = DateFormat.getDateInstance(DEFAULT_TIME_STYLE, locale)
val dateFormat = DateFormat.getDateInstance(DEFAULT_DATE_FORMAT_STYLE, locale)
if (dateFormat is SimpleDateFormat) {
dateFormat.toPattern()
} else {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
package com.anytypeio.anytype.device.providers

import android.text.format.DateUtils
import com.anytypeio.anytype.core_models.FALLBACK_DATE_PATTERN
import com.anytypeio.anytype.core_models.RelativeDate
import com.anytypeio.anytype.core_models.TimeInMillis
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.vault.ObserveVaultSettings
import java.text.DateFormat
import java.text.SimpleDateFormat
import java.time.Instant
Expand All @@ -20,27 +18,15 @@ import java.time.temporal.ChronoUnit
import java.util.Date
import java.util.concurrent.TimeUnit
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.launch
import timber.log.Timber

class DateProviderImpl @Inject constructor(
private val defaultZoneId: ZoneId,
private val localeProvider: LocaleProvider,
private val vaultSettings: ObserveVaultSettings,
scope: CoroutineScope
private val appDefaultDateFormatProvider: AppDefaultDateFormatProvider
) : DateProvider {

private val defaultDateFormat = MutableStateFlow(FALLBACK_DATE_PATTERN)

init {
scope.launch {
vaultSettings.flow().collect { settings ->
defaultDateFormat.value = settings.dateFormat
}
}
}
private val defaultDateFormat get() = appDefaultDateFormatProvider.provide()

override fun calculateDateType(date: TimeInSeconds): DateType {
val dateInstant = Instant.ofEpochSecond(date)
Expand Down Expand Up @@ -172,10 +158,9 @@ class DateProviderImpl @Inject constructor(
timestamp: TimeInMillis,
timeStyle: Int
): Pair<String, String> {
Timber.d("Formatting timestamp [$timestamp] to date and time")
return try {
val locale = localeProvider.locale()
val datePattern = defaultDateFormat.value
val datePattern = defaultDateFormat
val timePattern =
(DateFormat.getTimeInstance(timeStyle, locale) as SimpleDateFormat).toPattern()
val dateFormatter = SimpleDateFormat(datePattern, locale)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.anytypeio.anytype

import com.anytypeio.anytype.device.providers.AppDefaultDateFormatProvider
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
Expand Down Expand Up @@ -27,9 +29,12 @@ class DateProviderImplTest {

lateinit var dateProviderImpl: DateProvider

lateinit var appDefaultDateFormatProvider: AppDefaultDateFormatProvider

@Before
fun setUp() {
MockitoAnnotations.openMocks(this)
appDefaultDateFormatProvider = AppDefaultDateFormatProviderImpl(localeProvider)
Mockito.`when`(localeProvider.locale()).thenReturn(Locale.getDefault())
Mockito.`when`(localeProvider.language()).thenReturn("en")
}
Expand Down Expand Up @@ -72,8 +77,7 @@ class DateProviderImplTest {
dateProviderImpl = DateProviderImpl(
defaultZoneId = zoneId,
localeProvider = localeProvider,
vaultSettings = observeVaultSettings,
scope = backgroundScope
appDefaultDateFormatProvider = appDefaultDateFormatProvider,
)
val startOfDayInLocalZone =
dateProviderImpl.adjustFromStartOfDayInUserTimeZoneToUTC(
Expand Down Expand Up @@ -122,8 +126,7 @@ class DateProviderImplTest {
dateProviderImpl = DateProviderImpl(
defaultZoneId = zoneId,
localeProvider = localeProvider,
vaultSettings = observeVaultSettings,
scope = backgroundScope
appDefaultDateFormatProvider = appDefaultDateFormatProvider,
)
val startOfDayInLocalZone =
dateProviderImpl.adjustFromStartOfDayInUserTimeZoneToUTC(utcTimestamp * 1000)
Expand Down Expand Up @@ -169,8 +172,7 @@ class DateProviderImplTest {
dateProviderImpl = DateProviderImpl(
defaultZoneId = zoneId,
localeProvider = localeProvider,
vaultSettings = observeVaultSettings,
scope = backgroundScope
appDefaultDateFormatProvider = appDefaultDateFormatProvider,
)
val startOfDayInLocalZone =
dateProviderImpl.adjustFromStartOfDayInUserTimeZoneToUTC(utcTimestamp * 1000)
Expand Down Expand Up @@ -215,8 +217,7 @@ class DateProviderImplTest {
dateProviderImpl = DateProviderImpl(
defaultZoneId = zoneId,
localeProvider = localeProvider,
vaultSettings = observeVaultSettings,
scope = backgroundScope
appDefaultDateFormatProvider = appDefaultDateFormatProvider,
)
val startOfDayInLocalZone =
dateProviderImpl.adjustFromStartOfDayInUserTimeZoneToUTC(utcTimestamp * 1000)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.anytypeio.anytype.domain.misc

import com.anytypeio.anytype.core_models.DEFAULT_TIME_STYLE
import com.anytypeio.anytype.core_models.DEFAULT_DATE_FORMAT_STYLE
import com.anytypeio.anytype.core_models.RelativeDate
import com.anytypeio.anytype.core_models.TimeInMillis
import com.anytypeio.anytype.core_models.TimeInSeconds
Expand All @@ -24,7 +24,7 @@ interface DateProvider {
fun formatToDateString(timestamp: Long, pattern: String): String
fun formatTimestampToDateAndTime(
timestamp: TimeInMillis,
timeStyle: Int = DEFAULT_TIME_STYLE
timeStyle: Int = DEFAULT_DATE_FORMAT_STYLE
): Pair<String, String>
fun calculateRelativeDates(dateInSeconds: TimeInSeconds?): RelativeDate?
fun isSameMinute(timestamp1: Long, timestamp2: Long): Boolean
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import com.anytypeio.anytype.core_models.ObjectWrapper
import com.anytypeio.anytype.core_models.Payload
import com.anytypeio.anytype.core_models.Position
import com.anytypeio.anytype.core_models.Relations
import com.anytypeio.anytype.core_models.SupportedLayouts
import com.anytypeio.anytype.core_models.WidgetLayout
import com.anytypeio.anytype.core_models.WidgetSession
import com.anytypeio.anytype.core_models.ext.process
Expand Down Expand Up @@ -62,6 +63,7 @@ import com.anytypeio.anytype.domain.objects.StoreOfObjectTypes
import com.anytypeio.anytype.domain.objects.StoreOfRelations
import com.anytypeio.anytype.domain.page.CloseBlock
import com.anytypeio.anytype.domain.page.CreateObject
import com.anytypeio.anytype.domain.primitives.FieldParser
import com.anytypeio.anytype.domain.search.SearchObjects
import com.anytypeio.anytype.domain.spaces.ClearLastOpenedSpace
import com.anytypeio.anytype.domain.spaces.GetSpaceView
Expand All @@ -87,7 +89,6 @@ import com.anytypeio.anytype.presentation.extension.sendSelectHomeTabEvent
import com.anytypeio.anytype.presentation.home.Command.ChangeWidgetType.Companion.UNDEFINED_LAYOUT_CODE
import com.anytypeio.anytype.presentation.navigation.DeepLinkToObjectDelegate
import com.anytypeio.anytype.presentation.navigation.NavigationViewModel
import com.anytypeio.anytype.core_models.SupportedLayouts
import com.anytypeio.anytype.presentation.objects.getCreateObjectParams
import com.anytypeio.anytype.presentation.search.Subscriptions
import com.anytypeio.anytype.presentation.sets.prefillNewObjectDetails
Expand Down Expand Up @@ -205,7 +206,8 @@ class HomeScreenViewModel(
private val clearLastOpenedSpace: ClearLastOpenedSpace,
private val clearLastOpenedObject: ClearLastOpenedObject,
private val spaceBinWidgetContainer: SpaceBinWidgetContainer,
private val featureToggles: FeatureToggles
private val featureToggles: FeatureToggles,
private val fieldParser: FieldParser
) : NavigationViewModel<HomeScreenViewModel.Navigation>(),
Reducer<ObjectView, Payload>,
WidgetActiveViewStateHolder by widgetActiveViewStateHolder,
Expand Down Expand Up @@ -450,7 +452,8 @@ class HomeScreenViewModel(
widgets.filter { widget -> widget.hasValidLayout() }.map { widget ->
when (widget) {
is Widget.Link -> LinkWidgetContainer(
widget = widget
widget = widget,
fieldParser = fieldParser
)
is Widget.Tree -> TreeWidgetContainer(
widget = widget,
Expand All @@ -467,7 +470,8 @@ class HomeScreenViewModel(
&& view is WidgetView.Tree
&& view.source == widget.source
} as? WidgetView.Tree
}
},
fieldParser = fieldParser
)
is Widget.List -> if (BundledWidgetSourceIds.ids.contains(widget.source.id)) {
ListWidgetContainer(
Expand All @@ -485,7 +489,8 @@ class HomeScreenViewModel(
&& view is WidgetView.ListOfObjects
&& view.source == widget.source
} as? WidgetView.ListOfObjects
}
},
fieldParser = fieldParser
)
} else {
DataViewListWidgetContainer(
Expand All @@ -504,7 +509,8 @@ class HomeScreenViewModel(
&& view.source == widget.source
} as? WidgetView.SetOfObjects
},
storeOfRelations = storeOfRelations
storeOfRelations = storeOfRelations,
fieldParser = fieldParser
)
}
is Widget.View -> {
Expand All @@ -525,7 +531,8 @@ class HomeScreenViewModel(
&& view.source == widget.source
} as? WidgetView.SetOfObjects
},
storeOfRelations = storeOfRelations
storeOfRelations = storeOfRelations,
fieldParser = fieldParser
)
}
}
Expand Down Expand Up @@ -2188,7 +2195,8 @@ class HomeScreenViewModel(
private val clearLastOpenedSpace: ClearLastOpenedSpace,
private val clearLastOpenedObject: ClearLastOpenedObject,
private val spaceBinWidgetContainer: SpaceBinWidgetContainer,
private val featureToggles: FeatureToggles
private val featureToggles: FeatureToggles,
private val fieldParser: FieldParser
) : ViewModelProvider.Factory {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel> create(modelClass: Class<T>): T = HomeScreenViewModel(
Expand Down Expand Up @@ -2239,7 +2247,8 @@ class HomeScreenViewModel(
clearLastOpenedSpace = clearLastOpenedSpace,
clearLastOpenedObject = clearLastOpenedObject,
spaceBinWidgetContainer = spaceBinWidgetContainer,
featureToggles = featureToggles
featureToggles = featureToggles,
fieldParser = fieldParser
) as T
}

Expand Down
Loading
Loading