forked from GitHub-Mirror/riotX-android
Better date management
This commit is contained in:
parent
891d7b3323
commit
9c48eba26c
@ -3,6 +3,7 @@ package im.vector.riotredesign.core.di
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import im.vector.matrix.android.api.Matrix
|
import im.vector.matrix.android.api.Matrix
|
||||||
import im.vector.matrix.android.api.MatrixOptions
|
import im.vector.matrix.android.api.MatrixOptions
|
||||||
|
import im.vector.riotredesign.core.resources.LocaleProvider
|
||||||
import org.koin.dsl.context.ModuleDefinition
|
import org.koin.dsl.context.ModuleDefinition
|
||||||
import org.koin.dsl.module.Module
|
import org.koin.dsl.module.Module
|
||||||
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)
|
Matrix(matrixOptions)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
single {
|
||||||
|
LocaleProvider(context.resources)
|
||||||
|
}
|
||||||
|
|
||||||
}.invoke()
|
}.invoke()
|
||||||
}
|
}
|
@ -3,10 +3,10 @@ package im.vector.riotredesign.core.extensions
|
|||||||
import im.vector.matrix.android.api.session.events.model.Event
|
import im.vector.matrix.android.api.session.events.model.Event
|
||||||
import org.threeten.bp.Instant
|
import org.threeten.bp.Instant
|
||||||
import org.threeten.bp.LocalDateTime
|
import org.threeten.bp.LocalDateTime
|
||||||
import org.threeten.bp.ZoneOffset
|
import org.threeten.bp.ZoneId
|
||||||
|
|
||||||
|
|
||||||
fun Event.localDateTime(): LocalDateTime {
|
fun Event.localDateTime(): LocalDateTime {
|
||||||
val instant = Instant.ofEpochMilli(originServerTs ?: 0)
|
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
|
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.context.ModuleDefinition
|
||||||
import org.koin.dsl.module.Module
|
import org.koin.dsl.module.Module
|
||||||
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
|
homeActivity as HomeNavigator
|
||||||
}
|
}
|
||||||
|
|
||||||
|
factory {
|
||||||
|
TimelineDateFormatter(get())
|
||||||
|
}
|
||||||
|
|
||||||
|
factory {
|
||||||
|
TimelineEventController(get())
|
||||||
|
}
|
||||||
|
|
||||||
}.invoke()
|
}.invoke()
|
||||||
}
|
}
|
@ -34,8 +34,7 @@ class RoomDetailFragment : RiotFragment() {
|
|||||||
private val matrix by inject<Matrix>()
|
private val matrix by inject<Matrix>()
|
||||||
private val currentSession = matrix.currentSession
|
private val currentSession = matrix.currentSession
|
||||||
private var roomId by FragmentArgumentDelegate<String>()
|
private var roomId by FragmentArgumentDelegate<String>()
|
||||||
|
private val timelineEventController by inject<TimelineEventController>()
|
||||||
private lateinit var timelineEventController: TimelineEventController
|
|
||||||
private lateinit var room: Room
|
private lateinit var room: Room
|
||||||
|
|
||||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
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 layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, true)
|
||||||
val listUpdateCallback = ScrollOnNewMessageCallback(layoutManager)
|
val listUpdateCallback = ScrollOnNewMessageCallback(layoutManager)
|
||||||
recyclerView.layoutManager = layoutManager
|
recyclerView.layoutManager = layoutManager
|
||||||
timelineEventController = TimelineEventController(riotActivity)
|
|
||||||
timelineEventController.addModelBuildListener { it.dispatchTo(listUpdateCallback) }
|
timelineEventController.addModelBuildListener { it.dispatchTo(listUpdateCallback) }
|
||||||
recyclerView.setController(timelineEventController)
|
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
|
package im.vector.riotredesign.features.home.room.detail.timeline
|
||||||
|
|
||||||
import android.arch.paging.PagedList
|
import android.arch.paging.PagedList
|
||||||
import android.content.Context
|
|
||||||
import com.airbnb.epoxy.EpoxyAsyncUtil
|
import com.airbnb.epoxy.EpoxyAsyncUtil
|
||||||
import com.airbnb.epoxy.EpoxyController
|
import com.airbnb.epoxy.EpoxyController
|
||||||
import im.vector.matrix.android.api.session.events.model.EnrichedEvent
|
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.matrix.android.api.session.room.model.MessageContent
|
||||||
import im.vector.riotredesign.core.extensions.localDateTime
|
import im.vector.riotredesign.core.extensions.localDateTime
|
||||||
import im.vector.riotredesign.features.home.LoadingItemModel_
|
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(),
|
||||||
EpoxyAsyncUtil.getAsyncBackgroundHandler()
|
EpoxyAsyncUtil.getAsyncBackgroundHandler()
|
||||||
) {
|
) {
|
||||||
@ -74,7 +71,7 @@ class TimelineEventController(private val context: Context) : EpoxyController(
|
|||||||
message = messageContent.body,
|
message = messageContent.body,
|
||||||
avatarUrl = roomMember.avatarUrl,
|
avatarUrl = roomMember.avatarUrl,
|
||||||
showInformation = showInformation,
|
showInformation = showInformation,
|
||||||
time = date.toLocalTime().format(DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT)),
|
time = timelineDateFormatter.formatMessageHour(date),
|
||||||
memberName = roomMember.displayName
|
memberName = roomMember.displayName
|
||||||
)
|
)
|
||||||
.onBind { timeline?.loadAround(index) }
|
.onBind { timeline?.loadAround(index) }
|
||||||
@ -87,7 +84,7 @@ class TimelineEventController(private val context: Context) : EpoxyController(
|
|||||||
.addTo(this)
|
.addTo(this)
|
||||||
}
|
}
|
||||||
if (addDaySeparator) {
|
if (addDaySeparator) {
|
||||||
val formattedDay = date.toLocalDate().format(DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM))
|
val formattedDay = timelineDateFormatter.formatMessageDay(date)
|
||||||
TimelineDaySeparatorItem(formattedDay).id(formattedDay).addTo(this)
|
TimelineDaySeparatorItem(formattedDay).id(formattedDay).addTo(this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,11 +23,14 @@ class Matrix(matrixOptions: MatrixOptions) : KoinComponent {
|
|||||||
|
|
||||||
init {
|
init {
|
||||||
Monarchy.init(matrixOptions.context)
|
Monarchy.init(matrixOptions.context)
|
||||||
|
|
||||||
val matrixModule = MatrixModule(matrixOptions)
|
val matrixModule = MatrixModule(matrixOptions)
|
||||||
val networkModule = NetworkModule()
|
val networkModule = NetworkModule()
|
||||||
val authModule = AuthModule()
|
val authModule = AuthModule()
|
||||||
loadKoinModules(listOf(matrixModule, networkModule, authModule))
|
loadKoinModules(listOf(matrixModule, networkModule, authModule))
|
||||||
|
|
||||||
ProcessLifecycleOwner.get().lifecycle.addObserver(backgroundDetectionObserver)
|
ProcessLifecycleOwner.get().lifecycle.addObserver(backgroundDetectionObserver)
|
||||||
|
|
||||||
val lastActiveSession = authenticator.getLastActiveSession()
|
val lastActiveSession = authenticator.getLastActiveSession()
|
||||||
if (lastActiveSession != null) {
|
if (lastActiveSession != null) {
|
||||||
currentSession = lastActiveSession
|
currentSession = lastActiveSession
|
||||||
|
@ -19,11 +19,16 @@ class SessionModule(private val sessionParams: SessionParams) : Module {
|
|||||||
override fun invoke(): ModuleDefinition = module(override = true) {
|
override fun invoke(): ModuleDefinition = module(override = true) {
|
||||||
|
|
||||||
scope(DefaultSession.SCOPE) {
|
scope(DefaultSession.SCOPE) {
|
||||||
RealmConfiguration.Builder().name(sessionParams.credentials.userId).deleteRealmIfMigrationNeeded().build()
|
RealmConfiguration.Builder()
|
||||||
|
.name(sessionParams.credentials.userId)
|
||||||
|
.deleteRealmIfMigrationNeeded()
|
||||||
|
.build()
|
||||||
}
|
}
|
||||||
|
|
||||||
scope(DefaultSession.SCOPE) {
|
scope(DefaultSession.SCOPE) {
|
||||||
Monarchy.Builder().setRealmConfiguration(get()).build()
|
Monarchy.Builder()
|
||||||
|
.setRealmConfiguration(get())
|
||||||
|
.build()
|
||||||
}
|
}
|
||||||
|
|
||||||
scope(DefaultSession.SCOPE) {
|
scope(DefaultSession.SCOPE) {
|
||||||
|
Loading…
Reference in New Issue
Block a user