From 0f73f9ca0ea1d1b031e262fde8dffb8f02107455 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Mon, 30 Mar 2026 11:15:53 -0300 Subject: [PATCH] Port old nearby feature to new full flavor We had worked on a new nearby feature which would also employ BLE to find contacts when they are not on the same Wi-Fi and then auto connect via Wifi Direct. This had a prototype app and a UI prototype. The new nearby was ~80% done, but then scraped. So now unfortuntately, F-Droid 2.0 will need to ship with the old nearby code which is barely held together by duct tape. This commit mostly copies the old files as-is and does minimal changes so they can keep working in the new environment. An exception is the "success view" which was woven so deep into the old job intent services and state handling that it couldn't be re-used. Instead, a quick compose re-implementation with a viewmodel was made which hooks into the modern infrastructure, so app installs and presentation with icons is working. --- app/build.gradle.kts | 8 + .../ui/navigation/ExtraNavigationEntries.kt | 5 + app/src/full/AndroidManifest.xml | 105 +- app/src/full/assets/index.template.html | 138 ++ app/src/full/assets/swap-icon.png | Bin 0 -> 2710 bytes app/src/full/assets/swap-icon.svg | 40 + app/src/full/assets/swap-tick-done.png | Bin 0 -> 621 bytes app/src/full/assets/swap-tick-not-done.png | Bin 0 -> 588 bytes .../cc/mvdan/accesspoint/WifiApControl.java | 417 ++++ .../com/google/zxing/encode/Contents.java | 113 ++ .../google/zxing/encode/QRCodeEncoder.java | 261 +++ .../javax/jmdns/impl/FDroidServiceInfo.java | 122 ++ .../kellinwood/logging/AbstractLogger.java | 94 + .../logging/ConsoleLoggerFactory.java | 24 + .../kellinwood/logging/LoggerFactory.java | 22 + .../kellinwood/logging/LoggerInterface.java | 49 + .../kellinwood/logging/LoggerManager.java | 41 + .../kellinwood/logging/NullLoggerFactory.java | 69 + .../java/kellinwood/logging/StreamLogger.java | 35 + .../security/zipsigner/AutoKeyException.java | 14 + .../zipsigner/DefaultResourceAdapter.java | 34 + .../security/zipsigner/HexDumpEncoder.java | 72 + .../kellinwood/security/zipsigner/KeySet.java | 95 + .../security/zipsigner/ProgressEvent.java | 51 + .../security/zipsigner/ProgressHelper.java | 80 + .../security/zipsigner/ProgressListener.java | 26 + .../security/zipsigner/ResourceAdapter.java | 20 + .../security/zipsigner/ZipSigner.java | 780 ++++++++ .../optional/SignatureBlockGenerator.java | 60 + .../java/kellinwood/zipio/CentralEnd.java | 104 + .../full/java/kellinwood/zipio/ZioEntry.java | 639 ++++++ .../kellinwood/zipio/ZioEntryInputStream.java | 141 ++ .../zipio/ZioEntryOutputStream.java | 85 + .../full/java/kellinwood/zipio/ZipInput.java | 234 +++ .../kellinwood/zipio/ZipListingHelper.java | 52 + .../full/java/kellinwood/zipio/ZipOutput.java | 144 ++ .../java/org/fdroid/fdroid/FDroidApp.java | 62 + .../full/java/org/fdroid/fdroid/Hasher.java | 99 + .../java/org/fdroid/fdroid/Preferences.java | 87 + .../full/java/org/fdroid/fdroid/Utils.java | 437 +++++ .../org/fdroid/fdroid/compat/FileCompat.java | 78 + .../full/java/org/fdroid/fdroid/data/Apk.java | 11 + .../full/java/org/fdroid/fdroid/data/App.java | 24 + .../org/fdroid/fdroid/data/SanitizedFile.java | 69 + .../fdroid/fdroid/nearby/BluetoothClient.java | 35 + .../fdroid/nearby/BluetoothConnection.java | 55 + .../fdroid/nearby/BluetoothConstants.java | 11 + .../fdroid/nearby/BluetoothManager.java | 195 ++ .../fdroid/fdroid/nearby/BluetoothServer.java | 350 ++++ .../fdroid/fdroid/nearby/BonjourManager.java | 322 +++ .../org/fdroid/fdroid/nearby/LocalHTTPD.java | 504 +++++ .../fdroid/nearby/LocalHTTPDManager.java | 127 ++ .../fdroid/nearby/LocalRepoKeyStore.java | 377 ++++ .../fdroid/nearby/LocalRepoManager.java | 301 +++ .../fdroid/nearby/LocalRepoService.java | 130 ++ .../fdroid/fdroid/nearby/NewRepoConfig.java | 233 +++ .../nearby/PublicSourceDirProvider.java | 126 ++ .../fdroid/nearby/SDCardScannerService.java | 148 ++ .../fdroid/fdroid/nearby/SelectAppsView.java | 222 +++ .../fdroid/fdroid/nearby/StartSwapView.java | 255 +++ .../org/fdroid/fdroid/nearby/SwapService.java | 658 +++++++ .../fdroid/fdroid/nearby/SwapSuccessView.java | 40 + .../org/fdroid/fdroid/nearby/SwapView.java | 86 + .../fdroid/nearby/SwapWorkflowActivity.java | 1457 ++++++++++++++ .../nearby/TreeUriScannerIntentService.java | 166 ++ .../nearby/UsbDeviceAttachedReceiver.java | 67 + .../nearby/UsbDeviceDetachedReceiver.java | 60 + .../nearby/UsbDeviceMediaMountedReceiver.java | 24 + .../nearby/WifiStateChangeReceiver.java | 21 + .../fdroid/nearby/WifiStateChangeService.java | 391 ++++ .../nearby/httpish/ContentLengthHeader.java | 13 + .../fdroid/nearby/httpish/ETagHeader.java | 13 + .../fdroid/nearby/httpish/FileDetails.java | 23 + .../fdroid/fdroid/nearby/httpish/Header.java | 25 + .../fdroid/fdroid/nearby/httpish/Request.java | 204 ++ .../fdroid/nearby/httpish/Response.java | 166 ++ .../fdroid/nearby/peers/BluetoothPeer.java | 120 ++ .../fdroid/nearby/peers/BonjourPeer.java | 101 + .../org/fdroid/fdroid/nearby/peers/Peer.java | 29 + .../fdroid/fdroid/nearby/peers/WifiPeer.java | 109 ++ .../fdroid/fdroid/net/TreeUriDownloader.java | 114 ++ .../qr/CameraCharacteristicsChecker.java | 17 + .../CameraCharacteristicsMinApiLevel21.java | 108 + .../fdroid/views/main/NearbyViewBinder.java | 252 +++ .../apache/commons/codec/BinaryDecoder.java | 37 + .../apache/commons/codec/BinaryEncoder.java | 37 + .../apache/commons/codec/CharEncoding.java | 119 ++ .../org/apache/commons/codec/Decoder.java | 46 + .../commons/codec/DecoderException.java | 84 + .../org/apache/commons/codec/Encoder.java | 43 + .../commons/codec/EncoderException.java | 87 + .../codec/binary/CharSequenceUtils.java | 82 + .../org/apache/commons/codec/binary/Hex.java | 567 ++++++ .../commons/codec/binary/StringUtils.java | 419 ++++ .../commons/codec/digest/DigestUtils.java | 1743 +++++++++++++++++ .../codec/digest/MessageDigestAlgorithms.java | 174 ++ app/src/full/kotlin/org/fdroid/LegacyUtils.kt | 24 + .../ui/navigation/ExtraNavigationEntries.kt | 14 +- .../org/fdroid/ui/nearby/NearbyStart.kt | 58 + .../org/fdroid/ui/nearby/SwapSuccess.kt | 117 ++ .../org/fdroid/ui/nearby/SwapSuccessAppRow.kt | 290 +++ .../org/fdroid/ui/nearby/SwapSuccessModel.kt | 26 + .../fdroid/ui/nearby/SwapSuccessViewModel.kt | 241 +++ app/src/full/res/drawable-hdpi/circle.png | Bin 0 -> 213 bytes .../full/res/drawable-hdpi/ic_fdroid_grey.png | Bin 0 -> 246 bytes .../res/drawable-hdpi/swap_start_header.png | Bin 0 -> 12481 bytes app/src/full/res/drawable-ldpi/circle.png | Bin 0 -> 94 bytes .../full/res/drawable-ldpi/ic_fdroid_grey.png | Bin 0 -> 107 bytes .../res/drawable-ldpi/swap_start_header.png | Bin 0 -> 2790 bytes app/src/full/res/drawable-mdpi/circle.png | Bin 0 -> 112 bytes .../full/res/drawable-mdpi/ic_fdroid_grey.png | Bin 0 -> 139 bytes .../res/drawable-mdpi/swap_start_header.png | Bin 0 -> 5106 bytes app/src/full/res/drawable-xhdpi/circle.png | Bin 0 -> 304 bytes .../res/drawable-xhdpi/ic_fdroid_grey.png | Bin 0 -> 252 bytes .../res/drawable-xhdpi/swap_start_header.png | Bin 0 -> 17404 bytes app/src/full/res/drawable-xxhdpi/circle.png | Bin 0 -> 808 bytes .../res/drawable-xxhdpi/ic_fdroid_grey.png | Bin 0 -> 655 bytes .../res/drawable-xxhdpi/swap_start_header.png | Bin 0 -> 51061 bytes app/src/full/res/drawable-xxxhdpi/circle.png | Bin 0 -> 1446 bytes .../res/drawable-xxxhdpi/ic_fdroid_grey.png | Bin 0 -> 1014 bytes .../drawable-xxxhdpi/swap_start_header.png | Bin 0 -> 84307 bytes app/src/full/res/drawable/check.xml | 11 + .../res/drawable/ic_add_circle_outline.xml | 10 + app/src/full/res/drawable/ic_apps.xml | 10 + app/src/full/res/drawable/ic_arrow_back.xml | 11 + .../full/res/drawable/ic_arrow_forward.xml | 10 + app/src/full/res/drawable/ic_bluetooth.xml | 10 + .../res/drawable/ic_bluetooth_searching.xml | 10 + app/src/full/res/drawable/ic_close.xml | 10 + app/src/full/res/drawable/ic_nearby.xml | 33 + app/src/full/res/drawable/ic_qr_code.xml | 40 + app/src/full/res/drawable/ic_search.xml | 10 + app/src/full/res/drawable/ic_wifi.xml | 10 + app/src/full/res/drawable/ic_wifi_off.xml | 10 + .../full/res/drawable/ic_wifi_tethering.xml | 10 + app/src/full/res/drawable/nearby_splash.xml | 12 + .../res/layout-sw480dp/start_swap_header.xml | 33 + app/src/full/res/layout/main_tab_nearby.xml | 141 ++ .../layout/select_local_apps_list_item.xml | 70 + app/src/full/res/layout/start_swap_header.xml | 6 + app/src/full/res/layout/swap_activity.xml | 27 + .../full/res/layout/swap_app_list_item.xml | 97 + .../full/res/layout/swap_confirm_receive.xml | 76 + app/src/full/res/layout/swap_connecting.xml | 44 + app/src/full/res/layout/swap_join_wifi.xml | 59 + .../full/res/layout/swap_peer_list_item.xml | 45 + app/src/full/res/layout/swap_select_apps.xml | 17 + app/src/full/res/layout/swap_send_fdroid.xml | 57 + app/src/full/res/layout/swap_start_swap.xml | 272 +++ app/src/full/res/layout/swap_success.xml | 16 + app/src/full/res/layout/swap_wifi_qr.xml | 65 + app/src/full/res/menu/swap_next.xml | 12 + app/src/full/res/menu/swap_next_search.xml | 15 + app/src/full/res/menu/swap_search.xml | 16 + app/src/full/res/values-night/colors.xml | 56 + app/src/full/res/values-night/themes.xml | 75 + app/src/full/res/values/attrs.xml | 7 + app/src/full/res/values/colors.xml | 77 + app/src/full/res/values/styles.xml | 268 +++ app/src/full/res/values/themes.xml | 99 + app/src/full/res/xml/device_filter.xml | 25 + .../full/res/xml/network_security_config.xml | 43 + .../org/fdroid/ui/navigation/NavigationKey.kt | 18 +- .../fdroid/fdroid/data/SanitizedFileTest.java | 57 + gradle/verification-metadata.xml | 15 + 165 files changed, 18913 insertions(+), 6 deletions(-) create mode 100644 app/src/full/assets/index.template.html create mode 100644 app/src/full/assets/swap-icon.png create mode 100644 app/src/full/assets/swap-icon.svg create mode 100644 app/src/full/assets/swap-tick-done.png create mode 100644 app/src/full/assets/swap-tick-not-done.png create mode 100644 app/src/full/java/cc/mvdan/accesspoint/WifiApControl.java create mode 100755 app/src/full/java/com/google/zxing/encode/Contents.java create mode 100755 app/src/full/java/com/google/zxing/encode/QRCodeEncoder.java create mode 100644 app/src/full/java/javax/jmdns/impl/FDroidServiceInfo.java create mode 100644 app/src/full/java/kellinwood/logging/AbstractLogger.java create mode 100644 app/src/full/java/kellinwood/logging/ConsoleLoggerFactory.java create mode 100644 app/src/full/java/kellinwood/logging/LoggerFactory.java create mode 100644 app/src/full/java/kellinwood/logging/LoggerInterface.java create mode 100644 app/src/full/java/kellinwood/logging/LoggerManager.java create mode 100644 app/src/full/java/kellinwood/logging/NullLoggerFactory.java create mode 100644 app/src/full/java/kellinwood/logging/StreamLogger.java create mode 100644 app/src/full/java/kellinwood/security/zipsigner/AutoKeyException.java create mode 100644 app/src/full/java/kellinwood/security/zipsigner/DefaultResourceAdapter.java create mode 100644 app/src/full/java/kellinwood/security/zipsigner/HexDumpEncoder.java create mode 100644 app/src/full/java/kellinwood/security/zipsigner/KeySet.java create mode 100644 app/src/full/java/kellinwood/security/zipsigner/ProgressEvent.java create mode 100644 app/src/full/java/kellinwood/security/zipsigner/ProgressHelper.java create mode 100644 app/src/full/java/kellinwood/security/zipsigner/ProgressListener.java create mode 100644 app/src/full/java/kellinwood/security/zipsigner/ResourceAdapter.java create mode 100644 app/src/full/java/kellinwood/security/zipsigner/ZipSigner.java create mode 100644 app/src/full/java/kellinwood/security/zipsigner/optional/SignatureBlockGenerator.java create mode 100644 app/src/full/java/kellinwood/zipio/CentralEnd.java create mode 100644 app/src/full/java/kellinwood/zipio/ZioEntry.java create mode 100644 app/src/full/java/kellinwood/zipio/ZioEntryInputStream.java create mode 100644 app/src/full/java/kellinwood/zipio/ZioEntryOutputStream.java create mode 100644 app/src/full/java/kellinwood/zipio/ZipInput.java create mode 100644 app/src/full/java/kellinwood/zipio/ZipListingHelper.java create mode 100644 app/src/full/java/kellinwood/zipio/ZipOutput.java create mode 100644 app/src/full/java/org/fdroid/fdroid/FDroidApp.java create mode 100644 app/src/full/java/org/fdroid/fdroid/Hasher.java create mode 100644 app/src/full/java/org/fdroid/fdroid/Preferences.java create mode 100644 app/src/full/java/org/fdroid/fdroid/Utils.java create mode 100644 app/src/full/java/org/fdroid/fdroid/compat/FileCompat.java create mode 100644 app/src/full/java/org/fdroid/fdroid/data/Apk.java create mode 100644 app/src/full/java/org/fdroid/fdroid/data/App.java create mode 100644 app/src/full/java/org/fdroid/fdroid/data/SanitizedFile.java create mode 100644 app/src/full/java/org/fdroid/fdroid/nearby/BluetoothClient.java create mode 100644 app/src/full/java/org/fdroid/fdroid/nearby/BluetoothConnection.java create mode 100644 app/src/full/java/org/fdroid/fdroid/nearby/BluetoothConstants.java create mode 100644 app/src/full/java/org/fdroid/fdroid/nearby/BluetoothManager.java create mode 100644 app/src/full/java/org/fdroid/fdroid/nearby/BluetoothServer.java create mode 100644 app/src/full/java/org/fdroid/fdroid/nearby/BonjourManager.java create mode 100644 app/src/full/java/org/fdroid/fdroid/nearby/LocalHTTPD.java create mode 100644 app/src/full/java/org/fdroid/fdroid/nearby/LocalHTTPDManager.java create mode 100644 app/src/full/java/org/fdroid/fdroid/nearby/LocalRepoKeyStore.java create mode 100644 app/src/full/java/org/fdroid/fdroid/nearby/LocalRepoManager.java create mode 100644 app/src/full/java/org/fdroid/fdroid/nearby/LocalRepoService.java create mode 100644 app/src/full/java/org/fdroid/fdroid/nearby/NewRepoConfig.java create mode 100644 app/src/full/java/org/fdroid/fdroid/nearby/PublicSourceDirProvider.java create mode 100644 app/src/full/java/org/fdroid/fdroid/nearby/SDCardScannerService.java create mode 100644 app/src/full/java/org/fdroid/fdroid/nearby/SelectAppsView.java create mode 100644 app/src/full/java/org/fdroid/fdroid/nearby/StartSwapView.java create mode 100644 app/src/full/java/org/fdroid/fdroid/nearby/SwapService.java create mode 100644 app/src/full/java/org/fdroid/fdroid/nearby/SwapSuccessView.java create mode 100644 app/src/full/java/org/fdroid/fdroid/nearby/SwapView.java create mode 100644 app/src/full/java/org/fdroid/fdroid/nearby/SwapWorkflowActivity.java create mode 100644 app/src/full/java/org/fdroid/fdroid/nearby/TreeUriScannerIntentService.java create mode 100644 app/src/full/java/org/fdroid/fdroid/nearby/UsbDeviceAttachedReceiver.java create mode 100644 app/src/full/java/org/fdroid/fdroid/nearby/UsbDeviceDetachedReceiver.java create mode 100644 app/src/full/java/org/fdroid/fdroid/nearby/UsbDeviceMediaMountedReceiver.java create mode 100644 app/src/full/java/org/fdroid/fdroid/nearby/WifiStateChangeReceiver.java create mode 100644 app/src/full/java/org/fdroid/fdroid/nearby/WifiStateChangeService.java create mode 100644 app/src/full/java/org/fdroid/fdroid/nearby/httpish/ContentLengthHeader.java create mode 100644 app/src/full/java/org/fdroid/fdroid/nearby/httpish/ETagHeader.java create mode 100644 app/src/full/java/org/fdroid/fdroid/nearby/httpish/FileDetails.java create mode 100644 app/src/full/java/org/fdroid/fdroid/nearby/httpish/Header.java create mode 100644 app/src/full/java/org/fdroid/fdroid/nearby/httpish/Request.java create mode 100644 app/src/full/java/org/fdroid/fdroid/nearby/httpish/Response.java create mode 100644 app/src/full/java/org/fdroid/fdroid/nearby/peers/BluetoothPeer.java create mode 100644 app/src/full/java/org/fdroid/fdroid/nearby/peers/BonjourPeer.java create mode 100644 app/src/full/java/org/fdroid/fdroid/nearby/peers/Peer.java create mode 100644 app/src/full/java/org/fdroid/fdroid/nearby/peers/WifiPeer.java create mode 100644 app/src/full/java/org/fdroid/fdroid/net/TreeUriDownloader.java create mode 100644 app/src/full/java/org/fdroid/fdroid/qr/CameraCharacteristicsChecker.java create mode 100644 app/src/full/java/org/fdroid/fdroid/qr/CameraCharacteristicsMinApiLevel21.java create mode 100644 app/src/full/java/org/fdroid/fdroid/views/main/NearbyViewBinder.java create mode 100644 app/src/full/java/vendored/org/apache/commons/codec/BinaryDecoder.java create mode 100644 app/src/full/java/vendored/org/apache/commons/codec/BinaryEncoder.java create mode 100644 app/src/full/java/vendored/org/apache/commons/codec/CharEncoding.java create mode 100644 app/src/full/java/vendored/org/apache/commons/codec/Decoder.java create mode 100644 app/src/full/java/vendored/org/apache/commons/codec/DecoderException.java create mode 100644 app/src/full/java/vendored/org/apache/commons/codec/Encoder.java create mode 100644 app/src/full/java/vendored/org/apache/commons/codec/EncoderException.java create mode 100644 app/src/full/java/vendored/org/apache/commons/codec/binary/CharSequenceUtils.java create mode 100644 app/src/full/java/vendored/org/apache/commons/codec/binary/Hex.java create mode 100644 app/src/full/java/vendored/org/apache/commons/codec/binary/StringUtils.java create mode 100644 app/src/full/java/vendored/org/apache/commons/codec/digest/DigestUtils.java create mode 100644 app/src/full/java/vendored/org/apache/commons/codec/digest/MessageDigestAlgorithms.java create mode 100644 app/src/full/kotlin/org/fdroid/LegacyUtils.kt create mode 100644 app/src/full/kotlin/org/fdroid/ui/nearby/NearbyStart.kt create mode 100644 app/src/full/kotlin/org/fdroid/ui/nearby/SwapSuccess.kt create mode 100644 app/src/full/kotlin/org/fdroid/ui/nearby/SwapSuccessAppRow.kt create mode 100644 app/src/full/kotlin/org/fdroid/ui/nearby/SwapSuccessModel.kt create mode 100644 app/src/full/kotlin/org/fdroid/ui/nearby/SwapSuccessViewModel.kt create mode 100644 app/src/full/res/drawable-hdpi/circle.png create mode 100644 app/src/full/res/drawable-hdpi/ic_fdroid_grey.png create mode 100644 app/src/full/res/drawable-hdpi/swap_start_header.png create mode 100644 app/src/full/res/drawable-ldpi/circle.png create mode 100644 app/src/full/res/drawable-ldpi/ic_fdroid_grey.png create mode 100644 app/src/full/res/drawable-ldpi/swap_start_header.png create mode 100644 app/src/full/res/drawable-mdpi/circle.png create mode 100644 app/src/full/res/drawable-mdpi/ic_fdroid_grey.png create mode 100644 app/src/full/res/drawable-mdpi/swap_start_header.png create mode 100644 app/src/full/res/drawable-xhdpi/circle.png create mode 100644 app/src/full/res/drawable-xhdpi/ic_fdroid_grey.png create mode 100644 app/src/full/res/drawable-xhdpi/swap_start_header.png create mode 100644 app/src/full/res/drawable-xxhdpi/circle.png create mode 100644 app/src/full/res/drawable-xxhdpi/ic_fdroid_grey.png create mode 100644 app/src/full/res/drawable-xxhdpi/swap_start_header.png create mode 100644 app/src/full/res/drawable-xxxhdpi/circle.png create mode 100644 app/src/full/res/drawable-xxxhdpi/ic_fdroid_grey.png create mode 100644 app/src/full/res/drawable-xxxhdpi/swap_start_header.png create mode 100644 app/src/full/res/drawable/check.xml create mode 100644 app/src/full/res/drawable/ic_add_circle_outline.xml create mode 100644 app/src/full/res/drawable/ic_apps.xml create mode 100644 app/src/full/res/drawable/ic_arrow_back.xml create mode 100644 app/src/full/res/drawable/ic_arrow_forward.xml create mode 100644 app/src/full/res/drawable/ic_bluetooth.xml create mode 100644 app/src/full/res/drawable/ic_bluetooth_searching.xml create mode 100644 app/src/full/res/drawable/ic_close.xml create mode 100644 app/src/full/res/drawable/ic_nearby.xml create mode 100644 app/src/full/res/drawable/ic_qr_code.xml create mode 100644 app/src/full/res/drawable/ic_search.xml create mode 100644 app/src/full/res/drawable/ic_wifi.xml create mode 100644 app/src/full/res/drawable/ic_wifi_off.xml create mode 100644 app/src/full/res/drawable/ic_wifi_tethering.xml create mode 100644 app/src/full/res/drawable/nearby_splash.xml create mode 100644 app/src/full/res/layout-sw480dp/start_swap_header.xml create mode 100644 app/src/full/res/layout/main_tab_nearby.xml create mode 100644 app/src/full/res/layout/select_local_apps_list_item.xml create mode 100644 app/src/full/res/layout/start_swap_header.xml create mode 100644 app/src/full/res/layout/swap_activity.xml create mode 100644 app/src/full/res/layout/swap_app_list_item.xml create mode 100644 app/src/full/res/layout/swap_confirm_receive.xml create mode 100644 app/src/full/res/layout/swap_connecting.xml create mode 100644 app/src/full/res/layout/swap_join_wifi.xml create mode 100644 app/src/full/res/layout/swap_peer_list_item.xml create mode 100644 app/src/full/res/layout/swap_select_apps.xml create mode 100644 app/src/full/res/layout/swap_send_fdroid.xml create mode 100644 app/src/full/res/layout/swap_start_swap.xml create mode 100644 app/src/full/res/layout/swap_success.xml create mode 100644 app/src/full/res/layout/swap_wifi_qr.xml create mode 100644 app/src/full/res/menu/swap_next.xml create mode 100644 app/src/full/res/menu/swap_next_search.xml create mode 100644 app/src/full/res/menu/swap_search.xml create mode 100644 app/src/full/res/values-night/colors.xml create mode 100644 app/src/full/res/values-night/themes.xml create mode 100644 app/src/full/res/values/attrs.xml create mode 100644 app/src/full/res/values/colors.xml create mode 100644 app/src/full/res/values/styles.xml create mode 100644 app/src/full/res/values/themes.xml create mode 100644 app/src/full/res/xml/device_filter.xml create mode 100644 app/src/full/res/xml/network_security_config.xml create mode 100644 app/src/testFull/java/org/fdroid/fdroid/data/SanitizedFileTest.java diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 3672628d9..909b03de1 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -137,7 +137,15 @@ dependencies { debugImplementation(libs.androidx.compose.ui.tooling) debugImplementation(libs.androidx.ui.test.manifest) + "fullImplementation"(libs.material) + "fullImplementation"(libs.androidx.documentfile) + "fullImplementation"(libs.androidx.localbroadcastmanager) "fullImplementation"(libs.guardianproject.panic) + "fullImplementation"(libs.bcpkix.jdk15to18) + "fullImplementation"(libs.jmdns) + "fullImplementation"(libs.nanohttpd) + "fullImplementation"(libs.commons.io) + "fullImplementation"(libs.commons.net) testImplementation(libs.junit) testImplementation(kotlin("test")) diff --git a/app/src/basic/kotlin/org/fdroid/ui/navigation/ExtraNavigationEntries.kt b/app/src/basic/kotlin/org/fdroid/ui/navigation/ExtraNavigationEntries.kt index eb281857b..1337b4249 100644 --- a/app/src/basic/kotlin/org/fdroid/ui/navigation/ExtraNavigationEntries.kt +++ b/app/src/basic/kotlin/org/fdroid/ui/navigation/ExtraNavigationEntries.kt @@ -1,6 +1,11 @@ package org.fdroid.ui.navigation +import android.content.Context import androidx.navigation3.runtime.EntryProviderScope import androidx.navigation3.runtime.NavKey +import org.fdroid.R + +fun getMoreMenuItems(context: Context): List = + listOf(NavDestinations.AllApps(context.getString(R.string.app_list_all)), NavDestinations.About) fun EntryProviderScope.extraNavigationEntries(navigator: Navigator) {} diff --git a/app/src/full/AndroidManifest.xml b/app/src/full/AndroidManifest.xml index 4f8cd7354..a6b88dcc3 100644 --- a/app/src/full/AndroidManifest.xml +++ b/app/src/full/AndroidManifest.xml @@ -2,7 +2,58 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/full/assets/index.template.html b/app/src/full/assets/index.template.html new file mode 100644 index 000000000..5d8d08e11 --- /dev/null +++ b/app/src/full/assets/index.template.html @@ -0,0 +1,138 @@ + + + + + F-Droid swap + + + + + + + + + + +

