Skip to content

Commit e921779

Browse files
authored
Merge branch 'develop' into hide-restore-option-from-current-version
2 parents 0cfb894 + 79cc175 commit e921779

File tree

105 files changed

+2968
-196
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

105 files changed

+2968
-196
lines changed

.github/workflows/build-unified.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,7 @@ jobs:
222222
DATADOG_APP_ID: ${{ secrets.DATADOG_APP_ID }}
223223
DATADOG_CLIENT_TOKEN: ${{ secrets.DATADOG_CLIENT_TOKEN }}
224224
ENABLE_SIGNING: ${{ secrets.ENABLE_SIGNING }}
225+
DOMAIN_REMOVAL_KEYS_FOR_REPAIR: ${{ secrets.DOMAIN_REMOVAL_KEYS_FOR_REPAIR }}
225226

226227
- name: Build AAB
227228
if: matrix.build-type == 'bundle' || matrix.build-type == 'both'
@@ -231,6 +232,7 @@ jobs:
231232
DATADOG_APP_ID: ${{ secrets.DATADOG_APP_ID }}
232233
DATADOG_CLIENT_TOKEN: ${{ secrets.DATADOG_CLIENT_TOKEN }}
233234
ENABLE_SIGNING: ${{ secrets.ENABLE_SIGNING }}
235+
DOMAIN_REMOVAL_KEYS_FOR_REPAIR: ${{ secrets.DOMAIN_REMOVAL_KEYS_FOR_REPAIR }}
234236

235237
- name: Move version file for consistent artifact structure
236238
if: matrix.generate-version-file == true

.github/workflows/deploy-adr-docs.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ jobs:
3333
3434
- name: Deploy docs 🚀
3535
if: github.event_name == 'push' && github.ref_name == 'develop'
36-
uses: JamesIves/[email protected].3
36+
uses: JamesIves/[email protected].6
3737
with:
3838
branch: gh-pages
3939
clean: false

