mirror of
https://github.com/vector-im/riotX-android
synced 2025-10-06 08:12:46 +02:00
Explode into several files
This commit is contained in:
@@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2021 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package im.vector.app.features.spaces
|
||||||
|
|
||||||
|
import im.vector.app.core.platform.VectorViewModelAction
|
||||||
|
import org.matrix.android.sdk.api.session.room.model.RoomSummary
|
||||||
|
|
||||||
|
sealed class SpaceListAction : VectorViewModelAction {
|
||||||
|
data class SelectSpace(val spaceSummary: RoomSummary) : SpaceListAction()
|
||||||
|
data class LeaveSpace(val spaceSummary: RoomSummary) : SpaceListAction()
|
||||||
|
data class ToggleExpand(val spaceSummary: RoomSummary) : SpaceListAction()
|
||||||
|
object AddSpace : SpaceListAction()
|
||||||
|
}
|
@@ -0,0 +1,28 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2021 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package im.vector.app.features.spaces
|
||||||
|
|
||||||
|
import im.vector.app.core.platform.VectorViewEvents
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Transient events for group list screen
|
||||||
|
*/
|
||||||
|
sealed class SpaceListViewEvents : VectorViewEvents {
|
||||||
|
object OpenSpace : SpaceListViewEvents()
|
||||||
|
data class OpenSpaceSummary(val id: String) : SpaceListViewEvents()
|
||||||
|
object AddSpace : SpaceListViewEvents()
|
||||||
|
}
|
@@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2021 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package im.vector.app.features.spaces
|
||||||
|
|
||||||
|
import com.airbnb.mvrx.Async
|
||||||
|
import com.airbnb.mvrx.MvRxState
|
||||||
|
import com.airbnb.mvrx.Uninitialized
|
||||||
|
import org.matrix.android.sdk.api.session.room.model.RoomSummary
|
||||||
|
|
||||||
|
data class SpaceListViewState(
|
||||||
|
val asyncSpaces: Async<List<RoomSummary>> = Uninitialized,
|
||||||
|
val selectedSpace: RoomSummary? = null,
|
||||||
|
val rootSpaces: List<RoomSummary>? = null,
|
||||||
|
val expandedStates: Map<String, Boolean> = emptyMap()
|
||||||
|
) : MvRxState
|
@@ -18,19 +18,14 @@ package im.vector.app.features.spaces
|
|||||||
|
|
||||||
import androidx.lifecycle.viewModelScope
|
import androidx.lifecycle.viewModelScope
|
||||||
import arrow.core.Option
|
import arrow.core.Option
|
||||||
import com.airbnb.mvrx.Async
|
|
||||||
import com.airbnb.mvrx.FragmentViewModelContext
|
import com.airbnb.mvrx.FragmentViewModelContext
|
||||||
import com.airbnb.mvrx.MvRxState
|
|
||||||
import com.airbnb.mvrx.MvRxViewModelFactory
|
import com.airbnb.mvrx.MvRxViewModelFactory
|
||||||
import com.airbnb.mvrx.Uninitialized
|
|
||||||
import com.airbnb.mvrx.ViewModelContext
|
import com.airbnb.mvrx.ViewModelContext
|
||||||
import dagger.assisted.Assisted
|
import dagger.assisted.Assisted
|
||||||
import dagger.assisted.AssistedFactory
|
import dagger.assisted.AssistedFactory
|
||||||
import dagger.assisted.AssistedInject
|
import dagger.assisted.AssistedInject
|
||||||
import im.vector.app.R
|
import im.vector.app.R
|
||||||
import im.vector.app.core.platform.VectorViewEvents
|
|
||||||
import im.vector.app.core.platform.VectorViewModel
|
import im.vector.app.core.platform.VectorViewModel
|
||||||
import im.vector.app.core.platform.VectorViewModelAction
|
|
||||||
import im.vector.app.core.resources.StringProvider
|
import im.vector.app.core.resources.StringProvider
|
||||||
import im.vector.app.features.grouplist.SelectedSpaceDataSource
|
import im.vector.app.features.grouplist.SelectedSpaceDataSource
|
||||||
import im.vector.app.features.ui.UiStateRepository
|
import im.vector.app.features.ui.UiStateRepository
|
||||||
@@ -48,29 +43,6 @@ import org.matrix.android.sdk.rx.rx
|
|||||||
|
|
||||||
const val ALL_COMMUNITIES_GROUP_ID = "+ALL_COMMUNITIES_GROUP_ID"
|
const val ALL_COMMUNITIES_GROUP_ID = "+ALL_COMMUNITIES_GROUP_ID"
|
||||||
|
|
||||||
sealed class SpaceListAction : VectorViewModelAction {
|
|
||||||
data class SelectSpace(val spaceSummary: RoomSummary) : SpaceListAction()
|
|
||||||
data class LeaveSpace(val spaceSummary: RoomSummary) : SpaceListAction()
|
|
||||||
data class ToggleExpand(val spaceSummary: RoomSummary) : SpaceListAction()
|
|
||||||
object AddSpace : SpaceListAction()
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Transient events for group list screen
|
|
||||||
*/
|
|
||||||
sealed class SpaceListViewEvents : VectorViewEvents {
|
|
||||||
object OpenSpace : SpaceListViewEvents()
|
|
||||||
data class OpenSpaceSummary(val id: String) : SpaceListViewEvents()
|
|
||||||
object AddSpace : SpaceListViewEvents()
|
|
||||||
}
|
|
||||||
|
|
||||||
data class SpaceListViewState(
|
|
||||||
val asyncSpaces: Async<List<RoomSummary>> = Uninitialized,
|
|
||||||
val selectedSpace: RoomSummary? = null,
|
|
||||||
val rootSpaces: List<RoomSummary>? = null,
|
|
||||||
val expandedStates: Map<String, Boolean> = emptyMap()
|
|
||||||
) : MvRxState
|
|
||||||
|
|
||||||
class SpacesListViewModel @AssistedInject constructor(@Assisted initialState: SpaceListViewState,
|
class SpacesListViewModel @AssistedInject constructor(@Assisted initialState: SpaceListViewState,
|
||||||
private val selectedSpaceDataSource: SelectedSpaceDataSource,
|
private val selectedSpaceDataSource: SelectedSpaceDataSource,
|
||||||
private val session: Session,
|
private val session: Session,
|
||||||
|
@@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2021 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package im.vector.app.features.spaces.create
|
||||||
|
|
||||||
|
import android.net.Uri
|
||||||
|
import im.vector.app.core.platform.VectorViewModelAction
|
||||||
|
|
||||||
|
sealed class CreateSpaceAction : VectorViewModelAction {
|
||||||
|
data class SetRoomType(val type: SpaceType) : CreateSpaceAction()
|
||||||
|
data class NameChanged(val name: String) : CreateSpaceAction()
|
||||||
|
data class TopicChanged(val topic: String) : CreateSpaceAction()
|
||||||
|
data class SetAvatar(val uri: Uri?) : CreateSpaceAction()
|
||||||
|
object OnBackPressed : CreateSpaceAction()
|
||||||
|
object NextFromDetails : CreateSpaceAction()
|
||||||
|
object NextFromDefaultRooms : CreateSpaceAction()
|
||||||
|
data class DefaultRoomNameChanged(val index: Int, val name: String) : CreateSpaceAction()
|
||||||
|
}
|
@@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2021 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package im.vector.app.features.spaces.create
|
||||||
|
|
||||||
|
import im.vector.app.core.platform.VectorViewEvents
|
||||||
|
|
||||||
|
sealed class CreateSpaceEvents : VectorViewEvents {
|
||||||
|
object NavigateToDetails : CreateSpaceEvents()
|
||||||
|
object NavigateToChooseType : CreateSpaceEvents()
|
||||||
|
object NavigateToAddRooms : CreateSpaceEvents()
|
||||||
|
object Dismiss : CreateSpaceEvents()
|
||||||
|
data class FinishSuccess(val spaceId: String, val defaultRoomId: String?) : CreateSpaceEvents()
|
||||||
|
data class ShowModalError(val errorMessage: String) : CreateSpaceEvents()
|
||||||
|
object HideModalLoading : CreateSpaceEvents()
|
||||||
|
}
|
@@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2021 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package im.vector.app.features.spaces.create
|
||||||
|
|
||||||
|
import android.net.Uri
|
||||||
|
import com.airbnb.mvrx.Async
|
||||||
|
import com.airbnb.mvrx.MvRxState
|
||||||
|
import com.airbnb.mvrx.Uninitialized
|
||||||
|
|
||||||
|
data class CreateSpaceState(
|
||||||
|
val name: String? = null,
|
||||||
|
val avatarUri: Uri? = null,
|
||||||
|
val topic: String = "",
|
||||||
|
val step: Step = Step.ChooseType,
|
||||||
|
val spaceType: SpaceType? = null,
|
||||||
|
val nameInlineError: String? = null,
|
||||||
|
val defaultRooms: Map<Int, String?>? = null,
|
||||||
|
val creationResult: Async<String> = Uninitialized
|
||||||
|
) : MvRxState {
|
||||||
|
|
||||||
|
enum class Step {
|
||||||
|
ChooseType,
|
||||||
|
SetDetails,
|
||||||
|
AddRooms
|
||||||
|
}
|
||||||
|
}
|
@@ -16,17 +16,13 @@
|
|||||||
|
|
||||||
package im.vector.app.features.spaces.create
|
package im.vector.app.features.spaces.create
|
||||||
|
|
||||||
import android.net.Uri
|
|
||||||
import androidx.lifecycle.viewModelScope
|
import androidx.lifecycle.viewModelScope
|
||||||
import com.airbnb.mvrx.ActivityViewModelContext
|
import com.airbnb.mvrx.ActivityViewModelContext
|
||||||
import com.airbnb.mvrx.Async
|
|
||||||
import com.airbnb.mvrx.Fail
|
import com.airbnb.mvrx.Fail
|
||||||
import com.airbnb.mvrx.FragmentViewModelContext
|
import com.airbnb.mvrx.FragmentViewModelContext
|
||||||
import com.airbnb.mvrx.Loading
|
import com.airbnb.mvrx.Loading
|
||||||
import com.airbnb.mvrx.MvRxState
|
|
||||||
import com.airbnb.mvrx.MvRxViewModelFactory
|
import com.airbnb.mvrx.MvRxViewModelFactory
|
||||||
import com.airbnb.mvrx.Success
|
import com.airbnb.mvrx.Success
|
||||||
import com.airbnb.mvrx.Uninitialized
|
|
||||||
import com.airbnb.mvrx.ViewModelContext
|
import com.airbnb.mvrx.ViewModelContext
|
||||||
import dagger.assisted.Assisted
|
import dagger.assisted.Assisted
|
||||||
import dagger.assisted.AssistedFactory
|
import dagger.assisted.AssistedFactory
|
||||||
@@ -34,61 +30,13 @@ import dagger.assisted.AssistedInject
|
|||||||
import im.vector.app.R
|
import im.vector.app.R
|
||||||
import im.vector.app.core.error.ErrorFormatter
|
import im.vector.app.core.error.ErrorFormatter
|
||||||
import im.vector.app.core.extensions.exhaustive
|
import im.vector.app.core.extensions.exhaustive
|
||||||
import im.vector.app.core.platform.VectorViewEvents
|
|
||||||
import im.vector.app.core.platform.VectorViewModel
|
import im.vector.app.core.platform.VectorViewModel
|
||||||
import im.vector.app.core.platform.VectorViewModelAction
|
|
||||||
import im.vector.app.core.resources.StringProvider
|
import im.vector.app.core.resources.StringProvider
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import org.matrix.android.sdk.api.session.Session
|
|
||||||
|
|
||||||
data class CreateSpaceState(
|
|
||||||
val name: String? = null,
|
|
||||||
val avatarUri: Uri? = null,
|
|
||||||
val topic: String = "",
|
|
||||||
val step: Step = Step.ChooseType,
|
|
||||||
val spaceType: SpaceType? = null,
|
|
||||||
val nameInlineError: String? = null,
|
|
||||||
val defaultRooms: Map<Int, String?>? = null,
|
|
||||||
val creationResult: Async<String> = Uninitialized
|
|
||||||
) : MvRxState {
|
|
||||||
|
|
||||||
enum class Step {
|
|
||||||
ChooseType,
|
|
||||||
SetDetails,
|
|
||||||
AddRooms
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
enum class SpaceType {
|
|
||||||
Public,
|
|
||||||
Private
|
|
||||||
}
|
|
||||||
|
|
||||||
sealed class CreateSpaceAction : VectorViewModelAction {
|
|
||||||
data class SetRoomType(val type: SpaceType) : CreateSpaceAction()
|
|
||||||
data class NameChanged(val name: String) : CreateSpaceAction()
|
|
||||||
data class TopicChanged(val topic: String) : CreateSpaceAction()
|
|
||||||
data class SetAvatar(val uri: Uri?) : CreateSpaceAction()
|
|
||||||
object OnBackPressed : CreateSpaceAction()
|
|
||||||
object NextFromDetails : CreateSpaceAction()
|
|
||||||
object NextFromDefaultRooms : CreateSpaceAction()
|
|
||||||
data class DefaultRoomNameChanged(val index: Int, val name: String) : CreateSpaceAction()
|
|
||||||
}
|
|
||||||
|
|
||||||
sealed class CreateSpaceEvents : VectorViewEvents {
|
|
||||||
object NavigateToDetails : CreateSpaceEvents()
|
|
||||||
object NavigateToChooseType : CreateSpaceEvents()
|
|
||||||
object NavigateToAddRooms : CreateSpaceEvents()
|
|
||||||
object Dismiss : CreateSpaceEvents()
|
|
||||||
data class FinishSuccess(val spaceId: String, val defaultRoomId: String?) : CreateSpaceEvents()
|
|
||||||
data class ShowModalError(val errorMessage: String) : CreateSpaceEvents()
|
|
||||||
object HideModalLoading : CreateSpaceEvents()
|
|
||||||
}
|
|
||||||
|
|
||||||
class CreateSpaceViewModel @AssistedInject constructor(
|
class CreateSpaceViewModel @AssistedInject constructor(
|
||||||
@Assisted initialState: CreateSpaceState,
|
@Assisted initialState: CreateSpaceState,
|
||||||
private val session: Session,
|
|
||||||
private val stringProvider: StringProvider,
|
private val stringProvider: StringProvider,
|
||||||
private val createSpaceViewModelTask: CreateSpaceViewModelTask,
|
private val createSpaceViewModelTask: CreateSpaceViewModelTask,
|
||||||
private val errorFormatter: ErrorFormatter
|
private val errorFormatter: ErrorFormatter
|
||||||
|
@@ -0,0 +1,22 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2021 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package im.vector.app.features.spaces.create
|
||||||
|
|
||||||
|
enum class SpaceType {
|
||||||
|
Public,
|
||||||
|
Private
|
||||||
|
}
|
@@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2021 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package im.vector.app.features.spaces.explore
|
||||||
|
|
||||||
|
import com.airbnb.mvrx.Async
|
||||||
|
import com.airbnb.mvrx.MvRxState
|
||||||
|
import com.airbnb.mvrx.Uninitialized
|
||||||
|
import org.matrix.android.sdk.api.session.room.members.ChangeMembershipState
|
||||||
|
import org.matrix.android.sdk.api.session.room.model.RoomSummary
|
||||||
|
import org.matrix.android.sdk.api.session.room.model.SpaceChildInfo
|
||||||
|
|
||||||
|
data class SpaceDirectoryState(
|
||||||
|
// The current filter
|
||||||
|
val spaceId: String,
|
||||||
|
val currentFilter: String = "",
|
||||||
|
val spaceSummary: Async<RoomSummary> = Uninitialized,
|
||||||
|
val spaceSummaryApiResult: Async<List<SpaceChildInfo>> = Uninitialized,
|
||||||
|
val childList: List<SpaceChildInfo> = emptyList(),
|
||||||
|
val hierarchyStack: List<String> = emptyList(),
|
||||||
|
// True if more result are available server side
|
||||||
|
val hasMore: Boolean = false,
|
||||||
|
// Set of joined roomId / spaces,
|
||||||
|
val joinedRoomsIds: Set<String> = emptySet(),
|
||||||
|
// keys are room alias or roomId
|
||||||
|
val changeMembershipStates: Map<String, ChangeMembershipState> = emptyMap()
|
||||||
|
) : MvRxState {
|
||||||
|
constructor(args: SpaceDirectoryArgs) : this(
|
||||||
|
spaceId = args.spaceId
|
||||||
|
)
|
||||||
|
}
|
@@ -0,0 +1,26 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2021 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package im.vector.app.features.spaces.explore
|
||||||
|
|
||||||
|
import im.vector.app.core.platform.VectorViewModelAction
|
||||||
|
import org.matrix.android.sdk.api.session.room.model.SpaceChildInfo
|
||||||
|
|
||||||
|
sealed class SpaceDirectoryViewAction : VectorViewModelAction {
|
||||||
|
data class ExploreSubSpace(val spaceChildInfo: SpaceChildInfo) : SpaceDirectoryViewAction()
|
||||||
|
data class JoinOrOpen(val spaceChildInfo: SpaceChildInfo) : SpaceDirectoryViewAction()
|
||||||
|
object HandleBack : SpaceDirectoryViewAction()
|
||||||
|
}
|
@@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2021 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package im.vector.app.features.spaces.explore
|
||||||
|
|
||||||
|
import im.vector.app.core.platform.VectorViewEvents
|
||||||
|
|
||||||
|
sealed class SpaceDirectoryViewEvents : VectorViewEvents {
|
||||||
|
object Dismiss : SpaceDirectoryViewEvents()
|
||||||
|
data class NavigateToRoom(val roomId: String) : SpaceDirectoryViewEvents()
|
||||||
|
}
|
@@ -18,27 +18,20 @@ package im.vector.app.features.spaces.explore
|
|||||||
|
|
||||||
import androidx.lifecycle.viewModelScope
|
import androidx.lifecycle.viewModelScope
|
||||||
import com.airbnb.mvrx.ActivityViewModelContext
|
import com.airbnb.mvrx.ActivityViewModelContext
|
||||||
import com.airbnb.mvrx.Async
|
|
||||||
import com.airbnb.mvrx.Fail
|
import com.airbnb.mvrx.Fail
|
||||||
import com.airbnb.mvrx.FragmentViewModelContext
|
import com.airbnb.mvrx.FragmentViewModelContext
|
||||||
import com.airbnb.mvrx.Loading
|
import com.airbnb.mvrx.Loading
|
||||||
import com.airbnb.mvrx.MvRxState
|
|
||||||
import com.airbnb.mvrx.MvRxViewModelFactory
|
import com.airbnb.mvrx.MvRxViewModelFactory
|
||||||
import com.airbnb.mvrx.Success
|
import com.airbnb.mvrx.Success
|
||||||
import com.airbnb.mvrx.Uninitialized
|
|
||||||
import com.airbnb.mvrx.ViewModelContext
|
import com.airbnb.mvrx.ViewModelContext
|
||||||
import dagger.assisted.Assisted
|
import dagger.assisted.Assisted
|
||||||
import dagger.assisted.AssistedFactory
|
import dagger.assisted.AssistedFactory
|
||||||
import dagger.assisted.AssistedInject
|
import dagger.assisted.AssistedInject
|
||||||
import im.vector.app.core.platform.VectorViewEvents
|
|
||||||
import im.vector.app.core.platform.VectorViewModel
|
import im.vector.app.core.platform.VectorViewModel
|
||||||
import im.vector.app.core.platform.VectorViewModelAction
|
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import org.matrix.android.sdk.api.session.Session
|
import org.matrix.android.sdk.api.session.Session
|
||||||
import org.matrix.android.sdk.api.session.room.members.ChangeMembershipState
|
|
||||||
import org.matrix.android.sdk.api.session.room.model.Membership
|
import org.matrix.android.sdk.api.session.room.model.Membership
|
||||||
import org.matrix.android.sdk.api.session.room.model.RoomSummary
|
|
||||||
import org.matrix.android.sdk.api.session.room.model.RoomType
|
import org.matrix.android.sdk.api.session.room.model.RoomType
|
||||||
import org.matrix.android.sdk.api.session.room.model.SpaceChildInfo
|
import org.matrix.android.sdk.api.session.room.model.SpaceChildInfo
|
||||||
import org.matrix.android.sdk.api.session.room.roomSummaryQueryParams
|
import org.matrix.android.sdk.api.session.room.roomSummaryQueryParams
|
||||||
@@ -46,37 +39,6 @@ import org.matrix.android.sdk.internal.util.awaitCallback
|
|||||||
import org.matrix.android.sdk.rx.rx
|
import org.matrix.android.sdk.rx.rx
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
|
|
||||||
data class SpaceDirectoryState(
|
|
||||||
// The current filter
|
|
||||||
val spaceId: String,
|
|
||||||
val currentFilter: String = "",
|
|
||||||
val spaceSummary: Async<RoomSummary> = Uninitialized,
|
|
||||||
val spaceSummaryApiResult: Async<List<SpaceChildInfo>> = Uninitialized,
|
|
||||||
val childList: List<SpaceChildInfo> = emptyList(),
|
|
||||||
val hierarchyStack: List<String> = emptyList(),
|
|
||||||
// True if more result are available server side
|
|
||||||
val hasMore: Boolean = false,
|
|
||||||
// Set of joined roomId / spaces,
|
|
||||||
val joinedRoomsIds: Set<String> = emptySet(),
|
|
||||||
// keys are room alias or roomId
|
|
||||||
val changeMembershipStates: Map<String, ChangeMembershipState> = emptyMap()
|
|
||||||
) : MvRxState {
|
|
||||||
constructor(args: SpaceDirectoryArgs) : this(
|
|
||||||
spaceId = args.spaceId
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
sealed class SpaceDirectoryViewAction : VectorViewModelAction {
|
|
||||||
data class ExploreSubSpace(val spaceChildInfo: SpaceChildInfo) : SpaceDirectoryViewAction()
|
|
||||||
data class JoinOrOpen(val spaceChildInfo: SpaceChildInfo) : SpaceDirectoryViewAction()
|
|
||||||
object HandleBack : SpaceDirectoryViewAction()
|
|
||||||
}
|
|
||||||
|
|
||||||
sealed class SpaceDirectoryViewEvents : VectorViewEvents {
|
|
||||||
object Dismiss : SpaceDirectoryViewEvents()
|
|
||||||
data class NavigateToRoom(val roomId: String) : SpaceDirectoryViewEvents()
|
|
||||||
}
|
|
||||||
|
|
||||||
class SpaceDirectoryViewModel @AssistedInject constructor(
|
class SpaceDirectoryViewModel @AssistedInject constructor(
|
||||||
@Assisted initialState: SpaceDirectoryState,
|
@Assisted initialState: SpaceDirectoryState,
|
||||||
private val session: Session
|
private val session: Session
|
||||||
|
Reference in New Issue
Block a user