You're minutes away from having swap success!

+
    +
  1. + Find a swap + Done +
  2. +
  3. + Download F-Droid + Not done +
  4. +
  5. + Install F-Droid + Not done +
  6. +
  7. + Add the swap to F-Droid + Not done +
  8. +
  9. + Install the apps you want + Not done +
  10. +
+



+
+ Available Apps +
    + {{APP_LIST}} +
+
+ + diff --git a/app/src/full/assets/swap-icon.png b/app/src/full/assets/swap-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f9a970a8a6eece543e65776f7c640ad3589df93a GIT binary patch literal 2710 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 QN&o-=07*qoM6N<$f+{fvr~m)} literal 0 HcmV?d00001 diff --git a/app/src/full/assets/swap-icon.svg b/app/src/full/assets/swap-icon.svg new file mode 100644 index 000000000..43db30a87 --- /dev/null +++ b/app/src/full/assets/swap-icon.svg @@ -0,0 +1,40 @@ + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/app/src/full/assets/swap-tick-done.png b/app/src/full/assets/swap-tick-done.png new file mode 100644 index 0000000000000000000000000000000000000000..81a2cb7d8767ee2f1980def34868c623a12fc656 GIT binary patch literal 621 zcmV-z0+RiSP)YN+qP}nwr$(CZQDj|<8)MHvK!~$p0RcLMe$7LW}8LvZ0v8m7R54^ zy8$c~#j&*xM!GeMVLA^h^;Q(Y&N?ggwn-y3GkHoWUN%vrW^dh<;%VbYS|;(Zat|9P z(z2lMmAlJWk(TZCR_+F4MoPwUg)En)@0fRFIVaMxh7Piv7->1qU|EijluYU|*=~uH zOyg78-Y`z2V^%-N_KT?^9rO89w(b^)bS$Z(Y=f;I=~z_{c@B+qY^1L|*GD>bG)SIT zj2)>szz}(UG)1K1MESa!H&Stwe1ohNsn|;;$44r*F+{$1>$=ix{`7&XZEBLJ%1ZjEZr1zuJ@*DHi_n$!AqKTYqW+jU8@1R-DH=7@8m-Sk22)wG zKiH=Fs@D(3k9M%4F6y&xw2KA&sdkUHJCgWWZTgx$+RMDUsKsf~epWL;HNP4^Qn0IP zHjh-Csgma-9b>pxo&n~Kl#J(X*)E9GOzl_Y{xNZ+XJtcBYKJI>3zd2!iefxp8ELRZ zqBxc?5WtmDET;fEnmmeSY#)HVqIl-h*9XRk(SbuO6D>9jxR99@>oUnW00000NkvXX Hu0mjfzWgb_ literal 0 HcmV?d00001 diff --git a/app/src/full/assets/swap-tick-not-done.png b/app/src/full/assets/swap-tick-not-done.png new file mode 100644 index 0000000000000000000000000000000000000000..9046ea31f978e1a4dd35b19e0c6a7f5d6e9dd95c GIT binary patch literal 588 zcmV-S0<-;zP)Rdu3roa={}GxwMyc+3zqvOk)l1h?LkABi z)kj**54w3mslL-~e$dA&N;PK0{9urGl;MK;!6*^RaK|?wicyB=j^~ECoF93h#k^n{ zW%@>!dBGyeG-lW{NK}r?p4m){GQFaqypJt2!w9|QU&@T|fijKC+9mY=^RbvGuGwac z=1*N{5z2Ai%7Kf_?RLou{n-;tFK;Nvv-0DLLzLqqb7^@BUA&+i-)Oh;VWwcBUs$H4 zBw~F+xlUPS(8UeP^_^uJeg{VPDAyya92(g|1>P}WMswkBztCF!%le86+~E=xI98jw z$2qFfz1rn+JE#huYFa5_1y$@&?Vq?973-1*Ge(5U^r22g8wPkoWjW%O(G+-G?~=qL z`jio!R$u7)