app/build.gradle.kts

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,30 @@ android {
8080
val datadogAppIdKey = "DATADOG_APP_ID"
8181
val appId: String? = System.getenv(datadogAppIdKey) ?: project.getLocalProperty(datadogAppIdKey, null)
8282
buildConfigField("String", datadogAppIdKey, appId?.let { "\"$it\"" } ?: "null")
83+
84+
// DOMAIN_REMOVAL_KEYS_FOR_REPAIR json format {"domain": ["some hex string key"]}
85+
val domainRemovalKeysForRepair = "DOMAIN_REMOVAL_KEYS_FOR_REPAIR"
86+
val domainKeysJson: String? = System.getenv(domainRemovalKeysForRepair) ?: project.getLocalProperty(domainRemovalKeysForRepair, null)
87+
val domainKeysHashMap = if (domainKeysJson != null) {
88+
try {
89+
val jsonMap = groovy.json.JsonSlurper().parseText(domainKeysJson) as Map<String, List<String>>
90+
val javaMapEntries = jsonMap.entries.joinToString("; ") { (domain, keys) ->
91+
val keysList = keys.joinToString("\", \"", "\"", "\"")
92+
"put(\"$domain\", java.util.Arrays.asList($keysList))"
93+
}
94+
"new java.util.HashMap<String, java.util.List<String>>(){{$javaMapEntries;}}"
95+
} catch (e: Exception) {
96+
println("Error parsing domain removal keys: ${e.message}")
97+
"new java.util.HashMap<String, java.util.List<String>>()"
98+
}
99+
} else {
100+
"new java.util.HashMap<String, java.util.List<String>>()"
101+
}
102+
buildConfigField(
103+
"java.util.Map<String, java.util.List<String>>",
104+
domainRemovalKeysForRepair,
105+
domainKeysHashMap
106+
)
83107
}
84108
// Most of the configuration is done in the build-logic
85109
// through the Wire Application convention plugin
@@ -214,7 +238,7 @@ dependencies {
214238
implementation(libs.compose.activity)
215239
implementation(libs.compose.constraintLayout)
216240
implementation(libs.compose.runtime.liveData)
217-
241+
218242
implementation(libs.androidx.paging3)
219243
implementation(libs.androidx.paging3Compose)
220244

app/src/androidTest/kotlin/com/wire/android/TestCoreLogicModule.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import com.wire.android.di.NoSession
2626
import com.wire.android.util.UserAgentProvider
2727
import com.wire.kalium.logic.CoreLogic
2828
import com.wire.kalium.logic.data.id.QualifiedIdMapper
29-
import com.wire.kalium.logic.data.id.QualifiedIdMapperImpl
3029
import com.wire.kalium.logic.feature.asset.AudioNormalizedLoudnessBuilder
3130
import com.wire.kalium.logic.feature.server.ServerConfigForAccountUseCase
3231
import com.wire.kalium.logic.feature.session.GetSessionsUseCase
@@ -111,7 +110,7 @@ class TestCoreLogicModule {
111110
@NoSession
112111
@Singleton
113112
@Provides
114-
fun provideNoSessionQualifiedIdMapper(): QualifiedIdMapper = QualifiedIdMapperImpl(null)
113+
fun provideNoSessionQualifiedIdMapper(): QualifiedIdMapper = QualifiedIdMapper(null)
115114

116115
@Singleton
117116
@Provides

app/src/main/kotlin/com/wire/android/di/CoreLogicModule.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ import com.wire.kalium.logic.CoreLogic
2727
import com.wire.kalium.logic.data.asset.KaliumFileSystem
2828
import com.wire.kalium.logic.data.id.FederatedIdMapper
2929
import com.wire.kalium.logic.data.id.QualifiedIdMapper
30-
import com.wire.kalium.logic.data.id.QualifiedIdMapperImpl
3130
import com.wire.kalium.logic.data.user.UserId
3231
import com.wire.kalium.logic.feature.analytics.GetCurrentAnalyticsTrackingIdentifierUseCase
3332
import com.wire.kalium.logic.feature.asset.AudioNormalizedLoudnessBuilder
@@ -140,7 +139,7 @@ class CoreLogicModule {
140139
@NoSession
141140
@Singleton
142141
@Provides
143-
fun provideNoSessionQualifiedIdMapper(): QualifiedIdMapper = QualifiedIdMapperImpl(null)
142+
fun provideNoSessionQualifiedIdMapper(): QualifiedIdMapper = QualifiedIdMapper(null)
144143

145144
@Singleton
146145
@Provides

app/src/main/kotlin/com/wire/android/di/KaliumConfigsModule.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@ class KaliumConfigsModule {
6363
limitTeamMembersFetchDuringSlowSync = BuildConfig.LIMIT_TEAM_MEMBERS_FETCH_DURING_SLOW_SYNC,
6464
isMlsResetEnabled = BuildConfig.IS_MLS_RESET_ENABLED,
6565
collaboraIntegration = BuildConfig.COLLABORA_INTEGRATION_ENABLED,
66-
dbInvalidationControlEnabled = BuildConfig.DB_INVALIDATION_CONTROL_ENABLED
66+
dbInvalidationControlEnabled = BuildConfig.DB_INVALIDATION_CONTROL_ENABLED,
67+
domainWithFaultyKeysMap = BuildConfig.DOMAIN_REMOVAL_KEYS_FOR_REPAIR
6768
)
6869
}
6970
}

app/src/main/kotlin/com/wire/android/di/accountScoped/DebugModule.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import com.wire.kalium.logic.data.user.UserId
2424
import com.wire.kalium.logic.feature.debug.BreakSessionUseCase
2525
import com.wire.kalium.logic.feature.debug.DebugScope
2626
import com.wire.kalium.logic.feature.debug.GetFeatureConfigUseCase
27+
import com.wire.kalium.logic.feature.debug.RepairFaultyRemovalKeysUseCase
2728
import dagger.Module
2829
import dagger.Provides
2930
import dagger.hilt.InstallIn
@@ -82,4 +83,9 @@ class DebugModule {
8283
@Provides
8384
fun provideDebugFeedConversationUseCase(debugScope: DebugScope) =
8485
debugScope.debugFeedConversationUseCase
86+
87+
@ViewModelScoped
88+
@Provides
89+
fun provideRepairFaultyRemovalKeysUseCase(debugScope: DebugScope): RepairFaultyRemovalKeysUseCase =
90+
debugScope.repairFaultyRemovalKeysUseCase
8591
}

app/src/main/kotlin/com/wire/android/ui/calling/CallActivity.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import androidx.lifecycle.lifecycleScope
2727
import com.wire.android.ui.AppLockActivity
2828
import com.wire.android.ui.common.setupOrientationForDevice
2929
import com.wire.android.util.SwitchAccountObserver
30-
import com.wire.kalium.logic.data.id.QualifiedIdMapperImpl
30+
import com.wire.kalium.logic.data.id.QualifiedIdMapper
3131
import dagger.hilt.android.AndroidEntryPoint
3232
import kotlinx.coroutines.launch
3333
import javax.inject.Inject
@@ -46,12 +46,13 @@ abstract class CallActivity : AppCompatActivity() {
4646
}
4747

4848
private val callActivityViewModel: CallActivityViewModel by viewModels()
49-
protected val qualifiedIdMapper = QualifiedIdMapperImpl(null)
49+
protected val qualifiedIdMapper = QualifiedIdMapper(null)
5050

5151
override fun onCreate(savedInstanceState: Bundle?) {
5252
super.onCreate(savedInstanceState)
5353
setupOrientationForDevice()
5454
}
55+
5556
fun switchAccountIfNeeded(userId: String?) {
5657
userId?.let {
5758
qualifiedIdMapper.fromStringToQualifiedID(it).run {

app/src/main/kotlin/com/wire/android/ui/debug/DebugDataOptions.kt

Lines changed: 64 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -32,17 +32,17 @@ import com.wire.android.R
3232
import com.wire.android.di.hiltViewModelScoped
3333
import com.wire.android.feature.analytics.AnonymousAnalyticsManagerImpl
3434
import com.wire.android.model.Clickable
35-
import com.wire.android.ui.common.rowitem.RowItemTemplate
3635
import com.wire.android.ui.common.WireDialog
3736
import com.wire.android.ui.common.WireDialogButtonProperties
3837
import com.wire.android.ui.common.WireDialogButtonType
3938
import com.wire.android.ui.common.button.WirePrimaryButton
4039
import com.wire.android.ui.common.button.WireSwitch
4140
import com.wire.android.ui.common.dimensions
41+
import com.wire.android.ui.common.rowitem.RowItemTemplate
42+
import com.wire.android.ui.common.rowitem.SectionHeader
4243
import com.wire.android.ui.common.snackbar.LocalSnackbarHostState
4344
import com.wire.android.ui.common.snackbar.collectAndShowSnackbar
4445
import com.wire.android.ui.e2eiEnrollment.GetE2EICertificateUI
45-
import com.wire.android.ui.common.rowitem.SectionHeader
4646
import com.wire.android.ui.home.settings.SettingsItem
4747
import com.wire.android.ui.theme.WireTheme
4848
import com.wire.android.ui.theme.wireColorScheme
@@ -78,6 +78,7 @@ fun DebugDataOptions(
7878
onResendFCMToken = viewModel::forceSendFCMToken,
7979
onEnableAsyncNotificationsChange = viewModel::enableAsyncNotifications,
8080
onShowFeatureFlags = onShowFeatureFlags,
81+
onRepairFaultyRemovalKeys = viewModel::repairFaultRemovalKeys
8182
)
8283
}
8384

@@ -98,6 +99,7 @@ fun DebugDataOptionsContent(
9899
checkCrlRevocationList: () -> Unit,
99100
onResendFCMToken: () -> Unit,
100101
onShowFeatureFlags: () -> Unit,
102+
onRepairFaultyRemovalKeys: () -> Unit,
101103
modifier: Modifier = Modifier,
102104
) {
103105
Column(modifier = modifier) {
@@ -209,10 +211,9 @@ fun DebugDataOptionsContent(
209211

210212
if (BuildConfig.PRIVATE_BUILD) {
211213
MLSOptions(
212-
keyPackagesCount = state.keyPackagesCount,
213-
mlsClientId = state.mslClientId,
214-
mlsErrorMessage = state.mlsErrorMessage,
215-
onCopyText = onCopyText
214+
mlsInfoState = state.mlsInfoState,
215+
onCopyText = onCopyText,
216+
onRepairFaultyRemovalKeys = onRepairFaultyRemovalKeys
216217
)
217218
}
218219

@@ -269,36 +270,58 @@ private fun GetE2EICertificateSwitch(
269270
//region MLS Options
270271
@Composable
271272
private fun MLSOptions(
272-
keyPackagesCount: Int,
273-
mlsClientId: String,
274-
mlsErrorMessage: String,
273+
mlsInfoState: MLSInfoState,
275274
onCopyText: (String) -> Unit,
275+
onRepairFaultyRemovalKeys: () -> Unit,
276276
) {
277277
SectionHeader(stringResource(R.string.label_mls_option_title))
278-
Column {
279-
SettingsItem(
280-
title = "Error Message",
281-
text = mlsErrorMessage,
282-
trailingIcon = null
283-
)
284-
SettingsItem(
285-
title = stringResource(R.string.label_key_packages_count),
286-
text = keyPackagesCount.toString(),
287-
trailingIcon = R.drawable.ic_copy,
288-
onIconPressed = Clickable(
289-
enabled = true,
290-
onClick = { onCopyText(keyPackagesCount.toString()) }
278+
with(mlsInfoState) {
279+
Column {
280+
SettingsItem(
281+
title = "Error Message",
282+
text = mlsErrorMessage,
283+
trailingIcon = null
291284
)
292-
)
293-
SettingsItem(
294-
title = stringResource(R.string.label_mls_client_id),
295-
text = mlsClientId,
296-
trailingIcon = R.drawable.ic_copy,
297-
onIconPressed = Clickable(
298-
enabled = true,
299-
onClick = { onCopyText(mlsClientId) }
285+
SettingsItem(
286+
title = stringResource(R.string.label_key_packages_count),
287+
text = keyPackagesCount.toString(),
288+
trailingIcon = R.drawable.ic_copy,
289+
onIconPressed = Clickable(
290+
enabled = true,
291+
onClick = { onCopyText(keyPackagesCount.toString()) }
292+
)
300293
)
301-
)
294+
SettingsItem(
295+
title = stringResource(R.string.label_mls_client_id),
296+
text = mlsClientId,
297+
trailingIcon = R.drawable.ic_copy,
298+
onIconPressed = Clickable(
299+
enabled = true,
300+
onClick = { onCopyText(mlsClientId) }
301+
)
302+
)
303+
RowItemTemplate(
304+
modifier = Modifier.wrapContentWidth(),
305+
title = {
306+
Text(
307+
style = MaterialTheme.wireTypography.body01,
308+
color = MaterialTheme.wireColorScheme.onBackground,
309+
text = stringResource(R.string.label_mls_repair_faulty_keys),
310+
modifier = Modifier.padding(start = dimensions().spacing8x)
311+
)
312+
},
313+
actions = {
314+
WirePrimaryButton(
315+
minSize = MaterialTheme.wireDimensions.buttonMediumMinSize,
316+
minClickableSize = MaterialTheme.wireDimensions.buttonMinClickableSize,
317+
onClick = onRepairFaultyRemovalKeys,
318+
text = stringResource(R.string.debug_settings_force_repair_faulty_keys),
319+
fillMaxWidth = false,
320+
loading = isLoadingRepair
321+
)
322+
}
323+
)
324+
}
302325
}
303326
}
304327
//endregion
@@ -457,7 +480,9 @@ private fun DebugToolsOptions(
457480
)
458481
}
459482
)
460-
EnableAsyncNotifications(isAsyncNotificationsEnabled, onEnableAsyncNotificationsChange)
483+
if (BuildConfig.DEBUG) {
484+
EnableAsyncNotifications(isAsyncNotificationsEnabled, onEnableAsyncNotificationsChange)
485+
}
461486
}
462487
}
463488
}
@@ -530,9 +555,12 @@ fun PreviewOtherDebugOptions() = WireTheme {
530555
buildVariant = "debug",
531556
onCopyText = {},
532557
state = DebugDataOptionsState(
533-
keyPackagesCount = 10,
534-
mslClientId = "clientId",
535-
mlsErrorMessage = "error",
558+
mlsInfoState = MLSInfoState(
559+
mlsClientId = "mlsClientId",
560+
mlsErrorMessage = "-",
561+
keyPackagesCount = 42,
562+
isLoadingRepair = false
563+
),
536564
debugId = "debugId",
537565
commitish = "commitish"
538566
),
@@ -546,5 +574,6 @@ fun PreviewOtherDebugOptions() = WireTheme {
546574
onResendFCMToken = {},
547575
onEnableAsyncNotificationsChange = {},
548576
onShowFeatureFlags = {},
577+
onRepairFaultyRemovalKeys = {}
549578
)
550579
}

app/src/main/kotlin/com/wire/android/ui/debug/DebugDataOptionsState.kt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,6 @@ package com.wire.android.ui.debug
2020
data class DebugDataOptionsState(
2121
val isEventProcessingDisabled: Boolean = false,
2222
val isAsyncNotificationsEnabled: Boolean = false,
23-
val keyPackagesCount: Int = 0,
24-
val mslClientId: String = "null",
25-
val mlsErrorMessage: String = "null",
2623
val debugId: String = "null",
2724
val commitish: String = "null",
2825
val certificate: String = "null",
@@ -32,4 +29,12 @@ data class DebugDataOptionsState(
3229
val isFederationEnabled: Boolean = false,
3330
val currentApiVersion: String = "null",
3431
val defaultProtocol: String = "null",
32+
val mlsInfoState: MLSInfoState = MLSInfoState()
33+
)
34+
35+
data class MLSInfoState(
36+
val mlsClientId: String = "null",
37+
val mlsErrorMessage: String = "-",
38+
val keyPackagesCount: Int = 0,
39+
val isLoadingRepair: Boolean = false,
3540
)

0 commit comments

Comments
 (0)