Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,7 @@ dependencies {
implementationWithCoverage(projects.core.media)
implementationWithCoverage(projects.core.videoPlayer)
implementationWithCoverage(projects.core.audioPlayer)
implementationWithCoverage(projects.core.pdfViewer)
implementationWithCoverage(projects.core.notification)
implementationWithCoverage(projects.core.navigation)
implementationWithCoverage(projects.core.search)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ package com.wire.android.di.accountScoped
import com.wire.android.di.CurrentAccount
import com.wire.android.di.KaliumCoreLogic
import com.wire.android.ui.home.conversations.model.messagetypes.multipart.CellAssetRefreshHelper
import com.wire.android.pdfviewer.PdfRemoteLoader
import com.wire.kalium.cells.CellsScope
import com.wire.kalium.cells.domain.CellUploadManager
import com.wire.kalium.cells.domain.usecase.AddAttachmentDraftUseCase
Expand Down Expand Up @@ -71,11 +72,14 @@ import com.wire.kalium.cells.domain.usecase.versioning.GetNodeVersionsUseCase
import com.wire.kalium.cells.domain.usecase.versioning.RestoreNodeVersionUseCase
import com.wire.kalium.cells.paginatedConversationsFlowUseCase
import com.wire.kalium.cells.paginatedFilesFlowUseCase
import com.wire.kalium.common.functional.fold
import com.wire.kalium.logic.CoreLogic
import com.wire.kalium.logic.data.user.UserId
import com.wire.kalium.logic.featureFlags.KaliumConfigs
import dev.zacsweers.metro.BindingContainer
import dev.zacsweers.metro.Provides
import java.io.IOException
import okio.Path.Companion.toOkioPath

@Suppress("TooManyFunctions")
@BindingContainer
Expand Down Expand Up @@ -249,4 +253,20 @@ class CellsModule {

@Provides
fun provideGetUserNamesUseCase(cellsScope: CellsScope): GetUserNameUseCase = cellsScope.getUserName

@Provides
fun providePdfRemoteLoader(download: DownloadCellFileUseCase): PdfRemoteLoader =
PdfRemoteLoader { assetId, remotePath, conversationId, assetSize, outFile ->
download(
assetId = assetId,
conversationId = conversationId,
outFilePath = outFile.toPath().toOkioPath(),
assetSize = assetSize,
remoteFilePath = remotePath,
onProgressUpdate = {},
).fold(
{ failure -> Result.failure(IOException("PDF download failed: $failure")) },
{ Result.success(Unit) },
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
*/
package com.wire.android.di.metro

import com.wire.android.audioplayer.AudioPlayerManualViewModelFactoryMetroBindings
import com.wire.android.di.CurrentAccount
import com.wire.android.di.ImageLoadingModule
import com.wire.android.di.SessionModule
Expand All @@ -41,6 +40,7 @@ import com.wire.android.feature.cells.ui.CellsMetroViewModelBindings
import com.wire.android.feature.meetings.ui.MeetingsManualViewModelFactoryMetroBindings
import com.wire.android.feature.meetings.ui.MeetingsMetroViewModelBindings
import com.wire.android.feature.sketch.SketchMetroViewModelBindings
import com.wire.android.pdfviewer.PdfViewerManualViewModelFactoryMetroBindings
import com.wire.android.search.SearchManualViewModelFactoryMetroBindings
import com.wire.android.ui.authentication.AuthenticationViewModelGraph
import com.wire.android.ui.calling.CallingManualViewModelFactoryMetroBindings
Expand All @@ -60,6 +60,7 @@ import com.wire.android.ui.home.conversations.ConversationSearchFolderMetroViewM
import com.wire.android.ui.home.settings.SettingsManualViewModelFactoryMetroBindings
import com.wire.android.util.ui.WireSessionImageLoader
import com.wire.android.videoplayer.VideoPlayerManualViewModelFactoryMetroBindings
import com.wire.android.audioplayer.AudioPlayerManualViewModelFactoryMetroBindings
import com.wire.kalium.logic.data.user.UserId
import dev.zacsweers.metro.AppScope
import dev.zacsweers.metro.ContributesTo
Expand Down Expand Up @@ -113,6 +114,7 @@ annotation class MetroSessionScope
SearchManualViewModelFactoryMetroBindings::class,
VideoPlayerManualViewModelFactoryMetroBindings::class,
AudioPlayerManualViewModelFactoryMetroBindings::class,
PdfViewerManualViewModelFactoryMetroBindings::class,
ImageLoadingModule::class,
]
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import com.wire.android.navigation.navigation3.WireNavigation3ResultType
import com.wire.android.navigation.navigation3.WireNavigation3Runtime
import com.wire.android.navigation.navigation3.wireEntry
import com.wire.android.videoplayer.VideoPlayer
import com.wire.android.pdfviewer.PdfViewer
import com.wire.android.ui.home.FeatureFlagState
import com.wire.android.ui.home.conversations.ConversationNavArgs
import com.wire.android.ui.home.conversations.checkAssetRestrictionsViewModel
Expand Down Expand Up @@ -122,6 +123,17 @@ internal fun mediaNavigation3Entries(
onNavigateBack = runtime.navigator::goBack,
)
}
wireEntry<PdfViewerRoute>(presentation = WireEntryPresentation.PopUp) { route ->
PdfViewer(
localPath = route.localPath,
assetId = route.assetId,
remotePath = route.remotePath,
conversationId = route.conversationId,
assetSize = route.assetSize,
fileName = route.fileName,
onNavigateBack = runtime.navigator::goBack,
)
}
wireEntry<MessageDetailsRoute>(presentation = WireEntryPresentation.PopUp) { route ->
MessageDetailsRouteScreen(messageDetailsViewModel(route.toViewModelArgs()), runtime.navigator::goBack)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,21 @@ data class VideoPlayerRoute(
companion object { const val ROUTE_ID = "app/video_player_screen" }
}

@Serializable
data class PdfViewerRoute(
override val sessionId: WireSessionId,
val localPath: String? = null,
val assetId: String? = null,
val remotePath: String? = null,
val conversationId: String? = null,
val assetSize: Long = 0L,
val fileName: String? = null,
override val entryId: WireNavEntryId = WireNavEntryId.random(),
) : SessionRoute {
override val routeId = ROUTE_ID
companion object { const val ROUTE_ID = "app/pdf_viewer_screen" }
}

@Serializable
data class MessageDetailsRoute(
override val sessionId: WireSessionId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ internal data class WireNavigation3ContributionCatalog(
* app-lock overlays finish the registry. An entry type must be owned by exactly one contribution.
*/
internal object WireNavigation3Contributions {
const val EXPECTED_ROUTE_REGISTRATION_COUNT: Int = 107
const val EXPECTED_ROUTE_REGISTRATION_COUNT: Int = 109
const val EXPECTED_INSTALLER_COUNT: Int = 19

fun create(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import com.wire.android.feature.cells.navigation.CellImageViewerRoute
import com.wire.android.feature.cells.navigation.CellsFilesArguments
import com.wire.android.feature.cells.navigation.CellsSearchType
import com.wire.android.feature.cells.navigation.ConversationFilesRoute
import com.wire.android.feature.cells.navigation.PdfViewerRoute
import com.wire.android.feature.cells.navigation.PublicLinkRoute
import com.wire.android.feature.cells.navigation.SearchRoute
import com.wire.android.feature.cells.navigation.VideoPlayerRoute
Expand Down Expand Up @@ -196,6 +197,19 @@ internal class WireNavigation3ProductionActions(
)
)
},
showPdfViewer = {
navigate(
PdfViewerRoute(
sessionId = requireSession(),
localPath = it.localPath,
assetId = it.uuid,
remotePath = it.remotePath,
conversationId = it.conversationId,
assetSize = it.size ?: 0L,
fileName = it.name,
)
)
},
)
override val conversationList: ConversationListNavigationActions = ConversationListNavigationActions(
openConversation = { openConversation(it.toProfileId()) },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ data class MultipartAttachmentUi(
val contentUrl: String? = null,
val contentUrlExpiresAt: Long? = null,
val previewUrl: String? = null,
val remotePath: String? = null,
val mimeType: String,
val assetType: AttachmentFileType,
val assetSize: Long?,
Expand Down Expand Up @@ -60,6 +61,7 @@ fun CellAssetContent.toUiModel(progress: Float?, isAvailableOffline: Boolean = f
contentUrl = this.contentUrl,
contentUrlExpiresAt = this.contentUrlExpiresAt,
previewUrl = this.previewUrl,
remotePath = this.assetPath,
mimeType = this.mimeType,
assetType = AttachmentFileType.fromMimeType(mimeType),
assetSize = this.assetSize,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ internal fun ConversationMessageComposer(
onImageFullScreenMode: (UIMessage.Regular, Boolean, String?) -> Unit,
onVideoClick: (localPath: String?, contentUrl: String?, fileName: String?) -> Unit,
onAudioClick: (localPath: String?, contentUrl: String?, fileName: String?) -> Unit,
onPdfClick: (localPath: String?, assetId: String?, remotePath: String?, assetSize: Long, fileName: String?) -> Unit,
onReactionClicked: (String, String) -> Unit,
onResetSessionClicked: (senderUserId: UserId, clientId: String?) -> Unit,
onOpenProfile: (senderId: MessageSenderId) -> Unit,
Expand Down Expand Up @@ -117,6 +118,7 @@ internal fun ConversationMessageComposer(
onImageClicked = onImageFullScreenMode,
onVideoClicked = onVideoClick,
onAudioClicked = onAudioClick,
onPdfClicked = onPdfClick,
onLinkClicked = onLinkClick,
onReplyClicked = onNavigateToReplyOriginalMessage,
onResetSessionClicked = onResetSessionClicked,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,18 @@ import com.wire.android.navigation.navigation3.WireEntryProviderInstaller
import com.wire.android.navigation.navigation3.WireNavigation3ResultType
import com.wire.android.navigation.navigation3.WireNavigation3Runtime
import com.wire.android.navigation.navigation3.wireEntry
import com.wire.android.navigation.routes.media.ImagesPreviewNavigation3ResultType
import com.wire.android.navigation.routes.media.AuthenticatedImportMediaRoute
import com.wire.android.navigation.routes.media.ImagesPreviewNavigation3ResultType
import com.wire.android.navigation.routes.media.ImagesPreviewResult
import com.wire.android.navigation.routes.media.ImagesPreviewRoute
import com.wire.android.navigation.routes.media.MediaConversationId
import com.wire.android.navigation.routes.media.MediaGalleryNavigation3ResultType
import com.wire.android.navigation.routes.media.MediaGalleryResult
import com.wire.android.navigation.routes.media.MediaGalleryResultAction
import com.wire.android.navigation.routes.media.MediaGalleryRoute
import com.wire.android.navigation.routes.media.VideoPlayerRoute
import com.wire.android.navigation.routes.media.MessageDetailsRoute
import com.wire.android.navigation.routes.media.PdfViewerRoute
import com.wire.android.navigation.routes.media.VideoPlayerRoute
import com.wire.android.navigation.routes.media.toLegacy
import com.wire.android.ui.calling.conversationCallViewModel
import com.wire.android.ui.home.conversations.details.ConversationDetailsId
Expand Down Expand Up @@ -260,6 +261,21 @@ private fun ConversationNavigation3Entry(
)
}

override fun openPdfViewer(localPath: String?, assetId: String?, remotePath: String?, assetSize: Long, fileName: String?) {
runtime.navigator.navigate(
WireNavigationCommand(
PdfViewerRoute(
sessionId = route.sessionId,
localPath = localPath,
assetId = assetId,
remotePath = remotePath,
assetSize = assetSize,
fileName = fileName,
)
)
)
}

override fun openDrawingCanvas(conversationName: String, tempWritableUri: Uri?) {
drawingRequestId = runtime.navigateForResult(
DrawingCanvasRoute(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@ internal interface ConversationRouteScreenNavigation {
fun openVideoPlayer(localPath: String?, contentUrl: String?, fileName: String?)
fun openAudioPlayer(localPath: String?, contentUrl: String?, fileName: String?)

fun openPdfViewer(localPath: String?, assetId: String?, remotePath: String?, assetSize: Long, fileName: String?)

fun openDrawingCanvas(
conversationName: String,
tempWritableUri: Uri?,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -439,6 +439,7 @@ internal fun ConversationScreenRouteContent(
},
onVideoClick = navigation::openVideoPlayer,
onAudioClick = navigation::openAudioPlayer,
onPdfClick = navigation::openPdfViewer,
onStartCall = {
conversationCallViewModel.startCallIfPossible(conversationInfoViewModel.conversationInfoViewState.conversationType)
},
Expand Down Expand Up @@ -644,6 +645,7 @@ private fun ConversationScreenContent(
onImageFullScreenMode: (UIMessage.Regular, Boolean, String?) -> Unit,
onVideoClick: (localPath: String?, contentUrl: String?, fileName: String?) -> Unit,
onAudioClick: (localPath: String?, contentUrl: String?, fileName: String?) -> Unit,
onPdfClick: (localPath: String?, assetId: String?, remotePath: String?, assetSize: Long, fileName: String?) -> Unit,
onStartCall: () -> Unit,
onJoinCall: () -> Unit,
onReactionClick: (messageId: String, reactionEmoji: String) -> Unit,
Expand Down Expand Up @@ -757,6 +759,7 @@ private fun ConversationScreenContent(
onImageFullScreenMode = onImageFullScreenMode,
onVideoClick = onVideoClick,
onAudioClick = onAudioClick,
onPdfClick = onPdfClick,
onReactionClicked = onReactionClick,
onResetSessionClicked = onResetSessionClick,
onOpenProfile = onOpenProfile,
Expand Down Expand Up @@ -900,6 +903,7 @@ fun PreviewConversationScreen() = WireTheme {
onImageFullScreenMode = { _, _, _ -> },
onVideoClick = { _, _, _ -> },
onAudioClick = { _, _, _ -> },
onPdfClick = { _, _, _, _, _ -> },
onStartCall = { },
onJoinCall = { },
onReactionClick = { _, _ -> },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,13 @@
open val onImageClicked: (UIMessage.Regular, Boolean, String?) -> Unit = { _, _, _ -> }
open val onVideoClicked: (localPath: String?, contentUrl: String?, fileName: String?) -> Unit = { _, _, _ -> }
open val onAudioClicked: (localPath: String?, contentUrl: String?, fileName: String?) -> Unit = { _, _, _ -> }
open val onPdfClicked: (

Check warning on line 34 in app/src/main/kotlin/com/wire/android/ui/home/conversations/messages/item/MessageClickActions.kt

View check run for this annotation

Codecov / codecov/patch

app/src/main/kotlin/com/wire/android/ui/home/conversations/messages/item/MessageClickActions.kt#L34

Added line #L34 was not covered by tests
localPath: String?,
assetId: String?,
remotePath: String?,
assetSize: Long,
fileName: String?
) -> Unit = { _, _, _, _, _ -> }

Check warning on line 40 in app/src/main/kotlin/com/wire/android/ui/home/conversations/messages/item/MessageClickActions.kt

View check run for this annotation

Codecov / codecov/patch

app/src/main/kotlin/com/wire/android/ui/home/conversations/messages/item/MessageClickActions.kt#L40

Added line #L40 was not covered by tests
open val onLinkClicked: (String) -> Unit = {}
open val onReplyClicked: (UIMessage.Regular) -> Unit = {}
open val onResetSessionClicked: (senderUserId: UserId, clientId: String?) -> Unit = { _, _ -> }
Expand All @@ -50,6 +57,13 @@
override val onImageClicked: (UIMessage.Regular, Boolean, String?) -> Unit = { _, _, _ -> },
override val onVideoClicked: (localPath: String?, contentUrl: String?, fileName: String?) -> Unit = { _, _, _ -> },
override val onAudioClicked: (localPath: String?, contentUrl: String?, fileName: String?) -> Unit = { _, _, _ -> },
override val onPdfClicked: (

Check warning on line 60 in app/src/main/kotlin/com/wire/android/ui/home/conversations/messages/item/MessageClickActions.kt

View check run for this annotation

Codecov / codecov/patch

app/src/main/kotlin/com/wire/android/ui/home/conversations/messages/item/MessageClickActions.kt#L60

Added line #L60 was not covered by tests
localPath: String?,
assetId: String?,
remotePath: String?,
assetSize: Long,
fileName: String?
) -> Unit = { _, _, _, _, _ -> },

Check warning on line 66 in app/src/main/kotlin/com/wire/android/ui/home/conversations/messages/item/MessageClickActions.kt

View check run for this annotation

Codecov / codecov/patch

app/src/main/kotlin/com/wire/android/ui/home/conversations/messages/item/MessageClickActions.kt#L66

Added line #L66 was not covered by tests
override val onLinkClicked: (String) -> Unit = {},
override val onReplyClicked: (UIMessage.Regular) -> Unit = {},
override val onResetSessionClicked: (senderUserId: UserId, clientId: String?) -> Unit = { _, _ -> },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,13 @@ internal fun UIMessage.Regular.MessageContentAndStatus(
onImageClicked: (UIMessage.Regular, Boolean, String?) -> Unit,
onVideoClicked: (localPath: String?, contentUrl: String?, fileName: String?) -> Unit,
onAudioClicked: (localPath: String?, contentUrl: String?, fileName: String?) -> Unit,
onPdfClicked: (
localPath: String?,
assetId: String?,
remotePath: String?,
assetSize: Long,
fileName: String?
) -> Unit,
onProfileClicked: (senderId: MessageSenderId) -> Unit,
onLinkClicked: (String) -> Unit,
onReplyClicked: (UIMessage.Regular) -> Unit,
Expand Down Expand Up @@ -123,6 +130,7 @@ internal fun UIMessage.Regular.MessageContentAndStatus(
onMultipartImageClick = onMultipartImageClickable,
onMultipartVideoClick = onVideoClicked,
onMultipartAudioClick = onAudioClicked,
onMultipartPdfClick = onPdfClicked,
onOpenProfile = onProfileClicked,
onLinkClick = onLinkClicked,
onReplyClick = onReplyClickable,
Expand Down Expand Up @@ -173,6 +181,13 @@ private fun MessageContent(
onMultipartImageClick: (String) -> Unit,
onMultipartVideoClick: (localPath: String?, contentUrl: String?, fileName: String?) -> Unit,
onMultipartAudioClick: (localPath: String?, contentUrl: String?, fileName: String?) -> Unit,
onMultipartPdfClick: (
localPath: String?,
assetId: String?,
remotePath: String?,
assetSize: Long,
fileName: String?
) -> Unit,
onOpenProfile: (senderId: MessageSenderId) -> Unit,
onLinkClick: (String) -> Unit,
onReplyClick: Clickable,
Expand Down Expand Up @@ -468,6 +483,7 @@ private fun MessageContent(
onImageAttachmentClick = onMultipartImageClick,
onVideoAttachmentClick = onMultipartVideoClick,
onAudioAttachmentClick = onMultipartAudioClick,
onPdfAttachmentClick = onMultipartPdfClick,
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ fun MessageContentItem(
onImageClicked = clickActions.onImageClicked,
onVideoClicked = clickActions.onVideoClicked,
onAudioClicked = clickActions.onAudioClicked,
onPdfClicked = clickActions.onPdfClicked,
searchQuery = searchQuery,
accent = accent,
onProfileClicked = clickActions.onProfileClicked,
Expand Down
Loading
Loading