Browse Source

Move SignedOut classes to their own module.

pull/1520/head
Benoit Marty 12 months ago
parent
commit
8f1ccfccf2
  1. 1
      appnav/build.gradle.kts
  2. 12
      appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt
  3. 28
      features/signedout/api/build.gradle.kts
  4. 37
      features/signedout/api/src/main/kotlin/io/element/android/features/signedout/api/SignedOutEntryPoint.kt
  5. 52
      features/signedout/impl/build.gradle.kts
  6. 46
      features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/DefaultSignedOutEntryPoint.kt
  7. 2
      features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/SignedOutEvents.kt
  8. 2
      features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/SignedOutNode.kt
  9. 2
      features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/SignedOutPresenter.kt
  10. 2
      features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/SignedOutState.kt
  11. 2
      features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/SignedOutStateProvider.kt
  12. 3
      features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/SignedOutView.kt
  13. 2
      features/signedout/impl/src/test/kotlin/io/element/android/features/signedout/impl/SignedOutPresenterTest.kt

1
appnav/build.gradle.kts

@ -64,7 +64,6 @@ dependencies { @@ -64,7 +64,6 @@ dependencies {
testImplementation(libs.test.turbine)
testImplementation(projects.libraries.matrix.test)
testImplementation(projects.features.networkmonitor.test)
testImplementation(projects.libraries.sessionStorage.implMemory)
testImplementation(projects.tests.testutils)
testImplementation(projects.features.rageshake.test)
testImplementation(projects.features.rageshake.impl)

12
appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt

@ -42,10 +42,10 @@ import io.element.android.appnav.intent.ResolvedIntent @@ -42,10 +42,10 @@ import io.element.android.appnav.intent.ResolvedIntent
import io.element.android.appnav.root.RootNavStateFlowFactory
import io.element.android.appnav.root.RootPresenter
import io.element.android.appnav.root.RootView
import io.element.android.appnav.signedout.SignedOutNode
import io.element.android.features.login.api.oidc.OidcAction
import io.element.android.features.login.api.oidc.OidcActionFlow
import io.element.android.features.rageshake.api.bugreport.BugReportEntryPoint
import io.element.android.features.signedout.api.SignedOutEntryPoint
import io.element.android.libraries.architecture.BackstackNode
import io.element.android.libraries.architecture.animation.rememberDefaultTransitionHandler
import io.element.android.libraries.architecture.createNode
@ -71,6 +71,7 @@ class RootFlowNode @AssistedInject constructor( @@ -71,6 +71,7 @@ class RootFlowNode @AssistedInject constructor(
private val matrixClientsHolder: MatrixClientsHolder,
private val presenter: RootPresenter,
private val bugReportEntryPoint: BugReportEntryPoint,
private val signedOutEntryPoint: SignedOutEntryPoint,
private val intentResolver: IntentResolver,
private val oidcActionFlow: OidcActionFlow,
) : BackstackNode<RootFlowNode.NavTarget>(
@ -217,8 +218,13 @@ class RootFlowNode @AssistedInject constructor( @@ -217,8 +218,13 @@ class RootFlowNode @AssistedInject constructor(
}
NavTarget.NotLoggedInFlow -> createNode<NotLoggedInFlowNode>(buildContext)
is NavTarget.SignedOutFlow -> {
val inputs = SignedOutNode.Inputs(navTarget.sessionId)
createNode<SignedOutNode>(buildContext, listOf(inputs))
signedOutEntryPoint.nodeBuilder(this, buildContext)
.params(
SignedOutEntryPoint.Params(
sessionId = navTarget.sessionId
)
)
.build()
}
NavTarget.SplashScreen -> splashNode(buildContext)
NavTarget.BugReport -> {

28
features/signedout/api/build.gradle.kts

@ -0,0 +1,28 @@ @@ -0,0 +1,28 @@
/*
* Copyright (c) 2023 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.
*/
plugins {
id("io.element.android-library")
}
android {
namespace = "io.element.android.features.signedout.api"
}
dependencies {
implementation(projects.libraries.architecture)
implementation(projects.libraries.matrix.api)
}

37
features/signedout/api/src/main/kotlin/io/element/android/features/signedout/api/SignedOutEntryPoint.kt

@ -0,0 +1,37 @@ @@ -0,0 +1,37 @@
/*
* Copyright (c) 2023 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 io.element.android.features.signedout.api
import com.bumble.appyx.core.modality.BuildContext
import com.bumble.appyx.core.node.Node
import io.element.android.libraries.architecture.FeatureEntryPoint
import io.element.android.libraries.matrix.api.core.SessionId
interface SignedOutEntryPoint : FeatureEntryPoint {
data class Params(
val sessionId: SessionId,
)
fun nodeBuilder(parentNode: Node, buildContext: BuildContext): NodeBuilder
interface NodeBuilder {
fun params(params: Params): NodeBuilder
fun build(): Node
}
}

52
features/signedout/impl/build.gradle.kts

@ -0,0 +1,52 @@ @@ -0,0 +1,52 @@
/*
* Copyright (c) 2023 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.
*/
plugins {
id("io.element.android-compose-library")
alias(libs.plugins.anvil)
alias(libs.plugins.ksp)
id("kotlin-parcelize")
}
android {
namespace = "io.element.android.features.signedout.impl"
}
anvil {
generateDaggerFactories.set(true)
}
dependencies {
implementation(projects.anvilannotations)
anvil(projects.anvilcodegen)
api(projects.features.signedout.api)
implementation(projects.libraries.core)
implementation(projects.libraries.architecture)
implementation(projects.libraries.matrix.api)
implementation(projects.libraries.matrixui)
implementation(projects.libraries.designsystem)
testImplementation(libs.test.junit)
testImplementation(libs.coroutines.test)
testImplementation(libs.molecule.runtime)
testImplementation(libs.test.truth)
testImplementation(libs.test.turbine)
testImplementation(projects.libraries.matrix.test)
testImplementation(projects.libraries.sessionStorage.implMemory)
testImplementation(projects.tests.testutils)
ksp(libs.showkase.processor)
}

46
features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/DefaultSignedOutEntryPoint.kt

@ -0,0 +1,46 @@ @@ -0,0 +1,46 @@
/*
* Copyright (c) 2023 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 io.element.android.features.signedout.impl
import com.bumble.appyx.core.modality.BuildContext
import com.bumble.appyx.core.node.Node
import com.bumble.appyx.core.plugin.Plugin
import com.squareup.anvil.annotations.ContributesBinding
import io.element.android.features.signedout.api.SignedOutEntryPoint
import io.element.android.libraries.architecture.createNode
import io.element.android.libraries.di.AppScope
import javax.inject.Inject
@ContributesBinding(AppScope::class)
class DefaultSignedOutEntryPoint @Inject constructor() : SignedOutEntryPoint {
override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): SignedOutEntryPoint.NodeBuilder {
val plugins = ArrayList<Plugin>()
return object : SignedOutEntryPoint.NodeBuilder {
override fun params(params: SignedOutEntryPoint.Params): SignedOutEntryPoint.NodeBuilder {
plugins += SignedOutNode.Inputs(params.sessionId)
return this
}
override fun build(): Node {
return parentNode.createNode<SignedOutNode>(buildContext, plugins)
}
}
}
}

2
appnav/src/main/kotlin/io/element/android/appnav/signedout/SignedOutEvents.kt → features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/SignedOutEvents.kt

@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
* limitations under the License.
*/
package io.element.android.appnav.signedout
package io.element.android.features.signedout.impl
sealed interface SignedOutEvents {
data object SignInAgain : SignedOutEvents

2
appnav/src/main/kotlin/io/element/android/appnav/signedout/SignedOutNode.kt → features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/SignedOutNode.kt

@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
* limitations under the License.
*/
package io.element.android.appnav.signedout
package io.element.android.features.signedout.impl
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier

2
appnav/src/main/kotlin/io/element/android/appnav/signedout/SignedOutPresenter.kt → features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/SignedOutPresenter.kt

@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
* limitations under the License.
*/
package io.element.android.appnav.signedout
package io.element.android.features.signedout.impl
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState

2
appnav/src/main/kotlin/io/element/android/appnav/signedout/SignedOutState.kt → features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/SignedOutState.kt

@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
* limitations under the License.
*/
package io.element.android.appnav.signedout
package io.element.android.features.signedout.impl
import io.element.android.libraries.sessionstorage.api.SessionData

2
appnav/src/main/kotlin/io/element/android/appnav/signedout/SignedOutStateProvider.kt → features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/SignedOutStateProvider.kt

@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
* limitations under the License.
*/
package io.element.android.appnav.signedout
package io.element.android.features.signedout.impl
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.libraries.matrix.api.core.SessionId

3
appnav/src/main/kotlin/io/element/android/appnav/signedout/SignedOutView.kt → features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/SignedOutView.kt

@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
* limitations under the License.
*/
package io.element.android.appnav.signedout
package io.element.android.features.signedout.impl
import androidx.activity.compose.BackHandler
import androidx.compose.foundation.background
@ -48,7 +48,6 @@ import io.element.android.libraries.designsystem.utils.CommonDrawables @@ -48,7 +48,6 @@ import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.theme.ElementTheme
import kotlinx.collections.immutable.persistentListOf
// TODO i18n, when wording has been approved.
@Composable
fun SignedOutView(
state: SignedOutState,

2
appnav/src/test/kotlin/io/element/android/appnav/signedout/SignedOutPresenterTest.kt → features/signedout/impl/src/test/kotlin/io/element/android/features/signedout/impl/SignedOutPresenterTest.kt

@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
* limitations under the License.
*/
package io.element.android.appnav.signedout
package io.element.android.features.signedout.impl
import app.cash.molecule.RecompositionMode
import app.cash.molecule.moleculeFlow
Loading…
Cancel
Save