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
…known) and open them in webview # Conflicts: # app/src/main/java/com/infomaniak/drive/ui/MainActivity.kt
…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
|



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