Merge pull request #2957 from element-hq/feature/bma/konsistClassName
Konsist class name
This commit is contained in:
commit
e0c55ff4c8
39 changed files with 131 additions and 143 deletions
|
|
@ -34,7 +34,6 @@ import io.element.android.libraries.designsystem.utils.snackbar.SnackbarDispatch
|
||||||
import io.element.android.libraries.di.AppScope
|
import io.element.android.libraries.di.AppScope
|
||||||
import io.element.android.libraries.di.ApplicationContext
|
import io.element.android.libraries.di.ApplicationContext
|
||||||
import io.element.android.libraries.di.CacheDirectory
|
import io.element.android.libraries.di.CacheDirectory
|
||||||
import io.element.android.libraries.di.DefaultPreferences
|
|
||||||
import io.element.android.libraries.di.SingleIn
|
import io.element.android.libraries.di.SingleIn
|
||||||
import io.element.android.x.BuildConfig
|
import io.element.android.x.BuildConfig
|
||||||
import io.element.android.x.R
|
import io.element.android.x.R
|
||||||
|
|
@ -97,8 +96,7 @@ object AppModule {
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@SingleIn(AppScope::class)
|
@SingleIn(AppScope::class)
|
||||||
@DefaultPreferences
|
fun providesSharedPreferences(@ApplicationContext context: Context): SharedPreferences {
|
||||||
fun providesDefaultSharedPreferences(@ApplicationContext context: Context): SharedPreferences {
|
|
||||||
return PreferenceManager.getDefaultSharedPreferences(context)
|
return PreferenceManager.getDefaultSharedPreferences(context)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ import android.content.Context
|
||||||
import android.system.Os
|
import android.system.Os
|
||||||
import androidx.preference.PreferenceManager
|
import androidx.preference.PreferenceManager
|
||||||
import androidx.startup.Initializer
|
import androidx.startup.Initializer
|
||||||
import io.element.android.features.preferences.impl.developer.tracing.SharedPrefTracingConfigurationStore
|
import io.element.android.features.preferences.impl.developer.tracing.SharedPreferencesTracingConfigurationStore
|
||||||
import io.element.android.features.preferences.impl.developer.tracing.TargetLogLevelMapBuilder
|
import io.element.android.features.preferences.impl.developer.tracing.TargetLogLevelMapBuilder
|
||||||
import io.element.android.libraries.architecture.bindings
|
import io.element.android.libraries.architecture.bindings
|
||||||
import io.element.android.libraries.matrix.api.tracing.TracingConfiguration
|
import io.element.android.libraries.matrix.api.tracing.TracingConfiguration
|
||||||
|
|
@ -38,7 +38,7 @@ class TracingInitializer : Initializer<Unit> {
|
||||||
Timber.plant(tracingService.createTimberTree())
|
Timber.plant(tracingService.createTimberTree())
|
||||||
val tracingConfiguration = if (BuildConfig.DEBUG) {
|
val tracingConfiguration = if (BuildConfig.DEBUG) {
|
||||||
val prefs = PreferenceManager.getDefaultSharedPreferences(context)
|
val prefs = PreferenceManager.getDefaultSharedPreferences(context)
|
||||||
val store = SharedPrefTracingConfigurationStore(prefs)
|
val store = SharedPreferencesTracingConfigurationStore(prefs)
|
||||||
val builder = TargetLogLevelMapBuilder(store)
|
val builder = TargetLogLevelMapBuilder(store)
|
||||||
TracingConfiguration(
|
TracingConfiguration(
|
||||||
filterConfiguration = TracingFilterConfigurations.custom(builder.getCurrentMap()),
|
filterConfiguration = TracingFilterConfigurations.custom(builder.getCurrentMap()),
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ import io.element.android.x.MainActivity
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@ContributesBinding(AppScope::class)
|
@ContributesBinding(AppScope::class)
|
||||||
class IntentProviderImpl @Inject constructor(
|
class DefaultIntentProvider @Inject constructor(
|
||||||
@ApplicationContext private val context: Context,
|
@ApplicationContext private val context: Context,
|
||||||
private val deepLinkCreator: DeepLinkCreator,
|
private val deepLinkCreator: DeepLinkCreator,
|
||||||
) : IntentProvider {
|
) : IntentProvider {
|
||||||
|
|
@ -30,10 +30,10 @@ import org.robolectric.RobolectricTestRunner
|
||||||
import org.robolectric.RuntimeEnvironment
|
import org.robolectric.RuntimeEnvironment
|
||||||
|
|
||||||
@RunWith(RobolectricTestRunner::class)
|
@RunWith(RobolectricTestRunner::class)
|
||||||
class IntentProviderImplTest {
|
class DefaultIntentProviderTest {
|
||||||
@Test
|
@Test
|
||||||
fun `test getViewRoomIntent with Session`() {
|
fun `test getViewRoomIntent with Session`() {
|
||||||
val sut = createIntentProviderImpl()
|
val sut = createDefaultIntentProvider()
|
||||||
val result = sut.getViewRoomIntent(
|
val result = sut.getViewRoomIntent(
|
||||||
sessionId = A_SESSION_ID,
|
sessionId = A_SESSION_ID,
|
||||||
roomId = null,
|
roomId = null,
|
||||||
|
|
@ -45,7 +45,7 @@ class IntentProviderImplTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `test getViewRoomIntent with Session and Room`() {
|
fun `test getViewRoomIntent with Session and Room`() {
|
||||||
val sut = createIntentProviderImpl()
|
val sut = createDefaultIntentProvider()
|
||||||
val result = sut.getViewRoomIntent(
|
val result = sut.getViewRoomIntent(
|
||||||
sessionId = A_SESSION_ID,
|
sessionId = A_SESSION_ID,
|
||||||
roomId = A_ROOM_ID,
|
roomId = A_ROOM_ID,
|
||||||
|
|
@ -57,7 +57,7 @@ class IntentProviderImplTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `test getViewRoomIntent with Session, Room and Thread`() {
|
fun `test getViewRoomIntent with Session, Room and Thread`() {
|
||||||
val sut = createIntentProviderImpl()
|
val sut = createDefaultIntentProvider()
|
||||||
val result = sut.getViewRoomIntent(
|
val result = sut.getViewRoomIntent(
|
||||||
sessionId = A_SESSION_ID,
|
sessionId = A_SESSION_ID,
|
||||||
roomId = A_ROOM_ID,
|
roomId = A_ROOM_ID,
|
||||||
|
|
@ -67,8 +67,8 @@ class IntentProviderImplTest {
|
||||||
assertThat(result.data.toString()).isEqualTo("elementx://open/@alice:server.org/!aRoomId:domain/\$aThreadId")
|
assertThat(result.data.toString()).isEqualTo("elementx://open/@alice:server.org/!aRoomId:domain/\$aThreadId")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createIntentProviderImpl(): IntentProviderImpl {
|
private fun createDefaultIntentProvider(): DefaultIntentProvider {
|
||||||
return IntentProviderImpl(
|
return DefaultIntentProvider(
|
||||||
context = RuntimeEnvironment.getApplication() as Context,
|
context = RuntimeEnvironment.getApplication() as Context,
|
||||||
deepLinkCreator = DeepLinkCreator(),
|
deepLinkCreator = DeepLinkCreator(),
|
||||||
)
|
)
|
||||||
|
|
@ -20,15 +20,14 @@ import android.content.SharedPreferences
|
||||||
import androidx.core.content.edit
|
import androidx.core.content.edit
|
||||||
import com.squareup.anvil.annotations.ContributesBinding
|
import com.squareup.anvil.annotations.ContributesBinding
|
||||||
import io.element.android.libraries.di.AppScope
|
import io.element.android.libraries.di.AppScope
|
||||||
import io.element.android.libraries.di.DefaultPreferences
|
|
||||||
import io.element.android.libraries.di.SingleIn
|
import io.element.android.libraries.di.SingleIn
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@ContributesBinding(AppScope::class)
|
@ContributesBinding(AppScope::class)
|
||||||
@SingleIn(AppScope::class)
|
@SingleIn(AppScope::class)
|
||||||
class AndroidWelcomeScreenState @Inject constructor(
|
class SharedPreferencesWelcomeScreenState @Inject constructor(
|
||||||
@DefaultPreferences private val sharedPreferences: SharedPreferences,
|
private val sharedPreferences: SharedPreferences,
|
||||||
) : WelcomeScreenState {
|
) : WelcomeScreenStore {
|
||||||
companion object {
|
companion object {
|
||||||
private const val IS_WELCOME_SCREEN_SHOWN = "is_welcome_screen_shown"
|
private const val IS_WELCOME_SCREEN_SHOWN = "is_welcome_screen_shown"
|
||||||
}
|
}
|
||||||
|
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
package io.element.android.features.ftue.impl.welcome.state
|
package io.element.android.features.ftue.impl.welcome.state
|
||||||
|
|
||||||
interface WelcomeScreenState {
|
interface WelcomeScreenStore {
|
||||||
fun isWelcomeScreenNeeded(): Boolean
|
fun isWelcomeScreenNeeded(): Boolean
|
||||||
fun setWelcomeScreenShown()
|
fun setWelcomeScreenShown()
|
||||||
fun reset()
|
fun reset()
|
||||||
|
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
package io.element.android.features.ftue.impl.welcome.state
|
package io.element.android.features.ftue.impl.welcome.state
|
||||||
|
|
||||||
class FakeWelcomeScreenState : WelcomeScreenState {
|
class InMemoryWelcomeScreenState : WelcomeScreenStore {
|
||||||
private var isWelcomeScreenNeeded = true
|
private var isWelcomeScreenNeeded = true
|
||||||
|
|
||||||
override fun isWelcomeScreenNeeded(): Boolean {
|
override fun isWelcomeScreenNeeded(): Boolean {
|
||||||
|
|
@ -26,7 +26,7 @@ import io.element.android.libraries.matrix.api.core.RoomId
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@ContributesBinding(SessionScope::class)
|
@ContributesBinding(SessionScope::class)
|
||||||
class AcceptDeclineInviteViewWrapper @Inject constructor() : AcceptDeclineInviteView {
|
class DefaultAcceptDeclineInviteView @Inject constructor() : AcceptDeclineInviteView {
|
||||||
@Composable
|
@Composable
|
||||||
override fun Render(
|
override fun Render(
|
||||||
state: AcceptDeclineInviteState,
|
state: AcceptDeclineInviteState,
|
||||||
|
|
@ -21,6 +21,7 @@ import androidx.compose.runtime.MutableState
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.runtime.rememberCoroutineScope
|
import androidx.compose.runtime.rememberCoroutineScope
|
||||||
|
import com.squareup.anvil.annotations.ContributesBinding
|
||||||
import io.element.android.features.leaveroom.api.LeaveRoomEvent
|
import io.element.android.features.leaveroom.api.LeaveRoomEvent
|
||||||
import io.element.android.features.leaveroom.api.LeaveRoomPresenter
|
import io.element.android.features.leaveroom.api.LeaveRoomPresenter
|
||||||
import io.element.android.features.leaveroom.api.LeaveRoomState
|
import io.element.android.features.leaveroom.api.LeaveRoomState
|
||||||
|
|
@ -29,6 +30,7 @@ import io.element.android.features.leaveroom.api.LeaveRoomState.Confirmation.Gen
|
||||||
import io.element.android.features.leaveroom.api.LeaveRoomState.Confirmation.LastUserInRoom
|
import io.element.android.features.leaveroom.api.LeaveRoomState.Confirmation.LastUserInRoom
|
||||||
import io.element.android.features.leaveroom.api.LeaveRoomState.Confirmation.PrivateRoom
|
import io.element.android.features.leaveroom.api.LeaveRoomState.Confirmation.PrivateRoom
|
||||||
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
||||||
|
import io.element.android.libraries.di.SessionScope
|
||||||
import io.element.android.libraries.matrix.api.MatrixClient
|
import io.element.android.libraries.matrix.api.MatrixClient
|
||||||
import io.element.android.libraries.matrix.api.core.RoomId
|
import io.element.android.libraries.matrix.api.core.RoomId
|
||||||
import io.element.android.libraries.matrix.api.room.RoomMembershipObserver
|
import io.element.android.libraries.matrix.api.room.RoomMembershipObserver
|
||||||
|
|
@ -36,7 +38,8 @@ import kotlinx.coroutines.launch
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
class LeaveRoomPresenterImpl @Inject constructor(
|
@ContributesBinding(SessionScope::class)
|
||||||
|
class DefaultLeaveRoomPresenter @Inject constructor(
|
||||||
private val client: MatrixClient,
|
private val client: MatrixClient,
|
||||||
private val roomMembershipObserver: RoomMembershipObserver,
|
private val roomMembershipObserver: RoomMembershipObserver,
|
||||||
private val dispatchers: CoroutineDispatchers,
|
private val dispatchers: CoroutineDispatchers,
|
||||||
|
|
@ -1,30 +0,0 @@
|
||||||
/*
|
|
||||||
* 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.leaveroom.impl
|
|
||||||
|
|
||||||
import com.squareup.anvil.annotations.ContributesTo
|
|
||||||
import dagger.Binds
|
|
||||||
import dagger.Module
|
|
||||||
import io.element.android.features.leaveroom.api.LeaveRoomPresenter
|
|
||||||
import io.element.android.libraries.di.SessionScope
|
|
||||||
|
|
||||||
@Module
|
|
||||||
@ContributesTo(SessionScope::class)
|
|
||||||
interface LeaveRoomPresenterImplModule {
|
|
||||||
@Binds
|
|
||||||
fun leaveRoomPresenter(leaveRoomPresenter: LeaveRoomPresenterImpl): LeaveRoomPresenter
|
|
||||||
}
|
|
||||||
|
|
@ -21,7 +21,6 @@ import app.cash.molecule.moleculeFlow
|
||||||
import app.cash.turbine.test
|
import app.cash.turbine.test
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
import io.element.android.features.leaveroom.api.LeaveRoomEvent
|
import io.element.android.features.leaveroom.api.LeaveRoomEvent
|
||||||
import io.element.android.features.leaveroom.api.LeaveRoomPresenter
|
|
||||||
import io.element.android.features.leaveroom.api.LeaveRoomState
|
import io.element.android.features.leaveroom.api.LeaveRoomState
|
||||||
import io.element.android.libraries.matrix.api.MatrixClient
|
import io.element.android.libraries.matrix.api.MatrixClient
|
||||||
import io.element.android.libraries.matrix.api.room.RoomMembershipObserver
|
import io.element.android.libraries.matrix.api.room.RoomMembershipObserver
|
||||||
|
|
@ -37,13 +36,13 @@ import kotlinx.coroutines.test.runTest
|
||||||
import org.junit.Rule
|
import org.junit.Rule
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
|
||||||
class LeaveRoomPresenterImplTest {
|
class DefaultLeaveRoomPresenterTest {
|
||||||
@get:Rule
|
@get:Rule
|
||||||
val warmUpRule = WarmUpRule()
|
val warmUpRule = WarmUpRule()
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `present - initial state hides all dialogs`() = runTest {
|
fun `present - initial state hides all dialogs`() = runTest {
|
||||||
val presenter = createLeaveRoomPresenter()
|
val presenter = createDefaultLeaveRoomPresenter()
|
||||||
moleculeFlow(RecompositionMode.Immediate) {
|
moleculeFlow(RecompositionMode.Immediate) {
|
||||||
presenter.present()
|
presenter.present()
|
||||||
}.test {
|
}.test {
|
||||||
|
|
@ -56,7 +55,7 @@ class LeaveRoomPresenterImplTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `present - show generic confirmation`() = runTest {
|
fun `present - show generic confirmation`() = runTest {
|
||||||
val presenter = createLeaveRoomPresenter(
|
val presenter = createDefaultLeaveRoomPresenter(
|
||||||
client = FakeMatrixClient().apply {
|
client = FakeMatrixClient().apply {
|
||||||
givenGetRoomResult(
|
givenGetRoomResult(
|
||||||
roomId = A_ROOM_ID,
|
roomId = A_ROOM_ID,
|
||||||
|
|
@ -76,7 +75,7 @@ class LeaveRoomPresenterImplTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `present - show private room confirmation`() = runTest {
|
fun `present - show private room confirmation`() = runTest {
|
||||||
val presenter = createLeaveRoomPresenter(
|
val presenter = createDefaultLeaveRoomPresenter(
|
||||||
client = FakeMatrixClient().apply {
|
client = FakeMatrixClient().apply {
|
||||||
givenGetRoomResult(
|
givenGetRoomResult(
|
||||||
roomId = A_ROOM_ID,
|
roomId = A_ROOM_ID,
|
||||||
|
|
@ -96,7 +95,7 @@ class LeaveRoomPresenterImplTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `present - show last user in room confirmation`() = runTest {
|
fun `present - show last user in room confirmation`() = runTest {
|
||||||
val presenter = createLeaveRoomPresenter(
|
val presenter = createDefaultLeaveRoomPresenter(
|
||||||
client = FakeMatrixClient().apply {
|
client = FakeMatrixClient().apply {
|
||||||
givenGetRoomResult(
|
givenGetRoomResult(
|
||||||
roomId = A_ROOM_ID,
|
roomId = A_ROOM_ID,
|
||||||
|
|
@ -116,7 +115,7 @@ class LeaveRoomPresenterImplTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `present - show DM confirmation`() = runTest {
|
fun `present - show DM confirmation`() = runTest {
|
||||||
val presenter = createLeaveRoomPresenter(
|
val presenter = createDefaultLeaveRoomPresenter(
|
||||||
client = FakeMatrixClient().apply {
|
client = FakeMatrixClient().apply {
|
||||||
givenGetRoomResult(
|
givenGetRoomResult(
|
||||||
roomId = A_ROOM_ID,
|
roomId = A_ROOM_ID,
|
||||||
|
|
@ -137,7 +136,7 @@ class LeaveRoomPresenterImplTest {
|
||||||
@Test
|
@Test
|
||||||
fun `present - leaving a room leaves the room`() = runTest {
|
fun `present - leaving a room leaves the room`() = runTest {
|
||||||
val roomMembershipObserver = RoomMembershipObserver()
|
val roomMembershipObserver = RoomMembershipObserver()
|
||||||
val presenter = createLeaveRoomPresenter(
|
val presenter = createDefaultLeaveRoomPresenter(
|
||||||
client = FakeMatrixClient().apply {
|
client = FakeMatrixClient().apply {
|
||||||
givenGetRoomResult(
|
givenGetRoomResult(
|
||||||
roomId = A_ROOM_ID,
|
roomId = A_ROOM_ID,
|
||||||
|
|
@ -159,7 +158,7 @@ class LeaveRoomPresenterImplTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `present - show error if leave room fails`() = runTest {
|
fun `present - show error if leave room fails`() = runTest {
|
||||||
val presenter = createLeaveRoomPresenter(
|
val presenter = createDefaultLeaveRoomPresenter(
|
||||||
client = FakeMatrixClient().apply {
|
client = FakeMatrixClient().apply {
|
||||||
givenGetRoomResult(
|
givenGetRoomResult(
|
||||||
roomId = A_ROOM_ID,
|
roomId = A_ROOM_ID,
|
||||||
|
|
@ -183,7 +182,7 @@ class LeaveRoomPresenterImplTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `present - show progress indicator while leaving a room`() = runTest {
|
fun `present - show progress indicator while leaving a room`() = runTest {
|
||||||
val presenter = createLeaveRoomPresenter(
|
val presenter = createDefaultLeaveRoomPresenter(
|
||||||
client = FakeMatrixClient().apply {
|
client = FakeMatrixClient().apply {
|
||||||
givenGetRoomResult(
|
givenGetRoomResult(
|
||||||
roomId = A_ROOM_ID,
|
roomId = A_ROOM_ID,
|
||||||
|
|
@ -205,7 +204,7 @@ class LeaveRoomPresenterImplTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `present - hide error hides the error`() = runTest {
|
fun `present - hide error hides the error`() = runTest {
|
||||||
val presenter = createLeaveRoomPresenter(
|
val presenter = createDefaultLeaveRoomPresenter(
|
||||||
client = FakeMatrixClient().apply {
|
client = FakeMatrixClient().apply {
|
||||||
givenGetRoomResult(
|
givenGetRoomResult(
|
||||||
roomId = A_ROOM_ID,
|
roomId = A_ROOM_ID,
|
||||||
|
|
@ -231,10 +230,10 @@ class LeaveRoomPresenterImplTest {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun TestScope.createLeaveRoomPresenter(
|
private fun TestScope.createDefaultLeaveRoomPresenter(
|
||||||
client: MatrixClient = FakeMatrixClient(),
|
client: MatrixClient = FakeMatrixClient(),
|
||||||
roomMembershipObserver: RoomMembershipObserver = RoomMembershipObserver(),
|
roomMembershipObserver: RoomMembershipObserver = RoomMembershipObserver(),
|
||||||
): LeaveRoomPresenter = LeaveRoomPresenterImpl(
|
): DefaultLeaveRoomPresenter = DefaultLeaveRoomPresenter(
|
||||||
client = client,
|
client = client,
|
||||||
roomMembershipObserver = roomMembershipObserver,
|
roomMembershipObserver = roomMembershipObserver,
|
||||||
dispatchers = testCoroutineDispatchers(false),
|
dispatchers = testCoroutineDispatchers(false),
|
||||||
|
|
@ -26,13 +26,14 @@ import dagger.assisted.AssistedFactory
|
||||||
import dagger.assisted.AssistedInject
|
import dagger.assisted.AssistedInject
|
||||||
import io.element.android.libraries.di.AppScope
|
import io.element.android.libraries.di.AppScope
|
||||||
|
|
||||||
class PermissionsPresenterImpl @AssistedInject constructor(
|
@Suppress("unused")
|
||||||
|
class DefaultPermissionsPresenter @AssistedInject constructor(
|
||||||
@Assisted private val permissions: List<String>
|
@Assisted private val permissions: List<String>
|
||||||
) : PermissionsPresenter {
|
) : PermissionsPresenter {
|
||||||
@AssistedFactory
|
@AssistedFactory
|
||||||
@ContributesBinding(AppScope::class)
|
@ContributesBinding(AppScope::class)
|
||||||
interface Factory : PermissionsPresenter.Factory {
|
interface Factory : PermissionsPresenter.Factory {
|
||||||
override fun create(permissions: List<String>): PermissionsPresenterImpl
|
override fun create(permissions: List<String>): DefaultPermissionsPresenter
|
||||||
}
|
}
|
||||||
|
|
||||||
@OptIn(ExperimentalPermissionsApi::class)
|
@OptIn(ExperimentalPermissionsApi::class)
|
||||||
|
|
@ -25,7 +25,7 @@ import io.element.android.libraries.di.AppScope
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@ContributesBinding(AppScope::class)
|
@ContributesBinding(AppScope::class)
|
||||||
class SendLocationEntryPointImpl @Inject constructor() : SendLocationEntryPoint {
|
class DefaultSendLocationEntryPoint @Inject constructor() : SendLocationEntryPoint {
|
||||||
override fun createNode(
|
override fun createNode(
|
||||||
parentNode: Node,
|
parentNode: Node,
|
||||||
buildContext: BuildContext
|
buildContext: BuildContext
|
||||||
|
|
@ -25,7 +25,7 @@ import io.element.android.libraries.di.AppScope
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@ContributesBinding(AppScope::class)
|
@ContributesBinding(AppScope::class)
|
||||||
class ShowLocationEntryPointImpl @Inject constructor() : ShowLocationEntryPoint {
|
class DefaultShowLocationEntryPoint @Inject constructor() : ShowLocationEntryPoint {
|
||||||
override fun createNode(parentNode: Node, buildContext: BuildContext, inputs: ShowLocationEntryPoint.Inputs): Node {
|
override fun createNode(parentNode: Node, buildContext: BuildContext, inputs: ShowLocationEntryPoint.Inputs): Node {
|
||||||
return parentNode.createNode<ShowLocationNode>(buildContext, listOf(inputs))
|
return parentNode.createNode<ShowLocationNode>(buildContext, listOf(inputs))
|
||||||
}
|
}
|
||||||
|
|
@ -72,7 +72,7 @@ import io.element.android.features.messages.impl.timeline.model.event.TimelineIt
|
||||||
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemUnknownContent
|
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemUnknownContent
|
||||||
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemVideoContent
|
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemVideoContent
|
||||||
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemVoiceContent
|
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemVoiceContent
|
||||||
import io.element.android.features.messages.impl.utils.messagesummary.MessageSummaryFormatterImpl
|
import io.element.android.features.messages.impl.utils.messagesummary.DefaultMessageSummaryFormatter
|
||||||
import io.element.android.libraries.designsystem.components.avatar.Avatar
|
import io.element.android.libraries.designsystem.components.avatar.Avatar
|
||||||
import io.element.android.libraries.designsystem.components.avatar.AvatarSize
|
import io.element.android.libraries.designsystem.components.avatar.AvatarSize
|
||||||
import io.element.android.libraries.designsystem.components.list.ListItemContent
|
import io.element.android.libraries.designsystem.components.list.ListItemContent
|
||||||
|
|
@ -229,7 +229,7 @@ private fun MessageSummary(event: TimelineItem.Event, modifier: Modifier = Modif
|
||||||
}
|
}
|
||||||
|
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
val formatter = remember(context) { MessageSummaryFormatterImpl(context) }
|
val formatter = remember(context) { DefaultMessageSummaryFormatter(context) }
|
||||||
val textContent = remember(event.content) { formatter.format(event) }
|
val textContent = remember(event.content) { formatter.format(event) }
|
||||||
|
|
||||||
when (event.content) {
|
when (event.content) {
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ import javax.inject.Inject
|
||||||
|
|
||||||
@SingleIn(RoomScope::class)
|
@SingleIn(RoomScope::class)
|
||||||
@ContributesBinding(RoomScope::class)
|
@ContributesBinding(RoomScope::class)
|
||||||
class MessageComposerContextImpl @Inject constructor() : MessageComposerContext {
|
class DefaultMessageComposerContext @Inject constructor() : MessageComposerContext {
|
||||||
override var composerMode: MessageComposerMode by mutableStateOf(MessageComposerMode.Normal)
|
override var composerMode: MessageComposerMode by mutableStateOf(MessageComposerMode.Normal)
|
||||||
internal set
|
internal set
|
||||||
}
|
}
|
||||||
|
|
@ -100,7 +100,7 @@ class MessageComposerPresenter @Inject constructor(
|
||||||
private val mediaSender: MediaSender,
|
private val mediaSender: MediaSender,
|
||||||
private val snackbarDispatcher: SnackbarDispatcher,
|
private val snackbarDispatcher: SnackbarDispatcher,
|
||||||
private val analyticsService: AnalyticsService,
|
private val analyticsService: AnalyticsService,
|
||||||
private val messageComposerContext: MessageComposerContextImpl,
|
private val messageComposerContext: DefaultMessageComposerContext,
|
||||||
private val richTextEditorStateFactory: RichTextEditorStateFactory,
|
private val richTextEditorStateFactory: RichTextEditorStateFactory,
|
||||||
private val currentSessionIdHolder: CurrentSessionIdHolder,
|
private val currentSessionIdHolder: CurrentSessionIdHolder,
|
||||||
private val permalinkParser: PermalinkParser,
|
private val permalinkParser: PermalinkParser,
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@ import io.element.android.libraries.ui.strings.CommonStrings
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@ContributesBinding(RoomScope::class)
|
@ContributesBinding(RoomScope::class)
|
||||||
class MessageSummaryFormatterImpl @Inject constructor(
|
class DefaultMessageSummaryFormatter @Inject constructor(
|
||||||
@ApplicationContext private val context: Context,
|
@ApplicationContext private val context: Context,
|
||||||
) : MessageSummaryFormatter {
|
) : MessageSummaryFormatter {
|
||||||
companion object {
|
companion object {
|
||||||
|
|
@ -27,7 +27,7 @@ import io.element.android.features.messages.impl.actionlist.ActionListState
|
||||||
import io.element.android.features.messages.impl.actionlist.model.TimelineItemAction
|
import io.element.android.features.messages.impl.actionlist.model.TimelineItemAction
|
||||||
import io.element.android.features.messages.impl.fixtures.aMessageEvent
|
import io.element.android.features.messages.impl.fixtures.aMessageEvent
|
||||||
import io.element.android.features.messages.impl.fixtures.aTimelineItemsFactory
|
import io.element.android.features.messages.impl.fixtures.aTimelineItemsFactory
|
||||||
import io.element.android.features.messages.impl.messagecomposer.MessageComposerContextImpl
|
import io.element.android.features.messages.impl.messagecomposer.DefaultMessageComposerContext
|
||||||
import io.element.android.features.messages.impl.messagecomposer.MessageComposerPresenter
|
import io.element.android.features.messages.impl.messagecomposer.MessageComposerPresenter
|
||||||
import io.element.android.features.messages.impl.messagesummary.FakeMessageSummaryFormatter
|
import io.element.android.features.messages.impl.messagesummary.FakeMessageSummaryFormatter
|
||||||
import io.element.android.features.messages.impl.textcomposer.TestRichTextEditorStateFactory
|
import io.element.android.features.messages.impl.textcomposer.TestRichTextEditorStateFactory
|
||||||
|
|
@ -793,7 +793,7 @@ class MessagesPresenterTest {
|
||||||
mediaSender = mediaSender,
|
mediaSender = mediaSender,
|
||||||
snackbarDispatcher = SnackbarDispatcher(),
|
snackbarDispatcher = SnackbarDispatcher(),
|
||||||
analyticsService = analyticsService,
|
analyticsService = analyticsService,
|
||||||
messageComposerContext = MessageComposerContextImpl(),
|
messageComposerContext = DefaultMessageComposerContext(),
|
||||||
richTextEditorStateFactory = TestRichTextEditorStateFactory(),
|
richTextEditorStateFactory = TestRichTextEditorStateFactory(),
|
||||||
permissionsPresenterFactory = permissionsPresenterFactory,
|
permissionsPresenterFactory = permissionsPresenterFactory,
|
||||||
currentSessionIdHolder = CurrentSessionIdHolder(FakeMatrixClient(A_SESSION_ID)),
|
currentSessionIdHolder = CurrentSessionIdHolder(FakeMatrixClient(A_SESSION_ID)),
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ import app.cash.turbine.test
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
import im.vector.app.features.analytics.plan.Composer
|
import im.vector.app.features.analytics.plan.Composer
|
||||||
import io.element.android.features.messages.impl.messagecomposer.AttachmentsState
|
import io.element.android.features.messages.impl.messagecomposer.AttachmentsState
|
||||||
import io.element.android.features.messages.impl.messagecomposer.MessageComposerContextImpl
|
import io.element.android.features.messages.impl.messagecomposer.DefaultMessageComposerContext
|
||||||
import io.element.android.features.messages.impl.messagecomposer.MessageComposerEvents
|
import io.element.android.features.messages.impl.messagecomposer.MessageComposerEvents
|
||||||
import io.element.android.features.messages.impl.messagecomposer.MessageComposerPresenter
|
import io.element.android.features.messages.impl.messagecomposer.MessageComposerPresenter
|
||||||
import io.element.android.features.messages.impl.messagecomposer.MessageComposerState
|
import io.element.android.features.messages.impl.messagecomposer.MessageComposerState
|
||||||
|
|
@ -1049,7 +1049,7 @@ class MessageComposerPresenterTest {
|
||||||
MediaSender(mediaPreProcessor, room),
|
MediaSender(mediaPreProcessor, room),
|
||||||
snackbarDispatcher,
|
snackbarDispatcher,
|
||||||
analyticsService,
|
analyticsService,
|
||||||
MessageComposerContextImpl(),
|
DefaultMessageComposerContext(),
|
||||||
TestRichTextEditorStateFactory(),
|
TestRichTextEditorStateFactory(),
|
||||||
currentSessionIdHolder = CurrentSessionIdHolder(FakeMatrixClient(A_SESSION_ID)),
|
currentSessionIdHolder = CurrentSessionIdHolder(FakeMatrixClient(A_SESSION_ID)),
|
||||||
permissionsPresenterFactory = FakePermissionsPresenterFactory(permissionPresenter),
|
permissionsPresenterFactory = FakePermissionsPresenterFactory(permissionPresenter),
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@ import javax.inject.Inject
|
||||||
|
|
||||||
@ContributesBinding(scope = AppScope::class)
|
@ContributesBinding(scope = AppScope::class)
|
||||||
@SingleIn(AppScope::class)
|
@SingleIn(AppScope::class)
|
||||||
class NetworkMonitorImpl @Inject constructor(
|
class DefaultNetworkMonitor @Inject constructor(
|
||||||
@ApplicationContext context: Context,
|
@ApplicationContext context: Context,
|
||||||
appCoroutineScope: CoroutineScope,
|
appCoroutineScope: CoroutineScope,
|
||||||
) : NetworkMonitor {
|
) : NetworkMonitor {
|
||||||
|
|
@ -20,7 +20,6 @@ import android.content.SharedPreferences
|
||||||
import androidx.core.content.edit
|
import androidx.core.content.edit
|
||||||
import com.squareup.anvil.annotations.ContributesBinding
|
import com.squareup.anvil.annotations.ContributesBinding
|
||||||
import io.element.android.libraries.di.AppScope
|
import io.element.android.libraries.di.AppScope
|
||||||
import io.element.android.libraries.di.DefaultPreferences
|
|
||||||
import io.element.android.libraries.matrix.api.tracing.LogLevel
|
import io.element.android.libraries.matrix.api.tracing.LogLevel
|
||||||
import io.element.android.libraries.matrix.api.tracing.Target
|
import io.element.android.libraries.matrix.api.tracing.Target
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
@ -32,8 +31,8 @@ interface TracingConfigurationStore {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ContributesBinding(AppScope::class)
|
@ContributesBinding(AppScope::class)
|
||||||
class SharedPrefTracingConfigurationStore @Inject constructor(
|
class SharedPreferencesTracingConfigurationStore @Inject constructor(
|
||||||
@DefaultPreferences private val sharedPreferences: SharedPreferences
|
private val sharedPreferences: SharedPreferences
|
||||||
) : TracingConfigurationStore {
|
) : TracingConfigurationStore {
|
||||||
override fun getLogLevel(target: Target): LogLevel? {
|
override fun getLogLevel(target: Target): LogLevel? {
|
||||||
return sharedPreferences.getString("$KEY_PREFIX${target.name}", null)
|
return sharedPreferences.getString("$KEY_PREFIX${target.name}", null)
|
||||||
|
|
|
||||||
|
|
@ -22,13 +22,12 @@ import com.squareup.anvil.annotations.ContributesBinding
|
||||||
import io.element.android.features.roomlist.api.migration.MigrationScreenStore
|
import io.element.android.features.roomlist.api.migration.MigrationScreenStore
|
||||||
import io.element.android.libraries.androidutils.hash.hash
|
import io.element.android.libraries.androidutils.hash.hash
|
||||||
import io.element.android.libraries.di.AppScope
|
import io.element.android.libraries.di.AppScope
|
||||||
import io.element.android.libraries.di.DefaultPreferences
|
|
||||||
import io.element.android.libraries.matrix.api.core.SessionId
|
import io.element.android.libraries.matrix.api.core.SessionId
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@ContributesBinding(AppScope::class)
|
@ContributesBinding(AppScope::class)
|
||||||
class SharedPrefsMigrationScreenStore @Inject constructor(
|
class SharedPreferencesMigrationScreenStore @Inject constructor(
|
||||||
@DefaultPreferences private val sharedPreferences: SharedPreferences,
|
private val sharedPreferences: SharedPreferences,
|
||||||
) : MigrationScreenStore {
|
) : MigrationScreenStore {
|
||||||
override fun isMigrationScreenNeeded(sessionId: SessionId): Boolean {
|
override fun isMigrationScreenNeeded(sessionId: SessionId): Boolean {
|
||||||
return sharedPreferences.getBoolean(sessionId.toKey(), false).not()
|
return sharedPreferences.getBoolean(sessionId.toKey(), false).not()
|
||||||
|
|
@ -1,21 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2022 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.libraries.di
|
|
||||||
|
|
||||||
import javax.inject.Qualifier
|
|
||||||
|
|
||||||
@Qualifier annotation class DefaultPreferences
|
|
||||||
|
|
@ -37,7 +37,7 @@ import java.util.UUID
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@ContributesBinding(AppScope::class)
|
@ContributesBinding(AppScope::class)
|
||||||
class PickerProviderImpl(private val isInTest: Boolean) : PickerProvider {
|
class DefaultPickerProvider(private val isInTest: Boolean) : PickerProvider {
|
||||||
@Inject
|
@Inject
|
||||||
constructor() : this(false)
|
constructor() : this(false)
|
||||||
|
|
||||||
|
|
@ -43,7 +43,7 @@ import kotlin.time.Duration.Companion.seconds
|
||||||
*/
|
*/
|
||||||
@ContributesBinding(RoomScope::class)
|
@ContributesBinding(RoomScope::class)
|
||||||
@SingleIn(RoomScope::class)
|
@SingleIn(RoomScope::class)
|
||||||
class MediaPlayerImpl @Inject constructor(
|
class DefaultMediaPlayer @Inject constructor(
|
||||||
private val player: SimplePlayer,
|
private val player: SimplePlayer,
|
||||||
) : MediaPlayer {
|
) : MediaPlayer {
|
||||||
private val listener = object : SimplePlayer.Listener {
|
private val listener = object : SimplePlayer.Listener {
|
||||||
|
|
@ -55,13 +55,13 @@ object SimplePlayerModule {
|
||||||
@Provides
|
@Provides
|
||||||
fun simplePlayerProvider(
|
fun simplePlayerProvider(
|
||||||
@ApplicationContext context: Context,
|
@ApplicationContext context: Context,
|
||||||
): SimplePlayer = SimplePlayerImpl(ExoPlayer.Builder(context).build())
|
): SimplePlayer = DefaultSimplePlayer(ExoPlayer.Builder(context).build())
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default implementation of [SimplePlayer] backed by a media3 [Player].
|
* Default implementation of [SimplePlayer] backed by a media3 [Player].
|
||||||
*/
|
*/
|
||||||
class SimplePlayerImpl(
|
class DefaultSimplePlayer(
|
||||||
private val p: Player
|
private val p: Player
|
||||||
) : SimplePlayer {
|
) : SimplePlayer {
|
||||||
override fun addListener(listener: SimplePlayer.Listener) {
|
override fun addListener(listener: SimplePlayer.Listener) {
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ package io.element.android.libraries.mediaplayer.impl
|
||||||
import kotlinx.coroutines.test.runTest
|
import kotlinx.coroutines.test.runTest
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
|
||||||
class MediaPlayerImplTest {
|
class DefaultMediaPlayerTest {
|
||||||
@Test
|
@Test
|
||||||
fun `default test`() = runTest {
|
fun `default test`() = runTest {
|
||||||
// TODO
|
// TODO
|
||||||
|
|
@ -20,7 +20,6 @@ import android.content.SharedPreferences
|
||||||
import androidx.core.content.edit
|
import androidx.core.content.edit
|
||||||
import com.squareup.anvil.annotations.ContributesBinding
|
import com.squareup.anvil.annotations.ContributesBinding
|
||||||
import io.element.android.libraries.di.AppScope
|
import io.element.android.libraries.di.AppScope
|
||||||
import io.element.android.libraries.di.DefaultPreferences
|
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -32,15 +31,15 @@ interface FirebaseStore {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ContributesBinding(AppScope::class)
|
@ContributesBinding(AppScope::class)
|
||||||
class DefaultFirebaseStore @Inject constructor(
|
class SharedPreferencesFirebaseStore @Inject constructor(
|
||||||
@DefaultPreferences private val sharedPrefs: SharedPreferences,
|
private val sharedPreferences: SharedPreferences,
|
||||||
) : FirebaseStore {
|
) : FirebaseStore {
|
||||||
override fun getFcmToken(): String? {
|
override fun getFcmToken(): String? {
|
||||||
return sharedPrefs.getString(PREFS_KEY_FCM_TOKEN, null)
|
return sharedPreferences.getString(PREFS_KEY_FCM_TOKEN, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun storeFcmToken(token: String?) {
|
override fun storeFcmToken(token: String?) {
|
||||||
sharedPrefs.edit {
|
sharedPreferences.edit {
|
||||||
putString(PREFS_KEY_FCM_TOKEN, token)
|
putString(PREFS_KEY_FCM_TOKEN, token)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,6 @@ import androidx.core.content.edit
|
||||||
import com.squareup.anvil.annotations.ContributesBinding
|
import com.squareup.anvil.annotations.ContributesBinding
|
||||||
import io.element.android.libraries.di.AppScope
|
import io.element.android.libraries.di.AppScope
|
||||||
import io.element.android.libraries.di.ApplicationContext
|
import io.element.android.libraries.di.ApplicationContext
|
||||||
import io.element.android.libraries.di.DefaultPreferences
|
|
||||||
import io.element.android.libraries.matrix.api.core.UserId
|
import io.element.android.libraries.matrix.api.core.UserId
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
|
@ -36,9 +35,9 @@ interface UnifiedPushStore {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ContributesBinding(AppScope::class)
|
@ContributesBinding(AppScope::class)
|
||||||
class DefaultUnifiedPushStore @Inject constructor(
|
class SharedPreferencesUnifiedPushStore @Inject constructor(
|
||||||
@ApplicationContext val context: Context,
|
@ApplicationContext val context: Context,
|
||||||
@DefaultPreferences private val defaultPrefs: SharedPreferences,
|
private val sharedPreferences: SharedPreferences,
|
||||||
) : UnifiedPushStore {
|
) : UnifiedPushStore {
|
||||||
/**
|
/**
|
||||||
* Retrieves the UnifiedPush Endpoint.
|
* Retrieves the UnifiedPush Endpoint.
|
||||||
|
|
@ -47,7 +46,7 @@ class DefaultUnifiedPushStore @Inject constructor(
|
||||||
* @return the UnifiedPush Endpoint or null if not received
|
* @return the UnifiedPush Endpoint or null if not received
|
||||||
*/
|
*/
|
||||||
override fun getEndpoint(clientSecret: String): String? {
|
override fun getEndpoint(clientSecret: String): String? {
|
||||||
return defaultPrefs.getString(PREFS_ENDPOINT_OR_TOKEN + clientSecret, null)
|
return sharedPreferences.getString(PREFS_ENDPOINT_OR_TOKEN + clientSecret, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -57,7 +56,7 @@ class DefaultUnifiedPushStore @Inject constructor(
|
||||||
* @param endpoint the endpoint to store
|
* @param endpoint the endpoint to store
|
||||||
*/
|
*/
|
||||||
override fun storeUpEndpoint(clientSecret: String, endpoint: String?) {
|
override fun storeUpEndpoint(clientSecret: String, endpoint: String?) {
|
||||||
defaultPrefs.edit {
|
sharedPreferences.edit {
|
||||||
putString(PREFS_ENDPOINT_OR_TOKEN + clientSecret, endpoint)
|
putString(PREFS_ENDPOINT_OR_TOKEN + clientSecret, endpoint)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -69,7 +68,7 @@ class DefaultUnifiedPushStore @Inject constructor(
|
||||||
* @return the Push Gateway or null if not defined
|
* @return the Push Gateway or null if not defined
|
||||||
*/
|
*/
|
||||||
override fun getPushGateway(clientSecret: String): String? {
|
override fun getPushGateway(clientSecret: String): String? {
|
||||||
return defaultPrefs.getString(PREFS_PUSH_GATEWAY + clientSecret, null)
|
return sharedPreferences.getString(PREFS_PUSH_GATEWAY + clientSecret, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -79,17 +78,17 @@ class DefaultUnifiedPushStore @Inject constructor(
|
||||||
* @param gateway the push gateway to store
|
* @param gateway the push gateway to store
|
||||||
*/
|
*/
|
||||||
override fun storePushGateway(clientSecret: String, gateway: String?) {
|
override fun storePushGateway(clientSecret: String, gateway: String?) {
|
||||||
defaultPrefs.edit {
|
sharedPreferences.edit {
|
||||||
putString(PREFS_PUSH_GATEWAY + clientSecret, gateway)
|
putString(PREFS_PUSH_GATEWAY + clientSecret, gateway)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getDistributorValue(userId: UserId): String? {
|
override fun getDistributorValue(userId: UserId): String? {
|
||||||
return defaultPrefs.getString(PREFS_DISTRIBUTOR + userId, null)
|
return sharedPreferences.getString(PREFS_DISTRIBUTOR + userId, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setDistributorValue(userId: UserId, value: String) {
|
override fun setDistributorValue(userId: UserId, value: String) {
|
||||||
defaultPrefs.edit {
|
sharedPreferences.edit {
|
||||||
putString(PREFS_DISTRIBUTOR + userId, value)
|
putString(PREFS_DISTRIBUTOR + userId, value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ import javax.inject.Inject
|
||||||
private val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "push_client_secret_store")
|
private val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "push_client_secret_store")
|
||||||
|
|
||||||
@ContributesBinding(AppScope::class)
|
@ContributesBinding(AppScope::class)
|
||||||
class PushClientSecretStoreDataStore @Inject constructor(
|
class DataStorePushClientSecretStore @Inject constructor(
|
||||||
@ApplicationContext private val context: Context,
|
@ApplicationContext private val context: Context,
|
||||||
) : PushClientSecretStore {
|
) : PushClientSecretStore {
|
||||||
override suspend fun storeSecret(userId: SessionId, clientSecret: String) {
|
override suspend fun storeSecret(userId: SessionId, clientSecret: String) {
|
||||||
|
|
@ -29,7 +29,7 @@ import javax.inject.Inject
|
||||||
|
|
||||||
@SingleIn(AppScope::class)
|
@SingleIn(AppScope::class)
|
||||||
@ContributesBinding(AppScope::class, boundType = PushClientSecret::class)
|
@ContributesBinding(AppScope::class, boundType = PushClientSecret::class)
|
||||||
class PushClientSecretImpl @Inject constructor(
|
class DefaultPushClientSecret @Inject constructor(
|
||||||
private val pushClientSecretFactory: PushClientSecretFactory,
|
private val pushClientSecretFactory: PushClientSecretFactory,
|
||||||
private val pushClientSecretStore: PushClientSecretStore,
|
private val pushClientSecretStore: PushClientSecretStore,
|
||||||
private val sessionObserver: SessionObserver,
|
private val sessionObserver: SessionObserver,
|
||||||
|
|
@ -23,7 +23,7 @@ import java.util.UUID
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@ContributesBinding(AppScope::class)
|
@ContributesBinding(AppScope::class)
|
||||||
class PushClientSecretFactoryImpl @Inject constructor() : PushClientSecretFactory {
|
class DefaultPushClientSecretFactory @Inject constructor() : PushClientSecretFactory {
|
||||||
override fun create(): String {
|
override fun create(): String {
|
||||||
return UUID.randomUUID().toString()
|
return UUID.randomUUID().toString()
|
||||||
}
|
}
|
||||||
|
|
@ -28,12 +28,12 @@ private val A_USER_ID_1 = SessionId("@A_USER_ID_1:domain")
|
||||||
|
|
||||||
private const val A_UNKNOWN_SECRET = "A_UNKNOWN_SECRET"
|
private const val A_UNKNOWN_SECRET = "A_UNKNOWN_SECRET"
|
||||||
|
|
||||||
internal class PushClientSecretImplTest {
|
internal class DefaultPushClientSecretTest {
|
||||||
@Test
|
@Test
|
||||||
fun test() = runTest {
|
fun test() = runTest {
|
||||||
val factory = FakePushClientSecretFactory()
|
val factory = FakePushClientSecretFactory()
|
||||||
val store = InMemoryPushClientSecretStore()
|
val store = InMemoryPushClientSecretStore()
|
||||||
val sut = PushClientSecretImpl(factory, store, NoOpSessionObserver())
|
val sut = DefaultPushClientSecret(factory, store, NoOpSessionObserver())
|
||||||
|
|
||||||
val secret0 = factory.getSecretForUser(0)
|
val secret0 = factory.getSecretForUser(0)
|
||||||
val secret1 = factory.getSecretForUser(1)
|
val secret1 = factory.getSecretForUser(1)
|
||||||
|
|
@ -51,7 +51,7 @@ import kotlin.time.TimeSource
|
||||||
|
|
||||||
@SingleIn(RoomScope::class)
|
@SingleIn(RoomScope::class)
|
||||||
@ContributesBinding(RoomScope::class)
|
@ContributesBinding(RoomScope::class)
|
||||||
class VoiceRecorderImpl @Inject constructor(
|
class DefaultVoiceRecorder @Inject constructor(
|
||||||
private val dispatchers: CoroutineDispatchers,
|
private val dispatchers: CoroutineDispatchers,
|
||||||
private val timeSource: TimeSource,
|
private val timeSource: TimeSource,
|
||||||
private val audioReaderFactory: AudioReader.Factory,
|
private val audioReaderFactory: AudioReader.Factory,
|
||||||
|
|
@ -44,13 +44,13 @@ import kotlin.time.Duration.Companion.minutes
|
||||||
import kotlin.time.Duration.Companion.seconds
|
import kotlin.time.Duration.Companion.seconds
|
||||||
import kotlin.time.TestTimeSource
|
import kotlin.time.TestTimeSource
|
||||||
|
|
||||||
class VoiceRecorderImplTest {
|
class DefaultVoiceRecorderTest {
|
||||||
private val fakeFileSystem = FakeFileSystem()
|
private val fakeFileSystem = FakeFileSystem()
|
||||||
private val timeSource = TestTimeSource()
|
private val timeSource = TestTimeSource()
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `it emits the initial state`() = runTest {
|
fun `it emits the initial state`() = runTest {
|
||||||
val voiceRecorder = createVoiceRecorder()
|
val voiceRecorder = createDefaultVoiceRecorder()
|
||||||
voiceRecorder.state.test {
|
voiceRecorder.state.test {
|
||||||
assertThat(awaitItem()).isEqualTo(VoiceRecorderState.Idle)
|
assertThat(awaitItem()).isEqualTo(VoiceRecorderState.Idle)
|
||||||
}
|
}
|
||||||
|
|
@ -58,7 +58,7 @@ class VoiceRecorderImplTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `when recording, it emits the recording state`() = runTest {
|
fun `when recording, it emits the recording state`() = runTest {
|
||||||
val voiceRecorder = createVoiceRecorder()
|
val voiceRecorder = createDefaultVoiceRecorder()
|
||||||
voiceRecorder.state.test {
|
voiceRecorder.state.test {
|
||||||
assertThat(awaitItem()).isEqualTo(VoiceRecorderState.Idle)
|
assertThat(awaitItem()).isEqualTo(VoiceRecorderState.Idle)
|
||||||
|
|
||||||
|
|
@ -73,7 +73,7 @@ class VoiceRecorderImplTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `when elapsed time reaches 30 minutes, it stops recording`() = runTest {
|
fun `when elapsed time reaches 30 minutes, it stops recording`() = runTest {
|
||||||
val voiceRecorder = createVoiceRecorder()
|
val voiceRecorder = createDefaultVoiceRecorder()
|
||||||
voiceRecorder.state.test {
|
voiceRecorder.state.test {
|
||||||
assertThat(awaitItem()).isEqualTo(VoiceRecorderState.Idle)
|
assertThat(awaitItem()).isEqualTo(VoiceRecorderState.Idle)
|
||||||
|
|
||||||
|
|
@ -96,7 +96,7 @@ class VoiceRecorderImplTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `when stopped, it provides a file and duration`() = runTest {
|
fun `when stopped, it provides a file and duration`() = runTest {
|
||||||
val voiceRecorder = createVoiceRecorder()
|
val voiceRecorder = createDefaultVoiceRecorder()
|
||||||
voiceRecorder.state.test {
|
voiceRecorder.state.test {
|
||||||
assertThat(awaitItem()).isEqualTo(VoiceRecorderState.Idle)
|
assertThat(awaitItem()).isEqualTo(VoiceRecorderState.Idle)
|
||||||
|
|
||||||
|
|
@ -119,7 +119,7 @@ class VoiceRecorderImplTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `when cancelled, it deletes the file`() = runTest {
|
fun `when cancelled, it deletes the file`() = runTest {
|
||||||
val voiceRecorder = createVoiceRecorder()
|
val voiceRecorder = createDefaultVoiceRecorder()
|
||||||
voiceRecorder.state.test {
|
voiceRecorder.state.test {
|
||||||
assertThat(awaitItem()).isEqualTo(VoiceRecorderState.Idle)
|
assertThat(awaitItem()).isEqualTo(VoiceRecorderState.Idle)
|
||||||
|
|
||||||
|
|
@ -131,9 +131,9 @@ class VoiceRecorderImplTest {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun TestScope.createVoiceRecorder(): VoiceRecorderImpl {
|
private fun TestScope.createDefaultVoiceRecorder(): DefaultVoiceRecorder {
|
||||||
val fileConfig = VoiceRecorderModule.provideVoiceFileConfig()
|
val fileConfig = VoiceRecorderModule.provideVoiceFileConfig()
|
||||||
return VoiceRecorderImpl(
|
return DefaultVoiceRecorder(
|
||||||
dispatchers = testCoroutineDispatchers(),
|
dispatchers = testCoroutineDispatchers(),
|
||||||
timeSource = timeSource,
|
timeSource = timeSource,
|
||||||
audioReaderFactory = FakeAudioReaderFactory(
|
audioReaderFactory = FakeAudioReaderFactory(
|
||||||
|
|
@ -162,6 +162,8 @@ fun Project.setupKover() {
|
||||||
"io.element.android.appnav.loggedin.LoggedInPresenter$*",
|
"io.element.android.appnav.loggedin.LoggedInPresenter$*",
|
||||||
// Some options can't be tested at the moment
|
// Some options can't be tested at the moment
|
||||||
"io.element.android.features.preferences.impl.developer.DeveloperSettingsPresenter$*",
|
"io.element.android.features.preferences.impl.developer.DeveloperSettingsPresenter$*",
|
||||||
|
// Need an Activity to use rememberMultiplePermissionsState
|
||||||
|
"io.element.android.features.location.impl.common.permissions.DefaultPermissionsPresenter",
|
||||||
"*Presenter\$present\$*",
|
"*Presenter\$present\$*",
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,8 +22,8 @@ import androidx.compose.runtime.DisposableEffect
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import io.element.android.features.invite.impl.response.AcceptDeclineInvitePresenter
|
import io.element.android.features.invite.impl.response.AcceptDeclineInvitePresenter
|
||||||
import io.element.android.features.invite.impl.response.AcceptDeclineInviteView
|
import io.element.android.features.invite.impl.response.AcceptDeclineInviteView
|
||||||
import io.element.android.features.leaveroom.impl.LeaveRoomPresenterImpl
|
import io.element.android.features.leaveroom.impl.DefaultLeaveRoomPresenter
|
||||||
import io.element.android.features.networkmonitor.impl.NetworkMonitorImpl
|
import io.element.android.features.networkmonitor.impl.DefaultNetworkMonitor
|
||||||
import io.element.android.features.roomlist.impl.RoomListPresenter
|
import io.element.android.features.roomlist.impl.RoomListPresenter
|
||||||
import io.element.android.features.roomlist.impl.RoomListView
|
import io.element.android.features.roomlist.impl.RoomListView
|
||||||
import io.element.android.features.roomlist.impl.datasource.RoomListDataSource
|
import io.element.android.features.roomlist.impl.datasource.RoomListDataSource
|
||||||
|
|
@ -31,7 +31,7 @@ import io.element.android.features.roomlist.impl.datasource.RoomListRoomSummaryF
|
||||||
import io.element.android.features.roomlist.impl.filters.RoomListFiltersPresenter
|
import io.element.android.features.roomlist.impl.filters.RoomListFiltersPresenter
|
||||||
import io.element.android.features.roomlist.impl.filters.selection.DefaultFilterSelectionStrategy
|
import io.element.android.features.roomlist.impl.filters.selection.DefaultFilterSelectionStrategy
|
||||||
import io.element.android.features.roomlist.impl.migration.MigrationScreenPresenter
|
import io.element.android.features.roomlist.impl.migration.MigrationScreenPresenter
|
||||||
import io.element.android.features.roomlist.impl.migration.SharedPrefsMigrationScreenStore
|
import io.element.android.features.roomlist.impl.migration.SharedPreferencesMigrationScreenStore
|
||||||
import io.element.android.features.roomlist.impl.search.RoomListSearchDataSource
|
import io.element.android.features.roomlist.impl.search.RoomListSearchDataSource
|
||||||
import io.element.android.features.roomlist.impl.search.RoomListSearchPresenter
|
import io.element.android.features.roomlist.impl.search.RoomListSearchPresenter
|
||||||
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
||||||
|
|
@ -97,9 +97,9 @@ class RoomListScreen(
|
||||||
)
|
)
|
||||||
private val presenter = RoomListPresenter(
|
private val presenter = RoomListPresenter(
|
||||||
client = matrixClient,
|
client = matrixClient,
|
||||||
networkMonitor = NetworkMonitorImpl(context, Singleton.appScope),
|
networkMonitor = DefaultNetworkMonitor(context, Singleton.appScope),
|
||||||
snackbarDispatcher = SnackbarDispatcher(),
|
snackbarDispatcher = SnackbarDispatcher(),
|
||||||
leaveRoomPresenter = LeaveRoomPresenterImpl(matrixClient, RoomMembershipObserver(), coroutineDispatchers),
|
leaveRoomPresenter = DefaultLeaveRoomPresenter(matrixClient, RoomMembershipObserver(), coroutineDispatchers),
|
||||||
roomListDataSource = RoomListDataSource(
|
roomListDataSource = RoomListDataSource(
|
||||||
roomListService = matrixClient.roomListService,
|
roomListService = matrixClient.roomListService,
|
||||||
roomListRoomSummaryFactory = roomListRoomSummaryFactory,
|
roomListRoomSummaryFactory = roomListRoomSummaryFactory,
|
||||||
|
|
@ -114,7 +114,7 @@ class RoomListScreen(
|
||||||
featureFlagService = featureFlagService,
|
featureFlagService = featureFlagService,
|
||||||
migrationScreenPresenter = MigrationScreenPresenter(
|
migrationScreenPresenter = MigrationScreenPresenter(
|
||||||
matrixClient = matrixClient,
|
matrixClient = matrixClient,
|
||||||
migrationScreenStore = SharedPrefsMigrationScreenStore(context.getSharedPreferences("migration", Context.MODE_PRIVATE))
|
migrationScreenStore = SharedPreferencesMigrationScreenStore(context.getSharedPreferences("migration", Context.MODE_PRIVATE))
|
||||||
),
|
),
|
||||||
searchPresenter = RoomListSearchPresenter(
|
searchPresenter = RoomListSearchPresenter(
|
||||||
RoomListSearchDataSource(
|
RoomListSearchDataSource(
|
||||||
|
|
|
||||||
|
|
@ -20,8 +20,12 @@ import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||||
import com.bumble.appyx.core.node.Node
|
import com.bumble.appyx.core.node.Node
|
||||||
import com.lemonappdev.konsist.api.Konsist
|
import com.lemonappdev.konsist.api.Konsist
|
||||||
import com.lemonappdev.konsist.api.ext.list.withAllParentsOf
|
import com.lemonappdev.konsist.api.ext.list.withAllParentsOf
|
||||||
|
import com.lemonappdev.konsist.api.ext.list.withAnnotationNamed
|
||||||
import com.lemonappdev.konsist.api.ext.list.withNameContaining
|
import com.lemonappdev.konsist.api.ext.list.withNameContaining
|
||||||
|
import com.lemonappdev.konsist.api.ext.list.withNameEndingWith
|
||||||
import com.lemonappdev.konsist.api.ext.list.withoutName
|
import com.lemonappdev.konsist.api.ext.list.withoutName
|
||||||
|
import com.lemonappdev.konsist.api.ext.list.withoutNameStartingWith
|
||||||
|
import com.lemonappdev.konsist.api.verify.assertEmpty
|
||||||
import com.lemonappdev.konsist.api.verify.assertTrue
|
import com.lemonappdev.konsist.api.verify.assertTrue
|
||||||
import io.element.android.libraries.architecture.Presenter
|
import io.element.android.libraries.architecture.Presenter
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
|
@ -81,4 +85,41 @@ class KonsistClassNameTest {
|
||||||
it.parents().any { parent -> parent.name.replace(".", "") == interfaceName }
|
it.parents().any { parent -> parent.name.replace(".", "") == interfaceName }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `Class implementing interface should have name not end with 'Impl' but start with 'Default'`() {
|
||||||
|
Konsist.scopeFromProject()
|
||||||
|
.classes()
|
||||||
|
.withNameEndingWith("Impl")
|
||||||
|
.withoutName("MediaUploadHandlerImpl")
|
||||||
|
.assertEmpty(additionalMessage = "Class implementing interface should have name not end with 'Impl' but start with 'Default'")
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `Class with 'ContributeBinding' annotation should have allowed prefix`() {
|
||||||
|
Konsist.scopeFromProject()
|
||||||
|
.classes()
|
||||||
|
.withAnnotationNamed("ContributesBinding")
|
||||||
|
.withoutName(
|
||||||
|
"Factory",
|
||||||
|
"TimelineController",
|
||||||
|
)
|
||||||
|
.withoutNameStartingWith(
|
||||||
|
"Accompanist",
|
||||||
|
"AES",
|
||||||
|
"Android",
|
||||||
|
"Database",
|
||||||
|
"DBov",
|
||||||
|
"Default",
|
||||||
|
"DataStore",
|
||||||
|
"FileExtensionExtractor",
|
||||||
|
"KeyStore",
|
||||||
|
"Matrix",
|
||||||
|
"Noop",
|
||||||
|
"Preferences",
|
||||||
|
"Rust",
|
||||||
|
"SharedPreferences",
|
||||||
|
)
|
||||||
|
.assertEmpty()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue