mirror of
https://github.com/SchildiChat/SchildiChat-android.git
synced 2025-02-16 12:00:03 +03:00
Better date management
This commit is contained in:
parent
891d7b3323
commit
9c48eba26c
9 changed files with 62 additions and 13 deletions
|
@ -3,6 +3,7 @@ package im.vector.riotredesign.core.di
|
|||
import android.content.Context
|
||||
import im.vector.matrix.android.api.Matrix
|
||||
import im.vector.matrix.android.api.MatrixOptions
|
||||
import im.vector.riotredesign.core.resources.LocaleProvider
|
||||
import org.koin.dsl.context.ModuleDefinition
|
||||
import org.koin.dsl.module.Module
|
||||
import org.koin.dsl.module.module
|
||||
|
@ -16,5 +17,9 @@ class AppModule(private val context: Context) : Module {
|
|||
Matrix(matrixOptions)
|
||||
}
|
||||
|
||||
single {
|
||||
LocaleProvider(context.resources)
|
||||
}
|
||||
|
||||
}.invoke()
|
||||
}
|
|
@ -3,10 +3,10 @@ package im.vector.riotredesign.core.extensions
|
|||
import im.vector.matrix.android.api.session.events.model.Event
|
||||
import org.threeten.bp.Instant
|
||||
import org.threeten.bp.LocalDateTime
|
||||
import org.threeten.bp.ZoneOffset
|
||||
import org.threeten.bp.ZoneId
|
||||
|
||||
|
||||
fun Event.localDateTime(): LocalDateTime {
|
||||
val instant = Instant.ofEpochMilli(originServerTs ?: 0)
|
||||
return LocalDateTime.ofInstant(instant, ZoneOffset.UTC)
|
||||
return LocalDateTime.ofInstant(instant, ZoneId.systemDefault())
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
package im.vector.riotredesign.core.resources
|
||||
|
||||
import android.content.res.Resources
|
||||
import android.support.v4.os.ConfigurationCompat
|
||||
import java.util.*
|
||||
|
||||
class LocaleProvider(private val resources: Resources) {
|
||||
|
||||
fun current(): Locale {
|
||||
return ConfigurationCompat.getLocales(resources.configuration)[0]
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -1,5 +1,7 @@
|
|||
package im.vector.riotredesign.features.home
|
||||
|
||||
import im.vector.riotredesign.features.home.room.detail.timeline.TimelineDateFormatter
|
||||
import im.vector.riotredesign.features.home.room.detail.timeline.TimelineEventController
|
||||
import org.koin.dsl.context.ModuleDefinition
|
||||
import org.koin.dsl.module.Module
|
||||
import org.koin.dsl.module.module
|
||||
|
@ -12,5 +14,13 @@ class HomeModule(private val homeActivity: HomeActivity) : Module {
|
|||
homeActivity as HomeNavigator
|
||||
}
|
||||
|
||||
factory {
|
||||
TimelineDateFormatter(get())
|
||||
}
|
||||
|
||||
factory {
|
||||
TimelineEventController(get())
|
||||
}
|
||||
|
||||
}.invoke()
|
||||
}
|
|
@ -34,8 +34,7 @@ class RoomDetailFragment : RiotFragment() {
|
|||
private val matrix by inject<Matrix>()
|
||||
private val currentSession = matrix.currentSession
|
||||
private var roomId by FragmentArgumentDelegate<String>()
|
||||
|
||||
private lateinit var timelineEventController: TimelineEventController
|
||||
private val timelineEventController by inject<TimelineEventController>()
|
||||
private lateinit var room: Room
|
||||
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
||||
|
@ -63,7 +62,6 @@ class RoomDetailFragment : RiotFragment() {
|
|||
val layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, true)
|
||||
val listUpdateCallback = ScrollOnNewMessageCallback(layoutManager)
|
||||
recyclerView.layoutManager = layoutManager
|
||||
timelineEventController = TimelineEventController(riotActivity)
|
||||
timelineEventController.addModelBuildListener { it.dispatchTo(listUpdateCallback) }
|
||||
recyclerView.setController(timelineEventController)
|
||||
}
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
package im.vector.riotredesign.features.home.room.detail.timeline
|
||||
|
||||
import im.vector.riotredesign.core.resources.LocaleProvider
|
||||
import org.threeten.bp.LocalDateTime
|
||||
import org.threeten.bp.format.DateTimeFormatter
|
||||
|
||||
class TimelineDateFormatter(private val localeProvider: LocaleProvider) {
|
||||
|
||||
fun formatMessageHour(localDateTime: LocalDateTime): String {
|
||||
return DateTimeFormatter.ofPattern("H:mm", localeProvider.current()).format(localDateTime)
|
||||
}
|
||||
|
||||
fun formatMessageDay(localDateTime: LocalDateTime): String {
|
||||
return DateTimeFormatter.ofPattern("EEE d MMM", localeProvider.current()).format(localDateTime)
|
||||
}
|
||||
|
||||
}
|
|
@ -1,7 +1,6 @@
|
|||
package im.vector.riotredesign.features.home.room.detail.timeline
|
||||
|
||||
import android.arch.paging.PagedList
|
||||
import android.content.Context
|
||||
import com.airbnb.epoxy.EpoxyAsyncUtil
|
||||
import com.airbnb.epoxy.EpoxyController
|
||||
import im.vector.matrix.android.api.session.events.model.EnrichedEvent
|
||||
|
@ -10,10 +9,8 @@ import im.vector.matrix.android.api.session.events.model.roomMember
|
|||
import im.vector.matrix.android.api.session.room.model.MessageContent
|
||||
import im.vector.riotredesign.core.extensions.localDateTime
|
||||
import im.vector.riotredesign.features.home.LoadingItemModel_
|
||||
import org.threeten.bp.format.DateTimeFormatter
|
||||
import org.threeten.bp.format.FormatStyle
|
||||
|
||||
class TimelineEventController(private val context: Context) : EpoxyController(
|
||||
class TimelineEventController(private val timelineDateFormatter: TimelineDateFormatter) : EpoxyController(
|
||||
EpoxyAsyncUtil.getAsyncBackgroundHandler(),
|
||||
EpoxyAsyncUtil.getAsyncBackgroundHandler()
|
||||
) {
|
||||
|
@ -74,7 +71,7 @@ class TimelineEventController(private val context: Context) : EpoxyController(
|
|||
message = messageContent.body,
|
||||
avatarUrl = roomMember.avatarUrl,
|
||||
showInformation = showInformation,
|
||||
time = date.toLocalTime().format(DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT)),
|
||||
time = timelineDateFormatter.formatMessageHour(date),
|
||||
memberName = roomMember.displayName
|
||||
)
|
||||
.onBind { timeline?.loadAround(index) }
|
||||
|
@ -87,7 +84,7 @@ class TimelineEventController(private val context: Context) : EpoxyController(
|
|||
.addTo(this)
|
||||
}
|
||||
if (addDaySeparator) {
|
||||
val formattedDay = date.toLocalDate().format(DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM))
|
||||
val formattedDay = timelineDateFormatter.formatMessageDay(date)
|
||||
TimelineDaySeparatorItem(formattedDay).id(formattedDay).addTo(this)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,11 +23,14 @@ class Matrix(matrixOptions: MatrixOptions) : KoinComponent {
|
|||
|
||||
init {
|
||||
Monarchy.init(matrixOptions.context)
|
||||
|
||||
val matrixModule = MatrixModule(matrixOptions)
|
||||
val networkModule = NetworkModule()
|
||||
val authModule = AuthModule()
|
||||
loadKoinModules(listOf(matrixModule, networkModule, authModule))
|
||||
|
||||
ProcessLifecycleOwner.get().lifecycle.addObserver(backgroundDetectionObserver)
|
||||
|
||||
val lastActiveSession = authenticator.getLastActiveSession()
|
||||
if (lastActiveSession != null) {
|
||||
currentSession = lastActiveSession
|
||||
|
|
|
@ -19,11 +19,16 @@ class SessionModule(private val sessionParams: SessionParams) : Module {
|
|||
override fun invoke(): ModuleDefinition = module(override = true) {
|
||||
|
||||
scope(DefaultSession.SCOPE) {
|
||||
RealmConfiguration.Builder().name(sessionParams.credentials.userId).deleteRealmIfMigrationNeeded().build()
|
||||
RealmConfiguration.Builder()
|
||||
.name(sessionParams.credentials.userId)
|
||||
.deleteRealmIfMigrationNeeded()
|
||||
.build()
|
||||
}
|
||||
|
||||
scope(DefaultSession.SCOPE) {
|
||||
Monarchy.Builder().setRealmConfiguration(get()).build()
|
||||
Monarchy.Builder()
|
||||
.setRealmConfiguration(get())
|
||||
.build()
|
||||
}
|
||||
|
||||
scope(DefaultSession.SCOPE) {
|
||||
|
|
Loading…
Add table
Reference in a new issue