Merge pull request #4471 from vector-im/dependabot/gradle/org.jetbrains.kotlin-kotlin-gradle-plugin-1.6.0
Bump kotlin-gradle-plugin from 1.5.31 to 1.6.0 - BLOCKED
This commit is contained in:
commit
c6fe084507
@ -9,13 +9,13 @@ ext.versions = [
|
||||
|
||||
def gradle = "7.0.4"
|
||||
// Ref: https://kotlinlang.org/releases.html
|
||||
def kotlin = "1.5.31"
|
||||
def kotlinCoroutines = "1.5.2"
|
||||
def kotlin = "1.6.0"
|
||||
def kotlinCoroutines = "1.6.0"
|
||||
def dagger = "2.40.5"
|
||||
def retrofit = "2.9.0"
|
||||
def arrow = "0.8.2"
|
||||
def markwon = "4.6.2"
|
||||
def moshi = "1.12.0"
|
||||
def moshi = "1.13.0"
|
||||
def lifecycle = "2.4.0"
|
||||
def flowBinding = "1.2.0"
|
||||
def epoxy = "4.6.2"
|
||||
|
@ -20,13 +20,12 @@ import android.content.Context
|
||||
import android.view.View
|
||||
import com.airbnb.epoxy.TypedEpoxyController
|
||||
import com.airbnb.mvrx.Fail
|
||||
import com.airbnb.mvrx.Success
|
||||
import im.vector.lib.core.utils.epoxy.charsequence.toEpoxyCharSequence
|
||||
import me.gujun.android.span.Span
|
||||
import me.gujun.android.span.span
|
||||
|
||||
internal class JSonViewerEpoxyController(private val context: Context) :
|
||||
TypedEpoxyController<JSonViewerState>() {
|
||||
TypedEpoxyController<JSonViewerState>() {
|
||||
|
||||
private var styleProvider: JSonViewerStyleProvider = JSonViewerStyleProvider.default(context)
|
||||
|
||||
@ -44,10 +43,8 @@ internal class JSonViewerEpoxyController(private val context: Context) :
|
||||
text(async.error.localizedMessage?.toEpoxyCharSequence())
|
||||
}
|
||||
}
|
||||
is Success -> {
|
||||
val model = data.root.invoke()
|
||||
|
||||
model?.let {
|
||||
else -> {
|
||||
async.invoke()?.let {
|
||||
buildRec(it, 0, "")
|
||||
}
|
||||
}
|
||||
@ -55,9 +52,9 @@ internal class JSonViewerEpoxyController(private val context: Context) :
|
||||
}
|
||||
|
||||
private fun buildRec(
|
||||
model: JSonViewerModel,
|
||||
depth: Int,
|
||||
idBase: String
|
||||
model: JSonViewerModel,
|
||||
depth: Int,
|
||||
idBase: String
|
||||
) {
|
||||
val host = this
|
||||
val id = "$idBase/${model.key ?: model.index}_${model.isExpanded}}"
|
||||
@ -74,34 +71,34 @@ internal class JSonViewerEpoxyController(private val context: Context) :
|
||||
id(id + "_sum")
|
||||
depth(depth)
|
||||
text(
|
||||
span {
|
||||
if (model.key != null) {
|
||||
span("\"${model.key}\"") {
|
||||
textColor = host.styleProvider.keyColor
|
||||
}
|
||||
span(" : ") {
|
||||
textColor = host.styleProvider.baseColor
|
||||
}
|
||||
}
|
||||
if (model.index != null) {
|
||||
span("${model.index}") {
|
||||
textColor = host.styleProvider.secondaryColor
|
||||
}
|
||||
span(" : ") {
|
||||
textColor = host.styleProvider.baseColor
|
||||
}
|
||||
}
|
||||
span {
|
||||
+"{+${model.keys.size}}"
|
||||
textColor = host.styleProvider.baseColor
|
||||
}
|
||||
}.toEpoxyCharSequence()
|
||||
if (model.key != null) {
|
||||
span("\"${model.key}\"") {
|
||||
textColor = host.styleProvider.keyColor
|
||||
}
|
||||
span(" : ") {
|
||||
textColor = host.styleProvider.baseColor
|
||||
}
|
||||
}
|
||||
if (model.index != null) {
|
||||
span("${model.index}") {
|
||||
textColor = host.styleProvider.secondaryColor
|
||||
}
|
||||
span(" : ") {
|
||||
textColor = host.styleProvider.baseColor
|
||||
}
|
||||
}
|
||||
span {
|
||||
+"{+${model.keys.size}}"
|
||||
textColor = host.styleProvider.baseColor
|
||||
}
|
||||
}.toEpoxyCharSequence()
|
||||
)
|
||||
itemClickListener(View.OnClickListener { host.itemClicked(model) })
|
||||
}
|
||||
}
|
||||
}
|
||||
is JSonViewerArray -> {
|
||||
is JSonViewerArray -> {
|
||||
if (model.isExpanded) {
|
||||
open(id, model.key, model.index, depth, false, model)
|
||||
model.items.forEach {
|
||||
@ -113,6 +110,38 @@ internal class JSonViewerEpoxyController(private val context: Context) :
|
||||
id(id + "_sum")
|
||||
depth(depth)
|
||||
text(
|
||||
span {
|
||||
if (model.key != null) {
|
||||
span("\"${model.key}\"") {
|
||||
textColor = host.styleProvider.keyColor
|
||||
}
|
||||
span(" : ") {
|
||||
textColor = host.styleProvider.baseColor
|
||||
}
|
||||
}
|
||||
if (model.index != null) {
|
||||
span("${model.index}") {
|
||||
textColor = host.styleProvider.secondaryColor
|
||||
}
|
||||
span(" : ") {
|
||||
textColor = host.styleProvider.baseColor
|
||||
}
|
||||
}
|
||||
span {
|
||||
+"[+${model.items.size}]"
|
||||
textColor = host.styleProvider.baseColor
|
||||
}
|
||||
}.toEpoxyCharSequence()
|
||||
)
|
||||
itemClickListener(View.OnClickListener { host.itemClicked(model) })
|
||||
}
|
||||
}
|
||||
}
|
||||
is JSonViewerLeaf -> {
|
||||
valueItem {
|
||||
id(id)
|
||||
depth(depth)
|
||||
text(
|
||||
span {
|
||||
if (model.key != null) {
|
||||
span("\"${model.key}\"") {
|
||||
@ -122,6 +151,7 @@ internal class JSonViewerEpoxyController(private val context: Context) :
|
||||
textColor = host.styleProvider.baseColor
|
||||
}
|
||||
}
|
||||
|
||||
if (model.index != null) {
|
||||
span("${model.index}") {
|
||||
textColor = host.styleProvider.secondaryColor
|
||||
@ -130,41 +160,8 @@ internal class JSonViewerEpoxyController(private val context: Context) :
|
||||
textColor = host.styleProvider.baseColor
|
||||
}
|
||||
}
|
||||
span {
|
||||
+"[+${model.items.size}]"
|
||||
textColor = host.styleProvider.baseColor
|
||||
}
|
||||
append(host.valueToSpan(model))
|
||||
}.toEpoxyCharSequence()
|
||||
)
|
||||
itemClickListener(View.OnClickListener { host.itemClicked(model) })
|
||||
}
|
||||
}
|
||||
}
|
||||
is JSonViewerLeaf -> {
|
||||
valueItem {
|
||||
id(id)
|
||||
depth(depth)
|
||||
text(
|
||||
span {
|
||||
if (model.key != null) {
|
||||
span("\"${model.key}\"") {
|
||||
textColor = host.styleProvider.keyColor
|
||||
}
|
||||
span(" : ") {
|
||||
textColor = host.styleProvider.baseColor
|
||||
}
|
||||
}
|
||||
|
||||
if (model.index != null) {
|
||||
span("${model.index}") {
|
||||
textColor = host.styleProvider.secondaryColor
|
||||
}
|
||||
span(" : ") {
|
||||
textColor = host.styleProvider.baseColor
|
||||
}
|
||||
}
|
||||
append(host.valueToSpan(model))
|
||||
}.toEpoxyCharSequence()
|
||||
)
|
||||
copyValue(model.stringRes)
|
||||
}
|
||||
@ -175,12 +172,12 @@ internal class JSonViewerEpoxyController(private val context: Context) :
|
||||
private fun valueToSpan(leaf: JSonViewerLeaf): Span {
|
||||
val host = this
|
||||
return when (leaf.type) {
|
||||
JSONType.STRING -> {
|
||||
JSONType.STRING -> {
|
||||
span("\"${leaf.stringRes}\"") {
|
||||
textColor = host.styleProvider.stringColor
|
||||
}
|
||||
}
|
||||
JSONType.NUMBER -> {
|
||||
JSONType.NUMBER -> {
|
||||
span(leaf.stringRes) {
|
||||
textColor = host.styleProvider.numberColor
|
||||
}
|
||||
@ -190,7 +187,7 @@ internal class JSonViewerEpoxyController(private val context: Context) :
|
||||
textColor = host.styleProvider.booleanColor
|
||||
}
|
||||
}
|
||||
JSONType.NULL -> {
|
||||
JSONType.NULL -> {
|
||||
span("null") {
|
||||
textColor = host.styleProvider.booleanColor
|
||||
}
|
||||
@ -199,42 +196,42 @@ internal class JSonViewerEpoxyController(private val context: Context) :
|
||||
}
|
||||
|
||||
private fun open(
|
||||
id: String,
|
||||
key: String?,
|
||||
index: Int?,
|
||||
depth: Int,
|
||||
isObject: Boolean = true,
|
||||
composed: JSonViewerModel
|
||||
id: String,
|
||||
key: String?,
|
||||
index: Int?,
|
||||
depth: Int,
|
||||
isObject: Boolean = true,
|
||||
composed: JSonViewerModel
|
||||
) {
|
||||
val host = this
|
||||
valueItem {
|
||||
id("${id}_Open")
|
||||
depth(depth)
|
||||
text(
|
||||
span {
|
||||
if (key != null) {
|
||||
span("\"$key\"") {
|
||||
textColor = host.styleProvider.keyColor
|
||||
span {
|
||||
if (key != null) {
|
||||
span("\"$key\"") {
|
||||
textColor = host.styleProvider.keyColor
|
||||
}
|
||||
span(" : ") {
|
||||
textColor = host.styleProvider.baseColor
|
||||
}
|
||||
}
|
||||
span(" : ") {
|
||||
textColor = host.styleProvider.baseColor
|
||||
if (index != null) {
|
||||
span("$index") {
|
||||
textColor = host.styleProvider.secondaryColor
|
||||
}
|
||||
span(" : ") {
|
||||
textColor = host.styleProvider.baseColor
|
||||
}
|
||||
}
|
||||
}
|
||||
if (index != null) {
|
||||
span("$index") {
|
||||
span("- ") {
|
||||
textColor = host.styleProvider.secondaryColor
|
||||
}
|
||||
span(" : ") {
|
||||
span("{".takeIf { isObject } ?: "[") {
|
||||
textColor = host.styleProvider.baseColor
|
||||
}
|
||||
}
|
||||
span("- ") {
|
||||
textColor = host.styleProvider.secondaryColor
|
||||
}
|
||||
span("{".takeIf { isObject } ?: "[") {
|
||||
textColor = host.styleProvider.baseColor
|
||||
}
|
||||
}.toEpoxyCharSequence()
|
||||
}.toEpoxyCharSequence()
|
||||
)
|
||||
itemClickListener(View.OnClickListener { host.itemClicked(composed) })
|
||||
}
|
||||
@ -251,10 +248,10 @@ internal class JSonViewerEpoxyController(private val context: Context) :
|
||||
id("${id}_Close")
|
||||
depth(depth)
|
||||
text(
|
||||
span {
|
||||
text = "}".takeIf { isObject } ?: "]"
|
||||
textColor = host.styleProvider.baseColor
|
||||
}.toEpoxyCharSequence()
|
||||
span {
|
||||
text = "}".takeIf { isObject } ?: "]"
|
||||
textColor = host.styleProvider.baseColor
|
||||
}.toEpoxyCharSequence()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -29,7 +29,6 @@ import org.matrix.android.sdk.internal.crypto.crosssigning.fromBase64Safe
|
||||
import org.matrix.android.sdk.internal.crypto.store.IMXCryptoStore
|
||||
import org.matrix.android.sdk.internal.crypto.verification.DefaultVerificationTransaction
|
||||
import org.matrix.android.sdk.internal.crypto.verification.ValidVerificationInfoStart
|
||||
import org.matrix.android.sdk.internal.util.exhaustive
|
||||
import timber.log.Timber
|
||||
|
||||
internal class DefaultQrCodeVerificationTransaction(
|
||||
@ -129,7 +128,7 @@ internal class DefaultQrCodeVerificationTransaction(
|
||||
// Nothing special here, we will send a reciprocate start event, and then the other session will trust it's view of the MSK
|
||||
}
|
||||
}
|
||||
}.exhaustive
|
||||
}
|
||||
|
||||
val toVerifyDeviceIds = mutableListOf<String>()
|
||||
|
||||
@ -174,7 +173,7 @@ internal class DefaultQrCodeVerificationTransaction(
|
||||
Unit
|
||||
}
|
||||
}
|
||||
}.exhaustive
|
||||
}
|
||||
|
||||
if (!canTrustOtherUserMasterKey && toVerifyDeviceIds.isEmpty()) {
|
||||
// Nothing to verify
|
||||
@ -272,6 +271,7 @@ internal class DefaultQrCodeVerificationTransaction(
|
||||
// I now know that i can trust my MSK
|
||||
trust(true, emptyList(), true)
|
||||
}
|
||||
null -> Unit
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -314,6 +314,7 @@ internal class RoomSummaryDataSource @Inject constructor(
|
||||
RoomCategoryFilter.ONLY_ROOMS -> query.equalTo(RoomSummaryEntityFields.IS_DIRECT, false)
|
||||
RoomCategoryFilter.ONLY_WITH_NOTIFICATIONS -> query.greaterThan(RoomSummaryEntityFields.NOTIFICATION_COUNT, 0)
|
||||
RoomCategoryFilter.ALL -> Unit // nop
|
||||
null -> Unit
|
||||
}
|
||||
|
||||
// Timber.w("VAL: activeSpaceId : ${queryParams.activeSpaceId}")
|
||||
|
@ -1,20 +0,0 @@
|
||||
/*
|
||||
* Copyright 2020 The Matrix.org Foundation C.I.C.
|
||||
*
|
||||
* 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 org.matrix.android.sdk.internal.util
|
||||
|
||||
// Trick to ensure that when block is exhaustive
|
||||
internal val <T> T.exhaustive: T get() = this
|
@ -16,7 +16,8 @@
|
||||
|
||||
package org.matrix.android.sdk.internal.session.pushers
|
||||
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||
import kotlinx.coroutines.test.runTest
|
||||
import org.amshove.kluent.internal.assertFailsWith
|
||||
import org.amshove.kluent.shouldBeEqualTo
|
||||
import org.junit.Test
|
||||
@ -39,6 +40,7 @@ private val A_JSON_PUSHER = JsonPusher(
|
||||
data = JsonPusherData(brand = "Element")
|
||||
)
|
||||
|
||||
@ExperimentalCoroutinesApi
|
||||
class DefaultAddPusherTaskTest {
|
||||
|
||||
private val pushersAPI = FakePushersAPI()
|
||||
@ -55,7 +57,7 @@ class DefaultAddPusherTaskTest {
|
||||
fun `given no persisted pusher when adding Pusher then updates api and inserts result with Registered state`() {
|
||||
monarchy.givenWhereReturns<PusherEntity>(result = null)
|
||||
|
||||
runBlocking { addPusherTask.execute(AddPusherTask.Params(A_JSON_PUSHER)) }
|
||||
runTest { addPusherTask.execute(AddPusherTask.Params(A_JSON_PUSHER)) }
|
||||
|
||||
pushersAPI.verifySetPusher(A_JSON_PUSHER)
|
||||
monarchy.verifyInsertOrUpdate<PusherEntity> {
|
||||
@ -70,7 +72,7 @@ class DefaultAddPusherTaskTest {
|
||||
val realmResult = PusherEntity(appDisplayName = null)
|
||||
monarchy.givenWhereReturns(result = realmResult)
|
||||
|
||||
runBlocking { addPusherTask.execute(AddPusherTask.Params(A_JSON_PUSHER)) }
|
||||
runTest { addPusherTask.execute(AddPusherTask.Params(A_JSON_PUSHER)) }
|
||||
|
||||
pushersAPI.verifySetPusher(A_JSON_PUSHER)
|
||||
|
||||
@ -85,7 +87,7 @@ class DefaultAddPusherTaskTest {
|
||||
pushersAPI.givenSetPusherErrors(SocketException())
|
||||
|
||||
assertFailsWith<SocketException> {
|
||||
runBlocking { addPusherTask.execute(AddPusherTask.Params(A_JSON_PUSHER)) }
|
||||
runTest { addPusherTask.execute(AddPusherTask.Params(A_JSON_PUSHER)) }
|
||||
}
|
||||
|
||||
realmResult.state shouldBeEqualTo PusherState.FAILED_TO_REGISTER
|
||||
@ -97,7 +99,7 @@ class DefaultAddPusherTaskTest {
|
||||
pushersAPI.givenSetPusherErrors(SocketException())
|
||||
|
||||
assertFailsWith<SocketException> {
|
||||
runBlocking { addPusherTask.execute(AddPusherTask.Params(A_JSON_PUSHER)) }
|
||||
runTest { addPusherTask.execute(AddPusherTask.Params(A_JSON_PUSHER)) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -17,7 +17,7 @@
|
||||
package org.matrix.android.sdk.internal.session.space
|
||||
|
||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||
import kotlinx.coroutines.test.runBlockingTest
|
||||
import kotlinx.coroutines.test.runTest
|
||||
import okhttp3.ResponseBody.Companion.toResponseBody
|
||||
import org.amshove.kluent.shouldBeEqualTo
|
||||
import org.junit.Test
|
||||
@ -35,7 +35,7 @@ internal class DefaultResolveSpaceInfoTaskTest {
|
||||
private val resolveSpaceInfoTask = DefaultResolveSpaceInfoTask(spaceApi.instance, globalErrorReceiver)
|
||||
|
||||
@Test
|
||||
fun `given stable endpoint works, when execute, then return stable api data`() = runBlockingTest {
|
||||
fun `given stable endpoint works, when execute, then return stable api data`() = runTest {
|
||||
spaceApi.givenStableEndpointReturns(response)
|
||||
|
||||
val result = resolveSpaceInfoTask.execute(spaceApi.params)
|
||||
@ -44,7 +44,7 @@ internal class DefaultResolveSpaceInfoTaskTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `given stable endpoint fails, when execute, then fallback to unstable endpoint`() = runBlockingTest {
|
||||
fun `given stable endpoint fails, when execute, then fallback to unstable endpoint`() = runTest {
|
||||
spaceApi.givenStableEndpointThrows(httpException)
|
||||
spaceApi.givenUnstableEndpointReturns(response)
|
||||
|
||||
|
@ -21,7 +21,7 @@ import kotlinx.coroutines.asCoroutineDispatcher
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.joinAll
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import kotlinx.coroutines.test.runTest
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Test
|
||||
import org.matrix.android.sdk.MatrixTest
|
||||
@ -51,7 +51,7 @@ class CoroutineSequencersTest : MatrixTest {
|
||||
.also { results.add(it) }
|
||||
}
|
||||
)
|
||||
runBlocking {
|
||||
runTest {
|
||||
jobs.joinAll()
|
||||
}
|
||||
assertEquals(3, results.size)
|
||||
@ -81,7 +81,7 @@ class CoroutineSequencersTest : MatrixTest {
|
||||
.also { results.add(it) }
|
||||
}
|
||||
)
|
||||
runBlocking {
|
||||
runTest {
|
||||
jobs.joinAll()
|
||||
}
|
||||
assertEquals(3, results.size)
|
||||
@ -109,7 +109,7 @@ class CoroutineSequencersTest : MatrixTest {
|
||||
)
|
||||
// We are canceling the second job
|
||||
jobs[1].cancel()
|
||||
runBlocking {
|
||||
runTest {
|
||||
jobs.joinAll()
|
||||
}
|
||||
assertEquals(2, results.size)
|
||||
|
@ -7,7 +7,6 @@ import com.airbnb.mvrx.ViewModelContext
|
||||
import dagger.assisted.Assisted
|
||||
import dagger.assisted.AssistedInject
|
||||
import dagger.assisted.AssistedFactory
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.platform.VectorViewModel
|
||||
|
||||
<#if createViewEvents>
|
||||
@ -42,6 +41,6 @@ class ${viewModelClass} @AssistedInject constructor(@Assisted initialState: ${vi
|
||||
override fun handle(action: ${actionClass}) {
|
||||
when (action) {
|
||||
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -22,7 +22,6 @@ import dagger.assisted.AssistedFactory
|
||||
import dagger.assisted.AssistedInject
|
||||
import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
||||
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.platform.EmptyViewEvents
|
||||
import im.vector.app.core.platform.VectorViewModel
|
||||
import im.vector.app.features.analytics.store.AnalyticsStore
|
||||
@ -53,7 +52,7 @@ class DebugAnalyticsViewModel @AssistedInject constructor(
|
||||
override fun handle(action: DebugAnalyticsViewActions) {
|
||||
when (action) {
|
||||
DebugAnalyticsViewActions.ResetAnalyticsOptInDisplayed -> handleResetAnalyticsOptInDisplayed()
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleResetAnalyticsOptInDisplayed() {
|
||||
|
@ -22,7 +22,6 @@ import dagger.assisted.AssistedFactory
|
||||
import dagger.assisted.AssistedInject
|
||||
import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
||||
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.platform.EmptyViewEvents
|
||||
import im.vector.app.core.platform.VectorViewModel
|
||||
import im.vector.app.features.debug.features.DebugVectorOverrides
|
||||
@ -71,7 +70,7 @@ class DebugPrivateSettingsViewModel @AssistedInject constructor(
|
||||
is DebugPrivateSettingsViewActions.SetForceLoginFallbackEnabled -> handleSetForceLoginFallbackEnabled(action)
|
||||
is SetDisplayNameCapabilityOverride -> handSetDisplayNameCapabilityOverride(action)
|
||||
is SetAvatarCapabilityOverride -> handSetAvatarCapabilityOverride(action)
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleSetDialPadVisibility(action: DebugPrivateSettingsViewActions.SetDialPadVisibility) {
|
||||
|
@ -1,20 +0,0 @@
|
||||
/*
|
||||
* Copyright 2020 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.core.extensions
|
||||
|
||||
// Trick to ensure that when block is exhaustive
|
||||
val <T> T.exhaustive: T get() = this
|
@ -54,7 +54,6 @@ import im.vector.app.core.di.ActiveSessionHolder
|
||||
import im.vector.app.core.di.ActivityEntryPoint
|
||||
import im.vector.app.core.dialogs.DialogLocker
|
||||
import im.vector.app.core.dialogs.UnrecognizedCertificateDialog
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.extensions.observeEvent
|
||||
import im.vector.app.core.extensions.observeNotNull
|
||||
import im.vector.app.core.extensions.registerStartForActivityResult
|
||||
@ -267,7 +266,7 @@ abstract class VectorBaseActivity<VB : ViewBinding> : AppCompatActivity(), Maver
|
||||
is GlobalError.CertificateError ->
|
||||
handleCertificateError(globalError)
|
||||
GlobalError.ExpiredAccount -> Unit // TODO Handle account expiration
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleCertificateError(certificateError: GlobalError.CertificateError) {
|
||||
|
@ -83,6 +83,7 @@ class PushRulePreference : VectorPreference {
|
||||
NotificationIndex.NOISY -> {
|
||||
radioGroup?.check(R.id.bingPreferenceRadioBingRuleNoisy)
|
||||
}
|
||||
null -> Unit
|
||||
}
|
||||
|
||||
radioGroup?.setOnCheckedChangeListener { _, checkedId ->
|
||||
|
@ -77,13 +77,10 @@ class KeysBackupBanner @JvmOverloads constructor(
|
||||
|
||||
override fun onClick(v: View?) {
|
||||
when (state) {
|
||||
is State.Setup -> {
|
||||
delegate?.setupKeysBackup()
|
||||
}
|
||||
is State.Setup -> delegate?.setupKeysBackup()
|
||||
is State.Update,
|
||||
is State.Recover -> {
|
||||
delegate?.recoverKeysBackup()
|
||||
}
|
||||
is State.Recover -> delegate?.recoverKeysBackup()
|
||||
else -> Unit
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -27,7 +27,6 @@ import androidx.core.text.italic
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.epoxy.onClick
|
||||
import im.vector.app.core.error.ResourceLimitErrorFormatter
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.utils.DimensionConverter
|
||||
import im.vector.app.databinding.ViewNotificationAreaBinding
|
||||
import im.vector.app.features.themes.ThemeUtils
|
||||
@ -77,7 +76,7 @@ class NotificationAreaView @JvmOverloads constructor(
|
||||
is State.UnsupportedAlgorithm -> renderUnsupportedAlgorithm(newState)
|
||||
is State.Tombstone -> renderTombstone()
|
||||
is State.ResourceLimitExceededError -> renderResourceLimitExceededError(newState)
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
// PRIVATE METHODS ****************************************************************************************************************************************
|
||||
|
@ -49,6 +49,7 @@ class PresenceStateImageView @JvmOverloads constructor(
|
||||
setImageResource(R.drawable.ic_presence_offline)
|
||||
contentDescription = context.getString(R.string.a11y_presence_offline)
|
||||
}
|
||||
null -> Unit
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -40,21 +40,21 @@ class ShieldImageView @JvmOverloads constructor(
|
||||
isVisible = roomEncryptionTrustLevel != null
|
||||
|
||||
when (roomEncryptionTrustLevel) {
|
||||
RoomEncryptionTrustLevel.Default -> {
|
||||
RoomEncryptionTrustLevel.Default -> {
|
||||
contentDescription = context.getString(R.string.a11y_trust_level_default)
|
||||
setImageResource(
|
||||
if (borderLess) R.drawable.ic_shield_black_no_border
|
||||
else R.drawable.ic_shield_black
|
||||
)
|
||||
}
|
||||
RoomEncryptionTrustLevel.Warning -> {
|
||||
RoomEncryptionTrustLevel.Warning -> {
|
||||
contentDescription = context.getString(R.string.a11y_trust_level_warning)
|
||||
setImageResource(
|
||||
if (borderLess) R.drawable.ic_shield_warning_no_border
|
||||
else R.drawable.ic_shield_warning
|
||||
)
|
||||
}
|
||||
RoomEncryptionTrustLevel.Trusted -> {
|
||||
RoomEncryptionTrustLevel.Trusted -> {
|
||||
contentDescription = context.getString(R.string.a11y_trust_level_trusted)
|
||||
setImageResource(
|
||||
if (borderLess) R.drawable.ic_shield_trusted_no_border
|
||||
@ -65,6 +65,7 @@ class ShieldImageView @JvmOverloads constructor(
|
||||
contentDescription = context.getString(R.string.a11y_trust_level_trusted)
|
||||
setImageResource(R.drawable.ic_warning_badge)
|
||||
}
|
||||
null -> Unit
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -72,9 +73,9 @@ class ShieldImageView @JvmOverloads constructor(
|
||||
@DrawableRes
|
||||
fun RoomEncryptionTrustLevel.toDrawableRes(): Int {
|
||||
return when (this) {
|
||||
RoomEncryptionTrustLevel.Default -> R.drawable.ic_shield_black
|
||||
RoomEncryptionTrustLevel.Warning -> R.drawable.ic_shield_warning
|
||||
RoomEncryptionTrustLevel.Trusted -> R.drawable.ic_shield_trusted
|
||||
RoomEncryptionTrustLevel.Default -> R.drawable.ic_shield_black
|
||||
RoomEncryptionTrustLevel.Warning -> R.drawable.ic_shield_warning
|
||||
RoomEncryptionTrustLevel.Trusted -> R.drawable.ic_shield_trusted
|
||||
RoomEncryptionTrustLevel.E2EWithUnsupportedAlgorithm -> R.drawable.ic_warning_badge
|
||||
}
|
||||
}
|
||||
|
@ -22,7 +22,6 @@ import dagger.assisted.AssistedFactory
|
||||
import dagger.assisted.AssistedInject
|
||||
import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
||||
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.platform.VectorViewModel
|
||||
import im.vector.app.features.analytics.VectorAnalytics
|
||||
import kotlinx.coroutines.launch
|
||||
@ -55,7 +54,7 @@ class AnalyticsConsentViewModel @AssistedInject constructor(
|
||||
override fun handle(action: AnalyticsConsentViewActions) {
|
||||
when (action) {
|
||||
is AnalyticsConsentViewActions.SetUserConsent -> handleSetUserConsent(action)
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleSetUserConsent(action: AnalyticsConsentViewActions.SetUserConsent) {
|
||||
|
@ -19,7 +19,6 @@ package im.vector.app.features.analytics.ui.consent
|
||||
import com.airbnb.mvrx.viewModel
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import im.vector.app.core.extensions.addFragment
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.platform.ScreenOrientationLocker
|
||||
import im.vector.app.core.platform.VectorBaseActivity
|
||||
import im.vector.app.databinding.ActivitySimpleBinding
|
||||
@ -48,7 +47,7 @@ class AnalyticsOptInActivity : VectorBaseActivity<ActivitySimpleBinding>() {
|
||||
viewModel.observeViewEvents {
|
||||
when (it) {
|
||||
AnalyticsOptInViewEvents.OnDataSaved -> finish()
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -17,7 +17,6 @@
|
||||
|
||||
package im.vector.app.features.attachments.preview
|
||||
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.platform.VectorViewModel
|
||||
|
||||
class AttachmentsPreviewViewModel(initialState: AttachmentsPreviewViewState) :
|
||||
@ -28,7 +27,7 @@ class AttachmentsPreviewViewModel(initialState: AttachmentsPreviewViewState) :
|
||||
is AttachmentsPreviewAction.SetCurrentAttachment -> handleSetCurrentAttachment(action)
|
||||
is AttachmentsPreviewAction.UpdatePathOfCurrentAttachment -> handleUpdatePathOfCurrentAttachment(action)
|
||||
AttachmentsPreviewAction.RemoveCurrentAttachment -> handleRemoveCurrentAttachment()
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleRemoveCurrentAttachment() = withState {
|
||||
|
@ -111,6 +111,7 @@ class CallControlsView @JvmOverloads constructor(
|
||||
views.ringingControls.isVisible = false
|
||||
views.connectedControls.isVisible = false
|
||||
}
|
||||
null -> Unit
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -525,8 +525,7 @@ class VectorCallActivity : VectorBaseActivity<ActivityCallBinding>(), CallContro
|
||||
navigator.openCallTransfer(this, callTransferActivityResultLauncher, callId)
|
||||
}
|
||||
is VectorCallViewEvents.FailToTransfer -> showSnackbar(getString(R.string.call_transfer_failure))
|
||||
null -> {
|
||||
}
|
||||
else -> Unit
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -26,7 +26,6 @@ import dagger.assisted.AssistedFactory
|
||||
import dagger.assisted.AssistedInject
|
||||
import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
||||
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.platform.VectorViewModel
|
||||
import im.vector.app.features.call.audio.CallAudioManager
|
||||
import im.vector.app.features.call.dialpad.DialPadLookup
|
||||
@ -343,7 +342,7 @@ class VectorCallViewModel @AssistedInject constructor(
|
||||
setState { VectorCallViewState(action.callArgs) }
|
||||
setupCallWithCurrentState()
|
||||
}
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleCallTransfer() {
|
||||
@ -358,7 +357,7 @@ class VectorCallViewModel @AssistedInject constructor(
|
||||
when (result) {
|
||||
is CallTransferResult.ConnectWithUserId -> connectWithUserId(result)
|
||||
is CallTransferResult.ConnectWithPhoneNumber -> connectWithPhoneNumber(result)
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun connectWithUserId(result: CallTransferResult.ConnectWithUserId) {
|
||||
|
@ -27,7 +27,6 @@ import dagger.assisted.AssistedFactory
|
||||
import dagger.assisted.AssistedInject
|
||||
import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
||||
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.platform.VectorViewModel
|
||||
import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.delay
|
||||
@ -103,7 +102,7 @@ class JitsiCallViewModel @AssistedInject constructor(
|
||||
when (action) {
|
||||
is JitsiCallViewActions.SwitchTo -> handleSwitchTo(action)
|
||||
JitsiCallViewActions.OnConferenceLeft -> handleOnConferenceLeft()
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleSwitchTo(action: JitsiCallViewActions.SwitchTo) = withState { state ->
|
||||
|
@ -35,7 +35,6 @@ import com.facebook.react.modules.core.PermissionListener
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.platform.VectorBaseActivity
|
||||
import im.vector.app.databinding.ActivityJitsiBinding
|
||||
import kotlinx.parcelize.Parcelize
|
||||
@ -79,7 +78,7 @@ class VectorJitsiActivity : VectorBaseActivity<ActivityJitsiBinding>(), JitsiMee
|
||||
JitsiCallViewEvents.FailJoiningConference -> handleFailJoining()
|
||||
JitsiCallViewEvents.Finish -> finish()
|
||||
JitsiCallViewEvents.LeaveConference -> handleLeaveConference()
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
lifecycle.addObserver(ConferenceEventObserver(this, this::onBroadcastEvent))
|
||||
}
|
||||
|
@ -26,7 +26,6 @@ import com.google.android.material.tabs.TabLayoutMediator
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.error.ErrorFormatter
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.platform.VectorBaseActivity
|
||||
import im.vector.app.databinding.ActivityCallTransferBinding
|
||||
import kotlinx.parcelize.Parcelize
|
||||
@ -57,7 +56,7 @@ class CallTransferActivity : VectorBaseActivity<ActivityCallTransferBinding>() {
|
||||
callTransferViewModel.observeViewEvents {
|
||||
when (it) {
|
||||
is CallTransferViewEvents.Complete -> handleComplete()
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
sectionsPagerAdapter = CallTransferPagerAdapter(this)
|
||||
|
@ -26,7 +26,6 @@ import com.airbnb.mvrx.activityViewModel
|
||||
import com.airbnb.mvrx.withState
|
||||
import im.vector.app.core.extensions.cleanup
|
||||
import im.vector.app.core.extensions.configureWith
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.extensions.hideKeyboard
|
||||
import im.vector.app.core.platform.VectorBaseFragment
|
||||
import im.vector.app.core.utils.showIdentityServerConsentDialog
|
||||
@ -73,7 +72,7 @@ class ContactsBookFragment @Inject constructor(
|
||||
when (it) {
|
||||
is ContactsBookViewEvents.Failure -> showFailure(it.throwable)
|
||||
is ContactsBookViewEvents.OnPoliciesRetrieved -> showConsentDialog(it)
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -27,7 +27,6 @@ import im.vector.app.core.contacts.ContactsDataSource
|
||||
import im.vector.app.core.contacts.MappedContact
|
||||
import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
||||
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.platform.VectorViewModel
|
||||
import im.vector.app.core.resources.StringProvider
|
||||
import im.vector.app.features.discovery.fetchIdentityServerWithTerms
|
||||
@ -165,7 +164,7 @@ class ContactsBookViewModel @AssistedInject constructor(
|
||||
is ContactsBookAction.OnlyBoundContacts -> handleOnlyBoundContacts(action)
|
||||
ContactsBookAction.UserConsentGranted -> handleUserConsentGranted()
|
||||
ContactsBookAction.UserConsentRequest -> handleUserConsentRequest()
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleUserConsentRequest() {
|
||||
|
@ -28,6 +28,7 @@ import com.airbnb.mvrx.Async
|
||||
import com.airbnb.mvrx.Fail
|
||||
import com.airbnb.mvrx.Loading
|
||||
import com.airbnb.mvrx.Success
|
||||
import com.airbnb.mvrx.Uninitialized
|
||||
import com.airbnb.mvrx.viewModel
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
@ -35,7 +36,6 @@ import im.vector.app.R
|
||||
import im.vector.app.core.error.ErrorFormatter
|
||||
import im.vector.app.core.extensions.addFragment
|
||||
import im.vector.app.core.extensions.addFragmentToBackstack
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.platform.SimpleFragmentActivity
|
||||
import im.vector.app.core.platform.WaitingViewData
|
||||
import im.vector.app.core.utils.PERMISSIONS_FOR_MEMBERS_SEARCH
|
||||
@ -84,7 +84,7 @@ class CreateDirectRoomActivity : SimpleFragmentActivity() {
|
||||
is UserListSharedAction.OnMenuItemSelected -> onMenuItemSelected(action)
|
||||
UserListSharedAction.OpenPhoneBook -> openPhoneBook()
|
||||
UserListSharedAction.AddByQrCode -> openAddByQrCode()
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
.launchIn(lifecycleScope)
|
||||
if (isFirstCreation()) {
|
||||
@ -111,7 +111,7 @@ class CreateDirectRoomActivity : SimpleFragmentActivity() {
|
||||
Toast.makeText(this, R.string.cannot_dm_self, Toast.LENGTH_SHORT).show()
|
||||
finish()
|
||||
}
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
qrViewModel.observeViewEvents {
|
||||
@ -124,7 +124,7 @@ class CreateDirectRoomActivity : SimpleFragmentActivity() {
|
||||
finish()
|
||||
}
|
||||
else -> Unit
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -167,6 +167,7 @@ class CreateDirectRoomActivity : SimpleFragmentActivity() {
|
||||
|
||||
private fun renderCreateAndInviteState(state: Async<String>) {
|
||||
when (state) {
|
||||
Uninitialized,
|
||||
is Loading -> renderCreationLoading()
|
||||
is Success -> renderCreationSuccess(state())
|
||||
is Fail -> renderCreationFailure(state.error)
|
||||
|
@ -24,7 +24,6 @@ import dagger.assisted.AssistedFactory
|
||||
import dagger.assisted.AssistedInject
|
||||
import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
||||
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.mvrx.runCatchingToAsync
|
||||
import im.vector.app.core.platform.VectorViewModel
|
||||
import im.vector.app.features.raw.wellknown.getElementWellknown
|
||||
@ -56,7 +55,7 @@ class CreateDirectRoomViewModel @AssistedInject constructor(@Assisted
|
||||
when (action) {
|
||||
is CreateDirectRoomAction.CreateRoomAndInviteSelectedUsers -> onSubmitInvitees(action.selections)
|
||||
is CreateDirectRoomAction.QrScannedAction -> onCodeParsed(action)
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun onCodeParsed(action: CreateDirectRoomAction.QrScannedAction) {
|
||||
@ -108,7 +107,7 @@ class CreateDirectRoomViewModel @AssistedInject constructor(@Assisted
|
||||
when (it) {
|
||||
is PendingSelection.UserPendingSelection -> invitedUserIds.add(it.user.userId)
|
||||
is PendingSelection.ThreePidPendingSelection -> invite3pids.add(it.threePid)
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
setDirectMessage()
|
||||
enableEncryptionIfInvitedUsersSupportIt = adminE2EByDefault
|
||||
|
@ -140,6 +140,7 @@ class KeysBackupSettingsRecyclerViewController @Inject constructor(
|
||||
|
||||
isBackupAlreadySetup = true
|
||||
}
|
||||
null -> Unit
|
||||
}
|
||||
|
||||
if (isBackupAlreadySetup) {
|
||||
|
@ -116,12 +116,13 @@ class SharedSecureStorageActivity :
|
||||
is SharedSecureStorageViewEvent.FinishSuccess -> {
|
||||
val dataResult = Intent()
|
||||
dataResult.putExtra(EXTRA_DATA_RESULT, it.cypherResult)
|
||||
setResult(Activity.RESULT_OK, dataResult)
|
||||
setResult(RESULT_OK, dataResult)
|
||||
finish()
|
||||
}
|
||||
is SharedSecureStorageViewEvent.ShowResetBottomSheet -> {
|
||||
navigator.open4SSetup(this, SetupMode.HARD_RESET)
|
||||
}
|
||||
else -> Unit
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -29,7 +29,6 @@ import dagger.assisted.AssistedInject
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
||||
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.platform.VectorViewModel
|
||||
import im.vector.app.core.platform.WaitingViewData
|
||||
import im.vector.app.core.resources.StringProvider
|
||||
@ -142,7 +141,7 @@ class SharedSecureStorageViewModel @AssistedInject constructor(
|
||||
SharedSecureStorageAction.Back -> handleBack()
|
||||
SharedSecureStorageAction.ForgotResetAll -> handleResetAll()
|
||||
SharedSecureStorageAction.DoResetAll -> handleDoResetAll()
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleDoResetAll() {
|
||||
|
@ -77,6 +77,7 @@ class SharedSecuredStorageKeyFragment @Inject constructor() : VectorBaseFragment
|
||||
is SharedSecureStorageViewEvent.KeyInlineError -> {
|
||||
views.ssssKeyEnterTil.error = it.message
|
||||
}
|
||||
else -> Unit
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -86,6 +86,7 @@ class SharedSecuredStoragePassphraseFragment @Inject constructor(
|
||||
is SharedSecureStorageViewEvent.InlineError -> {
|
||||
views.ssssPassphraseEnterTil.error = it.message
|
||||
}
|
||||
else -> Unit
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -36,7 +36,6 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.extensions.commitTransaction
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.extensions.registerStartForActivityResult
|
||||
import im.vector.app.core.extensions.toMvRxBundle
|
||||
import im.vector.app.core.platform.VectorBaseBottomSheetDialogFragment
|
||||
@ -209,7 +208,7 @@ class BootstrapBottomSheet : VectorBaseBottomSheetDialogFragment<BottomSheetBoot
|
||||
views.bootstrapTitleText.text = getString(R.string.upgrade_security)
|
||||
showFragment(BootstrapMigrateBackupFragment::class)
|
||||
}
|
||||
}.exhaustive
|
||||
}
|
||||
super.invalidate()
|
||||
}
|
||||
|
||||
|
@ -29,7 +29,6 @@ import im.vector.app.R
|
||||
import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
||||
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
||||
import im.vector.app.core.error.ErrorFormatter
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.platform.VectorViewModel
|
||||
import im.vector.app.core.platform.WaitingViewData
|
||||
import im.vector.app.core.resources.StringProvider
|
||||
@ -259,7 +258,7 @@ class BootstrapSharedViewModel @AssistedInject constructor(
|
||||
copy(step = BootstrapStep.AccountReAuth(stringProvider.getString(R.string.authentication_error)))
|
||||
}
|
||||
}
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleStart(action: BootstrapActions.Start) = withState {
|
||||
@ -344,7 +343,7 @@ class BootstrapSharedViewModel @AssistedInject constructor(
|
||||
)
|
||||
}
|
||||
}
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -449,7 +448,7 @@ class BootstrapSharedViewModel @AssistedInject constructor(
|
||||
}
|
||||
}
|
||||
}
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -533,7 +532,7 @@ class BootstrapSharedViewModel @AssistedInject constructor(
|
||||
)
|
||||
}
|
||||
}
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun BackupToQuadSMigrationTask.Result.Failure.toHumanReadable(): String {
|
||||
|
@ -30,7 +30,6 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.extensions.commitTransaction
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.extensions.registerStartForActivityResult
|
||||
import im.vector.app.core.extensions.toMvRxBundle
|
||||
import im.vector.app.core.platform.VectorBaseActivity
|
||||
@ -118,7 +117,7 @@ class VerificationBottomSheet : VectorBaseBottomSheetDialogFragment<BottomSheetV
|
||||
activity.navigator.openSettings(activity, VectorSettingsActivity.EXTRA_DIRECT_ACCESS_SECURITY_PRIVACY)
|
||||
}
|
||||
}
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -252,6 +251,7 @@ class VerificationBottomSheet : VectorBaseBottomSheetDialogFragment<BottomSheetV
|
||||
VerificationConclusionFragment.Args(false, state.sasTransactionState.cancelCode.value, state.isMe)
|
||||
)
|
||||
}
|
||||
else -> Unit
|
||||
}
|
||||
|
||||
return@withState
|
||||
|
@ -28,7 +28,6 @@ import dagger.assisted.AssistedInject
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
||||
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.platform.VectorViewModel
|
||||
import im.vector.app.core.resources.StringProvider
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
@ -365,7 +364,7 @@ class VerificationBottomSheetViewModel @AssistedInject constructor(
|
||||
copy(verifyingFrom4S = false)
|
||||
}
|
||||
}
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleSecretBackFromSSSS(action: VerificationAction.GotResultFromSsss) {
|
||||
|
@ -139,6 +139,7 @@ class VerificationEmojiCodeViewModel @AssistedInject constructor(
|
||||
)
|
||||
}
|
||||
}
|
||||
else -> Unit
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -18,6 +18,7 @@ package im.vector.app.features.crypto.verification.request
|
||||
|
||||
import androidx.core.text.toSpannable
|
||||
import com.airbnb.epoxy.EpoxyController
|
||||
import com.airbnb.mvrx.Fail
|
||||
import com.airbnb.mvrx.Loading
|
||||
import com.airbnb.mvrx.Success
|
||||
import com.airbnb.mvrx.Uninitialized
|
||||
@ -153,6 +154,7 @@ class VerificationRequestController @Inject constructor(
|
||||
}
|
||||
}
|
||||
}
|
||||
is Fail -> Unit
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -34,7 +34,6 @@ import com.airbnb.mvrx.withState
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.extensions.replaceFragment
|
||||
import im.vector.app.core.platform.SimpleFragmentActivity
|
||||
import im.vector.app.core.resources.ColorProvider
|
||||
@ -79,7 +78,7 @@ class RoomDevToolActivity : SimpleFragmentActivity(), FragmentManager.OnBackStac
|
||||
Unit
|
||||
}
|
||||
is DevToolsViewEvents.ShowSnackMessage -> showSnackbar(it.message)
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
supportFragmentManager.addOnBackStackChangedListener(this)
|
||||
}
|
||||
|
@ -50,6 +50,7 @@ class DiscoverySettingsController @Inject constructor(
|
||||
|
||||
override fun buildModels(data: DiscoverySettingsState) {
|
||||
when (data.identityServer) {
|
||||
Uninitialized,
|
||||
is Loading -> {
|
||||
loadingItem {
|
||||
id("identityServerLoading")
|
||||
@ -209,18 +210,19 @@ class DiscoverySettingsController @Inject constructor(
|
||||
titleResId(R.string.settings_discovery_emails_title)
|
||||
}
|
||||
when (emails) {
|
||||
is Incomplete -> {
|
||||
Uninitialized,
|
||||
is Loading -> {
|
||||
loadingItem {
|
||||
id("emailsLoading")
|
||||
}
|
||||
}
|
||||
is Fail -> {
|
||||
is Fail -> {
|
||||
settingsInfoItem {
|
||||
id("emailsError")
|
||||
helperText(emails.error.message)
|
||||
}
|
||||
}
|
||||
is Success -> {
|
||||
is Success -> {
|
||||
if (emails().isEmpty()) {
|
||||
settingsInfoItem {
|
||||
id("emailsEmpty")
|
||||
@ -277,18 +279,19 @@ class DiscoverySettingsController @Inject constructor(
|
||||
}
|
||||
|
||||
when (msisdns) {
|
||||
is Incomplete -> {
|
||||
Uninitialized,
|
||||
is Loading -> {
|
||||
loadingItem {
|
||||
id("msisdnLoading")
|
||||
}
|
||||
}
|
||||
is Fail -> {
|
||||
is Fail -> {
|
||||
settingsInfoItem {
|
||||
id("msisdnListError")
|
||||
helperText(msisdns.error.message)
|
||||
}
|
||||
}
|
||||
is Success -> {
|
||||
is Success -> {
|
||||
if (msisdns().isEmpty()) {
|
||||
settingsInfoItem {
|
||||
id("no_msisdn")
|
||||
@ -353,6 +356,7 @@ class DiscoverySettingsController @Inject constructor(
|
||||
colorProvider(host.colorProvider)
|
||||
stringProvider(host.stringProvider)
|
||||
when (pidInfo.isShared) {
|
||||
Uninitialized,
|
||||
is Loading -> {
|
||||
buttonIndeterminate(true)
|
||||
}
|
||||
@ -384,6 +388,7 @@ class DiscoverySettingsController @Inject constructor(
|
||||
else -> iconMode(IconMode.NONE)
|
||||
}
|
||||
}
|
||||
null -> Unit
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -28,7 +28,6 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.extensions.cleanup
|
||||
import im.vector.app.core.extensions.configureWith
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.extensions.observeEvent
|
||||
import im.vector.app.core.extensions.registerStartForActivityResult
|
||||
import im.vector.app.core.platform.VectorBaseFragment
|
||||
@ -70,7 +69,7 @@ class DiscoverySettingsFragment @Inject constructor(
|
||||
when (it) {
|
||||
is DiscoverySharedViewModelAction.ChangeIdentityServer ->
|
||||
viewModel.handle(DiscoverySettingsAction.ChangeIdentityServer(it.newUrl))
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
viewModel.observeViewEvents {
|
||||
@ -78,7 +77,7 @@ class DiscoverySettingsFragment @Inject constructor(
|
||||
is DiscoverySettingsViewEvents.Failure -> {
|
||||
displayErrorDialog(it.throwable)
|
||||
}
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
if (discoveryArgs.expandIdentityPolicies) {
|
||||
viewModel.handle(DiscoverySettingsAction.SetPoliciesExpandState(expanded = true))
|
||||
|
@ -27,7 +27,6 @@ import dagger.assisted.AssistedInject
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
||||
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.platform.VectorViewModel
|
||||
import im.vector.app.core.resources.StringProvider
|
||||
import kotlinx.coroutines.flow.launchIn
|
||||
@ -113,7 +112,7 @@ class DiscoverySettingsViewModel @AssistedInject constructor(
|
||||
is DiscoverySettingsAction.FinalizeBind3pid -> finalizeBind3pid(action, true)
|
||||
is DiscoverySettingsAction.SubmitMsisdnToken -> submitMsisdnToken(action)
|
||||
is DiscoverySettingsAction.CancelBinding -> cancelBinding(action)
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleUpdateUserConsent(action: DiscoverySettingsAction.UpdateUserConsent) {
|
||||
@ -235,7 +234,7 @@ class DiscoverySettingsViewModel @AssistedInject constructor(
|
||||
when (action.threePid) {
|
||||
is ThreePid.Email -> revokeEmail(action.threePid)
|
||||
is ThreePid.Msisdn -> revokeMsisdn(action.threePid)
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun revokeEmail(threePid: ThreePid.Email) = withState { state ->
|
||||
|
@ -34,7 +34,6 @@ import im.vector.app.core.epoxy.attributes.ButtonStyle
|
||||
import im.vector.app.core.epoxy.attributes.ButtonType
|
||||
import im.vector.app.core.epoxy.attributes.IconMode
|
||||
import im.vector.app.core.epoxy.onClick
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.extensions.setTextOrHide
|
||||
import im.vector.app.core.resources.ColorProvider
|
||||
import im.vector.app.core.resources.StringProvider
|
||||
@ -122,7 +121,7 @@ abstract class SettingsTextButtonSingleLineItem : EpoxyModelWithHolder<SettingsT
|
||||
ButtonStyle.DESTRUCTIVE -> {
|
||||
holder.mainButton.setTextColor(colorProvider.getColorFromAttribute(R.attr.colorError))
|
||||
}
|
||||
}.exhaustive
|
||||
}
|
||||
holder.mainButton.onClick(buttonClickListener)
|
||||
}
|
||||
ButtonType.SWITCH -> {
|
||||
@ -133,7 +132,7 @@ abstract class SettingsTextButtonSingleLineItem : EpoxyModelWithHolder<SettingsT
|
||||
checked?.let { holder.switchButton.isChecked = it }
|
||||
holder.switchButton.setOnCheckedChangeListener(switchChangeListener)
|
||||
}
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
when (iconMode) {
|
||||
|
@ -29,7 +29,6 @@ import com.airbnb.mvrx.fragmentViewModel
|
||||
import com.airbnb.mvrx.withState
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.extensions.registerStartForActivityResult
|
||||
import im.vector.app.core.extensions.toReducedUrl
|
||||
import im.vector.app.core.platform.VectorBaseFragment
|
||||
@ -132,7 +131,7 @@ class SetIdentityServerFragment @Inject constructor(
|
||||
it.identityServerUrl,
|
||||
null)
|
||||
}
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -25,7 +25,6 @@ import im.vector.app.R
|
||||
import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
||||
import im.vector.app.core.di.SingletonEntryPoint
|
||||
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.platform.VectorViewModel
|
||||
import im.vector.app.core.resources.StringProvider
|
||||
import im.vector.app.core.utils.ensureProtocol
|
||||
@ -67,7 +66,7 @@ class SetIdentityServerViewModel @AssistedInject constructor(
|
||||
when (action) {
|
||||
SetIdentityServerAction.UseDefaultIdentityServer -> useDefault()
|
||||
is SetIdentityServerAction.UseCustomIdentityServer -> usedCustomIdentityServerUrl(action)
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun useDefault() = withState { state ->
|
||||
|
@ -38,7 +38,6 @@ import dagger.hilt.android.AndroidEntryPoint
|
||||
import im.vector.app.AppStateHandler
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.di.ActiveSessionHolder
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.extensions.hideKeyboard
|
||||
import im.vector.app.core.extensions.registerStartForActivityResult
|
||||
import im.vector.app.core.extensions.replaceFragment
|
||||
@ -107,6 +106,7 @@ class HomeActivity :
|
||||
|
||||
@Suppress("UNUSED")
|
||||
private val analyticsAccountDataViewModel: AnalyticsAccountDataViewModel by viewModel()
|
||||
|
||||
@Suppress("UNUSED")
|
||||
private val userColorAccountDataViewModel: UserColorAccountDataViewModel by viewModel()
|
||||
|
||||
@ -232,7 +232,7 @@ class HomeActivity :
|
||||
HomeActivitySharedAction.SendSpaceFeedBack -> {
|
||||
bugReporter.openBugReportScreen(this, ReportType.SPACE_BETA_FEEDBACK)
|
||||
}
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
.launchIn(lifecycleScope)
|
||||
|
||||
@ -256,7 +256,7 @@ class HomeActivity :
|
||||
HomeActivityViewEvents.ShowAnalyticsOptIn -> handleShowAnalyticsOptIn()
|
||||
HomeActivityViewEvents.NotifyUserForThreadsMigration -> handleNotifyUserForThreadsMigration()
|
||||
is HomeActivityViewEvents.MigrateThreads -> migrateThreadsIfNeeded(it.checkSession)
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
homeActivityViewModel.onEach { renderState(it) }
|
||||
|
||||
@ -374,7 +374,7 @@ class HomeActivity :
|
||||
// Idle or Incremental sync status
|
||||
views.waitingView.root.isVisible = false
|
||||
}
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleAskPasswordToInitCrossSigning(events: HomeActivityViewEvents.AskPasswordToInitCrossSigning) {
|
||||
|
@ -25,7 +25,6 @@ import im.vector.app.config.analyticsConfig
|
||||
import im.vector.app.core.di.ActiveSessionHolder
|
||||
import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
||||
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.platform.VectorViewModel
|
||||
import im.vector.app.features.analytics.store.AnalyticsStore
|
||||
import im.vector.app.features.login.ReAuthHelper
|
||||
@ -306,6 +305,6 @@ class HomeActivityViewModel @AssistedInject constructor(
|
||||
HomeActivityViewActions.ViewStarted -> {
|
||||
initialize()
|
||||
}
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -273,6 +273,7 @@ class HomeDetailViewModel @AssistedInject constructor(
|
||||
)
|
||||
}
|
||||
}
|
||||
null -> Unit
|
||||
}
|
||||
}
|
||||
.launchIn(viewModelScope)
|
||||
|
@ -72,7 +72,6 @@ import im.vector.app.core.dialogs.ConfirmationDialogBuilder
|
||||
import im.vector.app.core.dialogs.GalleryOrCameraDialogHelper
|
||||
import im.vector.app.core.epoxy.LayoutManagerStateRestorer
|
||||
import im.vector.app.core.extensions.cleanup
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.extensions.hideKeyboard
|
||||
import im.vector.app.core.extensions.registerStartForActivityResult
|
||||
import im.vector.app.core.extensions.setTextOrHide
|
||||
@ -446,7 +445,7 @@ class TimelineFragment @Inject constructor(
|
||||
}
|
||||
showErrorInSnackbar(it.throwable)
|
||||
}
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
timelineViewModel.observeViewEvents {
|
||||
@ -483,7 +482,7 @@ class TimelineFragment @Inject constructor(
|
||||
RoomDetailViewEvents.StopChatEffects -> handleStopChatEffects()
|
||||
is RoomDetailViewEvents.DisplayAndAcceptCall -> acceptIncomingCall(it)
|
||||
RoomDetailViewEvents.RoomReplacementStarted -> handleRoomReplacement()
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
if (savedInstanceState == null) {
|
||||
@ -875,7 +874,7 @@ class TimelineFragment @Inject constructor(
|
||||
onContentAttachmentsReady(sharedData.attachmentData)
|
||||
}
|
||||
null -> Timber.v("No share data to process")
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleSpaceShare() {
|
||||
@ -1241,7 +1240,7 @@ class TimelineFragment @Inject constructor(
|
||||
insertUserDisplayNameInTextEditor(roomDetailPendingAction.userId)
|
||||
is RoomDetailPendingAction.OpenRoom ->
|
||||
handleOpenRoom(RoomDetailViewEvents.OpenRoom(roomDetailPendingAction.roomId, roomDetailPendingAction.closeCurrentRoom))
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
override fun onPause() {
|
||||
@ -1658,7 +1657,7 @@ class TimelineFragment @Inject constructor(
|
||||
is MessageComposerViewEvents.SlashCommandNotSupportedInThreads -> {
|
||||
displayCommandError(getString(R.string.command_not_supported_in_threads, sendMessageResult.command.command))
|
||||
}
|
||||
} // .exhaustive
|
||||
} //
|
||||
|
||||
lockSendButton = false
|
||||
}
|
||||
@ -1782,6 +1781,7 @@ class TimelineFragment @Inject constructor(
|
||||
transactionId = data.transactionId,
|
||||
).show(parentFragmentManager, "REQ")
|
||||
}
|
||||
else -> Unit
|
||||
}
|
||||
}
|
||||
|
||||
@ -2236,6 +2236,8 @@ class TimelineFragment @Inject constructor(
|
||||
is EventSharedAction.EndPoll -> {
|
||||
askConfirmationToEndPoll(action.eventId)
|
||||
}
|
||||
is EventSharedAction.ReportContent -> Unit /* Not clickable */
|
||||
EventSharedAction.Separator -> Unit /* Not clickable */
|
||||
}
|
||||
}
|
||||
|
||||
@ -2434,7 +2436,7 @@ class TimelineFragment @Inject constructor(
|
||||
locationOwnerId = session.myUserId
|
||||
)
|
||||
}
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
// AttachmentsHelper.Callback
|
||||
|
@ -33,7 +33,6 @@ import im.vector.app.BuildConfig
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
||||
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.mvrx.runCatchingToAsync
|
||||
import im.vector.app.core.platform.VectorViewModel
|
||||
import im.vector.app.core.resources.StringProvider
|
||||
@ -440,7 +439,7 @@ class TimelineViewModel @AssistedInject constructor(
|
||||
_viewEvents.post(RoomDetailViewEvents.OpenRoom(action.replacementRoomId, closeCurrentRoom = true))
|
||||
}
|
||||
is RoomDetailAction.EndPoll -> handleEndPoll(action.eventId)
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleJitsiCallJoinStatus(action: RoomDetailAction.UpdateJoinJitsiCallStatus) = withState { state ->
|
||||
|
@ -23,7 +23,6 @@ import dagger.assisted.AssistedInject
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
||||
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.platform.VectorViewModel
|
||||
import im.vector.app.core.resources.StringProvider
|
||||
import im.vector.app.features.analytics.AnalyticsTracker
|
||||
@ -463,7 +462,7 @@ class MessageComposerViewModel @AssistedInject constructor(
|
||||
_viewEvents.post(MessageComposerViewEvents.SlashCommandResultOk())
|
||||
popDraft()
|
||||
}
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
is SendMode.Edit -> {
|
||||
// is original event a reply?
|
||||
@ -536,7 +535,7 @@ class MessageComposerViewModel @AssistedInject constructor(
|
||||
is SendMode.Voice -> {
|
||||
// do nothing
|
||||
}
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -23,7 +23,6 @@ import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import im.vector.app.BuildConfig
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.hardware.vibrate
|
||||
import im.vector.app.core.time.Clock
|
||||
import im.vector.app.core.utils.DimensionConverter
|
||||
@ -95,9 +94,10 @@ class VoiceMessageRecorderView @JvmOverloads constructor(
|
||||
override fun onDeleteVoiceMessage() = callback.onDeleteVoiceMessage()
|
||||
override fun onWaveformClicked() {
|
||||
when (lastKnownState) {
|
||||
RecordingUiState.Draft -> callback.onVoicePlaybackButtonClicked()
|
||||
RecordingUiState.Draft -> callback.onVoicePlaybackButtonClicked()
|
||||
is RecordingUiState.Recording,
|
||||
is RecordingUiState.Locked -> callback.onRecordingWaveformClicked()
|
||||
else -> Unit
|
||||
}
|
||||
}
|
||||
|
||||
@ -119,7 +119,7 @@ class VoiceMessageRecorderView @JvmOverloads constructor(
|
||||
fun render(recordingState: RecordingUiState) {
|
||||
if (lastKnownState == recordingState) return
|
||||
when (recordingState) {
|
||||
RecordingUiState.Idle -> {
|
||||
RecordingUiState.Idle -> {
|
||||
reset()
|
||||
}
|
||||
is RecordingUiState.Recording -> {
|
||||
@ -137,7 +137,7 @@ class VoiceMessageRecorderView @JvmOverloads constructor(
|
||||
voiceMessageViews.showRecordingLockedViews(recordingState)
|
||||
}, 500)
|
||||
}
|
||||
RecordingUiState.Draft -> {
|
||||
RecordingUiState.Draft -> {
|
||||
stopRecordingTicker()
|
||||
voiceMessageViews.showDraftViews()
|
||||
}
|
||||
@ -167,7 +167,7 @@ class VoiceMessageRecorderView @JvmOverloads constructor(
|
||||
DraggingState.Ready -> {
|
||||
// do nothing
|
||||
}
|
||||
}.exhaustive
|
||||
}
|
||||
dragState = newDragState
|
||||
}
|
||||
|
||||
|
@ -26,6 +26,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.airbnb.mvrx.Fail
|
||||
import com.airbnb.mvrx.Loading
|
||||
import com.airbnb.mvrx.Success
|
||||
import com.airbnb.mvrx.Uninitialized
|
||||
import com.airbnb.mvrx.args
|
||||
import com.airbnb.mvrx.fragmentViewModel
|
||||
import com.airbnb.mvrx.withState
|
||||
@ -88,6 +89,7 @@ class SearchFragment @Inject constructor(
|
||||
override fun invalidate() = withState(searchViewModel) { state ->
|
||||
if (state.searchResult.isNullOrEmpty()) {
|
||||
when (state.asyncSearchRequest) {
|
||||
Uninitialized,
|
||||
is Loading -> {
|
||||
views.stateView.state = StateView.State.Loading
|
||||
}
|
||||
|
@ -25,7 +25,6 @@ import dagger.assisted.AssistedFactory
|
||||
import dagger.assisted.AssistedInject
|
||||
import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
||||
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.platform.VectorViewModel
|
||||
import kotlinx.coroutines.CancellationException
|
||||
import kotlinx.coroutines.Job
|
||||
@ -56,7 +55,7 @@ class SearchViewModel @AssistedInject constructor(
|
||||
is SearchAction.SearchWith -> handleSearchWith(action)
|
||||
is SearchAction.LoadMore -> handleLoadMore()
|
||||
is SearchAction.Retry -> handleRetry()
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleSearchWith(action: SearchAction.SearchWith) {
|
||||
|
@ -18,8 +18,9 @@ package im.vector.app.features.home.room.detail.timeline.edithistory
|
||||
import android.text.Spannable
|
||||
import com.airbnb.epoxy.TypedEpoxyController
|
||||
import com.airbnb.mvrx.Fail
|
||||
import com.airbnb.mvrx.Incomplete
|
||||
import com.airbnb.mvrx.Loading
|
||||
import com.airbnb.mvrx.Success
|
||||
import com.airbnb.mvrx.Uninitialized
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.date.DateFormatKind
|
||||
import im.vector.app.core.date.VectorDateFormatter
|
||||
@ -54,18 +55,19 @@ class ViewEditHistoryEpoxyController @Inject constructor(
|
||||
override fun buildModels(state: ViewEditHistoryViewState) {
|
||||
val host = this
|
||||
when (state.editList) {
|
||||
is Incomplete -> {
|
||||
Uninitialized,
|
||||
is Loading -> {
|
||||
genericLoaderItem {
|
||||
id("Spinner")
|
||||
}
|
||||
}
|
||||
is Fail -> {
|
||||
is Fail -> {
|
||||
genericFooterItem {
|
||||
id("failure")
|
||||
text(host.stringProvider.getString(R.string.unknown_error).toEpoxyCharSequence())
|
||||
}
|
||||
}
|
||||
is Success -> {
|
||||
is Success -> {
|
||||
state.editList()?.let { renderEvents(it, state.isOriginalAReply) }
|
||||
}
|
||||
}
|
||||
|
@ -26,7 +26,6 @@ import dagger.hilt.android.scopes.ActivityScoped
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.di.ActiveSessionHolder
|
||||
import im.vector.app.core.error.ErrorFormatter
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.utils.TextUtils
|
||||
import im.vector.app.features.home.room.detail.timeline.MessageColorProvider
|
||||
import org.matrix.android.sdk.api.session.content.ContentUploadStateTracker
|
||||
@ -86,7 +85,7 @@ private class ContentMediaProgressUpdater(private val progressLayout: ViewGroup,
|
||||
is ContentUploadStateTracker.State.Success -> handleSuccess()
|
||||
is ContentUploadStateTracker.State.CompressingImage -> handleCompressingImage()
|
||||
is ContentUploadStateTracker.State.CompressingVideo -> handleCompressingVideo(state)
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleIdle() {
|
||||
|
@ -96,9 +96,10 @@ abstract class MessageVoiceItem : AbsMessageItem<MessageVoiceItem.Holder>() {
|
||||
voiceMessagePlaybackTracker.track(attributes.informationData.eventId, object : VoiceMessagePlaybackTracker.Listener {
|
||||
override fun onUpdate(state: VoiceMessagePlaybackTracker.Listener.State) {
|
||||
when (state) {
|
||||
is VoiceMessagePlaybackTracker.Listener.State.Idle -> renderIdleState(holder)
|
||||
is VoiceMessagePlaybackTracker.Listener.State.Playing -> renderPlayingState(holder, state)
|
||||
is VoiceMessagePlaybackTracker.Listener.State.Paused -> renderPausedState(holder, state)
|
||||
is VoiceMessagePlaybackTracker.Listener.State.Idle -> renderIdleState(holder)
|
||||
is VoiceMessagePlaybackTracker.Listener.State.Playing -> renderPlayingState(holder, state)
|
||||
is VoiceMessagePlaybackTracker.Listener.State.Paused -> renderPausedState(holder, state)
|
||||
is VoiceMessagePlaybackTracker.Listener.State.Recording -> Unit
|
||||
}
|
||||
}
|
||||
})
|
||||
|
@ -23,7 +23,6 @@ import androidx.appcompat.content.res.AppCompatResources
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import androidx.core.view.isVisible
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.extensions.setAttributeTintedImageResource
|
||||
import im.vector.app.databinding.ItemPollOptionBinding
|
||||
|
||||
@ -49,7 +48,7 @@ class PollOptionView @JvmOverloads constructor(
|
||||
is PollOptionViewState.PollReady -> renderPollReady()
|
||||
is PollOptionViewState.PollVoted -> renderPollVoted(state)
|
||||
is PollOptionViewState.PollUndisclosed -> renderPollUndisclosed(state)
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun renderPollSending() {
|
||||
|
@ -31,7 +31,6 @@ import com.airbnb.epoxy.EpoxyModelClass
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.epoxy.ClickListener
|
||||
import im.vector.app.core.epoxy.onClick
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.features.home.AvatarRenderer
|
||||
import im.vector.app.features.home.room.detail.RoomDetailAction
|
||||
import im.vector.app.features.home.room.detail.timeline.MessageColorProvider
|
||||
@ -105,7 +104,7 @@ abstract class VerificationRequestItem : AbsBaseMessageItem<VerificationRequestI
|
||||
}
|
||||
holder.statusTextView.isVisible = true
|
||||
}
|
||||
}.exhaustive
|
||||
}
|
||||
|
||||
// Always hide buttons if request is too old
|
||||
if (!VerificationService.isValidRequest(attributes.informationData.ageLocalTS)) {
|
||||
|
@ -18,8 +18,9 @@ package im.vector.app.features.home.room.detail.timeline.reactions
|
||||
|
||||
import com.airbnb.epoxy.TypedEpoxyController
|
||||
import com.airbnb.mvrx.Fail
|
||||
import com.airbnb.mvrx.Incomplete
|
||||
import com.airbnb.mvrx.Loading
|
||||
import com.airbnb.mvrx.Success
|
||||
import com.airbnb.mvrx.Uninitialized
|
||||
import im.vector.app.EmojiSpanify
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.resources.StringProvider
|
||||
@ -41,18 +42,19 @@ class ViewReactionsEpoxyController @Inject constructor(
|
||||
override fun buildModels(state: DisplayReactionsViewState) {
|
||||
val host = this
|
||||
when (state.mapReactionKeyToMemberList) {
|
||||
is Incomplete -> {
|
||||
Uninitialized,
|
||||
is Loading -> {
|
||||
genericLoaderItem {
|
||||
id("Spinner")
|
||||
}
|
||||
}
|
||||
is Fail -> {
|
||||
is Fail -> {
|
||||
genericFooterItem {
|
||||
id("failure")
|
||||
text(host.stringProvider.getString(R.string.unknown_error).toEpoxyCharSequence())
|
||||
}
|
||||
}
|
||||
is Success -> {
|
||||
is Success -> {
|
||||
state.mapReactionKeyToMemberList()?.forEach { reactionInfo ->
|
||||
reactionInfoSimpleItem {
|
||||
id(reactionInfo.eventId)
|
||||
|
@ -38,7 +38,6 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.epoxy.LayoutManagerStateRestorer
|
||||
import im.vector.app.core.extensions.cleanup
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.platform.OnBackPressed
|
||||
import im.vector.app.core.platform.StateView
|
||||
import im.vector.app.core.platform.VectorBaseFragment
|
||||
@ -128,7 +127,7 @@ class RoomListFragment @Inject constructor(
|
||||
is RoomListViewEvents.SelectRoom -> handleSelectRoom(it, it.isInviteAlreadyAccepted)
|
||||
is RoomListViewEvents.Done -> Unit
|
||||
is RoomListViewEvents.NavigateToMxToBottomSheet -> handleShowMxToLink(it.link)
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
views.createChatFabMenu.listener = this
|
||||
@ -422,7 +421,7 @@ class RoomListFragment @Inject constructor(
|
||||
is RoomListQuickActionsSharedAction.Leave -> {
|
||||
promptLeaveRoom(quickAction.roomId)
|
||||
}
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun promptLeaveRoom(roomId: String) {
|
||||
|
@ -29,7 +29,6 @@ import im.vector.app.AppStateHandler
|
||||
import im.vector.app.RoomGroupingMethod
|
||||
import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
||||
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.platform.VectorViewModel
|
||||
import im.vector.app.core.resources.StringProvider
|
||||
import im.vector.app.features.analytics.AnalyticsTracker
|
||||
@ -163,7 +162,7 @@ class RoomListViewModel @AssistedInject constructor(
|
||||
is RoomListAction.ToggleSection -> handleToggleSection(action.section)
|
||||
is RoomListAction.JoinSuggestedRoom -> handleJoinSuggestedRoom(action)
|
||||
is RoomListAction.ShowRoomDetails -> handleShowRoomDetails(action)
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
fun isPublicRoom(roomId: String): Boolean {
|
||||
|
@ -74,8 +74,7 @@ class InviteUsersToRoomActivity : SimpleFragmentActivity() {
|
||||
is UserListSharedAction.OnMenuItemSelected -> onMenuItemSelected(sharedAction)
|
||||
UserListSharedAction.OpenPhoneBook -> openPhoneBook()
|
||||
// not exhaustive because it's a sharedAction
|
||||
else -> {
|
||||
}
|
||||
else -> Unit
|
||||
}
|
||||
}
|
||||
.launchIn(lifecycleScope)
|
||||
|
@ -29,7 +29,6 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import com.mapbox.mapboxsdk.maps.MapView
|
||||
import im.vector.app.BuildConfig
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.platform.VectorBaseFragment
|
||||
import im.vector.app.core.utils.PERMISSIONS_FOR_BACKGROUND_LOCATION_SHARING
|
||||
import im.vector.app.core.utils.PERMISSIONS_FOR_FOREGROUND_LOCATION_SHARING
|
||||
@ -86,7 +85,7 @@ class LocationSharingFragment @Inject constructor(
|
||||
LocationSharingViewEvents.Close -> locationSharingNavigator.quit()
|
||||
LocationSharingViewEvents.LocationNotAvailableError -> handleLocationNotAvailableError()
|
||||
is LocationSharingViewEvents.ZoomToUserLocation -> handleZoomToUserLocationEvent(it)
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -23,7 +23,6 @@ import dagger.assisted.AssistedFactory
|
||||
import dagger.assisted.AssistedInject
|
||||
import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
||||
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.platform.VectorViewModel
|
||||
import im.vector.app.features.home.room.detail.timeline.helper.LocationPinProvider
|
||||
import im.vector.app.features.location.domain.usecase.CompareLocationsUseCase
|
||||
@ -122,7 +121,7 @@ class LocationSharingViewModel @AssistedInject constructor(
|
||||
is LocationSharingAction.LocationTargetChange -> handleLocationTargetChangeAction(action)
|
||||
LocationSharingAction.ZoomToUserLocation -> handleZoomToUserLocationAction()
|
||||
LocationSharingAction.StartLiveLocationSharing -> handleStartLiveLocationSharingAction()
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleCurrentUserLocationSharingAction() = withState { state ->
|
||||
|
@ -26,7 +26,6 @@ import com.airbnb.mvrx.withState
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.dialogs.UnrecognizedCertificateDialog
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.platform.OnBackPressed
|
||||
import im.vector.app.core.platform.VectorBaseFragment
|
||||
import kotlinx.coroutines.CancellationException
|
||||
@ -69,7 +68,7 @@ abstract class AbstractLoginFragment<VB : ViewBinding> : VectorBaseFragment<VB>(
|
||||
else ->
|
||||
// This is handled by the Activity
|
||||
Unit
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
override fun showFailure(throwable: Throwable) {
|
||||
|
@ -35,7 +35,6 @@ import im.vector.app.R
|
||||
import im.vector.app.core.extensions.POP_BACK_STACK_EXCLUSIVE
|
||||
import im.vector.app.core.extensions.addFragment
|
||||
import im.vector.app.core.extensions.addFragmentToBackstack
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.extensions.validateBackPressed
|
||||
import im.vector.app.core.platform.VectorBaseActivity
|
||||
import im.vector.app.databinding.ActivityLoginBinding
|
||||
@ -197,7 +196,7 @@ open class LoginActivity : VectorBaseActivity<ActivityLoginBinding>(), UnlockedA
|
||||
is LoginViewEvents.Loading ->
|
||||
// This is handled by the Fragments
|
||||
Unit
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateWithState(loginViewState: LoginViewState) {
|
||||
@ -260,13 +259,13 @@ open class LoginActivity : VectorBaseActivity<ActivityLoginBinding>(), UnlockedA
|
||||
tag = FRAGMENT_LOGIN_TAG,
|
||||
option = commonOption)
|
||||
LoginMode.Unsupported -> onLoginModeNotSupported(state.loginModeSupportedTypes)
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
SignMode.SignInWithMatrixId -> addFragmentToBackstack(views.loginFragmentContainer,
|
||||
LoginFragment::class.java,
|
||||
tag = FRAGMENT_LOGIN_TAG,
|
||||
option = commonOption)
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -29,8 +29,8 @@ import androidx.lifecycle.lifecycleScope
|
||||
import com.airbnb.mvrx.Fail
|
||||
import com.airbnb.mvrx.Loading
|
||||
import com.airbnb.mvrx.Success
|
||||
import com.airbnb.mvrx.Uninitialized
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.extensions.hideKeyboard
|
||||
import im.vector.app.core.extensions.hidePassword
|
||||
import im.vector.app.core.extensions.toReducedUrl
|
||||
@ -97,7 +97,7 @@ class LoginFragment @Inject constructor() : AbstractSSOLoginFragment<FragmentLog
|
||||
views.loginField.setAutofillHints(HintConstants.AUTOFILL_HINT_USERNAME)
|
||||
views.passwordField.setAutofillHints(HintConstants.AUTOFILL_HINT_PASSWORD)
|
||||
}
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -107,7 +107,7 @@ class LoginFragment @Inject constructor() : AbstractSSOLoginFragment<FragmentLog
|
||||
SignMode.SignUp -> SocialLoginButtonsView.Mode.MODE_SIGN_UP
|
||||
SignMode.SignIn,
|
||||
SignMode.SignInWithMatrixId -> SocialLoginButtonsView.Mode.MODE_SIGN_IN
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun submit() {
|
||||
@ -269,6 +269,7 @@ class LoginFragment @Inject constructor() : AbstractSSOLoginFragment<FragmentLog
|
||||
setupButtons(state)
|
||||
|
||||
when (state.asyncLoginAction) {
|
||||
Uninitialized,
|
||||
is Loading -> {
|
||||
// Ensure password is hidden
|
||||
views.passwordField.hidePassword()
|
||||
@ -300,7 +301,7 @@ class LoginFragment @Inject constructor() : AbstractSSOLoginFragment<FragmentLog
|
||||
views.passwordField.hidePassword()
|
||||
}
|
||||
// Success is handled by the LoginActivity
|
||||
is Success -> Unit
|
||||
else -> Unit
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -23,7 +23,6 @@ import android.view.ViewGroup
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import com.airbnb.mvrx.Fail
|
||||
import com.airbnb.mvrx.Loading
|
||||
import com.airbnb.mvrx.Success
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.extensions.hideKeyboard
|
||||
@ -129,7 +128,7 @@ class LoginResetPasswordFragment @Inject constructor() : AbstractLoginFragment<F
|
||||
is Fail -> {
|
||||
views.resetPasswordEmailTil.error = errorFormatter.toHumanReadable(state.asyncResetPassword.error)
|
||||
}
|
||||
is Success -> Unit
|
||||
else -> Unit
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -21,7 +21,6 @@ import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import com.airbnb.mvrx.Fail
|
||||
import com.airbnb.mvrx.Success
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import im.vector.app.R
|
||||
import im.vector.app.databinding.FragmentLoginResetPasswordMailConfirmationBinding
|
||||
@ -59,7 +58,7 @@ class LoginResetPasswordMailConfirmationFragment @Inject constructor() : Abstrac
|
||||
setupUi(state)
|
||||
|
||||
when (state.asyncResetMailConfirmed) {
|
||||
is Fail -> {
|
||||
is Fail -> {
|
||||
// Link in email not yet clicked ?
|
||||
val message = if (state.asyncResetMailConfirmed.error.is401()) {
|
||||
getString(R.string.auth_reset_password_error_unauthorized)
|
||||
@ -73,7 +72,7 @@ class LoginResetPasswordMailConfirmationFragment @Inject constructor() : Abstrac
|
||||
.setPositiveButton(R.string.ok, null)
|
||||
.show()
|
||||
}
|
||||
is Success -> Unit
|
||||
else -> Unit
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -31,7 +31,6 @@ import im.vector.app.core.di.ActiveSessionHolder
|
||||
import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
||||
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
||||
import im.vector.app.core.extensions.configureAndStart
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.platform.VectorViewModel
|
||||
import im.vector.app.core.resources.StringProvider
|
||||
import im.vector.app.core.utils.ensureTrailingSlash
|
||||
@ -131,7 +130,7 @@ class LoginViewModel @AssistedInject constructor(
|
||||
is LoginAction.UserAcceptCertificate -> handleUserAcceptCertificate(action)
|
||||
LoginAction.ClearHomeServerHistory -> handleClearHomeServerHistory()
|
||||
is LoginAction.PostViewEvent -> _viewEvents.post(action.viewEvent)
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleOnGetStarted(action: LoginAction.OnGetStarted) {
|
||||
@ -173,6 +172,7 @@ class LoginViewModel @AssistedInject constructor(
|
||||
.withAllowedFingerPrints(listOf(action.fingerprint))
|
||||
.build()
|
||||
)
|
||||
else -> Unit
|
||||
}
|
||||
}
|
||||
|
||||
@ -447,7 +447,7 @@ class LoginViewModel @AssistedInject constructor(
|
||||
handle(LoginAction.UpdateHomeServer(matrixOrgUrl))
|
||||
ServerType.EMS,
|
||||
ServerType.Other -> _viewEvents.post(LoginViewEvents.OnServerSelectionDone(action.serverType))
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleInitWith(action: LoginAction.InitWith) {
|
||||
@ -555,7 +555,7 @@ class LoginViewModel @AssistedInject constructor(
|
||||
SignMode.SignIn -> handleLogin(action)
|
||||
SignMode.SignUp -> handleRegisterWith(action)
|
||||
SignMode.SignInWithMatrixId -> handleDirectLogin(action, null)
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleDirectLogin(action: LoginAction.LoginOrRegister, homeServerConnectionConfig: HomeServerConnectionConfig?) {
|
||||
@ -585,7 +585,7 @@ class LoginViewModel @AssistedInject constructor(
|
||||
else -> {
|
||||
onWellKnownError()
|
||||
}
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -26,7 +26,6 @@ import com.airbnb.mvrx.withState
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.dialogs.UnrecognizedCertificateDialog
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.platform.OnBackPressed
|
||||
import im.vector.app.core.platform.VectorBaseFragment
|
||||
import kotlinx.coroutines.CancellationException
|
||||
@ -67,7 +66,7 @@ abstract class AbstractLoginFragment2<VB : ViewBinding> : VectorBaseFragment<VB>
|
||||
else ->
|
||||
// This is handled by the Activity
|
||||
Unit
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
override fun showFailure(throwable: Throwable) {
|
||||
|
@ -18,7 +18,6 @@ package im.vector.app.features.login2
|
||||
|
||||
import android.content.Context
|
||||
import android.net.Uri
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.airbnb.mvrx.Loading
|
||||
import com.airbnb.mvrx.MavericksViewModelFactory
|
||||
import dagger.assisted.Assisted
|
||||
@ -29,7 +28,6 @@ import im.vector.app.core.di.ActiveSessionHolder
|
||||
import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
||||
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
||||
import im.vector.app.core.extensions.configureAndStart
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.extensions.tryAsync
|
||||
import im.vector.app.core.platform.VectorViewModel
|
||||
import im.vector.app.core.resources.StringProvider
|
||||
@ -137,7 +135,7 @@ class LoginViewModel2 @AssistedInject constructor(
|
||||
LoginAction2.ClearHomeServerHistory -> handleClearHomeServerHistory()
|
||||
is LoginAction2.PostViewEvent -> _viewEvents.post(action.viewEvent)
|
||||
is LoginAction2.Finish -> handleFinish()
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleFinish() {
|
||||
@ -172,6 +170,7 @@ class LoginViewModel2 @AssistedInject constructor(
|
||||
handleSetUserPassword(finalLastAction)
|
||||
is LoginAction2.LoginWith ->
|
||||
handleLoginWith(finalLastAction)
|
||||
else -> Unit
|
||||
}
|
||||
}
|
||||
|
||||
@ -500,7 +499,7 @@ class LoginViewModel2 @AssistedInject constructor(
|
||||
SignMode2.Unknown -> error("Developer error, invalid sign mode")
|
||||
SignMode2.SignIn -> handleSetUserNameForSignIn(action, null)
|
||||
SignMode2.SignUp -> handleSetUserNameForSignUp(action)
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleSetUserPassword(action: LoginAction2.SetUserPassword) = withState { state ->
|
||||
@ -508,7 +507,7 @@ class LoginViewModel2 @AssistedInject constructor(
|
||||
SignMode2.Unknown -> error("Developer error, invalid sign mode")
|
||||
SignMode2.SignIn -> handleSignInWithPassword(action)
|
||||
SignMode2.SignUp -> handleRegisterWithPassword(action)
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleRegisterWithPassword(action: LoginAction2.SetUserPassword) = withState { state ->
|
||||
@ -588,7 +587,7 @@ class LoginViewModel2 @AssistedInject constructor(
|
||||
else -> {
|
||||
onWellKnownError()
|
||||
}
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -65,18 +65,17 @@ class MatrixToBottomSheet :
|
||||
override fun invalidate() = withState(viewModel) { state ->
|
||||
super.invalidate()
|
||||
when (state.linkType) {
|
||||
is PermalinkData.RoomLink -> {
|
||||
is PermalinkData.RoomLink -> {
|
||||
views.matrixToCardContentLoading.isVisible = state.roomPeekResult is Incomplete
|
||||
showFragment(MatrixToRoomSpaceFragment::class, Bundle())
|
||||
}
|
||||
is PermalinkData.UserLink -> {
|
||||
is PermalinkData.UserLink -> {
|
||||
views.matrixToCardContentLoading.isVisible = state.matrixItem is Incomplete
|
||||
showFragment(MatrixToUserFragment::class, Bundle())
|
||||
}
|
||||
is PermalinkData.GroupLink -> {
|
||||
}
|
||||
is PermalinkData.FallbackLink -> {
|
||||
}
|
||||
is PermalinkData.GroupLink -> Unit
|
||||
is PermalinkData.FallbackLink -> Unit
|
||||
is PermalinkData.RoomEmailInviteLink -> Unit
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -28,7 +28,6 @@ import im.vector.app.R
|
||||
import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
||||
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
||||
import im.vector.app.core.error.ErrorFormatter
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.platform.VectorViewModel
|
||||
import im.vector.app.core.resources.StringProvider
|
||||
import im.vector.app.features.createdirect.DirectRoomHelper
|
||||
@ -49,8 +48,8 @@ class MatrixToBottomSheetViewModel @AssistedInject constructor(
|
||||
private val session: Session,
|
||||
private val stringProvider: StringProvider,
|
||||
private val directRoomHelper: DirectRoomHelper,
|
||||
private val errorFormatter: ErrorFormatter) :
|
||||
VectorViewModel<MatrixToBottomSheetState, MatrixToAction, MatrixToViewEvents>(initialState) {
|
||||
private val errorFormatter: ErrorFormatter
|
||||
) : VectorViewModel<MatrixToBottomSheetState, MatrixToAction, MatrixToViewEvents>(initialState) {
|
||||
|
||||
@AssistedFactory
|
||||
interface Factory : MavericksAssistedViewModelFactory<MatrixToBottomSheetViewModel, MatrixToBottomSheetState> {
|
||||
@ -61,22 +60,23 @@ class MatrixToBottomSheetViewModel @AssistedInject constructor(
|
||||
|
||||
init {
|
||||
when (initialState.linkType) {
|
||||
is PermalinkData.RoomLink -> {
|
||||
is PermalinkData.RoomLink -> {
|
||||
setState {
|
||||
copy(roomPeekResult = Loading())
|
||||
}
|
||||
}
|
||||
is PermalinkData.UserLink -> {
|
||||
is PermalinkData.UserLink -> {
|
||||
setState {
|
||||
copy(matrixItem = Loading())
|
||||
}
|
||||
}
|
||||
is PermalinkData.GroupLink -> {
|
||||
is PermalinkData.GroupLink -> {
|
||||
// Not yet supported
|
||||
}
|
||||
is PermalinkData.FallbackLink -> {
|
||||
is PermalinkData.FallbackLink -> {
|
||||
// Not yet supported
|
||||
}
|
||||
is PermalinkData.RoomEmailInviteLink -> Unit
|
||||
}
|
||||
viewModelScope.launch(Dispatchers.IO) {
|
||||
resolveLink(initialState)
|
||||
@ -263,7 +263,7 @@ class MatrixToBottomSheetViewModel @AssistedInject constructor(
|
||||
is MatrixToAction.OpenRoom -> {
|
||||
_viewEvents.post(MatrixToViewEvents.NavigateToRoom(action.roomId))
|
||||
}
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleJoinSpace(joinSpace: MatrixToAction.JoinSpace) {
|
||||
|
@ -320,6 +320,7 @@ class DefaultNavigator @Inject constructor(
|
||||
}
|
||||
}
|
||||
}
|
||||
null -> Unit
|
||||
}
|
||||
}
|
||||
|
||||
@ -376,6 +377,7 @@ class DefaultNavigator @Inject constructor(
|
||||
context.startActivity(intent)
|
||||
}
|
||||
}
|
||||
null -> Unit
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -47,11 +47,9 @@ class NotificationRenderer @Inject constructor(private val notificationDisplayer
|
||||
)
|
||||
|
||||
// Remove summary first to avoid briefly displaying it after dismissing the last notification
|
||||
when (summaryNotification) {
|
||||
SummaryNotification.Removed -> {
|
||||
Timber.d("Removing summary notification")
|
||||
notificationDisplayer.cancelNotificationMessage(null, SUMMARY_NOTIFICATION_ID)
|
||||
}
|
||||
if (summaryNotification == SummaryNotification.Removed) {
|
||||
Timber.d("Removing summary notification")
|
||||
notificationDisplayer.cancelNotificationMessage(null, SUMMARY_NOTIFICATION_ID)
|
||||
}
|
||||
|
||||
roomNotifications.forEach { wrapper ->
|
||||
@ -94,11 +92,9 @@ class NotificationRenderer @Inject constructor(private val notificationDisplayer
|
||||
}
|
||||
|
||||
// Update summary last to avoid briefly displaying it before other notifications
|
||||
when (summaryNotification) {
|
||||
is SummaryNotification.Update -> {
|
||||
Timber.d("Updating summary notification")
|
||||
notificationDisplayer.showNotificationMessage(null, SUMMARY_NOTIFICATION_ID, summaryNotification.notification)
|
||||
}
|
||||
if (summaryNotification is SummaryNotification.Update) {
|
||||
Timber.d("Updating summary notification")
|
||||
notificationDisplayer.showNotificationMessage(null, SUMMARY_NOTIFICATION_ID, summaryNotification.notification)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -30,7 +30,6 @@ import im.vector.app.R
|
||||
import im.vector.app.core.extensions.POP_BACK_STACK_EXCLUSIVE
|
||||
import im.vector.app.core.extensions.addFragment
|
||||
import im.vector.app.core.extensions.addFragmentToBackstack
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.extensions.resetBackstack
|
||||
import im.vector.app.core.platform.VectorBaseActivity
|
||||
import im.vector.app.databinding.ActivityLoginBinding
|
||||
@ -257,7 +256,7 @@ class Login2Variant(
|
||||
is LoginViewEvents2.OnSessionCreated -> handleOnSessionCreated(event)
|
||||
is LoginViewEvents2.Finish -> terminate(true)
|
||||
is LoginViewEvents2.CancelRegistration -> handleCancelRegistration()
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleCancelRegistration() {
|
||||
|
@ -31,7 +31,6 @@ import im.vector.app.core.di.ActiveSessionHolder
|
||||
import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
||||
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
||||
import im.vector.app.core.extensions.configureAndStart
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.extensions.vectorStore
|
||||
import im.vector.app.core.platform.VectorViewModel
|
||||
import im.vector.app.core.resources.StringProvider
|
||||
@ -166,7 +165,7 @@ class OnboardingViewModel @AssistedInject constructor(
|
||||
OnboardingAction.SaveSelectedProfilePicture -> updateProfilePicture()
|
||||
is OnboardingAction.PostViewEvent -> _viewEvents.post(action.viewEvent)
|
||||
OnboardingAction.StopEmailValidationCheck -> cancelWaitForEmailValidation()
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleSplashAction(resetConfig: Boolean, onboardingFlow: OnboardingFlow) {
|
||||
@ -222,6 +221,7 @@ class OnboardingViewModel @AssistedInject constructor(
|
||||
.withAllowedFingerPrints(listOf(action.fingerprint))
|
||||
.build()
|
||||
)
|
||||
else -> Unit
|
||||
}
|
||||
}
|
||||
|
||||
@ -403,7 +403,7 @@ class OnboardingViewModel @AssistedInject constructor(
|
||||
handle(OnboardingAction.UpdateHomeServer(matrixOrgUrl))
|
||||
ServerType.EMS,
|
||||
ServerType.Other -> _viewEvents.post(OnboardingViewEvents.OnServerSelectionDone(action.serverType))
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleInitWith(action: OnboardingAction.InitWith) {
|
||||
@ -511,7 +511,7 @@ class OnboardingViewModel @AssistedInject constructor(
|
||||
SignMode.SignIn -> handleLogin(action)
|
||||
SignMode.SignUp -> handleRegisterWith(action)
|
||||
SignMode.SignInWithMatrixId -> handleDirectLogin(action, null)
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleDirectLogin(action: OnboardingAction.LoginOrRegister, homeServerConnectionConfig: HomeServerConnectionConfig?) {
|
||||
@ -541,7 +541,7 @@ class OnboardingViewModel @AssistedInject constructor(
|
||||
else -> {
|
||||
onWellKnownError()
|
||||
}
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -26,7 +26,6 @@ import com.airbnb.mvrx.withState
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.dialogs.UnrecognizedCertificateDialog
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.platform.OnBackPressed
|
||||
import im.vector.app.core.platform.VectorBaseFragment
|
||||
import im.vector.app.features.onboarding.OnboardingAction
|
||||
@ -73,7 +72,7 @@ abstract class AbstractFtueAuthFragment<VB : ViewBinding> : VectorBaseFragment<V
|
||||
else ->
|
||||
// This is handled by the Activity
|
||||
Unit
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
override fun showFailure(throwable: Throwable) {
|
||||
|
@ -28,9 +28,7 @@ import androidx.core.view.isVisible
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import com.airbnb.mvrx.Fail
|
||||
import com.airbnb.mvrx.Loading
|
||||
import com.airbnb.mvrx.Success
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.extensions.hideKeyboard
|
||||
import im.vector.app.core.extensions.hidePassword
|
||||
import im.vector.app.core.extensions.toReducedUrl
|
||||
@ -105,7 +103,7 @@ class FtueAuthLoginFragment @Inject constructor() : AbstractSSOFtueAuthFragment<
|
||||
views.loginField.setAutofillHints(HintConstants.AUTOFILL_HINT_USERNAME)
|
||||
views.passwordField.setAutofillHints(HintConstants.AUTOFILL_HINT_PASSWORD)
|
||||
}
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -115,7 +113,7 @@ class FtueAuthLoginFragment @Inject constructor() : AbstractSSOFtueAuthFragment<
|
||||
SignMode.SignUp -> SocialLoginButtonsView.Mode.MODE_SIGN_UP
|
||||
SignMode.SignIn,
|
||||
SignMode.SignInWithMatrixId -> SocialLoginButtonsView.Mode.MODE_SIGN_IN
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun submit() {
|
||||
@ -299,7 +297,7 @@ class FtueAuthLoginFragment @Inject constructor() : AbstractSSOFtueAuthFragment<
|
||||
}
|
||||
}
|
||||
// Success is handled by the LoginActivity
|
||||
is Success -> Unit
|
||||
else -> Unit
|
||||
}
|
||||
|
||||
when (state.asyncRegistration) {
|
||||
@ -308,7 +306,7 @@ class FtueAuthLoginFragment @Inject constructor() : AbstractSSOFtueAuthFragment<
|
||||
views.passwordField.hidePassword()
|
||||
}
|
||||
// Success is handled by the LoginActivity
|
||||
is Success -> Unit
|
||||
else -> Unit
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -23,7 +23,6 @@ import android.view.ViewGroup
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import com.airbnb.mvrx.Fail
|
||||
import com.airbnb.mvrx.Loading
|
||||
import com.airbnb.mvrx.Success
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.extensions.hideKeyboard
|
||||
@ -125,7 +124,7 @@ class FtueAuthResetPasswordFragment @Inject constructor() : AbstractFtueAuthFrag
|
||||
is Fail -> {
|
||||
views.resetPasswordEmailTil.error = errorFormatter.toHumanReadable(state.asyncResetPassword.error)
|
||||
}
|
||||
is Success -> Unit
|
||||
else -> Unit
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -21,7 +21,6 @@ import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import com.airbnb.mvrx.Fail
|
||||
import com.airbnb.mvrx.Success
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import im.vector.app.R
|
||||
import im.vector.app.databinding.FragmentLoginResetPasswordMailConfirmationBinding
|
||||
@ -61,7 +60,7 @@ class FtueAuthResetPasswordMailConfirmationFragment @Inject constructor() : Abst
|
||||
setupUi(state)
|
||||
|
||||
when (state.asyncResetMailConfirmed) {
|
||||
is Fail -> {
|
||||
is Fail -> {
|
||||
// Link in email not yet clicked ?
|
||||
val message = if (state.asyncResetMailConfirmed.error.is401()) {
|
||||
getString(R.string.auth_reset_password_error_unauthorized)
|
||||
@ -75,7 +74,7 @@ class FtueAuthResetPasswordMailConfirmationFragment @Inject constructor() : Abst
|
||||
.setPositiveButton(R.string.ok, null)
|
||||
.show()
|
||||
}
|
||||
is Success -> Unit
|
||||
else -> Unit
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -31,7 +31,6 @@ import im.vector.app.R
|
||||
import im.vector.app.core.extensions.POP_BACK_STACK_EXCLUSIVE
|
||||
import im.vector.app.core.extensions.addFragment
|
||||
import im.vector.app.core.extensions.addFragmentToBackstack
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.extensions.popBackstack
|
||||
import im.vector.app.core.extensions.replaceFragment
|
||||
import im.vector.app.core.platform.ScreenOrientationLocker
|
||||
@ -229,7 +228,7 @@ class FtueAuthVariant(
|
||||
OnboardingViewEvents.OnChooseProfilePicture -> onChooseProfilePicture()
|
||||
OnboardingViewEvents.OnPersonalizationComplete -> onPersonalizationComplete()
|
||||
OnboardingViewEvents.OnBack -> activity.popBackstack()
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun registrationShouldFallback(registrationFlowResult: OnboardingViewEvents.RegistrationFlowResult) =
|
||||
@ -281,7 +280,7 @@ class FtueAuthVariant(
|
||||
SignMode.SignUp -> Unit // This case is processed in handleOnboardingViewEvents
|
||||
SignMode.SignIn -> handleSignInSelected(state)
|
||||
SignMode.SignInWithMatrixId -> handleSignInWithMatrixId(state)
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleSignInSelected(state: OnboardingViewState) {
|
||||
|
@ -27,7 +27,6 @@ import com.airbnb.mvrx.args
|
||||
import com.airbnb.mvrx.withState
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.extensions.configureWith
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.platform.VectorBaseFragment
|
||||
import im.vector.app.databinding.FragmentCreatePollBinding
|
||||
import im.vector.app.features.poll.create.CreatePollViewModel.Companion.MAX_OPTIONS_COUNT
|
||||
@ -68,7 +67,7 @@ class CreatePollFragment @Inject constructor(
|
||||
views.createPollToolbar.title = getString(R.string.edit_poll_title)
|
||||
views.createPollButton.text = getString(R.string.edit_poll_title)
|
||||
}
|
||||
}.exhaustive
|
||||
}
|
||||
|
||||
views.createPollRecyclerView.configureWith(controller, disableItemAnimation = true)
|
||||
// workaround for https://github.com/vector-im/element-android/issues/4735
|
||||
|
@ -24,7 +24,6 @@ import androidx.activity.result.ActivityResultLauncher
|
||||
import com.airbnb.mvrx.viewModel
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.extensions.replaceFragment
|
||||
import im.vector.app.core.platform.VectorBaseActivity
|
||||
import im.vector.app.databinding.ActivitySimpleBinding
|
||||
@ -51,7 +50,7 @@ class QrCodeScannerActivity() : VectorBaseActivity<ActivitySimpleBinding>() {
|
||||
finish()
|
||||
}
|
||||
else -> Unit
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
if (isFirstCreation()) {
|
||||
|
@ -23,7 +23,6 @@ import dagger.assisted.AssistedInject
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
||||
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.platform.VectorViewModel
|
||||
import im.vector.app.core.resources.StringProvider
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
@ -127,6 +126,6 @@ class RequireActiveMembershipViewModel @AssistedInject constructor(
|
||||
}
|
||||
roomIdFlow.tryEmit(Optional.from(action.roomId))
|
||||
}
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -28,7 +28,6 @@ import com.airbnb.mvrx.withState
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.extensions.cleanup
|
||||
import im.vector.app.core.extensions.configureWith
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.extensions.trackItemsVisibilityChange
|
||||
import im.vector.app.core.platform.VectorBaseFragment
|
||||
import im.vector.app.core.platform.showOptimizedSnackbar
|
||||
@ -96,7 +95,7 @@ class PublicRoomsFragment @Inject constructor(
|
||||
is RoomDirectoryViewEvents.Failure -> {
|
||||
views.coordinatorLayout.showOptimizedSnackbar(errorFormatter.toHumanReadable(viewEvents.throwable))
|
||||
}
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
|
@ -62,8 +62,8 @@ class RoomDirectoryActivity : VectorBaseActivity<ActivitySimpleBinding>(), Matri
|
||||
.stream()
|
||||
.onEach { sharedAction ->
|
||||
when (sharedAction) {
|
||||
is RoomDirectorySharedAction.Back -> popBackstack()
|
||||
is RoomDirectorySharedAction.CreateRoom -> {
|
||||
is RoomDirectorySharedAction.Back -> popBackstack()
|
||||
is RoomDirectorySharedAction.CreateRoom -> {
|
||||
// Transmit the filter to the CreateRoomFragment
|
||||
withState(roomDirectoryViewModel) {
|
||||
addFragmentToBackstack(
|
||||
@ -73,9 +73,10 @@ class RoomDirectoryActivity : VectorBaseActivity<ActivitySimpleBinding>(), Matri
|
||||
)
|
||||
}
|
||||
}
|
||||
is RoomDirectorySharedAction.ChangeProtocol ->
|
||||
is RoomDirectorySharedAction.ChangeProtocol ->
|
||||
addFragmentToBackstack(views.simpleFragmentContainer, RoomDirectoryPickerFragment::class.java)
|
||||
is RoomDirectorySharedAction.Close -> finish()
|
||||
is RoomDirectorySharedAction.Close -> finish()
|
||||
is RoomDirectorySharedAction.CreateRoomSuccess -> Unit
|
||||
}
|
||||
}
|
||||
.launchIn(lifecycleScope)
|
||||
|
@ -34,7 +34,6 @@ import im.vector.app.R
|
||||
import im.vector.app.core.dialogs.GalleryOrCameraDialogHelper
|
||||
import im.vector.app.core.extensions.cleanup
|
||||
import im.vector.app.core.extensions.configureWith
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.platform.OnBackPressed
|
||||
import im.vector.app.core.platform.VectorBaseFragment
|
||||
import im.vector.app.core.resources.ColorProvider
|
||||
@ -94,7 +93,7 @@ class CreateRoomFragment @Inject constructor(
|
||||
when (it) {
|
||||
CreateRoomViewEvents.Quit -> vectorBaseActivity.onBackPressed()
|
||||
is CreateRoomViewEvents.Failure -> showFailure(it.throwable)
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -28,7 +28,6 @@ import dagger.assisted.AssistedInject
|
||||
import im.vector.app.AppStateHandler
|
||||
import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
||||
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.platform.VectorViewModel
|
||||
import im.vector.app.features.analytics.AnalyticsTracker
|
||||
import im.vector.app.features.analytics.plan.CreatedRoom
|
||||
@ -138,7 +137,7 @@ class CreateRoomViewModel @AssistedInject constructor(
|
||||
CreateRoomAction.Reset -> doReset()
|
||||
CreateRoomAction.ToggleShowAdvanced -> toggleShowAdvanced()
|
||||
is CreateRoomAction.DisableFederation -> disableFederation(action)
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun disableFederation(action: CreateRoomAction.DisableFederation) {
|
||||
@ -281,7 +280,7 @@ class CreateRoomViewModel @AssistedInject constructor(
|
||||
// Preset
|
||||
preset = CreateRoomPreset.PRESET_PRIVATE_CHAT
|
||||
}
|
||||
}.exhaustive
|
||||
}
|
||||
// Disabling federation
|
||||
disableFederation = state.disableFederation
|
||||
|
||||
|
@ -22,7 +22,6 @@ import android.view.inputmethod.EditorInfo
|
||||
import android.widget.TextView
|
||||
import com.airbnb.epoxy.TypedEpoxyController
|
||||
import com.airbnb.mvrx.Fail
|
||||
import com.airbnb.mvrx.Incomplete
|
||||
import com.airbnb.mvrx.Loading
|
||||
import com.airbnb.mvrx.Success
|
||||
import com.airbnb.mvrx.Uninitialized
|
||||
@ -60,7 +59,7 @@ class RoomDirectoryPickerController @Inject constructor(
|
||||
val host = this
|
||||
|
||||
when (val asyncThirdPartyProtocol = data.asyncThirdPartyRequest) {
|
||||
is Success -> {
|
||||
is Success -> {
|
||||
data.directories.join(
|
||||
each = { _, roomDirectoryServer -> buildDirectory(roomDirectoryServer) },
|
||||
between = { idx, _ -> buildDivider(idx) }
|
||||
@ -71,12 +70,13 @@ class RoomDirectoryPickerController @Inject constructor(
|
||||
heightInPx(host.dimensionConverter.dpToPx(16))
|
||||
}
|
||||
}
|
||||
is Incomplete -> {
|
||||
Uninitialized,
|
||||
is Loading -> {
|
||||
loadingItem {
|
||||
id("loading")
|
||||
}
|
||||
}
|
||||
is Fail -> {
|
||||
is Fail -> {
|
||||
errorWithRetryItem {
|
||||
id("error")
|
||||
text(host.errorFormatter.toHumanReadable(asyncThirdPartyProtocol.error))
|
||||
|
@ -27,7 +27,6 @@ import dagger.assisted.AssistedInject
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
||||
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.platform.EmptyViewEvents
|
||||
import im.vector.app.core.platform.VectorViewModel
|
||||
import im.vector.app.core.resources.StringProvider
|
||||
@ -104,7 +103,7 @@ class RoomDirectoryPickerViewModel @AssistedInject constructor(
|
||||
is RoomDirectoryPickerAction.SetServerUrl -> handleSetServerUrl(action)
|
||||
RoomDirectoryPickerAction.Submit -> handleSubmit()
|
||||
is RoomDirectoryPickerAction.RemoveServer -> handleRemoveServer(action)
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleEnterEditMode() {
|
||||
|
@ -24,7 +24,6 @@ import dagger.assisted.AssistedFactory
|
||||
import dagger.assisted.AssistedInject
|
||||
import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
||||
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.platform.EmptyViewEvents
|
||||
import im.vector.app.core.platform.VectorViewModel
|
||||
import im.vector.app.features.analytics.AnalyticsTracker
|
||||
@ -204,7 +203,7 @@ class RoomPreviewViewModel @AssistedInject constructor(
|
||||
when (action) {
|
||||
is RoomPreviewAction.Join -> handleJoinRoom()
|
||||
RoomPreviewAction.JoinThirdParty -> handleJoinRoomThirdParty()
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleJoinRoomThirdParty() = withState { state ->
|
||||
|
@ -25,8 +25,9 @@ import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.core.view.isVisible
|
||||
import com.airbnb.mvrx.Fail
|
||||
import com.airbnb.mvrx.Incomplete
|
||||
import com.airbnb.mvrx.Loading
|
||||
import com.airbnb.mvrx.Success
|
||||
import com.airbnb.mvrx.Uninitialized
|
||||
import com.airbnb.mvrx.args
|
||||
import com.airbnb.mvrx.fragmentViewModel
|
||||
import com.airbnb.mvrx.withState
|
||||
@ -38,7 +39,6 @@ import im.vector.app.core.dialogs.ConfirmationDialogBuilder
|
||||
import im.vector.app.core.extensions.cleanup
|
||||
import im.vector.app.core.extensions.configureWith
|
||||
import im.vector.app.core.extensions.copyOnLongClick
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.extensions.setTextOrHide
|
||||
import im.vector.app.core.platform.StateView
|
||||
import im.vector.app.core.platform.VectorBaseFragment
|
||||
@ -133,7 +133,7 @@ class RoomMemberProfileFragment @Inject constructor(
|
||||
is RoomMemberProfileViewEvents.OnBanActionSuccess -> Unit
|
||||
is RoomMemberProfileViewEvents.OnIgnoreActionSuccess -> Unit
|
||||
is RoomMemberProfileViewEvents.OnInviteActionSuccess -> Unit
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
setupLongClicks()
|
||||
}
|
||||
@ -198,18 +198,19 @@ class RoomMemberProfileFragment @Inject constructor(
|
||||
|
||||
override fun invalidate() = withState(viewModel) { state ->
|
||||
when (val asyncUserMatrixItem = state.userMatrixItem) {
|
||||
is Incomplete -> {
|
||||
Uninitialized,
|
||||
is Loading -> {
|
||||
views.matrixProfileToolbarTitleView.text = state.userId
|
||||
avatarRenderer.render(MatrixItem.UserItem(state.userId, null, null), views.matrixProfileToolbarAvatarImageView)
|
||||
headerViews.memberProfileStateView.state = StateView.State.Loading
|
||||
}
|
||||
is Fail -> {
|
||||
is Fail -> {
|
||||
avatarRenderer.render(MatrixItem.UserItem(state.userId, null, null), views.matrixProfileToolbarAvatarImageView)
|
||||
views.matrixProfileToolbarTitleView.text = state.userId
|
||||
val failureMessage = errorFormatter.toHumanReadable(asyncUserMatrixItem.error)
|
||||
headerViews.memberProfileStateView.state = StateView.State.Error(failureMessage)
|
||||
}
|
||||
is Success -> {
|
||||
is Success -> {
|
||||
val userMatrixItem = asyncUserMatrixItem()
|
||||
headerViews.memberProfileStateView.state = StateView.State.Content
|
||||
headerViews.memberProfileIdView.text = userMatrixItem.id
|
||||
|
@ -28,7 +28,6 @@ import dagger.assisted.AssistedInject
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
||||
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
||||
import im.vector.app.core.extensions.exhaustive
|
||||
import im.vector.app.core.mvrx.runCatchingToAsync
|
||||
import im.vector.app.core.platform.VectorViewModel
|
||||
import im.vector.app.core.resources.StringProvider
|
||||
@ -170,7 +169,7 @@ class RoomMemberProfileViewModel @AssistedInject constructor(
|
||||
RoomMemberProfileAction.InviteUser -> handleInviteAction()
|
||||
is RoomMemberProfileAction.SetUserColorOverride -> handleSetUserColorOverride(action)
|
||||
is RoomMemberProfileAction.OpenOrCreateDm -> handleOpenOrCreateDm(action)
|
||||
}.exhaustive
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleOpenOrCreateDm(action: RoomMemberProfileAction.OpenOrCreateDm) {
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user