feat: Add all deeplinks#1935
Conversation
9d30961 to
64ddee5
Compare
597c20e to
8bbe633
Compare
30d7ee0 to
b0da743
Compare
8bbe633 to
9566bbe
Compare
There was a problem hiding this comment.
Pull request overview
Adds a structured deeplink parsing system (new DeeplinkType/DeeplinkAction model + parser) and wires it into app launch + in-app navigation so the app can open the appropriate screen (and optionally preview a file) for supported kDrive/ksuite URLs.
Changes:
- Introduce a new deeplink model hierarchy (
DeeplinkType,DeeplinkAction,RoleFolder,FileType,ExternalFileType) and parsing pipeline (DeeplinkParser). - Update
LaunchActivity/MainActivity/RootFilesFragmentto route deeplinks through the new model and navigate to the correct destination. - Extend Navigation safe-args and fragments to support previewing specific files via new arguments (
previewFileId,fileType,externalFileType) and add parser unit tests.
Reviewed changes
Copilot reviewed 26 out of 26 changed files in this pull request and generated 8 comments.
Show a summary per file
| File | Description |
|---|---|
| app/src/test/kotlin/com/infomaniak/drive/data/models/deeplink/DeeplinkParserTest.kt | Adds unit tests enumerating supported deeplink formats. |
| app/src/main/res/navigation/select_folder_navigation.xml | Adds args for preview/external deeplink routing in select-folder flows. |
| app/src/main/res/navigation/main_navigation.xml | Adds/renames args for deeplink routing (deeplinkType, fileType, previewFileId, externalFileType). |
| app/src/main/java/com/infomaniak/drive/ui/menu/SharedWithMeFragment.kt | Adds deeplink handling to open/preview the targeted shared-with-me item. |
| app/src/main/java/com/infomaniak/drive/ui/menu/RecentChangesFragment.kt | Reads new previewFileId arg to support direct preview. |
| app/src/main/java/com/infomaniak/drive/ui/menu/MySharesFragment.kt | Reads new previewFileId arg to support direct preview. |
| app/src/main/java/com/infomaniak/drive/ui/home/RootFilesFragment.kt | Observes deeplink navigation events and maps DeeplinkAction.Drive to NavDirections. |
| app/src/main/java/com/infomaniak/drive/ui/fileList/FileListFragment.kt | Adds fileType arg support and file preview-on-entry behavior. |
| app/src/main/java/com/infomaniak/drive/ui/fileList/FavoritesFragment.kt | Reads new previewFileId arg to support direct preview. |
| app/src/main/java/com/infomaniak/drive/ui/MainViewModel.kt | Adds a navigateDeeplink StateFlow for deeplink-driven navigation. |
| app/src/main/java/com/infomaniak/drive/ui/MainActivity.kt | Replaces old deeplink handling with new DeeplinkType routing. |
| app/src/main/java/com/infomaniak/drive/ui/LaunchArgsType.kt | Introduces a unified discriminator for launch sources (notification/shortcut/deeplink). |
| app/src/main/java/com/infomaniak/drive/ui/LaunchActivity.kt | Reworks launch routing to produce DeeplinkType and pass it to MainActivity (or browser). |
| app/src/main/java/com/infomaniak/drive/ui/DeeplinkParser.kt | Adds parsing entrypoint from URL/path string to DeeplinkType. |
| app/src/main/java/com/infomaniak/drive/data/models/file/SpecialFolder.kt | Refactors SpecialFolder to be Parcelable and exposes id/name directly. |
| app/src/main/java/com/infomaniak/drive/data/models/deeplink/RoleFolder.kt | Defines role folder targets for “drive” deeplinks. |
| app/src/main/java/com/infomaniak/drive/data/models/deeplink/MatchResultExt.kt | Adds match parsing helpers (parseId, parseOptionalId) for deeplink regex extraction. |
| app/src/main/java/com/infomaniak/drive/data/models/deeplink/InvalidValue.kt | Adds an internal exception type for invalid deeplink parsing. |
| app/src/main/java/com/infomaniak/drive/data/models/deeplink/FolderType.kt | Maps role folder strings to RoleFolder construction rules. |
| app/src/main/java/com/infomaniak/drive/data/models/deeplink/FileType.kt | Adds file/folder path parsing types for drive/files deeplinks. |
| app/src/main/java/com/infomaniak/drive/data/models/deeplink/ExternalFileType.kt | Adds parsing types for shared-with-me deeplinks. |
| app/src/main/java/com/infomaniak/drive/data/models/deeplink/DeeplinkType.kt | Defines base DeeplinkType and intent “addTo” helper. |
| app/src/main/java/com/infomaniak/drive/data/models/deeplink/DeeplinkRegexAlias.kt | Centralizes regex fragments for deeplink parsing. |
| app/src/main/java/com/infomaniak/drive/data/models/deeplink/DeeplinkAction.kt | Defines supported deeplink actions (drive/office/collaborate). |
| app/src/main/java/com/infomaniak/drive/data/models/deeplink/ActionType.kt | Maps top-level action type (“drive/office/collaborate”) to parsing/build logic. |
| app/src/main/AndroidManifest.xml | Broadens intent-filter patterns to cover all supported deeplink paths and hosts. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
b40b5d3 to
19f7d6b
Compare
19f7d6b to
b983a66
Compare
|
This review introduces a comprehensive refactoring of the deeplink handling system, replacing fragile string parsing with a type-safe architecture using sealed interfaces and enums. The implementation is well-structured with clear separation of concerns, extensive regex pattern definitions, and good test coverage for various deeplink scenarios. Key concerns include the use of #ai-review-summary |
6612158 to
ffd1204
Compare
…s url # Conflicts: # Core # Conflicts: # Core
…enting magic number and more evolution proof
…der from deeplink in SharedWithMeFragment
… forcing LaunchActivity to be relaunched
0a618c0 to
7746248
Compare
…t when no fileId is provided and set the userId correctly to the deeplink action
…eplinkHandler in order to regroup this management and also prevent relaunching the deeplink if already handled (problem happens before for office deeplink which change activity)
…he right deeplinkType (prepare for redirect support in next PR)
|



Manage all deeplink (see DeeplinkParserTest to find all)
Entry point for deeplink parsing is DeeplinkType and more precisely DeeplinkAction for all parsable deeplinks
Depends on #1936
Depends on Infomaniak/android-core#724