├── debug.keystore ├── .gitmodules ├── gradle ├── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties └── libs.versions.toml ├── app ├── src │ ├── main │ │ ├── ic_launcher-playstore.png │ │ ├── res │ │ │ ├── mipmap-hdpi │ │ │ │ ├── ic_launcher.webp │ │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-mdpi │ │ │ │ ├── ic_launcher.webp │ │ │ │ └── ic_launcher_round.webp │ │ │ ├── raw │ │ │ │ ├── mascot_searching.lottie │ │ │ │ ├── mountain_gondola.lottie │ │ │ │ ├── swiss_with_flag.lottie │ │ │ │ ├── storage_cardboard_box_pile.lottie │ │ │ │ ├── three_cards_transfer_type.lottie │ │ │ │ └── two_locks_intertwined_stars.lottie │ │ │ ├── mipmap-xhdpi │ │ │ │ ├── ic_launcher.webp │ │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-xxhdpi │ │ │ │ ├── ic_launcher.webp │ │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-xxxhdpi │ │ │ │ ├── ic_launcher.webp │ │ │ │ └── ic_launcher_round.webp │ │ │ ├── raw-night │ │ │ │ ├── mascot_searching.lottie │ │ │ │ ├── mountain_gondola.lottie │ │ │ │ ├── swiss_with_flag.lottie │ │ │ │ ├── storage_cardboard_box_pile.lottie │ │ │ │ ├── three_cards_transfer_type.lottie │ │ │ │ └── two_locks_intertwined_stars.lottie │ │ │ ├── drawable-hdpi │ │ │ │ ├── splashscreen_icon_legacy.webp │ │ │ │ └── splashscreen_branding_image_legacy.webp │ │ │ ├── drawable-mdpi │ │ │ │ ├── splashscreen_icon_legacy.webp │ │ │ │ └── splashscreen_branding_image_legacy.webp │ │ │ ├── drawable-xhdpi │ │ │ │ ├── splashscreen_icon_legacy.webp │ │ │ │ └── splashscreen_branding_image_legacy.webp │ │ │ ├── drawable-xxhdpi │ │ │ │ ├── splashscreen_icon_legacy.webp │ │ │ │ └── splashscreen_branding_image_legacy.webp │ │ │ ├── drawable-xxxhdpi │ │ │ │ ├── splashscreen_icon_legacy.webp │ │ │ │ └── splashscreen_branding_image_legacy.webp │ │ │ ├── resources.properties │ │ │ ├── values-night │ │ │ │ └── colors.xml │ │ │ ├── xml │ │ │ │ ├── locales_config.xml │ │ │ │ ├── network_security_config.xml │ │ │ │ ├── backup_rules.xml │ │ │ │ └── data_extraction_rules.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ │ ├── ic_launcher.xml │ │ │ │ └── ic_launcher_round.xml │ │ │ ├── drawable │ │ │ │ ├── ic_launcher_background.xml │ │ │ │ ├── splashscreen_legacy.xml │ │ │ │ ├── flag_ge.xml │ │ │ │ ├── flag_it.xml │ │ │ │ ├── flag_fr.xml │ │ │ │ ├── ic_launcher_monochrome.xml │ │ │ │ ├── splashscreen_gradient_legacy.xml │ │ │ │ └── ic_logo_notification.xml │ │ │ ├── values │ │ │ │ ├── colors.xml │ │ │ │ └── themes.xml │ │ │ └── values-v31 │ │ │ │ └── themes.xml │ │ └── java │ │ │ └── com │ │ │ └── infomaniak │ │ │ └── swisstransfer │ │ │ ├── ui │ │ │ ├── screen │ │ │ │ ├── newtransfer │ │ │ │ │ ├── NewTransferOpenManager.kt │ │ │ │ │ ├── PickedFile.kt │ │ │ │ │ ├── NewTransferViewModel.kt │ │ │ │ │ ├── upload │ │ │ │ │ │ ├── components │ │ │ │ │ │ │ └── WeightOneSpacer.kt │ │ │ │ │ │ └── UploadProgressAdType.kt │ │ │ │ │ ├── NewTransferScreen.kt │ │ │ │ │ ├── AlreadyUsedFileNamesSet.kt │ │ │ │ │ └── validateemail │ │ │ │ │ │ └── HideSelectAllTextToolbar.kt │ │ │ │ └── main │ │ │ │ │ ├── transferdetails │ │ │ │ │ ├── TransferDownloadUi.kt │ │ │ │ │ └── emptystate │ │ │ │ │ │ ├── VirusCheckContent.kt │ │ │ │ │ │ ├── UnknownTransferErrorContent.kt │ │ │ │ │ │ └── VirusDetectedContent.kt │ │ │ │ │ ├── components │ │ │ │ │ └── SwissTransferScaffold.kt │ │ │ │ │ ├── settings │ │ │ │ │ ├── components │ │ │ │ │ │ └── SettingDivider.kt │ │ │ │ │ ├── SettingsSentryViewModel.kt │ │ │ │ │ └── SettingsViewModel.kt │ │ │ │ │ ├── transfers │ │ │ │ │ ├── DeleteTransferUseCase.kt │ │ │ │ │ └── components │ │ │ │ │ │ └── DeleteTransferDialog.kt │ │ │ │ │ └── DeeplinkViewModel.kt │ │ │ ├── images │ │ │ │ ├── AppImages.kt │ │ │ │ ├── ThemedImage.kt │ │ │ │ ├── illus │ │ │ │ │ ├── beers │ │ │ │ │ │ └── Beers.kt │ │ │ │ │ ├── matomo │ │ │ │ │ │ └── Matomo.kt │ │ │ │ │ ├── sentry │ │ │ │ │ │ └── Sentry.kt │ │ │ │ │ ├── mascotDead │ │ │ │ │ │ └── MascotDead.kt │ │ │ │ │ ├── dataProtection │ │ │ │ │ │ └── DataProtection.kt │ │ │ │ │ ├── mascotSearching │ │ │ │ │ │ └── MascotSearching.kt │ │ │ │ │ ├── mascotWithMagnifyingGlass │ │ │ │ │ │ └── MascotWithMagnifyingGlass.kt │ │ │ │ │ ├── uploadCancelBottomSheet │ │ │ │ │ │ └── RedCrossPaperPlanes.kt │ │ │ │ │ ├── onboarding │ │ │ │ │ │ ├── RadialGradientCornerTopLeft.kt │ │ │ │ │ │ └── RadialGradientCornerTopRight.kt │ │ │ │ │ ├── uploadError │ │ │ │ │ │ └── GhostMagnifyingGlassQuestionMark.kt │ │ │ │ │ ├── ghostPointingReport │ │ │ │ │ │ └── GhostPointingReport.kt │ │ │ │ │ ├── ghostScanningSquare │ │ │ │ │ │ └── GhostScanningSquare.kt │ │ │ │ │ └── appIntegrity │ │ │ │ │ │ └── GhostScrollCrossPointing.kt │ │ │ │ └── icons │ │ │ │ │ ├── matomo │ │ │ │ │ └── Matomo.kt │ │ │ │ │ ├── sentry │ │ │ │ │ └── Sentry.kt │ │ │ │ │ └── qrInfomaniak │ │ │ │ │ └── QrInfomaniak.kt │ │ │ ├── utils │ │ │ │ ├── GetSetCallbacks.kt │ │ │ │ ├── ThemeUtils.kt │ │ │ │ ├── FileUiExt.kt │ │ │ │ ├── LastTransferPreferences.kt │ │ │ │ ├── DataManagementPreferences.kt │ │ │ │ ├── ScreenWrapperUtils.kt │ │ │ │ ├── DeeplinkExt.kt │ │ │ │ ├── TextUtils.kt │ │ │ │ ├── NotificationPermissionUtils.kt │ │ │ │ ├── DataStoreUtils.kt │ │ │ │ ├── AccountUtils.kt │ │ │ │ └── PermissionsUtils.kt │ │ │ ├── AppUpdateManageable.kt │ │ │ ├── previewparameter │ │ │ │ ├── TransferUiListPreviewParameterProvider.kt │ │ │ │ └── EmailsPreviewParameterProvider.kt │ │ │ ├── navigation │ │ │ │ ├── ExternalNavigation.kt │ │ │ │ └── NavigationItem.kt │ │ │ ├── theme │ │ │ │ ├── CustomShapes.kt │ │ │ │ └── Dimens.kt │ │ │ ├── AppReviewManageable.kt │ │ │ └── components │ │ │ │ ├── SmallWindowScreenTitle.kt │ │ │ │ ├── ReviewAlertDialog.kt │ │ │ │ ├── TextDotText.kt │ │ │ │ ├── SharpRippleButton.kt │ │ │ │ ├── EmailsFlowRow.kt │ │ │ │ └── NewTransferFab.kt │ │ │ ├── di │ │ │ ├── ClientQualifiers.kt │ │ │ ├── CoroutinesQualifiers.kt │ │ │ ├── CoroutinesDispatchersModule.kt │ │ │ └── ApplicationModule.kt │ │ │ └── upload │ │ │ ├── StartUploadRequest.kt │ │ │ ├── PickedFileExt.kt │ │ │ ├── PickedFilesExtractor.kt │ │ │ ├── NewTransferParams.kt │ │ │ ├── NewTransferParamsExt.kt │ │ │ └── InputStreamCounter.kt │ ├── preprod │ │ └── res │ │ │ ├── mipmap │ │ │ ├── ic_launcher.webp │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ │ └── drawable │ │ │ ├── ic_launcher_background.xml │ │ │ └── ic_launcher_monochrome.xml │ ├── prod │ │ └── src │ │ │ └── res │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.webp │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.webp │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.webp │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.webp │ │ │ └── ic_launcher_round.webp │ │ │ └── mipmap-xxxhdpi │ │ │ ├── ic_launcher.webp │ │ │ └── ic_launcher_round.webp │ ├── androidTest │ │ └── java │ │ │ └── com │ │ │ └── infomaniak │ │ │ └── swisstransfer │ │ │ └── ExampleInstrumentedTest.kt │ └── test │ │ └── java │ │ └── com │ │ └── infomaniak │ │ └── swisstransfer │ │ ├── NavigationDestinationUnitTest.kt │ │ └── TransferDatesUnitTest.kt └── proguard-rules.pro ├── .idea ├── codeStyles │ └── codeStyleConfig.xml ├── copyright │ ├── profiles_settings.xml │ └── Infomaniak_Open_Source.xml └── icon.svg ├── .github ├── workflows │ ├── auto-author-assign.yml │ ├── dependent-issues.yml │ ├── semantic-commit.yml │ ├── android.yml │ ├── translations-validation.yml │ └── rebase-default-branch.yml └── ISSUE_TEMPLATE │ ├── feature_request.md │ └── bug_report.md ├── .gitignore ├── env.example.properties ├── gradle.properties └── settings.gradle.kts /debug.keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/debug.keystore -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "Core"] 2 | path = Core 3 | url = git@github.com:Infomaniak/android-core.git 4 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/raw/mascot_searching.lottie: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/main/res/raw/mascot_searching.lottie -------------------------------------------------------------------------------- /app/src/main/res/raw/mountain_gondola.lottie: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/main/res/raw/mountain_gondola.lottie -------------------------------------------------------------------------------- /app/src/main/res/raw/swiss_with_flag.lottie: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/main/res/raw/swiss_with_flag.lottie -------------------------------------------------------------------------------- /app/src/preprod/res/mipmap/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/preprod/res/mipmap/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/raw-night/mascot_searching.lottie: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/main/res/raw-night/mascot_searching.lottie -------------------------------------------------------------------------------- /app/src/main/res/raw-night/mountain_gondola.lottie: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/main/res/raw-night/mountain_gondola.lottie -------------------------------------------------------------------------------- /app/src/main/res/raw-night/swiss_with_flag.lottie: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/main/res/raw-night/swiss_with_flag.lottie -------------------------------------------------------------------------------- /app/src/preprod/res/mipmap/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/preprod/res/mipmap/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/prod/src/res/mipmap-hdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/prod/src/res/mipmap-hdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/prod/src/res/mipmap-mdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/prod/src/res/mipmap-mdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/prod/src/res/mipmap-xhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/prod/src/res/mipmap-xhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/prod/src/res/mipmap-xxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/prod/src/res/mipmap-xxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/prod/src/res/mipmap-xxxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/prod/src/res/mipmap-xxxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/raw/storage_cardboard_box_pile.lottie: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/main/res/raw/storage_cardboard_box_pile.lottie -------------------------------------------------------------------------------- /app/src/main/res/raw/three_cards_transfer_type.lottie: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/main/res/raw/three_cards_transfer_type.lottie -------------------------------------------------------------------------------- /app/src/main/res/raw/two_locks_intertwined_stars.lottie: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/main/res/raw/two_locks_intertwined_stars.lottie -------------------------------------------------------------------------------- /app/src/prod/src/res/mipmap-hdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/prod/src/res/mipmap-hdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/prod/src/res/mipmap-mdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/prod/src/res/mipmap-mdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/prod/src/res/mipmap-xhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/prod/src/res/mipmap-xhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/prod/src/res/mipmap-xxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/prod/src/res/mipmap-xxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/splashscreen_icon_legacy.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/main/res/drawable-hdpi/splashscreen_icon_legacy.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/splashscreen_icon_legacy.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/main/res/drawable-mdpi/splashscreen_icon_legacy.webp -------------------------------------------------------------------------------- /app/src/main/res/raw-night/storage_cardboard_box_pile.lottie: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/main/res/raw-night/storage_cardboard_box_pile.lottie -------------------------------------------------------------------------------- /app/src/main/res/raw-night/three_cards_transfer_type.lottie: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/main/res/raw-night/three_cards_transfer_type.lottie -------------------------------------------------------------------------------- /app/src/prod/src/res/mipmap-xxxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/prod/src/res/mipmap-xxxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/splashscreen_icon_legacy.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/main/res/drawable-xhdpi/splashscreen_icon_legacy.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/splashscreen_icon_legacy.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/main/res/drawable-xxhdpi/splashscreen_icon_legacy.webp -------------------------------------------------------------------------------- /app/src/main/res/raw-night/two_locks_intertwined_stars.lottie: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/main/res/raw-night/two_locks_intertwined_stars.lottie -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/splashscreen_icon_legacy.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/main/res/drawable-xxxhdpi/splashscreen_icon_legacy.webp -------------------------------------------------------------------------------- /.idea/codeStyles/codeStyleConfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/splashscreen_branding_image_legacy.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/main/res/drawable-hdpi/splashscreen_branding_image_legacy.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/splashscreen_branding_image_legacy.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/main/res/drawable-mdpi/splashscreen_branding_image_legacy.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/splashscreen_branding_image_legacy.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/main/res/drawable-xhdpi/splashscreen_branding_image_legacy.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/splashscreen_branding_image_legacy.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/main/res/drawable-xxhdpi/splashscreen_branding_image_legacy.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/splashscreen_branding_image_legacy.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Infomaniak/android-SwissTransfer/HEAD/app/src/main/res/drawable-xxxhdpi/splashscreen_branding_image_legacy.webp -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Wed Jul 17 16:05:07 CEST 2024 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip 5 | zipStoreBase=GRADLE_USER_HOME 6 | zipStorePath=wrapper/dists 7 | -------------------------------------------------------------------------------- /.github/workflows/auto-author-assign.yml: -------------------------------------------------------------------------------- 1 | name: Auto Author Assign 2 | 3 | on: 4 | pull_request_target: 5 | types: [ opened, reopened ] 6 | 7 | concurrency: 8 | group: ${{ github.workflow }}-${{ github.ref }} 9 | cancel-in-progress: true 10 | 11 | permissions: 12 | pull-requests: write 13 | 14 | jobs: 15 | assign-author: 16 | runs-on: ubuntu-latest 17 | steps: 18 | - uses: toshimaru/auto-author-assign@v2.1.1 19 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.aab 2 | *.apk 3 | /app/release/baselineProfiles 4 | /app/src/androidTest/java/com/infomaniak/drive/utils/Env.kt 5 | /app/src/standard/java/com/infomaniak/drive/GeniusScanEnv.kt 6 | **/build 7 | **/captures 8 | .cxx 9 | .DS_Store 10 | env.properties 11 | uitest-env.properties 12 | .externalNativeBuild 13 | .gradle 14 | **/.idea 15 | !.idea/icon.svg 16 | /.idea/navEditor.xml 17 | *.iml 18 | .kotlin/errors 19 | .kotlin/sessions 20 | **/local.properties 21 | *.realm 22 | *.realm.lock 23 | *.mx 24 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | *Note: Please write your issue only in english* 11 | 12 | **Is your feature request related to a problem? Please describe.** 13 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 14 | 15 | **Describe the solution you'd like** 16 | A clear and concise description of what you want to happen. 17 | 18 | **Describe alternatives you've considered** 19 | A clear and concise description of any alternative solutions or features you've considered. 20 | 21 | **Additional context** 22 | Add any other context or screenshots about the feature request here. 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/NewTransferOpenManager.kt: -------------------------------------------------------------------------------- 1 | package com.infomaniak.swisstransfer.ui.screen.newtransfer 2 | 3 | import android.net.Uri 4 | import kotlinx.coroutines.channels.Channel 5 | import javax.inject.Inject 6 | import javax.inject.Singleton 7 | 8 | @Singleton 9 | class NewTransferOpenManager @Inject constructor() { 10 | sealed interface Reason { 11 | data class ExternalShareIncoming(val uris: List) : Reason 12 | data object Other : Reason 13 | } 14 | 15 | suspend fun readOpenReason(): Reason = reasonChannel.receive() 16 | 17 | fun setOpenReason(reason: Reason) { 18 | reasonChannel.trySend(reason) 19 | } 20 | 21 | private val reasonChannel = Channel(capacity = 1) 22 | } 23 | -------------------------------------------------------------------------------- /.github/workflows/dependent-issues.yml: -------------------------------------------------------------------------------- 1 | name: Dependent Issues 2 | 3 | on: 4 | issues: 5 | types: 6 | - opened 7 | - edited 8 | - closed 9 | - reopened 10 | pull_request_target: 11 | types: 12 | - opened 13 | - edited 14 | - closed 15 | - reopened 16 | # Makes sure we always add status check for PRs. Useful only if 17 | # this action is required to pass before merging. Otherwise, it 18 | # can be removed. 19 | - synchronize 20 | 21 | concurrency: 22 | group: ${{ github.workflow }}-${{ github.ref }} 23 | cancel-in-progress: true 24 | 25 | jobs: 26 | check: 27 | runs-on: ubuntu-latest 28 | steps: 29 | - uses: z0al/dependent-issues@v1.5.2 30 | env: 31 | # (Required) The token to use to make API calls to GitHub. 32 | GITHUB_TOKEN: ${{ github.token }} 33 | -------------------------------------------------------------------------------- /app/src/main/res/resources.properties: -------------------------------------------------------------------------------- 1 | # 2 | # Infomaniak SwissTransfer - Android 3 | # Copyright (C) 2024 Infomaniak Network SA 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 3 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | # 18 | # 19 | # Set default locale 20 | unqualifiedResLocale=en 21 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | *Note: Please write your issue only in english* 11 | 12 | **Description** 13 | A clear and concise description of what the bug is. 14 | 15 | **Steps to reproduce** 16 | Steps to reproduce the behavior: 17 | 18 | 1. Go to '...' 19 | 2. Click on '....' 20 | 3. Scroll down to '....' 21 | 4. See error 22 | 23 | **Expected behavior** 24 | A clear and concise description of what you expected to happen. 25 | 26 | **Screenshots** 27 | If applicable, add screenshots to help explain your problem. 28 | 29 | **Smartphone (please complete the following information):** 30 | 31 | - Device: [e.g. Samsung S20 Ultra 5G] 32 | - Android version: [e.g. Android 11] 33 | - App version: [e.g. 1.0.1] 34 | 35 | **Additional context** 36 | Add any other context about the problem here. 37 | -------------------------------------------------------------------------------- /app/src/main/res/values-night/colors.xml: -------------------------------------------------------------------------------- 1 | 18 | 19 | #156E61 20 | 21 | -------------------------------------------------------------------------------- /.github/workflows/semantic-commit.yml: -------------------------------------------------------------------------------- 1 | name: 'PR and Commit Message Check' 2 | on: 3 | pull_request_target: 4 | types: 5 | - opened 6 | - edited 7 | - reopened 8 | - synchronize 9 | 10 | concurrency: 11 | group: ${{ github.workflow }}-${{ github.ref }} 12 | cancel-in-progress: true 13 | 14 | jobs: 15 | check-commit-message: 16 | name: Check Commit Message 17 | runs-on: ubuntu-latest 18 | steps: 19 | - name: Check Commit Message 20 | uses: gsactions/commit-message-checker@v2 21 | with: 22 | pattern: '^Merge .+|(^(feat|fix|chore|docs|style|refactor|perf|ci|test)(\(.+\))?: [A-Z0-9].+)' 23 | error: 'Commit messages and PR title should match conventional commit convention and start with an uppercase.' 24 | excludeDescription: 'true' 25 | excludeTitle: 'false' 26 | checkAllCommitMessages: 'true' 27 | accessToken: ${{ secrets.GITHUB_TOKEN }} 28 | -------------------------------------------------------------------------------- /.idea/copyright/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 11 | 12 | 15 | 16 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /env.example.properties: -------------------------------------------------------------------------------- 1 | # 2 | # Infomaniak SwissTransfer - Android 3 | # Copyright (C) 2024 Infomaniak Network SA 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 3 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | # 18 | # 19 | # This is a sample file, create your own, named `env.properties`. 20 | # You can create your token here: https://sentry-mobile.infomaniak.com/settings/sentry/auth-tokens 21 | sentryAuthToken=YOUR_SENTRY_AUTH_TOKEN_HERE 22 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | 23 | # The TransferTypeUi class is removed when minifying, we don't want that. 24 | -keep class com.infomaniak.swisstransfer.ui.screen.newtransfer.pickfiles.components.TransferTypeUi{*;} 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/infomaniak/swisstransfer/di/ClientQualifiers.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Infomaniak SwissTransfer - Android 3 | * Copyright (C) 2024 Infomaniak Network SA 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | package com.infomaniak.swisstransfer.di 19 | 20 | import javax.inject.Qualifier 21 | 22 | @Retention(AnnotationRetention.BINARY) 23 | @Qualifier 24 | annotation class UserAgent 25 | -------------------------------------------------------------------------------- /.idea/copyright/Infomaniak_Open_Source.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /app/src/main/java/com/infomaniak/swisstransfer/ui/images/AppImages.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Infomaniak SwissTransfer - Android 3 | * Copyright (C) 2024 Infomaniak Network SA 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | package com.infomaniak.swisstransfer.ui.images 19 | 20 | import androidx.compose.ui.unit.dp 21 | 22 | object AppImages { 23 | object AppIcons 24 | object AppIllus 25 | 26 | val previewSize = 250.dp 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/com/infomaniak/swisstransfer/ui/utils/GetSetCallbacks.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Infomaniak SwissTransfer - Android 3 | * Copyright (C) 2024 Infomaniak Network SA 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | package com.infomaniak.swisstransfer.ui.utils 19 | 20 | import androidx.compose.runtime.Immutable 21 | 22 | @Immutable 23 | class GetSetCallbacks( 24 | val get: () -> T, 25 | val set: (T) -> Unit, 26 | ) 27 | -------------------------------------------------------------------------------- /app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/PickedFile.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Infomaniak SwissTransfer - Android 3 | * Copyright (C) 2025 Infomaniak Network SA 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | package com.infomaniak.swisstransfer.ui.screen.newtransfer 19 | 20 | import android.net.Uri 21 | 22 | data class PickedFile( 23 | val uri: Uri, 24 | val name: String, 25 | val mimeType: String, 26 | val size: Long, 27 | ) 28 | -------------------------------------------------------------------------------- /.github/workflows/android.yml: -------------------------------------------------------------------------------- 1 | name: Android CI 2 | 3 | on: 4 | pull_request: 5 | 6 | concurrency: 7 | group: ${{ github.workflow }}-${{ github.ref }} 8 | cancel-in-progress: true 9 | 10 | jobs: 11 | instrumentation-tests: 12 | if: github.event.pull_request.draft == false 13 | runs-on: [ self-hosted, Android ] 14 | 15 | steps: 16 | - name: Checkout the code 17 | uses: actions/checkout@v5.0.0 18 | with: 19 | token: ${{ github.token }} 20 | submodules: recursive 21 | 22 | - name: Create test env.properties 23 | run: | 24 | touch env.properties 25 | echo "sentryAuthToken=DummyToken" > env.properties 26 | 27 | # Setup Gradle and Run tests 28 | - name: Grant execute permission for gradlew 29 | run: chmod +x gradlew 30 | 31 | - name: Clean gradle cache 32 | run: ./gradlew clean 33 | 34 | # Making sure the app compiles 35 | - name: Build app 36 | run: ./gradlew assembleDebug 37 | 38 | - name: Run unit tests 39 | run: ./gradlew testProdDebugUnitTest --stacktrace 40 | -------------------------------------------------------------------------------- /app/src/main/res/xml/locales_config.xml: -------------------------------------------------------------------------------- 1 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/infomaniak/swisstransfer/upload/StartUploadRequest.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Infomaniak SwissTransfer - Android 3 | * Copyright (C) 2025 Infomaniak Network SA 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | package com.infomaniak.swisstransfer.upload 19 | 20 | import com.infomaniak.swisstransfer.ui.screen.newtransfer.PickedFile 21 | 22 | data class StartUploadRequest( 23 | val params: NewTransferParams, 24 | val files: List, 25 | val info: UploadState.Ongoing.TransferInfo 26 | ) 27 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/preprod/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 18 | 23 | 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/preprod/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/preprod/res/drawable/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 18 | 23 | 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/res/xml/network_security_config.xml: -------------------------------------------------------------------------------- 1 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/java/com/infomaniak/swisstransfer/ui/AppUpdateManageable.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Infomaniak SwissTransfer - Android 3 | * Copyright (C) 2025 Infomaniak Network SA 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | package com.infomaniak.swisstransfer.ui 19 | 20 | import com.infomaniak.core.inappupdate.updatemanagers.InAppUpdateManager 21 | 22 | interface AppUpdateManageable { 23 | 24 | val inAppUpdateManager: InAppUpdateManager 25 | 26 | fun initAppUpdateManager(isUpdateRequired: Boolean) = inAppUpdateManager.init( 27 | isUpdateRequired = isUpdateRequired, 28 | ) 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/infomaniak/swisstransfer/upload/PickedFileExt.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Infomaniak SwissTransfer - Android 3 | * Copyright (C) 2025 Infomaniak Network SA 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | package com.infomaniak.swisstransfer.upload 19 | 20 | import com.infomaniak.multiplatform_swisstransfer.common.interfaces.upload.FileToUploadMetadata 21 | import com.infomaniak.swisstransfer.ui.screen.newtransfer.PickedFile 22 | 23 | fun PickedFile.toFileUploadMetaData(): FileToUploadMetadata { 24 | return FileToUploadMetadata( 25 | name = name, 26 | size = size, 27 | mimeType = mimeType 28 | ) 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 18 | 19 | #FFBB86FC 20 | #FF6200EE 21 | #FF3700B3 22 | #FF03DAC5 23 | #FF018786 24 | #FF000000 25 | #FFFFFFFF 26 | 27 | #3CB572 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/java/com/infomaniak/swisstransfer/di/CoroutinesQualifiers.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Infomaniak SwissTransfer - Android 3 | * Copyright (C) 2024 Infomaniak Network SA 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | package com.infomaniak.swisstransfer.di 19 | 20 | import javax.inject.Qualifier 21 | 22 | //region Globals qualifiers 23 | @Retention(AnnotationRetention.BINARY) 24 | @Qualifier 25 | annotation class DefaultDispatcher 26 | 27 | @Retention(AnnotationRetention.BINARY) 28 | @Qualifier 29 | annotation class IoDispatcher 30 | 31 | @Retention(AnnotationRetention.BINARY) 32 | @Qualifier 33 | annotation class MainDispatcher 34 | //endregion 35 | -------------------------------------------------------------------------------- /app/src/main/java/com/infomaniak/swisstransfer/ui/images/ThemedImage.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Infomaniak SwissTransfer - Android 3 | * Copyright (C) 2024 Infomaniak Network SA 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | package com.infomaniak.swisstransfer.ui.images 19 | 20 | import androidx.compose.runtime.Composable 21 | import androidx.compose.ui.graphics.vector.ImageVector 22 | import com.infomaniak.swisstransfer.ui.theme.LocalIsDarkMode 23 | 24 | interface ThemedImage { 25 | val light: ImageVector 26 | val dark: ImageVector 27 | 28 | @Composable 29 | fun image(): ImageVector = if (LocalIsDarkMode.current) dark else light 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/com/infomaniak/swisstransfer/ui/previewparameter/TransferUiListPreviewParameterProvider.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Infomaniak SwissTransfer - Android 3 | * Copyright (C) 2024 Infomaniak Network SA 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | package com.infomaniak.swisstransfer.ui.previewparameter 19 | 20 | import androidx.compose.ui.tooling.preview.PreviewParameterProvider 21 | import com.infomaniak.multiplatform_swisstransfer.common.interfaces.ui.TransferUi 22 | 23 | class TransferUiListPreviewParameter : PreviewParameterProvider> { 24 | override val values: Sequence> = sequenceOf(transfersPreviewData) 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/com/infomaniak/swisstransfer/ui/utils/ThemeUtils.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Infomaniak SwissTransfer - Android 3 | * Copyright (C) 2025 Infomaniak Network SA 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | package com.infomaniak.swisstransfer.ui.utils 19 | 20 | import androidx.compose.foundation.isSystemInDarkTheme 21 | import androidx.compose.runtime.Composable 22 | import com.infomaniak.multiplatform_swisstransfer.common.models.Theme 23 | 24 | @Composable 25 | fun isDarkTheme(getTheme: () -> Theme?): Boolean { 26 | return getTheme()?.let { 27 | if (it == Theme.SYSTEM) isSystemInDarkTheme() else it == Theme.DARK 28 | } ?: isSystemInDarkTheme() 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/infomaniak/swisstransfer/upload/PickedFilesExtractor.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Infomaniak SwissTransfer - Android 3 | * Copyright (C) 2025 Infomaniak Network SA 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | package com.infomaniak.swisstransfer.upload 19 | 20 | import android.net.Uri 21 | import com.infomaniak.swisstransfer.ui.screen.newtransfer.PickedFile 22 | import kotlinx.coroutines.flow.StateFlow 23 | 24 | interface PickedFilesExtractor { 25 | 26 | val pickedFilesFlow: StateFlow> 27 | val isHandlingUrisFlow: StateFlow 28 | 29 | fun addUris(uris: List) 30 | fun removeUris(uris: List) 31 | fun clear() 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 18 | 19 | 20 | 24 | 25 | 25 | 26 |