diff --git a/build-logic/plugins/src/main/kotlin/AndroidApplicationConventionPlugin.kt b/build-logic/plugins/src/main/kotlin/AndroidApplicationConventionPlugin.kt index 31cba16a0c9..5c385229e15 100644 --- a/build-logic/plugins/src/main/kotlin/AndroidApplicationConventionPlugin.kt +++ b/build-logic/plugins/src/main/kotlin/AndroidApplicationConventionPlugin.kt @@ -38,7 +38,7 @@ class AndroidApplicationConventionPlugin : Plugin { applicationId = AndroidApp.id defaultConfig.targetSdk = AndroidSdk.target versionCode = AndroidApp.versionCode - versionName = "${AndroidApp.versionName}-$versionCode" + versionName = "${AndroidApp.versionName}-${AndroidApp.leastSignificantVersionCode}" setProperty("archivesBaseName", "$applicationId-v$versionName") } diff --git a/build-logic/plugins/src/main/kotlin/AndroidCoordinates.kt b/build-logic/plugins/src/main/kotlin/AndroidCoordinates.kt index a0aee9cd96c..0d70447bc8f 100644 --- a/build-logic/plugins/src/main/kotlin/AndroidCoordinates.kt +++ b/build-logic/plugins/src/main/kotlin/AndroidCoordinates.kt @@ -27,4 +27,21 @@ object AndroidApp { const val id = "com.wire.android" const val versionName = "4.8.0" val versionCode = Versionizer().versionCode + + /** + * The last 5 digits of the VersionCode. From 0 to 99_999. + * It's an [Int], so it can be less than 5 digits when doing [toString], of course. + * Considering versionCode bumps every 5min, these are + * 288 per day + * 8640 per month + * 51840 per semester + * 103_680 per year. ~99_999 + * + * So it takes almost a whole year until it rotates back. + * It's very unlikely that two APKs with the same version (_e.g._ 4.8.0) + * will have the same [leastSignificantVersionCode], + * unless they are build almost one year apart. + */ + @Suppress("MagicNumber") + val leastSignificantVersionCode = versionCode % 100_000 } diff --git a/build-logic/plugins/src/main/kotlin/com/wire/android/gradle/version/Versionizer.kt b/build-logic/plugins/src/main/kotlin/com/wire/android/gradle/version/Versionizer.kt index 78a42ada13a..5729fa366ec 100644 --- a/build-logic/plugins/src/main/kotlin/com/wire/android/gradle/version/Versionizer.kt +++ b/build-logic/plugins/src/main/kotlin/com/wire/android/gradle/version/Versionizer.kt @@ -32,16 +32,29 @@ class Versionizer(private val localDateTime: LocalDateTime = LocalDateTime.now() val versionCode = generateVersionCode() private fun generateVersionCode(): Int { - val duration = Duration.between(DATE_OFFSET, localDateTime) - return (duration.seconds / 10).toInt() + return if (localDateTime <= V2_DATE_OFFSET) { + val duration = Duration.between(V1_DATE_OFFSET, localDateTime) + (duration.seconds / V1_SECONDS_PER_BUMP).toInt() + } else { // Use V2 + val duration = Duration.between(V2_DATE_OFFSET, localDateTime) + V2_VERSION_CODE_OFFSET + (duration.toMinutes() / V2_MINUTES_PER_BUMP).toInt() + } } companion object { - //This is Google Play Max Version Code allowed - //https://developer.android.com/studio/publish/versioning - const val MAX_VERSION_CODE_ALLOWED = 2100000000 + // This is Google Play Max Version Code allowed + // https://developer.android.com/studio/publish/versioning + const val MAX_VERSION_CODE_ALLOWED = 2_100_000_000 // The time-based versioning on the current Android project subtracts from this date to start the count - private val DATE_OFFSET = LocalDateTime.of(2021, 4, 21, 1, 0) + private val V1_DATE_OFFSET = LocalDateTime.of(2021, 4, 21, 1, 0) + private const val V1_SECONDS_PER_BUMP = 10 + + // V2 starts at 100 million and 1 thousand + private const val V2_VERSION_CODE_OFFSET = 100_001_000 + + // From this date onwards, we bump every 5 min instead of every 10 seconds + private val V2_DATE_OFFSET = LocalDateTime.of(2024, 6, 21, 0, 0) + private const val V2_MINUTES_PER_BUMP = 5 } } diff --git a/build-logic/plugins/src/test/kotlin/VersionizerTest.kt b/build-logic/plugins/src/test/kotlin/VersionizerTest.kt index 28e916b4d15..fae4c13f9e9 100644 --- a/build-logic/plugins/src/test/kotlin/VersionizerTest.kt +++ b/build-logic/plugins/src/test/kotlin/VersionizerTest.kt @@ -17,6 +17,7 @@ */ import com.wire.android.gradle.version.Versionizer +import org.amshove.kluent.internal.assertEquals import org.amshove.kluent.shouldBeEqualTo import org.amshove.kluent.shouldBeGreaterThan import org.amshove.kluent.shouldBeLessThan @@ -44,11 +45,24 @@ class VersionizerTest { } @Test - fun `given version generator when I generate a new version AFTER 10 SECONDS then I should get an directly incremented number`() { - val versionCodeOld = Versionizer(LocalDateTime.now().minusSeconds(10)).versionCode - val versionCodeNew = Versionizer().versionCode + fun `given before than 21 of June 2024 Build, then bump every 10 seconds`() { + val oldDate = LocalDateTime.of(2024, 6, 20, 0, 0) + val oldVersionCode = Versionizer(oldDate).versionCode + val newVersionCode = Versionizer(oldDate.plusSeconds(10)).versionCode - versionCodeNew shouldBeEqualTo versionCodeOld + 1 + assertVersionCodeAreProperlyIncremented(oldVersionCode, newVersionCode) + assertEquals(1, newVersionCode - oldVersionCode) + } + + @Test + fun `given after 21 of June 2024 Build, then bump every 5 minutes`() { + val oldDate = LocalDateTime.of(2024, 6, 22, 14, 0) + val oldVersionCode = Versionizer(oldDate).versionCode + val newVersionCode = Versionizer(oldDate.plusMinutes(5)).versionCode + + println("Version number: $newVersionCode") + assertVersionCodeAreProperlyIncremented(oldVersionCode, newVersionCode) + assertEquals(1, newVersionCode - oldVersionCode) } @Test diff --git a/config/detekt/baseline.xml b/config/detekt/baseline.xml index c7b56dc5bc3..39cf7e95ff4 100644 --- a/config/detekt/baseline.xml +++ b/config/detekt/baseline.xml @@ -6,16 +6,12 @@ ArgumentListWrapping:AvatarPicker.kt$( { MenuBottomSheetItem( title = stringResource(R.string.profile_image_choose_from_gallery_menu_item), icon = { MenuItemIcon( id = R.drawable.ic_gallery, contentDescription = stringResource(R.string.content_description_choose_from_gallery) ) }, action = { ArrowRightIcon() }, onItemClick = state::openGallery ) }, { MenuBottomSheetItem( title = stringResource(R.string.profile_image_take_a_picture_menu_item), icon = { MenuItemIcon( id = R.drawable.ic_camera, contentDescription = stringResource(R.string.content_description_take_a_picture) ) }, action = { ArrowRightIcon() }, onItemClick = state::openCamera ) } ) ArgumentListWrapping:Buttons.kt$( modifier = Modifier .fillMaxWidth() .padding( start = MaterialTheme.wireDimensions.spacing16x, end = MaterialTheme.wireDimensions.spacing16x, top = MaterialTheme.wireDimensions.spacing16x, bottom = MaterialTheme.wireDimensions.spacing4x ), text = stringResource(id = R.string.guest_link_button_copy_link), fillMaxWidth = true, onClick = onCopy ) ArgumentListWrapping:Buttons.kt$( modifier = Modifier .fillMaxWidth() .padding( start = MaterialTheme.wireDimensions.spacing16x, end = MaterialTheme.wireDimensions.spacing16x, top = MaterialTheme.wireDimensions.spacing4x, bottom = MaterialTheme.wireDimensions.spacing4x ), text = stringResource(id = R.string.guest_link_button_share_link), fillMaxWidth = true, onClick = onShare ) - ArgumentListWrapping:CodeTextField.kt$( value = value, onValueChange = { val textDigits = it.text.filter { it.isDigit() } // don't allow characters other than digits to be entered .let { it.substring(0, min(codeLength, it.length)) } // don't allow more digits than required onValueChange( CodeFieldValue( text = TextFieldValue(text = textDigits, selection = TextRange(textDigits.length)), isFullyFilled = textDigits.length == codeLength ) ) }, enabled = enabled, keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number, autoCorrect = false, imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = { keyboardController?.hide() }), interactionSource = interactionSource, decorationBox = { Row(horizontalArrangement = Arrangement.SpaceBetween) { repeat(codeLength) { index -> if (index != 0) Spacer(modifier = Modifier .weight(1f, fill = false) .width(maxHorizontalSpacing)) Digit( char = value.text.getOrNull(index), shape = shape, colors = colors, textStyle = textStyle, selected = index == value.text.length, state = state ) } } }) - ArgumentListWrapping:CodeTextField.kt$(modifier = Modifier .weight(1f, fill = false) .width(maxHorizontalSpacing)) ArgumentListWrapping:ConversationMessagesViewModelArrangement.kt$ConversationMessagesViewModelArrangement$( "key", assetMimeType, assetDataPath, assetSize, assetName, AttachmentType.fromMimeTypeString(assetMimeType) ) - ArgumentListWrapping:ConversationScreen.kt$( messageId = compositionState.editMessageId, editMessageText = compositionState.messageText, mentions = compositionState.selectedMentions.map { it.intoMessageMention() }) ArgumentListWrapping:ConversationTopAppBar.kt$( title = { Row( verticalAlignment = Alignment.CenterVertically, modifier = Modifier .fillMaxWidth() // TopAppBar adds TopAppBarHorizontalPadding = 4.dp to each element, so we need to offset it to retain the desired // spacing between navigation icon button and avatar according to the designs .offset(x = -dimensions().spacing4x) .clip(RoundedCornerShape(MaterialTheme.wireDimensions.buttonCornerSize)) .clickable(onClick = onDropDownClick, enabled = isDropDownEnabled && isInteractionEnabled) ) { val conversationAvatar: ConversationAvatar = conversationInfoViewState.conversationAvatar Avatar(conversationAvatar, conversationInfoViewState) Text( text = conversationInfoViewState.conversationName.asString(), style = MaterialTheme.wireTypography.title02, maxLines = 1, overflow = TextOverflow.Ellipsis, modifier = Modifier.weight(weight = 1f, fill = false) ) ConversationVerificationIcons( conversationInfoViewState.protocolInfo, conversationInfoViewState.mlsVerificationStatus, conversationInfoViewState.proteusVerificationStatus ) if (conversationInfoViewState.legalHoldStatus == Conversation.LegalHoldStatus.ENABLED) { HorizontalSpace.x4() LegalHoldIndicator() } if (isDropDownEnabled && isInteractionEnabled) { Icon( painter = painterResource(id = R.drawable.ic_dropdown_icon), contentDescription = stringResource(R.string.content_description_drop_down_icon) ) } } }, navigationIcon = { NavigationIconButton(NavigationIconType.Back, onBackButtonClick) }, actions = { Row( horizontalArrangement = Arrangement.spacedBy(dimensions().spacing4x), modifier = Modifier.padding(end = dimensions().spacing4x) ) { if (isSearchEnabled) { WireSecondaryIconButton( onButtonClicked = onSearchButtonClick, iconResource = R.drawable.ic_search, contentDescription = R.string.content_description_conversation_search_icon, minSize = dimensions().buttonSmallMinSize, minClickableSize = DpSize( dimensions().buttonSmallMinSize.width, dimensions().buttonMinClickableSize.height ), ) } CallControlButton( hasOngoingCall = hasOngoingCall, onJoinCallButtonClick = onJoinCallButtonClick, onPhoneButtonClick = onPhoneButtonClick, isCallingEnabled = isInteractionEnabled, onPermissionPermanentlyDenied = onPermissionPermanentlyDenied, ) } }, colors = TopAppBarDefaults.centerAlignedTopAppBarColors( containerColor = MaterialTheme.colorScheme.background, titleContentColor = MaterialTheme.colorScheme.onBackground, actionIconContentColor = MaterialTheme.colorScheme.onBackground, navigationIconContentColor = MaterialTheme.colorScheme.onBackground ) ) ArgumentListWrapping:ConversationsNavigationItem.kt$ConversationsNavigationItem.All$( R.drawable.ic_conversation, R.string.conversations_all_tab_title, "conversations_all") ArgumentListWrapping:ConversationsNavigationItem.kt$ConversationsNavigationItem.Calls$( R.drawable.ic_call, R.string.conversations_calls_tab_title, "conversations_calls") ArgumentListWrapping:ConversationsNavigationItem.kt$ConversationsNavigationItem.Mentions$( R.drawable.ic_mention, R.string.conversations_mentions_tab_title, "conversations_mentions") ArgumentListWrapping:DebugDataOptions.kt$(modifier = Modifier.wrapContentWidth(), title = { Text( style = MaterialTheme.wireTypography.body01, color = MaterialTheme.wireColorScheme.onBackground, text = stringResource(R.string.label_get_e2ei_cetificate), modifier = Modifier.padding(start = dimensions().spacing8x) ) }, actions = { WirePrimaryButton( onClick = { enrollE2EI() }, text = stringResource(R.string.label_get_e2ei_cetificate), fillMaxWidth = false ) } ) - ArgumentListWrapping:DeclineButton.kt$(interactionSource = remember { MutableInteractionSource() }, indication = rememberRipple(bounded = false, radius = dimensions().initiatingCallHangUpButtonSize / 2), role = Role.Button, onClick = { buttonClicked() }) ArgumentListWrapping:DeviceItem.kt$( Modifier .wrapContentWidth() .align(Alignment.CenterVertically)) ArgumentListWrapping:DrawableResultWrapper.kt$DrawableResultWrapper$( source = ImageSource(file = assetPath, diskCacheKey = assetPath.name), mimeType = null, dataSource = DataSource.DISK ) ArgumentListWrapping:DropDownMentionsSuggestions.kt$(modifier = Modifier .fillMaxWidth() .offset { IntOffset(0, coordinateY) } ) @@ -32,26 +28,20 @@ ArgumentListWrapping:GroupConversationOptions.kt$( GroupConversationOptionsState( conversationId = ConversationId("someValue", "someDomain"), groupName = "Normal Group Conversation", areAccessOptionsAvailable = true, isUpdatingNameAllowed = false, isUpdatingGuestAllowed = false, isUpdatingServicesAllowed = false, isUpdatingSelfDeletingAllowed = false, isUpdatingReadReceiptAllowed = false, isGuestAllowed = true, isServicesAllowed = true, isReadReceiptAllowed = true, ), {}, {}, {}, {}, {} ) ArgumentListWrapping:GroupConversationOptions.kt$( GroupConversationOptionsState( conversationId = ConversationId("someValue", "someDomain"), groupName = "Team Group Conversation", areAccessOptionsAvailable = true, isUpdatingNameAllowed = false, isUpdatingGuestAllowed = false, isUpdatingServicesAllowed = true, isUpdatingSelfDeletingAllowed = true, isUpdatingReadReceiptAllowed = true, isGuestAllowed = true, isServicesAllowed = true, isReadReceiptAllowed = true, ), {}, {}, {}, {}, {} ) ArgumentListWrapping:GroupConversationOptions.kt$( GroupConversationOptionsState( conversationId = ConversationId("someValue", "someDomain"), groupName = "Team Group Conversation", areAccessOptionsAvailable = true, isUpdatingNameAllowed = true, isUpdatingGuestAllowed = false, isUpdatingServicesAllowed = true, isUpdatingSelfDeletingAllowed = true, isUpdatingReadReceiptAllowed = true, isGuestAllowed = true, isServicesAllowed = true, isReadReceiptAllowed = true, ), {}, {}, {}, {}, {} ) - ArgumentListWrapping:GroupConversationOptions.kt$( GroupConversationOptionsState( conversationId = ConversationId("someValue", "someDomain"), groupName = "Team Group Conversation", areAccessOptionsAvailable = true, isUpdatingNameAllowed = true, isUpdatingGuestAllowed = true, isUpdatingServicesAllowed = true, isUpdatingSelfDeletingAllowed = true, isUpdatingReadReceiptAllowed = true, isGuestAllowed = true, isServicesAllowed = true, isReadReceiptAllowed = true, ), {}, {}, {}, {}, {} ) ArgumentListWrapping:GroupConversationOptions.kt$( enabled = canBeChanged, onClick = onClick, onLongClick = { /* not handled */ }) ArgumentListWrapping:GroupOptionsScreen.kt$( title = stringResource(R.string.disable_guests_dialog_title), text = stringResource(R.string.disable_guests_dialog_description), onDismiss = onAllowGuestsDialogDismissed, buttonsHorizontalAlignment = false, optionButton1Properties = WireDialogButtonProperties( onClick = onNotAllowGuestsClicked, text = stringResource(id = R.string.disable_guests_dialog_button), type = WireDialogButtonType.Primary ), optionButton2Properties = WireDialogButtonProperties( text = stringResource(R.string.allow_guests), onClick = onAllowGuestsClicked, type = WireDialogButtonType.Primary ), dismissButtonProperties = WireDialogButtonProperties( text = stringResource(R.string.label_cancel), onClick = onAllowGuestsDialogDismissed ) ) ArgumentListWrapping:GroupOptionsScreen.kt$(value = isAllowGuestEnabled, isOnOffVisible = false, onCheckedChange = { onAllowGuestChanged.invoke(it) }) ArgumentListWrapping:GroupOptionsScreen.kt$(value = isAllowServicesEnabled, isOnOffVisible = false, onCheckedChange = { onAllowServicesChanged.invoke(it) }) ArgumentListWrapping:GroupOptionsScreen.kt$(value = isReadReceiptEnabled, isOnOffVisible = false, onCheckedChange = { onReadReceiptChanged.invoke(it) }) - ArgumentListWrapping:HangUpButton.kt$(modifier = Modifier .width(MaterialTheme.wireDimensions.initiatingCallHangUpButtonSize) .height(MaterialTheme.wireDimensions.initiatingCallHangUpButtonSize), onHangUpButtonClicked = { }) ArgumentListWrapping:HomeScreen.kt$( onPermissionDenied = { /** TODO: Show a dialog rationale explaining why the permission is needed **/ }) ArgumentListWrapping:HomeSheetContent.kt$( icon = { MenuItemIcon( id = R.drawable.ic_archive, contentDescription = stringResource( if (conversationSheetContent.isArchived) R.string.content_description_unarchive else R.string.content_description_move_to_archive ), ) }, title = stringResource( if (!conversationSheetContent.isArchived) R.string.label_move_to_archive else R.string.label_unarchive ), onItemClick = { with(conversationSheetContent) { updateConversationArchiveStatus( DialogState( conversationId = conversationId, conversationName = title, conversationTypeDetail = conversationTypeDetail, isArchived = isArchived, isMember = conversationSheetContent.selfRole != null ) ) } }) ArgumentListWrapping:ImageAssetTest.kt$ImageAssetTest$( imageLoader, userAssetId ) ArgumentListWrapping:ImageAssetsContent.kt$( uiAsset.conversationId, uiAsset.messageId, uiAsset.isSelfAsset ) - ArgumentListWrapping:ImageMessageTypes.kt$(modifier = Modifier.size(MaterialTheme.wireDimensions.spacing24x), contentAlignment = Alignment.Center) ArgumentListWrapping:ImportMediaScreen.kt$(text = stringResource(R.string.label_learn_more), tag = "learn_more", annotation = learnMoreUrl, onClick = { CustomTabsHelper.launchUrl(context, learnMoreUrl) } ) - ArgumentListWrapping:LegalHoldRequestedDialog.kt$( LegalHoldRequestedState.Visible( legalHoldDeviceFingerprint = "0123456789ABCDEF", requiresPassword = false, userId = UserId("", ""), ), {}, {}, {} ) - ArgumentListWrapping:LegalHoldRequestedDialog.kt$( LegalHoldRequestedState.Visible( legalHoldDeviceFingerprint = "0123456789ABCDEF", requiresPassword = true, userId = UserId("", ""), ), {}, {}, {} ) ArgumentListWrapping:LegalHoldSubjectProfileDialog.kt$( title = stringResource(id = R.string.legal_hold_subject_dialog_title, userName), withDefaultInfo = true, cancelText = stringResource(id = R.string.label_close), dialogDismissed = dialogDismissed) ArgumentListWrapping:LegalHoldSubjectProfileDialog.kt$( title = stringResource(id = R.string.legal_hold_subject_self_dialog_title), withDefaultInfo = true, cancelText = stringResource(id = R.string.label_close), dialogDismissed = dialogDismissed) ArgumentListWrapping:LoginEmailVerificationCodeScreen.kt$(modifier = Modifier .height(dimensions().spacing8x) .weight(1f)) ArgumentListWrapping:MarkdownBlockQuote.kt$(modifier = Modifier .drawBehind { drawLine( color = color, strokeWidth = 2f, start = Offset(xOffset, 0f), end = Offset(xOffset, size.height) ) } .padding(start = dimensions().spacing16x, top = dimensions().spacing4x, bottom = dimensions().spacing4x)) - ArgumentListWrapping:MarkdownCodeBlock.kt$( dimensions().spacing1x, MaterialTheme.wireColorScheme.outline, shape = RoundedCornerShape(dimensions().spacing4x) ) ArgumentListWrapping:MarkdownComposer.kt$( paragraph = node, nodeData = updatedNodeData, clickable ) ArgumentListWrapping:MarkdownHelperTest.kt$MarkdownHelperTest$(TableRow() .apply { appendChild(TableCell().apply { appendChild(Text("Cell")) }) }) ArgumentListWrapping:MarkdownHelperTest.kt$MarkdownHelperTest$(TableRow() .apply { appendChild(TableCell().apply { appendChild(Text("Header")) }) }) @@ -91,22 +81,17 @@ ArgumentListWrapping:QuotedMessage.kt$( senderName = senderName.asString(), style = style, modifier = modifier, centerContent = { MainContentText(locationName) }, startContent = { startContent() }, endContent = { Icon( painter = painterResource(R.drawable.ic_location), contentDescription = null, modifier = modifier .size(dimensions().spacing24x), tint = colorsScheme().secondaryText ) }, footerContent = { QuotedMessageOriginalDate(originalDateTimeText) }, clickable = clickable ) ArgumentListWrapping:QuotedMessage.kt$( senderName = senderName.asString(), style = style, modifier = modifier, centerContent = { assetName?.let { MainContentText(it) } }, startContent = { startContent() }, endContent = { Icon( painter = painterResource(R.drawable.ic_file), contentDescription = null, modifier = modifier .size(dimensions().spacing24x), tint = colorsScheme().secondaryText ) }, footerContent = { QuotedMessageOriginalDate(originalDateTimeText) }, clickable = clickable ) ArgumentListWrapping:QuotedMessage.kt$( senderName.asString(), style = style, modifier = modifier, startContent = { startContent() }, centerContent = { StatusBox(stringResource(R.string.deleted_message_text)) }, footerContent = { QuotedMessageOriginalDate(originalDateDescription) }, clickable = clickable ) - ArgumentListWrapping:QuotedMessage.kt$( senderName.asString(), style = style, modifier = modifier, startContent = { startContent() }, centerContent = { editedTimeDescription?.let { if (style == COMPLETE) { StatusBox(it.asString()) } } MainContentText(text) }, footerContent = { QuotedMessageOriginalDate(originalDateTimeDescription) }, clickable = clickable ) ArgumentListWrapping:RegularMessageContentMapper.kt$RegularMessageMapper$( if (message.isSelfMessage) { UIText.StringResource(messageResourceProvider.memberNameYouTitlecase) } else { sender?.name.orUnknownName() }, message.isSelfMessage ) ArgumentListWrapping:RemoveDeviceViewModel.kt$RemoveDeviceViewModel$( password, null, modelPostfix = if (BuildConfig.PRIVATE_BUILD) " [${BuildConfig.FLAVOR}_${BuildConfig.BUILD_TYPE}]" else null ) ArgumentListWrapping:RichMenuBottomSheetItem.kt$( title = title, color = titleColor, titleStyleUnselected = titleStyleUnselected, titleStyleSelected = titleStyleSelected, state = state ) ArgumentListWrapping:ScalaMessageDAO.kt$ScalaMessageDAO$( "SELECT *" + // Assets are required, otherwise we get exception "requesting column name with table name". "FROM $MESSAGES_TABLE_NAME AS m " + "LEFT JOIN $ASSETS_TABLE_NAME ON m.$COLUMN_ASSET_ID = $ASSETS_TABLE_NAME.$COLUMN_ID " + "WHERE m.$COLUMN_CONVERSATION_ID = ?" + "ORDER BY m.$COLUMN_TIME ASC ", arrayOf(scalaConversation.id) ) - ArgumentListWrapping:SearchAllPeopleScreen.kt$(header = searchTitle, items = (if (showAllItems) searchResult else searchResult.take( DEFAULT_SEARCH_RESULT_ITEM_SIZE )) .associateBy { it.id }) - ArgumentListWrapping:SearchBar.kt$( modifier = Modifier.padding(start = dimensions().spacing12x), onClick = { onTextTyped(TextFieldValue("")) }) ArgumentListWrapping:SearchConversationScreen.kt$( horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier .fillMaxWidth() .wrapContentHeight() ) ArgumentListWrapping:SearchConversationScreen.kt$( horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier .padding(horizontal = dimensions().spacing48x) .wrapContentHeight() ) - ArgumentListWrapping:SearchPeopleRouter.kt$( initialPage = initialPageIndex, pageCount = { if (searchState.isServicesAllowed) SearchPeopleTabItem.entries.size else 1 }) ArgumentListWrapping:SearchPeopleRouter.kt$( targetState = searchBarState.isSearchActive, label = "" ) ArgumentListWrapping:SelfUserProfileScreen.kt$( account, clickable = remember { Clickable(enabled = true, onClick = { if (isUserInCall()) { Toast.makeText( context, context.getString(R.string.cant_switch_account_in_call), Toast.LENGTH_SHORT ).show() } else { onOtherAccountClick(account.id) } }) }) ArgumentListWrapping:SendMessageViewModelTest.kt$SendMessageViewModelTest$( "key", "audio/mp4", assetPath, assetSize, assetName, AttachmentType.AUDIO ) ArgumentListWrapping:SendMessageViewModelTest.kt$SendMessageViewModelTest$( "key", "image/jpeg", assetPath, assetSize, assetName, AttachmentType.IMAGE ) ArgumentListWrapping:ServerTitle.kt$(painter = painterResource(id = R.drawable.ic_info), contentDescription = null, modifier = Modifier .constrainAs(infoIcon) { start.linkTo(serverTitle.end) centerVerticallyTo(serverTitle) } .padding(start = dimensions().spacing8x) .size(MaterialTheme.wireDimensions.wireIconButtonSize) .clickable(Clickable(true, onClick = { serverFullDetailsDialogState = true })), tint = MaterialTheme.wireColorScheme.secondaryText ) - ArgumentListWrapping:SetLockCodeScreen.kt$( snackbarHost = {}, topBar = { WireCenterAlignedTopAppBar( onNavigationPressed = onBackPress, navigationIconType = if (state.isEditable) NavigationIconType.Back else null, elevation = dimensions().spacing0x, title = stringResource(id = R.string.settings_set_lock_screen_title) ) }) ArgumentListWrapping:SettingsScreen.kt$("AppLockConfig " + "isAppLockEditable: ${settingsState.isAppLockEditable} isAppLockEnabled: ${settingsState.isAppLockEnabled}") ArgumentListWrapping:SystemMessageContentMapperTest.kt$SystemMessageContentMapperTest$( listOf(userId2, userId3), MessageContent.MemberChange.FailedToAdd.Type.Unknown ) ArgumentListWrapping:SystemMessageItem.kt$( res, normalStyle, boldStyle, normalColor, boldColor, errorColor, isErrorString, if (usersCount > SINGLE_EXPANDABLE_THRESHOLD) expanded else true ) @@ -129,7 +114,6 @@ ArgumentListWrapping:WirePrimaryIconButton.kt$(40.dp, 40.dp) ArgumentListWrapping:WirePrimaryIconButton.kt$(48.dp, 48.dp) ArgumentListWrapping:WirePrimaryIconButton.kt$({}, false, com.google.android.material.R.drawable.m3_password_eye, 0, CircleShape, DpSize(40.dp, 40.dp), DpSize(48.dp, 48.dp)) - ArgumentListWrapping:WireTextField.kt$( start = if (leadingIcon == null) 16.dp else 0.dp, end = if (trailingOrStateIcon == null) 16.dp else 0.dp, top = 2.dp, bottom = 2.dp ) ArgumentListWrapping:WireTextFieldDefaults.kt$<no name provided>$( when (state) { WireTextFieldState.Disabled -> disabledTextColor is WireTextFieldState.Error -> errorColor WireTextFieldState.Success -> successColor else -> textColor }) ArgumentListWrapping:WireTextFieldDefaults.kt$<no name provided>$( when (state) { is WireTextFieldState.Error -> errorColor else -> descriptionColor }) ArgumentListWrapping:WireTextFieldDefaults.kt$<no name provided>$( when { state is WireTextFieldState.Error -> errorColor state is WireTextFieldState.Success -> successColor focused -> focusColor else -> borderColor }) @@ -159,8 +143,6 @@ CommentSpacing:ThemeUtils.kt$ScreenSizeDependent$//sw480dp CommentSpacing:ThemeUtils.kt$ScreenSizeDependent$//sw600dp CommentSpacing:ThemeUtils.kt$ScreenSizeDependent$//sw840dp - CommentSpacing:Versionizer.kt$Versionizer.Companion$//This is Google Play Max Version Code allowed - CommentSpacing:Versionizer.kt$Versionizer.Companion$//https://developer.android.com/studio/publish/versioning CommentWrapping:ConversationScreen.kt$/* do nothing */ CommentWrapping:DrawingCanvasComponent.kt$/*, bitmap*/ CommentWrapping:FileUtil.kt$/* description = */ @@ -171,7 +153,6 @@ CommentWrapping:FileUtil.kt$/* showNotification = */ CommentWrapping:FileUtil.kt$/* title = */ CommentWrapping:IncomingCallScreen.kt$/* do nothing */ - CommentWrapping:InitiatingCallScreen.kt$/* do nothing */ CommentWrapping:MigrationManager.kt$MigrationManager$/* no-op */ CommentWrapping:OngoingCallScreen.kt$/* do nothing */ CommentWrapping:RegisterDeviceViewModel.kt$RegisterDeviceViewModel$/* app is already waiting for the user to enter the password */ @@ -187,16 +168,11 @@ KdocWrapping:HomeScreen.kt$/** TODO: Show a dialog rationale explaining why the permission is needed **/ KdocWrapping:MediaGalleryScreen.kt$/** Nothing to do **/ KdocWrapping:RecordAudioComponent.kt$/** Nothing to do **/ - MagicNumber:Versionizer.kt$Versionizer$10 MaxLineLength:WirePrimaryIconButton.kt$WirePrimaryIconButton({}, false, com.google.android.material.R.drawable.m3_password_eye, 0, CircleShape, DpSize(40.dp, 40.dp), DpSize(48.dp, 48.dp)) MaximumLineLength:WirePrimaryIconButton.kt$ MultiLineIfElse:AccountSwitchUseCase.kt$AccountSwitchUseCase$appLogger.i("$TAG No next account to switch to") MultiLineIfElse:AccountSwitchUseCase.kt$AccountSwitchUseCase$appLogger.i("$TAG Switching to next account: ${nextSessionId.toLogString()}") MultiLineIfElse:AdditionalOptionButton.kt$WireButtonState.Disabled - MultiLineIfElse:AssetMessageTypes.kt$Modifier .align(Alignment.Center) .fillMaxWidth() - MultiLineIfElse:AssetMessageTypes.kt$Modifier .size(dimensions().importedMediaAssetSize) .align(Alignment.Center) .fillMaxSize() - MultiLineIfElse:AssetTooLargeDialog.kt$it - MultiLineIfElse:AssetTooLargeDialog.kt$it + "\n" + stringResource(R.string.label_file_saved_to_device) MultiLineIfElse:AuthorHeaderHelper.kt$AuthorHeaderHelper$currentMessage is UIMessage.Regular MultiLineIfElse:AuthorHeaderHelper.kt$AuthorHeaderHelper$false MultiLineIfElse:BackupAndRestoreViewModel.kt$BackupAndRestoreViewModel$kaliumFileSystem.delete(latestImportedBackupTempPath) @@ -206,13 +182,8 @@ MultiLineIfElse:BottomNavigation.kt$MaterialTheme.wireDimensions.bottomNavigationHorizontalPadding MultiLineIfElse:Buttons.kt$WireButtonState.Default MultiLineIfElse:Buttons.kt$WireButtonState.Disabled - MultiLineIfElse:CameraButton.kt$R.string.content_description_calling_turn_camera_off - MultiLineIfElse:CameraButton.kt$R.string.content_description_calling_turn_camera_on - MultiLineIfElse:CameraFlipButton.kt$R.string.content_description_calling_flip_camera_off - MultiLineIfElse:CameraFlipButton.kt$R.string.content_description_calling_flip_camera_on MultiLineIfElse:ClearConversationContentDialog.kt$WireButtonState.Disabled MultiLineIfElse:ClearConversationContentDialog.kt$WireButtonState.Error - MultiLineIfElse:CodeTextField.kt$Spacer(modifier = Modifier .weight(1f, fill = false) .width(maxHorizontalSpacing)) MultiLineIfElse:CollapsingTopBarScaffold.kt$<no name provided>$Offset.Zero MultiLineIfElse:CollapsingTopBarScaffold.kt$<no name provided>$Velocity.Zero MultiLineIfElse:CollapsingTopBarScaffold.kt$<no name provided>$available @@ -223,8 +194,6 @@ MultiLineIfElse:CommonTopAppBar.kt$R.drawable.ic_microphone_white_muted MultiLineIfElse:CommonTopAppBar.kt$R.string.content_description_calling_call_muted MultiLineIfElse:CommonTopAppBar.kt$R.string.content_description_calling_call_unmuted - MultiLineIfElse:CommonTopAppBar.kt$this - MultiLineIfElse:ConversationCallViewModel.kt$ConversationCallViewModel$null MultiLineIfElse:ConversationListViewModel.kt$ConversationListViewModel$put( ConversationFolder.Predefined.Conversations, remainingConversations ) MultiLineIfElse:ConversationListViewModel.kt$ConversationListViewModel$put( ConversationFolder.Predefined.NewActivities, unreadConversations ) MultiLineIfElse:ConversationListViewModel.kt$ConversationListViewModel$put( ConversationFolder.WithoutHeader, this@withFolders ) @@ -241,8 +210,6 @@ MultiLineIfElse:CreateAccountEmailScreen.kt$WireTextFieldState.Default MultiLineIfElse:CreateAccountEmailScreen.kt$WireTextFieldState.Error() MultiLineIfElse:CreateAccountEmailScreen.kt$when (error) { CreateAccountEmailViewState.EmailError.TextFieldError.AlreadyInUseError -> stringResource(R.string.create_account_email_already_in_use_error) CreateAccountEmailViewState.EmailError.TextFieldError.BlacklistedEmailError -> stringResource(R.string.create_account_email_blacklisted_error) CreateAccountEmailViewState.EmailError.TextFieldError.DomainBlockedError -> stringResource(R.string.create_account_email_domain_blocked_error) CreateAccountEmailViewState.EmailError.TextFieldError.InvalidEmailError -> stringResource(R.string.create_account_email_invalid_error) } - MultiLineIfElse:CreateAccountEmailViewModel.kt$CreateAccountEmailViewModel$CreateAccountEmailViewState.EmailError.None - MultiLineIfElse:CreateAccountEmailViewModel.kt$CreateAccountEmailViewModel$CreateAccountEmailViewState.EmailError.TextFieldError.InvalidEmailError MultiLineIfElse:CreatePasswordProtectedGuestLinkScreen.kt$WireButtonState.Default MultiLineIfElse:CreatePasswordProtectedGuestLinkScreen.kt$WireButtonState.Disabled MultiLineIfElse:CurrentScreenManager.kt$CurrentScreenManager$currentScreenState @@ -254,14 +221,9 @@ MultiLineIfElse:DeviceDetailsScreen.kt$MaterialTheme.wireColorScheme.onBackground MultiLineIfElse:DeviceDetailsScreen.kt$MaterialTheme.wireColorScheme.secondaryText MultiLineIfElse:DeviceDetailsScreen.kt$navigator.navigateBack() - MultiLineIfElse:DeviceItem.kt$ProteusVerifiedIcon( Modifier .wrapContentWidth() .align(Alignment.CenterVertically)) MultiLineIfElse:ElevationScrollExt.kt$maxElevation MultiLineIfElse:ElevationScrollExt.kt$minOf((it.offset + it.size - layoutInfo.viewportEndOffset).dp, maxElevation) MultiLineIfElse:ElevationScrollExt.kt$minOf(firstVisibleItemScrollOffset.toFloat().dp, maxElevation) - MultiLineIfElse:FileManager.kt$FileManager$AUDIO_MIME_TYPE - MultiLineIfElse:FileManager.kt$FileManager$attachmentUri .getMimeType(context) .orDefault(DEFAULT_FILE_MIME_TYPE) - MultiLineIfElse:ForgotLockCodeScreen.kt$ForgotLockCodeResetDeviceDialog( username = dialogState.username, isPasswordRequired = dialogState.passwordRequired, isPasswordValid = dialogState.passwordValid, isResetDeviceEnabled = dialogState.resetDeviceEnabled, onPasswordChanged = viewModel::onPasswordChanged, onResetDeviceClicked = viewModel::onResetDeviceConfirmed, onDialogDismissed = viewModel::onDialogDismissed, ) - MultiLineIfElse:ForgotLockCodeScreen.kt$ForgotLockCodeResettingDeviceDialog() MultiLineIfElse:GetE2eiCertificateButton.kt$WireButtonState.Default MultiLineIfElse:GetE2eiCertificateButton.kt$WireButtonState.Disabled MultiLineIfElse:GroupConversationDetailsTopBarCollapsing.kt$"" @@ -270,11 +232,6 @@ MultiLineIfElse:GroupConversationNameComponent.kt$when (error) { GroupMetadataState.NewGroupError.TextFieldError.GroupNameEmptyError -> WireTextFieldState.Error(stringResource(id = R.string.empty_group_name_error)) GroupMetadataState.NewGroupError.TextFieldError.GroupNameExceedLimitError -> WireTextFieldState.Error(stringResource(id = R.string.group_name_exceeded_limit_error)) } MultiLineIfElse:HighLightName.kt$MaterialTheme.wireColorScheme.secondaryText MultiLineIfElse:HighLightName.kt$MaterialTheme.wireTypography.title02.color - MultiLineIfElse:HomeScreen.kt$R.string.conversation_content_delete_failure - MultiLineIfElse:HomeScreen.kt$R.string.error_archiving_conversation - MultiLineIfElse:HomeScreen.kt$R.string.group_content_delete_failure - MultiLineIfElse:HomeScreen.kt$R.string.success_archiving_conversation - MultiLineIfElse:HomeScreen.kt$R.string.success_unarchiving_conversation MultiLineIfElse:HomeSheetContent.kt$R.string.content_description_move_to_archive MultiLineIfElse:HomeSheetContent.kt$R.string.content_description_unarchive MultiLineIfElse:HomeSheetContent.kt$R.string.label_move_to_archive @@ -285,10 +242,6 @@ MultiLineIfElse:ImageMessageTypes.kt$R.string.error_uploading_image_message MultiLineIfElse:ImageMessageTypes.kt$modifier .fillMaxWidth() .height(dimensions().importedMediaAssetSize) MultiLineIfElse:ImageMessageTypes.kt$modifier .width(dimensions().importedMediaAssetSize) .height(dimensions().importedMediaAssetSize) - MultiLineIfElse:ImportMediaAuthenticatedViewModel.kt$ImportMediaAuthenticatedViewModel$conversations - MultiLineIfElse:ImportMediaAuthenticatedViewModel.kt$ImportMediaAuthenticatedViewModel$searchShareableConversation( conversations, searchQuery ) - MultiLineIfElse:ImportMediaScreen.kt$dimensions().importedMediaAssetSize + horizontalPadding.times(2) - MultiLineIfElse:ImportMediaScreen.kt$screenWidth - (horizontalPadding * 2) MultiLineIfElse:IncomingCallScreen.kt$stringResource(R.string.calling_label_incoming_call) MultiLineIfElse:IncomingCallViewModel.kt$IncomingCallViewModel$null MultiLineIfElse:InternalContactSearchResultItem.kt$Clickable { onCheckChange(!isAddedToGroup) } @@ -300,12 +253,6 @@ MultiLineIfElse:LoginScreen.kt$E2EIEnrollmentScreenDestination MultiLineIfElse:LoginScreen.kt$HomeScreenDestination MultiLineIfElse:LoginScreen.kt$InitialSyncScreenDestination - MultiLineIfElse:LoginScreen.kt$LoginEmailVerificationCodeScreen(onSuccess, loginEmailViewModel) - MultiLineIfElse:LoginScreen.kt$MainLoginContent(onBackPressed, onSuccess, onRemoveDeviceNeeded, viewModel, loginEmailViewModel, ssoLoginResult) - MultiLineIfElse:LoginViewModel.kt$LoginViewModel$false - MultiLineIfElse:LoginViewModel.kt$LoginViewModel$preFilledUserIdentifier.userIdentifier - MultiLineIfElse:LoginViewModel.kt$LoginViewModel$savedStateHandle[USER_IDENTIFIER_SAVED_STATE_KEY] ?: String.EMPTY - MultiLineIfElse:LoginViewModel.kt$LoginViewModel$serverConfig.apiProxy?.needsAuthentication!! MultiLineIfElse:MarkdownHelper.kt$null MultiLineIfElse:MarkdownHelper.kt$this MultiLineIfElse:MediaGalleryScreenState.kt$MediaGalleryScreenState$modalBottomSheetState.hide() @@ -330,13 +277,9 @@ MultiLineIfElse:MessagePreviewContentMapper.kt$R.string.last_message_self_user_shared_image MultiLineIfElse:MessagePreviewContentMapper.kt$R.string.last_message_self_user_shared_location MultiLineIfElse:MessagePreviewContentMapper.kt$R.string.last_message_self_user_shared_video - MultiLineIfElse:MessageTypes.kt$DisplayableImageMessage(asset, imgParams.normalizedWidth, imgParams.normalizedHeight) - MultiLineIfElse:MessageTypes.kt$ImportedImageMessage(asset, shouldFillMaxWidth) MultiLineIfElse:MessageTypes.kt$WireButtonState.Default MultiLineIfElse:MessageTypes.kt$WireButtonState.Disabled MultiLineIfElse:MessageTypes.kt$WireButtonState.Selected - MultiLineIfElse:MicrophoneButton.kt$R.string.content_description_calling_mute_call - MultiLineIfElse:MicrophoneButton.kt$R.string.content_description_calling_unmute_call MultiLineIfElse:MigrateClientsDataUseCase.kt$MigrateClientsDataUseCase$listOf() MultiLineIfElse:MigrateClientsDataUseCase.kt$MigrateClientsDataUseCase$sessionFileName MultiLineIfElse:MigrationManagerTest.kt$MigrationManagerTest.Arrangement$coEvery { markUsersAsNeedToBeMigrated() } returns Unit @@ -364,12 +307,8 @@ MultiLineIfElse:RemoveDeviceScreen.kt$E2EIEnrollmentScreenDestination MultiLineIfElse:RemoveDeviceScreen.kt$HomeScreenDestination MultiLineIfElse:RemoveDeviceScreen.kt$InitialSyncScreenDestination - MultiLineIfElse:RemoveDeviceViewModel.kt$RemoveDeviceViewModel$state - MultiLineIfElse:RemoveDeviceViewModel.kt$RemoveDeviceViewModel$state.copy( removeDeviceDialogState = it.copy(password = newText, removeEnabled = newText.text.isNotEmpty()), error = RemoveDeviceError.None ) MultiLineIfElse:ScalaServerConfigDAO.kt$ScalaServerConfigDAO$ServerConfig.Links(apiBaseUrl, accountsBaseUrl, webSocketBaseUrl, blackListUrl, teamsUrl, websiteUrl, title, false, null) MultiLineIfElse:ScalaServerConfigDAO.kt$ScalaServerConfigDAO$null - MultiLineIfElse:SearchAllPeopleScreen.kt$searchResult - MultiLineIfElse:SearchAllPeopleScreen.kt$searchResult.take( DEFAULT_SEARCH_RESULT_ITEM_SIZE ) MultiLineIfElse:SelfDeletionMenuItems.kt$RichMenuItemState.DEFAULT MultiLineIfElse:SelfDeletionMenuItems.kt$RichMenuItemState.SELECTED MultiLineIfElse:ServiceDetailsViewModel.kt$ServiceDetailsViewModel$serviceNotFound() @@ -377,10 +316,6 @@ MultiLineIfElse:SettingsScreen.kt$turnAppLockOffDialogState.show(Unit) MultiLineIfElse:ShouldStartPersistentWebSocketServiceUseCase.kt$ShouldStartPersistentWebSocketServiceUseCase$Result.Success(false) MultiLineIfElse:ShouldStartPersistentWebSocketServiceUseCase.kt$ShouldStartPersistentWebSocketServiceUseCase$Result.Success(true) - MultiLineIfElse:SpeakerButton.kt$R.drawable.ic_speaker_off - MultiLineIfElse:SpeakerButton.kt$R.drawable.ic_speaker_on - MultiLineIfElse:SpeakerButton.kt$R.string.content_description_calling_turn_speaker_off - MultiLineIfElse:SpeakerButton.kt$R.string.content_description_calling_turn_speaker_on MultiLineIfElse:StyledStringUtil.kt$append(text) MultiLineIfElse:StyledStringUtil.kt$bold { append(text) } MultiLineIfElse:SystemMessageContentMapper.kt$SystemMessageContentMapper$others(members.map { mapMemberName(user = userList.findUser(userId = it), type = SelfNameType.ResourceLowercase) }) @@ -414,12 +349,8 @@ MultiLineIfElse:WelcomeScreen.kt$pageState.scrollToPage(scrollToPage) MultiLineIfElse:WireActivityDialogs.kt$R.string.team_app_lock_disabled MultiLineIfElse:WireActivityDialogs.kt$R.string.team_app_lock_enabled - MultiLineIfElse:WireActivityViewModel.kt$WireActivityViewModel$flowOf(NewClientResult.Empty) - MultiLineIfElse:WireActivityViewModel.kt$WireActivityViewModel$observeNewClients() - MultiLineIfElse:WireButton.kt$BorderStroke( width = borderWidth, color = colors.outlineColor(state, interactionSource).value ) MultiLineIfElse:WireButton.kt$it.fillMaxWidth() MultiLineIfElse:WireButton.kt$it.wrapContentWidth() - MultiLineIfElse:WireButton.kt$null MultiLineIfElse:WireDropDown.kt$MaterialTheme.wireColorScheme.onSecondaryButtonEnabled MultiLineIfElse:WireDropDown.kt$MaterialTheme.wireColorScheme.onSecondaryButtonSelected MultiLineIfElse:WireDropDown.kt$MaterialTheme.wireColorScheme.secondaryButtonSelected @@ -430,9 +361,7 @@ MultiLineIfElse:WireNotificationManager.kt$WireNotificationManager$servicesManager.stopOngoingCallService() MultiLineIfElse:WirePasswordTextField.kt$R.string.content_description_hide_password MultiLineIfElse:WirePasswordTextField.kt$R.string.content_description_reveal_password - MultiLineIfElse:WireTextField.kt$it MultiLineIfElse:WriteStorageRequestFlow.kt$onGranted() - NoBlankLineBeforeRbrace:CreateAccountEmailViewState.kt$CreateAccountEmailViewState$ NoBlankLineBeforeRbrace:DrawingCanvasViewModel.kt$DrawingCanvasViewModel$ NoBlankLineBeforeRbrace:EmailComposer.kt$EmailComposer$ NoBlankLineBeforeRbrace:FakeKaliumFileSystem.kt$FakeKaliumFileSystem$ @@ -470,39 +399,26 @@ NoSemicolons:AdditionalOptionMenuState.kt$AdditionalOptionSubMenuState.Gif$; NoSemicolons:CallRinger.kt$CallRinger$; NoSemicolons:CollapsingTopBarScaffold.kt$State.COLLAPSED$; - NoSemicolons:ConversationMediaScreen.kt$ConversationMediaScreenTabItem.FILES$; NoSemicolons:ConversationRouter.kt$ConversationItemType.SEARCH$; - NoSemicolons:GroupConversationDetailsScreen.kt$GroupConversationDetailsTabItem.PARTICIPANTS$; NoSemicolons:LastConversationEvent.kt$CallEvent.NoAnswerCall$; - NoSemicolons:LoginScreen.kt$LoginTabItem.SSO$; NoSemicolons:NavigationCommand.kt$BackStackMode.NONE$; - NoSemicolons:OtherUserProfileScreen.kt$OtherUserProfileTabItem.DEVICES$; - NoSemicolons:SearchPeopleRouter.kt$SearchPeopleTabItem.SERVICES$; NoSemicolons:WireDestinationStyleAnimated.kt$TransitionAnimationType.POP_UP$; NoTrailingSpaces:AvatarPicker.kt$// TODO: Mateusz: I think we should refactor this, it takes some values from the ViewModel, part of the logic is executed inside NoTrailingSpaces:ScalaServerConfigDAOTest.kt$ScalaServerConfigDAOTest$ NoTrailingSpaces:ScalaServerConfigDAOTest.kt$ScalaServerConfigDAOTest.Arrangement$ - NoUnusedImports:ApiVersioningDialogs.kt$com.wire.android.ui.server.ApiVersioningDialogs.kt - NoUnusedImports:CreateAccountDetailsScreen.kt$import com.wire.android.ui.common.scaffold.WireScaffold NoUnusedImports:SearchPeopleScreenState.kt$com.wire.android.ui.home.conversations.search.SearchPeopleScreenState.kt - NoUnusedImports:SpeakerButton.kt$com.wire.android.ui.calling.controlbuttons.SpeakerButton.kt - NoUnusedImports:ZoomableImage.kt$com.wire.android.ui.home.gallery.ZoomableImage.kt NoWildcardImports:ExampleInstrumentedTest.kt$import org.junit.Assert.* NoWildcardImports:ExampleUnitTest.kt$import org.junit.Assert.* - ParameterListWrapping:WireButtonDefaults.kt$( enabled: Color, onEnabled: Color, enabledOutline: Color, disabled: Color, onDisabled: Color, disabledOutline: Color, selected: Color, onSelected: Color, selectedOutline: Color, error: Color, onError: Color, errorOutline: Color, positive: Color, onPositive: Color, positiveOutline: Color, ripple: Color ) - ParameterListWrapping:WireTypography.kt$WireTypography$( val title01: TextStyle, val title02: TextStyle, val title03: TextStyle, val title04: TextStyle, val body01: TextStyle, val body02: TextStyle, val body03: TextStyle, val body04: TextStyle, val body05: TextStyle, val button01: TextStyle, val button02: TextStyle, val button03: TextStyle, val button04: TextStyle, val button05: TextStyle, val label01: TextStyle, val label02: TextStyle, val label03: TextStyle, val label04: TextStyle, val label05: TextStyle, val badge01: TextStyle, val subline01: TextStyle, val code01: TextStyle ) ParameterWrapping:ConversationScreen.kt$groupDetailsScreenResultRecipient: ResultRecipient<GroupConversationDetailsScreenDestination, GroupConversationDetailsNavBackArgs> ParameterWrapping:CurrentLocationRequestFlow.kt$CurrentLocationRequestFlow$private val locationPermissionLauncher: ManagedActivityResultLauncher<Array<String>, Map<String, @JvmSuppressWildcards Boolean>> ParameterWrapping:GroupConversationOptionsItem.kt$clickable: Clickable = Clickable(enabled = false, onClick = { /* not handled */ }, onLongClick = { /* not handled */ }) ParameterWrapping:HomeScreen.kt$groupDetailsScreenResultRecipient: ResultRecipient<ConversationScreenDestination, GroupConversationDetailsNavBackArgs> - ParameterWrapping:HomeStateHolder.kt$navController: NavHostController = rememberTrackingAnimatedNavController() { HomeDestination.fromRoute(it)?.itemName } ParameterWrapping:RecordAudioRequestFlow.kt$RecordAudioRequestFlow$private val audioRecordPermissionLauncher: ManagedActivityResultLauncher<Array<String>, Map<String, @JvmSuppressWildcards Boolean>> ParameterWrapping:UseCameraAndWriteStorageRequestFlow.kt$UseCameraAndWriteStorageRequestFlow$private val cameraPermissionLauncher: ManagedActivityResultLauncher<Array<String>, Map<String, @JvmSuppressWildcards Boolean>> ParameterWrapping:UsersTypingIndicator.kt$viewModel: TypingIndicatorViewModel = hiltViewModelScoped<TypingIndicatorViewModelImpl, TypingIndicatorViewModel, TypingIndicatorArgs>( TypingIndicatorArgs(conversationId) ) ParameterWrapping:WireActivityViewModel.kt$WireActivityViewModel$private val observeIfE2EIRequiredDuringLoginUseCaseProviderFactory: ObserveIfE2EIRequiredDuringLoginUseCaseProvider.Factory ParameterWrapping:WireActivityViewModel.kt$WireActivityViewModel$private val observeScreenshotCensoringConfigUseCaseProviderFactory: ObserveScreenshotCensoringConfigUseCaseProvider.Factory ParameterWrapping:WireItemLabel.kt$contentPadding: PaddingValues = PaddingValues(horizontal = dimensions().spacing6x, vertical = dimensions().spacing2x) - ParameterWrapping:WireTextField.kt$keyboardOptions: KeyboardOptions = KeyboardOptions(capitalization = KeyboardCapitalization.Sentences, autoCorrect = true) PropertyWrapping:CaptureVideoRequestFlow.kt$val requestVideoPermissionLauncher: ManagedActivityResultLauncher<Array<String>, Map<String, @JvmSuppressWildcards Boolean>> = rememberLauncherForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { areGranted -> if (areGranted.all { it.value }) { captureVideoLauncher.launch(targetVideoFileUri) } else { context.getActivity()?.let { it.checkCameraWithStoragePermission(onPermissionDenied) { onPermissionPermanentlyDenied( PermissionDenialType.CaptureVideo ) } } } } PropertyWrapping:ConversationMediaScreen.kt$val pagerState = rememberPagerState(initialPage = initialPageIndex, pageCount = { ConversationMediaScreenTabItem.entries.size }) PropertyWrapping:CurrentLocationRequestFlow.kt$val requestPermissionLauncher: ManagedActivityResultLauncher<Array<String>, Map<String, @JvmSuppressWildcards Boolean>> = rememberLauncherForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions -> val allPermissionGranted = permissions.all { it.value } if (allPermissionGranted) { onPermissionAllowed() } else { context.getActivity()?.let { if (it.shouldShowRequestPermissionRationale(android.Manifest.permission.ACCESS_FINE_LOCATION) || it.shouldShowRequestPermissionRationale(android.Manifest.permission.ACCESS_COARSE_LOCATION) ) { onPermissionDenied() } else { onPermissionPermanentlyDenied() } } } } @@ -510,7 +426,6 @@ PropertyWrapping:EnterLockScreenViewModel.kt$EnterLockScreenViewModel$val storedPasscode = withContext(dispatchers.io()) { globalDataStore.getAppLockPasscodeFlow().firstOrNull() } PropertyWrapping:GroupConversationDetailsScreen.kt$val pagerState = rememberPagerState(initialPage = initialPageIndex, pageCount = { GroupConversationDetailsTabItem.entries.size }) PropertyWrapping:GroupConversationDetailsScreen.kt$val showSnackbarMessage: (UIText) -> Unit = remember { { scope.launch { snackbarHostState.showSnackbar(it.asString(resources)) } } } - PropertyWrapping:GroupConversationDetailsViewModelTest.kt$GroupConversationDetailsViewModelArrangement$private val observeParticipantsForConversationChannel = Channel<ConversationParticipantsData>(capacity = Channel.UNLIMITED) PropertyWrapping:HomeScreen.kt$val maxWidth = min(this.maxWidth - dimensions().homeDrawerSheetEndPadding, DrawerDefaults.MaximumDrawerWidth) PropertyWrapping:MessageComposerViewModelArrangement.kt$MessageComposerViewModelArrangement$@MockK private lateinit var observeConversationInteractionAvailabilityUseCase: ObserveConversationInteractionAvailabilityUseCase PropertyWrapping:MessagePreviewContentMapperTest.kt$MessagePreviewContentMapperTest$val unreadEventCount = mapOf(UnreadEventType.MENTION to mentionCount, UnreadEventType.MISSED_CALL to missedCallCount) @@ -521,10 +436,7 @@ PropertyWrapping:WelcomeScreen.kt$val createPersonalAccountDisabledWithProxyDialogState = rememberVisibilityState<FeatureDisabledWithProxyDialogState>() PropertyWrapping:WireActivityViewModelTest.kt$WireActivityViewModelTest.Arrangement$@MockK private lateinit var observeIfE2EIRequiredDuringLoginUseCaseProviderFactory: ObserveIfE2EIRequiredDuringLoginUseCaseProvider.Factory PropertyWrapping:WireActivityViewModelTest.kt$WireActivityViewModelTest.Arrangement$@MockK private lateinit var observeScreenshotCensoringConfigUseCaseProviderFactory: ObserveScreenshotCensoringConfigUseCaseProvider.Factory - SpacingAroundColon:CreateAccountCodeViewState.kt$CreateAccountCodeViewState.CodeError.DialogError.UserAlreadyExists$: SpacingAroundColon:LastConversationEvent.kt$ConversationLastEvent.Mention$: - SpacingAroundColon:LoginError.kt$LoginError.DialogError.ClientUpdateRequired$: - SpacingAroundColon:LoginError.kt$LoginError.DialogError.ServerVersionNotSupported$: SpacingAroundColon:SyncStateObserver.kt$SyncStateObserver$: SpacingAroundColon:VisibilityState.kt$: SpacingAroundColon:VisibilityState.kt$VisibilityState$: @@ -532,14 +444,12 @@ SpacingAroundColon:WireForegroundNotificationDetailsProvider.kt$WireForegroundNotificationDetailsProvider$: SpacingAroundCurly:ObserveConversationMembersByTypesUseCase.kt$ObserveConversationMembersByTypesUseCase${ SpacingAroundCurly:ObserveConversationMembersByTypesUseCase.kt$ObserveConversationMembersByTypesUseCase$} - SpacingAroundKeyword:CodeTextField.kt$<no name provided>$if SpacingAroundKeyword:MigrateServerConfigUseCase.kt$MigrateServerConfigUseCase$when SpacingAroundOperators:VisibilityState.kt$VisibilityState.Companion$= SpacingAroundParens:SelfDevicesState.kt$SelfDevicesState$( SpacingBetweenDeclarationsWithAnnotations:CallNotificationManager.kt$CallNotificationManager.Companion$@VisibleForTesting internal const val DEBOUNCE_TIME = 200L SpacingBetweenDeclarationsWithAnnotations:CreateGroupErrorDialog.kt$@PreviewMultipleThemes @Composable private fun PreviewCreateGroupErrorDialogConflictedBackends() SpacingBetweenDeclarationsWithAnnotations:CreateGroupErrorDialog.kt$@PreviewMultipleThemes @Composable private fun PreviewCreateGroupErrorDialogUnknown() - SpacingBetweenDeclarationsWithAnnotations:CustomTabsHelper.kt$CustomTabsHelper$@JvmStatic fun launchUri(context: Context, uri: Uri) SpacingBetweenDeclarationsWithAnnotations:Dialogs.kt$@Composable fun DisableGuestConfirmationDialog(onConfirm: () -> Unit, onDialogDismiss: () -> Unit) SpacingBetweenDeclarationsWithAnnotations:ForgotLockScreenViewModelTest.kt$ForgotLockScreenViewModelTest$@Test fun `given deleting client returns failure, when deleting current client, then return failure`() SpacingBetweenDeclarationsWithAnnotations:ForgotLockScreenViewModelTest.kt$ForgotLockScreenViewModelTest$@Test fun `given deleting client returns invalid credentials, when deleting current client, then return InvalidPassword`() @@ -560,7 +470,6 @@ SpacingBetweenDeclarationsWithAnnotations:ForgotLockScreenViewModelTest.kt$ForgotLockScreenViewModelTest.Arrangement$@MockK lateinit var globalDataStore: GlobalDataStore SpacingBetweenDeclarationsWithAnnotations:ForgotLockScreenViewModelTest.kt$ForgotLockScreenViewModelTest.Arrangement$@MockK lateinit var isPasswordRequiredUseCase: IsPasswordRequiredUseCase SpacingBetweenDeclarationsWithAnnotations:ForgotLockScreenViewModelTest.kt$ForgotLockScreenViewModelTest.Arrangement$@MockK lateinit var logoutUseCase: LogoutUseCase - SpacingBetweenDeclarationsWithAnnotations:ForgotLockScreenViewModelTest.kt$ForgotLockScreenViewModelTest.Arrangement$@MockK lateinit var notificationChannelsManager: NotificationChannelsManager SpacingBetweenDeclarationsWithAnnotations:ForgotLockScreenViewModelTest.kt$ForgotLockScreenViewModelTest.Arrangement$@MockK lateinit var notificationManager: WireNotificationManager SpacingBetweenDeclarationsWithAnnotations:ForgotLockScreenViewModelTest.kt$ForgotLockScreenViewModelTest.Arrangement$@MockK lateinit var observeCurrentClientIdUseCase: ObserveCurrentClientIdUseCase SpacingBetweenDeclarationsWithAnnotations:ForgotLockScreenViewModelTest.kt$ForgotLockScreenViewModelTest.Arrangement$@MockK lateinit var observeEstablishedCallsUseCase: ObserveEstablishedCallsUseCase @@ -770,46 +679,30 @@ UnnecessaryParenthesesBeforeTrailingLambda:ChangeHandleScreen.kt$() UnnecessaryParenthesesBeforeTrailingLambda:EndOngoingCallReceiver.kt$EndOngoingCallReceiver$() UnnecessaryParenthesesBeforeTrailingLambda:GroupOptionsScreen.kt$() - UnnecessaryParenthesesBeforeTrailingLambda:HomeScreen.kt$() - UnnecessaryParenthesesBeforeTrailingLambda:HomeStateHolder.kt$() - UnusedParameter:CallsScreen.kt$openConversationNotificationsSettings: (ConversationItem) -> Unit UnusedParameter:ConversationListViewModel.kt$ConversationListViewModel$id: String = "" UnusedParameter:ConversationSheetContent.kt$addConversationToFavourites: () -> Unit UnusedParameter:ConversationSheetContent.kt$moveConversationToFolder: () -> Unit UnusedParameter:ExternalLoggerManager.kt$ExternalLoggerManager$context: Context UnusedParameter:ExternalLoggerManager.kt$ExternalLoggerManager$globalDataStore: GlobalDataStore - UnusedParameter:LoginSSOScreen.kt$serverTitle: String - UnusedParameter:MentionScreen.kt$openConversationNotificationsSettings: (ConversationItem) -> Unit UnusedParameter:ShouldTriggerMigrationForUserUserCaseTest.kt$ShouldTriggerMigrationForUserUserCaseTest.Arrangement$version: Int? UnusedParameter:TrackingNavController.kt$nameFromRoute: (String) -> String? - UnusedParameter:WireButtonDefaults.kt$WireButtonColors$interactionSource: InteractionSource UnusedParameter:WireItemLabel.kt$minHeight: Dp = dimensions().badgeSmallMinSize.height UnusedParameter:WireItemLabel.kt$minWidth: Dp = dimensions().badgeSmallMinSize.height - UnusedParameter:ZoomableImage.kt$imageScale: Float = 1.0f UnusedPrivateProperty:AndroidExampleView.kt$AndroidExampleView$private val view: View = View(context) UnusedPrivateProperty:ConnectionPolicyManagerTest.kt$ConnectionPolicyManagerTest.Companion$private val USER_ID_2 = UserId("user2", "domain2") - UnusedPrivateProperty:ConversationListViewModelTest.kt$ConversationListViewModelTest.Companion$private val testConversations = TestConversationDetails.CONVERSATION_ONE_ONE - UnusedPrivateProperty:DropDownMentionsSuggestions.kt$i - UnusedPrivateProperty:ForgotLockScreenViewModel.kt$ForgotLockScreenViewModel$private val notificationChannelsManager: NotificationChannelsManager UnusedPrivateProperty:MigrateClientsDataUseCaseTest.kt$MigrateClientsDataUseCaseTest$val sessionFileWithDomain = File(sessionsDir, "1@domain.com_123").apply { createNewFile() } - UnusedPrivateProperty:PendingIntents.kt$private const val CALL_REQUEST_CODE_PREFIX = "call_" UnusedPrivateProperty:SearchQueryStateFlow.kt$SearchQueryStateFlow$private val coroutineDispatcher: CoroutineDispatcher UnusedPrivateProperty:SelfUserProfileViewModel.kt$SelfUserProfileViewModel$private val notificationChannelsManager: NotificationChannelsManager - UnusedPrivateProperty:SendMessageViewModel.kt$SendMessageViewModel.Companion$private const val sizeOf1MB = 1024 * 1024 - UnusedPrivateProperty:SendMessageViewModelArrangement.kt$SendMessageViewModelArrangement$@MockK private lateinit var savedStateHandle: SavedStateHandle UnusedPrivateProperty:WireNotificationManagerTest.kt$WireNotificationManagerTest.Companion$private val TEST_SERVER_CONFIG: ServerConfig = newServerConfig(1) Wrapping:AddMembersToConversationViewModel.kt$AddMembersToConversationViewModel$( Wrapping:AssetImageFetcherTest.kt$AssetImageFetcherTest.Arrangement$( data = imageData, options ?: Options( context = mockContext, parameters = Parameters.Builder().set(key = OPTION_PARAMETER_RETRY_KEY, value = 0, memoryCacheKey = null).build() ) ) - Wrapping:AutoFillTextField.kt$( Wrapping:AvatarPickerViewModelTest.kt$AvatarPickerViewModelTest.Arrangement$uploadUserAvatarUseCase(any(), any()) Wrapping:BackupAndRestoreViewModelTest.kt$BackupAndRestoreViewModelTest.Arrangement$createBackupFile(eq(password)) Wrapping:Buttons.kt$( modifier = Modifier .fillMaxWidth() .padding( start = MaterialTheme.wireDimensions.spacing16x, end = MaterialTheme.wireDimensions.spacing16x, top = MaterialTheme.wireDimensions.spacing16x, bottom = MaterialTheme.wireDimensions.spacing4x ), text = stringResource(id = R.string.guest_link_button_copy_link), fillMaxWidth = true, onClick = onCopy ) Wrapping:CaptureVideoRequestFlow.kt$( Wrapping:ChangeEmailViewModel.kt$ChangeEmailViewModel$-> Wrapping:ChangeHandleViewModel.kt$ChangeHandleViewModel$-> - Wrapping:CodeTextField.kt$( Wrapping:ConnectionPolicyManagerTest.kt$ConnectionPolicyManagerTest$arrangement.setConnectionPolicyUseCase.invoke(ConnectionPolicy.DISCONNECT_AFTER_PENDING_EVENTS) - Wrapping:ConversationCallViewModel.kt$ConversationCallViewModel$( Wrapping:ConversationInfoViewModel.kt$ConversationInfoViewModel$-> Wrapping:ConversationListViewModel.kt$ConversationListViewModel$( Wrapping:ConversationMediaScreen.kt$ConversationMediaScreenTabItem.entries.size @@ -817,29 +710,18 @@ Wrapping:ConversationMediaScreen.kt$lazyListStates[currentTabState].topBarElevation(maxAppBarElevation) Wrapping:ConversationMessagesViewModel.kt$ConversationMessagesViewModel$( Wrapping:ConversationRouter.kt${ conversationId -> navigator.navigate(NavigationCommand(ConversationScreenDestination(conversationId))) } - Wrapping:ConversationRouter.kt${ conversationId -> navigator.navigate(NavigationCommand(OngoingCallScreenDestination(conversationId))) } - Wrapping:ConversationRouter.kt${ conversationItem -> openConversationBottomSheet( conversationItem = conversationItem ) } - Wrapping:ConversationRouter.kt${ conversationItem -> openConversationBottomSheet( conversationItem = conversationItem, conversationOptionNavigation = ConversationOptionNavigation.MutingNotificationOption ) } Wrapping:ConversationRouter.kt${ userId -> navigator.navigate(NavigationCommand(OtherUserProfileScreenDestination(userId))) } - Wrapping:ConversationScreen.kt$( Wrapping:ConversationScreen.kt${ /* do nothing */ } Wrapping:ConversationSheetContent.kt$ConversationSheetContent$( Wrapping:ConversationTopAppBar.kt$( title = { Row( verticalAlignment = Alignment.CenterVertically, modifier = Modifier .fillMaxWidth() // TopAppBar adds TopAppBarHorizontalPadding = 4.dp to each element, so we need to offset it to retain the desired // spacing between navigation icon button and avatar according to the designs .offset(x = -dimensions().spacing4x) .clip(RoundedCornerShape(MaterialTheme.wireDimensions.buttonCornerSize)) .clickable(onClick = onDropDownClick, enabled = isDropDownEnabled && isInteractionEnabled) ) { val conversationAvatar: ConversationAvatar = conversationInfoViewState.conversationAvatar Avatar(conversationAvatar, conversationInfoViewState) Text( text = conversationInfoViewState.conversationName.asString(), style = MaterialTheme.wireTypography.title02, maxLines = 1, overflow = TextOverflow.Ellipsis, modifier = Modifier.weight(weight = 1f, fill = false) ) ConversationVerificationIcons( conversationInfoViewState.protocolInfo, conversationInfoViewState.mlsVerificationStatus, conversationInfoViewState.proteusVerificationStatus ) if (conversationInfoViewState.legalHoldStatus == Conversation.LegalHoldStatus.ENABLED) { HorizontalSpace.x4() LegalHoldIndicator() } if (isDropDownEnabled && isInteractionEnabled) { Icon( painter = painterResource(id = R.drawable.ic_dropdown_icon), contentDescription = stringResource(R.string.content_description_drop_down_icon) ) } } }, navigationIcon = { NavigationIconButton(NavigationIconType.Back, onBackButtonClick) }, actions = { Row( horizontalArrangement = Arrangement.spacedBy(dimensions().spacing4x), modifier = Modifier.padding(end = dimensions().spacing4x) ) { if (isSearchEnabled) { WireSecondaryIconButton( onButtonClicked = onSearchButtonClick, iconResource = R.drawable.ic_search, contentDescription = R.string.content_description_conversation_search_icon, minSize = dimensions().buttonSmallMinSize, minClickableSize = DpSize( dimensions().buttonSmallMinSize.width, dimensions().buttonMinClickableSize.height ), ) } CallControlButton( hasOngoingCall = hasOngoingCall, onJoinCallButtonClick = onJoinCallButtonClick, onPhoneButtonClick = onPhoneButtonClick, isCallingEnabled = isInteractionEnabled, onPermissionPermanentlyDenied = onPermissionPermanentlyDenied, ) } }, colors = TopAppBarDefaults.centerAlignedTopAppBarColors( containerColor = MaterialTheme.colorScheme.background, titleContentColor = MaterialTheme.colorScheme.onBackground, actionIconContentColor = MaterialTheme.colorScheme.onBackground, navigationIconContentColor = MaterialTheme.colorScheme.onBackground ) ) Wrapping:ConversationsNavigationItem.kt$ConversationsNavigationItem.All$( Wrapping:ConversationsNavigationItem.kt$ConversationsNavigationItem.Calls$( Wrapping:ConversationsNavigationItem.kt$ConversationsNavigationItem.Mentions$( - Wrapping:CreateAccountCodeScreen.kt$ - Wrapping:CreateAccountDetailsScreen.kt$ - Wrapping:CreateAccountEmailScreen.kt$( Wrapping:CreateAccountSummaryScreen.kt$navigator.navigate(NavigationCommand(CreateAccountUsernameScreenDestination, BackStackMode.CLEAR_WHOLE)) - Wrapping:CreateAccountUsernameViewModelTest.kt$CreateAccountUsernameViewModelTest$setUserHandleUseCase.invoke(any()) - Wrapping:CreatePasswordProtectedGuestLinkScreen.kt$ Wrapping:DebugDataOptions.kt$( - Wrapping:DeclineButton.kt$( Wrapping:DeleteMessageDialog.kt$ Wrapping:DeviceDetailsViewModel.kt$DeviceDetailsViewModel$-> Wrapping:DeviceItem.kt$( - Wrapping:DrawingCanvasViewModel.kt$DrawingCanvasViewModel$( currentPath = DrawingPathProperties().apply { strokeWidth = state.currentPath.strokeWidth color = state.currentPath.color drawMode = state.currentPath.drawMode }, pathsUndone = emptyList(), currentPosition = Offset.Unspecified, drawingMotionEvent = DrawingMotionEvent.Idle ) Wrapping:DropDownMentionsSuggestions.kt$( Wrapping:E2EIEnrollmentScreen.kt$viewModel.onCancelEnrollmentClicked(NavigationSwitchAccountActions(navigator::navigate)) Wrapping:EditGuestAccessScreen.kt${ isPasswordProtected -> coroutineScope.launch { sheetState.hide() } if (isPasswordProtected) { navigator.navigate( NavigationCommand( CreatePasswordProtectedGuestLinkScreenDestination( CreatePasswordGuestLinkNavArgs( conversationId = editGuestAccessViewModel.conversationId ) ) ) ) } else { editGuestAccessViewModel.onRequestGuestRoomLink() } } @@ -855,26 +737,18 @@ Wrapping:GroupConversationDetailsScreen.kt$snackbarHostState.showSnackbar(it.asString(resources)) Wrapping:GroupConversationDetailsScreen.kt${ scope.launch { snackbarHostState.showSnackbar(it.asString(resources)) } } Wrapping:GroupConversationDetailsViewModel.kt$GroupConversationDetailsViewModel$GroupConversationParticipantsViewModel( savedStateHandle, observeConversationMembers, refreshUsersWithoutMetadata ), GroupConversationDetailsBottomSheetEventsHandler - Wrapping:GroupConversationDetailsViewModelTest.kt$GroupConversationDetailsViewModelArrangement$observeParticipantsForConversationUseCase(any()) Wrapping:GroupConversationDetailsViewModelTest.kt$GroupConversationDetailsViewModelArrangement$savedStateHandle.navArgs<GroupConversationAllParticipantsNavArgs>() Wrapping:GroupConversationDetailsViewModelTest.kt$GroupConversationDetailsViewModelTest$remove(Conversation.AccessRole.NON_TEAM_MEMBER) Wrapping:GroupConversationOptions.kt$( Wrapping:GroupConversationOptionsItem.kt$ Wrapping:GroupConversationOptionsItem.kt$WireSecondaryButton(text = "Copy link", onClick = {}, modifier = Modifier.height(32.dp), fillMaxWidth = false) - Wrapping:GroupConversationParticipantsViewModelTest.kt$GroupConversationParticipantsViewModelArrangement$savedStateHandle.navArgs<GroupConversationAllParticipantsNavArgs>() Wrapping:GroupOptionsScreen.kt$( Wrapping:GroupOptionsScreen.kt$( title = stringResource(R.string.disable_guests_dialog_title), text = stringResource(R.string.disable_guests_dialog_description), onDismiss = onAllowGuestsDialogDismissed, buttonsHorizontalAlignment = false, optionButton1Properties = WireDialogButtonProperties( onClick = onNotAllowGuestsClicked, text = stringResource(id = R.string.disable_guests_dialog_button), type = WireDialogButtonType.Primary ), optionButton2Properties = WireDialogButtonProperties( text = stringResource(R.string.allow_guests), onClick = onAllowGuestsClicked, type = WireDialogButtonType.Primary ), dismissButtonProperties = WireDialogButtonProperties( text = stringResource(R.string.label_cancel), onClick = onAllowGuestsDialogDismissed ) ) - Wrapping:HangUpButton.kt$( - Wrapping:HangUpButton.kt$(modifier = Modifier .width(MaterialTheme.wireDimensions.initiatingCallHangUpButtonSize) .height(MaterialTheme.wireDimensions.initiatingCallHangUpButtonSize), onHangUpButtonClicked = { }) Wrapping:HomeScreen.kt$( Wrapping:HomeSheetContent.kt$( - Wrapping:ImageMessageTypes.kt$( Wrapping:ImportMediaAuthenticatedViewModel.kt$ImportMediaAuthenticatedViewModel$( Wrapping:ImportMediaScreen.kt$( Wrapping:IncomingCallScreen.kt${ /* do nothing */ } - Wrapping:InitiatingCallScreen.kt${ /* do nothing */ } - Wrapping:LegalHoldRequestedDialog.kt$( LegalHoldRequestedState.Visible( legalHoldDeviceFingerprint = "0123456789ABCDEF", requiresPassword = false, userId = UserId("", ""), ), {}, {}, {} ) - Wrapping:LegalHoldRequestedDialog.kt$( LegalHoldRequestedState.Visible( legalHoldDeviceFingerprint = "0123456789ABCDEF", requiresPassword = true, userId = UserId("", ""), ), {}, {}, {} ) Wrapping:LegalHoldRequestedViewModelTest.kt$LegalHoldRequestedViewModelTest$it.error shouldBeInstanceOf LegalHoldRequestedError.InvalidCredentialsError::class Wrapping:LegalHoldSubjectProfileDialog.kt$( Wrapping:LoginEmailVerificationCodeScreen.kt$( @@ -885,7 +759,6 @@ Wrapping:MarkdownBlockQuote.kt$( Wrapping:MarkdownHelperTest.kt$MarkdownHelperTest$( Wrapping:MediaGalleryViewModelTest.kt$MediaGalleryViewModelTest.Arrangement$getConversationDetails(any()) - Wrapping:MessageCompositionHolder.kt$MessageCompositionHolder$( Wrapping:MessageDetailsScreen.kt$derivedStateOf { lazyListStates[currentTabState].topBarElevation(maxAppBarElevation) } Wrapping:MessageDetailsScreen.kt$lazyListStates[currentTabState].topBarElevation(maxAppBarElevation) Wrapping:MessageExpiration.kt$<no name provided>$( when (type) { StringResourceType.WEEKS -> R.plurals.weeks_left StringResourceType.DAYS -> R.plurals.days_left StringResourceType.HOURS -> R.plurals.hours_left StringResourceType.MINUTES -> R.plurals.minutes_left StringResourceType.SECONDS -> R.plurals.seconds_left }, quantity, quantity ) @@ -920,12 +793,8 @@ Wrapping:RegularMessageContentMapper.kt$RegularMessageMapper$( if (message.isSelfMessage) { UIText.StringResource(messageResourceProvider.memberNameYouTitlecase) } else { sender?.name.orUnknownName() }, message.isSelfMessage ) Wrapping:RemoveDeviceScreen.kt$clearSessionViewModel.onCancelLoginClicked(NavigationSwitchAccountActions(navigator::navigate)) Wrapping:ScalaMessageDAO.kt$ScalaMessageDAO$( "SELECT *" + // Assets are required, otherwise we get exception "requesting column name with table name". "FROM $MESSAGES_TABLE_NAME AS m " + "LEFT JOIN $ASSETS_TABLE_NAME ON m.$COLUMN_ASSET_ID = $ASSETS_TABLE_NAME.$COLUMN_ID " + "WHERE m.$COLUMN_CONVERSATION_ID = ?" + "ORDER BY m.$COLUMN_TIME ASC ", arrayOf(scalaConversation.id) ) - Wrapping:SearchAllPeopleScreen.kt$( - Wrapping:SearchBar.kt$( - Wrapping:SearchBarViewModel.kt$SearchBarViewModel$( Wrapping:SearchConversationScreen.kt$( horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier .fillMaxWidth() .wrapContentHeight() ) Wrapping:SearchConversationScreen.kt$( horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier .padding(horizontal = dimensions().spacing48x) .wrapContentHeight() ) - Wrapping:SearchPeopleRouter.kt$( Wrapping:SelectParticipantsButtonsRow.kt$ Wrapping:SelfDevicesScreen.kt$navigator.navigate(NavigationCommand(DeviceDetailsScreenDestination(viewModel.currentAccountId, it.clientId))) Wrapping:SelfUserProfileScreen.kt$( @@ -933,7 +802,6 @@ Wrapping:SendMessageViewModel.kt$SendMessageViewModel$( Wrapping:SendMessageViewModel.kt$SendMessageViewModel${ /* do nothing */ } Wrapping:ServerTitle.kt$( - Wrapping:SetLockCodeScreen.kt$( Wrapping:SettingsScreen.kt$( Wrapping:SettingsScreen.kt${ isChecked -> if (isChecked) homeStateHolder.navigator.navigate(NavigationCommand(SetLockCodeScreenDestination, BackStackMode.NONE)) else turnAppLockOffDialogState.show(Unit) } Wrapping:SingleUserMigrationWorker.kt$it.firstOrNull()?.state == WorkInfo.State.RUNNING