mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-11-03 16:10:00 +00:00
Merge branch 'develop' into feature/fga/user_status_last_pieces
This commit is contained in:
@@ -98,7 +98,7 @@ jobs:
|
|||||||
run: curl -fsSL "https://get.maestro.mobile.dev" | bash
|
run: curl -fsSL "https://get.maestro.mobile.dev" | bash
|
||||||
- name: Run Maestro tests in emulator
|
- name: Run Maestro tests in emulator
|
||||||
id: maestro_test
|
id: maestro_test
|
||||||
uses: reactivecircus/android-emulator-runner@e89f39f1abbbd05b1113a29cf4db69e7540cae5a # v2.37.0
|
uses: reactivecircus/android-emulator-runner@a421e43855164a8197daf9d8d40fe71c6996bb0d # v2.38.0
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
env:
|
env:
|
||||||
MAESTRO_USERNAME: maestroelement
|
MAESTRO_USERNAME: maestroelement
|
||||||
|
|||||||
@@ -14,12 +14,15 @@ import androidx.activity.compose.BackHandler
|
|||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.layout.PaddingValues
|
import androidx.compose.foundation.layout.PaddingValues
|
||||||
|
import androidx.compose.foundation.layout.WindowInsets
|
||||||
import androidx.compose.foundation.layout.calculateEndPadding
|
import androidx.compose.foundation.layout.calculateEndPadding
|
||||||
import androidx.compose.foundation.layout.calculateStartPadding
|
import androidx.compose.foundation.layout.calculateStartPadding
|
||||||
import androidx.compose.foundation.layout.consumeWindowInsets
|
import androidx.compose.foundation.layout.consumeWindowInsets
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
|
import androidx.compose.foundation.layout.navigationBars
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.layout.plus
|
import androidx.compose.foundation.layout.plus
|
||||||
|
import androidx.compose.foundation.layout.windowInsetsPadding
|
||||||
import androidx.compose.foundation.lazy.rememberLazyListState
|
import androidx.compose.foundation.lazy.rememberLazyListState
|
||||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||||
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
|
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
|
||||||
@@ -204,6 +207,9 @@ private fun HomeScaffold(
|
|||||||
floatingActionButton = {
|
floatingActionButton = {
|
||||||
val coroutineScope = rememberCoroutineScope()
|
val coroutineScope = rememberCoroutineScope()
|
||||||
HomeBottomBar(
|
HomeBottomBar(
|
||||||
|
// The Scaffold uses top-only insets so the scrollable content can go edge-to-edge behind the
|
||||||
|
// navigation bar, so the floating toolbar has to apply the bottom inset itself to avoid overlapping it.
|
||||||
|
modifier = Modifier.windowInsetsPadding(WindowInsets.navigationBars),
|
||||||
currentHomeNavigationBarItem = state.currentHomeNavigationBarItem,
|
currentHomeNavigationBarItem = state.currentHomeNavigationBarItem,
|
||||||
onItemClick = { item ->
|
onItemClick = { item ->
|
||||||
// scroll to top if selecting the same item
|
// scroll to top if selecting the same item
|
||||||
|
|||||||
+3
@@ -31,6 +31,7 @@ import io.element.android.libraries.architecture.Presenter
|
|||||||
import io.element.android.libraries.architecture.runCatchingUpdatingState
|
import io.element.android.libraries.architecture.runCatchingUpdatingState
|
||||||
import io.element.android.libraries.core.data.ByteUnit
|
import io.element.android.libraries.core.data.ByteUnit
|
||||||
import io.element.android.libraries.matrix.api.analytics.GetDatabaseSizesUseCase
|
import io.element.android.libraries.matrix.api.analytics.GetDatabaseSizesUseCase
|
||||||
|
import io.element.android.libraries.matrix.api.core.DeviceId
|
||||||
import io.element.android.libraries.matrix.api.core.SessionId
|
import io.element.android.libraries.matrix.api.core.SessionId
|
||||||
import kotlinx.collections.immutable.ImmutableMap
|
import kotlinx.collections.immutable.ImmutableMap
|
||||||
import kotlinx.collections.immutable.toImmutableMap
|
import kotlinx.collections.immutable.toImmutableMap
|
||||||
@@ -41,6 +42,7 @@ import kotlinx.coroutines.launch
|
|||||||
class DeveloperSettingsPresenter(
|
class DeveloperSettingsPresenter(
|
||||||
private val appDeveloperSettingsPresenter: Presenter<AppDeveloperSettingsState>,
|
private val appDeveloperSettingsPresenter: Presenter<AppDeveloperSettingsState>,
|
||||||
private val sessionId: SessionId,
|
private val sessionId: SessionId,
|
||||||
|
private val deviceId: DeviceId,
|
||||||
private val computeCacheSizeUseCase: ComputeCacheSizeUseCase,
|
private val computeCacheSizeUseCase: ComputeCacheSizeUseCase,
|
||||||
private val clearCacheUseCase: ClearCacheUseCase,
|
private val clearCacheUseCase: ClearCacheUseCase,
|
||||||
private val enterpriseService: EnterpriseService,
|
private val enterpriseService: EnterpriseService,
|
||||||
@@ -117,6 +119,7 @@ class DeveloperSettingsPresenter(
|
|||||||
markAllRoomsAsReadAction = markAllRoomsAsReadAction.value,
|
markAllRoomsAsReadAction = markAllRoomsAsReadAction.value,
|
||||||
isEnterpriseBuild = enterpriseService.isEnterpriseBuild,
|
isEnterpriseBuild = enterpriseService.isEnterpriseBuild,
|
||||||
showColorPicker = showColorPicker,
|
showColorPicker = showColorPicker,
|
||||||
|
deviceId = deviceId,
|
||||||
eventSink = ::handleEvent,
|
eventSink = ::handleEvent,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
+2
@@ -11,6 +11,7 @@ package io.element.android.features.preferences.impl.developer
|
|||||||
import io.element.android.features.preferences.impl.developer.appsettings.AppDeveloperSettingsState
|
import io.element.android.features.preferences.impl.developer.appsettings.AppDeveloperSettingsState
|
||||||
import io.element.android.libraries.architecture.AsyncAction
|
import io.element.android.libraries.architecture.AsyncAction
|
||||||
import io.element.android.libraries.architecture.AsyncData
|
import io.element.android.libraries.architecture.AsyncData
|
||||||
|
import io.element.android.libraries.matrix.api.core.DeviceId
|
||||||
import kotlinx.collections.immutable.ImmutableMap
|
import kotlinx.collections.immutable.ImmutableMap
|
||||||
|
|
||||||
data class DeveloperSettingsState(
|
data class DeveloperSettingsState(
|
||||||
@@ -21,6 +22,7 @@ data class DeveloperSettingsState(
|
|||||||
val markAllRoomsAsReadAction: AsyncAction<Unit>,
|
val markAllRoomsAsReadAction: AsyncAction<Unit>,
|
||||||
val isEnterpriseBuild: Boolean,
|
val isEnterpriseBuild: Boolean,
|
||||||
val showColorPicker: Boolean,
|
val showColorPicker: Boolean,
|
||||||
|
val deviceId: DeviceId,
|
||||||
val eventSink: (DeveloperSettingsEvents) -> Unit
|
val eventSink: (DeveloperSettingsEvents) -> Unit
|
||||||
) {
|
) {
|
||||||
val showLoader = clearCacheAction is AsyncAction.Loading || markAllRoomsAsReadAction is AsyncAction.Loading
|
val showLoader = clearCacheAction is AsyncAction.Loading || markAllRoomsAsReadAction is AsyncAction.Loading
|
||||||
|
|||||||
+3
@@ -13,6 +13,7 @@ import io.element.android.features.preferences.impl.developer.appsettings.AppDev
|
|||||||
import io.element.android.features.preferences.impl.developer.appsettings.anAppDeveloperSettingsState
|
import io.element.android.features.preferences.impl.developer.appsettings.anAppDeveloperSettingsState
|
||||||
import io.element.android.libraries.architecture.AsyncAction
|
import io.element.android.libraries.architecture.AsyncAction
|
||||||
import io.element.android.libraries.architecture.AsyncData
|
import io.element.android.libraries.architecture.AsyncData
|
||||||
|
import io.element.android.libraries.matrix.api.core.DeviceId
|
||||||
import kotlinx.collections.immutable.persistentMapOf
|
import kotlinx.collections.immutable.persistentMapOf
|
||||||
|
|
||||||
open class DeveloperSettingsStateProvider : PreviewParameterProvider<DeveloperSettingsState> {
|
open class DeveloperSettingsStateProvider : PreviewParameterProvider<DeveloperSettingsState> {
|
||||||
@@ -40,6 +41,7 @@ fun aDeveloperSettingsState(
|
|||||||
markAllRoomsAsReadAction: AsyncAction<Unit> = AsyncAction.Uninitialized,
|
markAllRoomsAsReadAction: AsyncAction<Unit> = AsyncAction.Uninitialized,
|
||||||
isEnterpriseBuild: Boolean = false,
|
isEnterpriseBuild: Boolean = false,
|
||||||
showColorPicker: Boolean = false,
|
showColorPicker: Boolean = false,
|
||||||
|
deviceId: DeviceId = DeviceId("ILAKNDNASDLK"),
|
||||||
eventSink: (DeveloperSettingsEvents) -> Unit = {},
|
eventSink: (DeveloperSettingsEvents) -> Unit = {},
|
||||||
) = DeveloperSettingsState(
|
) = DeveloperSettingsState(
|
||||||
appDeveloperSettingsState = appDeveloperSettingsState,
|
appDeveloperSettingsState = appDeveloperSettingsState,
|
||||||
@@ -49,5 +51,6 @@ fun aDeveloperSettingsState(
|
|||||||
markAllRoomsAsReadAction = markAllRoomsAsReadAction,
|
markAllRoomsAsReadAction = markAllRoomsAsReadAction,
|
||||||
isEnterpriseBuild = isEnterpriseBuild,
|
isEnterpriseBuild = isEnterpriseBuild,
|
||||||
showColorPicker = showColorPicker,
|
showColorPicker = showColorPicker,
|
||||||
|
deviceId = deviceId,
|
||||||
eventSink = eventSink,
|
eventSink = eventSink,
|
||||||
)
|
)
|
||||||
|
|||||||
+22
@@ -15,12 +15,14 @@ import androidx.compose.foundation.progressSemantics
|
|||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.ExperimentalComposeUiApi
|
import androidx.compose.ui.ExperimentalComposeUiApi
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.platform.LocalContext
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.tooling.preview.PreviewParameter
|
import androidx.compose.ui.tooling.preview.PreviewParameter
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import io.element.android.compound.theme.ElementTheme
|
import io.element.android.compound.theme.ElementTheme
|
||||||
import io.element.android.features.preferences.impl.R
|
import io.element.android.features.preferences.impl.R
|
||||||
import io.element.android.features.preferences.impl.developer.appsettings.AppDeveloperSettingsView
|
import io.element.android.features.preferences.impl.developer.appsettings.AppDeveloperSettingsView
|
||||||
|
import io.element.android.libraries.androidutils.system.copyToClipboard
|
||||||
import io.element.android.libraries.designsystem.components.ProgressDialog
|
import io.element.android.libraries.designsystem.components.ProgressDialog
|
||||||
import io.element.android.libraries.designsystem.components.dialogs.ConfirmationDialog
|
import io.element.android.libraries.designsystem.components.dialogs.ConfirmationDialog
|
||||||
import io.element.android.libraries.designsystem.components.list.ListItemContent
|
import io.element.android.libraries.designsystem.components.list.ListItemContent
|
||||||
@@ -31,6 +33,7 @@ import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
|||||||
import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator
|
import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator
|
||||||
import io.element.android.libraries.designsystem.theme.components.ListItem
|
import io.element.android.libraries.designsystem.theme.components.ListItem
|
||||||
import io.element.android.libraries.designsystem.theme.components.Text
|
import io.element.android.libraries.designsystem.theme.components.Text
|
||||||
|
import io.element.android.libraries.matrix.api.core.DeviceId
|
||||||
import io.element.android.libraries.ui.strings.CommonStrings
|
import io.element.android.libraries.ui.strings.CommonStrings
|
||||||
import io.mhssn.colorpicker.ColorPickerDialog
|
import io.mhssn.colorpicker.ColorPickerDialog
|
||||||
import io.mhssn.colorpicker.ColorPickerType
|
import io.mhssn.colorpicker.ColorPickerType
|
||||||
@@ -75,6 +78,7 @@ fun DeveloperSettingsView(
|
|||||||
state = state.appDeveloperSettingsState,
|
state = state.appDeveloperSettingsState,
|
||||||
onOpenShowkase = onOpenShowkase,
|
onOpenShowkase = onOpenShowkase,
|
||||||
)
|
)
|
||||||
|
SessionCategory(deviceId = state.deviceId)
|
||||||
NotificationCategory(onPushHistoryClick)
|
NotificationCategory(onPushHistoryClick)
|
||||||
MarkAllRoomsAsReadCategory(state)
|
MarkAllRoomsAsReadCategory(state)
|
||||||
|
|
||||||
@@ -168,6 +172,24 @@ fun DeveloperSettingsView(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
private fun SessionCategory(deviceId: DeviceId) {
|
||||||
|
PreferenceCategory(title = "Session") {
|
||||||
|
val toastMessage = stringResource(CommonStrings.common_copied_to_clipboard)
|
||||||
|
val context = LocalContext.current
|
||||||
|
ListItem(
|
||||||
|
headlineContent = { Text("DeviceId") },
|
||||||
|
supportingContent = { Text(text = deviceId.value) },
|
||||||
|
onClick = {
|
||||||
|
context.copyToClipboard(
|
||||||
|
text = deviceId.value,
|
||||||
|
toastMessage = toastMessage,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
private fun MarkAllRoomsAsReadCategory(state: DeveloperSettingsState) {
|
private fun MarkAllRoomsAsReadCategory(state: DeveloperSettingsState) {
|
||||||
PreferenceCategory(title = "Room list") {
|
PreferenceCategory(title = "Room list") {
|
||||||
|
|||||||
+4
@@ -25,6 +25,7 @@ import io.element.android.features.rageshake.api.preferences.RageshakePreference
|
|||||||
import io.element.android.libraries.architecture.AsyncData
|
import io.element.android.libraries.architecture.AsyncData
|
||||||
import io.element.android.libraries.architecture.Presenter
|
import io.element.android.libraries.architecture.Presenter
|
||||||
import io.element.android.libraries.core.extensions.runCatchingExceptions
|
import io.element.android.libraries.core.extensions.runCatchingExceptions
|
||||||
|
import io.element.android.libraries.core.meta.BuildMeta
|
||||||
import io.element.android.libraries.featureflag.api.FeatureFlagService
|
import io.element.android.libraries.featureflag.api.FeatureFlagService
|
||||||
import io.element.android.libraries.featureflag.ui.model.FeatureUiModel
|
import io.element.android.libraries.featureflag.ui.model.FeatureUiModel
|
||||||
import io.element.android.libraries.preferences.api.store.AppPreferencesStore
|
import io.element.android.libraries.preferences.api.store.AppPreferencesStore
|
||||||
@@ -42,6 +43,7 @@ class AppDeveloperSettingsPresenter(
|
|||||||
private val featureFlagService: FeatureFlagService,
|
private val featureFlagService: FeatureFlagService,
|
||||||
private val rageshakePresenter: Presenter<RageshakePreferencesState>,
|
private val rageshakePresenter: Presenter<RageshakePreferencesState>,
|
||||||
private val appPreferencesStore: AppPreferencesStore,
|
private val appPreferencesStore: AppPreferencesStore,
|
||||||
|
private val buildMeta: BuildMeta,
|
||||||
) : Presenter<AppDeveloperSettingsState> {
|
) : Presenter<AppDeveloperSettingsState> {
|
||||||
@Composable
|
@Composable
|
||||||
override fun present(): AppDeveloperSettingsState {
|
override fun present(): AppDeveloperSettingsState {
|
||||||
@@ -110,6 +112,8 @@ class AppDeveloperSettingsPresenter(
|
|||||||
),
|
),
|
||||||
tracingLogLevel = tracingLogLevel,
|
tracingLogLevel = tracingLogLevel,
|
||||||
tracingLogPacks = tracingLogPacks,
|
tracingLogPacks = tracingLogPacks,
|
||||||
|
gitBranch = buildMeta.gitBranchName,
|
||||||
|
gitSha = buildMeta.gitRevision,
|
||||||
eventSink = ::handleEvent,
|
eventSink = ::handleEvent,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
+2
@@ -20,6 +20,8 @@ data class AppDeveloperSettingsState(
|
|||||||
val customElementCallBaseUrlState: CustomElementCallBaseUrlState,
|
val customElementCallBaseUrlState: CustomElementCallBaseUrlState,
|
||||||
val tracingLogLevel: AsyncData<LogLevelItem>,
|
val tracingLogLevel: AsyncData<LogLevelItem>,
|
||||||
val tracingLogPacks: ImmutableList<TraceLogPack>,
|
val tracingLogPacks: ImmutableList<TraceLogPack>,
|
||||||
|
val gitBranch: String,
|
||||||
|
val gitSha: String,
|
||||||
val eventSink: (AppDeveloperSettingsEvent) -> Unit
|
val eventSink: (AppDeveloperSettingsEvent) -> Unit
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
+2
@@ -37,6 +37,8 @@ fun anAppDeveloperSettingsState(
|
|||||||
customElementCallBaseUrlState = customElementCallBaseUrlState,
|
customElementCallBaseUrlState = customElementCallBaseUrlState,
|
||||||
tracingLogLevel = AsyncData.Success(LogLevelItem.INFO),
|
tracingLogLevel = AsyncData.Success(LogLevelItem.INFO),
|
||||||
tracingLogPacks = traceLogPacks.toImmutableList(),
|
tracingLogPacks = traceLogPacks.toImmutableList(),
|
||||||
|
gitBranch = "feature/awesome-feature",
|
||||||
|
gitSha = "1234567890",
|
||||||
eventSink = eventSink,
|
eventSink = eventSink,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
+38
@@ -14,6 +14,7 @@ import androidx.compose.foundation.text.KeyboardOptions
|
|||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.ExperimentalComposeUiApi
|
import androidx.compose.ui.ExperimentalComposeUiApi
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.platform.LocalContext
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.text.input.KeyboardType
|
import androidx.compose.ui.text.input.KeyboardType
|
||||||
import androidx.compose.ui.tooling.preview.PreviewParameter
|
import androidx.compose.ui.tooling.preview.PreviewParameter
|
||||||
@@ -22,6 +23,7 @@ import io.element.android.compound.theme.ElementTheme
|
|||||||
import io.element.android.features.preferences.impl.R
|
import io.element.android.features.preferences.impl.R
|
||||||
import io.element.android.features.preferences.impl.developer.tracing.LogLevelItem
|
import io.element.android.features.preferences.impl.developer.tracing.LogLevelItem
|
||||||
import io.element.android.features.rageshake.api.preferences.RageshakePreferencesView
|
import io.element.android.features.rageshake.api.preferences.RageshakePreferencesView
|
||||||
|
import io.element.android.libraries.androidutils.system.copyToClipboard
|
||||||
import io.element.android.libraries.designsystem.components.preferences.PreferenceCategory
|
import io.element.android.libraries.designsystem.components.preferences.PreferenceCategory
|
||||||
import io.element.android.libraries.designsystem.components.preferences.PreferenceDropdown
|
import io.element.android.libraries.designsystem.components.preferences.PreferenceDropdown
|
||||||
import io.element.android.libraries.designsystem.components.preferences.PreferenceSwitch
|
import io.element.android.libraries.designsystem.components.preferences.PreferenceSwitch
|
||||||
@@ -33,6 +35,7 @@ import io.element.android.libraries.designsystem.theme.components.Text
|
|||||||
import io.element.android.libraries.featureflag.ui.FeatureListView
|
import io.element.android.libraries.featureflag.ui.FeatureListView
|
||||||
import io.element.android.libraries.featureflag.ui.model.FeatureUiModel
|
import io.element.android.libraries.featureflag.ui.model.FeatureUiModel
|
||||||
import io.element.android.libraries.matrix.api.tracing.TraceLogPack
|
import io.element.android.libraries.matrix.api.tracing.TraceLogPack
|
||||||
|
import io.element.android.libraries.ui.strings.CommonStrings
|
||||||
import kotlinx.collections.immutable.toImmutableList
|
import kotlinx.collections.immutable.toImmutableList
|
||||||
|
|
||||||
@OptIn(ExperimentalComposeUiApi::class)
|
@OptIn(ExperimentalComposeUiApi::class)
|
||||||
@@ -98,6 +101,41 @@ fun AppDeveloperSettingsView(
|
|||||||
onClick = { error("This crash is a test.") }
|
onClick = { error("This crash is a test.") }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
GitCategory(
|
||||||
|
gitBranch = state.gitBranch,
|
||||||
|
gitSha = state.gitSha,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
private fun GitCategory(
|
||||||
|
gitBranch: String,
|
||||||
|
gitSha: String,
|
||||||
|
) {
|
||||||
|
PreferenceCategory(title = "Git") {
|
||||||
|
val toastMessage = stringResource(CommonStrings.common_copied_to_clipboard)
|
||||||
|
val context = LocalContext.current
|
||||||
|
ListItem(
|
||||||
|
headlineContent = { Text("Git branch") },
|
||||||
|
supportingContent = { Text(text = gitBranch) },
|
||||||
|
onClick = {
|
||||||
|
context.copyToClipboard(
|
||||||
|
text = gitBranch,
|
||||||
|
toastMessage = toastMessage,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
ListItem(
|
||||||
|
headlineContent = { Text("Git SHA") },
|
||||||
|
supportingContent = { Text(text = gitSha) },
|
||||||
|
onClick = {
|
||||||
|
context.copyToClipboard(
|
||||||
|
text = gitSha,
|
||||||
|
toastMessage = toastMessage,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
-1
@@ -148,7 +148,6 @@ class PreferencesRootPresenter(
|
|||||||
myUser = matrixUser.value,
|
myUser = matrixUser.value,
|
||||||
userStatusState = userStatusState,
|
userStatusState = userStatusState,
|
||||||
version = remember { versionFormatter.get() },
|
version = remember { versionFormatter.get() },
|
||||||
deviceId = matrixClient.deviceId,
|
|
||||||
isMultiAccountEnabled = isMultiAccountEnabled,
|
isMultiAccountEnabled = isMultiAccountEnabled,
|
||||||
otherSessions = otherSessions,
|
otherSessions = otherSessions,
|
||||||
showSecureBackup = !canVerifyUserSession,
|
showSecureBackup = !canVerifyUserSession,
|
||||||
|
|||||||
-2
@@ -11,7 +11,6 @@ package io.element.android.features.preferences.impl.root
|
|||||||
import io.element.android.features.logout.api.direct.DirectLogoutState
|
import io.element.android.features.logout.api.direct.DirectLogoutState
|
||||||
import io.element.android.features.preferences.impl.userstatus.UserStatusState
|
import io.element.android.features.preferences.impl.userstatus.UserStatusState
|
||||||
import io.element.android.libraries.designsystem.utils.snackbar.SnackbarMessage
|
import io.element.android.libraries.designsystem.utils.snackbar.SnackbarMessage
|
||||||
import io.element.android.libraries.matrix.api.core.DeviceId
|
|
||||||
import io.element.android.libraries.matrix.api.user.MatrixUser
|
import io.element.android.libraries.matrix.api.user.MatrixUser
|
||||||
import kotlinx.collections.immutable.ImmutableList
|
import kotlinx.collections.immutable.ImmutableList
|
||||||
|
|
||||||
@@ -19,7 +18,6 @@ data class PreferencesRootState(
|
|||||||
val myUser: MatrixUser,
|
val myUser: MatrixUser,
|
||||||
val userStatusState: UserStatusState?,
|
val userStatusState: UserStatusState?,
|
||||||
val version: String,
|
val version: String,
|
||||||
val deviceId: DeviceId?,
|
|
||||||
val isMultiAccountEnabled: Boolean,
|
val isMultiAccountEnabled: Boolean,
|
||||||
val otherSessions: ImmutableList<MatrixUser>,
|
val otherSessions: ImmutableList<MatrixUser>,
|
||||||
val showSecureBackup: Boolean,
|
val showSecureBackup: Boolean,
|
||||||
|
|||||||
-5
@@ -15,7 +15,6 @@ import io.element.android.features.preferences.impl.userstatus.UserStatusPickerS
|
|||||||
import io.element.android.features.preferences.impl.userstatus.UserStatusState
|
import io.element.android.features.preferences.impl.userstatus.UserStatusState
|
||||||
import io.element.android.features.preferences.impl.userstatus.aUserStatusState
|
import io.element.android.features.preferences.impl.userstatus.aUserStatusState
|
||||||
import io.element.android.libraries.designsystem.utils.snackbar.SnackbarMessage
|
import io.element.android.libraries.designsystem.utils.snackbar.SnackbarMessage
|
||||||
import io.element.android.libraries.matrix.api.core.DeviceId
|
|
||||||
import io.element.android.libraries.matrix.api.user.MatrixUser
|
import io.element.android.libraries.matrix.api.user.MatrixUser
|
||||||
import io.element.android.libraries.matrix.ui.components.aMatrixUser
|
import io.element.android.libraries.matrix.ui.components.aMatrixUser
|
||||||
import io.element.android.libraries.matrix.ui.components.aMatrixUserList
|
import io.element.android.libraries.matrix.ui.components.aMatrixUserList
|
||||||
@@ -29,7 +28,6 @@ open class PreferencesRootStateProvider : PreviewParameterProvider<PreferencesRo
|
|||||||
aPreferencesRootState(
|
aPreferencesRootState(
|
||||||
myUser = aMatrixUser(avatarUrl = "anAvatarUrl"),
|
myUser = aMatrixUser(avatarUrl = "anAvatarUrl"),
|
||||||
version = "Version 1.1 (1)",
|
version = "Version 1.1 (1)",
|
||||||
deviceId = DeviceId("ILAKNDNASDLK"),
|
|
||||||
isMultiAccountEnabled = true,
|
isMultiAccountEnabled = true,
|
||||||
otherSessions = aMatrixUserList().drop(1).take(1),
|
otherSessions = aMatrixUserList().drop(1).take(1),
|
||||||
showSecureBackup = true,
|
showSecureBackup = true,
|
||||||
@@ -55,7 +53,6 @@ open class PreferencesRootStateProvider : PreviewParameterProvider<PreferencesRo
|
|||||||
showSecureBackupBadge = true,
|
showSecureBackupBadge = true,
|
||||||
),
|
),
|
||||||
aPreferencesRootState(
|
aPreferencesRootState(
|
||||||
deviceId = DeviceId("ILAKNDNASDLK"),
|
|
||||||
showLabsItem = true,
|
showLabsItem = true,
|
||||||
canReportBug = true,
|
canReportBug = true,
|
||||||
nbOfBlockedUsers = 3,
|
nbOfBlockedUsers = 3,
|
||||||
@@ -76,7 +73,6 @@ open class PreferencesRootStateProvider : PreviewParameterProvider<PreferencesRo
|
|||||||
fun aPreferencesRootState(
|
fun aPreferencesRootState(
|
||||||
myUser: MatrixUser = aMatrixUser(),
|
myUser: MatrixUser = aMatrixUser(),
|
||||||
version: String = "Version 1.1 (1)",
|
version: String = "Version 1.1 (1)",
|
||||||
deviceId: DeviceId? = null,
|
|
||||||
isMultiAccountEnabled: Boolean = false,
|
isMultiAccountEnabled: Boolean = false,
|
||||||
otherSessions: List<MatrixUser> = emptyList(),
|
otherSessions: List<MatrixUser> = emptyList(),
|
||||||
showSecureBackup: Boolean = false,
|
showSecureBackup: Boolean = false,
|
||||||
@@ -96,7 +92,6 @@ fun aPreferencesRootState(
|
|||||||
) = PreferencesRootState(
|
) = PreferencesRootState(
|
||||||
myUser = myUser,
|
myUser = myUser,
|
||||||
version = version,
|
version = version,
|
||||||
deviceId = deviceId,
|
|
||||||
isMultiAccountEnabled = isMultiAccountEnabled,
|
isMultiAccountEnabled = isMultiAccountEnabled,
|
||||||
otherSessions = otherSessions.toImmutableList(),
|
otherSessions = otherSessions.toImmutableList(),
|
||||||
showSecureBackup = showSecureBackup,
|
showSecureBackup = showSecureBackup,
|
||||||
|
|||||||
+1
-14
@@ -16,7 +16,6 @@ import androidx.compose.foundation.layout.fillMaxWidth
|
|||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.layout.statusBarsPadding
|
import androidx.compose.foundation.layout.statusBarsPadding
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.remember
|
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
@@ -49,7 +48,6 @@ import io.element.android.libraries.designsystem.utils.snackbar.SnackbarHost
|
|||||||
import io.element.android.libraries.designsystem.utils.snackbar.rememberSnackbarHostState
|
import io.element.android.libraries.designsystem.utils.snackbar.rememberSnackbarHostState
|
||||||
import io.element.android.libraries.emoji.api.picker.EmojiPickerRenderer
|
import io.element.android.libraries.emoji.api.picker.EmojiPickerRenderer
|
||||||
import io.element.android.libraries.emoji.api.picker.NoOpEmojiPickerRenderer
|
import io.element.android.libraries.emoji.api.picker.NoOpEmojiPickerRenderer
|
||||||
import io.element.android.libraries.matrix.api.core.DeviceId
|
|
||||||
import io.element.android.libraries.matrix.api.user.MatrixUser
|
import io.element.android.libraries.matrix.api.user.MatrixUser
|
||||||
import io.element.android.libraries.matrix.ui.components.MatrixUserRow
|
import io.element.android.libraries.matrix.ui.components.MatrixUserRow
|
||||||
import io.element.android.libraries.ui.strings.CommonStrings
|
import io.element.android.libraries.ui.strings.CommonStrings
|
||||||
@@ -135,7 +133,6 @@ fun PreferencesRootView(
|
|||||||
// Version
|
// Version
|
||||||
Footer(
|
Footer(
|
||||||
version = state.version,
|
version = state.version,
|
||||||
deviceId = state.deviceId,
|
|
||||||
onClick = if (!state.showDeveloperSettings) {
|
onClick = if (!state.showDeveloperSettings) {
|
||||||
{ state.eventSink(PreferencesRootEvent.OnVersionInfoClick) }
|
{ state.eventSink(PreferencesRootEvent.OnVersionInfoClick) }
|
||||||
} else {
|
} else {
|
||||||
@@ -348,25 +345,15 @@ private fun ColumnScope.GeneralSection(
|
|||||||
@Composable
|
@Composable
|
||||||
private fun ColumnScope.Footer(
|
private fun ColumnScope.Footer(
|
||||||
version: String,
|
version: String,
|
||||||
deviceId: DeviceId?,
|
|
||||||
onClick: (() -> Unit)?,
|
onClick: (() -> Unit)?,
|
||||||
) {
|
) {
|
||||||
val text = remember(version, deviceId) {
|
|
||||||
buildString {
|
|
||||||
append(version)
|
|
||||||
if (deviceId != null) {
|
|
||||||
append("\n")
|
|
||||||
append(deviceId)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Text(
|
Text(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.align(Alignment.CenterHorizontally)
|
.align(Alignment.CenterHorizontally)
|
||||||
.clickable(enabled = onClick != null, onClick = onClick ?: {})
|
.clickable(enabled = onClick != null, onClick = onClick ?: {})
|
||||||
.padding(start = 16.dp, end = 16.dp, top = 16.dp, bottom = 24.dp),
|
.padding(start = 16.dp, end = 16.dp, top = 16.dp, bottom = 24.dp),
|
||||||
textAlign = TextAlign.Center,
|
textAlign = TextAlign.Center,
|
||||||
text = text,
|
text = version,
|
||||||
style = ElementTheme.typography.fontBodySmRegular,
|
style = ElementTheme.typography.fontBodySmRegular,
|
||||||
color = ElementTheme.colors.textSecondary,
|
color = ElementTheme.colors.textSecondary,
|
||||||
)
|
)
|
||||||
|
|||||||
+1
-7
@@ -24,16 +24,10 @@ class DefaultVersionFormatter(
|
|||||||
private val buildMeta: BuildMeta,
|
private val buildMeta: BuildMeta,
|
||||||
) : VersionFormatter {
|
) : VersionFormatter {
|
||||||
override fun get(): String {
|
override fun get(): String {
|
||||||
val base = stringProvider.getString(
|
return stringProvider.getString(
|
||||||
CommonStrings.settings_version_number,
|
CommonStrings.settings_version_number,
|
||||||
buildMeta.versionName,
|
buildMeta.versionName,
|
||||||
buildMeta.versionCode.toString()
|
buildMeta.versionCode.toString()
|
||||||
)
|
)
|
||||||
return if (buildMeta.gitBranchName == "main") {
|
|
||||||
base
|
|
||||||
} else {
|
|
||||||
// In case of a build not from main, we display the branch name and the revision
|
|
||||||
"$base\n${buildMeta.gitBranchName} (${buildMeta.gitRevision})"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+5
@@ -25,7 +25,9 @@ import io.element.android.libraries.architecture.AsyncData
|
|||||||
import io.element.android.libraries.core.data.megaBytes
|
import io.element.android.libraries.core.data.megaBytes
|
||||||
import io.element.android.libraries.matrix.api.analytics.GetDatabaseSizesUseCase
|
import io.element.android.libraries.matrix.api.analytics.GetDatabaseSizesUseCase
|
||||||
import io.element.android.libraries.matrix.api.analytics.SdkStoreSizes
|
import io.element.android.libraries.matrix.api.analytics.SdkStoreSizes
|
||||||
|
import io.element.android.libraries.matrix.api.core.DeviceId
|
||||||
import io.element.android.libraries.matrix.api.core.SessionId
|
import io.element.android.libraries.matrix.api.core.SessionId
|
||||||
|
import io.element.android.libraries.matrix.test.A_DEVICE_ID
|
||||||
import io.element.android.libraries.matrix.test.A_SESSION_ID
|
import io.element.android.libraries.matrix.test.A_SESSION_ID
|
||||||
import io.element.android.tests.testutils.WarmUpRule
|
import io.element.android.tests.testutils.WarmUpRule
|
||||||
import io.element.android.tests.testutils.lambda.lambdaRecorder
|
import io.element.android.tests.testutils.lambda.lambdaRecorder
|
||||||
@@ -57,6 +59,7 @@ class DeveloperSettingsPresenterTest {
|
|||||||
assertThat(state.cacheSize).isEqualTo(AsyncData.Uninitialized)
|
assertThat(state.cacheSize).isEqualTo(AsyncData.Uninitialized)
|
||||||
assertThat(state.isEnterpriseBuild).isFalse()
|
assertThat(state.isEnterpriseBuild).isFalse()
|
||||||
assertThat(state.showColorPicker).isFalse()
|
assertThat(state.showColorPicker).isFalse()
|
||||||
|
assertThat(state.deviceId).isEqualTo(A_DEVICE_ID)
|
||||||
}
|
}
|
||||||
awaitItem().also { state ->
|
awaitItem().also { state ->
|
||||||
assertThat(state.cacheSize.isLoading()).isTrue()
|
assertThat(state.cacheSize.isLoading()).isTrue()
|
||||||
@@ -169,6 +172,7 @@ class DeveloperSettingsPresenterTest {
|
|||||||
|
|
||||||
private fun createDeveloperSettingsPresenter(
|
private fun createDeveloperSettingsPresenter(
|
||||||
sessionId: SessionId = A_SESSION_ID,
|
sessionId: SessionId = A_SESSION_ID,
|
||||||
|
deviceId: DeviceId = A_DEVICE_ID,
|
||||||
cacheSizeUseCase: FakeComputeCacheSizeUseCase = FakeComputeCacheSizeUseCase(),
|
cacheSizeUseCase: FakeComputeCacheSizeUseCase = FakeComputeCacheSizeUseCase(),
|
||||||
clearCacheUseCase: FakeClearCacheUseCase = FakeClearCacheUseCase(),
|
clearCacheUseCase: FakeClearCacheUseCase = FakeClearCacheUseCase(),
|
||||||
enterpriseService: EnterpriseService = FakeEnterpriseService(),
|
enterpriseService: EnterpriseService = FakeEnterpriseService(),
|
||||||
@@ -179,6 +183,7 @@ class DeveloperSettingsPresenterTest {
|
|||||||
return DeveloperSettingsPresenter(
|
return DeveloperSettingsPresenter(
|
||||||
appDeveloperSettingsPresenter = { anAppDeveloperSettingsState() },
|
appDeveloperSettingsPresenter = { anAppDeveloperSettingsState() },
|
||||||
sessionId = sessionId,
|
sessionId = sessionId,
|
||||||
|
deviceId = deviceId,
|
||||||
computeCacheSizeUseCase = cacheSizeUseCase,
|
computeCacheSizeUseCase = cacheSizeUseCase,
|
||||||
clearCacheUseCase = clearCacheUseCase,
|
clearCacheUseCase = clearCacheUseCase,
|
||||||
enterpriseService = enterpriseService,
|
enterpriseService = enterpriseService,
|
||||||
|
|||||||
+3
-2
@@ -15,6 +15,7 @@ import androidx.compose.ui.test.AndroidComposeUiTest
|
|||||||
import androidx.compose.ui.test.ExperimentalTestApi
|
import androidx.compose.ui.test.ExperimentalTestApi
|
||||||
import androidx.compose.ui.test.onNodeWithText
|
import androidx.compose.ui.test.onNodeWithText
|
||||||
import androidx.compose.ui.test.performClick
|
import androidx.compose.ui.test.performClick
|
||||||
|
import androidx.compose.ui.test.performScrollTo
|
||||||
import androidx.compose.ui.test.v2.runAndroidComposeUiTest
|
import androidx.compose.ui.test.v2.runAndroidComposeUiTest
|
||||||
import io.element.android.features.preferences.impl.R
|
import io.element.android.features.preferences.impl.R
|
||||||
import io.element.android.tests.testutils.EnsureNeverCalled
|
import io.element.android.tests.testutils.EnsureNeverCalled
|
||||||
@@ -41,7 +42,7 @@ class DeveloperSettingsViewTest : RobolectricTest() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Config(qualifiers = "h2000dp")
|
@Config(qualifiers = "h2400dp")
|
||||||
@Test
|
@Test
|
||||||
fun `clicking on push history notification invokes the expected callback`() = runAndroidComposeUiTest {
|
fun `clicking on push history notification invokes the expected callback`() = runAndroidComposeUiTest {
|
||||||
val eventsRecorder = EventsRecorder<DeveloperSettingsEvents>(expectEvents = false)
|
val eventsRecorder = EventsRecorder<DeveloperSettingsEvents>(expectEvents = false)
|
||||||
@@ -80,7 +81,7 @@ class DeveloperSettingsViewTest : RobolectricTest() {
|
|||||||
eventSink = eventsRecorder
|
eventSink = eventsRecorder
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
onNodeWithText("Clear cache").performClick()
|
onNodeWithText("Clear cache").performScrollTo().performClick()
|
||||||
eventsRecorder.assertSingle(DeveloperSettingsEvents.ClearCache)
|
eventsRecorder.assertSingle(DeveloperSettingsEvents.ClearCache)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+7
@@ -16,6 +16,7 @@ import io.element.android.libraries.architecture.AsyncData
|
|||||||
import io.element.android.libraries.featureflag.api.Feature
|
import io.element.android.libraries.featureflag.api.Feature
|
||||||
import io.element.android.libraries.featureflag.test.FakeFeature
|
import io.element.android.libraries.featureflag.test.FakeFeature
|
||||||
import io.element.android.libraries.featureflag.test.FakeFeatureFlagService
|
import io.element.android.libraries.featureflag.test.FakeFeatureFlagService
|
||||||
|
import io.element.android.libraries.matrix.test.core.aBuildMeta
|
||||||
import io.element.android.libraries.preferences.test.InMemoryAppPreferencesStore
|
import io.element.android.libraries.preferences.test.InMemoryAppPreferencesStore
|
||||||
import io.element.android.tests.testutils.WarmUpRule
|
import io.element.android.tests.testutils.WarmUpRule
|
||||||
import io.element.android.tests.testutils.lambda.lambdaRecorder
|
import io.element.android.tests.testutils.lambda.lambdaRecorder
|
||||||
@@ -53,6 +54,8 @@ class AppDeveloperSettingsPresenterTest {
|
|||||||
assertThat(state.rageshakeState.isSupported).isTrue()
|
assertThat(state.rageshakeState.isSupported).isTrue()
|
||||||
assertThat(state.rageshakeState.sensitivity).isEqualTo(0.3f)
|
assertThat(state.rageshakeState.sensitivity).isEqualTo(0.3f)
|
||||||
assertThat(state.tracingLogLevel).isEqualTo(AsyncData.Uninitialized)
|
assertThat(state.tracingLogLevel).isEqualTo(AsyncData.Uninitialized)
|
||||||
|
assertThat(state.gitBranch).isEqualTo("feature/awesome-feature")
|
||||||
|
assertThat(state.gitSha).isEqualTo("1234567890")
|
||||||
}
|
}
|
||||||
awaitItem().also { state ->
|
awaitItem().also { state ->
|
||||||
assertThat(state.features).isNotEmpty()
|
assertThat(state.features).isNotEmpty()
|
||||||
@@ -145,6 +148,10 @@ class AppDeveloperSettingsPresenterTest {
|
|||||||
featureFlagService = featureFlagService,
|
featureFlagService = featureFlagService,
|
||||||
rageshakePresenter = { aRageshakePreferencesState() },
|
rageshakePresenter = { aRageshakePreferencesState() },
|
||||||
appPreferencesStore = preferencesStore,
|
appPreferencesStore = preferencesStore,
|
||||||
|
buildMeta = aBuildMeta(
|
||||||
|
gitRevision = "1234567890",
|
||||||
|
gitBranchName = "feature/awesome-feature"
|
||||||
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-16
@@ -16,7 +16,7 @@ import org.junit.Test
|
|||||||
|
|
||||||
class VersionFormatterTest {
|
class VersionFormatterTest {
|
||||||
@Test
|
@Test
|
||||||
fun `version formatter should return simplified version for main branch`() = runTest {
|
fun `version formatter should return formatted version`() = runTest {
|
||||||
val sut = DefaultVersionFormatter(
|
val sut = DefaultVersionFormatter(
|
||||||
stringProvider = FakeStringProvider(defaultResult = VERSION),
|
stringProvider = FakeStringProvider(defaultResult = VERSION),
|
||||||
buildMeta = aBuildMeta(
|
buildMeta = aBuildMeta(
|
||||||
@@ -28,21 +28,7 @@ class VersionFormatterTest {
|
|||||||
assertThat(sut.get()).isEqualTo("${VERSION}versionName, 123")
|
assertThat(sut.get()).isEqualTo("${VERSION}versionName, 123")
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
fun `version formatter should return simplified version for other branch`() = runTest {
|
|
||||||
val sut = DefaultVersionFormatter(
|
|
||||||
stringProvider = FakeStringProvider(defaultResult = VERSION),
|
|
||||||
buildMeta = aBuildMeta(
|
|
||||||
versionName = "versionName",
|
|
||||||
versionCode = 123,
|
|
||||||
gitBranchName = "branch",
|
|
||||||
gitRevision = "1234567890",
|
|
||||||
)
|
|
||||||
)
|
|
||||||
assertThat(sut.get()).isEqualTo("${VERSION}versionName, 123\nbranch (1234567890)")
|
|
||||||
}
|
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val VERSION = "version"
|
const val VERSION = "version: "
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
@@ -185,6 +185,7 @@ class DefaultBugReporter(
|
|||||||
.addFormDataPart("device", Build.MODEL.trim())
|
.addFormDataPart("device", Build.MODEL.trim())
|
||||||
.addFormDataPart("locale", Locale.getDefault().toString())
|
.addFormDataPart("locale", Locale.getDefault().toString())
|
||||||
.addFormDataPart("sdk_sha", sdkMetadata.sdkGitSha)
|
.addFormDataPart("sdk_sha", sdkMetadata.sdkGitSha)
|
||||||
|
.addFormDataPart("sha", buildMeta.gitRevision)
|
||||||
.addFormDataPart("local_time", LocalDateTime.now().format(DateTimeFormatter.ISO_DATE_TIME))
|
.addFormDataPart("local_time", LocalDateTime.now().format(DateTimeFormatter.ISO_DATE_TIME))
|
||||||
.addFormDataPart("utc_time", LocalDateTime.ofInstant(Instant.now(), ZoneOffset.UTC).format(DateTimeFormatter.ISO_DATE_TIME))
|
.addFormDataPart("utc_time", LocalDateTime.ofInstant(Instant.now(), ZoneOffset.UTC).format(DateTimeFormatter.ISO_DATE_TIME))
|
||||||
.addFormDataPart("app_id", buildMeta.applicationId)
|
.addFormDataPart("app_id", buildMeta.applicationId)
|
||||||
|
|||||||
+1
-1
@@ -534,6 +534,6 @@ class DefaultBugReporterTest : RobolectricTest() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private const val EXPECTED_NUMBER_OF_PROGRESS_VALUE = 17
|
private const val EXPECTED_NUMBER_OF_PROGRESS_VALUE = 18
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ firebaseAppDistribution = "5.3.0"
|
|||||||
# AndroidX
|
# AndroidX
|
||||||
core = "1.18.0"
|
core = "1.18.0"
|
||||||
datastore = "1.2.1"
|
datastore = "1.2.1"
|
||||||
constraintlayout = "2.2.1"
|
constraintlayout = "2.2.2"
|
||||||
constraintlayout_compose = "1.1.1"
|
constraintlayout_compose = "1.1.1"
|
||||||
lifecycle = "2.11.0"
|
lifecycle = "2.11.0"
|
||||||
activity = "1.13.0"
|
activity = "1.13.0"
|
||||||
@@ -54,7 +54,7 @@ haze = "1.7.2"
|
|||||||
dependencyAnalysis = "3.18.0"
|
dependencyAnalysis = "3.18.0"
|
||||||
|
|
||||||
# DI
|
# DI
|
||||||
metro = "1.3.2"
|
metro = "1.4.0"
|
||||||
|
|
||||||
# Auto service
|
# Auto service
|
||||||
autoservice = "1.1.1"
|
autoservice = "1.1.1"
|
||||||
@@ -215,7 +215,7 @@ vanniktech_blurhash = "com.vanniktech:blurhash:0.3.0"
|
|||||||
telephoto_zoomableimage = { module = "me.saket.telephoto:zoomable-image-coil3", version.ref = "telephoto" }
|
telephoto_zoomableimage = { module = "me.saket.telephoto:zoomable-image-coil3", version.ref = "telephoto" }
|
||||||
telephoto_flick = { module = "me.saket.telephoto:flick-android", version.ref = "telephoto" }
|
telephoto_flick = { module = "me.saket.telephoto:flick-android", version.ref = "telephoto" }
|
||||||
statemachine = "com.freeletics.flowredux:compose:1.2.2"
|
statemachine = "com.freeletics.flowredux:compose:1.2.2"
|
||||||
maplibre = "org.maplibre.gl:android-sdk:13.4.0"
|
maplibre = "org.maplibre.gl:android-sdk:13.4.1"
|
||||||
maplibre_ktx = "org.maplibre.gl:android-sdk-ktx-v7:3.0.2"
|
maplibre_ktx = "org.maplibre.gl:android-sdk-ktx-v7:3.0.2"
|
||||||
maplibre_compose = "org.maplibre.compose:maplibre-compose:0.13.1"
|
maplibre_compose = "org.maplibre.compose:maplibre-compose:0.13.1"
|
||||||
maplibre_annotation = "org.maplibre.gl:android-plugin-annotation-v9:3.0.2"
|
maplibre_annotation = "org.maplibre.gl:android-plugin-annotation-v9:3.0.2"
|
||||||
@@ -230,7 +230,7 @@ color_picker = "io.mhssn:colorpicker:1.0.0"
|
|||||||
|
|
||||||
# Analytics
|
# Analytics
|
||||||
posthog = "com.posthog:posthog-android:3.56.4"
|
posthog = "com.posthog:posthog-android:3.56.4"
|
||||||
sentry = "io.sentry:sentry-android:8.50.0"
|
sentry = "io.sentry:sentry-android:8.51.0"
|
||||||
# main branch can be tested replacing the version with main-SNAPSHOT
|
# main branch can be tested replacing the version with main-SNAPSHOT
|
||||||
matrix_analytics_events = "com.github.matrix-org:matrix-analytics-events:0.37.0"
|
matrix_analytics_events = "com.github.matrix-org:matrix-analytics-events:0.37.0"
|
||||||
|
|
||||||
@@ -242,7 +242,7 @@ sigpwned_emoji4j = "com.sigpwned:emoji4j-core:16.0.0"
|
|||||||
metro_runtime = { module = "dev.zacsweers.metro:runtime", version.ref = "metro" }
|
metro_runtime = { module = "dev.zacsweers.metro:runtime", version.ref = "metro" }
|
||||||
|
|
||||||
# Element Call
|
# Element Call
|
||||||
element_call_embedded = "io.element.android:element-call-embedded:0.22.0"
|
element_call_embedded = "io.element.android:element-call-embedded:0.23.0"
|
||||||
|
|
||||||
# Auto services
|
# Auto services
|
||||||
google_autoservice = { module = "com.google.auto.service:auto-service", version.ref = "autoservice" }
|
google_autoservice = { module = "com.google.auto.service:auto-service", version.ref = "autoservice" }
|
||||||
|
|||||||
Vendored
BIN
Binary file not shown.
+2
-2
@@ -1,7 +1,7 @@
|
|||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionSha256Sum=9c0f7faeeb306cb14e4279a3e084ca6b596894089a0638e68a07c945a32c9e14
|
distributionSha256Sum=84fbba45c7f4c64abc77460e1c00f541e9f960e3c7ed2538f1ede19eacd873ae
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-9.6.1-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-9.7.0-bin.zip
|
||||||
networkTimeout=10000
|
networkTimeout=10000
|
||||||
retries=0
|
retries=0
|
||||||
retryBackOffMs=500
|
retryBackOffMs=500
|
||||||
|
|||||||
+6
@@ -15,6 +15,7 @@ import io.element.android.libraries.di.SessionScope
|
|||||||
import io.element.android.libraries.di.annotations.SessionCoroutineScope
|
import io.element.android.libraries.di.annotations.SessionCoroutineScope
|
||||||
import io.element.android.libraries.matrix.api.HomeserverCapabilitiesProvider
|
import io.element.android.libraries.matrix.api.HomeserverCapabilitiesProvider
|
||||||
import io.element.android.libraries.matrix.api.MatrixClient
|
import io.element.android.libraries.matrix.api.MatrixClient
|
||||||
|
import io.element.android.libraries.matrix.api.core.DeviceId
|
||||||
import io.element.android.libraries.matrix.api.core.SessionId
|
import io.element.android.libraries.matrix.api.core.SessionId
|
||||||
import io.element.android.libraries.matrix.api.encryption.EncryptionService
|
import io.element.android.libraries.matrix.api.encryption.EncryptionService
|
||||||
import io.element.android.libraries.matrix.api.media.MatrixMediaLoader
|
import io.element.android.libraries.matrix.api.media.MatrixMediaLoader
|
||||||
@@ -37,6 +38,11 @@ object SessionMatrixModule {
|
|||||||
return matrixClient.sessionId
|
return matrixClient.sessionId
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
fun providesDeviceId(matrixClient: MatrixClient): DeviceId {
|
||||||
|
return matrixClient.deviceId
|
||||||
|
}
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
fun providesSessionVerificationService(matrixClient: MatrixClient): SessionVerificationService {
|
fun providesSessionVerificationService(matrixClient: MatrixClient): SessionVerificationService {
|
||||||
return matrixClient.sessionVerificationService
|
return matrixClient.sessionVerificationService
|
||||||
|
|||||||
+3
@@ -5,6 +5,8 @@
|
|||||||
* Please see LICENSE files in the repository root for full details.
|
* Please see LICENSE files in the repository root for full details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@file:OptIn(ExperimentalCoroutinesApi::class)
|
||||||
|
|
||||||
package io.element.android.libraries.matrix.impl.search
|
package io.element.android.libraries.matrix.impl.search
|
||||||
|
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
@@ -14,6 +16,7 @@ import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiSearchServ
|
|||||||
import io.element.android.libraries.matrix.test.A_ROOM_ID
|
import io.element.android.libraries.matrix.test.A_ROOM_ID
|
||||||
import io.element.android.libraries.matrix.test.A_ROOM_ID_2
|
import io.element.android.libraries.matrix.test.A_ROOM_ID_2
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||||
import kotlinx.coroutines.cancel
|
import kotlinx.coroutines.cancel
|
||||||
import kotlinx.coroutines.test.StandardTestDispatcher
|
import kotlinx.coroutines.test.StandardTestDispatcher
|
||||||
import kotlinx.coroutines.test.advanceUntilIdle
|
import kotlinx.coroutines.test.advanceUntilIdle
|
||||||
|
|||||||
BIN
Binary file not shown.
BIN
Binary file not shown.
Reference in New Issue
Block a user