Clean some of the session code API

This commit is contained in:
ganfra 2018-12-28 12:56:52 +01:00 committed by ganfra
parent b696e4a6de
commit 5a75e3db81
6 changed files with 48 additions and 74 deletions

View file

@ -1,7 +1,9 @@
package im.vector.riotredesign.core.di package im.vector.riotredesign.core.di
import android.content.Context import android.content.Context
import android.content.Context.MODE_PRIVATE
import im.vector.riotredesign.core.resources.LocaleProvider import im.vector.riotredesign.core.resources.LocaleProvider
import im.vector.riotredesign.features.home.room.list.RoomSelectionRepository
import org.koin.dsl.module.module import org.koin.dsl.module.module
class AppModule(private val context: Context) { class AppModule(private val context: Context) {
@ -12,5 +14,13 @@ class AppModule(private val context: Context) {
LocaleProvider(context.resources) LocaleProvider(context.resources)
} }
single {
context.getSharedPreferences("im.vector.riot", MODE_PRIVATE)
}
single {
RoomSelectionRepository(get())
}
} }
} }

View file

@ -7,15 +7,20 @@ import im.vector.matrix.android.api.Matrix
import im.vector.matrix.android.api.permalinks.PermalinkData import im.vector.matrix.android.api.permalinks.PermalinkData
import im.vector.matrix.android.api.session.Session import im.vector.matrix.android.api.session.Session
import im.vector.matrix.rx.rx import im.vector.matrix.rx.rx
import im.vector.riotredesign.features.home.room.list.RoomSelectionRepository
import org.koin.android.ext.android.get
class HomeViewModel(initialState: HomeViewState, private val session: Session) : BaseMvRxViewModel<HomeViewState>(initialState) { class HomeViewModel(initialState: HomeViewState,
private val session: Session,
private val roomSelectionRepository: RoomSelectionRepository) : BaseMvRxViewModel<HomeViewState>(initialState) {
companion object : MvRxViewModelFactory<HomeViewState> { companion object : MvRxViewModelFactory<HomeViewState> {
@JvmStatic @JvmStatic
override fun create(activity: FragmentActivity, state: HomeViewState): HomeViewModel { override fun create(activity: FragmentActivity, state: HomeViewState): HomeViewModel {
val currentSession = Matrix.getInstance().currentSession val currentSession = Matrix.getInstance().currentSession
return HomeViewModel(state, currentSession) val roomSelectionRepository = activity.get<RoomSelectionRepository>()
return HomeViewModel(state, currentSession, roomSelectionRepository)
} }
} }
@ -60,7 +65,7 @@ class HomeViewModel(initialState: HomeViewState, private val session: Session) :
private fun handleSelectRoom(action: HomeActions.SelectRoom) { private fun handleSelectRoom(action: HomeActions.SelectRoom) {
withState { state -> withState { state ->
if (state.selectedRoomId != action.roomSummary.roomId) { if (state.selectedRoomId != action.roomSummary.roomId) {
session.saveLastSelectedRoom(action.roomSummary) roomSelectionRepository.saveLastSelectedRoom(action.roomSummary.roomId)
setState { copy(selectedRoomId = action.roomSummary.roomId, shouldOpenRoomDetail = true) } setState { copy(selectedRoomId = action.roomSummary.roomId, shouldOpenRoomDetail = true) }
} }
} }
@ -85,7 +90,7 @@ class HomeViewModel(initialState: HomeViewState, private val session: Session) :
val groupRooms = summaries?.filter { !it.isDirect } ?: emptyList() val groupRooms = summaries?.filter { !it.isDirect } ?: emptyList()
val selectedRoomId = selectedRoomId val selectedRoomId = selectedRoomId
?: session.lastSelectedRoom()?.roomId ?: roomSelectionRepository.lastSelectedRoom()
?: directRooms.firstOrNull()?.roomId ?: directRooms.firstOrNull()?.roomId
?: groupRooms.firstOrNull()?.roomId ?: groupRooms.firstOrNull()?.roomId

View file

@ -0,0 +1,20 @@
package im.vector.riotredesign.features.home.room.list
import android.content.SharedPreferences
private const val SHARED_PREFS_SELECTED_ROOM_KEY = "SHARED_PREFS_SELECTED_ROOM_KEY"
class RoomSelectionRepository(private val sharedPreferences: SharedPreferences) {
fun lastSelectedRoom(): String? {
return sharedPreferences.getString(SHARED_PREFS_SELECTED_ROOM_KEY, null)
}
fun saveLastSelectedRoom(roomId: String) {
sharedPreferences.edit()
.putString(SHARED_PREFS_SELECTED_ROOM_KEY, roomId)
.apply()
}
}

View file

@ -7,15 +7,6 @@ interface RoomService {
fun getRoom(roomId: String): Room? fun getRoom(roomId: String): Room?
fun getAllRooms(): List<Room>
fun liveRooms(): LiveData<List<Room>>
fun liveRoomSummaries(): LiveData<List<RoomSummary>> fun liveRoomSummaries(): LiveData<List<RoomSummary>>
fun lastSelectedRoom(): RoomSummary?
fun saveLastSelectedRoom(roomSummary: RoomSummary)
} }

View file

@ -69,31 +69,12 @@ internal class DefaultSession(override val sessionParams: SessionParams) : Sessi
return roomService.getRoom(roomId) return roomService.getRoom(roomId)
} }
override fun getAllRooms(): List<Room> {
assert(isOpen)
return roomService.getAllRooms()
}
override fun liveRooms(): LiveData<List<Room>> {
assert(isOpen)
return roomService.liveRooms()
}
override fun liveRoomSummaries(): LiveData<List<RoomSummary>> { override fun liveRoomSummaries(): LiveData<List<RoomSummary>> {
assert(isOpen) assert(isOpen)
return roomService.liveRoomSummaries() return roomService.liveRoomSummaries()
} }
override fun lastSelectedRoom(): RoomSummary? {
assert(isOpen)
return roomService.lastSelectedRoom()
}
override fun saveLastSelectedRoom(roomSummary: RoomSummary) {
assert(isOpen)
roomService.saveLastSelectedRoom(roomSummary)
}
// GROUP SERVICE // GROUP SERVICE
override fun getGroup(groupId: String): Group? { override fun getGroup(groupId: String): Group? {

View file

@ -9,19 +9,10 @@ import im.vector.matrix.android.internal.database.mapper.asDomain
import im.vector.matrix.android.internal.database.model.RoomEntity import im.vector.matrix.android.internal.database.model.RoomEntity
import im.vector.matrix.android.internal.database.model.RoomSummaryEntity import im.vector.matrix.android.internal.database.model.RoomSummaryEntity
import im.vector.matrix.android.internal.database.model.RoomSummaryEntityFields import im.vector.matrix.android.internal.database.model.RoomSummaryEntityFields
import im.vector.matrix.android.internal.database.query.lastSelected
import im.vector.matrix.android.internal.database.query.where import im.vector.matrix.android.internal.database.query.where
internal class DefaultRoomService(private val monarchy: Monarchy) : RoomService { internal class DefaultRoomService(private val monarchy: Monarchy) : RoomService {
override fun getAllRooms(): List<Room> {
var rooms: List<Room> = emptyList()
monarchy.doWithRealm { realm ->
rooms = RoomEntity.where(realm).findAll().map { it.asDomain() }
}
return rooms
}
override fun getRoom(roomId: String): Room? { override fun getRoom(roomId: String): Room? {
var room: Room? = null var room: Room? = null
monarchy.doWithRealm { realm -> monarchy.doWithRealm { realm ->
@ -30,34 +21,10 @@ internal class DefaultRoomService(private val monarchy: Monarchy) : RoomService
return room return room
} }
override fun liveRooms(): LiveData<List<Room>> {
return monarchy.findAllMappedWithChanges(
{ realm -> RoomEntity.where(realm) },
{ it.asDomain() }
)
}
override fun liveRoomSummaries(): LiveData<List<RoomSummary>> { override fun liveRoomSummaries(): LiveData<List<RoomSummary>> {
return monarchy.findAllMappedWithChanges( return monarchy.findAllMappedWithChanges(
{ realm -> RoomSummaryEntity.where(realm).isNotEmpty(RoomSummaryEntityFields.DISPLAY_NAME) }, { realm -> RoomSummaryEntity.where(realm).isNotEmpty(RoomSummaryEntityFields.DISPLAY_NAME) },
{ it.asDomain() } { it.asDomain() }
) )
} }
override fun lastSelectedRoom(): RoomSummary? {
var lastSelected: RoomSummary? = null
monarchy.doWithRealm { realm ->
lastSelected = RoomSummaryEntity.lastSelected(realm)?.asDomain()
}
return lastSelected
}
override fun saveLastSelectedRoom(roomSummary: RoomSummary) {
monarchy.writeAsync { realm ->
val lastSelected = RoomSummaryEntity.lastSelected(realm)
val roomSummaryEntity = RoomSummaryEntity.where(realm, roomSummary.roomId).findFirst()
lastSelected?.isLatestSelected = false
roomSummaryEntity?.isLatestSelected = true
}
}
} }