From 4e836a0900994b32394024fb4b7821726cfb68bb Mon Sep 17 00:00:00 2001 From: icing <> Date: Thu, 31 Jul 2025 20:02:31 +0000 Subject: [PATCH] Initial commit --- .gitea/workflows/apk.yaml | 31 + .gitea/workflows/mirror.yaml | 11 + .gitea/workflows/website.yaml | 35 + README.md | 72 ++ dialer/.metadata | 45 + dialer/analysis_options.yaml | 28 + dialer/android/app/build.gradle | 44 + .../android/app/src/debug/AndroidManifest.xml | 14 + .../android/app/src/main/AndroidManifest.xml | 103 ++ .../java/com/example/dialer/MainActivity.java | 49 + .../kotlin/com/icing/dialer/KeystoreHelper.kt | 155 +++ .../icing/dialer/activities/MainActivity.kt | 459 +++++++++ .../dialer/services/CallConnectionService.kt | 82 ++ .../com/icing/dialer/services/CallService.kt | 76 ++ .../icing/dialer/services/MyInCallService.kt | 218 +++++ .../res/drawable-v21/launch_background.xml | 12 + .../main/res/drawable/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2477 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1504 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3115 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 4945 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 5766 bytes .../app/src/main/res/values-night/styles.xml | 18 + .../app/src/main/res/values/styles.xml | 18 + .../app/src/profile/AndroidManifest.xml | 15 + dialer/android/build.gradle | 19 + .../gradle/wrapper/gradle-wrapper.properties | 5 + dialer/android/settings.gradle | 25 + dialer/build.sh | 10 + dialer/devtools_options.yaml | 3 + dialer/lib/core/config/app_config.dart | 14 + dialer/lib/core/navigation/app_router.dart | 57 ++ dialer/lib/domain/services/block_service.dart | 78 ++ dialer/lib/domain/services/call_service.dart | 720 ++++++++++++++ .../lib/domain/services/contact_service.dart | 86 ++ .../asymmetric_crypto_service.dart | 170 ++++ .../domain/services/obfuscate_service.dart | 91 ++ dialer/lib/domain/services/qr/qr_scanner.dart | 57 ++ dialer/lib/globals.dart | 7 + dialer/lib/main.dart | 105 ++ .../presentation/common/theme/app_theme.dart | 42 + .../common/widgets/color_darkener.dart | 21 + .../common/widgets/loading_indicator.dart | 10 + .../common/widgets/qr_scanner.dart | 72 ++ .../common/widgets/sim_selection_dialog.dart | 204 ++++ .../widgets/username_color_generator.dart | 17 + .../presentation/features/call/call_page.dart | 727 ++++++++++++++ .../features/call/incoming_call_page.dart | 163 ++++ .../features/composition/composition.dart | 335 +++++++ .../features/contacts/contact_page.dart | 20 + .../features/contacts/contact_state.dart | 178 ++++ .../contacts/widgets/add_contact_button.dart | 63 ++ .../widgets/alphabet_scroll_page.dart | 232 +++++ .../contacts/widgets/contact_modal.dart | 377 ++++++++ .../contacts/widgets/share_own_qr.dart | 36 + .../features/favorites/favorites_page.dart | 37 + .../features/history/history_page.dart | 896 ++++++++++++++++++ .../features/home/default_dialer_prompt.dart | 102 ++ .../presentation/features/home/home_page.dart | 347 +++++++ .../settings/blocked/settings_blocked.dart | 167 ++++ .../features/settings/call/settings_call.dart | 92 ++ .../settings/call/settings_call_page.dart | 32 + .../settings/cryptography/key_management.dart | 145 +++ .../features/settings/settings.dart | 74 ++ .../features/settings/settings_page.dart | 0 .../features/settings/sim/settings_sim.dart | 220 +++++ .../features/voicemail/voicemail_page.dart | 210 ++++ dialer/pubspec.yaml | 113 +++ dialer/run.sh | 10 + dialer/stealth_local_run.sh | 4 + dialer/test/widget_test.dart | 30 + docs/.gitignore | 5 + docs/Icing.md | 69 ++ docs/UserManual.md | 182 ++++ protocol_prototype/DryBox/UI/audio_player.py | 253 +++++ .../DryBox/UI/audio_processor.py | 220 +++++ protocol_prototype/DryBox/UI/main.py | 714 ++++++++++++++ protocol_prototype/DryBox/UI/noise_wrapper.py | 127 +++ protocol_prototype/DryBox/UI/phone_manager.py | 374 ++++++++ protocol_prototype/DryBox/UI/phone_state.py | 7 + .../DryBox/UI/protocol_client_state.py | 133 +++ .../DryBox/UI/protocol_phone_client.py | 456 +++++++++ protocol_prototype/DryBox/UI/session.py | 196 ++++ .../DryBox/UI/waveform_widget.py | 67 ++ .../DryBox/install_audio_deps.sh | 58 ++ protocol_prototype/DryBox/requirements.txt | 22 + protocol_prototype/DryBox/run_ui.sh | 11 + .../DryBox/simulator/Dockerfile | 14 + .../DryBox/simulator/gsm_simulator.py | 110 +++ .../DryBox/simulator/launch_gsm_simulator.sh | 68 ++ protocol_prototype/DryBox/voice_codec.py | 714 ++++++++++++++ protocol_prototype/DryBox/wav/input.wav | Bin 0 -> 73100 bytes .../DryBox/wav/input_8k_mono.wav | Bin 0 -> 72374 bytes .../DryBox/wav/input_original.wav | Bin 0 -> 805108 bytes protocol_prototype/DryBox/wav/received.wav | Bin 0 -> 402604 bytes .../DryBox/wav/test_codec_only.wav | Bin 0 -> 684 bytes .../DryBox/wav/test_full_pipeline.wav | Bin 0 -> 684 bytes protocol_prototype/IcingProtocol.drawio | 805 ++++++++++++++++ protocol_prototype/Prototype/cli.py | 91 ++ .../Prototype/noise_xk/session.py | 179 ++++ .../Prototype/noise_xk/transport.py | 99 ++ protocol_prototype/requirements.txt | 7 + website/.env | 1 + website/Dockerfile | 15 + website/compose.yaml | 22 + website/css/about.css | 171 ++++ website/css/index.css | 16 + website/css/style.css | 4 + website/go.mod | 3 + website/go.sum | 0 website/html/about.html | 63 ++ website/html/index.html | 13 + website/manifests/bin/deploy.sh | 39 + website/manifests/bin/devel.sh | 6 + website/manifests/bin/prod.sh | 6 + website/manifests/common/app.yaml | 64 ++ website/manifests/devel/.gitkeep | 0 website/manifests/prod/.gitkeep | 0 website/open.sh | 5 + website/src/main.go | 14 + website/src/route.go | 51 + website/src/tmpl.go | 31 + website/src/views.go | 29 + website/static/logo.webp | Bin 0 -> 1246 bytes website/tmpl/head.tmpl | 3 + website/tmpl/vars.tmpl | 15 + 126 files changed, 13472 insertions(+) create mode 100644 .gitea/workflows/apk.yaml create mode 100644 .gitea/workflows/mirror.yaml create mode 100644 .gitea/workflows/website.yaml create mode 100644 README.md create mode 100644 dialer/.metadata create mode 100644 dialer/analysis_options.yaml create mode 100644 dialer/android/app/build.gradle create mode 100644 dialer/android/app/src/debug/AndroidManifest.xml create mode 100644 dialer/android/app/src/main/AndroidManifest.xml create mode 100644 dialer/android/app/src/main/java/com/example/dialer/MainActivity.java create mode 100644 dialer/android/app/src/main/kotlin/com/icing/dialer/KeystoreHelper.kt create mode 100644 dialer/android/app/src/main/kotlin/com/icing/dialer/activities/MainActivity.kt create mode 100644 dialer/android/app/src/main/kotlin/com/icing/dialer/services/CallConnectionService.kt create mode 100644 dialer/android/app/src/main/kotlin/com/icing/dialer/services/CallService.kt create mode 100644 dialer/android/app/src/main/kotlin/com/icing/dialer/services/MyInCallService.kt create mode 100644 dialer/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 dialer/android/app/src/main/res/drawable/launch_background.xml create mode 100755 dialer/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100755 dialer/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100755 dialer/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100755 dialer/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100755 dialer/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 dialer/android/app/src/main/res/values-night/styles.xml create mode 100644 dialer/android/app/src/main/res/values/styles.xml create mode 100644 dialer/android/app/src/profile/AndroidManifest.xml create mode 100644 dialer/android/build.gradle create mode 100644 dialer/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 dialer/android/settings.gradle create mode 100755 dialer/build.sh create mode 100644 dialer/devtools_options.yaml create mode 100644 dialer/lib/core/config/app_config.dart create mode 100644 dialer/lib/core/navigation/app_router.dart create mode 100644 dialer/lib/domain/services/block_service.dart create mode 100644 dialer/lib/domain/services/call_service.dart create mode 100644 dialer/lib/domain/services/contact_service.dart create mode 100644 dialer/lib/domain/services/cryptography/asymmetric_crypto_service.dart create mode 100644 dialer/lib/domain/services/obfuscate_service.dart create mode 100644 dialer/lib/domain/services/qr/qr_scanner.dart create mode 100644 dialer/lib/globals.dart create mode 100644 dialer/lib/main.dart create mode 100644 dialer/lib/presentation/common/theme/app_theme.dart create mode 100644 dialer/lib/presentation/common/widgets/color_darkener.dart create mode 100644 dialer/lib/presentation/common/widgets/loading_indicator.dart create mode 100644 dialer/lib/presentation/common/widgets/qr_scanner.dart create mode 100644 dialer/lib/presentation/common/widgets/sim_selection_dialog.dart create mode 100644 dialer/lib/presentation/common/widgets/username_color_generator.dart create mode 100644 dialer/lib/presentation/features/call/call_page.dart create mode 100644 dialer/lib/presentation/features/call/incoming_call_page.dart create mode 100644 dialer/lib/presentation/features/composition/composition.dart create mode 100644 dialer/lib/presentation/features/contacts/contact_page.dart create mode 100644 dialer/lib/presentation/features/contacts/contact_state.dart create mode 100644 dialer/lib/presentation/features/contacts/widgets/add_contact_button.dart create mode 100644 dialer/lib/presentation/features/contacts/widgets/alphabet_scroll_page.dart create mode 100644 dialer/lib/presentation/features/contacts/widgets/contact_modal.dart create mode 100644 dialer/lib/presentation/features/contacts/widgets/share_own_qr.dart create mode 100644 dialer/lib/presentation/features/favorites/favorites_page.dart create mode 100644 dialer/lib/presentation/features/history/history_page.dart create mode 100644 dialer/lib/presentation/features/home/default_dialer_prompt.dart create mode 100644 dialer/lib/presentation/features/home/home_page.dart create mode 100644 dialer/lib/presentation/features/settings/blocked/settings_blocked.dart create mode 100644 dialer/lib/presentation/features/settings/call/settings_call.dart create mode 100644 dialer/lib/presentation/features/settings/call/settings_call_page.dart create mode 100644 dialer/lib/presentation/features/settings/cryptography/key_management.dart create mode 100644 dialer/lib/presentation/features/settings/settings.dart create mode 100644 dialer/lib/presentation/features/settings/settings_page.dart create mode 100644 dialer/lib/presentation/features/settings/sim/settings_sim.dart create mode 100644 dialer/lib/presentation/features/voicemail/voicemail_page.dart create mode 100644 dialer/pubspec.yaml create mode 100755 dialer/run.sh create mode 100755 dialer/stealth_local_run.sh create mode 100644 dialer/test/widget_test.dart create mode 100644 docs/.gitignore create mode 100644 docs/Icing.md create mode 100644 docs/UserManual.md create mode 100644 protocol_prototype/DryBox/UI/audio_player.py create mode 100644 protocol_prototype/DryBox/UI/audio_processor.py create mode 100644 protocol_prototype/DryBox/UI/main.py create mode 100644 protocol_prototype/DryBox/UI/noise_wrapper.py create mode 100644 protocol_prototype/DryBox/UI/phone_manager.py create mode 100644 protocol_prototype/DryBox/UI/phone_state.py create mode 100644 protocol_prototype/DryBox/UI/protocol_client_state.py create mode 100644 protocol_prototype/DryBox/UI/protocol_phone_client.py create mode 100644 protocol_prototype/DryBox/UI/session.py create mode 100644 protocol_prototype/DryBox/UI/waveform_widget.py create mode 100755 protocol_prototype/DryBox/install_audio_deps.sh create mode 100644 protocol_prototype/DryBox/requirements.txt create mode 100755 protocol_prototype/DryBox/run_ui.sh create mode 100644 protocol_prototype/DryBox/simulator/Dockerfile create mode 100644 protocol_prototype/DryBox/simulator/gsm_simulator.py create mode 100755 protocol_prototype/DryBox/simulator/launch_gsm_simulator.sh create mode 100644 protocol_prototype/DryBox/voice_codec.py create mode 100644 protocol_prototype/DryBox/wav/input.wav create mode 100644 protocol_prototype/DryBox/wav/input_8k_mono.wav create mode 100644 protocol_prototype/DryBox/wav/input_original.wav create mode 100644 protocol_prototype/DryBox/wav/received.wav create mode 100644 protocol_prototype/DryBox/wav/test_codec_only.wav create mode 100644 protocol_prototype/DryBox/wav/test_full_pipeline.wav create mode 100644 protocol_prototype/IcingProtocol.drawio create mode 100644 protocol_prototype/Prototype/cli.py create mode 100644 protocol_prototype/Prototype/noise_xk/session.py create mode 100644 protocol_prototype/Prototype/noise_xk/transport.py create mode 100644 protocol_prototype/requirements.txt create mode 100644 website/.env create mode 100644 website/Dockerfile create mode 100644 website/compose.yaml create mode 100644 website/css/about.css create mode 100644 website/css/index.css create mode 100644 website/css/style.css create mode 100644 website/go.mod create mode 100644 website/go.sum create mode 100644 website/html/about.html create mode 100644 website/html/index.html create mode 100755 website/manifests/bin/deploy.sh create mode 100755 website/manifests/bin/devel.sh create mode 100755 website/manifests/bin/prod.sh create mode 100644 website/manifests/common/app.yaml create mode 100644 website/manifests/devel/.gitkeep create mode 100644 website/manifests/prod/.gitkeep create mode 100755 website/open.sh create mode 100644 website/src/main.go create mode 100644 website/src/route.go create mode 100644 website/src/tmpl.go create mode 100644 website/src/views.go create mode 100644 website/static/logo.webp create mode 100644 website/tmpl/head.tmpl create mode 100644 website/tmpl/vars.tmpl diff --git a/.gitea/workflows/apk.yaml b/.gitea/workflows/apk.yaml new file mode 100644 index 0000000..5ddefac --- /dev/null +++ b/.gitea/workflows/apk.yaml @@ -0,0 +1,31 @@ +on: + push: + paths: + - dialer/** + +jobs: + build: + runs-on: debian + steps: + - uses: actions/checkout@v1 + with: + subpath: dialer/ + - uses: docker://git.gmoker.com/icing/flutter:main + - uses: actions/upload-artifact@v1 + with: + name: icing-dialer-${{ gitea.ref_name }}-${{ gitea.run_id }}.apk + path: build/app/outputs/flutter-apk/app-release.apk + + build-stealth: + runs-on: debian + steps: + - uses: actions/checkout@v1 + with: + subpath: dialer/ + - uses: docker://git.gmoker.com/icing/flutter:main + with: + args: "build apk --dart-define=STEALTH=true" + - uses: actions/upload-artifact@v1 + with: + name: icing-dialer-stealth-${{ gitea.ref_name }}-${{ gitea.run_id }}.apk + path: build/app/outputs/flutter-apk/app-release.apk diff --git a/.gitea/workflows/mirror.yaml b/.gitea/workflows/mirror.yaml new file mode 100644 index 0000000..a588f6f --- /dev/null +++ b/.gitea/workflows/mirror.yaml @@ -0,0 +1,11 @@ +on: push + +jobs: + mirror: + runs-on: debian + steps: + - uses: actions/mirror@v1 + with: + ssh_priv: "${{ secrets.SSHGH }}" + known_hosts: "github.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOMqqnkVzrm0SdG6UOoqKLsabgH5C9okWi0dh2l9GKJl" + url: "git@github.com:.git" diff --git a/.gitea/workflows/website.yaml b/.gitea/workflows/website.yaml new file mode 100644 index 0000000..9a4c6bd --- /dev/null +++ b/.gitea/workflows/website.yaml @@ -0,0 +1,35 @@ +on: + push: + paths: + - website/** + +jobs: + deploy: + runs-on: debian + steps: + - uses: actions/checkout@v1 + with: + subpath: website/ + - name: setup env + run: | + . ./.env || true + if [ "${{ gitea.ref_name }}" == prod ] && [ -n "$PROD_URL" ]; then + BASE_URL="$PROD_URL" + else + BASE_URL="${{ gitea.ref_name }}.$(tr / '\n' <<< "${{ gitea.repository }}" | tac | tr '\n' .)k8s.gmoker.com" + fi + REGISTRY="$(sed 's .*:// ' <<< ${{ gitea.server_url }})" + cat <> .env + BASE_URL="$(printf '%s' "$BASE_URL" | tr '[:upper:]' '[:lower:]' | tr -c '[:lower:][:digit:]-.' -)" + IMAGEAPP="$REGISTRY/$(printf '%s' "${{ gitea.repository }}:${{ gitea.ref_name }}" | tr '[:upper:]' '[:lower:]' | tr -c '[:lower:][:digit:]-/:_' _)" + EOF + cat .env + + - uses: actions/kaniko@v1 + with: + password: "${{ secrets.PKGRW }}" + + - uses: actions/k8sdeploy@v1 + with: + kubeconfig: "${{ secrets.K8S }}" + registry_password: "${{ secrets.PKGRW }}" diff --git a/README.md b/README.md new file mode 100644 index 0000000..9e588a0 --- /dev/null +++ b/README.md @@ -0,0 +1,72 @@ +--- +gitea: none +include_toc: true +--- + +# Icing – end-to-end-encrypted phone calls without data + + +Experimental α-stage • Apache-2.0 + + + +> **Icing** runs a Noise-XK handshake, Codec2 and 4-FSK modulation over the plain voice channel, so any GSM/VoLTE call can be upgraded to private, authenticated audio - **no servers and no IP stack required.** + + + +--- + + + +## 📖 Detailed design + +See [`docs/Icing.md`](docs/Icing.md) for protocol goals, threat model, and technical architecture. + +## 🔨 Quick start (developer preview, un-protocoled dialer) + +```bash +# on an Android phone (Android 12+) +git clone https://git.gmoker.com/icing/monorepo +cd dialer +# Requires Flutter and ADB or a virtual device +flutter run +``` + +> ⚠️ This is an **alpha prototype**: expect crashes, missing UX, and incomplete FEC. + +You can join us in Telegram or Reddit ! +https://t.me/icingdialer +https://www.reddit.com/r/IcingDialer/ + +## ✨ Features (α1 snapshot) + +- [DryBox Only] Noise *XK* handshake (X25519, AES-GCM, SHA-256) +- Static keys = Ed25519 (QR share) +- [DryBox Only] Voice path: Codec2 → encrypted bit-stream → 4-FSK → analog channel +- GSM simulation in DryBox for off-device testing + +## 🗺️ Project status + +| Stage (roadmap) | Dialer app | Protocol | DryBox | Docs | +| --------------------- | -------------------------- | ------------------ | ----------------- | ----------------- | +| **Alpha 1 (Q3-2025)** | 🚧 UI stub, call hook | Key gestion | ⚠️ Qt demo, Alpha 1 Working | 📝 Draft complete | +| Alpha 2 (Q4-2025) | 🛠️ Magisk flow | 🔄 Adaptive FEC | 🔄 Stress tests | 🔄 Expanded | +| **Beta 1 (Feb 2026)** | 🎉 Public release | 🔐 Audit pass | ✅ CI | ✅ | + +## 🤝 How to help + + +- **Crypto researchers** – Poke holes in the protocol draft. +- **Android security hackers** - Review our Kotlin integrations. +- **ROM maintainers** - Let's talk about an integration ! + +Open an issue or report here [![Give Feedback](https://img.shields.io/badge/Feedback-Form-blue)](https://cryptpad.fr/form/#/2/form/view/Tgm5vQ7aRgR6TKxy8LMJcJ-nu9CVC32IbqYOyOG4iUs/) + + +## License + +Apache License 2.0 - see [`LICENSE`](LICENSE). + +--- + +Made with ☕ by four students. diff --git a/dialer/.metadata b/dialer/.metadata new file mode 100644 index 0000000..bf94537 --- /dev/null +++ b/dialer/.metadata @@ -0,0 +1,45 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: "4cf269e36de2573851eaef3c763994f8f9be494d" + channel: "stable" + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: 4cf269e36de2573851eaef3c763994f8f9be494d + base_revision: 4cf269e36de2573851eaef3c763994f8f9be494d + - platform: android + create_revision: 4cf269e36de2573851eaef3c763994f8f9be494d + base_revision: 4cf269e36de2573851eaef3c763994f8f9be494d + - platform: ios + create_revision: 4cf269e36de2573851eaef3c763994f8f9be494d + base_revision: 4cf269e36de2573851eaef3c763994f8f9be494d + - platform: linux + create_revision: 4cf269e36de2573851eaef3c763994f8f9be494d + base_revision: 4cf269e36de2573851eaef3c763994f8f9be494d + - platform: macos + create_revision: 4cf269e36de2573851eaef3c763994f8f9be494d + base_revision: 4cf269e36de2573851eaef3c763994f8f9be494d + - platform: web + create_revision: 4cf269e36de2573851eaef3c763994f8f9be494d + base_revision: 4cf269e36de2573851eaef3c763994f8f9be494d + - platform: windows + create_revision: 4cf269e36de2573851eaef3c763994f8f9be494d + base_revision: 4cf269e36de2573851eaef3c763994f8f9be494d + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/dialer/analysis_options.yaml b/dialer/analysis_options.yaml new file mode 100644 index 0000000..0d29021 --- /dev/null +++ b/dialer/analysis_options.yaml @@ -0,0 +1,28 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at https://dart.dev/lints. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/dialer/android/app/build.gradle b/dialer/android/app/build.gradle new file mode 100644 index 0000000..d57b47c --- /dev/null +++ b/dialer/android/app/build.gradle @@ -0,0 +1,44 @@ +plugins { + id "com.android.application" + id "kotlin-android" + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id "dev.flutter.flutter-gradle-plugin" +} + +android { + namespace = "com.icing.dialer" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_17 + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.icing.dialer" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = 23 + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.debug + } + } +} + +flutter { + source = "../.." +} diff --git a/dialer/android/app/src/debug/AndroidManifest.xml b/dialer/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..0e34ec0 --- /dev/null +++ b/dialer/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + diff --git a/dialer/android/app/src/main/AndroidManifest.xml b/dialer/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..4c1cb5f --- /dev/null +++ b/dialer/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dialer/android/app/src/main/java/com/example/dialer/MainActivity.java b/dialer/android/app/src/main/java/com/example/dialer/MainActivity.java new file mode 100644 index 0000000..1fbc925 --- /dev/null +++ b/dialer/android/app/src/main/java/com/example/dialer/MainActivity.java @@ -0,0 +1,49 @@ +package com.example.dialer; + +import android.os.Bundle; +import android.net.Uri; +import android.content.Context; +import io.flutter.embedding.android.FlutterActivity; +import io.flutter.embedding.engine.FlutterEngine; +import io.flutter.plugin.common.MethodChannel; +import io.flutter.plugin.common.MethodChannel.MethodCallHandler; +import io.flutter.plugin.common.MethodChannel.Result; +import io.flutter.plugin.common.MethodCall; +import android.telecom.TelecomManager; +import android.telecom.PhoneAccountHandle; +import java.util.List; +import java.util.Collections; + +public class MainActivity extends FlutterActivity { + private static final String CHANNEL = "call_service"; + + @Override + public void configureFlutterEngine(FlutterEngine flutterEngine) { + super.configureFlutterEngine(flutterEngine); + new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL) + .setMethodCallHandler( + new MethodCallHandler() { + @Override + public void onMethodCall(MethodCall call, Result result) { + if (call.method.equals("makeGsmCall")) { + String phoneNumber = call.argument("phoneNumber"); + int simSlot = call.argument("simSlot"); + TelecomManager telecomManager = (TelecomManager) getSystemService(Context.TELECOM_SERVICE); + List accounts = telecomManager.getCallCapablePhoneAccounts(); + PhoneAccountHandle selectedAccount = accounts.get(simSlot < accounts.size() ? simSlot : 0); + Bundle extras = new Bundle(); + extras.putParcelable(TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE, selectedAccount); + Uri uri = Uri.fromParts("tel", phoneNumber, null); + telecomManager.placeCall(uri, extras); + result.success(Collections.singletonMap("status", "calling")); + } else if (call.method.equals("hangUpCall")) { + // TODO: implement hangUpCall if needed + result.success(Collections.singletonMap("status", "ended")); + } else { + result.notImplemented(); + } + } + } + ); + } +} \ No newline at end of file diff --git a/dialer/android/app/src/main/kotlin/com/icing/dialer/KeystoreHelper.kt b/dialer/android/app/src/main/kotlin/com/icing/dialer/KeystoreHelper.kt new file mode 100644 index 0000000..e20e710 --- /dev/null +++ b/dialer/android/app/src/main/kotlin/com/icing/dialer/KeystoreHelper.kt @@ -0,0 +1,155 @@ +package com.icing.dialer + +import android.os.Build +import android.security.keystore.KeyGenParameterSpec +import android.security.keystore.KeyProperties +import android.util.Base64 +import io.flutter.plugin.common.MethodCall +import io.flutter.plugin.common.MethodChannel +import java.security.KeyPairGenerator +import java.security.KeyStore +import java.security.PrivateKey +import java.security.Signature +import java.security.spec.ECGenParameterSpec + +class KeystoreHelper(private val call: MethodCall, private val result: MethodChannel.Result) { + + private val ANDROID_KEYSTORE = "AndroidKeyStore" + + fun handleMethodCall() { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) { + result.error("UNSUPPORTED_API", "ED25519 requires Android 11 (API 30) or higher", null) + return + } + when (call.method) { + "generateKeyPair" -> generateEDKeyPair() + "signData" -> signData() + "getPublicKey" -> getPublicKey() + "deleteKeyPair" -> deleteKeyPair() + "keyPairExists" -> keyPairExists() + else -> result.notImplemented() + } + } + + private fun generateEDKeyPair() { + val alias = call.argument("alias") + if (alias == null) { + result.error("INVALID_ARGUMENT", "Alias is required", null) + return + } + + try { + val keyStore = KeyStore.getInstance(ANDROID_KEYSTORE).apply { load(null) } + + if (keyStore.containsAlias(alias)) { + result.error("KEY_EXISTS", "Key with alias \"$alias\" already exists.", null) + return + } + + val keyPairGenerator = KeyPairGenerator.getInstance( + KeyProperties.KEY_ALGORITHM_EC, + ANDROID_KEYSTORE + ) + val parameterSpec = KeyGenParameterSpec.Builder( + alias, + KeyProperties.PURPOSE_SIGN or KeyProperties.PURPOSE_VERIFY + ) + .setAlgorithmParameterSpec(ECGenParameterSpec("ed25519")) + .setDigests(KeyProperties.DIGEST_SHA256) + .setUserAuthenticationRequired(false) + .build() + keyPairGenerator.initialize(parameterSpec) + keyPairGenerator.generateKeyPair() + + result.success(null) + } catch (e: Exception) { + result.error("KEY_GENERATION_FAILED", e.message, null) + } + } + + private fun signData() { + val alias = call.argument("alias") + val data = call.argument("data") + if (alias == null || data == null) { + result.error("INVALID_ARGUMENT", "Alias and data are required", null) + return + } + + try { + val keyStore = KeyStore.getInstance(ANDROID_KEYSTORE).apply { load(null) } + val privateKey = keyStore.getKey(alias, null) as? PrivateKey ?: run { + result.error("KEY_NOT_FOUND", "Private key not found for alias \"$alias\".", null) + return + } + val signature = Signature.getInstance("Ed25519") + signature.initSign(privateKey) + signature.update(data.toByteArray()) + val signedBytes = signature.sign() + val signatureBase64 = Base64.encodeToString(signedBytes, Base64.DEFAULT) + result.success(signatureBase64) + } catch (e: Exception) { + result.error("SIGNING_FAILED", e.message, null) + } + } + + private fun getPublicKey() { + val alias = call.argument("alias") + if (alias == null) { + result.error("INVALID_ARGUMENT", "Alias is required", null) + return + } + + try { + val keyStore = KeyStore.getInstance(ANDROID_KEYSTORE).apply { load(null) } + + val certificate = keyStore.getCertificate(alias) ?: run { + result.error("CERTIFICATE_NOT_FOUND", "Certificate not found for alias \"$alias\".", null) + return + } + + val publicKey = certificate.publicKey + val publicKeyBase64 = Base64.encodeToString(publicKey.encoded, Base64.DEFAULT) + result.success(publicKeyBase64) + } catch (e: Exception) { + result.error("PUBLIC_KEY_RETRIEVAL_FAILED", e.message, null) + } + } + + private fun deleteKeyPair() { + val alias = call.argument("alias") + if (alias == null) { + result.error("INVALID_ARGUMENT", "Alias is required", null) + return + } + + try { + val keyStore = KeyStore.getInstance(ANDROID_KEYSTORE).apply { load(null) } + + if (!keyStore.containsAlias(alias)) { + result.error("KEY_NOT_FOUND", "No key found with alias \"$alias\" to delete.", null) + return + } + + keyStore.deleteEntry(alias) + result.success(null) + } catch (e: Exception) { + result.error("KEY_DELETION_FAILED", e.message, null) + } + } + + private fun keyPairExists() { + val alias = call.argument("alias") + if (alias == null) { + result.error("INVALID_ARGUMENT", "Alias is required", null) + return + } + + try { + val keyStore = KeyStore.getInstance(ANDROID_KEYSTORE).apply { load(null) } + val exists = keyStore.containsAlias(alias) + result.success(exists) + } catch (e: Exception) { + result.error("KEY_CHECK_FAILED", e.message, null) + } + } +} diff --git a/dialer/android/app/src/main/kotlin/com/icing/dialer/activities/MainActivity.kt b/dialer/android/app/src/main/kotlin/com/icing/dialer/activities/MainActivity.kt new file mode 100644 index 0000000..ea618d6 --- /dev/null +++ b/dialer/android/app/src/main/kotlin/com/icing/dialer/activities/MainActivity.kt @@ -0,0 +1,459 @@ +package com.icing.dialer.activities + +import android.Manifest +import android.app.role.RoleManager +import android.content.Context +import android.content.Intent +import android.content.pm.PackageManager +import android.database.Cursor +import android.os.Build +import android.os.Bundle +import android.provider.CallLog +import android.telecom.TelecomManager +import android.telephony.SubscriptionManager +import android.telephony.SubscriptionInfo +import android.util.Log +import androidx.core.content.ContextCompat +import com.icing.dialer.KeystoreHelper +import com.icing.dialer.services.CallService +import com.icing.dialer.services.MyInCallService +import io.flutter.embedding.android.FlutterActivity +import io.flutter.embedding.engine.FlutterEngine +import io.flutter.plugin.common.MethodChannel + +class MainActivity : FlutterActivity() { + private val KEYSTORE_CHANNEL = "com.example.keystore" + private val CALLLOG_CHANNEL = "com.example.calllog" + private val CALL_CHANNEL = "call_service" + private val TAG = "MainActivity" + private val REQUEST_CODE_SET_DEFAULT_DIALER = 1001 + private val REQUEST_CODE_CALL_LOG_PERMISSION = 1002 + private var pendingIncomingCall: Pair? = null + private var wasPhoneLocked: Boolean = false + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + Log.d(TAG, "onCreate started") + wasPhoneLocked = intent.getBooleanExtra("wasPhoneLocked", false) + Log.d(TAG, "Was phone locked at start: $wasPhoneLocked") + updateLockScreenFlags(intent) + handleIncomingCallIntent(intent) + } + + override fun onNewIntent(intent: Intent) { + super.onNewIntent(intent) + setIntent(intent) + wasPhoneLocked = intent.getBooleanExtra("wasPhoneLocked", false) + Log.d(TAG, "onNewIntent, wasPhoneLocked: $wasPhoneLocked") + updateLockScreenFlags(intent) + handleIncomingCallIntent(intent) + } + + private fun updateLockScreenFlags(intent: Intent?) { + val isIncomingCall = intent?.getBooleanExtra("isIncomingCall", false) ?: false + if (isIncomingCall && wasPhoneLocked) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) { + setShowWhenLocked(true) + setTurnScreenOn(true) + } else { + @Suppress("DEPRECATION") + window.addFlags( + android.view.WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED or + android.view.WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON + ) + } + Log.d(TAG, "Enabled showWhenLocked and turnScreenOn for incoming call") + } else { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) { + setShowWhenLocked(false) + setTurnScreenOn(false) + } else { + @Suppress("DEPRECATION") + window.clearFlags( + android.view.WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED or + android.view.WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON + ) + } + Log.d(TAG, "Disabled showWhenLocked and turnScreenOn for normal usage") + } + } + + override fun configureFlutterEngine(flutterEngine: FlutterEngine) { + super.configureFlutterEngine(flutterEngine) + Log.d(TAG, "Configuring Flutter engine") + MyInCallService.channel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CALL_CHANNEL) + + MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CALL_CHANNEL) + .setMethodCallHandler { call, result -> + when (call.method) { + "permissionsGranted" -> { + Log.d(TAG, "Received permissionsGranted from Flutter") + pendingIncomingCall?.let { (phoneNumber, showScreen) -> + if (showScreen) { + MyInCallService.channel?.invokeMethod("incomingCallFromNotification", mapOf( + "phoneNumber" to phoneNumber, + "wasPhoneLocked" to wasPhoneLocked + )) + pendingIncomingCall = null + } + } + result.success(true) + } "makeGsmCall" -> { + val phoneNumber = call.argument("phoneNumber") + val simSlot = call.argument("simSlot") ?: 0 + if (phoneNumber != null) { + val success = CallService.makeGsmCall(this, phoneNumber, simSlot) + if (success) { + result.success(mapOf("status" to "calling", "phoneNumber" to phoneNumber)) + } else { + result.error("CALL_FAILED", "Failed to initiate call", null) + } + } else { + result.error("INVALID_PHONE_NUMBER", "Phone number is required", null) + } + } + "hangUpCall" -> { + val success = MyInCallService.currentCall?.let { + it.disconnect() + Log.d(TAG, "Call disconnected") + MyInCallService.channel?.invokeMethod("callEnded", mapOf( + "callId" to it.details.handle.toString(), + "wasPhoneLocked" to wasPhoneLocked + )) + true + } ?: false + if (success) { + result.success(mapOf("status" to "ended")) + if (wasPhoneLocked) { + Log.d(TAG, "Finishing and removing task after hangup, phone was locked") + finishAndRemoveTask() + } + } else { + Log.w(TAG, "No active call to hang up") + result.error("HANGUP_FAILED", "No active call to hang up", null) + } + } + "answerCall" -> { + val success = MyInCallService.currentCall?.let { + it.answer(0) + Log.d(TAG, "Answered call") + true + } ?: false + if (success) { + result.success(mapOf("status" to "answered")) + } else { + Log.w(TAG, "No active call to answer") + result.error("ANSWER_FAILED", "No active call to answer", null) + } + } + "callEndedFromFlutter" -> { + Log.d(TAG, "Call ended from Flutter, wasPhoneLocked: $wasPhoneLocked") + if (wasPhoneLocked) { + finishAndRemoveTask() + Log.d(TAG, "Finishing and removing task after call ended, phone was locked") + } + result.success(true) + } + "getCallState" -> { + val stateStr = when (MyInCallService.currentCall?.state) { + android.telecom.Call.STATE_ACTIVE -> "active" + android.telecom.Call.STATE_RINGING -> "ringing" + android.telecom.Call.STATE_DIALING -> "dialing" + android.telecom.Call.STATE_DISCONNECTED -> "disconnected" + android.telecom.Call.STATE_DISCONNECTING -> "disconnecting" + else -> "unknown" + } + Log.d(TAG, "getCallState called, returning: $stateStr") + result.success(stateStr) + } + "muteCall" -> { + val mute = call.argument("mute") ?: false + val success = MyInCallService.currentCall?.let { + MyInCallService.toggleMute(mute) + } ?: false + if (success) { + Log.d(TAG, "Mute call set to $mute") + result.success(mapOf("status" to "success")) + } else { + Log.w(TAG, "No active call or failed to mute") + result.error("MUTE_FAILED", "No active call or failed to mute", null) + } + } + "speakerCall" -> { + val speaker = call.argument("speaker") ?: false + val success = MyInCallService.currentCall?.let { + MyInCallService.toggleSpeaker(speaker) + } ?: false + if (success) { + Log.d(TAG, "Speaker call set to $speaker") + result.success(mapOf("status" to "success")) + } else { + Log.w(TAG, "No active call or failed to set speaker") + result.error("SPEAKER_FAILED", "No active call or failed to set speaker", null) + } + } + "isDefaultDialer" -> { + val isDefault = isDefaultDialer() + Log.d(TAG, "isDefaultDialer called, returning: $isDefault") + result.success(isDefault) + } + "requestDefaultDialer" -> { + checkAndRequestDefaultDialer() + result.success(true) + } + "sendDtmfTone" -> { + val digit = call.argument("digit") + if (digit != null) { + val success = MyInCallService.sendDtmfTone(digit) + result.success(success) + } else { + result.error("INVALID_ARGUMENT", "Digit is null", null) + } + } + "isDefaultDialer" -> { + val isDefault = isDefaultDialer() + Log.d(TAG, "isDefaultDialer called, returning: $isDefault") + result.success(isDefault) + } + "requestDefaultDialer" -> { + checkAndRequestDefaultDialer() + result.success(true) + } + else -> result.notImplemented() + } + } + + MethodChannel(flutterEngine.dartExecutor.binaryMessenger, KEYSTORE_CHANNEL) + .setMethodCallHandler { call, result -> + KeystoreHelper(call, result).handleMethodCall() + } + + MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CALLLOG_CHANNEL) + .setMethodCallHandler { call, result -> + when (call.method) { + "getCallLogs" -> { + if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CALL_LOG) == PackageManager.PERMISSION_GRANTED) { + val callLogs = getCallLogs() + result.success(callLogs) + } else { + requestPermissions(arrayOf(Manifest.permission.READ_CALL_LOG), REQUEST_CODE_CALL_LOG_PERMISSION) + result.error("PERMISSION_DENIED", "Call log permission not granted", null) + } + } + "getLatestCallLog" -> { + if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CALL_LOG) == PackageManager.PERMISSION_GRANTED) { + val latestCallLog = getLatestCallLog() + result.success(latestCallLog) + } else { + result.error("PERMISSION_DENIED", "Call log permission not granted", null) + } + } + else -> result.notImplemented() + } + } + } + + private fun isDefaultDialer(): Boolean { + val telecomManager = getSystemService(TELECOM_SERVICE) as TelecomManager + val currentDefault = telecomManager.defaultDialerPackage + Log.d(TAG, "Checking default dialer: current=$currentDefault, myPackage=$packageName") + return currentDefault == packageName + } + + private fun checkAndRequestDefaultDialer() { + val telecomManager = getSystemService(TELECOM_SERVICE) as TelecomManager + val currentDefault = telecomManager.defaultDialerPackage + Log.d(TAG, "Current default dialer: $currentDefault, My package: $packageName") + + if (currentDefault != packageName) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + val roleManager = getSystemService(Context.ROLE_SERVICE) as RoleManager + if (roleManager.isRoleAvailable(RoleManager.ROLE_DIALER) && !roleManager.isRoleHeld(RoleManager.ROLE_DIALER)) { + val intent = roleManager.createRequestRoleIntent(RoleManager.ROLE_DIALER) + startActivityForResult(intent, REQUEST_CODE_SET_DEFAULT_DIALER) + Log.d(TAG, "Launched RoleManager intent for default dialer on API 29+") + } + } else { + val intent = Intent(TelecomManager.ACTION_CHANGE_DEFAULT_DIALER) + .putExtra(TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME, packageName) + .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + try { + startActivityForResult(intent, REQUEST_CODE_SET_DEFAULT_DIALER) + Log.d(TAG, "Launched TelecomManager intent for default dialer") + } catch (e: Exception) { + Log.e(TAG, "Failed to launch default dialer prompt: ${e.message}", e) + launchDefaultAppsSettings() + } + } + } else { + Log.d(TAG, "Already the default dialer") + } + } + + private fun launchDefaultAppsSettings() { + val settingsIntent = Intent(android.provider.Settings.ACTION_MANAGE_DEFAULT_APPS_SETTINGS) + startActivity(settingsIntent) + Log.d(TAG, "Opened default apps settings as fallback") + } + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + Log.d(TAG, "onActivityResult: requestCode=$requestCode, resultCode=$resultCode, data=$data") + if (requestCode == REQUEST_CODE_SET_DEFAULT_DIALER) { + if (resultCode == RESULT_OK) { + Log.d(TAG, "User accepted default dialer change") + } else { + Log.w(TAG, "Default dialer prompt canceled or failed (resultCode=$resultCode)") + launchDefaultAppsSettings() + } + } + } + + override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults) + if (requestCode == REQUEST_CODE_CALL_LOG_PERMISSION) { + if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + Log.d(TAG, "Call log permission granted") + MyInCallService.channel?.invokeMethod("callLogPermissionGranted", null) + } else { + Log.w(TAG, "Call log permission denied") + } + } + } + + private fun getCallLogs(): List> { + val logsList = mutableListOf>() + val cursor: Cursor? = contentResolver.query( + CallLog.Calls.CONTENT_URI, null, null, null, CallLog.Calls.DATE + " DESC" + ) + cursor?.use { + while (it.moveToNext()) { + val number = it.getString(it.getColumnIndexOrThrow(CallLog.Calls.NUMBER)) + val type = it.getInt(it.getColumnIndexOrThrow(CallLog.Calls.TYPE)) + val date = it.getLong(it.getColumnIndexOrThrow(CallLog.Calls.DATE)) + val duration = it.getLong(it.getColumnIndexOrThrow(CallLog.Calls.DURATION)) + + // Extract subscription ID (SIM card info) if available + var subscriptionId: Int? = null + var simName: String? = null + try { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) { + val subIdColumnIndex = it.getColumnIndex("subscription_id") + if (subIdColumnIndex >= 0) { + subscriptionId = it.getInt(subIdColumnIndex) + // Get the actual SIM name + simName = getSimNameFromSubscriptionId(subscriptionId) + } + } + } catch (e: Exception) { + Log.w(TAG, "Failed to get subscription_id: ${e.message}") + } + + val map = mutableMapOf( + "number" to number, + "type" to type, + "date" to date, + "duration" to duration, + "subscription_id" to subscriptionId, + "sim_name" to simName + ) + logsList.add(map) + } + } + return logsList + } + + private fun getLatestCallLog(): Map? { + val cursor: Cursor? = contentResolver.query( + CallLog.Calls.CONTENT_URI, + null, + null, + null, + CallLog.Calls.DATE + " DESC" + ) + cursor?.use { + if (it.moveToNext()) { + val number = it.getString(it.getColumnIndexOrThrow(CallLog.Calls.NUMBER)) + val type = it.getInt(it.getColumnIndexOrThrow(CallLog.Calls.TYPE)) + val date = it.getLong(it.getColumnIndexOrThrow(CallLog.Calls.DATE)) + val duration = it.getLong(it.getColumnIndexOrThrow(CallLog.Calls.DURATION)) + + // Extract subscription ID (SIM card info) if available + var subscriptionId: Int? = null + var simName: String? = null + try { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) { + val subIdColumnIndex = it.getColumnIndex("subscription_id") + if (subIdColumnIndex >= 0) { + subscriptionId = it.getInt(subIdColumnIndex) + // Get the actual SIM name + simName = getSimNameFromSubscriptionId(subscriptionId) + } + } + } catch (e: Exception) { + Log.w(TAG, "Failed to get subscription_id: ${e.message}") + } + + return mapOf( + "number" to number, + "type" to type, + "date" to date, + "duration" to duration, + "subscription_id" to subscriptionId, + "sim_name" to simName + ) + } + } + return null + } + + private fun getSimNameFromSubscriptionId(subscriptionId: Int?): String? { + if (subscriptionId == null) return null + + try { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) { + val subscriptionManager = getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE) as SubscriptionManager + val subscriptionInfo: SubscriptionInfo? = subscriptionManager.getActiveSubscriptionInfo(subscriptionId) + + return subscriptionInfo?.let { info -> + // Try to get display name first, fallback to carrier name, then generic name + when { + !info.displayName.isNullOrBlank() && info.displayName.toString() != info.subscriptionId.toString() -> { + info.displayName.toString() + } + !info.carrierName.isNullOrBlank() -> { + info.carrierName.toString() + } + else -> "SIM ${info.simSlotIndex + 1}" + } + } + } + } catch (e: Exception) { + Log.w(TAG, "Failed to get SIM name for subscription $subscriptionId: ${e.message}") + } + + // Fallback to generic name + return "SIM ${subscriptionId + 1}" + } + + private fun handleIncomingCallIntent(intent: Intent?) { + intent?.let { + if (it.getBooleanExtra("isIncomingCall", false)) { + val phoneNumber = it.getStringExtra("phoneNumber") + val showScreen = it.getBooleanExtra("showIncomingCallScreen", false) + Log.d(TAG, "Received incoming call intent for $phoneNumber, showScreen=$showScreen, wasPhoneLocked=$wasPhoneLocked") + if (showScreen) { + if (MyInCallService.channel != null) { + MyInCallService.channel?.invokeMethod("incomingCallFromNotification", mapOf( + "phoneNumber" to phoneNumber, + "wasPhoneLocked" to wasPhoneLocked + )) + } else { + pendingIncomingCall = Pair(phoneNumber, true) + Log.d(TAG, "Flutter channel not ready, storing pending call: $phoneNumber") + } + } + } + } + } +} \ No newline at end of file diff --git a/dialer/android/app/src/main/kotlin/com/icing/dialer/services/CallConnectionService.kt b/dialer/android/app/src/main/kotlin/com/icing/dialer/services/CallConnectionService.kt new file mode 100644 index 0000000..c39d608 --- /dev/null +++ b/dialer/android/app/src/main/kotlin/com/icing/dialer/services/CallConnectionService.kt @@ -0,0 +1,82 @@ +// package com.icing.dialer.services + +// import android.telecom.Connection +// import android.telecom.ConnectionService +// import android.telecom.PhoneAccountHandle +// import android.telecom.TelecomManager +// import android.telecom.DisconnectCause +// import android.util.Log +// import io.flutter.plugin.common.MethodChannel + +// class CallConnectionService : ConnectionService() { +// companion object { +// var channel: MethodChannel? = null +// private const val TAG = "CallConnectionService" +// } + +// init { +// Log.d(TAG, "CallConnectionService initialized") +// } + +// override fun onCreate() { +// super.onCreate() +// Log.d(TAG, "Service created") +// } + +// override fun onDestroy() { +// super.onDestroy() +// Log.d(TAG, "Service destroyed") +// } + +// override fun onCreateOutgoingConnection( +// connectionManagerPhoneAccount: PhoneAccountHandle?, +// request: android.telecom.ConnectionRequest +// ): Connection { +// Log.d(TAG, "Creating outgoing connection for ${request.address}, account: $connectionManagerPhoneAccount") +// val connection = object : Connection() { +// override fun onStateChanged(state: Int) { +// super.onStateChanged(state) +// Log.d(TAG, "Connection state changed: $state") +// val stateStr = when (state) { +// STATE_DIALING -> "dialing" +// STATE_ACTIVE -> "active" +// STATE_DISCONNECTED -> "disconnected" +// else -> "unknown" +// } +// channel?.invokeMethod("callStateChanged", mapOf("state" to stateStr, "phoneNumber" to request.address.toString())) +// } + +// override fun onDisconnect() { +// Log.d(TAG, "Connection disconnected") +// setDisconnected(DisconnectCause(DisconnectCause.LOCAL)) +// destroy() +// } +// } +// connection.setAddress(request.address, TelecomManager.PRESENTATION_ALLOWED) +// connection.setInitialized() +// connection.setDialing() +// return connection +// } + +// override fun onCreateIncomingConnection( +// connectionManagerPhoneAccount: PhoneAccountHandle?, +// request: android.telecom.ConnectionRequest +// ): Connection { +// Log.d(TAG, "Creating incoming connection for ${request.address}, account: $connectionManagerPhoneAccount") +// val connection = object : Connection() { +// override fun onAnswer() { +// Log.d(TAG, "Connection answered") +// setActive() +// } + +// override fun onDisconnect() { +// Log.d(TAG, "Connection disconnected") +// setDisconnected(DisconnectCause(DisconnectCause.LOCAL)) +// destroy() +// } +// } +// connection.setAddress(request.address, TelecomManager.PRESENTATION_ALLOWED) +// connection.setRinging() +// return connection +// } +// } \ No newline at end of file diff --git a/dialer/android/app/src/main/kotlin/com/icing/dialer/services/CallService.kt b/dialer/android/app/src/main/kotlin/com/icing/dialer/services/CallService.kt new file mode 100644 index 0000000..d3762af --- /dev/null +++ b/dialer/android/app/src/main/kotlin/com/icing/dialer/services/CallService.kt @@ -0,0 +1,76 @@ +package com.icing.dialer.services + +import android.content.Context +import android.net.Uri +import android.os.Build +import android.os.Bundle +import android.telecom.TelecomManager +import android.util.Log +import androidx.core.content.ContextCompat +import android.content.pm.PackageManager +import android.Manifest + +object CallService { + private val TAG = "CallService" + + fun makeGsmCall(context: Context, phoneNumber: String, simSlot: Int = 0): Boolean { + return try { + val telecomManager = context.getSystemService(Context.TELECOM_SERVICE) as TelecomManager + val uri = Uri.parse("tel:$phoneNumber") + + if (ContextCompat.checkSelfPermission(context, Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) { + // Get available phone accounts (SIM cards) + val phoneAccounts = telecomManager.callCapablePhoneAccounts + + if (phoneAccounts.isNotEmpty()) { + // Select the appropriate SIM slot + val selectedAccount = if (simSlot < phoneAccounts.size) { + phoneAccounts[simSlot] + } else { + // Fallback to first available SIM if requested slot doesn't exist + phoneAccounts[0] + } + + val extras = Bundle().apply { + putParcelable(TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE, selectedAccount) + } + + telecomManager.placeCall(uri, extras) + Log.d(TAG, "Initiated call to $phoneNumber using SIM slot $simSlot") + } else { + // No SIM cards available, make call without specifying SIM + telecomManager.placeCall(uri, Bundle()) + Log.d(TAG, "Initiated call to $phoneNumber without SIM selection (no SIMs available)") + } + true + } else { + Log.e(TAG, "CALL_PHONE permission not granted") + false + } + } catch (e: Exception) { + Log.e(TAG, "Error making GSM call: ${e.message}", e) + false + } + } + + fun hangUpCall(context: Context): Boolean { + return try { + if (MyInCallService.currentCall != null) { + MyInCallService.currentCall?.disconnect() + Log.d(TAG, "Disconnected active call via MyInCallService") + true + } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + val telecomManager = context.getSystemService(Context.TELECOM_SERVICE) as TelecomManager + telecomManager.endCall() + Log.d(TAG, "Ended call via TelecomManager (no active call in MyInCallService)") + true + } else { + Log.e(TAG, "No active call and hangup not supported below Android P") + false + } + } catch (e: Exception) { + Log.e(TAG, "Error hanging up call: ${e.message}", e) + false + } + } +} \ No newline at end of file diff --git a/dialer/android/app/src/main/kotlin/com/icing/dialer/services/MyInCallService.kt b/dialer/android/app/src/main/kotlin/com/icing/dialer/services/MyInCallService.kt new file mode 100644 index 0000000..2acb1f3 --- /dev/null +++ b/dialer/android/app/src/main/kotlin/com/icing/dialer/services/MyInCallService.kt @@ -0,0 +1,218 @@ +package com.icing.dialer.services + +import android.app.KeyguardManager +import android.app.NotificationChannel +import android.app.NotificationManager +import android.app.PendingIntent +import android.content.Context +import android.content.Intent +import android.media.AudioManager +import android.os.Build +import android.telecom.Call +import android.telecom.InCallService +import android.telecom.CallAudioState +import android.util.Log +import androidx.core.app.NotificationCompat +import com.icing.dialer.activities.MainActivity +import io.flutter.plugin.common.MethodChannel + +class MyInCallService : InCallService() { + companion object { + var channel: MethodChannel? = null + var currentCall: Call? = null + private const val TAG = "MyInCallService" + private const val NOTIFICATION_CHANNEL_ID = "incoming_call_channel" + private const val NOTIFICATION_ID = 1 + var wasPhoneLocked: Boolean = false + private var instance: MyInCallService? = null + + fun toggleMute(mute: Boolean): Boolean { + return instance?.let { service -> + try { + service.setMuted(mute) + Log.d(TAG, "Requested to set call mute state to $mute") + true + } catch (e: Exception) { + Log.e(TAG, "Failed to set mute state: $e") + false + } + } ?: false + } + + fun toggleSpeaker(speaker: Boolean): Boolean { + return instance?.let { service -> + try { + val route = if (speaker) CallAudioState.ROUTE_SPEAKER else CallAudioState.ROUTE_EARPIECE + service.setAudioRoute(route) + Log.d(TAG, "Requested to set audio route to $route") + true + } catch (e: Exception) { + Log.e(TAG, "Failed to set audio route: $e") + false + } + } ?: false + } + + fun sendDtmfTone(digit: String): Boolean { + return instance?.let { service -> + try { + currentCall?.let { call -> + call.playDtmfTone(digit[0]) + call.stopDtmfTone() + Log.d(TAG, "Sent DTMF tone: $digit") + true + } ?: false + } catch (e: Exception) { + Log.e(TAG, "Failed to send DTMF tone: $e") + false + } + } ?: false + } + } + + private val callCallback = object : Call.Callback() { + override fun onStateChanged(call: Call, state: Int) { + super.onStateChanged(call, state) + val stateStr = when (state) { + Call.STATE_DIALING -> "dialing" + Call.STATE_ACTIVE -> "active" + Call.STATE_DISCONNECTED -> "disconnected" + Call.STATE_DISCONNECTING -> "disconnecting" + Call.STATE_RINGING -> "ringing" + else -> "unknown" + } + Log.d(TAG, "State changed: $stateStr for call ${call.details.handle}") + channel?.invokeMethod("callStateChanged", mapOf( + "callId" to call.details.handle.toString(), + "state" to stateStr, + "wasPhoneLocked" to wasPhoneLocked + )) + if (state == Call.STATE_RINGING) { + val keyguardManager = getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager + wasPhoneLocked = keyguardManager.isKeyguardLocked + Log.d(TAG, "Phone locked at ringing: $wasPhoneLocked") + showIncomingCallScreen(call.details.handle.toString().replace("tel:", "")) + } else if (state == Call.STATE_DISCONNECTED || state == Call.STATE_DISCONNECTING) { + Log.d(TAG, "Call ended: ${call.details.handle}, wasPhoneLocked: $wasPhoneLocked") + channel?.invokeMethod("callEnded", mapOf( + "callId" to call.details.handle.toString(), + "wasPhoneLocked" to wasPhoneLocked + )) + currentCall = null + cancelNotification() + } + } + } + + override fun onCallAdded(call: Call) { + super.onCallAdded(call) + instance = this + currentCall = call + val stateStr = when (call.state) { + Call.STATE_DIALING -> "dialing" + Call.STATE_ACTIVE -> "active" + Call.STATE_RINGING -> "ringing" + else -> "dialing" + } + Log.d(TAG, "Call added: ${call.details.handle}, state: $stateStr") + channel?.invokeMethod("callAdded", mapOf( + "callId" to call.details.handle.toString(), + "state" to stateStr + )) + if (stateStr == "ringing") { + val keyguardManager = getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager + wasPhoneLocked = keyguardManager.isKeyguardLocked + Log.d(TAG, "Phone locked at call added: $wasPhoneLocked") + showIncomingCallScreen(call.details.handle.toString().replace("tel:", "")) + } + call.registerCallback(callCallback) + if (callAudioState != null) { + val audioState = callAudioState + channel?.invokeMethod("audioStateChanged", mapOf( + "route" to audioState.route, + "muted" to audioState.isMuted, + "speaker" to (audioState.route == CallAudioState.ROUTE_SPEAKER) + )) + } else { + Log.w("MyInCallService", "callAudioState is null in onCallAdded") + } + } + + override fun onCallRemoved(call: Call) { + super.onCallRemoved(call) + Log.d(TAG, "Call removed: ${call.details.handle}, wasPhoneLocked: $wasPhoneLocked") + call.unregisterCallback(callCallback) + channel?.invokeMethod("callRemoved", mapOf( + "callId" to call.details.handle.toString(), + "wasPhoneLocked" to wasPhoneLocked + )) + currentCall = null + instance = null + cancelNotification() + } + + override fun onCallAudioStateChanged(state: CallAudioState) { + super.onCallAudioStateChanged(state) + Log.d(TAG, "Audio state changed: route=${state.route}, muted=${state.isMuted}") + channel?.invokeMethod("audioStateChanged", mapOf( + "route" to state.route, + "muted" to state.isMuted, + "speaker" to (state.route == CallAudioState.ROUTE_SPEAKER) + )) + } + + private fun showIncomingCallScreen(phoneNumber: String) { + val intent = Intent(this, MainActivity::class.java).apply { + flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP + putExtra("phoneNumber", phoneNumber) + putExtra("isIncomingCall", true) + putExtra("showIncomingCallScreen", true) + putExtra("wasPhoneLocked", wasPhoneLocked) + } + + val keyguardManager = getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager + if (keyguardManager.isKeyguardLocked) { + startActivity(intent) + Log.d(TAG, "Launched MainActivity directly for locked screen, phoneNumber: $phoneNumber") + } else { + val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + val channel = NotificationChannel( + NOTIFICATION_CHANNEL_ID, + "Incoming Calls", + NotificationManager.IMPORTANCE_HIGH + ).apply { + description = "Notifications for incoming calls" + enableVibration(true) + setShowBadge(true) + } + notificationManager.createNotificationChannel(channel) + } + + val pendingIntent = PendingIntent.getActivity( + this, 0, intent, + PendingIntent.FLAG_UPDATE_CURRENT or (if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) PendingIntent.FLAG_IMMUTABLE else 0) + ) + + val notification = NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID) + .setSmallIcon(android.R.drawable.ic_dialog_alert) + .setContentTitle("Incoming Call") + .setContentText("Call from $phoneNumber") + .setPriority(NotificationCompat.PRIORITY_HIGH) + .setFullScreenIntent(pendingIntent, true) + .setAutoCancel(true) + .setOngoing(true) + .build() + + startActivity(intent) + notificationManager.notify(NOTIFICATION_ID, notification) + Log.d(TAG, "Launched MainActivity with notification for unlocked screen, phoneNumber: $phoneNumber") + } + } + + private fun cancelNotification() { + val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager + notificationManager.cancel(NOTIFICATION_ID) + Log.d(TAG, "Notification canceled") + } +} \ No newline at end of file diff --git a/dialer/android/app/src/main/res/drawable-v21/launch_background.xml b/dialer/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 0000000..f74085f --- /dev/null +++ b/dialer/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/dialer/android/app/src/main/res/drawable/launch_background.xml b/dialer/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000..304732f --- /dev/null +++ b/dialer/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/dialer/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/dialer/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100755 index 0000000000000000000000000000000000000000..1ed15a1f9365e048189e61f85b2826fa14c34340 GIT binary patch literal 2477 zcmV;e2~zfnP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D2|`IkK~#8N?OR!F z4PP8SbBn626h#|LBSqET+A7h6N~s{WNIZG4JT(YWjfj6DArYj(lf(lO4~Q2^>_qGu zds|cxN@=B*7Nv8}|Mwkd#@y=d+_|@9uFRL5bY{+(xp%(%+t06>ATSRB;ZuJ-1b|17 z4LpKu;1Og4k02X(1lhnN$OaxkHt-0tfk%)HJc4Wxb}shg#}8IrUCrLTd&lbQ>($j? zh>nhCUAuN=adC01RjXF&YUChff^b_&Nr^al@+7-_`7(R);)SN`x|;n35Y)SOZ!v!S zc(!1{0@kBP4=pMxO3g+9K#)^#&c(B5&-BTYC-Y97I)Px@(Y}3qv1G{-URqkp)ng(8 zArW-%-aVd~naQmL_g?LNv+t7 z88g_VNs|H^-k6vemX(#IEn2ilU199z&717~`}d9{_iw>5L2%VpGRR=7qrhn0x;29u z8lWFWD=sdUp3v=ZOi+go9hmZ5k{pr*X_uM;%+k=IL-E&SgbaP7VS(G=m>?pDB_<}S zGluwwefaP}odrgGe7u&Dl42!D)YR0dGxx$VK@`tOf?$7uH*ekqZBK>_83HFK*ODF6 zK7INmue%wJ2_m=7`t<3;+O=yZ&tbGHDk_3<*#ia)koN;H^tjjUa7++Ds)Ce39#>UW zNp+DYHb_lPm9Y|l``*5N8`OP&6Cn|lkdT1-Nm{dJ4JWVk8$(16r`)Ta zq(!cU7wgrl7pG`CV0z*vgiH{mWy+K(T)AyAapJ_^N*P$Qdi83P9E|SWyYtPPHwTn9 zw;^PLfIWNm@VK}*`Qj8|iyb?5_({dtvuFL(FexdC@7uRe|Ni~ETH$_#WTXwGr>AQJ z2M)x`Gn78gpFht?_2fB#9L(yeMvfdQGBYzZT#polMG!pMgb5R50!w5gOV@7Qx@CH% zw6rvhaxh4dL`g}B@9ER0>MTO=Q;C>n4va&KY>wbhKK>(!>+SI92*REY7j&#?%vaks=@=vl1MEDNt)|pp=Kipfgc%clK@D}i4!MG386fU zFJ8P@r*J^7Ax|dl(Ty87TrEY-Mi2~hK|ulb$s_^f*<>II=}}9dih}Hs8C6L zYdpy(gU>#G{K$x8?6Zj{Po6MT2jDUB9K>U|H_-hdLDJOBpp-*^6g(d4G-AXE4uhK~L&D|md0f>Xh9_f^enO_`6``o#6I;n(Q1F~R~va_>I?}pL2b7x5$t>t*m z{{8#wQ3ZfBVjj{)kUV2Y%HEFs|=yqw-zG^0b+T1IUhG}obL1ab3z<~pN-MV#r-n@A_*)$`_zi!~F6I2?;t%Ay7pFh?9;UJ*p#qLPLc01&slTL4AqHZ}ep= zDk{(?pl{#4UG@SX*1~;gy}>m@a-E>X34&--LaXCfM~jT{vM}7cckkxb5CAa~jO?;y z%XCU`{iFfpZ3-DGM_=8&#{Z*6fI5=01pI7g1V7SGQTuD z5yeR`+~!N;1?fdNssN}G80%5fwj;+1NaxCxD|JKd#*Q5;ii?ZYZ1DIa1Q~!GfZ;Z( zkjBW$%EB*h=57XX4vB&~2GFV|v32WK*~EpGa<@RIOK2mvTg^7BfF ziPo=Q&!0bk?iUJ#gNP%@0K|Xi&YdDTIoZ$7pb9X1_H03!zhBWUR75O61|C0t%vY>f z!O@myjb-5RGBPssBS(&KN4@6ZZ18XeK~^BD1`*1|n?zX$Vx)x&7wX%# zZIgr{UBPw}Y#Txf3?#>CX=x_ebLYVHAnEc2Yuv4f7=jFd2&f?1_h5HQOG_CAmyDux^h?UVN3ub(kCH+K6w}aQ8?@(Z zh=?PoF;L{q&@qcp0e{JZN!x_*0ii)S_$LTzNrb)i{IA0!$OaxkHt-0tfk%)HJc4ZC r5o808ARBlD*}x;n1|C68g0cSr@@zEWLQ7jy00000NkvXXu0mjftlW^X literal 0 HcmV?d00001 diff --git a/dialer/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/dialer/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100755 index 0000000000000000000000000000000000000000..16dc5ac14f8890dfa56aabfcd2901b97f578089a GIT binary patch literal 1504 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 literal 0 HcmV?d00001 diff --git a/dialer/android/app/src/main/res/values-night/styles.xml b/dialer/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 0000000..06952be --- /dev/null +++ b/dialer/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/dialer/android/app/src/main/res/values/styles.xml b/dialer/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..cb1ef88 --- /dev/null +++ b/dialer/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/dialer/android/app/src/profile/AndroidManifest.xml b/dialer/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000..6904ee8 --- /dev/null +++ b/dialer/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + diff --git a/dialer/android/build.gradle b/dialer/android/build.gradle new file mode 100644 index 0000000..457de89 --- /dev/null +++ b/dialer/android/build.gradle @@ -0,0 +1,19 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +rootProject.buildDir = "../build" +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean", Delete) { + delete rootProject.buildDir +} + diff --git a/dialer/android/gradle/wrapper/gradle-wrapper.properties b/dialer/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..22041e5 --- /dev/null +++ b/dialer/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip \ No newline at end of file diff --git a/dialer/android/settings.gradle b/dialer/android/settings.gradle new file mode 100644 index 0000000..b5e1b3f --- /dev/null +++ b/dialer/android/settings.gradle @@ -0,0 +1,25 @@ +pluginManagement { + def flutterSdkPath = { + def properties = new Properties() + file("local.properties").withInputStream { properties.load(it) } + def flutterSdkPath = properties.getProperty("flutter.sdk") + assert flutterSdkPath != null, "flutter.sdk not set in local.properties" + return flutterSdkPath + }() + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id "dev.flutter.flutter-plugin-loader" version "1.0.0" + id "com.android.application" version "8.3.2" apply false + id "org.jetbrains.kotlin.android" version "2.0.20" apply false +} + +include ":app" diff --git a/dialer/build.sh b/dialer/build.sh new file mode 100755 index 0000000..c8f5e05 --- /dev/null +++ b/dialer/build.sh @@ -0,0 +1,10 @@ +#!/bin/bash -e + +IMG=git.gmoker.com/icing/flutter:main + +if [ "$1" == '-s' ]; then + OPT+=(--dart-define=STEALTH=true) +fi + +set -x +docker run --rm -v "$PWD:/app/" "$IMG" build apk "${OPT[@]}" diff --git a/dialer/devtools_options.yaml b/dialer/devtools_options.yaml new file mode 100644 index 0000000..fa0b357 --- /dev/null +++ b/dialer/devtools_options.yaml @@ -0,0 +1,3 @@ +description: This file stores settings for Dart & Flutter DevTools. +documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states +extensions: diff --git a/dialer/lib/core/config/app_config.dart b/dialer/lib/core/config/app_config.dart new file mode 100644 index 0000000..d937e6c --- /dev/null +++ b/dialer/lib/core/config/app_config.dart @@ -0,0 +1,14 @@ +class AppConfig { + // Private constructor to prevent instantiation + AppConfig._(); + + // Global configuration + static bool isStealthMode = false; + + // App initialization + static Future initialize() async { + const stealthFlag = String.fromEnvironment('STEALTH', defaultValue: 'false'); + isStealthMode = stealthFlag.toLowerCase() == 'true'; + print('Stealth mode is ${isStealthMode ? 'enabled' : 'disabled'}'); + } +} diff --git a/dialer/lib/core/navigation/app_router.dart b/dialer/lib/core/navigation/app_router.dart new file mode 100644 index 0000000..f63aff2 --- /dev/null +++ b/dialer/lib/core/navigation/app_router.dart @@ -0,0 +1,57 @@ +import 'package:flutter/material.dart'; +import '../../presentation/features/call/call_page.dart'; +import '../../presentation/features/call/incoming_call_page.dart'; +import '../../presentation/features/home/home_page.dart'; +import '../../presentation/features/settings/settings.dart'; // Updated import +import '../../presentation/features/contacts/contact_page.dart'; +import '../../presentation/features/composition/composition.dart'; +import 'dart:typed_data'; + +class AppRouter { + static Route generateRoute(RouteSettings settings) { + switch (settings.name) { + case '/': + return MaterialPageRoute(builder: (_) => const MyHomePage()); + + case '/settings': + return MaterialPageRoute(builder: (_) => const SettingsPage()); // Now correctly imported + + case '/composition': + return MaterialPageRoute(builder: (_) => const CompositionPage()); + + case '/contacts': + return MaterialPageRoute(builder: (_) => const ContactPage()); + + case '/call': + final args = settings.arguments as Map; + return MaterialPageRoute( + settings: settings, + builder: (_) => CallPage( + displayName: args['displayName'] as String, + phoneNumber: args['phoneNumber'] as String, + thumbnail: args['thumbnail'] as Uint8List?, + ), + ); + + case '/incoming_call': + final args = settings.arguments as Map; + return MaterialPageRoute( + settings: settings, + builder: (_) => IncomingCallPage( + displayName: args['displayName'] as String, + phoneNumber: args['phoneNumber'] as String, + thumbnail: args['thumbnail'] as Uint8List?, + ), + ); + + default: + return MaterialPageRoute( + builder: (_) => Scaffold( + body: Center( + child: Text('No route defined for ${settings.name}'), + ), + ), + ); + } + } +} diff --git a/dialer/lib/domain/services/block_service.dart b/dialer/lib/domain/services/block_service.dart new file mode 100644 index 0000000..5a4a0b0 --- /dev/null +++ b/dialer/lib/domain/services/block_service.dart @@ -0,0 +1,78 @@ +import 'package:flutter/material.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + +/// Service for managing blocked phone numbers +class BlockService { + static const String _blockedNumbersKey = 'blocked_numbers'; + + // Private constructor + BlockService._privateConstructor(); + + // Singleton instance + static final BlockService _instance = BlockService._privateConstructor(); + + // Factory constructor to return the same instance + factory BlockService() { + return _instance; + } + + /// Block a phone number + Future blockNumber(String phoneNumber) async { + try { + final prefs = await SharedPreferences.getInstance(); + final blockedNumbers = prefs.getStringList(_blockedNumbersKey) ?? []; + + // Don't add if already blocked + if (blockedNumbers.contains(phoneNumber)) { + return true; + } + + blockedNumbers.add(phoneNumber); + return await prefs.setStringList(_blockedNumbersKey, blockedNumbers); + } catch (e) { + debugPrint('Error blocking number: $e'); + return false; + } + } + + /// Unblock a phone number + Future unblockNumber(String phoneNumber) async { + try { + final prefs = await SharedPreferences.getInstance(); + final blockedNumbers = prefs.getStringList(_blockedNumbersKey) ?? []; + + if (!blockedNumbers.contains(phoneNumber)) { + return true; + } + + blockedNumbers.remove(phoneNumber); + return await prefs.setStringList(_blockedNumbersKey, blockedNumbers); + } catch (e) { + debugPrint('Error unblocking number: $e'); + return false; + } + } + + /// Check if a number is blocked + Future isNumberBlocked(String phoneNumber) async { + try { + final prefs = await SharedPreferences.getInstance(); + final blockedNumbers = prefs.getStringList(_blockedNumbersKey) ?? []; + return blockedNumbers.contains(phoneNumber); + } catch (e) { + debugPrint('Error checking if number is blocked: $e'); + return false; + } + } + + /// Get all blocked numbers + Future> getBlockedNumbers() async { + try { + final prefs = await SharedPreferences.getInstance(); + return prefs.getStringList(_blockedNumbersKey) ?? []; + } catch (e) { + debugPrint('Error getting blocked numbers: $e'); + return []; + } + } +} diff --git a/dialer/lib/domain/services/call_service.dart b/dialer/lib/domain/services/call_service.dart new file mode 100644 index 0000000..f641dc6 --- /dev/null +++ b/dialer/lib/domain/services/call_service.dart @@ -0,0 +1,720 @@ +import 'dart:async'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import '../../presentation/features/call/call_page.dart'; +import '../../presentation/features/call/incoming_call_page.dart'; // Import the new page +import 'contact_service.dart'; +// Import for history update callback +import '../../presentation/features/history/history_page.dart'; + +class CallService { + static const MethodChannel _channel = MethodChannel('call_service'); + static String? currentPhoneNumber; + static String? currentDisplayName; + static Uint8List? currentThumbnail; + static int? currentSimSlot; // Track which SIM slot is being used + static bool _isCallPageVisible = false; + static Map? _pendingCall; + static bool wasPhoneLocked = false; + static String? _activeCallNumber; + static bool _isNavigating = false; + final ContactService _contactService = ContactService(); + final _callStateController = StreamController.broadcast(); + final _audioStateController = + StreamController>.broadcast(); + final _simStateController = StreamController.broadcast(); + Map? _currentAudioState; + + static final GlobalKey navigatorKey = + GlobalKey(); + Stream get callStateStream => _callStateController.stream; + Stream> get audioStateStream => + _audioStateController.stream; + Stream get simStateStream => _simStateController.stream; + Map? get currentAudioState => _currentAudioState; + // Getter for current SIM slot + static int? get getCurrentSimSlot => currentSimSlot; + // Get SIM display name for the current call + static String? getCurrentSimDisplayName() { + if (currentSimSlot == null) return null; + return "SIM ${currentSimSlot! + 1}"; + } + + // Cancel pending SIM switch (used when user manually hangs up) + void cancelPendingSimSwitch() { + if (_pendingSimSwitch != null) { + print('CallService: Canceling pending SIM switch due to manual hangup'); + _pendingSimSwitch = null; + _manualHangupFlag = true; // Mark that hangup was manual + print('CallService: Manual hangup flag set to $_manualHangupFlag'); + } else { + print('CallService: No pending SIM switch to cancel'); + // Don't set manual hangup flag if there's no SIM switch to cancel + } + } + + CallService() { + _channel.setMethodCallHandler((call) async { + print( + 'CallService: Handling method call: ${call.method}, with args: ${call.arguments}'); + switch (call.method) { + case "callAdded": + final phoneNumber = call.arguments["callId"] as String?; + final state = call.arguments["state"] as String?; + if (phoneNumber == null || state == null) { + print('CallService: Invalid callAdded args: $call.arguments'); + return; + } + final decodedPhoneNumber = + Uri.decodeComponent(phoneNumber.replaceFirst('tel:', '')); + print('CallService: Decoded phone number: $decodedPhoneNumber'); + if (_activeCallNumber != decodedPhoneNumber) { + currentPhoneNumber = decodedPhoneNumber; + if (currentDisplayName == null || + currentDisplayName == currentPhoneNumber) { + await _fetchContactInfo(decodedPhoneNumber); + } + } + print( + 'CallService: Call added, number: $currentPhoneNumber, displayName: $currentDisplayName, state: $state'); + _callStateController.add(state); + if (state == "ringing") { + _handleIncomingCall(decodedPhoneNumber); + } else { + _navigateToCallPage(); + } + break; + case "callStateChanged": + final state = call.arguments["state"] as String?; + wasPhoneLocked = call.arguments["wasPhoneLocked"] as bool? ?? false; + if (state == null) { + print( + 'CallService: Invalid callStateChanged args: $call.arguments'); + return; + } + print( + 'CallService: State changed to $state, wasPhoneLocked: $wasPhoneLocked'); + _callStateController.add(state); + if (state == "disconnected" || state == "disconnecting") { + print('CallService: ========== CALL DISCONNECTED =========='); + print( + 'CallService: _pendingSimSwitch: ${_pendingSimSwitch != null}'); + print('CallService: _manualHangupFlag: $_manualHangupFlag'); + print('CallService: _isCallPageVisible: $_isCallPageVisible'); + + // Always close call page on disconnection - SIM switching should not prevent this + print('CallService: Calling _closeCallPage() on call disconnection'); + _closeCallPage(); + + // Reset manual hangup flag after successful page close + if (_manualHangupFlag) { + print( + 'CallService: Resetting manual hangup flag after page close'); + _manualHangupFlag = false; + } + if (wasPhoneLocked) { + await _channel.invokeMethod("callEndedFromFlutter"); + } + + // Notify history page to add the latest call + // Add a small delay to ensure call log is updated by the system + Timer(const Duration(milliseconds: 500), () { + HistoryPageState.addNewCallToHistory(); + }); + + _activeCallNumber = null; + // Handle pending SIM switch after call is disconnected + _handlePendingSimSwitch(); + } else if (state == "active" || state == "dialing") { + final phoneNumber = call.arguments["callId"] as String?; + if (phoneNumber != null && + _activeCallNumber != + Uri.decodeComponent(phoneNumber.replaceFirst('tel:', ''))) { + currentPhoneNumber = + Uri.decodeComponent(phoneNumber.replaceFirst('tel:', '')); + if (currentDisplayName == null || + currentDisplayName == currentPhoneNumber) { + await _fetchContactInfo(currentPhoneNumber!); + } + } else if (currentPhoneNumber != null && + _activeCallNumber != currentPhoneNumber) { + if (currentDisplayName == null || + currentDisplayName == currentPhoneNumber) { + await _fetchContactInfo(currentPhoneNumber!); + } + } else { + print( + 'CallService: Skipping fetch, active call: $_activeCallNumber, current: $currentPhoneNumber, displayName: $currentDisplayName'); + } + _navigateToCallPage(); + } else if (state == "ringing") { + final phoneNumber = call.arguments["callId"] as String?; + if (phoneNumber == null) { + print('CallService: Invalid ringing callId: $call.arguments'); + return; + } + final decodedPhoneNumber = + Uri.decodeComponent(phoneNumber.replaceFirst('tel:', '')); + if (_activeCallNumber != decodedPhoneNumber) { + currentPhoneNumber = decodedPhoneNumber; + if (currentDisplayName == null || + currentDisplayName == currentPhoneNumber) { + await _fetchContactInfo(decodedPhoneNumber); + } + } + _handleIncomingCall(decodedPhoneNumber); + } + break; + case "callEnded": + case "callRemoved": + wasPhoneLocked = call.arguments["wasPhoneLocked"] as bool? ?? false; + print('CallService: ========== CALL ENDED/REMOVED =========='); + print('CallService: wasPhoneLocked: $wasPhoneLocked'); + print('CallService: _pendingSimSwitch: ${_pendingSimSwitch != null}'); + print('CallService: _manualHangupFlag: $_manualHangupFlag'); + print('CallService: _isCallPageVisible: $_isCallPageVisible'); + + // Always close call page when call ends - SIM switching should not prevent this + print('CallService: Calling _closeCallPage() on call ended/removed'); + _closeCallPage(); + + // Reset manual hangup flag after closing page + if (_manualHangupFlag) { + print( + 'CallService: Resetting manual hangup flag after callEnded'); + _manualHangupFlag = false; + } + if (wasPhoneLocked) { + await _channel.invokeMethod("callEndedFromFlutter"); + } + + // Notify history page to add the latest call + // Add a small delay to ensure call log is updated by the system + Timer(const Duration(milliseconds: 500), () { + HistoryPageState.addNewCallToHistory(); + }); + + currentPhoneNumber = null; + currentDisplayName = null; + currentThumbnail = null; + currentSimSlot = null; // Reset SIM slot when call ends + _simStateController.add(null); // Notify UI that SIM is cleared + _activeCallNumber = null; + break; + case "incomingCallFromNotification": + final phoneNumber = call.arguments["phoneNumber"] as String?; + wasPhoneLocked = call.arguments["wasPhoneLocked"] as bool? ?? false; + if (phoneNumber == null) { + print( + 'CallService: Invalid incomingCallFromNotification args: $call.arguments'); + return; + } + final decodedPhoneNumber = Uri.decodeComponent(phoneNumber); + if (_activeCallNumber != decodedPhoneNumber) { + currentPhoneNumber = decodedPhoneNumber; + if (currentDisplayName == null || + currentDisplayName == currentPhoneNumber) { + await _fetchContactInfo(decodedPhoneNumber); + } + } + print( + 'CallService: Incoming call from notification: $decodedPhoneNumber, displayName: $currentDisplayName, wasPhoneLocked: $wasPhoneLocked'); + _handleIncomingCall(decodedPhoneNumber); + break; + case "audioStateChanged": + final route = call.arguments["route"] as int?; + final muted = call.arguments["muted"] as bool?; + final speaker = call.arguments["speaker"] as bool?; + print( + 'CallService: Audio state changed, route: $route, muted: $muted, speaker: $speaker'); + final audioState = { + "route": route, + "muted": muted, + "speaker": speaker, + }; + _currentAudioState = audioState; + _audioStateController.add(audioState); + break; + } + }); + } + + Future getCallState() async { + try { + final state = await _channel.invokeMethod('getCallState'); + print('CallService: getCallState returned: $state'); + return state as String?; + } catch (e) { + print('CallService: Error getting call state: $e'); + return null; + } + } + + Future> muteCall(BuildContext context, + {required bool mute}) async { + try { + print('CallService: Toggling mute to $mute'); + final result = await _channel.invokeMethod('muteCall', {'mute': mute}); + print('CallService: muteCall result: $result'); + final resultMap = Map.from(result as Map); + if (resultMap['status'] != 'success') { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text('Failed to toggle mute')), + ); + } + return resultMap; + } catch (e) { + print('CallService: Error toggling mute: $e'); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text('Error toggling mute: $e')), + ); + return {'status': 'error', 'message': e.toString()}; + } + } + + Future> speakerCall(BuildContext context, + {required bool speaker}) async { + try { + print('CallService: Toggling speaker to $speaker'); + final result = + await _channel.invokeMethod('speakerCall', {'speaker': speaker}); + print('CallService: speakerCall result: $result'); + return Map.from(result); + } catch (e) { + print('CallService: Error toggling speaker: $e'); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text('Failed to toggle speaker: $e')), + ); + return {'status': 'error', 'message': e.toString()}; + } + } + + void dispose() { + _callStateController.close(); + _audioStateController.close(); + } + + Future _fetchContactInfo(String phoneNumber) async { + try { + print('CallService: Fetching contact info for $phoneNumber'); + final contacts = await _contactService.fetchContacts(); + print('CallService: Retrieved ${contacts.length} contacts'); + final normalizedPhoneNumber = _normalizePhoneNumber(phoneNumber); + print('CallService: Normalized phone number: $normalizedPhoneNumber'); + for (var contact in contacts) { + for (var phone in contact.phones) { + final normalizedContactNumber = _normalizePhoneNumber(phone.number); + print( + 'CallService: Comparing $normalizedPhoneNumber with contact number $normalizedContactNumber'); + if (normalizedContactNumber == normalizedPhoneNumber) { + currentDisplayName = contact.displayName; + currentThumbnail = contact.thumbnail; + print( + 'CallService: Found contact - displayName: $currentDisplayName, thumbnail: ${currentThumbnail != null ? "present" : "null"}'); + return; + } + } + } + currentDisplayName = phoneNumber; + currentThumbnail = null; + print( + 'CallService: No contact match, using phoneNumber as displayName: $currentDisplayName'); + } catch (e) { + print('CallService: Error fetching contact info: $e'); + currentDisplayName = phoneNumber; + currentThumbnail = null; + } + } + + String _normalizePhoneNumber(String number) { + return number + .replaceAll(RegExp(r'[\s\-\(\)]'), '') + .replaceFirst(RegExp(r'^\+'), ''); + } + + void _handleIncomingCall(String phoneNumber) { + if (_activeCallNumber == phoneNumber && _isCallPageVisible) { + print( + 'CallService: Incoming call for $phoneNumber already active, skipping'); + return; + } + _activeCallNumber = phoneNumber; + + final context = navigatorKey.currentContext; + if (context == null) { + print( + 'CallService: Context is null, queuing incoming call: $phoneNumber'); + _pendingCall = {"phoneNumber": phoneNumber}; + Future.delayed(Duration(milliseconds: 500), () => _checkPendingCall()); + } else { + _navigateToIncomingCallPage(context); + } + } + + Future _checkPendingCall() async { + if (_pendingCall == null) { + print('CallService: No pending call to process'); + return; + } + + final phoneNumber = _pendingCall!["phoneNumber"]; + if (_activeCallNumber == phoneNumber && _isCallPageVisible) { + print( + 'CallService: Pending call for $phoneNumber already active, clearing'); + _pendingCall = null; + return; + } + + final context = navigatorKey.currentContext; + if (context != null) { + print('CallService: Processing queued call: $phoneNumber'); + currentPhoneNumber = phoneNumber; + _activeCallNumber = phoneNumber; + await _fetchContactInfo(phoneNumber); + _navigateToIncomingCallPage(context); + _pendingCall = null; + } else { + print('CallService: Context still null, retrying...'); + Future.delayed(Duration(milliseconds: 500), () => _checkPendingCall()); + } + } + + void _navigateToCallPage() { + if (_isNavigating) { + print('CallService: Navigation already in progress, skipping'); + return; + } + _isNavigating = true; + + final context = navigatorKey.currentContext; + if (context == null) { + print('CallService: Cannot navigate to CallPage, context is null'); + _isNavigating = false; + return; + } + final currentRoute = ModalRoute.of(context)?.settings.name ?? 'unknown'; + print( + 'CallService: Navigating to CallPage, Visible: $_isCallPageVisible, Current Route: $currentRoute, Active Call: $_activeCallNumber, DisplayName: $currentDisplayName'); + if (_isCallPageVisible && + currentRoute == '/call' && + _activeCallNumber == currentPhoneNumber) { + print( + 'CallService: CallPage already visible for $_activeCallNumber, skipping navigation'); + _isNavigating = false; + return; + } + if (_isCallPageVisible && + currentRoute == '/incoming_call' && + _activeCallNumber == currentPhoneNumber) { + print( + 'CallService: Popping IncomingCallPage before navigating to CallPage'); + Navigator.pop(context); + _isCallPageVisible = false; + } + if (currentPhoneNumber == null) { + print( + 'CallService: Cannot navigate to CallPage, currentPhoneNumber is null'); + _isNavigating = false; + return; + } + _activeCallNumber = currentPhoneNumber; + Navigator.push( + context, + MaterialPageRoute( + settings: const RouteSettings(name: '/call'), + builder: (context) => CallPage( + displayName: currentDisplayName ?? currentPhoneNumber!, + phoneNumber: currentPhoneNumber!, + thumbnail: currentThumbnail, + ), + ), + ).then((_) { + _isCallPageVisible = false; + _isNavigating = false; + print('CallService: CallPage popped, _isCallPageVisible set to false'); + }); + _isCallPageVisible = true; + } + + void _navigateToIncomingCallPage(BuildContext context) { + if (_isNavigating) { + print('CallService: Navigation already in progress, skipping'); + return; + } + _isNavigating = true; + + final currentRoute = ModalRoute.of(context)?.settings.name ?? 'unknown'; + print( + 'CallService: Navigating to IncomingCallPage, Visible: $_isCallPageVisible, Current Route: $currentRoute, Active Call: $_activeCallNumber, DisplayName: $currentDisplayName'); + if (_isCallPageVisible && + currentRoute == '/incoming_call' && + _activeCallNumber == currentPhoneNumber) { + print( + 'CallService: IncomingCallPage already visible for $_activeCallNumber, skipping navigation'); + _isNavigating = false; + return; + } + if (_isCallPageVisible && currentRoute == '/call') { + print('CallService: CallPage visible, not showing IncomingCallPage'); + _isNavigating = false; + return; + } + if (currentPhoneNumber == null) { + print( + 'CallService: Cannot navigate to IncomingCallPage, currentPhoneNumber is null'); + _isNavigating = false; + return; + } + Navigator.push( + context, + MaterialPageRoute( + settings: const RouteSettings(name: '/incoming_call'), + builder: (context) => IncomingCallPage( + displayName: currentDisplayName ?? currentPhoneNumber!, + phoneNumber: currentPhoneNumber!, + thumbnail: currentThumbnail, + ), + ), + ).then((_) { + _isCallPageVisible = false; + _isNavigating = false; + print( + 'CallService: IncomingCallPage popped, _isCallPageVisible set to false'); + }); + _isCallPageVisible = true; + } + + void _closeCallPage() { + final context = navigatorKey.currentContext; + if (context == null) { + print('CallService: Cannot close page, context is null'); + return; + } + + // Only attempt to close if a call page is actually visible + if (!_isCallPageVisible) { + print('CallService: Call page already closed'); + return; + } + + print( + 'CallService: Closing call page, _isCallPageVisible: $_isCallPageVisible, _pendingSimSwitch: ${_pendingSimSwitch != null}, _manualHangupFlag: $_manualHangupFlag'); + + // Use popUntil to ensure we go back to the home page + try { + Navigator.popUntil(context, (route) => route.isFirst); + _isCallPageVisible = false; + print('CallService: Used popUntil to return to home page'); + } catch (e) { + print('CallService: Error with popUntil, trying regular pop: $e'); + if (Navigator.canPop(context)) { + Navigator.pop(context); + _isCallPageVisible = false; + print('CallService: Used regular pop as fallback'); + } else { + print('CallService: No page to pop, setting _isCallPageVisible to false'); + _isCallPageVisible = false; + } + } + _activeCallNumber = null; + } + + Future> makeGsmCall( + BuildContext context, { + required String phoneNumber, + String? displayName, + Uint8List? thumbnail, + }) async { + try { + // Load default SIM slot from settings + final prefs = await SharedPreferences.getInstance(); + final simSlot = prefs.getInt('default_sim_slot') ?? 0; + return await makeGsmCallWithSim( + context, + phoneNumber: phoneNumber, + displayName: displayName, + thumbnail: thumbnail, + simSlot: simSlot, + ); + } catch (e) { + print("CallService: Error making call: $e"); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text("Error making call: $e")), + ); + return {"status": "error", "message": e.toString()}; + } + } + + Future> makeGsmCallWithSim( + BuildContext context, { + required String phoneNumber, + String? displayName, + Uint8List? thumbnail, + required int simSlot, + }) async { + try { + if (_activeCallNumber == phoneNumber && _isCallPageVisible) { + print('CallService: Call already active for $phoneNumber, skipping'); + return { + "status": "already_active", + "message": "Call already in progress" + }; + } + currentPhoneNumber = phoneNumber; + currentDisplayName = displayName ?? phoneNumber; + currentThumbnail = thumbnail; + currentSimSlot = simSlot; // Track the SIM slot being used + _simStateController.add(simSlot); // Notify UI of SIM change + if (displayName == null || thumbnail == null) { + await _fetchContactInfo(phoneNumber); + } + print( + 'CallService: Making GSM call to $phoneNumber, displayName: $currentDisplayName, simSlot: $simSlot'); + final result = await _channel.invokeMethod( + 'makeGsmCall', {"phoneNumber": phoneNumber, "simSlot": simSlot}); + print('CallService: makeGsmCall result: $result'); + final resultMap = Map.from(result as Map); + if (resultMap["status"] != "calling") { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text("Failed to initiate call")), + ); + } + return resultMap; + } catch (e) { + print("CallService: Error making call: $e"); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text("Error making call: $e")), + ); + return {"status": "error", "message": e.toString()}; + } + } + + // Pending SIM switch data + static Map? _pendingSimSwitch; + static bool _manualHangupFlag = false; // Track if hangup was manual + + // Getter to check if there's a pending SIM switch + static bool get hasPendingSimSwitch => _pendingSimSwitch != null; + Future> hangUpCall(BuildContext context) async { + try { + print('CallService: ========== HANGUP INITIATED =========='); + print('CallService: _pendingSimSwitch: ${_pendingSimSwitch != null}'); + print('CallService: _manualHangupFlag: $_manualHangupFlag'); + print('CallService: _isCallPageVisible: $_isCallPageVisible'); + + final result = await _channel.invokeMethod('hangUpCall'); + print('CallService: hangUpCall result: $result'); + final resultMap = Map.from(result as Map); + + if (resultMap["status"] != "ended") { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text("Failed to end call")), + ); + } else { + // If hangup was successful, ensure call page closes after a short delay + // This is a fallback in case the native call state events don't fire properly + Future.delayed(const Duration(milliseconds: 1500), () { + if (_isCallPageVisible) { + print( + 'CallService: FALLBACK - Force closing call page after hangup'); + _closeCallPage(); + _manualHangupFlag = false; // Reset flag + } + }); + } + + return resultMap; + } catch (e) { + print("CallService: Error hanging up call: $e"); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text("Error hanging up call: $e")), + ); + return {"status": "error", "message": e.toString()}; + } + } + + Future switchSimAndRedial({ + required String phoneNumber, + required String displayName, + required int simSlot, + Uint8List? thumbnail, + }) async { + try { + print( + 'CallService: Starting SIM switch to slot $simSlot for $phoneNumber'); + + // Store the redial information for after hangup + _pendingSimSwitch = { + 'phoneNumber': phoneNumber, + 'displayName': displayName, + 'simSlot': simSlot, + 'thumbnail': thumbnail, + }; + + // Hang up the current call - this will trigger the disconnected state + await _channel.invokeMethod('hangUpCall'); + print( + 'CallService: Hangup initiated, waiting for disconnection to complete redial'); + } catch (e) { + print('CallService: Error during SIM switch: $e'); + _pendingSimSwitch = null; + rethrow; + } + } + + void _handlePendingSimSwitch() async { + if (_pendingSimSwitch == null) return; + + final switchData = _pendingSimSwitch!; + _pendingSimSwitch = null; + + try { + print('CallService: Executing pending SIM switch redial'); + + // Wait a moment to ensure the previous call is fully disconnected + await Future.delayed(const Duration( + milliseconds: 1000)); // Store the new call info for the redial + currentPhoneNumber = switchData['phoneNumber']; + currentDisplayName = switchData['displayName']; + currentThumbnail = switchData['thumbnail']; + currentSimSlot = switchData['simSlot']; // Track the new SIM slot + _simStateController.add(switchData['simSlot']); // Notify UI of SIM change + + // Make the new call with the selected SIM + final result = await _channel.invokeMethod('makeGsmCall', { + 'phoneNumber': switchData['phoneNumber'], + 'simSlot': switchData['simSlot'], + }); + + print('CallService: SIM switch redial result: $result'); + + // Show success feedback + final context = navigatorKey.currentContext; + if (context != null) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text( + 'Switched to SIM ${switchData['simSlot'] + 1} and redialing...'), + backgroundColor: Colors.green, + ), + ); + } + } catch (e) { + print('CallService: Error during SIM switch redial: $e'); + + // Show error feedback and close the call page + final context = navigatorKey.currentContext; + if (context != null) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text('Failed to redial with new SIM: $e'), + backgroundColor: Colors.red, + ), + ); + // Close the call page since redial failed + _closeCallPage(); + } + } + } +} diff --git a/dialer/lib/domain/services/contact_service.dart b/dialer/lib/domain/services/contact_service.dart new file mode 100644 index 0000000..d961100 --- /dev/null +++ b/dialer/lib/domain/services/contact_service.dart @@ -0,0 +1,86 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_contacts/flutter_contacts.dart'; +import 'package:qr_flutter/qr_flutter.dart'; + +class ContactService { + Future> fetchContacts() async { + if (await FlutterContacts.requestPermission()) { + List contacts = await FlutterContacts.getContacts( + withProperties: true, + withThumbnail: true, + ); + return contacts; + } else { + // Permission denied + return []; + } + } + + Future> fetchFavoriteContacts() async { + if (await FlutterContacts.requestPermission()) { + // Get all contacts and filter for favorites + List allContacts = await FlutterContacts.getContacts( + withProperties: true, + withThumbnail: true, + ); + return allContacts.where((c) => c.isStarred).toList(); + } else { + // Permission denied + return []; + } + } + + Future addNewContact(Contact contact) async { + if (await FlutterContacts.requestPermission()) { + try { + return await FlutterContacts.insertContact(contact); + } catch (e) { + debugPrint('Error adding contact: $e'); + return null; + } + } + return null; + } + + void showContactQRCodeDialog(BuildContext context, Contact contact) { + final String vCard = contact.toVCard(); + + showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + backgroundColor: Colors.grey[900], + title: Text( + 'QR Code for ${contact.displayName}', + style: const TextStyle(color: Colors.white), + ), + content: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + color: Colors.white, + padding: const EdgeInsets.all(16.0), + child: QrImageView( + data: vCard, + version: QrVersions.auto, + size: 200.0, + ), + ), + const SizedBox(height: 16.0), + const Text( + 'Scan this code to add this contact', + style: TextStyle(color: Colors.white70), + ), + ], + ), + actions: [ + TextButton( + onPressed: () => Navigator.of(context).pop(), + child: const Text('Close'), + ), + ], + ); + }, + ); + } +} diff --git a/dialer/lib/domain/services/cryptography/asymmetric_crypto_service.dart b/dialer/lib/domain/services/cryptography/asymmetric_crypto_service.dart new file mode 100644 index 0000000..d270288 --- /dev/null +++ b/dialer/lib/domain/services/cryptography/asymmetric_crypto_service.dart @@ -0,0 +1,170 @@ +import 'dart:async'; +import 'dart:convert'; +import 'package:flutter/services.dart'; +import 'package:flutter_secure_storage/flutter_secure_storage.dart'; +import 'package:uuid/uuid.dart'; + +class AsymmetricCryptoService { + static const MethodChannel _channel = MethodChannel('com.example.keystore'); + final FlutterSecureStorage _secureStorage = FlutterSecureStorage(); + final String _aliasPrefix = 'icing_'; + final Uuid _uuid = Uuid(); + + /// Generates an ED25519 key pair with a unique alias and stores its metadata. + Future generateKeyPair({String? label}) async { + try { + // Generate a unique identifier for the key + final String uuid = _uuid.v4(); + final String alias = '$_aliasPrefix$uuid'; + + // Invoke native method to generate the key pair + await _channel.invokeMethod('generateKeyPair', {'alias': alias}); + + // Store key metadata securely + final Map keyMetadata = { + 'alias': alias, + 'label': label ?? 'Key $uuid', + 'created_at': DateTime.now().toIso8601String(), + }; + + // Retrieve existing keys + final String? existingKeys = await _secureStorage.read(key: 'keys'); + List keysList = existingKeys != null ? jsonDecode(existingKeys) : []; + + // Add the new key + keysList.add(keyMetadata); + + // Save updated keys list + await _secureStorage.write(key: 'keys', value: jsonEncode(keysList)); + + return alias; + } on PlatformException catch (e) { + throw Exception("Failed to generate key pair: ${e.message}"); + } + } + + /// Signs data using the specified key alias. + Future signData(String alias, String data) async { + try { + final String signature = await _channel.invokeMethod('signData', { + 'alias': alias, + 'data': data, + }); + return signature; + } on PlatformException catch (e) { + throw Exception("Failed to sign data with alias '$alias': ${e.message}"); + } + } + + /// Retrieves the public key for the specified alias. + Future getPublicKey(String alias) async { + try { + final String publicKey = await _channel.invokeMethod('getPublicKey', { + 'alias': alias, + }); + return publicKey; + } on PlatformException catch (e) { + throw Exception("Failed to retrieve public key: ${e.message}"); + } + } + + /// Deletes the key pair associated with the specified alias and removes its metadata. + Future deleteKeyPair(String alias) async { + try { + await _channel.invokeMethod('deleteKeyPair', {'alias': alias}); + + final String? existingKeys = await _secureStorage.read(key: 'keys'); + if (existingKeys != null) { + List keysList = jsonDecode(existingKeys); + keysList.removeWhere((key) => key['alias'] == alias); + await _secureStorage.write(key: 'keys', value: jsonEncode(keysList)); + } + } on PlatformException catch (e) { + throw Exception("Failed to delete key pair: ${e.message}"); + } + } + + /// Retrieves all stored key metadata. + Future>> getAllKeys() async { + try { + final String? existingKeys = await _secureStorage.read(key: 'keys'); + if (existingKeys == null) { + print("No keys found"); + return []; + } + List keysList = jsonDecode(existingKeys); + return keysList.cast>(); + } catch (e) { + throw Exception("Failed to retrieve keys: $e"); + } + } + + /// Checks if a key pair exists for the given alias. + Future keyPairExists(String alias) async { + try { + final bool exists = await _channel.invokeMethod('keyPairExists', {'alias': alias}); + return exists; + } on PlatformException catch (e) { + throw Exception("Failed to check key pair existence: ${e.message}"); + } + } + + /// Initializes the default key pair if it doesn't exist. + Future initializeDefaultKeyPair() async { + const String defaultAlias = 'icing_default'; + final List> keys = await getAllKeys(); + + // Check if the key exists in metadata + final bool defaultKeyExists = keys.any((key) => key['alias'] == defaultAlias); + + if (!defaultKeyExists) { + await _channel.invokeMethod('generateKeyPair', {'alias': defaultAlias}); + + final Map keyMetadata = { + 'alias': defaultAlias, + 'label': 'Default Key', + 'created_at': DateTime.now().toIso8601String(), + }; + + keys.add(keyMetadata); + await _secureStorage.write(key: 'keys', value: jsonEncode(keys)); + } + } + + /// Updates the label of a key with the specified alias. + /// + /// [alias]: The unique alias of the key to update. + /// [newLabel]: The new label to assign to the key. + /// + /// Throws an exception if the key is not found or the update fails. + Future updateKeyLabel(String alias, String newLabel) async { + try { + // Retrieve existing keys + final String? existingKeys = await _secureStorage.read(key: 'keys'); + if (existingKeys == null) { + throw Exception("No keys found to update."); + } + + List keysList = jsonDecode(existingKeys); + + // Find the key with the specified alias + bool keyFound = false; + for (var key in keysList) { + if (key['alias'] == alias) { + key['label'] = newLabel; + keyFound = true; + break; + } + } + + if (!keyFound) { + throw Exception("Key with alias \"$alias\" not found."); + } + + // Save the updated keys list + await _secureStorage.write(key: 'keys', value: jsonEncode(keysList)); + } catch (e) { + throw Exception("Failed to update key label: $e"); + } + } +} diff --git a/dialer/lib/domain/services/obfuscate_service.dart b/dialer/lib/domain/services/obfuscate_service.dart new file mode 100644 index 0000000..82f0bbf --- /dev/null +++ b/dialer/lib/domain/services/obfuscate_service.dart @@ -0,0 +1,91 @@ +// lib/services/obfuscate_service.dart +import 'package:dialer/presentation/common/widgets/color_darkener.dart'; + +import '../../core/config/app_config.dart'; +import 'dart:ui'; +import 'dart:typed_data'; +import 'package:flutter/material.dart'; + +class ObfuscateService { + // Private constructor + ObfuscateService._privateConstructor(); + + // Singleton instance + static final ObfuscateService _instance = ObfuscateService._privateConstructor(); + + // Factory constructor to return the same instance + factory ObfuscateService() { + return _instance; + } + + // Public method to obfuscate data + String obfuscateData(String data) { + if (AppConfig.isStealthMode) { + return _obfuscateData(data); + } else { + return data; + } + } + + // Private helper method for obfuscation logic + String _obfuscateData(String data) { + if (data.isNotEmpty) { + // Ensure the string has at least two characters to obfuscate + if (data.length == 1) { + return '${data[0]}'; + } else { + return '${data[0]}...${data[data.length - 1]}'; + } + } + return ''; + } +} + + +class ObfuscatedAvatar extends StatelessWidget { + final Uint8List? imageBytes; + final double radius; + final Color backgroundColor; + final String? fallbackInitial; + + const ObfuscatedAvatar({ + Key? key, + required this.imageBytes, + this.radius = 25, + this.backgroundColor = Colors.grey, + this.fallbackInitial, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + if (imageBytes != null && imageBytes!.isNotEmpty) { + return ClipOval( + child: ImageFiltered( + imageFilter: AppConfig.isStealthMode + ? ImageFilter.blur(sigmaX: 10, sigmaY: 10) + : ImageFilter.blur(sigmaX: 0, sigmaY: 0), + child: Image.memory( + imageBytes!, + fit: BoxFit.cover, + width: radius * 2, + height: radius * 2, + ), + ), + ); + } else { + return CircleAvatar( + radius: radius, + backgroundColor: backgroundColor, + child: Text( + fallbackInitial != null && fallbackInitial!.isNotEmpty + ? fallbackInitial![0].toUpperCase() + : '?', + style: TextStyle( + color: darken(backgroundColor), + fontSize: radius, + ), + ), + ); + } + } +} diff --git a/dialer/lib/domain/services/qr/qr_scanner.dart b/dialer/lib/domain/services/qr/qr_scanner.dart new file mode 100644 index 0000000..df405f6 --- /dev/null +++ b/dialer/lib/domain/services/qr/qr_scanner.dart @@ -0,0 +1,57 @@ +import 'package:flutter/material.dart'; +import 'package:mobile_scanner/mobile_scanner.dart'; + +class QRCodeScannerScreen extends StatefulWidget { + const QRCodeScannerScreen({super.key}); + + @override + _QRCodeScannerScreenState createState() => _QRCodeScannerScreenState(); +} + +class _QRCodeScannerScreenState extends State { + MobileScannerController cameraController = MobileScannerController(); + bool _flashEnabled = false; + + @override + void dispose() { + cameraController.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: const Text('Scan QR Code'), + actions: [ + IconButton( + icon: Icon(_flashEnabled ? Icons.flash_on : Icons.flash_off), + onPressed: () { + setState(() { + _flashEnabled = !_flashEnabled; + cameraController.toggleTorch(); + }); + }, + ), + IconButton( + icon: const Icon(Icons.flip_camera_ios), + onPressed: () => cameraController.switchCamera(), + ), + ], + ), + body: MobileScanner( + controller: cameraController, + onDetect: (capture) { + final List barcodes = capture.barcodes; + if (barcodes.isNotEmpty) { + // Return the first barcode value + final String? code = barcodes.first.rawValue; + if (code != null) { + Navigator.pop(context, code); + } + } + }, + ), + ); + } +} diff --git a/dialer/lib/globals.dart b/dialer/lib/globals.dart new file mode 100644 index 0000000..c1410d0 --- /dev/null +++ b/dialer/lib/globals.dart @@ -0,0 +1,7 @@ +// Global variables accessible throughout the app +library globals; + +import 'core/config/app_config.dart'; + +// Whether the app is in stealth mode (obfuscated content) +bool get isStealthMode => AppConfig.isStealthMode; \ No newline at end of file diff --git a/dialer/lib/main.dart b/dialer/lib/main.dart new file mode 100644 index 0000000..ad6f54e --- /dev/null +++ b/dialer/lib/main.dart @@ -0,0 +1,105 @@ +import 'package:dialer/presentation/features/home/home_page.dart'; +import 'package:dialer/presentation/features/home/default_dialer_prompt.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:permission_handler/permission_handler.dart'; +import 'package:provider/provider.dart'; + +import 'core/config/app_config.dart'; +import 'domain/services/call_service.dart'; +import 'domain/services/cryptography/asymmetric_crypto_service.dart'; +import 'presentation/features/contacts/contact_state.dart'; + +void main() async { + WidgetsFlutterBinding.ensureInitialized(); + + // Initialize app configuration + await AppConfig.initialize(); + + // Initialize cryptography service with error handling + final AsymmetricCryptoService cryptoService = AsymmetricCryptoService(); + try { + await cryptoService.initializeDefaultKeyPair(); + } catch (e) { + debugPrint('Error initializing cryptography: $e'); + // Continue app initialization even if crypto fails + } + + // Request permissions before running the app + await _requestPermissions(); + + // Initialize call service + CallService(); + + runApp( + MultiProvider( + providers: [ + Provider( + create: (_) => cryptoService, + ), + ], + child: const DialerApp(), + ), + ); +} + +Future _requestPermissions() async { + Map statuses = await [ + Permission.phone, + Permission.contacts, + Permission.microphone, + ].request(); + if (statuses.values.every((status) => status.isGranted)) { + print("All required permissions granted"); + const channel = MethodChannel('call_service'); + await channel.invokeMethod('permissionsGranted'); + } else { + print("Permissions denied: ${statuses.entries.where((e) => !e.value.isGranted).map((e) => e.key).join(', ')}"); + } +} + +class DialerApp extends StatelessWidget { + const DialerApp({super.key}); + + Future _isDefaultDialer() async { + const channel = MethodChannel('call_service'); + try { + final isDefault = await channel.invokeMethod('isDefaultDialer'); + return isDefault ?? false; + } catch (e) { + print('Error checking default dialer: $e'); + return false; + } + } + + @override + Widget build(BuildContext context) { + return ContactState( + child: MaterialApp( + title: 'Dialer App', + navigatorKey: CallService.navigatorKey, + theme: ThemeData( + brightness: Brightness.dark, + ), + initialRoute: '/', + routes: { + '/': (context) => FutureBuilder( + future: _isDefaultDialer(), + builder: (context, snapshot) { + if (snapshot.connectionState == ConnectionState.waiting) { + return Scaffold( + body: Center(child: CircularProgressIndicator()), + ); + } + if (snapshot.hasError || !snapshot.hasData || snapshot.data == false) { + return DefaultDialerPromptScreen(); + } + return SafeArea(child: MyHomePage()); + }, + ), + '/home': (context) => SafeArea(child: MyHomePage()), + }, + ), + ); + } +} \ No newline at end of file diff --git a/dialer/lib/presentation/common/theme/app_theme.dart b/dialer/lib/presentation/common/theme/app_theme.dart new file mode 100644 index 0000000..208a1de --- /dev/null +++ b/dialer/lib/presentation/common/theme/app_theme.dart @@ -0,0 +1,42 @@ +import 'package:flutter/material.dart'; + +class AppTheme { + static ThemeData get darkTheme => ThemeData( + brightness: Brightness.dark, + scaffoldBackgroundColor: Colors.black, + appBarTheme: const AppBarTheme( + backgroundColor: Colors.black, + elevation: 0, + ), + tabBarTheme: const TabBarThemeData( + labelColor: Colors.white, + unselectedLabelColor: Color.fromARGB(255, 158, 158, 158), + indicatorSize: TabBarIndicatorSize.label, + indicatorColor: Colors.white, + ), + bottomNavigationBarTheme: const BottomNavigationBarThemeData( + backgroundColor: Colors.black, + ), + floatingActionButtonTheme: const FloatingActionButtonThemeData( + backgroundColor: Colors.blue, + foregroundColor: Colors.white, + ), + textTheme: const TextTheme( + bodyLarge: TextStyle(color: Colors.white), + bodyMedium: TextStyle(color: Colors.white), + titleLarge: TextStyle(color: Colors.white), + ), + snackBarTheme: const SnackBarThemeData( + backgroundColor: Color(0xFF303030), + contentTextStyle: TextStyle(color: Colors.white), + ), + inputDecorationTheme: InputDecorationTheme( + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(8), + borderSide: BorderSide.none, + ), + filled: true, + fillColor: const Color.fromARGB(255, 30, 30, 30), + ), + ); +} diff --git a/dialer/lib/presentation/common/widgets/color_darkener.dart b/dialer/lib/presentation/common/widgets/color_darkener.dart new file mode 100644 index 0000000..be581cd --- /dev/null +++ b/dialer/lib/presentation/common/widgets/color_darkener.dart @@ -0,0 +1,21 @@ +import 'package:flutter/material.dart'; + +/// Darkens a color by a given percentage +Color darken(Color color, [double amount = 0.3]) { + assert(amount >= 0 && amount <= 1); + + final hsl = HSLColor.fromColor(color); + final darkened = hsl.withLightness((hsl.lightness - amount).clamp(0.0, 1.0)); + + return darkened.toColor(); +} + +/// Lightens a color by a given percentage +Color lighten(Color color, [double amount = 0.3]) { + assert(amount >= 0 && amount <= 1); + + final hsl = HSLColor.fromColor(color); + final lightened = hsl.withLightness((hsl.lightness + amount).clamp(0.0, 1.0)); + + return lightened.toColor(); +} \ No newline at end of file diff --git a/dialer/lib/presentation/common/widgets/loading_indicator.dart b/dialer/lib/presentation/common/widgets/loading_indicator.dart new file mode 100644 index 0000000..ecb22c1 --- /dev/null +++ b/dialer/lib/presentation/common/widgets/loading_indicator.dart @@ -0,0 +1,10 @@ +import 'package:flutter/material.dart'; + +class LoadingIndicatorWidget extends StatelessWidget { + const LoadingIndicatorWidget({super.key}); + + @override + Widget build(BuildContext context) { + return const Center(child: CircularProgressIndicator()); + } +} diff --git a/dialer/lib/presentation/common/widgets/qr_scanner.dart b/dialer/lib/presentation/common/widgets/qr_scanner.dart new file mode 100644 index 0000000..da0d80b --- /dev/null +++ b/dialer/lib/presentation/common/widgets/qr_scanner.dart @@ -0,0 +1,72 @@ +import 'package:flutter/material.dart'; +import 'package:mobile_scanner/mobile_scanner.dart'; + +class QRCodeScannerScreen extends StatefulWidget { + const QRCodeScannerScreen({Key? key}) : super(key: key); + + @override + _QRCodeScannerScreenState createState() => _QRCodeScannerScreenState(); +} + +class _QRCodeScannerScreenState extends State { + final MobileScannerController cameraController = MobileScannerController(); + bool isScanning = true; + + @override + void dispose() { + cameraController.dispose(); + super.dispose(); + } + + void _showInvalidQRDialog() { + showDialog( + context: context, + builder: (context) => AlertDialog( + title: const Text('Invalid QR Code'), + content: + const Text('The scanned QR code does not contain valid vCard data.'), + actions: [ + TextButton( + onPressed: () { + Navigator.of(context).pop(); // Close dialog + setState(() { + isScanning = true; // Resume scanning + }); + }, + child: const Text('Try Again'), + ), + ], + ), + ); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: const Text('Scan Contact QR Code'), + ), + body: MobileScanner( + controller: cameraController, + // allowDuplicates: false, // or true, depending on your preference + onDetect: (capture) { + if (!isScanning) return; + isScanning = false; // Stop multiple triggers + + final List barcodes = capture.barcodes; + for (final barcode in barcodes) { + final String? code = barcode.rawValue; + // If the QR code contains 'BEGIN:VCARD', let's assume it's a valid vCard + if (code != null && code.contains('BEGIN:VCARD')) { + Navigator.pop(context, code); // pop back with the full vCard text + return; + } + } + + // If no valid vCard was found in any of the barcodes + _showInvalidQRDialog(); + }, + ), + ); + } +} diff --git a/dialer/lib/presentation/common/widgets/sim_selection_dialog.dart b/dialer/lib/presentation/common/widgets/sim_selection_dialog.dart new file mode 100644 index 0000000..cd17034 --- /dev/null +++ b/dialer/lib/presentation/common/widgets/sim_selection_dialog.dart @@ -0,0 +1,204 @@ +import 'package:flutter/material.dart'; +import 'package:sim_data_new/sim_data.dart'; + +class SimSelectionDialog extends StatefulWidget { + final String phoneNumber; + final String displayName; + final Function(int simSlot) onSimSelected; + + const SimSelectionDialog({ + super.key, + required this.phoneNumber, + required this.displayName, + required this.onSimSelected, + }); + + @override + _SimSelectionDialogState createState() => _SimSelectionDialogState(); +} + +class _SimSelectionDialogState extends State { + SimData? _simData; + bool _isLoading = true; + String? _error; + int? _selectedSimSlot; + + @override + void initState() { + super.initState(); + _loadSimCards(); + } + + void _loadSimCards() async { + try { + final simData = await SimDataPlugin.getSimData(); + setState(() { + _simData = simData; + _isLoading = false; + _error = null; + }); + } catch (e) { + setState(() { + _isLoading = false; + _error = e.toString(); + }); + print('Error loading SIM cards: $e'); + } + } + + @override + Widget build(BuildContext context) { + return AlertDialog( + backgroundColor: Colors.grey[900], + title: const Text( + 'Select SIM for Call', + style: TextStyle(color: Colors.white), + ), + content: _buildContent(), + actions: [ + TextButton( + onPressed: () => Navigator.of(context).pop(), + child: const Text( + 'Cancel', + style: TextStyle(color: Colors.grey), + ), + ), + if (_selectedSimSlot != null) + TextButton( + onPressed: () { + widget.onSimSelected(_selectedSimSlot!); + Navigator.of(context).pop(); + }, + child: const Text( + 'Switch SIM', + style: TextStyle(color: Colors.blue), + ), + ), + ], + ); + } + + Widget _buildContent() { + if (_isLoading) { + return const SizedBox( + height: 100, + child: Center( + child: CircularProgressIndicator(color: Colors.blue), + ), + ); + } + + if (_error != null) { + return _buildErrorContent(); + } + + if (_simData?.cards.isEmpty ?? true) { + return _buildFallbackContent(); + } + + return _buildSimList(); + } + + Widget _buildErrorContent() { + return Column( + mainAxisSize: MainAxisSize.min, + children: [ + const Icon( + Icons.error_outline, + color: Colors.red, + size: 48, + ), + const SizedBox(height: 16), + Text( + 'Error loading SIM cards', + style: const TextStyle(color: Colors.white), + ), + const SizedBox(height: 8), + Text( + _error!, + style: const TextStyle(color: Colors.grey, fontSize: 12), + ), + const SizedBox(height: 16), + ElevatedButton( + onPressed: _loadSimCards, + child: const Text('Retry'), + ), + ], + ); + } + + Widget _buildFallbackContent() { + return Column( + mainAxisSize: MainAxisSize.min, + children: [ + _buildSimTile('SIM 1', 'Slot 0', 0), + _buildSimTile('SIM 2', 'Slot 1', 1), + ], + ); + } + + Widget _buildSimList() { + return Column( + mainAxisSize: MainAxisSize.min, + children: _simData!.cards.map((card) { + final index = _simData!.cards.indexOf(card); + return _buildSimTile( + _getSimDisplayName(card, index), + _getSimSubtitle(card), + card.slotIndex, + ); + }).toList(), + ); + } + + Widget _buildSimTile(String title, String subtitle, int slotIndex) { + return RadioListTile( + title: Text( + title, + style: const TextStyle(color: Colors.white), + ), + subtitle: Text( + subtitle, + style: const TextStyle(color: Colors.grey), + ), + value: slotIndex, + groupValue: _selectedSimSlot, + onChanged: (value) { + setState(() { + _selectedSimSlot = value; + }); + }, + activeColor: Colors.blue, + ); + } + + String _getSimDisplayName(dynamic card, int index) { + if (card.displayName != null && card.displayName.isNotEmpty) { + return card.displayName; + } + if (card.carrierName != null && card.carrierName.isNotEmpty) { + return card.carrierName; + } + return 'SIM ${index + 1}'; + } + + String _getSimSubtitle(dynamic card) { + List subtitleParts = []; + + if (card.phoneNumber != null && card.phoneNumber.isNotEmpty) { + subtitleParts.add(card.phoneNumber); + } + + if (card.carrierName != null && + card.carrierName.isNotEmpty && + (card.displayName == null || card.displayName.isEmpty)) { + subtitleParts.add(card.carrierName); + } + + if (subtitleParts.isEmpty) { + subtitleParts.add('Slot ${card.slotIndex}'); + } + + return subtitleParts.join(' • '); + } +} diff --git a/dialer/lib/presentation/common/widgets/username_color_generator.dart b/dialer/lib/presentation/common/widgets/username_color_generator.dart new file mode 100644 index 0000000..480cef4 --- /dev/null +++ b/dialer/lib/presentation/common/widgets/username_color_generator.dart @@ -0,0 +1,17 @@ +import 'package:flutter/material.dart'; + +/// Generates a deterministic color from a string input +Color generateColorFromName(String name) { + if (name.isEmpty) return Colors.grey; + + // Use the hashCode of the name to generate a consistent color + int hash = name.hashCode; + + // Use the hash to generate RGB values + final r = (hash & 0xFF0000) >> 16; + final g = (hash & 0x00FF00) >> 8; + final b = hash & 0x0000FF; + + // Create a color with these RGB values + return Color.fromARGB(255, r, g, b); +} diff --git a/dialer/lib/presentation/features/call/call_page.dart b/dialer/lib/presentation/features/call/call_page.dart new file mode 100644 index 0000000..aee2690 --- /dev/null +++ b/dialer/lib/presentation/features/call/call_page.dart @@ -0,0 +1,727 @@ +import 'dart:async'; +import 'package:flutter/material.dart'; +import 'package:flutter_contacts/flutter_contacts.dart'; +import 'package:dialer/domain/services/call_service.dart'; +import 'package:dialer/domain/services/obfuscate_service.dart'; +import 'package:dialer/presentation/common/widgets/username_color_generator.dart'; +import 'package:dialer/presentation/common/widgets/sim_selection_dialog.dart'; +import 'package:flutter/services.dart'; +import 'package:sim_data_new/sim_data.dart'; + +class CallPage extends StatefulWidget { + final String displayName; + final String phoneNumber; + final Uint8List? thumbnail; + + const CallPage({ + super.key, + required this.displayName, + required this.phoneNumber, + this.thumbnail, + }); + + @override + _CallPageState createState() => _CallPageState(); +} + +class _CallPageState extends State { + final ObfuscateService _obfuscateService = ObfuscateService(); + final CallService _callService = CallService(); + bool isMuted = false; + bool isSpeaker = false; + bool isKeypadVisible = false; + bool icingProtocolOk = true; + String _typedDigits = ""; + Timer? _callTimer; + int _callSeconds = 0; + String _callStatus = "Calling..."; + StreamSubscription? _callStateSubscription; + StreamSubscription>? _audioStateSubscription; + StreamSubscription? _simStateSubscription; + bool _isCallActive = true; // Track if call is still active + String? _simName; // Human-readable SIM card name + + bool get isNumberUnknown => widget.displayName == widget.phoneNumber; + + // Fetch and update human-readable SIM name based on slot + Future _updateSimName(int? simSlot) async { + if (!mounted) return; + if (simSlot != null) { + try { + final simData = await SimDataPlugin.getSimData(); + // Find the SIM card matching the slot index, if any + dynamic card; + for (var c in simData.cards) { + if (c.slotIndex == simSlot) { + card = c; + break; + } + } + String name; + if (card != null && card.displayName.isNotEmpty) { + name = card.displayName; + } else if (card != null && card.carrierName.isNotEmpty) { + name = card.carrierName; + } else { + name = 'SIM ${simSlot + 1}'; + } + setState(() { + _simName = name; + }); + } catch (e) { + setState(() { + _simName = 'SIM ${simSlot + 1}'; + }); + } + } else { + setState(() { + _simName = null; + }); + } + } + + @override + void initState() { + super.initState(); + _checkInitialCallState(); + _listenToCallState(); + _listenToAudioState(); + _listenToSimState(); + _updateSimName(CallService.getCurrentSimSlot); // Initial SIM name + _setInitialAudioState(); + } + + @override + void dispose() { + _callTimer?.cancel(); + _callStateSubscription?.cancel(); + _audioStateSubscription?.cancel(); + _simStateSubscription?.cancel(); + super.dispose(); + } + + void _setInitialAudioState() { + final initialAudioState = _callService.currentAudioState; + if (initialAudioState != null) { + setState(() { + isMuted = initialAudioState['muted'] ?? false; + isSpeaker = initialAudioState['speaker'] ?? false; + }); + } + } + + void _checkInitialCallState() async { + try { + final state = await _callService.getCallState(); + print('CallPage: Initial call state: $state'); + if (mounted) { + setState(() { + if (state == "active") { + _callStatus = "00:00"; + _isCallActive = true; + _startCallTimer(); + } else if (state == "disconnected" || state == "disconnecting") { + _callStatus = "Call Ended"; + _isCallActive = false; + } else { + _callStatus = "Calling..."; + _isCallActive = true; + } + }); + } + } catch (e) { + print('CallPage: Error checking initial state: $e'); + } + } + + void _listenToCallState() { + _callStateSubscription = _callService.callStateStream.listen((state) { + print('CallPage: Call state changed to $state'); + if (mounted) { + setState(() { + if (state == "active") { + _callStatus = "00:00"; + _isCallActive = true; + _startCallTimer(); + } else if (state == "disconnected" || state == "disconnecting") { + _callTimer?.cancel(); + _callStatus = "Call Ended"; + _isCallActive = false; + // Let CallService handle navigation - don't navigate from here + } else { + _callStatus = "Calling..."; + _isCallActive = true; + } + }); + } + }); + } + + void _listenToAudioState() { + _audioStateSubscription = _callService.audioStateStream.listen((state) { + if (mounted) { + setState(() { + isMuted = state['muted'] ?? isMuted; + isSpeaker = state['speaker'] ?? isSpeaker; + }); + } + }); + } + + void _listenToSimState() { + _simStateSubscription = _callService.simStateStream.listen((simSlot) { + _updateSimName(simSlot); + }); + } + + void _startCallTimer() { + _callTimer?.cancel(); + _callTimer = Timer.periodic(const Duration(seconds: 1), (timer) { + if (mounted) { + setState(() { + _callSeconds++; + final minutes = (_callSeconds ~/ 60).toString().padLeft(2, '0'); + final seconds = (_callSeconds % 60).toString().padLeft(2, '0'); + _callStatus = '$minutes:$seconds'; + }); + } + }); + } + + void _addDigit(String digit) async { + print('CallPage: Tapped digit: $digit'); + setState(() { + _typedDigits += digit; + }); + // Send DTMF tone + const channel = MethodChannel('call_service'); + try { + final success = + await channel.invokeMethod('sendDtmfTone', {'digit': digit}); + if (success != true) { + print('CallPage: Failed to send DTMF tone for $digit'); + if (mounted) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text('Failed to send DTMF tone')), + ); + } + } + } catch (e) { + print('CallPage: Error sending DTMF tone: $e'); + if (mounted) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text('Error sending DTMF tone: $e')), + ); + } + } + } + + void _toggleMute() async { + try { + print('CallPage: Toggling mute, current state: $isMuted'); + final result = await _callService.muteCall(context, mute: !isMuted); + print('CallPage: Mute call result: $result'); + if (mounted && result['status'] != 'success') { + print('CallPage: Failed to toggle mute: ${result['message']}'); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text('Failed to toggle mute: ${result['message']}')), + ); + } + } catch (e) { + print('CallPage: Error toggling mute: $e'); + if (mounted) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text('Error toggling mute: $e')), + ); + } + } + } + + Future _toggleSpeaker() async { + try { + print('CallPage: Toggling speaker, current state: $isSpeaker'); + final result = + await _callService.speakerCall(context, speaker: !isSpeaker); + print('CallPage: Speaker call result: $result'); + if (mounted && result['status'] != 'success') { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text('Failed to toggle speaker: ${result['message']}')), + ); + } + } catch (e) { + print('CallPage: Error toggling speaker: $e'); + if (mounted) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text('Error toggling speaker: $e')), + ); + } + } + } + + void _toggleKeypad() { + setState(() { + isKeypadVisible = !isKeypadVisible; + }); + } + + void _showSimSelectionDialog() { + showDialog( + context: context, + builder: (BuildContext context) { + return SimSelectionDialog( + phoneNumber: widget.phoneNumber, + displayName: widget.displayName, + onSimSelected: _switchToNewSim, + ); + }, + ); + } + + void _switchToNewSim(int simSlot) async { + try { + print( + 'CallPage: Initiating SIM switch to slot $simSlot for ${widget.phoneNumber}'); + + // Use the CallService to handle the SIM switch logic + await _callService.switchSimAndRedial( + phoneNumber: widget.phoneNumber, + displayName: widget.displayName, + simSlot: simSlot, + thumbnail: widget.thumbnail, + ); + + print('CallPage: SIM switch initiated successfully'); + } catch (e) { + print('CallPage: Error initiating SIM switch: $e'); + + // Show error feedback if widget is still mounted + if (mounted) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text('Error switching SIM: $e'), + backgroundColor: Colors.red, + ), + ); + } + } + } + + void _hangUp() async { + // Don't try to hang up if call is already ended + if (!_isCallActive) { + print('CallPage: Ignoring hangup - call already ended'); + return; + } + + try { + print( + 'CallPage: Initiating manual hangUp - canceling any pending SIM switch'); + + // Immediately mark call as inactive to prevent further interactions + setState(() { + _isCallActive = false; + _callStatus = "Ending Call..."; + }); + + // Cancel any pending SIM switch since user is manually hanging up + _callService.cancelPendingSimSwitch(); + + final result = await _callService.hangUpCall(context); + print('CallPage: Hang up result: $result'); + + // If the page is still visible after hangup, try to close it + if (mounted && ModalRoute.of(context)?.isCurrent == true) { + print('CallPage: Still visible after hangup, navigating back'); + Navigator.of(context).popUntil((route) => route.isFirst); + } + } catch (e) { + print('CallPage: Error hanging up: $e'); + if (mounted) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text('Error hanging up: $e')), + ); + } + } + } + + void _addContact() async { + if (await FlutterContacts.requestPermission()) { + final newContact = Contact()..phones = [Phone(widget.phoneNumber)]; + final updatedContact = + await FlutterContacts.openExternalInsert(newContact); + if (mounted && updatedContact != null) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text('Contact added successfully!')), + ); + } + } else { + if (mounted) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text('Permission denied for contacts')), + ); + } + } + } + + @override + Widget build(BuildContext context) { + final double avatarRadius = isKeypadVisible ? 45.0 : 45.0; + final double nameFontSize = isKeypadVisible ? 24.0 : 24.0; + final double statusFontSize = isKeypadVisible ? 16.0 : 16.0; + + print( + 'CallPage: Building UI, _callStatus: $_callStatus, route: ${ModalRoute.of(context)?.settings.name ?? "unknown"}'); + + // If call is disconnected and we're not actively navigating, force navigation + if ((_callStatus == "Call Ended" || !_isCallActive) && mounted) { + WidgetsBinding.instance.addPostFrameCallback((_) { + if (mounted && ModalRoute.of(context)?.isCurrent == true) { + print('CallPage: Call ended, forcing navigation back to home'); + Navigator.of(context).popUntil((route) => route.isFirst); + } + }); + } + + return PopScope( + canPop: + true, // Always allow popping - CallService manages when it's appropriate + onPopInvoked: (didPop) { + print( + 'CallPage: PopScope onPopInvoked - didPop: $didPop, _isCallActive: $_isCallActive, _callStatus: $_callStatus'); + // No longer prevent popping during active calls - CallService handles this + }, + child: Scaffold( + body: Container( + color: Colors.black, + child: SafeArea( + child: Column( + children: [ + Container( + padding: const EdgeInsets.symmetric(vertical: 8.0), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + const SizedBox(height: 35), + ObfuscatedAvatar( + imageBytes: widget.thumbnail, + radius: avatarRadius, + backgroundColor: + generateColorFromName(widget.displayName), + fallbackInitial: widget.displayName, + ), + const SizedBox(height: 4), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Icon( + icingProtocolOk ? Icons.lock : Icons.lock_open, + color: icingProtocolOk ? Colors.green : Colors.red, + size: 16, + ), + const SizedBox(width: 4), + Text( + 'Icing protocol: ${icingProtocolOk ? "ok" : "ko"}', + style: TextStyle( + color: + icingProtocolOk ? Colors.green : Colors.red, + fontSize: 12, + fontWeight: FontWeight.bold, + ), + ), + ], + ), + const SizedBox(height: 4), + Text( + _obfuscateService.obfuscateData(widget.displayName), + style: TextStyle( + fontSize: nameFontSize, + color: Colors.white, + fontWeight: FontWeight.bold, + ), + ), + Text( + widget.phoneNumber, + style: TextStyle( + fontSize: statusFontSize, + color: Colors.white70, + ), + ), + Text( + _callStatus, + style: TextStyle( + fontSize: statusFontSize, + color: Colors.white70, + ), + ), + // Show SIM information if a SIM slot has been set + if (_simName != null) + Container( + margin: const EdgeInsets.only(top: 4.0), + padding: const EdgeInsets.symmetric( + horizontal: 8.0, vertical: 2.0), + decoration: BoxDecoration( + color: Colors.blue.withOpacity(0.2), + borderRadius: BorderRadius.circular(12), + border: Border.all( + color: Colors.blue.withOpacity(0.5), + width: 1, + ), + ), + child: Text( + // Show human-readable SIM name plus slot number + '$_simName (SIM ${CallService.getCurrentSimSlot! + 1})', + style: TextStyle( + fontSize: statusFontSize - 2, + color: Colors.lightBlueAccent, + fontWeight: FontWeight.w500, + ), + ), + ), + ], + ), + ), + Expanded( + child: Column( + children: [ + if (isKeypadVisible) ...[ + const Spacer(flex: 2), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 20.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Expanded( + child: Text( + _typedDigits, + maxLines: 1, + textAlign: TextAlign.right, + overflow: TextOverflow.ellipsis, + style: const TextStyle( + fontSize: 24, + color: Colors.white, + fontWeight: FontWeight.bold, + ), + ), + ), + IconButton( + padding: EdgeInsets.zero, + onPressed: _toggleKeypad, + icon: const Icon( + Icons.close, + color: Colors.white, + ), + ), + ], + ), + ), + Container( + height: MediaQuery.of(context).size.height * 0.4, + margin: const EdgeInsets.symmetric(horizontal: 20), + padding: const EdgeInsets.all(8), + child: GridView.count( + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + crossAxisCount: 3, + childAspectRatio: 1.5, + mainAxisSpacing: 8, + crossAxisSpacing: 8, + children: List.generate(12, (index) { + String label; + if (index < 9) { + label = '${index + 1}'; + } else if (index == 9) { + label = '*'; + } else if (index == 10) { + label = '0'; + } else { + label = '#'; + } + return GestureDetector( + onTap: () => _addDigit(label), + child: Container( + decoration: const BoxDecoration( + shape: BoxShape.circle, + color: Colors.transparent, + ), + child: Center( + child: Text( + label, + style: const TextStyle( + fontSize: 32, + color: Colors.white, + ), + ), + ), + ), + ); + }), + ), + ), + const Spacer(flex: 1), + ] else ...[ + const Spacer(), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 32.0), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Row( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, + children: [ + Column( + mainAxisSize: MainAxisSize.min, + children: [ + IconButton( + onPressed: _toggleMute, + icon: Icon( + isMuted ? Icons.mic_off : Icons.mic, + color: isMuted + ? Colors.amber + : Colors.white, + size: 32, + ), + ), + Text( + isMuted ? 'Unmute' : 'Mute', + style: const TextStyle( + color: Colors.white, + fontSize: 14, + ), + ), + ], + ), + Column( + mainAxisSize: MainAxisSize.min, + children: [ + IconButton( + onPressed: _toggleKeypad, + icon: const Icon( + Icons.dialpad, + color: Colors.white, + size: 32, + ), + ), + const Text( + 'Keypad', + style: TextStyle( + color: Colors.white, + fontSize: 14, + ), + ), + ], + ), + Column( + mainAxisSize: MainAxisSize.min, + children: [ + IconButton( + onPressed: _toggleSpeaker, + icon: Icon( + isSpeaker + ? Icons.volume_up + : Icons.volume_off, + color: isSpeaker + ? Colors.amber + : Colors.white, + size: 32, + ), + ), + const Text( + 'Speaker', + style: TextStyle( + color: Colors.white, + fontSize: 14, + ), + ), + ], + ), + ], + ), + const SizedBox(height: 20), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, + children: [ + if (isNumberUnknown) + Column( + mainAxisSize: MainAxisSize.min, + children: [ + IconButton( + onPressed: _addContact, + icon: const Icon( + Icons.person_add, + color: Colors.white, + size: 32, + ), + ), + const Text( + 'Add Contact', + style: TextStyle( + color: Colors.white, + fontSize: 14, + ), + ), + ], + ), + Column( + mainAxisSize: MainAxisSize.min, + children: [ + IconButton( + onPressed: _isCallActive + ? _showSimSelectionDialog + : null, + icon: Icon( + Icons.sim_card, + color: _isCallActive + ? Colors.white + : Colors.grey, + size: 32, + ), + ), + const Text( + 'Change SIM', + style: TextStyle( + color: Colors.white, + fontSize: 14, + ), + ), + ], + ), + ], + ), + ], + ), + ), + const Spacer(flex: 3), + ], + ], + ), + ), + Padding( + padding: const EdgeInsets.only(bottom: 16.0), + child: GestureDetector( + onTap: _isCallActive ? _hangUp : null, + child: Container( + padding: const EdgeInsets.all(12), + decoration: BoxDecoration( + color: _isCallActive ? Colors.red : Colors.grey, + shape: BoxShape.circle, + ), + child: Icon( + _isCallActive ? Icons.call_end : Icons.call_end, + color: Colors.white, + size: 32, + ), + ), + ), + ), + ], + ), + ), + ), + ), + ); + } +} diff --git a/dialer/lib/presentation/features/call/incoming_call_page.dart b/dialer/lib/presentation/features/call/incoming_call_page.dart new file mode 100644 index 0000000..e1eae95 --- /dev/null +++ b/dialer/lib/presentation/features/call/incoming_call_page.dart @@ -0,0 +1,163 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'dart:typed_data'; +import '../../../domain/services/call_service.dart'; +import '../../../domain/services/obfuscate_service.dart'; +import 'package:dialer/presentation/common/widgets/username_color_generator.dart'; +import 'call_page.dart'; + +class IncomingCallPage extends StatefulWidget { + final String displayName; + final String phoneNumber; + final Uint8List? thumbnail; + + const IncomingCallPage({ + super.key, + required this.displayName, + required this.phoneNumber, + this.thumbnail, + }); + + @override + _IncomingCallPageState createState() => _IncomingCallPageState(); +} + +class _IncomingCallPageState extends State { + static const MethodChannel _channel = MethodChannel('call_service'); + final ObfuscateService _obfuscateService = ObfuscateService(); + final CallService _callService = CallService(); + + void _answerCall() async { + try { + final result = await _channel.invokeMethod('answerCall'); + debugPrint('IncomingCallPage: Answer call result: $result'); + + if (result["status"] == "answered") { + if (!mounted) return; + + Navigator.pushReplacement( + context, + MaterialPageRoute( + builder: (context) => CallPage( + displayName: widget.displayName, + phoneNumber: widget.phoneNumber, + thumbnail: widget.thumbnail, + ), + ), + ); + } + } catch (e) { + debugPrint("IncomingCallPage: Error answering call: $e"); + if (!mounted) return; + + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text("Error answering call: $e")), + ); + } + } + + void _declineCall() async { + try { + await _callService.hangUpCall(context); + } catch (e) { + debugPrint("IncomingCallPage: Error declining call: $e"); + if (!mounted) return; + + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text("Error declining call: $e")), + ); + } + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.black, + body: SafeArea( + child: Column( + children: [ + const Spacer(), + ObfuscatedAvatar( + imageBytes: widget.thumbnail, + radius: 60, + backgroundColor: generateColorFromName(widget.displayName), + fallbackInitial: widget.displayName, + ), + const SizedBox(height: 24), + Text( + _obfuscateService.obfuscateData(widget.displayName), + style: const TextStyle( + fontSize: 28, + color: Colors.white, + fontWeight: FontWeight.bold, + ), + ), + Text( + widget.phoneNumber, + style: const TextStyle(fontSize: 18, color: Colors.white70), + ), + const SizedBox(height: 16), + const Text( + 'Incoming Call', + style: TextStyle(fontSize: 20, color: Colors.white70), + ), + const Spacer(), + Padding( + padding: const EdgeInsets.only(bottom: 48.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + _buildActionButton( + icon: Icons.call_end, + color: Colors.red, + onPressed: _declineCall, + label: 'Decline', + ), + _buildActionButton( + icon: Icons.call, + color: Colors.green, + onPressed: _answerCall, + label: 'Answer', + ), + ], + ), + ), + ], + ), + ), + ); + } + + Widget _buildActionButton({ + required IconData icon, + required Color color, + required VoidCallback onPressed, + required String label, + }) { + return Column( + mainAxisSize: MainAxisSize.min, + children: [ + GestureDetector( + onTap: onPressed, + child: Container( + padding: const EdgeInsets.all(16), + decoration: BoxDecoration( + color: color, + shape: BoxShape.circle, + ), + child: Icon( + icon, + color: Colors.white, + size: 32, + ), + ), + ), + const SizedBox(height: 8), + Text( + label, + style: const TextStyle(color: Colors.white), + ), + ], + ); + } +} \ No newline at end of file diff --git a/dialer/lib/presentation/features/composition/composition.dart b/dialer/lib/presentation/features/composition/composition.dart new file mode 100644 index 0000000..14cd776 --- /dev/null +++ b/dialer/lib/presentation/features/composition/composition.dart @@ -0,0 +1,335 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_contacts/flutter_contacts.dart'; +import 'package:url_launcher/url_launcher.dart'; +import '../../../domain/services/contact_service.dart'; +import '../../../domain/services/obfuscate_service.dart'; +import '../../../domain/services/call_service.dart'; + +class CompositionPage extends StatefulWidget { + const CompositionPage({super.key}); + + @override + _CompositionPageState createState() => _CompositionPageState(); +} + +class _CompositionPageState extends State { + String dialedNumber = ""; + List _allContacts = []; + List _filteredContacts = []; + final ContactService _contactService = ContactService(); + final ObfuscateService _obfuscateService = ObfuscateService(); + final CallService _callService = CallService(); + + @override + void initState() { + super.initState(); + _fetchContacts(); + } + + Future _fetchContacts() async { + _allContacts = await _contactService.fetchContacts(); + _filteredContacts = _allContacts; + setState(() {}); + } + + void _filterContacts() { + setState(() { + _filteredContacts = _allContacts.where((contact) { + bool phoneMatch = contact.phones.any((phone) { + final rawPhoneNumber = phone.number; + final strippedPhoneNumber = rawPhoneNumber.replaceAll(RegExp(r'\D'), ''); + final strippedDialedNumber = dialedNumber.replaceAll(RegExp(r'\D'), ''); + return rawPhoneNumber.contains(dialedNumber) || + strippedPhoneNumber.contains(strippedDialedNumber); + }); + final nameMatch = contact.displayName + .toLowerCase() + .contains(dialedNumber.toLowerCase()); + return phoneMatch || nameMatch; + }).toList(); + }); + } + + void _onNumberPress(String number) { + setState(() { + dialedNumber += number; + _filterContacts(); + }); + } + + void _onPlusPress() { + setState(() { + dialedNumber += '+'; + _filterContacts(); + }); + } + + void _onDeletePress() { + setState(() { + if (dialedNumber.isNotEmpty) { + dialedNumber = dialedNumber.substring(0, dialedNumber.length - 1); + _filterContacts(); + } + }); + } + + void _onClearPress() { + setState(() { + dialedNumber = ""; + _filteredContacts = _allContacts; + }); + } + + void _makeCall(String phoneNumber) async { + try { + await _callService.makeGsmCall(context, phoneNumber: phoneNumber); + setState(() { + dialedNumber = phoneNumber; + }); + } catch (e) { + debugPrint("Error making call: $e"); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text('Failed to make call: $e')), + ); + } + } + + void _launchSms(String phoneNumber) async { + final uri = Uri(scheme: 'sms', path: phoneNumber); + if (await canLaunchUrl(uri)) { + await launchUrl(uri); + } else { + debugPrint('Could not send SMS to $phoneNumber'); + } + } + + void _addContact() async { + if (await FlutterContacts.requestPermission()) { + final newContact = Contact() + ..phones = [Phone(dialedNumber.isNotEmpty ? dialedNumber : '')]; + final updatedContact = await FlutterContacts.openExternalInsert(newContact); + if (updatedContact != null) { + _fetchContacts(); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text('Contact added successfully!')), + ); + } + } + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.black, + body: Stack( + children: [ + Column( + children: [ + Expanded( + flex: 2, + child: Container( + padding: const EdgeInsets.only( + top: 42.0, left: 16.0, right: 16.0, bottom: 16.0), + color: Colors.black, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + child: ListView( + children: [ + ..._filteredContacts.map((contact) { + final phoneNumber = contact.phones.isNotEmpty + ? contact.phones.first.number + : 'No phone number'; + return ListTile( + title: Text( + _obfuscateService.obfuscateData(contact.displayName), + style: const TextStyle(color: Colors.white), + ), + subtitle: Text( + _obfuscateService.obfuscateData(phoneNumber), + style: const TextStyle(color: Colors.grey), + ), + trailing: Row( + mainAxisSize: MainAxisSize.min, + children: [ + IconButton( + icon: Icon(Icons.phone, color: Colors.green[300], size: 20), + onPressed: () => _makeCall(phoneNumber), + ), + IconButton( + icon: Icon(Icons.message, color: Colors.blue[300], size: 20), + onPressed: () => _launchSms(phoneNumber), + ), + ], + ), + onTap: () {}, + ); + }).toList(), + ListTile( + title: const Text( + 'Add a contact', + style: TextStyle(color: Colors.white), + ), + trailing: Icon(Icons.add, color: Colors.grey[600]), + onTap: _addContact, + ), + ], + ), + ), + ], + ), + ), + ), + Expanded( + flex: 2, + child: Container( + padding: const EdgeInsets.symmetric(horizontal: 16.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Expanded( + child: Align( + alignment: Alignment.center, + child: Text( + dialedNumber, + style: const TextStyle(fontSize: 24, color: Colors.white), + overflow: TextOverflow.ellipsis, + ), + ), + ), + GestureDetector( + onTap: _onDeletePress, + onLongPress: _onClearPress, + child: const Padding( + padding: EdgeInsets.all(8.0), + child: Icon(Icons.backspace, color: Colors.white), + ), + ), + ], + ), + const SizedBox(height: 10), + Expanded( + child: SingleChildScrollView( + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + _buildDialButton('1', Colors.white), + _buildDialButton('2', Colors.white), + _buildDialButton('3', Colors.white), + ], + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + _buildDialButton('4', Colors.white), + _buildDialButton('5', Colors.white), + _buildDialButton('6', Colors.white), + ], + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + _buildDialButton('7', Colors.white), + _buildDialButton('8', Colors.white), + _buildDialButton('9', Colors.white), + ], + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + _buildDialButton('*', const Color.fromRGBO(117, 117, 117, 1)), + _buildDialButtonWithPlus('0'), + _buildDialButton('#', const Color.fromRGBO(117, 117, 117, 1)), + ], + ), + ], + ), + ), + ), + ], + ), + ), + ), + ], + ), + Positioned( + bottom: 20.0, + left: 0, + right: 0, + child: Center( + child: ElevatedButton( + onPressed: dialedNumber.isNotEmpty ? () => _makeCall(dialedNumber) : null, + style: ElevatedButton.styleFrom( + backgroundColor: Colors.green[700], + shape: const CircleBorder(), + padding: const EdgeInsets.all(20), + ), + child: const Icon(Icons.phone, color: Colors.white, size: 30), + ), + ), + ), + Positioned( + top: 40.0, + left: 16.0, + child: IconButton( + icon: const Icon(Icons.arrow_back, color: Colors.white), + onPressed: () => Navigator.pop(context), + ), + ), + ], + ), + ); + } + + Widget _buildDialButton(String number, Color textColor) { + return ElevatedButton( + onPressed: () => _onNumberPress(number), + style: ElevatedButton.styleFrom( + backgroundColor: Colors.black, + shape: const CircleBorder(), + padding: const EdgeInsets.all(16), + ), + child: Text( + number, + style: TextStyle(fontSize: 24, color: textColor), + ), + ); + } + + Widget _buildDialButtonWithPlus(String number) { + return Stack( + alignment: Alignment.center, + children: [ + GestureDetector( + onLongPress: _onPlusPress, + child: ElevatedButton( + onPressed: () => _onNumberPress(number), + style: ElevatedButton.styleFrom( + backgroundColor: Colors.black, + shape: const CircleBorder(), + padding: const EdgeInsets.all(16), + ), + child: Text( + number, + style: const TextStyle(fontSize: 24, color: Colors.white), + ), + ), + ), + Positioned( + bottom: 8, + child: Text( + '+', + style: TextStyle(fontSize: 12, color: Colors.grey[600]), + ), + ), + ], + ); + } +} \ No newline at end of file diff --git a/dialer/lib/presentation/features/contacts/contact_page.dart b/dialer/lib/presentation/features/contacts/contact_page.dart new file mode 100644 index 0000000..bebaad3 --- /dev/null +++ b/dialer/lib/presentation/features/contacts/contact_page.dart @@ -0,0 +1,20 @@ +import 'package:flutter/material.dart'; +import '../contacts/contact_state.dart'; +import '../contacts/widgets/alphabet_scroll_page.dart'; + +class ContactPage extends StatelessWidget { + const ContactPage({super.key}); + + @override + Widget build(BuildContext context) { + final contactState = ContactState.of(context); + return Scaffold( + body: contactState.loading + ? const Center(child: CircularProgressIndicator()) + : AlphabetScrollPage( + scrollOffset: contactState.scrollOffset, + contacts: contactState.contacts, + ), + ); + } +} diff --git a/dialer/lib/presentation/features/contacts/contact_state.dart b/dialer/lib/presentation/features/contacts/contact_state.dart new file mode 100644 index 0000000..2cf192d --- /dev/null +++ b/dialer/lib/presentation/features/contacts/contact_state.dart @@ -0,0 +1,178 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_contacts/flutter_contacts.dart'; +import '../../../domain/services/contact_service.dart'; + +class ContactState extends StatefulWidget { + final Widget child; + + const ContactState({super.key, required this.child}); + + static _ContactStateState of(BuildContext context) { + return context + .dependOnInheritedWidgetOfExactType<_InheritedContactState>()! + .data; + } + + @override + _ContactStateState createState() => _ContactStateState(); +} + +class _ContactStateState extends State { + final ContactService _contactService = ContactService(); + List _allContacts = []; + List _favoriteContacts = []; + bool _loading = true; + double _scrollOffset = 0.0; + Contact? _selfContact; + + // Getters for all contacts and favorites + List get contacts => _allContacts; + List get favoriteContacts => _favoriteContacts; + bool get loading => _loading; + double get scrollOffset => _scrollOffset; + Contact? get selfContact => _selfContact; + + @override + void initState() { + super.initState(); + _initializeContacts(); // Rename to make it clear this is initialization + FlutterContacts.addListener(_onContactChange); + } + + // Private method to initialize contacts without setState during build + Future _initializeContacts() async { + try { + List contacts = await _contactService.fetchContacts(); + _processContactsInitial(contacts); + } catch (e) { + debugPrint('Error fetching contacts: $e'); + } + } + + void _onContactChange() async { + await fetchContacts(); + } + + @override + void dispose() { + FlutterContacts.removeListener(_onContactChange); + super.dispose(); + } + + // Fetch all contacts - public method that can be called after build + Future fetchContacts() async { + if (!mounted) return; + + setState(() => _loading = true); + try { + List contacts = await _contactService.fetchContacts(); + if (mounted) { + _processContacts(contacts); + } + } catch (e) { + debugPrint('Error fetching contacts: $e'); + } finally { + if (mounted) { + setState(() => _loading = false); + } + } + } + + // Fetch only favorite contacts + Future fetchFavoriteContacts() async { + if (!mounted) return; + + setState(() => _loading = true); + try { + List contacts = await _contactService.fetchFavoriteContacts(); + if (mounted) { + setState(() => _favoriteContacts = contacts); + } + } catch (e) { + debugPrint('Error fetching favorite contacts: $e'); + } finally { + if (mounted) { + setState(() => _loading = false); + } + } + } + + // Process contacts without setState for initial loading + void _processContactsInitial(List contacts) { + if (!mounted) return; + + // Optimize by doing a single pass through contacts instead of multiple iterations + final filteredContacts = contacts.where((contact) => contact.phones.isNotEmpty).toList() + ..sort((a, b) => a.displayName.compareTo(b.displayName)); + + _selfContact = contacts.firstWhere( + (contact) => contact.displayName.toLowerCase() == "user", + orElse: () => Contact(), + ); + + if (_selfContact!.phones.isEmpty) { + _selfContact = null; + } + + _allContacts = filteredContacts; + _favoriteContacts = filteredContacts.where((contact) => contact.isStarred).toList(); + _loading = false; + + // Force a rebuild after initialization is complete + if (mounted) { + WidgetsBinding.instance.addPostFrameCallback((_) { + setState(() {}); + }); + } + } + + void _processContacts(List contacts) { + if (!mounted) return; + + // Same optimization as above + final filteredContacts = contacts.where((contact) => contact.phones.isNotEmpty).toList() + ..sort((a, b) => a.displayName.compareTo(b.displayName)); + + _selfContact = contacts.firstWhere( + (contact) => contact.displayName.toLowerCase() == "user", + orElse: () => Contact(), + ); + + if (_selfContact!.phones.isEmpty) { + _selfContact = null; + } + + setState(() { + _allContacts = filteredContacts; + _favoriteContacts = filteredContacts.where((contact) => contact.isStarred).toList(); + }); + } + + Future addNewContact(Contact contact) async { + await _contactService.addNewContact(contact); + await fetchContacts(); + } + + void setScrollOffset(double offset) { + setState(() { + _scrollOffset = offset; + }); + } + + @override + Widget build(BuildContext context) { + return _InheritedContactState( + data: this, + child: widget.child, + ); + } +} + +class _InheritedContactState extends InheritedWidget { + final _ContactStateState data; + + const _InheritedContactState({required this.data, required super.child}); + + @override + bool updateShouldNotify(_InheritedContactState oldWidget) => true; +} diff --git a/dialer/lib/presentation/features/contacts/widgets/add_contact_button.dart b/dialer/lib/presentation/features/contacts/widgets/add_contact_button.dart new file mode 100644 index 0000000..947bbcf --- /dev/null +++ b/dialer/lib/presentation/features/contacts/widgets/add_contact_button.dart @@ -0,0 +1,63 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_contacts/flutter_contacts.dart'; +import '../../../../domain/services/qr/qr_scanner.dart'; + +class AddContactButton extends StatelessWidget { + const AddContactButton({super.key}); + + @override + Widget build(BuildContext context) { + return IconButton( + icon: const Icon(Icons.add, color: Colors.blue), + onPressed: () { + showDialog( + context: context, + barrierDismissible: true, // Allows dismissal by tapping outside + builder: (BuildContext context) { + return AlertDialog( + backgroundColor: Colors.black, + content: Column( + mainAxisSize: MainAxisSize.min, + children: [ + TextButton( + onPressed: () async { + Navigator.of(context).pop(); // close dialog + + // Go to QR Scanner + final vCardString = await Navigator.push( + context, + MaterialPageRoute( + builder: (context) => const QRCodeScannerScreen(), + ), + ); + + if (vCardString != null && vCardString is String) { + await FlutterContacts.openExternalInsert(Contact + .fromVCard(vCardString)); + } + }, + child: const Text( + "Scan QR code", + style: TextStyle(color: Colors.white), + ), + ), + TextButton( + onPressed: () async { + Navigator.of(context).pop(); + // Create a blank contact entry + await FlutterContacts.openExternalInsert(); + }, + child: const Text( + "Create new contact", + style: TextStyle(color: Colors.white), + ), + ), + ], + ), + ); + }, + ); + }, + ); + } +} diff --git a/dialer/lib/presentation/features/contacts/widgets/alphabet_scroll_page.dart b/dialer/lib/presentation/features/contacts/widgets/alphabet_scroll_page.dart new file mode 100644 index 0000000..ff723fe --- /dev/null +++ b/dialer/lib/presentation/features/contacts/widgets/alphabet_scroll_page.dart @@ -0,0 +1,232 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_contacts/flutter_contacts.dart'; +import '../../../../domain/services/obfuscate_service.dart'; +import 'package:dialer/presentation/common/widgets/username_color_generator.dart'; +import '../contact_state.dart'; +import 'add_contact_button.dart'; +import 'contact_modal.dart'; +import 'share_own_qr.dart'; + +class AlphabetScrollPage extends StatefulWidget { + final double scrollOffset; + final List contacts; + + const AlphabetScrollPage({ + super.key, + required this.scrollOffset, + required this.contacts, + }); + + @override + _AlphabetScrollPageState createState() => _AlphabetScrollPageState(); +} + +class _AlphabetScrollPageState extends State { + late ScrollController _scrollController; + final ObfuscateService _obfuscateService = ObfuscateService(); + late Map> _alphabetizedContacts; + late List _alphabetKeys; + + @override + void initState() { + super.initState(); + _scrollController = ScrollController(initialScrollOffset: widget.scrollOffset); + _scrollController.addListener(_onScroll); + _organizeContacts(); + } + + @override + void didUpdateWidget(AlphabetScrollPage oldWidget) { + super.didUpdateWidget(oldWidget); + if (oldWidget.contacts != widget.contacts) { + _organizeContacts(); + } + } + + void _organizeContacts() { + _alphabetizedContacts = {}; + for (var contact in widget.contacts) { + String firstLetter = contact.displayName.isNotEmpty + ? contact.displayName[0].toUpperCase() + : '#'; + (_alphabetizedContacts[firstLetter] ??= []).add(contact); + } + _alphabetKeys = _alphabetizedContacts.keys.toList()..sort(); + } + + void _onScroll() { + final contactState = ContactState.of(context); + contactState.setScrollOffset(_scrollController.offset); + } + + Future _refreshContacts() async { + final contactState = ContactState.of(context); + try { + await contactState.fetchContacts(); + } catch (e) { + debugPrint('Error refreshing contacts: $e'); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text('Failed to refresh contacts')), + ); + } + } + + Future _toggleFavorite(Contact contact) async { + try { + if (await FlutterContacts.requestPermission()) { + Contact? fullContact = await FlutterContacts.getContact(contact.id, + withProperties: true, + withAccounts: true, + withPhoto: true, + withThumbnail: true); + + if (fullContact != null) { + fullContact.isStarred = !fullContact.isStarred; + await FlutterContacts.updateContact(fullContact); + } + + // Check if widget is still mounted before calling functions that use context + if (mounted) { + await _refreshContacts(); + } + } else { + debugPrint("Could not fetch contact details"); + } + } catch (e) { + debugPrint("Error updating favorite status: $e"); + // Only show snackbar if still mounted + if (mounted) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text('Failed to update contact favorite status')), + ); + } + } + } + + @override + Widget build(BuildContext context) { + final selfContact = ContactState.of(context).selfContact; + + return Scaffold( + backgroundColor: Colors.black, + body: Column( + children: [ + // Top buttons row + Container( + color: Colors.black, + padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + AddContactButton(), + QRCodeButton(contacts: widget.contacts, selfContact: selfContact), + ], + ), + ), + // Contact List + Expanded( + child: ListView.builder( + controller: _scrollController, + itemCount: _alphabetKeys.length, + itemBuilder: (context, index) { + String letter = _alphabetKeys[index]; + List contactsForLetter = _alphabetizedContacts[letter]!; + return _buildLetterSection(letter, contactsForLetter); + }, + ), + ), + ], + ), + ); + } + + Widget _buildLetterSection(String letter, List contactsForLetter) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + // Alphabet Letter Header + Padding( + padding: const EdgeInsets.symmetric(vertical: 8.0, horizontal: 16.0), + child: Text( + letter, + style: const TextStyle( + fontSize: 28, + fontWeight: FontWeight.bold, + color: Colors.white, + ), + ), + ), + // Contact Entries + ...contactsForLetter.map((contact) => _buildContactTile(contact)), + ], + ); + } + + Widget _buildContactTile(Contact contact) { + String phoneNumber = contact.phones.isNotEmpty + ? _obfuscateService.obfuscateData(contact.phones.first.number) + : 'No phone number'; + Color avatarColor = generateColorFromName(contact.displayName); + + return ListTile( + leading: ObfuscatedAvatar( + imageBytes: contact.thumbnail, + radius: 25, + backgroundColor: avatarColor, + fallbackInitial: contact.displayName, + ), + title: Text( + _obfuscateService.obfuscateData(contact.displayName), + style: const TextStyle(color: Colors.white), + ), + subtitle: Text( + phoneNumber, + style: const TextStyle(color: Colors.white70), + ), + onTap: () => _showContactModal(contact), + ); + } + + void _showContactModal(Contact contact) { + showModalBottomSheet( + context: context, + isScrollControlled: true, + backgroundColor: Colors.transparent, + builder: (context) { + return ContactModal( + contact: contact, + onEdit: () => _onEditContact(contact), + onToggleFavorite: () => _toggleFavorite(contact), + isFavorite: contact.isStarred, + ); + }, + ); + } + + Future _onEditContact(Contact contact) async { + if (await FlutterContacts.requestPermission()) { + final updatedContact = await FlutterContacts.openExternalEdit(contact.id); + if (updatedContact != null) { + await _refreshContacts(); + Navigator.of(context).pop(); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text('${contact.displayName} updated successfully!'), + ), + ); + } else { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text('Edit canceled or failed.'), + ), + ); + } + } + } + + @override + void dispose() { + _scrollController.dispose(); + super.dispose(); + } +} diff --git a/dialer/lib/presentation/features/contacts/widgets/contact_modal.dart b/dialer/lib/presentation/features/contacts/widgets/contact_modal.dart new file mode 100644 index 0000000..ddf8692 --- /dev/null +++ b/dialer/lib/presentation/features/contacts/widgets/contact_modal.dart @@ -0,0 +1,377 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_contacts/flutter_contacts.dart'; +import 'package:url_launcher/url_launcher.dart'; +import '../../../common/widgets/username_color_generator.dart'; +import '../../../common/widgets/color_darkener.dart'; +import '../../../../domain/services/obfuscate_service.dart'; +import '../../../../domain/services/block_service.dart'; +import '../../../../domain/services/contact_service.dart'; +import '../../../../domain/services/call_service.dart'; + +class ContactModal extends StatefulWidget { + final Contact contact; + final Function onEdit; + final Function onToggleFavorite; + final bool isFavorite; + + const ContactModal({ + super.key, + required this.contact, + required this.onEdit, + required this.onToggleFavorite, + required this.isFavorite, + }); + + @override + _ContactModalState createState() => _ContactModalState(); +} + +class _ContactModalState extends State { + late String phoneNumber; + bool isBlocked = false; + final ObfuscateService _obfuscateService = ObfuscateService(); + final CallService _callService = CallService(); + final ContactService _contactService = ContactService(); + + @override + void initState() { + super.initState(); + phoneNumber = widget.contact.phones.isNotEmpty + ? widget.contact.phones.first.number + : 'No phone number'; + _checkIfBlocked(); + } + + Future _checkIfBlocked() async { + if (phoneNumber != 'No phone number') { + bool blocked = await BlockService().isNumberBlocked(phoneNumber); + if (mounted) { + setState(() { + isBlocked = blocked; + }); + } + } + } + + Future _toggleBlockState() async { + if (phoneNumber == 'No phone number') { + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar(content: Text('No phone number to block or unblock')), + ); + return; + } + + if (isBlocked) { + await BlockService().unblockNumber(phoneNumber); + if (mounted) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text('$phoneNumber has been unblocked')), + ); + } + } else { + await BlockService().blockNumber(phoneNumber); + if (mounted) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text('$phoneNumber has been blocked')), + ); + } + } + + if (phoneNumber != 'No phone number' && mounted) { + _checkIfBlocked(); + } + + if (mounted) { + Navigator.of(context).pop(); + } + } + + void _launchSms(String phoneNumber) async { + final uri = Uri(scheme: 'sms', path: phoneNumber); + if (await canLaunchUrl(uri)) { + await launchUrl(uri); + } else { + debugPrint('Could not launch SMS to $phoneNumber'); + } + } + + void _launchEmail(String email) async { + final uri = Uri(scheme: 'mailto', path: email); + if (await canLaunchUrl(uri)) { + await launchUrl(uri); + } else { + debugPrint('Could not launch email to $email'); + } + } + + void _deleteContact() async { + final bool shouldDelete = await showDialog( + context: context, + builder: (context) => AlertDialog( + title: const Text('Delete Contact'), + content: Text( + 'Are you sure you want to delete ${_obfuscateService.obfuscateData(widget.contact.displayName)}?'), + actions: [ + TextButton( + onPressed: () => Navigator.of(context).pop(false), + child: const Text('Cancel'), + ), + TextButton( + onPressed: () => Navigator.of(context).pop(true), + child: const Text('Delete'), + ), + ], + ), + ); + + if (shouldDelete && mounted) { + try { + // Delete the contact + await FlutterContacts.deleteContact(widget.contact); + + // Show success message + if (mounted) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text( + '${_obfuscateService.obfuscateData(widget.contact.displayName)} deleted')), + ); + + // Close the modal + Navigator.of(context).pop(); + } + } catch (e) { + // Handle errors and show a failure message + if (mounted) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: + Text('Failed to delete ${widget.contact.displayName}: $e')), + ); + } + } + } + } + + void _shareContactAsQRCode() { + // Use the ContactService to show the QR code for the contact's vCard + _contactService.showContactQRCodeDialog(context, widget.contact); + } + + @override + Widget build(BuildContext context) { + String email = widget.contact.emails.isNotEmpty + ? _obfuscateService.obfuscateData(widget.contact.emails.first.address) + : 'No email'; + + final avatarColor = generateColorFromName(widget.contact.displayName); + + return GestureDetector( + onTap: () => Navigator.of(context).pop(), + child: Container( + color: Colors.black.withOpacity(0.5), + child: GestureDetector( + onTap: () {}, + child: FractionallySizedBox( + heightFactor: 0.8, + child: Container( + decoration: BoxDecoration( + color: Colors.grey[900], + borderRadius: + const BorderRadius.vertical(top: Radius.circular(20)), + ), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + // Modal Handle and Three-Dot Menu + Stack( + children: [ + Align( + alignment: Alignment.center, + child: Padding( + padding: const EdgeInsets.symmetric(vertical: 10), + child: Container( + width: 50, + height: 5, + decoration: BoxDecoration( + color: Colors.grey.shade300, + borderRadius: BorderRadius.circular(5), + ), + ), + ), + ), + Align( + alignment: Alignment.topRight, + child: Padding( + padding: const EdgeInsets.only(top: 10, right: 10), + child: PopupMenuButton( + icon: const Icon(Icons.more_vert, + color: Colors.white), + onSelected: (String choice) { + if (choice == 'delete') { + _deleteContact(); + } else if (choice == 'share') { + _shareContactAsQRCode(); + } + // Handle other choices if needed + }, + itemBuilder: (BuildContext context) { + return [ + const PopupMenuItem( + value: 'delete', + child: Text('Delete'), + ), + const PopupMenuItem( + value: 'share', + child: Text('Share (via QR code)'), + ), + ]; + }, + ), + ), + ), + ], + ), + // Contact Profile + Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + children: [ + widget.contact.thumbnail != null && widget.contact.thumbnail!.isNotEmpty + ? ClipOval( + child: Image.memory( + widget.contact.thumbnail!, + fit: BoxFit.cover, + width: 100, + height: 100, + ), + ) + : CircleAvatar( + backgroundColor: avatarColor, + radius: 50, + child: Text( + widget.contact.displayName.isNotEmpty + ? widget.contact.displayName[0].toUpperCase() + : '?', + style: TextStyle( + color: darken(avatarColor), + fontSize: 40, + ), + ), + ), + const SizedBox(height: 10), + Text( + _obfuscateService + .obfuscateData(widget.contact.displayName), + style: const TextStyle( + fontSize: 24, + fontWeight: FontWeight.bold, + color: Colors.white), + ), + ], + ), + ), + const Divider(color: Colors.grey), + // Contact Actions + Expanded( + child: SingleChildScrollView( + child: Column( + children: [ + ListTile( + leading: const Icon(Icons.phone, color: Colors.green), + title: Text( + _obfuscateService.obfuscateData(phoneNumber), + style: const TextStyle(color: Colors.white), + ), + onTap: () async { + if (widget.contact.phones.isNotEmpty) { + await _callService.makeGsmCall(context, + phoneNumber: phoneNumber); + } + }, + ), + ListTile( + leading: const Icon(Icons.message, color: Colors.blue), + title: Text( + _obfuscateService.obfuscateData(phoneNumber), + style: const TextStyle(color: Colors.white), + ), + onTap: () { + if (widget.contact.phones.isNotEmpty) { + _launchSms(phoneNumber); + } + }, + ), + ListTile( + leading: const Icon(Icons.email, color: Colors.orange), + title: Text( + email, + style: const TextStyle(color: Colors.white), + ), + onTap: () { + if (widget.contact.emails.isNotEmpty) { + _launchEmail(email); + } + }, + ), + const Divider(color: Colors.grey), + // Favorite, Edit, and Block/Unblock Buttons + Padding( + padding: const EdgeInsets.symmetric(horizontal: 16.0), + child: Column( + children: [ + // Favorite button + SizedBox( + width: double.infinity, + child: ElevatedButton.icon( + onPressed: () { + // First close the modal to avoid unmounted widget issues + Navigator.of(context).pop(); + // Then toggle the favorite status + widget.onToggleFavorite(); + }, + icon: Icon(widget.isFavorite + ? Icons.star + : Icons.star_border), + label: Text( + widget.isFavorite ? 'Unfavorite' : 'Favorite'), + ), + ), + const SizedBox(height: 10), + // Edit button + SizedBox( + width: double.infinity, + child: ElevatedButton.icon( + onPressed: () => widget.onEdit(), + icon: const Icon(Icons.edit), + label: const Text('Edit Contact'), + ), + ), + const SizedBox(height: 10), + // Block/Unblock button + SizedBox( + width: double.infinity, + child: ElevatedButton.icon( + onPressed: _toggleBlockState, + icon: Icon( + isBlocked ? Icons.block : Icons.block_flipped), + label: Text(isBlocked ? 'Unblock' : 'Block'), + ), + ), + ], + ), + ), + const SizedBox(height: 16), + ], + ), + ), + ), + ], + ), + ), + ), + ), + ), + ); + } +} diff --git a/dialer/lib/presentation/features/contacts/widgets/share_own_qr.dart b/dialer/lib/presentation/features/contacts/widgets/share_own_qr.dart new file mode 100644 index 0000000..10648b7 --- /dev/null +++ b/dialer/lib/presentation/features/contacts/widgets/share_own_qr.dart @@ -0,0 +1,36 @@ +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_contacts/contact.dart'; +import 'package:dialer/domain/services/contact_service.dart'; + +class QRCodeButton extends StatelessWidget { + final List contacts; + final Contact? selfContact; + + const QRCodeButton({super.key, required this.contacts, this.selfContact}); + + Contact? getSelfContact() { + if (kDebugMode) { + debugPrint("Checking for self contact"); + } + for (var contact in contacts) { + if (contact.groups.any((group) => group.name.toLowerCase() == "user")) { + return contact; + } + } + return null; + } + + @override + Widget build(BuildContext context) { + return IconButton( + icon: Icon(Icons.qr_code, color: selfContact != null ? Colors.blue : Colors.grey), + onPressed: selfContact != null + ? () { + // Use the ContactService to show the QR code + ContactService().showContactQRCodeDialog(context, selfContact!); + } + : null, + ); + } +} diff --git a/dialer/lib/presentation/features/favorites/favorites_page.dart b/dialer/lib/presentation/features/favorites/favorites_page.dart new file mode 100644 index 0000000..712ece6 --- /dev/null +++ b/dialer/lib/presentation/features/favorites/favorites_page.dart @@ -0,0 +1,37 @@ +import 'package:flutter/material.dart'; +import '../contacts/contact_state.dart'; +import '../contacts/widgets/alphabet_scroll_page.dart'; + +class FavoritesPage extends StatelessWidget { + const FavoritesPage({super.key}); + + @override + Widget build(BuildContext context) { + final contactState = ContactState.of(context); + + if (contactState.loading) { + return const Scaffold( + backgroundColor: Colors.black, + body: Center(child: CircularProgressIndicator()), + ); + } + + final favorites = contactState.favoriteContacts; + + return Scaffold( + backgroundColor: Colors.black, + body: favorites.isEmpty + ? const Center( + child: Text( + 'No favorites yet.\nStar your contacts to add them here.', + style: TextStyle(color: Colors.white60), + textAlign: TextAlign.center, + ), + ) + : AlphabetScrollPage( + scrollOffset: contactState.scrollOffset, + contacts: favorites, + ), + ); + } +} diff --git a/dialer/lib/presentation/features/history/history_page.dart b/dialer/lib/presentation/features/history/history_page.dart new file mode 100644 index 0000000..6acd892 --- /dev/null +++ b/dialer/lib/presentation/features/history/history_page.dart @@ -0,0 +1,896 @@ +import 'dart:async'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_contacts/flutter_contacts.dart'; +import 'package:intl/intl.dart'; +import 'package:permission_handler/permission_handler.dart'; +import 'package:url_launcher/url_launcher.dart'; +import '../../../domain/services/obfuscate_service.dart'; +import '../../common/widgets/color_darkener.dart'; +import '../../common/widgets/username_color_generator.dart'; +import '../../../domain/services/block_service.dart'; +import '../../../domain/services/call_service.dart'; +import '../contacts/contact_state.dart'; +import '../contacts/widgets/contact_modal.dart'; + +class History { + final Contact contact; + final DateTime date; + final String callType; // 'incoming' or 'outgoing' + final String callStatus; // 'missed' or 'answered' + final int attempts; + final String? simName; // Name of the SIM used for the call + + History( + this.contact, + this.date, + this.callType, + this.callStatus, + this.attempts, + this.simName, + ); +} + +class HistoryPage extends StatefulWidget { + const HistoryPage({Key? key}) : super(key: key); + + @override + HistoryPageState createState() => HistoryPageState(); +} + +class HistoryPageState extends State + with AutomaticKeepAliveClientMixin, SingleTickerProviderStateMixin, WidgetsBindingObserver { + // Static histories list shared across all instances + static List _globalHistories = []; + + // Getter to access the global histories list + List get histories => _globalHistories; + + bool _isInitialLoad = true; + int? _expandedIndex; + final ObfuscateService _obfuscateService = ObfuscateService(); + final CallService _callService = CallService(); + Timer? _debounceTimer; + + // Create a MethodChannel instance. + static const MethodChannel _channel = MethodChannel('com.example.calllog'); + + // Static reference to the current instance for call-end notifications + static HistoryPageState? _currentInstance; + + // Global flag to track if history has been loaded once across all instances + static bool _hasLoadedInitialHistory = false; + + @override + bool get wantKeepAlive => true; // Preserve state when switching pages + + @override + void initState() { + super.initState(); + WidgetsBinding.instance.addObserver(this); + _currentInstance = this; // Register this instance + + // Only load initial data if it hasn't been loaded before + if (!_hasLoadedInitialHistory) { + _buildHistories(); + } else { + // If history was already loaded, just mark this instance as not doing initial load + _isInitialLoad = false; + } + } + + /// Public method to trigger reload when page becomes visible + void triggerReload() { + // Disabled automatic reloading - only load once and add new entries via addNewCallToHistory + print("HistoryPage: triggerReload called but disabled to prevent full reload"); + } + + @override + void dispose() { + _debounceTimer?.cancel(); + WidgetsBinding.instance.removeObserver(this); + if (_currentInstance == this) { + _currentInstance = null; // Unregister this instance + } + super.dispose(); + } + + /// Static method to add a new call to the history list + static void addNewCallToHistory() { + _currentInstance?._addLatestCallToHistory(); + } + + /// Notify all instances to refresh UI when history changes + static void _notifyHistoryChanged() { + _currentInstance?.setState(() { + // Trigger UI rebuild for the current instance + }); + } + + @override + void didChangeAppLifecycleState(AppLifecycleState state) { + super.didChangeAppLifecycleState(state); + // Disabled automatic reloading when app comes to foreground + print("HistoryPage: didChangeAppLifecycleState called but disabled to prevent full reload"); + } + + @override + void didChangeDependencies() { + super.didChangeDependencies(); + // didChangeDependencies is not reliable for TabBarView changes + // We'll use a different approach with RouteAware or manual detection + } + + Future _refreshContacts() async { + final contactState = ContactState.of(context); + try { + await contactState.fetchContacts(); + } catch (e) { + print('Error refreshing contacts: $e'); + ScaffoldMessenger.of(context) + .showSnackBar(SnackBar(content: Text('Failed to refresh contacts'))); + } + } + + void _toggleFavorite(Contact contact) async { + try { + if (await FlutterContacts.requestPermission()) { + Contact? fullContact = await FlutterContacts.getContact(contact.id, + withProperties: true, + withAccounts: true, + withPhoto: true, + withThumbnail: true); + + if (fullContact != null) { + fullContact.isStarred = !fullContact.isStarred; + await FlutterContacts.updateContact(fullContact); + } + // Check if still mounted before accessing context + if (mounted) { + await _refreshContacts(); + } + } else { + debugPrint("Could not fetch contact details"); + } + } catch (e) { + debugPrint("Error updating favorite status: $e"); + if (mounted) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text('Failed to update favorite status'))); + } + } + } + + /// Helper: Remove all non-digit characters for simple matching. + String sanitizeNumber(String number) { + return number.replaceAll(RegExp(r'\D'), ''); + } + + /// Helper: Find a contact from our list by matching phone numbers. + Contact? findContactForNumber(String number, List contacts) { + final sanitized = sanitizeNumber(number); + for (var contact in contacts) { + for (var phone in contact.phones) { + if (sanitizeNumber(phone.number) == sanitized) { + return contact; + } + } + } + return null; + } + + /// Helper: Get SIM name from subscription ID + String? _getSimNameFromSubscriptionId(int? subscriptionId) { + if (subscriptionId == null) return null; + + // Map subscription IDs to SIM names + // These values might need to be adjusted based on your device + switch (subscriptionId) { + case 0: + return "SIM 1"; + case 1: + return "SIM 2"; + default: + return "SIM ${subscriptionId + 1}"; + } + } + + /// Request permission for reading call logs. + Future _requestCallLogPermission() async { + var status = await Permission.phone.status; + if (!status.isGranted) { + status = await Permission.phone.request(); + } + return status.isGranted; + } + + /// Build histories from the native call log using the method channel. + Future _buildHistories() async { + // Request permission. + bool hasPermission = await _requestCallLogPermission(); + if (!hasPermission) { + if (mounted) { + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar(content: Text('Call log permission not granted'))); + } + setState(() { + _isInitialLoad = false; + }); + return; + } + + // Retrieve call logs from native code. + List nativeLogs = []; + try { + nativeLogs = await _channel.invokeMethod('getCallLogs'); + } on PlatformException catch (e) { + print("Error fetching call logs: ${e.message}"); + } + + // Ensure contacts are loaded. + final contactState = ContactState.of(context); + if (contactState.loading) { + await Future.doWhile(() async { + await Future.delayed(const Duration(milliseconds: 100)); + return contactState.loading; + }); + } + List contacts = contactState.contacts; + + List callHistories = []; + // Process each log entry with intermittent yields to avoid freezing. + for (int i = 0; i < nativeLogs.length; i++) { + final entry = nativeLogs[i]; + final String number = entry['number'] ?? ''; + if (number.isEmpty) continue; + + // Convert timestamp to DateTime. + DateTime callDate = + DateTime.fromMillisecondsSinceEpoch(entry['date'] ?? 0); + + int typeInt = entry['type'] ?? 0; + int duration = entry['duration'] ?? 0; + String callType; + String callStatus; + + // Map integer values to call type/status. + // Commonly: 1 = incoming, 2 = outgoing, 3 = missed. + switch (typeInt) { + case 1: + callType = "incoming"; + callStatus = (duration == 0) ? "missed" : "answered"; + break; + case 2: + callType = "outgoing"; + callStatus = "answered"; + break; + case 3: + callType = "incoming"; + callStatus = "missed"; + break; + default: + callType = "unknown"; + callStatus = "unknown"; + } + + // Try to find a matching contact. + Contact? matchedContact = findContactForNumber(number, contacts); + if (matchedContact == null) { + // Create a dummy contact if not found. + matchedContact = Contact( + id: "dummy-$number", + displayName: number, + phones: [Phone(number)], + ); + } + + // Extract SIM information if available + String? simName; + if (entry.containsKey('sim_name') && entry['sim_name'] != null) { + simName = entry['sim_name'] as String; + print("DEBUG: Found sim_name: $simName for number: $number"); // Debug print + } else if (entry.containsKey('subscription_id')) { + final subId = entry['subscription_id']; + print("DEBUG: Found subscription_id: $subId for number: $number, but no sim_name"); // Debug print + simName = _getSimNameFromSubscriptionId(subId); + print("DEBUG: Mapped to SIM name: $simName"); // Debug print + } else { + print("DEBUG: No SIM info found for number: $number"); // Debug print + } + + callHistories + .add(History(matchedContact, callDate, callType, callStatus, 1, simName)); + // Yield every 10 iterations to avoid blocking the UI. + if (i % 10 == 0) await Future.delayed(Duration(milliseconds: 1)); + } + + // Sort histories by most recent. + callHistories.sort((a, b) => b.date.compareTo(a.date)); + + if (mounted) { + setState(() { + _globalHistories = callHistories; + _isInitialLoad = false; + _hasLoadedInitialHistory = true; // Mark that history has been loaded once + }); + // Notify other instances about the initial load + _notifyHistoryChanged(); + } + } + + /// Add the latest call log entry to the history list + Future _addLatestCallToHistory() async { + try { + // Get the latest call log entry + final dynamic rawEntry = await _channel.invokeMethod('getLatestCallLog'); + + if (rawEntry == null) { + print("No latest call log entry found"); + return; + } + + // Convert to proper type - handle the method channel result properly + final Map latestEntry = Map.from( + (rawEntry as Map).cast() + ); + + final String number = latestEntry['number'] ?? ''; + if (number.isEmpty) return; + + // Ensure contacts are loaded + final contactState = ContactState.of(context); + if (contactState.loading) { + await Future.doWhile(() async { + await Future.delayed(const Duration(milliseconds: 100)); + return contactState.loading; + }); + } + List contacts = contactState.contacts; + + // Convert timestamp to DateTime + DateTime callDate = DateTime.fromMillisecondsSinceEpoch(latestEntry['date'] ?? 0); + + int typeInt = latestEntry['type'] ?? 0; + int duration = latestEntry['duration'] ?? 0; + String callType; + String callStatus; + + // Map integer values to call type/status + switch (typeInt) { + case 1: + callType = "incoming"; + callStatus = (duration == 0) ? "missed" : "answered"; + break; + case 2: + callType = "outgoing"; + callStatus = "answered"; + break; + case 3: + callType = "incoming"; + callStatus = "missed"; + break; + default: + callType = "unknown"; + callStatus = "unknown"; + } + + // Try to find a matching contact + Contact? matchedContact = findContactForNumber(number, contacts); + if (matchedContact == null) { + // Create a dummy contact if not found + matchedContact = Contact( + id: "dummy-$number", + displayName: number, + phones: [Phone(number)], + ); + } + + // Extract SIM information if available + String? simName; + if (latestEntry.containsKey('sim_name') && latestEntry['sim_name'] != null) { + simName = latestEntry['sim_name'] as String; + print("DEBUG: Found sim_name: $simName for number: $number"); + } else if (latestEntry.containsKey('subscription_id')) { + final subId = latestEntry['subscription_id']; + print("DEBUG: Found subscription_id: $subId for number: $number, but no sim_name"); + simName = _getSimNameFromSubscriptionId(subId); + print("DEBUG: Mapped to SIM name: $simName"); + } else { + print("DEBUG: No SIM info found for number: $number"); + } + + // Create new history entry + History newHistory = History(matchedContact, callDate, callType, callStatus, 1, simName); + + // Check if this call is already in the list (avoid duplicates) + bool alreadyExists = _globalHistories.any((history) => + history.contact.phones.isNotEmpty && + sanitizeNumber(history.contact.phones.first.number) == sanitizeNumber(number) && + history.date.difference(callDate).abs().inSeconds < 5); // Within 5 seconds + + if (!alreadyExists && mounted) { + setState(() { + // Insert at the beginning since it's the most recent + _globalHistories.insert(0, newHistory); + }); + // Notify other instances about the change + _notifyHistoryChanged(); + print("Added new call to history: $number at $callDate"); + } else { + print("Call already exists in history or widget unmounted"); + } + } catch (e) { + print("Error adding latest call to history: $e"); + } + } + + List _buildGroupedList(List historyList) { + historyList.sort((a, b) => b.date.compareTo(a.date)); + + final now = DateTime.now(); + final today = DateTime(now.year, now.month, now.day); + final yesterday = today.subtract(const Duration(days: 1)); + + List todayHistories = []; + List yesterdayHistories = []; + List olderHistories = []; + + for (var history in historyList) { + final callDate = + DateTime(history.date.year, history.date.month, history.date.day); + if (callDate == today) { + todayHistories.add(history); + } else if (callDate == yesterday) { + yesterdayHistories.add(history); + } else { + olderHistories.add(history); + } + } + + final items = []; + if (todayHistories.isNotEmpty) { + items.add('Today'); + items.addAll(todayHistories); + } + if (yesterdayHistories.isNotEmpty) { + items.add('Yesterday'); + items.addAll(yesterdayHistories); + } + if (olderHistories.isNotEmpty) { + items.add('Older'); + items.addAll(olderHistories); + } + + return items; + } + + /// Returns an icon reflecting call type and status. + Icon _getCallIcon(History history) { + IconData iconData; + Color iconColor; + if (history.callType == 'incoming') { + if (history.callStatus == 'missed') { + iconData = Icons.call_missed; + iconColor = Colors.red; + } else { + iconData = Icons.call_received; + iconColor = Colors.green; + } + } else if (history.callType == 'outgoing') { + iconData = Icons.call_made; + iconColor = Colors.green; + } else { + iconData = Icons.phone; + iconColor = Colors.white; + } + return Icon(iconData, color: iconColor); + } + + @override + Widget build(BuildContext context) { + super.build(context); // required due to AutomaticKeepAliveClientMixin + + // Show loading only on initial load and if no data is available yet + if (_isInitialLoad && histories.isEmpty) { + return Scaffold( + backgroundColor: Colors.black, + body: const Center(child: CircularProgressIndicator()), + ); + } + + if (histories.isEmpty) { + return Scaffold( + backgroundColor: Colors.black, + body: const Center( + child: Text( + 'No call history available.', + style: TextStyle(color: Colors.white), + ), + ), + ); + } + + List missedCalls = + histories.where((h) => h.callStatus == 'missed').toList(); + + final allItems = _buildGroupedList(histories); + final missedItems = _buildGroupedList(missedCalls); + + return DefaultTabController( + length: 2, + child: Scaffold( + backgroundColor: Colors.black, + appBar: PreferredSize( + preferredSize: const Size.fromHeight(kToolbarHeight), + child: Container( + color: Colors.black, + child: const TabBar( + tabs: [ + Tab(text: 'All Calls'), + Tab(text: 'Missed Calls'), + ], + indicatorColor: Colors.white, + ), + ), + ), + body: TabBarView( + children: [ + _buildListView(allItems), + _buildListView(missedItems), + ], + ), + ), + ); + } + + Widget _buildListView(List items) { + return ListView.builder( + itemCount: items.length, + itemBuilder: (context, index) { + final item = items[index]; + if (item is String) { + return Container( + padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 16), + color: Colors.grey[900], + child: Text( + item, + style: const TextStyle( + color: Colors.white70, + fontWeight: FontWeight.bold, + ), + ), + ); + } else if (item is History) { + final history = item; + final contact = history.contact; + final isExpanded = _expandedIndex == index; + Color avatarColor = generateColorFromName(contact.displayName); + return Column( + children: [ + ListTile( + leading: GestureDetector( + onTap: () { + showModalBottomSheet( + context: context, + isScrollControlled: true, + backgroundColor: Colors.transparent, + builder: (context) { + return ContactModal( + contact: contact, + onEdit: () async { + if (await FlutterContacts.requestPermission()) { + final updatedContact = + await FlutterContacts.openExternalEdit( + contact.id); + if (updatedContact != null) { + await _refreshContacts(); + Navigator.of(context).pop(); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text( + '${contact.displayName} updated successfully!'), + ), + ); + } else { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text('Edit canceled or failed.'), + ), + ); + } + } + }, + onToggleFavorite: () { + _toggleFavorite(contact); + }, + isFavorite: contact.isStarred, + ); + }, + ); + }, + child: ObfuscatedAvatar( + imageBytes: contact.thumbnail, + radius: 25, + backgroundColor: avatarColor, + fallbackInitial: contact.displayName, + ), + ), + title: Text( + _obfuscateService.obfuscateData(contact.displayName), + style: const TextStyle(color: Colors.white), + ), + subtitle: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + DateFormat('MMM dd, hh:mm a').format(history.date), + style: const TextStyle(color: Colors.grey), + ), + if (history.simName != null) + Text( + history.simName!, + style: const TextStyle( + color: Colors.blue, + fontSize: 12, + ), + ), + ], + ), + trailing: Row( + mainAxisSize: MainAxisSize.min, + children: [ + _getCallIcon(history), + const SizedBox(width: 8), + Text( + '${history.attempts}x', + style: const TextStyle(color: Colors.white), + ), + IconButton( + icon: const Icon(Icons.phone, color: Colors.green), + onPressed: () async { + if (contact.phones.isNotEmpty) { + await _callService.makeGsmCall( + context, + phoneNumber: contact.phones.first.number, + displayName: contact.displayName, + thumbnail: contact.thumbnail, + ); + } else { + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar( + content: Text('Contact has no phone number')), + ); + } + }, + ), + ], + ), + onTap: () { + setState(() { + _expandedIndex = isExpanded ? null : index; + }); + }, + ), + if (isExpanded) + Container( + color: Colors.grey[850], + child: FutureBuilder( + future: BlockService().isNumberBlocked( + contact.phones.isNotEmpty + ? contact.phones.first.number + : ''), + builder: (context, snapshot) { + final isBlocked = snapshot.data ?? false; + return Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + TextButton.icon( + onPressed: () async { + if (history.contact.phones.isNotEmpty) { + final Uri smsUri = Uri( + scheme: 'sms', + path: history.contact.phones.first.number); + if (await canLaunchUrl(smsUri)) { + await launchUrl(smsUri); + } else { + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar( + content: + Text('Could not send message')), + ); + } + } else { + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar( + content: + Text('Contact has no phone number')), + ); + } + }, + icon: + const Icon(Icons.message, color: Colors.white), + label: const Text('Message', + style: TextStyle(color: Colors.white)), + ), + TextButton.icon( + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (_) => + CallDetailsPage(history: history), + ), + ); + }, + icon: const Icon(Icons.info, color: Colors.white), + label: const Text('Details', + style: TextStyle(color: Colors.white)), + ), + TextButton.icon( + onPressed: () async { + final phoneNumber = contact.phones.isNotEmpty + ? contact.phones.first.number + : null; + if (phoneNumber == null) { + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar( + content: + Text('Contact has no phone number')), + ); + return; + } + if (isBlocked) { + await BlockService().unblockNumber(phoneNumber); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text('$phoneNumber unblocked')), + ); + } else { + await BlockService().blockNumber(phoneNumber); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text('$phoneNumber blocked')), + ); + } + setState(() {}); + }, + icon: Icon( + isBlocked ? Icons.lock_open : Icons.block, + color: Colors.white), + label: Text(isBlocked ? 'Unblock' : 'Block', + style: const TextStyle(color: Colors.white)), + ), + ], + ); + }, + ), + ), + ], + ); + } + return const SizedBox.shrink(); + }, + ); + } +} + +class CallDetailsPage extends StatelessWidget { + final History history; + final ObfuscateService _obfuscateService = ObfuscateService(); + + CallDetailsPage({super.key, required this.history}); + + @override + Widget build(BuildContext context) { + final contact = history.contact; + final contactBg = generateColorFromName(contact.displayName); + final contactLetter = darken(contactBg); + + return Scaffold( + backgroundColor: Colors.black, + appBar: AppBar( + title: const Text('Call Details'), + backgroundColor: Colors.black, + ), + body: Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + children: [ + // Display Contact Name and Thumbnail. + Row( + children: [ + (contact.thumbnail != null && contact.thumbnail!.isNotEmpty) + ? ObfuscatedAvatar( + imageBytes: contact.thumbnail, + radius: 30, + backgroundColor: contactBg, + fallbackInitial: contact.displayName, + ) + : CircleAvatar( + backgroundColor: + generateColorFromName(contact.displayName), + radius: 30, + child: Text( + contact.displayName.isNotEmpty + ? contact.displayName[0].toUpperCase() + : '?', + style: TextStyle(color: contactLetter), + ), + ), + const SizedBox(width: 16), + Expanded( + child: Text( + _obfuscateService.obfuscateData(contact.displayName), + style: const TextStyle(color: Colors.white, fontSize: 24), + ), + ), + ], + ), + const SizedBox(height: 24), + // Display call details. + DetailRow( + label: 'Call Type:', + value: history.callType, + ), + DetailRow( + label: 'Call Status:', + value: history.callStatus, + ), + DetailRow( + label: 'Date:', + value: DateFormat('MMM dd, yyyy - hh:mm a').format(history.date), + ), + DetailRow( + label: 'Attempts:', + value: '${history.attempts}', + ), + if (history.simName != null) + DetailRow( + label: 'SIM Used:', + value: history.simName!, + ), + const SizedBox(height: 24), + if (contact.phones.isNotEmpty) + DetailRow( + label: 'Number:', + value: _obfuscateService + .obfuscateData(contact.phones.first.number), + ), + ], + ), + ), + ); + } +} + +class DetailRow extends StatelessWidget { + final String label; + final String value; + + const DetailRow({Key? key, required this.label, required this.value}) + : super(key: key); + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.symmetric(vertical: 8.0), + child: Row( + children: [ + Text( + label, + style: const TextStyle( + color: Colors.white70, fontWeight: FontWeight.bold), + ), + const SizedBox(width: 8), + Expanded( + child: Text( + value, + style: const TextStyle(color: Colors.white), + textAlign: TextAlign.right, + ), + ), + ], + ), + ); + } +} diff --git a/dialer/lib/presentation/features/home/default_dialer_prompt.dart b/dialer/lib/presentation/features/home/default_dialer_prompt.dart new file mode 100644 index 0000000..c2fc0f3 --- /dev/null +++ b/dialer/lib/presentation/features/home/default_dialer_prompt.dart @@ -0,0 +1,102 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; + +class DefaultDialerPromptScreen extends StatelessWidget { + const DefaultDialerPromptScreen({super.key}); + + Future _requestDefaultDialer(BuildContext context) async { + const channel = MethodChannel('call_service'); + try { + await channel.invokeMethod('requestDefaultDialer'); + // Navigate to home page after requesting default dialer + Navigator.of(context).pushReplacementNamed('/home'); + } catch (e) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text('Error requesting default dialer: $e')), + ); + } + } + + void _exploreApp(BuildContext context) { + // Navigate to home page without requesting default dialer + Navigator.of(context).pushReplacementNamed('/home'); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.black, + body: SafeArea( + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Expanded( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + 'Set as Default Dialer', + style: TextStyle( + fontSize: 24, + fontWeight: FontWeight.bold, + color: Colors.white, + ), + textAlign: TextAlign.center, + ), + SizedBox(height: 16), + Text( + 'To handle calls effectively, Icing needs to be your default dialer app. This allows Icing to manage incoming and outgoing calls seamlessly.\n\nWithout the permission, Icing will not be able to encrypt calls.', + style: TextStyle( + fontSize: 16, + color: Colors.white70, + ), + textAlign: TextAlign.center, + ), + ], + ), + ), + Row( + children: [ + Expanded( + flex: 1, + child: Padding( + padding: const EdgeInsets.only(right: 8.0), + child: ElevatedButton( + onPressed: () => _exploreApp(context), + style: ElevatedButton.styleFrom( + backgroundColor: Colors.grey[800], + foregroundColor: Colors.white, + padding: EdgeInsets.symmetric( + horizontal: 16, vertical: 12), + ), + child: Text('Explore App first'), + ), + ), + ), + Expanded( + flex: 1, + child: Padding( + padding: const EdgeInsets.only(left: 8.0), + child: ElevatedButton( + onPressed: () => _requestDefaultDialer(context), + style: ElevatedButton.styleFrom( + backgroundColor: Colors.blue, + foregroundColor: Colors.white, + padding: EdgeInsets.symmetric( + horizontal: 16, vertical: 12), + ), + child: Text('Set as Default Dialer'), + ), + ), + ), + ], + ), + ], + ), + ), + ), + ); + } +} \ No newline at end of file diff --git a/dialer/lib/presentation/features/home/home_page.dart b/dialer/lib/presentation/features/home/home_page.dart new file mode 100644 index 0000000..fd136b6 --- /dev/null +++ b/dialer/lib/presentation/features/home/home_page.dart @@ -0,0 +1,347 @@ +import 'package:flutter/material.dart'; +import '../../../domain/services/obfuscate_service.dart'; +import '../contacts/contact_page.dart'; +import '../favorites/favorites_page.dart'; +import '../history/history_page.dart'; +import '../composition/composition.dart'; +import '../settings/settings.dart'; +import '../voicemail/voicemail_page.dart'; +import '../contacts/widgets/contact_modal.dart'; +import 'package:flutter_contacts/flutter_contacts.dart'; +import 'package:dialer/domain/services/contact_service.dart'; + +class _MyHomePageState extends State with SingleTickerProviderStateMixin { + late TabController _tabController; + List _allContacts = []; + List _contactSuggestions = []; + final ContactService _contactService = ContactService(); + final ObfuscateService _obfuscateService = ObfuscateService(); + final TextEditingController _searchController = TextEditingController(); + late SearchController _searchBarController; + String _rawSearchInput = ''; + final GlobalKey _historyPageKey = GlobalKey(); + + @override + void initState() { + super.initState(); + _tabController = TabController(length: 4, vsync: this, initialIndex: 2); + _tabController.addListener(_handleTabIndex); + _searchBarController = SearchController(); + _searchBarController.addListener(() { + if (_searchController.text != _searchBarController.text) { + _rawSearchInput = _searchBarController.text; + _searchController.text = _rawSearchInput; + _onSearchChanged(_searchBarController.text); + } + }); + _fetchContacts(); + } + + void _fetchContacts() async { + _allContacts = await _contactService.fetchContacts(); + _contactSuggestions = List.from(_allContacts); + if (mounted) setState(() {}); + } + + void _clearSearch() { + _searchController.clear(); + _searchBarController.clear(); + _rawSearchInput = ''; + _onSearchChanged(''); + } + + void _onSearchChanged(String query) { + setState(() { + if (query.isEmpty) { + _contactSuggestions = List.from(_allContacts); + } else { + final normalizedQuery = _normalizeString(query.toLowerCase()); + _contactSuggestions = _allContacts.where((contact) { + final normalizedName = _normalizeString(contact.displayName.toLowerCase()); + return normalizedName.contains(normalizedQuery); + }).toList(); + } + }); + } + + String _normalizeString(String input) { + const accentMap = { + 'àáâãäå': 'a', + 'èéêë': 'e', + 'ìíîï': 'i', + 'òóôõö': 'o', + 'ùúûü': 'u', + 'ç': 'c', + 'ñ': 'n', + }; + String normalized = input; + accentMap.forEach((accents, base) { + for (var accent in accents.split('')) { + normalized = normalized.replaceAll(accent, base); + } + }); + return normalized; + } + + @override + void dispose() { + _searchController.dispose(); + _searchBarController.dispose(); + _tabController.removeListener(_handleTabIndex); + _tabController.dispose(); + super.dispose(); + } + + void _handleTabIndex() { + setState(() {}); + // Trigger history page reload when switching to history tab (index 1) + if (_tabController.index == 1) { + _historyPageKey.currentState?.triggerReload(); + } + } + + void _toggleFavorite(Contact contact) async { + try { + if (await FlutterContacts.requestPermission()) { + Contact? fullContact = await FlutterContacts.getContact( + contact.id, + withProperties: true, + withAccounts: true, + withPhoto: true, + withThumbnail: true, + ); + + if (fullContact != null) { + fullContact.isStarred = !fullContact.isStarred; + await FlutterContacts.updateContact(fullContact); + _fetchContacts(); + } + } else { + print("Could not fetch contact details"); + } + } catch (e) { + print("Error updating favorite status: $e"); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text('Failed to update contact favorite status')), + ); + } + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.black, + body: Column( + children: [ + Padding( + padding: const EdgeInsets.only( + top: 24.0, + bottom: 10.0, + left: 16.0, + right: 16.0, + ), + child: Row( + children: [ + Expanded( + child: Container( + decoration: BoxDecoration( + color: const Color.fromARGB(255, 30, 30, 30), + borderRadius: BorderRadius.circular(12.0), + border: Border.all(color: Colors.grey.shade800, width: 1), + ), + child: SearchAnchor( + searchController: _searchBarController, + builder: (BuildContext context, SearchController controller) { + return GestureDetector( + onTap: () { + controller.openView(); + }, + child: Container( + decoration: BoxDecoration( + color: const Color.fromARGB(255, 30, 30, 30), + borderRadius: BorderRadius.circular(12.0), + border: Border.all(color: Colors.grey.shade800, width: 1), + ), + padding: const EdgeInsets.symmetric(vertical: 12.0, horizontal: 16.0), + child: Row( + children: [ + const Icon(Icons.search, color: Colors.grey, size: 24.0), + const SizedBox(width: 8.0), + Expanded( + child: Text( + _rawSearchInput.isEmpty + ? 'Search contacts' + : _rawSearchInput, + style: const TextStyle(color: Colors.grey, fontSize: 16.0), + overflow: TextOverflow.ellipsis, + ), + ), + if (_rawSearchInput.isNotEmpty) + GestureDetector( + onTap: _clearSearch, + child: const Icon( + Icons.clear, + color: Colors.grey, + size: 24.0, + ), + ), + ], + ), + ), + ); + }, + viewOnChanged: (query) { + + if (_searchBarController.text != query) { + _rawSearchInput = query; + _searchBarController.text = query; + _searchController.text = query; + } + _onSearchChanged(query); + }, + suggestionsBuilder: (BuildContext context, SearchController controller) { + return _contactSuggestions.map((contact) { + return ListTile( + key: ValueKey(contact.id), + title: Text( + _obfuscateService.obfuscateData(contact.displayName), + style: const TextStyle(color: Colors.white), + ), + onTap: () { + controller.closeView(contact.displayName); + showModalBottomSheet( + context: context, + isScrollControlled: true, + backgroundColor: Colors.transparent, + builder: (context) { + return ContactModal( + contact: contact, + onEdit: () async { + if (await FlutterContacts.requestPermission()) { + final updatedContact = await FlutterContacts + .openExternalEdit(contact.id); + if (updatedContact != null) { + _fetchContacts(); + Navigator.of(context).pop(); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text( + '${contact.displayName} updated successfully!'), + ), + ); + } else { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text('Edit canceled or failed.'), + ), + ); + } + } + }, + onToggleFavorite: () => _toggleFavorite(contact), + isFavorite: contact.isStarred, + ); + }, + ); + }, + ); + }).toList(); + }, + ), + ), + ), + PopupMenuButton( + icon: const Icon(Icons.more_vert, color: Colors.white), + itemBuilder: (BuildContext context) => [ + const PopupMenuItem( + value: 'settings', + child: Text('Settings'), + ), + ], + onSelected: (String value) { + if (value == 'settings') { + Navigator.push( + context, + MaterialPageRoute(builder: (context) => const SettingsPage()), + ); + } + }, + ), + ], + ), + ), + Expanded( + child: Stack( + children: [ + TabBarView( + controller: _tabController, + children: [ + const FavoritesPage(), + HistoryPage(key: _historyPageKey), + const ContactPage(), + const VoicemailPage(), + ], + ), + Positioned( + right: 20, + bottom: 20, + child: FloatingActionButton( + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => const CompositionPage(), + ), + ); + }, + backgroundColor: Colors.blue, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(45), + ), + child: const Icon(Icons.dialpad, color: Colors.white), + ), + ), + ], + ), + ), + ], + ), + bottomNavigationBar: Container( + color: Colors.black, + child: TabBar( + controller: _tabController, + tabs: [ + Tab( + icon: Icon(_tabController.index == 0 + ? Icons.star + : Icons.star_border)), + Tab( + icon: Icon(_tabController.index == 1 + ? Icons.access_time_filled + : Icons.access_time_outlined)), + Tab( + icon: Icon(_tabController.index == 2 + ? Icons.contacts + : Icons.contacts_outlined)), + Tab( + icon: Icon(_tabController.index == 3 + ? Icons.voicemail + : Icons.voicemail_outlined), + ), + ], + labelColor: Colors.white, + unselectedLabelColor: const Color.fromARGB(255, 158, 158, 158), + indicatorSize: TabBarIndicatorSize.label, + indicatorColor: Colors.white, + ), + ), + ); + } +} + +class MyHomePage extends StatefulWidget { + const MyHomePage({super.key}); + + @override + _MyHomePageState createState() => _MyHomePageState(); +} \ No newline at end of file diff --git a/dialer/lib/presentation/features/settings/blocked/settings_blocked.dart b/dialer/lib/presentation/features/settings/blocked/settings_blocked.dart new file mode 100644 index 0000000..77c3a85 --- /dev/null +++ b/dialer/lib/presentation/features/settings/blocked/settings_blocked.dart @@ -0,0 +1,167 @@ +import 'package:flutter/material.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + +class BlockedNumbersPage extends StatefulWidget { + const BlockedNumbersPage({super.key}); + + @override + _BlockedNumbersPageState createState() => _BlockedNumbersPageState(); +} + +class _BlockedNumbersPageState extends State { + bool _blockUnknownNumbers = false; // Toggle for blocking unknown numbers + List _blockedNumbers = []; // List of blocked numbers + final TextEditingController _numberController = TextEditingController(); + + @override + void initState() { + super.initState(); + _loadPreferences(); // Load data on initialization + } + + // Load preferences from local storage + Future _loadPreferences() async { + final prefs = await SharedPreferences.getInstance(); + setState(() { + _blockUnknownNumbers = prefs.getBool('blockUnknownNumbers') ?? false; + _blockedNumbers = prefs.getStringList('blockedNumbers') ?? []; + }); + } + + // Save preferences to local storage + Future _savePreferences() async { + final prefs = await SharedPreferences.getInstance(); + await prefs.setBool('blockUnknownNumbers', _blockUnknownNumbers); + await prefs.setStringList('blockedNumbers', _blockedNumbers); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.black, + appBar: AppBar( + title: const Text('Blocked Numbers'), + ), + body: ListView( + padding: const EdgeInsets.all(16), + children: [ + SwitchListTile( + title: const Text( + 'Block Unknown Numbers', + style: TextStyle(color: Colors.white), + ), + value: _blockUnknownNumbers, + onChanged: (bool value) { + setState(() { + _blockUnknownNumbers = value; + _savePreferences(); // Save the state to local storage + }); + }, + ), + const SizedBox(height: 16), + ListTile( + title: const Text( + 'Blocked Numbers', + style: TextStyle(color: Colors.white, fontSize: 18, fontWeight: FontWeight.bold), + ), + subtitle: _blockedNumbers.isEmpty + ? const Text( + 'No blocked numbers', + style: TextStyle(color: Colors.grey), + ) + : null, + ), + ..._blockedNumbers.map( + (number) => ListTile( + title: Text( + number, + style: const TextStyle(color: Colors.white), + ), + trailing: IconButton( + icon: const Icon(Icons.delete, color: Colors.red), + onPressed: () => _unblockNumber(number), + ), + ), + ), + const Divider(color: Colors.grey), + ListTile( + title: const Text( + 'Block a Number', + style: TextStyle(color: Colors.white), + ), + trailing: const Icon(Icons.add, color: Colors.white), + onTap: () => _showBlockNumberDialog(), + ), + ], + ), + ); + } + + // Function to block a number + void _blockNumber(String number) { + if (number.isNotEmpty && !_blockedNumbers.contains(number)) { + setState(() { + _blockedNumbers.add(number); + _savePreferences(); // Save the updated list + }); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text('$number has been blocked')), + ); + } + } + + // Function to unblock a number + void _unblockNumber(String number) { + setState(() { + _blockedNumbers.remove(number); + _savePreferences(); // Save the updated list + }); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text('$number has been unblocked')), + ); + } + + // Dialog for blocking a new number + void _showBlockNumberDialog() { + showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + backgroundColor: Colors.grey[900], + title: const Text('Block a Number', style: TextStyle(color: Colors.white)), + content: TextField( + controller: _numberController, + keyboardType: TextInputType.phone, + decoration: const InputDecoration( + hintText: 'Enter number', + hintStyle: TextStyle(color: Colors.grey), + ), + style: const TextStyle(color: Colors.white), + ), + actions: [ + TextButton( + onPressed: () { + Navigator.pop(context); + }, + child: const Text('Cancel', style: TextStyle(color: Colors.white)), + ), + TextButton( + onPressed: () { + _blockNumber(_numberController.text); + _numberController.clear(); + Navigator.pop(context); + }, + child: const Text('Block', style: TextStyle(color: Colors.red)), + ), + ], + ); + }, + ); + } + + @override + void dispose() { + _numberController.dispose(); + super.dispose(); + } +} diff --git a/dialer/lib/presentation/features/settings/call/settings_call.dart b/dialer/lib/presentation/features/settings/call/settings_call.dart new file mode 100644 index 0000000..09928ab --- /dev/null +++ b/dialer/lib/presentation/features/settings/call/settings_call.dart @@ -0,0 +1,92 @@ +import 'package:flutter/material.dart'; + +class SettingsCallPage extends StatefulWidget { + const SettingsCallPage({super.key}); + + @override + _SettingsCallPageState createState() => _SettingsCallPageState(); +} + +class _SettingsCallPageState extends State { + bool _enableVoicemail = true; + bool _enableCallRecording = false; + String _ringtone = 'Default'; + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.black, + appBar: AppBar( + title: const Text('Calling settings'), + ), + body: ListView( + children: [ + SwitchListTile( + title: const Text('Enable Voicemail', style: TextStyle(color: Colors.white)), + value: _enableVoicemail, + onChanged: (bool value) { + setState(() { + _enableVoicemail = value; + }); + }, + ), + SwitchListTile( + title: const Text('Enable call Recording', style: TextStyle(color: Colors.white)), + value: _enableCallRecording, + onChanged: (bool value) { + setState(() { + _enableCallRecording = value; + }); + }, + ), + ListTile( + title: const Text('Ringtone', style: TextStyle(color: Colors.white)), + subtitle: Text(_ringtone, style: const TextStyle(color: Colors.grey)), + trailing: const Icon(Icons.arrow_forward_ios, color: Colors.white), + onTap: () { + _selectRingtone(context); + }, + ), + ], + ), + ); + } + + void _selectRingtone(BuildContext context) { + showDialog( + context: context, + builder: (BuildContext context) { + return SimpleDialog( + title: const Text('Select Ringtone'), + children: [ + SimpleDialogOption( + onPressed: () { + Navigator.pop(context, 'Default'); + }, + child: const Text('Default'), + ), + SimpleDialogOption( + onPressed: () { + Navigator.pop(context, 'Classic'); + }, + child: const Text('Classic'), + ), + SimpleDialogOption( + onPressed: () { + Navigator.pop(context, 'Beep'); + }, + child: const Text('Beep'), + ), + // ...existing options... + ], + ); + }, + ).then((value) { + if (value != null) { + setState(() { + _ringtone = value; + }); + } + }); + } +} diff --git a/dialer/lib/presentation/features/settings/call/settings_call_page.dart b/dialer/lib/presentation/features/settings/call/settings_call_page.dart new file mode 100644 index 0000000..5ad4de4 --- /dev/null +++ b/dialer/lib/presentation/features/settings/call/settings_call_page.dart @@ -0,0 +1,32 @@ +import 'package:flutter/material.dart'; + +/// Calling settings configuration page +class SettingsCallPage extends StatelessWidget { + const SettingsCallPage({super.key}); + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.black, + appBar: AppBar( + title: const Text('Call Settings'), + ), + body: ListView( + children: const [ + ListTile( + title: Text('Call Forwarding', style: TextStyle(color: Colors.white)), + subtitle: Text('Manage call forwarding options', style: TextStyle(color: Colors.grey)), + ), + ListTile( + title: Text('Call Waiting', style: TextStyle(color: Colors.white)), + subtitle: Text('Enable or disable call waiting', style: TextStyle(color: Colors.grey)), + ), + ListTile( + title: Text('Caller ID', style: TextStyle(color: Colors.white)), + subtitle: Text('Manage your caller ID settings', style: TextStyle(color: Colors.grey)), + ), + ], + ), + ); + } +} diff --git a/dialer/lib/presentation/features/settings/cryptography/key_management.dart b/dialer/lib/presentation/features/settings/cryptography/key_management.dart new file mode 100644 index 0000000..681db26 --- /dev/null +++ b/dialer/lib/presentation/features/settings/cryptography/key_management.dart @@ -0,0 +1,145 @@ +import 'package:flutter/material.dart'; +import 'package:dialer/domain/services/cryptography/asymmetric_crypto_service.dart'; + +class ManageKeysPage extends StatefulWidget { + const ManageKeysPage({Key? key}) : super(key: key); + + @override + _ManageKeysPageState createState() => _ManageKeysPageState(); +} + +class _ManageKeysPageState extends State { + final AsymmetricCryptoService _cryptoService = AsymmetricCryptoService(); + List> _keys = []; + bool _isLoading = false; + + @override + void initState() { + super.initState(); + _loadKeys(); + } + + Future _loadKeys() async { + setState(() { + _isLoading = true; + }); + try { + List> keys = await _cryptoService.getAllKeys(); + setState(() { + _keys = keys; + }); + } catch (e) { + ScaffoldMessenger.of(context) + .showSnackBar(SnackBar(content: Text('Error loading keys: $e'))); + } finally { + setState(() { + _isLoading = false; + }); + } + } + + Future _generateKey() async { + setState(() { + _isLoading = true; + }); + try { + await _cryptoService.generateKeyPair(); + await _loadKeys(); + ScaffoldMessenger.of(context) + .showSnackBar(const SnackBar(content: Text('Key generated successfully'))); + } catch (e) { + ScaffoldMessenger.of(context) + .showSnackBar(SnackBar(content: Text('Error generating key: $e'))); + } finally { + setState(() { + _isLoading = false; + }); + } + } + + Future _deleteKey(String alias) async { + setState(() { + _isLoading = true; + }); + try { + await _cryptoService.deleteKeyPair(alias); + await _loadKeys(); + ScaffoldMessenger.of(context) + .showSnackBar(const SnackBar(content: Text('Key deleted successfully'))); + } catch (e) { + ScaffoldMessenger.of(context) + .showSnackBar(SnackBar(content: Text('Error deleting key: $e'))); + } finally { + setState(() { + _isLoading = false; + }); + } + } + + Future _viewPublicKey(String alias) async { + try { + final publicKey = await _cryptoService.getPublicKey(alias); + showDialog( + context: context, + builder: (_) => AlertDialog( + title: const Text('Public Key'), + content: SingleChildScrollView(child: Text(publicKey)), + actions: [ + TextButton( + child: const Text('Close'), + onPressed: () { + Navigator.pop(context); + }, + ) + ], + ), + ); + } catch (e) { + ScaffoldMessenger.of(context) + .showSnackBar(SnackBar(content: Text('Error retrieving public key: $e'))); + } + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: const Text('Manage Keys'), + ), + body: _isLoading + ? const Center(child: CircularProgressIndicator()) + : _keys.isEmpty + ? const Center(child: Text('No keys found')) + : ListView.builder( + itemCount: _keys.length, + itemBuilder: (context, index) { + final keyData = _keys[index]; + return ListTile( + title: Text(keyData['label'] ?? 'No label'), + subtitle: Text(keyData['alias'] ?? ''), + trailing: Row( + mainAxisSize: MainAxisSize.min, + children: [ + IconButton( + icon: const Icon(Icons.visibility), + tooltip: 'View Public Key', + onPressed: () => _viewPublicKey(keyData['alias']), + ), + IconButton( + icon: const Icon(Icons.delete), + tooltip: 'Delete Key', + onPressed: () => _deleteKey(keyData['alias']), + ), + ], + ), + ); + }, + ), + floatingActionButton: FloatingActionButton( + onPressed: _generateKey, + child: const Icon(Icons.add), + tooltip: 'Generate New Key', + ), + ); + } +} \ No newline at end of file diff --git a/dialer/lib/presentation/features/settings/settings.dart b/dialer/lib/presentation/features/settings/settings.dart new file mode 100644 index 0000000..9d2cfe2 --- /dev/null +++ b/dialer/lib/presentation/features/settings/settings.dart @@ -0,0 +1,74 @@ +import 'package:flutter/material.dart'; +import 'package:dialer/presentation/features/settings/call/settings_call.dart'; +import 'package:dialer/presentation/features/settings/cryptography/key_management.dart'; +import 'package:dialer/presentation/features/settings/blocked/settings_blocked.dart'; +import 'package:dialer/presentation/features/settings/sim/settings_sim.dart'; + +class SettingsPage extends StatelessWidget { + const SettingsPage({super.key}); + + void _navigateToSettings(BuildContext context, String setting) { + switch (setting) { + case 'Calling settings': + Navigator.push( + context, + MaterialPageRoute(builder: (context) => const SettingsCallPage()), + ); + break; + case 'Key management': + Navigator.push( + context, + MaterialPageRoute(builder: (context) => ManageKeysPage()), + ); + break; + case 'Blocked numbers': + Navigator.push( + context, + MaterialPageRoute(builder: (context) => const BlockedNumbersPage()), + ); + break; + case 'Default SIM': + Navigator.push( + context, + MaterialPageRoute(builder: (context) => const SettingsSimPage()), + ); + break; + // Add more cases for other settings pages + default: + // Handle default or unknown settings + break; + } + } + + @override + Widget build(BuildContext context) { + final settingsOptions = [ + 'Calling settings', + 'Key management', + 'Blocked numbers', + 'Default SIM', + ]; + + return Scaffold( + backgroundColor: Colors.black, + appBar: AppBar( + title: const Text('Settings'), + ), + body: ListView.builder( + itemCount: settingsOptions.length, + itemBuilder: (context, index) { + return ListTile( + title: Text( + settingsOptions[index], + style: const TextStyle(color: Colors.white), + ), + trailing: const Icon(Icons.arrow_forward_ios, color: Colors.white), + onTap: () { + _navigateToSettings(context, settingsOptions[index]); + }, + ); + }, + ), + ); + } +} diff --git a/dialer/lib/presentation/features/settings/settings_page.dart b/dialer/lib/presentation/features/settings/settings_page.dart new file mode 100644 index 0000000..e69de29 diff --git a/dialer/lib/presentation/features/settings/sim/settings_sim.dart b/dialer/lib/presentation/features/settings/sim/settings_sim.dart new file mode 100644 index 0000000..6872ea1 --- /dev/null +++ b/dialer/lib/presentation/features/settings/sim/settings_sim.dart @@ -0,0 +1,220 @@ +import 'package:flutter/material.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:sim_data_new/sim_data.dart'; + +class SettingsSimPage extends StatefulWidget { + const SettingsSimPage({super.key}); + + @override + _SettingsSimPageState createState() => _SettingsSimPageState(); +} + +class _SettingsSimPageState extends State { + int _selectedSim = 0; + SimData? _simData; + bool _isLoading = true; + String? _error; + + @override + void initState() { + super.initState(); + _loadSimCards(); + _loadDefaultSim(); + } + + void _loadSimCards() async { + try { + final simData = await SimDataPlugin.getSimData(); + setState(() { + _simData = simData; + _isLoading = false; + _error = null; + }); + } catch (e) { + setState(() { + _isLoading = false; + _error = e.toString(); + }); + print('Error loading SIM cards: $e'); + } + } + + void _loadDefaultSim() async { + final prefs = await SharedPreferences.getInstance(); + setState(() { + _selectedSim = prefs.getInt('default_sim_slot') ?? 0; + }); + } + + void _onSimChanged(int? value) async { + if (value != null) { + final prefs = await SharedPreferences.getInstance(); + await prefs.setInt('default_sim_slot', value); + setState(() { + _selectedSim = value; + }); + } + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.black, + appBar: AppBar( + title: const Text('Default SIM'), + ), + body: _buildBody(), + ); + } + + Widget _buildBody() { + if (_isLoading) { + return const Center( + child: CircularProgressIndicator( + color: Colors.blue, + ), + ); + } + + if (_error != null) { + return Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const Icon( + Icons.error_outline, + color: Colors.red, + size: 64, + ), + const SizedBox(height: 16), + Text( + 'Error loading SIM cards', + style: const TextStyle(color: Colors.white, fontSize: 18), + ), + const SizedBox(height: 8), + Text( + _error!, + style: const TextStyle(color: Colors.grey, fontSize: 14), + textAlign: TextAlign.center, + ), + const SizedBox(height: 16), + ElevatedButton( + onPressed: () { + setState(() { + _isLoading = true; + _error = null; + }); + _loadSimCards(); + }, + child: const Text('Retry'), + ), + const SizedBox(height: 16), + Text( + 'Fallback to default options:', + style: const TextStyle(color: Colors.grey, fontSize: 14), + ), + const SizedBox(height: 8), + _buildFallbackSimList(), + ], + ), + ); + } + + if (_simData == null || _simData!.cards.isEmpty) { + return Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const Icon( + Icons.sim_card_alert, + color: Colors.orange, + size: 64, + ), + const SizedBox(height: 16), + const Text( + 'No SIM cards detected', + style: TextStyle(color: Colors.white, fontSize: 18), + ), + const SizedBox(height: 8), + const Text( + 'Using default options:', + style: TextStyle(color: Colors.grey, fontSize: 14), + ), + const SizedBox(height: 16), + _buildFallbackSimList(), + ], + ), + ); + } + + return ListView.builder( + itemCount: _simData!.cards.length, + itemBuilder: (context, index) { + final card = _simData!.cards[index]; + return RadioListTile( + title: Text( + _getSimDisplayName(card, index), + style: const TextStyle(color: Colors.white), + ), + subtitle: Text( + _getSimSubtitle(card), + style: const TextStyle(color: Colors.grey), + ), + value: card.slotIndex, + groupValue: _selectedSim, + onChanged: _onSimChanged, + activeColor: Colors.blue, + ); + }, + ); + } + + Widget _buildFallbackSimList() { + return Column( + children: [ + RadioListTile( + title: const Text('SIM 1', style: TextStyle(color: Colors.white)), + value: 0, + groupValue: _selectedSim, + onChanged: _onSimChanged, + activeColor: Colors.blue, + ), + RadioListTile( + title: const Text('SIM 2', style: TextStyle(color: Colors.white)), + value: 1, + groupValue: _selectedSim, + onChanged: _onSimChanged, + activeColor: Colors.blue, + ), + ], + ); + } + + String _getSimDisplayName(dynamic card, int index) { + if (card.displayName != null && card.displayName.isNotEmpty) { + return card.displayName; + } + if (card.carrierName != null && card.carrierName.isNotEmpty) { + return card.carrierName; + } + return 'SIM ${index + 1}'; + } + + String _getSimSubtitle(dynamic card) { + List subtitleParts = []; + + if (card.phoneNumber != null && card.phoneNumber.isNotEmpty) { + subtitleParts.add(card.phoneNumber); + } + + if (card.carrierName != null && card.carrierName.isNotEmpty) { + subtitleParts.add(card.carrierName); + } + + if (subtitleParts.isEmpty) { + subtitleParts.add('Slot ${card.slotIndex}'); + } + + return subtitleParts.join(' • '); + } +} diff --git a/dialer/lib/presentation/features/voicemail/voicemail_page.dart b/dialer/lib/presentation/features/voicemail/voicemail_page.dart new file mode 100644 index 0000000..1fea74d --- /dev/null +++ b/dialer/lib/presentation/features/voicemail/voicemail_page.dart @@ -0,0 +1,210 @@ +import 'package:flutter/material.dart'; +import 'package:audioplayers/audioplayers.dart'; + +class VoicemailPage extends StatefulWidget { + const VoicemailPage({super.key}); + + @override + State createState() => _VoicemailPageState(); +} + +class _VoicemailPageState extends State { + bool _expanded = false; + bool _isPlaying = false; + Duration _duration = Duration.zero; + Duration _position = Duration.zero; + late AudioPlayer _audioPlayer; + bool _loading = false; + + @override + void initState() { + super.initState(); + _audioPlayer = AudioPlayer(); + _audioPlayer.onDurationChanged.listen((Duration d) { + setState(() => _duration = d); + }); + _audioPlayer.onPositionChanged.listen((Duration p) { + setState(() => _position = p); + }); + _audioPlayer.onPlayerComplete.listen((event) { + setState(() { + _isPlaying = false; + _position = Duration.zero; + }); + }); + } + + Future _togglePlayPause() async { + if (_isPlaying) { + await _audioPlayer.pause(); + } else { + await _audioPlayer.play(UrlSource('voicemail.mp3')); + } + setState(() => _isPlaying = !_isPlaying); + } + + @override + void dispose() { + _audioPlayer.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + if (_loading) { + return const Center(child: CircularProgressIndicator()); + } + + return Scaffold( + backgroundColor: Colors.black, + body: ListView( + children: [ + GestureDetector( + onTap: () { + setState(() { + _expanded = !_expanded; + }); + }, + child: AnimatedContainer( + duration: const Duration(milliseconds: 300), + margin: const EdgeInsets.all(12), + decoration: BoxDecoration( + color: const Color.fromARGB(255, 30, 30, 30), + borderRadius: BorderRadius.circular(12.0), + ), + padding: const EdgeInsets.all(16), + child: _expanded + ? Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + const CircleAvatar( + radius: 28, + backgroundColor: Colors.amber, + child: Text( + "JD", + style: TextStyle( + color: Colors.deepOrange, + fontSize: 28, + ), + ), + ), + const SizedBox(width: 12), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: const [ + Text( + 'John Doe', + style: TextStyle(color: Colors.white), + ), + Text( + 'Wed 3:00 PM - 1:20 min', + style: TextStyle(color: Colors.grey), + ), + ], + ), + ], + ), + const SizedBox(height: 16), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + IconButton( + icon: Icon( + _isPlaying ? Icons.pause : Icons.play_arrow, + color: Colors.white, + ), + onPressed: _togglePlayPause, + ), + SizedBox( + width: 200, + child: Slider( + min: 0, + max: _duration.inSeconds.toDouble(), + value: _position.inSeconds.toDouble(), + onChanged: (value) async { + final newPos = Duration(seconds: value.toInt()); + await _audioPlayer.seek(newPos); + }, + activeColor: Colors.blue, + inactiveColor: Colors.grey, + ), + ), + ], + ), + const SizedBox(height: 16), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: const [ + Icon(Icons.call, color: Colors.green), + SizedBox(width: 8), + Text('Call', style: TextStyle(color: Colors.white)), + ], + ), + const SizedBox(height: 12), + Row( + children: const [ + Icon(Icons.message, color: Colors.blue), + SizedBox(width: 8), + Text('Text', style: TextStyle(color: Colors.white)), + ], + ), + const SizedBox(height: 12), + Row( + children: const [ + Icon(Icons.block, color: Colors.red), + SizedBox(width: 8), + Text('Block', style: TextStyle(color: Colors.white)), + ], + ), + const SizedBox(height: 12), + Row( + children: const [ + Icon(Icons.share, color: Colors.white), + SizedBox(width: 8), + Text('Share', style: TextStyle(color: Colors.white)), + ], + ), + ], + ), + ], + ) + : Row( + children: [ + const CircleAvatar( + radius: 28, + backgroundColor: Colors.amber, + child: Text( + "JD", + style: TextStyle( + color: Colors.deepOrange, + fontSize: 28, + ), + ), + ), + const SizedBox(width: 12), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: const [ + Text( + 'John Doe', + style: TextStyle(color: Colors.white), + ), + Text( + 'Wed 3:00 PM - 1:20 min', + style: TextStyle(color: Colors.grey), + ), + ], + ), + ], + ), + ), + ), + ], + ), + ); + } +} diff --git a/dialer/pubspec.yaml b/dialer/pubspec.yaml new file mode 100644 index 0000000..b90eac2 --- /dev/null +++ b/dialer/pubspec.yaml @@ -0,0 +1,113 @@ +name: dialer +description: "Icing Dialer" +# The following line prevents the package from being accidentally published to +# pub.dev using `flutter pub publish`. This is preferred for private packages. +publish_to: 'none' # Remove this line if you wish to publish to pub.dev + +# The following defines the version and build number for your application. +# A version number is three numbers separated by dots, like 1.2.43 +# followed by an optional build number separated by a +. +# Both the version and the builder number may be overridden in flutter +# build by specifying --build-name and --build-number, respectively. +# In Android, build-name is used as versionName while build-number used as versionCode. +# Read more about Android versioning at https://developer.android.com/studio/publish/versioning +# In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion. +# Read more about iOS versioning at +# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +# In Windows, build-name is used as the major, minor, and patch parts +# of the product and file versions while build-number is used as the build suffix. +version: 1.0.0+1 + +environment: + sdk: ^3.5.2 + +# Dependencies specify other packages that your package needs in order to work. +# To automatically upgrade your package dependencies to the latest versions +# consider running `flutter pub upgrade --major-versions`. Alternatively, +# dependencies can be manually updated by changing the version numbers below to +# the latest version available on pub.dev. To see which dependencies have newer +# versions available, run `flutter pub outdated`. +dependencies: + flutter: + sdk: flutter + + + # The following adds the Cupertino Icons font to your application. + # Use with the CupertinoIcons class for iOS style icons. + shared_preferences: ^2.3.3 # Local storage (no critical data) + cupertino_icons: ^1.0.8 + flutter_contacts: ^1.1.9+2 + permission_handler: ^11.3.1 # For handling permissions + cached_network_image: ^3.2.3 # For caching contact images + qr_flutter: ^4.1.0 + camera: ^0.10.0+2 + mobile_scanner: ^6.0.2 + pretty_qr_code: ^3.3.0 + pointycastle: ^3.4.0 + file_picker: ^8.1.6 + asn1lib: ^1.0.0 + intl_utils: ^2.0.7 + url_launcher: ^6.3.1 + flutter_secure_storage: ^9.0.0 + audioplayers: ^6.1.0 + cryptography: ^2.0.0 + convert: ^3.0.1 + encrypt: ^5.0.3 + uuid: ^4.5.1 + provider: ^6.1.2 + sim_data_new: ^1.0.1 + + intl: any + +dev_dependencies: + flutter_test: + sdk: flutter + + # The "flutter_lints" package below contains a set of recommended lints to + # encourage good coding practices. The lint set provided by the package is + # activated in the `analysis_options.yaml` file located at the root of your + # package. See that file for information about deactivating specific lint + # rules and activating additional ones. + flutter_lints: ^5.0.0 + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter packages. +flutter: + + # The following line ensures that the Material Icons font is + # included with your application, so that you can use the icons in + # the material Icons class. + uses-material-design: true + + # To add assets to your application, add an assets section, like this: + # assets: + # - images/a_dot_burr.jpeg + # - images/a_dot_ham.jpeg + + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/to/resolution-aware-images + + # For details regarding adding assets from package dependencies, see + # https://flutter.dev/to/asset-from-package + + # To add custom fonts to your application, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts from package dependencies, + # see https://flutter.dev/to/font-from-package diff --git a/dialer/run.sh b/dialer/run.sh new file mode 100755 index 0000000..2aa3244 --- /dev/null +++ b/dialer/run.sh @@ -0,0 +1,10 @@ +#!/bin/bash -e + +IMG=git.gmoker.com/icing/flutter:main + +if [ "$1" == '-s' ]; then + OPT+=(--dart-define=STEALTH=true) +fi + +set -x +docker run --rm -p 5037:5037 -v "$PWD:/app/" "$IMG" run "${OPTS[@]}" diff --git a/dialer/stealth_local_run.sh b/dialer/stealth_local_run.sh new file mode 100755 index 0000000..74dd1d6 --- /dev/null +++ b/dialer/stealth_local_run.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +echo "Running Icing Dialer in STEALTH mode..." +flutter run --release --dart-define=STEALTH=true diff --git a/dialer/test/widget_test.dart b/dialer/test/widget_test.dart new file mode 100644 index 0000000..15b52a2 --- /dev/null +++ b/dialer/test/widget_test.dart @@ -0,0 +1,30 @@ +// This is a basic Flutter widget test. +// +// To perform an interaction with a widget in your test, use the WidgetTester +// utility in the flutter_test package. For example, you can send tap and scroll +// gestures. You can also use WidgetTester to find child widgets in the widget +// tree, read text, and verify that the values of widget properties are correct. + +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import 'package:dialer/main.dart'; + +void main() { + testWidgets('Counter increments smoke test', (WidgetTester tester) async { + // Build our app and trigger a frame. + await tester.pumpWidget(const Dialer()); + + // Verify that our counter starts at 0. + expect(find.text('0'), findsOneWidget); + expect(find.text('1'), findsNothing); + + // Tap the '+' icon and trigger a frame. + await tester.tap(find.byIcon(Icons.add)); + await tester.pump(); + + // Verify that our counter has incremented. + expect(find.text('0'), findsNothing); + expect(find.text('1'), findsOneWidget); + }); +} diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 0000000..85a54e6 --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,5 @@ +* +!*.md +!*.pdf +!*.sh +!.gitignore diff --git a/docs/Icing.md b/docs/Icing.md new file mode 100644 index 0000000..11e980f --- /dev/null +++ b/docs/Icing.md @@ -0,0 +1,69 @@ +# Icing + + + +*By* +**Bartosz Michalak - Alexis Danlos - Florian Griffon - STCB** + +--- + +## Summary + +- [Introduction to Icing](#introducingtoicing) +- [Strategy](#icingsstrategy) +- [Technology choices]() + +--- + +## Introduction to Icing + +Icing is the name of our project, which is divided in **three interconnected goals**: +1. Build a mutual-authentication and end-to-end encryption protocol, NAAP, for half and full-duplex audio communication, network agnostic. Network Agnostic Authentication Protocol. +2. Provide a reference implementation in the form of an **Android Package**, that anybody can use to implement the protocol into their application. +3. Provide a reference implementation in the form of an **Android Dialer**, that uses the android package, and that could seamlessly replace any Android user's default dialer. + + +### Setting a new security standard + +#### ***"There is no way to create a backdoor that only the good guys can walk through"*** +> (*Meredith Whittaker - President of Signal Fundation - July 2023, Channel 4*) + +Enabling strong authentication on the phone network, either cellular or cable, would change the way we use our phone. + +Reduced phone-related scams, simplified and safer banking or government services interactions, reduced dependency to the internet, and more, are the benefits both consumers and organizations would enjoy. + +Encrypting the data end-to-end increases security globally by a considerable factor, particularly in low-bandwidth / no internet areas, and the added privacy would benefit everyone. + + +--- + +### Privacy and security in telecoms should not depend on internet availability. + +We are conscious that ourselves, and our surroundings, grew up in Global North, with simple and cheap internet and telecommunication access, but we should not forget that on a global point of view, it is estimated that less than 20% of the world's stepable land is covered with 3G/4G/+ network. +Standard "low-tech" GSM network coverage is almost twice that. + +So in a real-world, stressful and harsh condition, affording privacy or security in telecommunication is usually too much of a luxury; and we should change that. + +Our solution is for the every-man that is not even aware of its smart phone weakness, as well as for the activists or journalists surviving in hostile environment around the globe. + + + +### Icing's strategy + +We focus on FOSS community as a primary target. + +Our reference implementation, the Iced dialer, is destined to replace any stock dialer app from any android smartphone. + +Alternative open-source and privacy-focused Android distributions, such as GrapheneOS, are major targets. + +Their community are thriving, and could help our open-source development. + +--- + +### Technology choices + +We chose to code with Flutter, the Dart framework. +Even though this choice gives us quick-delivery capabilities, we will need to switch language for lower levels development, such as sound stream caption, encryption, compression, encoding, and transmission. + +The language for these manoeuvres is not determined yet, but Go, Rust, Kotlin and Java are good candidates. + diff --git a/docs/UserManual.md b/docs/UserManual.md new file mode 100644 index 0000000..2296907 --- /dev/null +++ b/docs/UserManual.md @@ -0,0 +1,182 @@ +# User Manual for Icing Dialer + +## Introduction + +The Icing Dialer is an open-source mobile application designed to enable end-to-end encrypted voice calls over GSM/LTE networks, ensuring privacy without reliance on the internet, servers, or third-party infrastructure. This manual provides comprehensive guidance for three audiences: average users, security experts, and developers. A final section outlines our manual testing policy to ensure the application's reliability and security. + +- **Average User**: Instructions for using the Icing Dialer as a transparent replacement for the default phone dialer. +- **Security Expert**: Technical details of the Icing protocol, including cryptographic mechanisms and implementation. +- **Developer**: In-depth explanation of the code architecture, Icing protocol library, and integration guidelines. +- **Manual Tests**: Overview of the manual testing policy for validating the application and protocol. + +--- + +## Summary + +- [Average User](#average-user) +- [Security Expert](#security-expert) +- [Developer](#developer) +- [Manual Tests](#manual-tests) + +--- + +## Average User + +The Icing Dialer is a privacy-focused mobile application that replaces your default phone dialer, providing secure, end-to-end encrypted voice calls over GSM/LTE networks. It is designed to be intuitive and indistinguishable from a standard dialer, ensuring seamless use for all users. + +### Key Features +- **Seamless Dialer Replacement**: Functions as a full replacement for your phone’s default dialer, supporting standard call features and encrypted calls. +- **Cryptographic Key Pair Generation**: Automatically generates an ED25519 key pair during setup for secure communications, stored securely using the Android Keystore. +- **Secure Contact Sharing**: Adds and shares contacts via QR codes or VCF files, ensuring privacy. +- **Automatic Call Encryption**: Encrypts calls with compatible Icing Dialer users using the Noise protocol, encoded into the analog audio signal via Codec2 and 4FSK modulation. +- **On-the-Fly Pairing**: Detects other Icing Dialer users and offers encrypted pairing during calls (optional, under development). +- **Call Management**: Includes call history, contact management, visual voicemail, and features like mute, speaker, and SIM selection. +- **Privacy Protection**: Safeguards sensitive communications with secure voice authentication and encrypted voicemail. + +### Getting Started +1. **Installation**: Install the Icing Dialer from a trusted source (e.g., a partnered AOSP fork or Magisk module for rooted Android devices). +2. **Setup**: Upon first launch, the app generates an ED25519 key pair using the Android Keystore. Follow prompts to complete setup. +3. **Adding Contacts**: Use the QR code or VCF import feature to securely add contacts. Scan a contact’s QR code or import a VCF file to establish a secure connection. +4. **Making Calls**: Dial numbers using the full dialer interface (numbers, *, #). The app uses the Android Telephony API to detect compatible users and automatically encrypts calls when possible. +5. **Encrypted Calls**: Calls to known contacts with public keys are automatically encrypted. A data rate and error indicator provide real-time feedback. Use the disable encryption button if needed. +6. **Call History and Contacts**: Access call history with filters for missed, incoming, and outgoing calls. Tap a call to view details or open a contact modal. Manage contacts with search, favorites, and blocklist features. +7. **Visual Voicemail**: Play, pause, or manage voicemails with quick links to call, text, block, or share numbers. +8. **Settings**: Configure default SIM, manage public keys, and access the blocklist via the settings menu. + +### Troubleshooting +- **FAQs**: Available on our Reddit and Telegram channels for common issues and setup guidance. +- **Feedback**: Submit feedback via our anonymous CryptPad form for prompt issue resolution. + +### Example Scenarios +- **Secure Voicemail Access**: Mathilda, 34, uses Icing to securely retrieve a PayPal authentication code from her voicemail, protected by her registered Icing public key. +- **Authenticated Calls**: Jeff, 70, authenticates with his bank using encrypted DTMF transmission, ensuring secure and verified communication. +- **Private Communication**: Elise, 42, a journalist, uses Icing to make discreet, encrypted calls despite unreliable or monitored networks. +- **Emergency Calls Abroad**: Paul, 22, a developer, uses Icing to securely assist colleagues with a critical issue while abroad, relying only on voice calls. + +--- + +## Security Expert + +The Icing Dialer is the reference implementation of the Icing protocol, an open, decentralized encryption protocol for telephony. This section details the cryptographic and technical foundations, focusing on security principles. + +### Icing Protocol Overview +The Icing protocol enables end-to-end encrypted voice calls over GSM/LTE networks by encoding cryptographic data into the analog audio signal. Key components include: +- **End-to-End Encryption**: Utilizes the Noise protocol with XX (mutual authentication) and XK (known-key) handshake patterns for secure session establishment, using ED25519 key pairs. +- **Perfect Forward Secrecy**: Ensures session keys are ephemeral and discarded after use, with future sessions salted using pseudo-random values derived from past calls. +- **Codec2 and 4FSK**: Voice data is compressed using Codec2 and modulated with 4FSK (Four Frequency Shift Keying) for transmission over GSM/LTE. +- **Secure Contact Pairing**: Uses QR codes or VCF files for secure key exchange, preventing man-in-the-middle attacks. +- **Encrypted DTMF**: Supports secure transmission of DTMF signals for authentication scenarios. +- **Forward Error Correction (FEC)**: Detects up to 50% of transmission errors in Alpha 1, with plans for stronger FEC (>80% detection, 20% correction) in future iterations. +- **Decentralized Design**: Operates without servers or third-party intermediaries, minimizing attack surfaces. +- **Voice Authentication**: Implements cryptographic voice authentication to verify caller identity. + +### Security Implementation +- **Cryptographic Framework**: Uses ED25519 key pairs for authentication and encryption, generated and stored securely via the Android Keystore. The Noise protocol ensures secure key exchange and session setup. AES-256 and ECC (P-256, ECDH) are employed for data encryption. +- **Analog Signal Encoding**: Codec2 compresses voice data, and 4FSK modulates encrypted data into the analog audio signal, ensuring compatibility with GSM/LTE networks. +- **Threat Model**: Protects against eavesdropping, interception, replay attacks, and unauthorized access. Includes replay protection mechanisms and assumes adversaries may control network infrastructure but not device endpoints. +- **Data Privacy**: Minimizes data storage (only encrypted keys and minimal metadata), with no unencrypted call metadata stored. Sensitive data is encrypted at rest. +- **Current Status**: Protocol Alpha 1, tested in DryBox, validates peer ping, ephemeral key management, handshakes, real-time encryption, stream compression, and 4FSK transmission. Alpha 2 will enhance FEC and on-the-fly key exchange. + +### Future Considerations +- Develop a full RFC for the Icing protocol, documenting peer ping, handshakes, and FEC. +- Optimize Codec2 and 4FSK for improved audio quality and transmission reliability. +- Implement embedded silent data transmission (e.g., DTMF) and on-the-fly key exchange. +- Enhance interoperability with existing standards (e.g., SIP, WebRTC). + +--- + +## Developer + +The Icing Dialer and its protocol are open-source and extensible. This section explains the code architecture, Icing protocol library, and guidelines for integration into custom applications. + +### Code Architecture +The Icing Dialer is developed in two implementations: +- **Root-app**: For rooted Android devices, deployed via a Magisk module (~85% complete for Alpha 1). +- **AOSP-app**: Integrated into a custom AOSP fork for native support, pending partnerships with AOSP-based projects (e.g., GrapheneOS, LineageOS). + +The application is written in Kotlin, leveraging the Android Telephony API for call management and a modular architecture: +- **UI Layer**: A responsive, intuitive interface resembling a default phone dialer, with accessibility features, contact management, and call history. +- **Encryption Layer**: Manages ED25519 key pair generation (via Android Keystore or RAM for export), Noise protocol handshakes (XX and XK), Codec2 compression, and 4FSK modulation. +- **Network Layer**: Interfaces with GSM/LTE networks via the Android Telephony API to encode encrypted data into analog audio signals. + +### Icing Protocol Library +The Kotlin-based Icing protocol library (~75% complete for Alpha 1) enables third-party applications to implement the Icing protocol. Key components include: +- **KeyPairGenerator**: Generates and manages ED25519 key pairs, supporting secure (Android Keystore) and insecure (RAM) generation, with export/import capabilities. +- **NoiseProtocolHandler**: Implements XX and XK handshakes for secure session establishment, ensuring Perfect Forward Secrecy. +- **QRCodeHandler**: Manages secure contact sharing via QR codes or VCF files. +- **AudioEncoder**: Compresses voice with Codec2 and modulates encrypted data with 4FSK. +- **CallManager**: Uses the Android Telephony API to detect peers, initiate calls, and handle DTMF transmission. +- **FECModule**: Implements basic FEC for detecting 50% of transmission errors, with plans for enhanced detection and correction. + +#### Integration Guide +1. **Include the Library**: Add the Icing protocol library to your project (available upon Beta release). +2. **Initialize KeyPairGenerator**: Generate an ED25519 key pair using Android Keystore for secure storage or RAM for exportable keys. +3. **Implement NoiseProtocolHandler**: Configure XX or XK handshakes for authentication and session setup. +4. **Integrate QRCodeHandler**: Enable contact sharing via QR codes or VCF files. +5. **Use AudioEncoder**: Compress voice with Codec2 and modulate with 4FSK for GSM/LTE transmission. +6. **Leverage CallManager**: Manage calls and DTMF via the Android Telephony API. +7. **Test with DryBox**: Validate implementation using the Python-based DryBox environment for end-to-end call simulation. + +### Development Status +- **Protocol Alpha 1**: Implemented in DryBox, supporting peer ping, ephemeral keys, handshakes, encryption, Codec2 compression, and 4FSK modulation. +- **Kotlin Library**: 75% complete, with tasks remaining for Alpha 1 completion. +- **Root-app**: 85% complete, with Magisk deployment in progress. +- **AOSP-app**: In development, pending AOSP fork partnerships. + +Developers can join our Reddit or Telegram communities for updates and to contribute to the open-source project. + +--- + +## Manual Tests + +The Icing project employs a rigorous manual testing policy to ensure the reliability, security, and usability of the Icing Dialer and its protocol. This section outlines our testing approach, incorporating beta testing scenarios and evaluation criteria. + +### Testing Environment +- **DryBox**: A Python-based environment simulating end-to-end encrypted calls over a controlled network, used to validate Protocol Alpha 1 and future iterations. +- **Root-app Testing**: Conducted on rooted Android devices using Magisk modules. +- **AOSP-app Testing**: Planned for custom AOSP forks, pending partnerships. + +### Manual Testing Policy +- **Usability Testing**: Beta testers evaluate the dialer’s intuitiveness as a drop-in replacement, testing call initiation, contact management, and voicemail. Initial tests confirm usability without prior instructions. +- **Encryption Validation**: Tests in DryBox verify end-to-end encryption using Noise protocol (XX/XK handshakes), ED25519 key pairs, Codec2, and 4FSK. Includes encrypted DTMF and FEC (50% error detection). +- **Contact Pairing**: Tests QR code and VCF-based contact sharing for security and functionality. +- **Call Scenarios**: Tests include clear calls (to non-Icing and Icing dialers), encrypted calls (to known and unknown contacts), and DTMF transmission. +- **Performance Testing**: Ensures minimal latency, low bandwidth usage, and high audio quality (clarity, minimal distortion) via Codec2/4FSK. +- **Privacy Testing**: Verifies encrypted storage of keys and minimal metadata, with no unencrypted call logs stored. +- **Integration Testing**: Validates Android Telephony API integration, permissions (microphone, camera, contacts), and background operation. + +### Beta Testing Scenarios +- Clear call from Icing Dialer to another dialer (e.g., Google, Apple). +- Clear call between two Icing Dialers. +- Clear call to a known contact (with public key) without Icing Dialer. +- Encrypted call to a known contact with Icing Dialer. +- Encrypted call to an unknown contact with Icing Dialer (optional, under development). +- Create/edit/save contacts with/without public keys. +- Share/import contacts via QR code/VCF. +- Listen to voicemail and verify encryption. +- Record and verify encrypted call integrity. +- Change default SIM. + +### Evaluation Criteria +- **Security**: Validates AES-256/ECC encryption, ED25519 key management, Perfect Forward Secrecy, replay protection, and end-to-end encryption integrity. +- **Performance**: Measures call setup latency, bandwidth efficiency, and audio quality (clarity, consistency). +- **Usability**: Ensures intuitive UI, seamless call handling, and robust error recovery. +- **Interoperability**: Tests compatibility with GSM/LTE networks and potential future integration with SIP/WebRTC. +- **Privacy**: Confirms encrypted data storage, minimal permissions, and no unencrypted metadata. +- **Maintainability**: Reviews code quality, modularity, and documentation for the protocol and library. + +### Current Testing Status +- **Protocol Alpha 1**: Validated in DryBox for encryption, handshakes, Codec2/4FSK, and FEC. +- **Root-app**: 85% complete, undergoing usability, performance, and security testing. +- **Feedback Channels**: Anonymous feedback via CryptPad and FAQs on Reddit/Telegram inform testing. + +### Future Testing Plans +- Test Protocol Alpha 2 for enhanced FEC and on-the-fly key exchange. +- Conduct AOSP-app testing with partnered forks. +- Incorporate NPS/CSAT metrics from AMAs to assess user satisfaction. + +--- + +## Conclusion + +The Icing Dialer and its protocol offer a pioneering approach to secure telephony, leveraging ED25519 key pairs, the Noise protocol, Codec2, 4FSK, and the Android Telephony API. This manual provides comprehensive guidance for users, security experts, and developers, supported by a robust testing policy. For further details or to contribute, visit our Reddit or Telegram communities. diff --git a/protocol_prototype/DryBox/UI/audio_player.py b/protocol_prototype/DryBox/UI/audio_player.py new file mode 100644 index 0000000..6b922d7 --- /dev/null +++ b/protocol_prototype/DryBox/UI/audio_player.py @@ -0,0 +1,253 @@ +import wave +import threading +import queue +import time +import os +from datetime import datetime +from PyQt5.QtCore import QObject, pyqtSignal + +# Try to import PyAudio, but handle if it's not available +try: + import pyaudio + PYAUDIO_AVAILABLE = True +except ImportError: + PYAUDIO_AVAILABLE = False + print("Warning: PyAudio not installed. Audio playback will be disabled.") + print("To enable playback, install with: sudo dnf install python3-devel portaudio-devel && pip install pyaudio") + +class AudioPlayer(QObject): + playback_started = pyqtSignal(int) # client_id + playback_stopped = pyqtSignal(int) # client_id + recording_saved = pyqtSignal(int, str) # client_id, filepath + + def __init__(self): + super().__init__() + self.audio = None + self.streams = {} # client_id -> stream + self.buffers = {} # client_id -> queue + self.threads = {} # client_id -> thread + self.recording_buffers = {} # client_id -> list of audio data + self.recording_enabled = {} # client_id -> bool + self.playback_enabled = {} # client_id -> bool + self.sample_rate = 8000 + self.channels = 1 + self.chunk_size = 320 # 40ms at 8kHz + self.debug_callback = None + + if PYAUDIO_AVAILABLE: + try: + self.audio = pyaudio.PyAudio() + except Exception as e: + self.debug(f"Failed to initialize PyAudio: {e}") + self.audio = None + else: + self.audio = None + self.debug("PyAudio not available - playback disabled, recording still works") + + def debug(self, message): + if self.debug_callback: + self.debug_callback(f"[AudioPlayer] {message}") + else: + print(f"[AudioPlayer] {message}") + + def set_debug_callback(self, callback): + self.debug_callback = callback + + def start_playback(self, client_id): + """Start audio playback for a client""" + if not self.audio: + self.debug("Audio playback not available - PyAudio not installed") + self.debug("To enable: sudo dnf install python3-devel portaudio-devel && pip install pyaudio") + return False + + if client_id in self.streams: + self.debug(f"Playback already active for client {client_id}") + return False + + try: + # Create audio stream + stream = self.audio.open( + format=pyaudio.paInt16, + channels=self.channels, + rate=self.sample_rate, + output=True, + frames_per_buffer=self.chunk_size + ) + + self.streams[client_id] = stream + self.buffers[client_id] = queue.Queue() + self.playback_enabled[client_id] = True + + # Start playback thread + thread = threading.Thread( + target=self._playback_thread, + args=(client_id,), + daemon=True + ) + self.threads[client_id] = thread + thread.start() + + self.debug(f"Started playback for client {client_id}") + self.playback_started.emit(client_id) + return True + + except Exception as e: + self.debug(f"Failed to start playback for client {client_id}: {e}") + return False + + def stop_playback(self, client_id): + """Stop audio playback for a client""" + if client_id not in self.streams: + return + + self.playback_enabled[client_id] = False + + # Wait for thread to finish + if client_id in self.threads: + self.threads[client_id].join(timeout=1.0) + del self.threads[client_id] + + # Close stream + if client_id in self.streams: + try: + self.streams[client_id].stop_stream() + self.streams[client_id].close() + except: + pass + del self.streams[client_id] + + # Clear buffer + if client_id in self.buffers: + del self.buffers[client_id] + + self.debug(f"Stopped playback for client {client_id}") + self.playback_stopped.emit(client_id) + + def add_audio_data(self, client_id, pcm_data): + """Add audio data to playback buffer""" + # Initialize frame counter for debug logging + if not hasattr(self, '_frame_count'): + self._frame_count = {} + if client_id not in self._frame_count: + self._frame_count[client_id] = 0 + self._frame_count[client_id] += 1 + + # Only log occasionally to avoid spam + if self._frame_count[client_id] == 1 or self._frame_count[client_id] % 25 == 0: + self.debug(f"Client {client_id} audio frame #{self._frame_count[client_id]}: {len(pcm_data)} bytes") + + if client_id in self.buffers: + self.buffers[client_id].put(pcm_data) + if self._frame_count[client_id] == 1: + self.debug(f"Client {client_id} buffer started, queue size: {self.buffers[client_id].qsize()}") + else: + self.debug(f"Client {client_id} has no buffer (playback not started?)") + + # Add to recording buffer if recording + if self.recording_enabled.get(client_id, False): + if client_id not in self.recording_buffers: + self.recording_buffers[client_id] = [] + self.recording_buffers[client_id].append(pcm_data) + + def _playback_thread(self, client_id): + """Thread function for audio playback""" + stream = self.streams.get(client_id) + buffer = self.buffers.get(client_id) + + if not stream or not buffer: + return + + self.debug(f"Playback thread started for client {client_id}") + + while self.playback_enabled.get(client_id, False): + try: + # Get audio data from buffer with timeout + audio_data = buffer.get(timeout=0.1) + + # Only log first frame to avoid spam + if not hasattr(self, '_playback_logged'): + self._playback_logged = {} + if client_id not in self._playback_logged: + self._playback_logged[client_id] = False + + if not self._playback_logged[client_id]: + self.debug(f"Client {client_id} playback thread playing first frame: {len(audio_data)} bytes") + self._playback_logged[client_id] = True + + # Play audio + stream.write(audio_data) + + except queue.Empty: + # No data available, continue + continue + except Exception as e: + self.debug(f"Playback error for client {client_id}: {e}") + break + + self.debug(f"Playback thread ended for client {client_id}") + + def start_recording(self, client_id): + """Start recording received audio""" + self.recording_enabled[client_id] = True + self.recording_buffers[client_id] = [] + self.debug(f"Started recording for client {client_id}") + + def stop_recording(self, client_id, save_path=None): + """Stop recording and optionally save to file""" + if not self.recording_enabled.get(client_id, False): + return None + + self.recording_enabled[client_id] = False + + if client_id not in self.recording_buffers: + return None + + audio_data = self.recording_buffers[client_id] + + if not audio_data: + self.debug(f"No audio data recorded for client {client_id}") + return None + + # Generate filename if not provided + if not save_path: + timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") + save_path = f"wav/received_client{client_id}_{timestamp}.wav" + + # Ensure directory exists + save_dir = os.path.dirname(save_path) + if save_dir: + os.makedirs(save_dir, exist_ok=True) + + try: + # Combine all audio chunks + combined_audio = b''.join(audio_data) + + # Save as WAV file + with wave.open(save_path, 'wb') as wav_file: + wav_file.setnchannels(self.channels) + wav_file.setsampwidth(2) # 16-bit + wav_file.setframerate(self.sample_rate) + wav_file.writeframes(combined_audio) + + self.debug(f"Saved recording for client {client_id} to {save_path}") + self.recording_saved.emit(client_id, save_path) + + # Clear recording buffer + del self.recording_buffers[client_id] + + return save_path + + except Exception as e: + self.debug(f"Failed to save recording for client {client_id}: {e}") + return None + + def cleanup(self): + """Clean up audio resources""" + # Stop all playback + for client_id in list(self.streams.keys()): + self.stop_playback(client_id) + + # Terminate PyAudio + if self.audio: + self.audio.terminate() + self.audio = None \ No newline at end of file diff --git a/protocol_prototype/DryBox/UI/audio_processor.py b/protocol_prototype/DryBox/UI/audio_processor.py new file mode 100644 index 0000000..8f98c79 --- /dev/null +++ b/protocol_prototype/DryBox/UI/audio_processor.py @@ -0,0 +1,220 @@ +import numpy as np +import wave +import os +from datetime import datetime +from PyQt5.QtCore import QObject, pyqtSignal +import struct + +class AudioProcessor(QObject): + processing_complete = pyqtSignal(str) # filepath + + def __init__(self): + super().__init__() + self.debug_callback = None + + def debug(self, message): + if self.debug_callback: + self.debug_callback(f"[AudioProcessor] {message}") + else: + print(f"[AudioProcessor] {message}") + + def set_debug_callback(self, callback): + self.debug_callback = callback + + def apply_gain(self, audio_data, gain_db): + """Apply gain to audio data""" + # Convert bytes to numpy array + samples = np.frombuffer(audio_data, dtype=np.int16) + + # Apply gain + gain_linear = 10 ** (gain_db / 20.0) + samples_float = samples.astype(np.float32) * gain_linear + + # Clip to prevent overflow + samples_float = np.clip(samples_float, -32768, 32767) + + # Convert back to int16 + return samples_float.astype(np.int16).tobytes() + + def apply_noise_gate(self, audio_data, threshold_db=-40): + """Apply noise gate to remove low-level noise""" + samples = np.frombuffer(audio_data, dtype=np.int16) + + # Calculate RMS in dB + rms = np.sqrt(np.mean(samples.astype(np.float32) ** 2)) + rms_db = 20 * np.log10(max(rms, 1e-10)) + + # Gate the audio if below threshold + if rms_db < threshold_db: + return np.zeros_like(samples, dtype=np.int16).tobytes() + + return audio_data + + def apply_low_pass_filter(self, audio_data, cutoff_hz=3400, sample_rate=8000): + """Apply simple low-pass filter""" + samples = np.frombuffer(audio_data, dtype=np.int16).astype(np.float32) + + # Simple moving average filter + # Calculate filter length based on cutoff frequency + filter_length = int(sample_rate / cutoff_hz) + if filter_length < 3: + filter_length = 3 + + # Apply moving average + filtered = np.convolve(samples, np.ones(filter_length) / filter_length, mode='same') + + return filtered.astype(np.int16).tobytes() + + def apply_high_pass_filter(self, audio_data, cutoff_hz=300, sample_rate=8000): + """Apply simple high-pass filter""" + samples = np.frombuffer(audio_data, dtype=np.int16).astype(np.float32) + + # Simple differentiator as high-pass + filtered = np.diff(samples, prepend=samples[0]) + + # Scale to maintain amplitude + scale = cutoff_hz / (sample_rate / 2) + filtered *= scale + + return filtered.astype(np.int16).tobytes() + + def normalize_audio(self, audio_data, target_db=-3): + """Normalize audio to target dB level""" + samples = np.frombuffer(audio_data, dtype=np.int16).astype(np.float32) + + # Find peak + peak = np.max(np.abs(samples)) + if peak == 0: + return audio_data + + # Calculate current peak in dB + current_db = 20 * np.log10(peak / 32768.0) + + # Calculate gain needed + gain_db = target_db - current_db + + # Apply gain + return self.apply_gain(audio_data, gain_db) + + def remove_silence(self, audio_data, threshold_db=-40, min_silence_ms=100, sample_rate=8000): + """Remove silence from audio""" + samples = np.frombuffer(audio_data, dtype=np.int16) + + # Calculate frame size for silence detection + frame_size = int(sample_rate * min_silence_ms / 1000) + + # Detect non-silent regions + non_silent_regions = [] + i = 0 + + while i < len(samples): + frame = samples[i:i+frame_size] + if len(frame) == 0: + break + + # Calculate RMS of frame + rms = np.sqrt(np.mean(frame.astype(np.float32) ** 2)) + rms_db = 20 * np.log10(max(rms, 1e-10)) + + if rms_db > threshold_db: + # Found non-silent region, find its extent + start = i + while i < len(samples): + frame = samples[i:i+frame_size] + if len(frame) == 0: + break + rms = np.sqrt(np.mean(frame.astype(np.float32) ** 2)) + rms_db = 20 * np.log10(max(rms, 1e-10)) + if rms_db <= threshold_db: + break + i += frame_size + non_silent_regions.append((start, i)) + else: + i += frame_size + + # Combine non-silent regions + if not non_silent_regions: + return audio_data # Return original if all silent + + combined = [] + for start, end in non_silent_regions: + combined.extend(samples[start:end]) + + return np.array(combined, dtype=np.int16).tobytes() + + def save_processed_audio(self, audio_data, original_path, processing_type): + """Save processed audio with descriptive filename""" + # Generate new filename + base_name = os.path.splitext(os.path.basename(original_path))[0] + timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") + new_filename = f"{base_name}_{processing_type}_{timestamp}.wav" + + # Ensure directory exists + save_dir = os.path.dirname(original_path) + if not save_dir: + save_dir = "wav" + os.makedirs(save_dir, exist_ok=True) + + save_path = os.path.join(save_dir, new_filename) + + try: + with wave.open(save_path, 'wb') as wav_file: + wav_file.setnchannels(1) + wav_file.setsampwidth(2) + wav_file.setframerate(8000) + wav_file.writeframes(audio_data) + + self.debug(f"Saved processed audio to {save_path}") + self.processing_complete.emit(save_path) + return save_path + + except Exception as e: + self.debug(f"Failed to save processed audio: {e}") + return None + + def concatenate_audio_files(self, file_paths, output_path=None): + """Concatenate multiple audio files""" + if not file_paths: + return None + + combined_data = b'' + sample_rate = None + + for file_path in file_paths: + try: + with wave.open(file_path, 'rb') as wav_file: + if sample_rate is None: + sample_rate = wav_file.getframerate() + elif wav_file.getframerate() != sample_rate: + self.debug(f"Sample rate mismatch in {file_path}") + continue + + data = wav_file.readframes(wav_file.getnframes()) + combined_data += data + + except Exception as e: + self.debug(f"Failed to read {file_path}: {e}") + + if not combined_data: + return None + + # Save concatenated audio + if not output_path: + timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") + output_path = f"wav/concatenated_{timestamp}.wav" + + os.makedirs(os.path.dirname(output_path), exist_ok=True) + + try: + with wave.open(output_path, 'wb') as wav_file: + wav_file.setnchannels(1) + wav_file.setsampwidth(2) + wav_file.setframerate(sample_rate or 8000) + wav_file.writeframes(combined_data) + + self.debug(f"Saved concatenated audio to {output_path}") + return output_path + + except Exception as e: + self.debug(f"Failed to save concatenated audio: {e}") + return None \ No newline at end of file diff --git a/protocol_prototype/DryBox/UI/main.py b/protocol_prototype/DryBox/UI/main.py new file mode 100644 index 0000000..8d7ce77 --- /dev/null +++ b/protocol_prototype/DryBox/UI/main.py @@ -0,0 +1,714 @@ +import sys +from PyQt5.QtWidgets import ( + QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, + QPushButton, QLabel, QFrame, QSizePolicy, QStyle, QTextEdit, QSplitter, + QMenu, QAction, QInputDialog, QShortcut +) +from PyQt5.QtCore import Qt, QSize, QTimer, pyqtSignal +from PyQt5.QtGui import QFont, QTextCursor, QKeySequence +import time +import threading +from phone_manager import PhoneManager +from waveform_widget import WaveformWidget +from phone_state import PhoneState + +class PhoneUI(QMainWindow): + debug_signal = pyqtSignal(str) + + def __init__(self): + super().__init__() + self.setWindowTitle("DryBox - Noise XK + Codec2 + 4FSK") + self.setGeometry(100, 100, 1200, 900) + + # Set minimum size to ensure window is resizable + self.setMinimumSize(800, 600) + + # Auto test state + self.auto_test_running = False + self.auto_test_timer = None + self.test_step = 0 + self.setStyleSheet(""" + QMainWindow { background-color: #333333; } + QLabel { color: #E0E0E0; font-size: 14px; } + QPushButton { + background-color: #0078D4; color: white; border: none; + padding: 10px 15px; border-radius: 5px; font-size: 14px; + min-height: 30px; + } + QPushButton:hover { background-color: #005A9E; } + QPushButton:pressed { background-color: #003C6B; } + QPushButton#settingsButton { background-color: #555555; } + QPushButton#settingsButton:hover { background-color: #777777; } + QFrame#phoneDisplay { + background-color: #1E1E1E; border: 2px solid #0078D4; + border-radius: 10px; + } + QLabel#phoneTitleLabel { + font-size: 18px; font-weight: bold; padding-bottom: 5px; + color: #FFFFFF; + } + QLabel#mainTitleLabel { + font-size: 24px; font-weight: bold; color: #00A2E8; + padding: 15px; + } + QWidget#phoneWidget { + border: 2px solid #4A4A4A; border-radius: 10px; + background-color: #3A3A3A; + min-width: 250px; + } + QTextEdit#debugConsole { + background-color: #1E1E1E; color: #00FF00; + font-family: monospace; font-size: 12px; + border: 2px solid #0078D4; border-radius: 5px; + } + QPushButton#autoTestButton { + background-color: #FF8C00; min-height: 35px; + } + QPushButton#autoTestButton:hover { background-color: #FF7F00; } + """) + + # Setup debug signal early + self.debug_signal.connect(self.append_debug) + + self.manager = PhoneManager() + self.manager.ui = self # Set UI reference for debug logging + self.manager.initialize_phones() + + # Main widget with splitter + main_widget = QWidget() + self.setCentralWidget(main_widget) + main_layout = QVBoxLayout() + main_widget.setLayout(main_layout) + + # Create splitter for phones and debug console + self.splitter = QSplitter(Qt.Vertical) + main_layout.addWidget(self.splitter) + + # Top widget for phones + phones_widget = QWidget() + phones_layout = QVBoxLayout() + phones_layout.setSpacing(20) + phones_layout.setContentsMargins(20, 20, 20, 20) + phones_layout.setAlignment(Qt.AlignCenter) + phones_widget.setLayout(phones_layout) + + # App Title + app_title_label = QLabel("Integrated Protocol Control Panel") + app_title_label.setObjectName("mainTitleLabel") + app_title_label.setAlignment(Qt.AlignCenter) + phones_layout.addWidget(app_title_label) + + # Protocol info + protocol_info = QLabel("Noise XK + Codec2 (1200bps) + 4FSK") + protocol_info.setAlignment(Qt.AlignCenter) + protocol_info.setStyleSheet("font-size: 12px; color: #00A2E8;") + phones_layout.addWidget(protocol_info) + + # Phone displays layout + phone_controls_layout = QHBoxLayout() + phone_controls_layout.setSpacing(20) + phone_controls_layout.setContentsMargins(10, 0, 10, 0) + phones_layout.addLayout(phone_controls_layout) + + # Setup UI for phones + for phone in self.manager.phones: + phone_container_widget, phone_display_frame, phone_button, waveform_widget, sent_waveform_widget, phone_status_label, playback_button, record_button = self._create_phone_ui( + f"Phone {phone['id']+1}", lambda checked, pid=phone['id']: self.manager.phone_action(pid, self) + ) + phone['button'] = phone_button + phone['waveform'] = waveform_widget + phone['sent_waveform'] = sent_waveform_widget + phone['status_label'] = phone_status_label + phone['playback_button'] = playback_button + phone['record_button'] = record_button + + # Connect audio control buttons with proper closure + playback_button.clicked.connect(lambda checked, pid=phone['id']: self.toggle_playback(pid)) + record_button.clicked.connect(lambda checked, pid=phone['id']: self.toggle_recording(pid)) + phone_controls_layout.addWidget(phone_container_widget) + # Connect data_received signal - it emits (data, client_id) + phone['client'].data_received.connect(lambda data, cid: self.manager.update_waveform(cid, data)) + phone['client'].state_changed.connect(lambda state, num, cid=phone['id']: self.set_phone_state(cid, state, num)) + phone['client'].start() + + # Control buttons layout + control_layout = QHBoxLayout() + control_layout.setSpacing(15) + control_layout.setContentsMargins(20, 10, 20, 10) + + # Auto Test Button + self.auto_test_button = QPushButton("🧪 Run Automatic Test") + self.auto_test_button.setObjectName("autoTestButton") + self.auto_test_button.setMinimumWidth(180) + self.auto_test_button.setMaximumWidth(250) + self.auto_test_button.clicked.connect(self.toggle_auto_test) + control_layout.addWidget(self.auto_test_button) + + # Clear Debug Button + self.clear_debug_button = QPushButton("Clear Debug") + self.clear_debug_button.setMinimumWidth(100) + self.clear_debug_button.setMaximumWidth(150) + self.clear_debug_button.clicked.connect(self.clear_debug) + control_layout.addWidget(self.clear_debug_button) + + # Audio Processing Button + self.audio_menu_button = QPushButton("Audio Options") + self.audio_menu_button.setMinimumWidth(100) + self.audio_menu_button.setMaximumWidth(150) + self.audio_menu_button.clicked.connect(self.show_audio_menu) + control_layout.addWidget(self.audio_menu_button) + + # Settings Button + self.settings_button = QPushButton("Settings") + self.settings_button.setObjectName("settingsButton") + self.settings_button.setMinimumWidth(100) + self.settings_button.setMaximumWidth(150) + self.settings_button.setIcon(self.style().standardIcon(QStyle.SP_FileDialogDetailedView)) + self.settings_button.setIconSize(QSize(20, 20)) + self.settings_button.clicked.connect(self.settings_action) + control_layout.addWidget(self.settings_button) + + phones_layout.addLayout(control_layout) + + # Add phones widget to splitter + self.splitter.addWidget(phones_widget) + + # Debug console + self.debug_console = QTextEdit() + self.debug_console.setObjectName("debugConsole") + self.debug_console.setReadOnly(True) + self.debug_console.setMinimumHeight(200) + self.debug_console.setMaximumHeight(400) + self.splitter.addWidget(self.debug_console) + + # Flush any queued debug messages + if hasattr(self, '_debug_queue'): + for msg in self._debug_queue: + self.debug_console.append(msg) + del self._debug_queue + + # Set splitter sizes (70% phones, 30% debug) + self.splitter.setSizes([600, 300]) + + # Initialize UI + for phone in self.manager.phones: + self.update_phone_ui(phone['id']) + + # Initial debug message + QTimer.singleShot(100, lambda: self.debug("DryBox UI initialized with integrated protocol")) + + # Setup keyboard shortcuts + self.setup_shortcuts() + + def _create_phone_ui(self, title, action_slot): + phone_container_widget = QWidget() + phone_container_widget.setObjectName("phoneWidget") + phone_container_widget.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred) + phone_layout = QVBoxLayout() + phone_layout.setAlignment(Qt.AlignCenter) + phone_layout.setSpacing(10) + phone_layout.setContentsMargins(15, 15, 15, 15) + phone_container_widget.setLayout(phone_layout) + + phone_title_label = QLabel(title) + phone_title_label.setObjectName("phoneTitleLabel") + phone_title_label.setAlignment(Qt.AlignCenter) + phone_layout.addWidget(phone_title_label) + + phone_display_frame = QFrame() + phone_display_frame.setObjectName("phoneDisplay") + phone_display_frame.setMinimumSize(200, 250) + phone_display_frame.setMaximumSize(300, 400) + phone_display_frame.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred) + + display_content_layout = QVBoxLayout(phone_display_frame) + display_content_layout.setAlignment(Qt.AlignCenter) + phone_status_label = QLabel("Idle") + phone_status_label.setAlignment(Qt.AlignCenter) + phone_status_label.setFont(QFont("Arial", 16)) + display_content_layout.addWidget(phone_status_label) + phone_layout.addWidget(phone_display_frame, alignment=Qt.AlignCenter) + + phone_button = QPushButton() + phone_button.setMinimumWidth(100) + phone_button.setMaximumWidth(150) + phone_button.setIconSize(QSize(20, 20)) + phone_button.clicked.connect(action_slot) + phone_layout.addWidget(phone_button, alignment=Qt.AlignCenter) + + # Received waveform + waveform_label = QLabel(f"{title} Received") + waveform_label.setAlignment(Qt.AlignCenter) + waveform_label.setStyleSheet("font-size: 12px; color: #E0E0E0;") + phone_layout.addWidget(waveform_label) + waveform_widget = WaveformWidget(dynamic=False) + waveform_widget.setMinimumSize(200, 50) + waveform_widget.setMaximumSize(300, 80) + waveform_widget.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed) + phone_layout.addWidget(waveform_widget, alignment=Qt.AlignCenter) + + # Sent waveform + sent_waveform_label = QLabel(f"{title} Sent") + sent_waveform_label.setAlignment(Qt.AlignCenter) + sent_waveform_label.setStyleSheet("font-size: 12px; color: #E0E0E0;") + phone_layout.addWidget(sent_waveform_label) + sent_waveform_widget = WaveformWidget(dynamic=False) + sent_waveform_widget.setMinimumSize(200, 50) + sent_waveform_widget.setMaximumSize(300, 80) + sent_waveform_widget.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed) + phone_layout.addWidget(sent_waveform_widget, alignment=Qt.AlignCenter) + + # Audio control buttons + audio_controls_layout = QHBoxLayout() + audio_controls_layout.setAlignment(Qt.AlignCenter) + + playback_button = QPushButton("🔊 Playback") + playback_button.setCheckable(True) + playback_button.setMinimumWidth(90) + playback_button.setMaximumWidth(120) + playback_button.setStyleSheet(""" + QPushButton { + background-color: #404040; + color: white; + border: 1px solid #606060; + padding: 5px; + border-radius: 3px; + } + QPushButton:checked { + background-color: #4CAF50; + } + QPushButton:hover { + background-color: #505050; + } + """) + + record_button = QPushButton("⏺ Record") + record_button.setCheckable(True) + record_button.setMinimumWidth(90) + record_button.setMaximumWidth(120) + record_button.setStyleSheet(""" + QPushButton { + background-color: #404040; + color: white; + border: 1px solid #606060; + padding: 5px; + border-radius: 3px; + } + QPushButton:checked { + background-color: #F44336; + } + QPushButton:hover { + background-color: #505050; + } + """) + + audio_controls_layout.addWidget(playback_button) + audio_controls_layout.addWidget(record_button) + phone_layout.addLayout(audio_controls_layout) + + return phone_container_widget, phone_display_frame, phone_button, waveform_widget, sent_waveform_widget, phone_status_label, playback_button, record_button + + def update_phone_ui(self, phone_id): + phone = self.manager.phones[phone_id] + other_phone = self.manager.phones[1 - phone_id] + state = phone['state'] + phone_number = other_phone['number'] if state != PhoneState.IDLE else "" + button = phone['button'] + status_label = phone['status_label'] + + if state == PhoneState.IDLE: + button.setText("Call") + button.setIcon(self.style().standardIcon(QStyle.SP_MediaPlay)) + status_label.setText("Idle") + button.setStyleSheet("background-color: #0078D4;") + elif state == PhoneState.CALLING: + button.setText("Cancel") + button.setIcon(self.style().standardIcon(QStyle.SP_MediaStop)) + status_label.setText(f"Calling {phone_number}...") + button.setStyleSheet("background-color: #E81123;") + elif state == PhoneState.IN_CALL: + button.setText("Hang Up") + button.setIcon(self.style().standardIcon(QStyle.SP_DialogCancelButton)) + status_label.setText(f"In Call with {phone_number}") + button.setStyleSheet("background-color: #E81123;") + elif state == PhoneState.RINGING: + button.setText("Answer") + button.setIcon(self.style().standardIcon(QStyle.SP_DialogApplyButton)) + status_label.setText(f"Incoming Call from {phone_number}") + button.setStyleSheet("background-color: #107C10;") + + def set_phone_state(self, client_id, state_str, number): + self.debug(f"Phone {client_id + 1} state change: {state_str}") + + # Handle protocol-specific states + if state_str == "HANDSHAKE_COMPLETE": + phone = self.manager.phones[client_id] + phone['status_label'].setText("🔒 Secure Channel Established") + self.debug(f"Phone {client_id + 1} secure channel established") + self.manager.start_audio(client_id, parent=self) + return + elif state_str == "VOICE_START": + phone = self.manager.phones[client_id] + phone['status_label'].setText("🎤 Voice Active (Encrypted)") + self.debug(f"Phone {client_id + 1} voice session started") + return + elif state_str == "VOICE_END": + phone = self.manager.phones[client_id] + phone['status_label'].setText("🔒 Secure Channel") + self.debug(f"Phone {client_id + 1} voice session ended") + return + + # Handle regular states + state = self.manager.map_state(state_str) + phone = self.manager.phones[client_id] + other_phone = self.manager.phones[1 - client_id] + self.debug(f"Setting state for Phone {client_id + 1}: {state.name if hasattr(state, 'name') else state}, number: {number}, is_initiator: {phone['is_initiator']}") + phone['state'] = state + if state == PhoneState.IN_CALL: + self.debug(f"Phone {client_id + 1} confirmed in IN_CALL state") + self.debug(f" state_str={state_str}, number={number}") + self.debug(f" is_initiator={phone['is_initiator']}") + + # Only start handshake when the initiator RECEIVES the IN_CALL message + if state_str == "IN_CALL" and phone['is_initiator']: + self.debug(f"Phone {client_id + 1} (initiator) received IN_CALL, starting handshake") + phone['client'].start_handshake(initiator=True, keypair=phone['keypair'], peer_pubkey=other_phone['public_key']) + elif number == "HANDSHAKE": + # Old text-based handshake trigger - no longer used + self.debug(f"Phone {client_id + 1} received legacy HANDSHAKE message") + elif number == "HANDSHAKE_DONE": + self.debug(f"Phone {client_id + 1} received HANDSHAKE_DONE") + # Handled by HANDSHAKE_COMPLETE now + pass + self.update_phone_ui(client_id) + + def settings_action(self): + print("Settings clicked") + self.debug("Settings clicked") + + def debug(self, message): + """Thread-safe debug logging to both console and UI""" + timestamp = time.strftime("%H:%M:%S.%f")[:-3] + debug_msg = f"[{timestamp}] {message}" + print(debug_msg) # Console output + self.debug_signal.emit(debug_msg) # UI output + + def append_debug(self, message): + """Append debug message to console (called from main thread)""" + if hasattr(self, 'debug_console'): + self.debug_console.append(message) + # Auto-scroll to bottom + cursor = self.debug_console.textCursor() + cursor.movePosition(QTextCursor.End) + self.debug_console.setTextCursor(cursor) + else: + # Queue messages until console is ready + if not hasattr(self, '_debug_queue'): + self._debug_queue = [] + self._debug_queue.append(message) + + def clear_debug(self): + """Clear debug console""" + self.debug_console.clear() + self.debug("Debug console cleared") + + def toggle_auto_test(self): + """Toggle automatic test sequence""" + if not self.auto_test_running: + self.start_auto_test() + else: + self.stop_auto_test() + + def start_auto_test(self): + """Start automatic test sequence""" + self.auto_test_running = True + self.auto_test_button.setText("⏹ Stop Test") + self.test_step = 0 + + self.debug("=== STARTING AUTOMATIC TEST SEQUENCE ===") + self.debug("Test will go through complete protocol flow") + + # Start test timer + self.auto_test_timer = QTimer() + self.auto_test_timer.timeout.connect(self.execute_test_step) + self.auto_test_timer.start(2000) # 2 second intervals + + # Execute first step immediately + self.execute_test_step() + + def stop_auto_test(self): + """Stop automatic test sequence""" + self.auto_test_running = False + self.auto_test_button.setText("🧪 Run Automatic Test") + + if self.auto_test_timer: + self.auto_test_timer.stop() + self.auto_test_timer = None + + self.debug("=== TEST SEQUENCE STOPPED ===") + + def execute_test_step(self): + """Execute next step in test sequence""" + phone1 = self.manager.phones[0] + phone2 = self.manager.phones[1] + + self.debug(f"\n--- Test Step {self.test_step + 1} ---") + + if self.test_step == 0: + # Step 1: Check initial state + self.debug("Checking initial state...") + state1 = phone1['state'] + state2 = phone2['state'] + # Handle both enum and int states + state1_name = state1.name if hasattr(state1, 'name') else str(state1) + state2_name = state2.name if hasattr(state2, 'name') else str(state2) + self.debug(f"Phone 1 state: {state1_name}") + self.debug(f"Phone 2 state: {state2_name}") + self.debug(f"Phone 1 connected: {phone1['client'].sock is not None}") + self.debug(f"Phone 2 connected: {phone2['client'].sock is not None}") + + elif self.test_step == 1: + # Step 2: Make call + self.debug("Phone 1 calling Phone 2...") + self.manager.phone_action(0, self) + state1_name = phone1['state'].name if hasattr(phone1['state'], 'name') else str(phone1['state']) + state2_name = phone2['state'].name if hasattr(phone2['state'], 'name') else str(phone2['state']) + self.debug(f"Phone 1 state after call: {state1_name}") + self.debug(f"Phone 2 state after call: {state2_name}") + + elif self.test_step == 2: + # Step 3: Answer call + self.debug("Phone 2 answering call...") + self.manager.phone_action(1, self) + state1_name = phone1['state'].name if hasattr(phone1['state'], 'name') else str(phone1['state']) + state2_name = phone2['state'].name if hasattr(phone2['state'], 'name') else str(phone2['state']) + self.debug(f"Phone 1 state after answer: {state1_name}") + self.debug(f"Phone 2 state after answer: {state2_name}") + self.debug(f"Phone 1 is_initiator: {phone1['is_initiator']}") + self.debug(f"Phone 2 is_initiator: {phone2['is_initiator']}") + + elif self.test_step == 3: + # Step 4: Check handshake progress + self.debug("Checking handshake progress...") + self.debug(f"Phone 1 handshake in progress: {phone1['client'].state.handshake_in_progress}") + self.debug(f"Phone 2 handshake in progress: {phone2['client'].state.handshake_in_progress}") + self.debug(f"Phone 1 command queue: {phone1['client'].state.command_queue.qsize()}") + self.debug(f"Phone 2 command queue: {phone2['client'].state.command_queue.qsize()}") + # Increase timer interval for handshake + self.auto_test_timer.setInterval(3000) # 3 seconds + + elif self.test_step == 4: + # Step 5: Check handshake status + self.debug("Checking Noise XK handshake status...") + self.debug(f"Phone 1 handshake complete: {phone1['client'].handshake_complete}") + self.debug(f"Phone 2 handshake complete: {phone2['client'].handshake_complete}") + self.debug(f"Phone 1 has session: {phone1['client'].noise_session is not None}") + self.debug(f"Phone 2 has session: {phone2['client'].noise_session is not None}") + # Reset timer interval + self.auto_test_timer.setInterval(2000) + + elif self.test_step == 5: + # Step 6: Check voice status + self.debug("Checking voice session status...") + self.debug(f"Phone 1 voice active: {phone1['client'].voice_active}") + self.debug(f"Phone 2 voice active: {phone2['client'].voice_active}") + self.debug(f"Phone 1 codec initialized: {phone1['client'].codec is not None}") + self.debug(f"Phone 2 codec initialized: {phone2['client'].codec is not None}") + self.debug(f"Phone 1 modem initialized: {phone1['client'].modem is not None}") + self.debug(f"Phone 2 modem initialized: {phone2['client'].modem is not None}") + + elif self.test_step == 6: + # Step 7: Check audio transmission + self.debug("Checking audio transmission...") + self.debug(f"Phone 1 audio file loaded: {phone1['audio_file'] is not None}") + self.debug(f"Phone 2 audio file loaded: {phone2['audio_file'] is not None}") + self.debug(f"Phone 1 frame counter: {phone1.get('frame_counter', 0)}") + self.debug(f"Phone 2 frame counter: {phone2.get('frame_counter', 0)}") + self.debug(f"Phone 1 audio timer active: {phone1['audio_timer'] is not None and phone1['audio_timer'].isActive()}") + self.debug(f"Phone 2 audio timer active: {phone2['audio_timer'] is not None and phone2['audio_timer'].isActive()}") + + elif self.test_step == 7: + # Step 8: Protocol details + self.debug("Protocol stack details:") + if phone1['client'].codec: + self.debug(f"Codec mode: {phone1['client'].codec.mode.name}") + self.debug(f"Frame size: {phone1['client'].codec.frame_bits} bits") + self.debug(f"Frame duration: {phone1['client'].codec.frame_ms} ms") + if phone1['client'].modem: + self.debug(f"FSK frequencies: {phone1['client'].modem.frequencies}") + self.debug(f"Symbol rate: {phone1['client'].modem.baud_rate} baud") + + elif self.test_step == 8: + # Step 9: Wait for more frames + self.debug("Letting voice transmission run...") + self.auto_test_timer.setInterval(5000) # Wait 5 seconds + + elif self.test_step == 9: + # Step 10: Final statistics + self.debug("Final transmission statistics:") + self.debug(f"Phone 1 frames sent: {phone1.get('frame_counter', 0)}") + self.debug(f"Phone 2 frames sent: {phone2.get('frame_counter', 0)}") + self.auto_test_timer.setInterval(2000) # Back to 2 seconds + + elif self.test_step == 10: + # Step 11: Hang up + self.debug("Hanging up call...") + self.manager.phone_action(0, self) + state1_name = phone1['state'].name if hasattr(phone1['state'], 'name') else str(phone1['state']) + state2_name = phone2['state'].name if hasattr(phone2['state'], 'name') else str(phone2['state']) + self.debug(f"Phone 1 state after hangup: {state1_name}") + self.debug(f"Phone 2 state after hangup: {state2_name}") + + elif self.test_step == 11: + # Complete + self.debug("\n=== TEST SEQUENCE COMPLETE ===") + self.debug("All protocol components tested successfully!") + self.stop_auto_test() + return + + self.test_step += 1 + + def toggle_playback(self, phone_id): + """Toggle audio playback for a phone""" + is_enabled = self.manager.toggle_playback(phone_id) + phone = self.manager.phones[phone_id] + phone['playback_button'].setChecked(is_enabled) + + if is_enabled: + self.debug(f"Phone {phone_id + 1}: Audio playback enabled") + else: + self.debug(f"Phone {phone_id + 1}: Audio playback disabled") + + def toggle_recording(self, phone_id): + """Toggle audio recording for a phone""" + is_recording, save_path = self.manager.toggle_recording(phone_id) + phone = self.manager.phones[phone_id] + phone['record_button'].setChecked(is_recording) + + if is_recording: + self.debug(f"Phone {phone_id + 1}: Recording started") + else: + if save_path: + self.debug(f"Phone {phone_id + 1}: Recording saved to {save_path}") + else: + self.debug(f"Phone {phone_id + 1}: Recording stopped (no data)") + + def show_audio_menu(self): + """Show audio processing options menu""" + menu = QMenu(self) + + # Create phone selection submenu + for phone_id in range(2): + phone_menu = menu.addMenu(f"Phone {phone_id + 1}") + + # Export buffer + export_action = QAction("Export Audio Buffer", self) + export_action.triggered.connect(lambda checked, pid=phone_id: self.export_audio_buffer(pid)) + phone_menu.addAction(export_action) + + # Clear buffer + clear_action = QAction("Clear Audio Buffer", self) + clear_action.triggered.connect(lambda checked, pid=phone_id: self.clear_audio_buffer(pid)) + phone_menu.addAction(clear_action) + + phone_menu.addSeparator() + + # Processing options + normalize_action = QAction("Normalize Audio", self) + normalize_action.triggered.connect(lambda checked, pid=phone_id: self.process_audio(pid, "normalize")) + phone_menu.addAction(normalize_action) + + gain_action = QAction("Apply Gain...", self) + gain_action.triggered.connect(lambda checked, pid=phone_id: self.apply_gain_dialog(pid)) + phone_menu.addAction(gain_action) + + noise_gate_action = QAction("Apply Noise Gate", self) + noise_gate_action.triggered.connect(lambda checked, pid=phone_id: self.process_audio(pid, "noise_gate")) + phone_menu.addAction(noise_gate_action) + + low_pass_action = QAction("Apply Low Pass Filter", self) + low_pass_action.triggered.connect(lambda checked, pid=phone_id: self.process_audio(pid, "low_pass")) + phone_menu.addAction(low_pass_action) + + high_pass_action = QAction("Apply High Pass Filter", self) + high_pass_action.triggered.connect(lambda checked, pid=phone_id: self.process_audio(pid, "high_pass")) + phone_menu.addAction(high_pass_action) + + remove_silence_action = QAction("Remove Silence", self) + remove_silence_action.triggered.connect(lambda checked, pid=phone_id: self.process_audio(pid, "remove_silence")) + phone_menu.addAction(remove_silence_action) + + # Show menu at button position + menu.exec_(self.audio_menu_button.mapToGlobal(self.audio_menu_button.rect().bottomLeft())) + + def export_audio_buffer(self, phone_id): + """Export audio buffer for a phone""" + save_path = self.manager.export_buffered_audio(phone_id) + if save_path: + self.debug(f"Phone {phone_id + 1}: Audio buffer exported to {save_path}") + else: + self.debug(f"Phone {phone_id + 1}: No audio data to export") + + def clear_audio_buffer(self, phone_id): + """Clear audio buffer for a phone""" + self.manager.clear_audio_buffer(phone_id) + + def process_audio(self, phone_id, processing_type): + """Process audio with specified type""" + save_path = self.manager.process_audio(phone_id, processing_type) + if save_path: + self.debug(f"Phone {phone_id + 1}: Processed audio saved to {save_path}") + else: + self.debug(f"Phone {phone_id + 1}: Audio processing failed") + + def apply_gain_dialog(self, phone_id): + """Show dialog to get gain value""" + gain, ok = QInputDialog.getDouble( + self, "Apply Gain", "Enter gain in dB:", + 0.0, -20.0, 20.0, 1 + ) + if ok: + save_path = self.manager.process_audio(phone_id, "gain", gain_db=gain) + if save_path: + self.debug(f"Phone {phone_id + 1}: Applied {gain}dB gain, saved to {save_path}") + + def setup_shortcuts(self): + """Setup keyboard shortcuts""" + # Phone 1 shortcuts + QShortcut(QKeySequence("1"), self, lambda: self.manager.phone_action(0, self)) + QShortcut(QKeySequence("Ctrl+1"), self, lambda: self.toggle_playback(0)) + QShortcut(QKeySequence("Alt+1"), self, lambda: self.toggle_recording(0)) + + # Phone 2 shortcuts + QShortcut(QKeySequence("2"), self, lambda: self.manager.phone_action(1, self)) + QShortcut(QKeySequence("Ctrl+2"), self, lambda: self.toggle_playback(1)) + QShortcut(QKeySequence("Alt+2"), self, lambda: self.toggle_recording(1)) + + # General shortcuts + QShortcut(QKeySequence("Space"), self, self.toggle_auto_test) + QShortcut(QKeySequence("Ctrl+L"), self, self.clear_debug) + QShortcut(QKeySequence("Ctrl+A"), self, self.show_audio_menu) + + self.debug("Keyboard shortcuts enabled:") + self.debug(" 1/2: Phone action (call/answer/hangup)") + self.debug(" Ctrl+1/2: Toggle playback") + self.debug(" Alt+1/2: Toggle recording") + self.debug(" Space: Toggle auto test") + self.debug(" Ctrl+L: Clear debug") + self.debug(" Ctrl+A: Audio options menu") + + def closeEvent(self, event): + if self.auto_test_running: + self.stop_auto_test() + # Clean up audio player + if hasattr(self.manager, 'audio_player'): + self.manager.audio_player.cleanup() + for phone in self.manager.phones: + phone['client'].stop() + event.accept() + +if __name__ == "__main__": + app = QApplication(sys.argv) + window = PhoneUI() + window.show() + sys.exit(app.exec_()) \ No newline at end of file diff --git a/protocol_prototype/DryBox/UI/noise_wrapper.py b/protocol_prototype/DryBox/UI/noise_wrapper.py new file mode 100644 index 0000000..dbcdb62 --- /dev/null +++ b/protocol_prototype/DryBox/UI/noise_wrapper.py @@ -0,0 +1,127 @@ +"""Wrapper for Noise XK handshake over GSM simulator""" + +import struct +from dissononce.processing.impl.handshakestate import HandshakeState +from dissononce.processing.impl.symmetricstate import SymmetricState +from dissononce.processing.impl.cipherstate import CipherState +from dissononce.processing.handshakepatterns.interactive.XK import XKHandshakePattern +from dissononce.cipher.chachapoly import ChaChaPolyCipher +from dissononce.dh.x25519.x25519 import X25519DH +from dissononce.dh.keypair import KeyPair +from dissononce.dh.x25519.public import PublicKey +from dissononce.hash.sha256 import SHA256Hash + +class NoiseXKWrapper: + """Wrapper for Noise XK that works over message-passing instead of direct sockets""" + + def __init__(self, keypair, peer_pubkey, debug_callback=None): + self.keypair = keypair + self.peer_pubkey = peer_pubkey + self.debug = debug_callback or print + + # Build handshake state + cipher = ChaChaPolyCipher() + dh = X25519DH() + hshash = SHA256Hash() + symmetric = SymmetricState(CipherState(cipher), hshash) + self._hs = HandshakeState(symmetric, dh) + + self._send_cs = None + self._recv_cs = None + self.handshake_complete = False + self.is_initiator = None # Track initiator status + + # Message buffers + self.outgoing_messages = [] + self.incoming_messages = [] + + def start_handshake(self, initiator): + """Start the handshake process""" + self.debug(f"Starting Noise XK handshake as {'initiator' if initiator else 'responder'}") + self.is_initiator = initiator # Store initiator status + + if initiator: + # Initiator knows peer's static out-of-band + self._hs.initialize( + XKHandshakePattern(), + True, + b'', + s=self.keypair, + rs=self.peer_pubkey + ) + # Generate first message + buf = bytearray() + self._hs.write_message(b'', buf) + self.outgoing_messages.append(bytes(buf)) + self.debug(f"Generated handshake message 1: {len(buf)} bytes") + else: + # Responder doesn't know peer's static yet + self._hs.initialize( + XKHandshakePattern(), + False, + b'', + s=self.keypair + ) + self.debug("Responder initialized, waiting for first message") + + def process_handshake_message(self, data): + """Process incoming handshake message and generate response if needed""" + self.debug(f"Processing handshake message: {len(data)} bytes") + + try: + # Read the message + payload = bytearray() + cs_pair = self._hs.read_message(data, payload) + + # Check if we need to send a response + if not cs_pair: + # More messages needed + buf = bytearray() + cs_pair = self._hs.write_message(b'', buf) + self.outgoing_messages.append(bytes(buf)) + self.debug(f"Generated handshake response: {len(buf)} bytes") + + # Check if handshake completed after writing (for initiator) + if cs_pair: + self._complete_handshake(cs_pair) + else: + # Handshake complete after reading (for responder) + self._complete_handshake(cs_pair) + + except Exception as e: + self.debug(f"Handshake error: {e}") + raise + + def get_next_handshake_message(self): + """Get next outgoing handshake message""" + if self.outgoing_messages: + return self.outgoing_messages.pop(0) + return None + + def encrypt(self, plaintext): + """Encrypt a message""" + if not self.handshake_complete: + raise RuntimeError("Handshake not complete") + return self._send_cs.encrypt_with_ad(b'', plaintext) + + def decrypt(self, ciphertext): + """Decrypt a message""" + if not self.handshake_complete: + raise RuntimeError("Handshake not complete") + return self._recv_cs.decrypt_with_ad(b'', ciphertext) + + def _complete_handshake(self, cs_pair): + """Complete the handshake with the given cipher states""" + self.debug("Handshake complete, setting up cipher states") + cs0, cs1 = cs_pair + + # Use stored initiator status + if self.is_initiator: + self._send_cs, self._recv_cs = cs0, cs1 + self.debug("Set up cipher states as initiator") + else: + self._send_cs, self._recv_cs = cs1, cs0 + self.debug("Set up cipher states as responder") + + self.handshake_complete = True + self.debug("Cipher states established") \ No newline at end of file diff --git a/protocol_prototype/DryBox/UI/phone_manager.py b/protocol_prototype/DryBox/UI/phone_manager.py new file mode 100644 index 0000000..d53f837 --- /dev/null +++ b/protocol_prototype/DryBox/UI/phone_manager.py @@ -0,0 +1,374 @@ +import secrets +from PyQt5.QtCore import QTimer +from protocol_phone_client import ProtocolPhoneClient +from session import NoiseXKSession +from phone_state import PhoneState # Added import +from audio_player import AudioPlayer +from audio_processor import AudioProcessor +import struct +import wave +import os + +class PhoneManager: + def __init__(self): + self.phones = [] + self.handshake_done_count = 0 + self.ui = None # Will be set by UI + self.audio_player = AudioPlayer() + self.audio_player.set_debug_callback(self.debug) + self.audio_processor = AudioProcessor() + self.audio_processor.set_debug_callback(self.debug) + self.audio_buffer = {} # client_id -> list of audio chunks for processing + + def debug(self, message): + """Send debug message to UI if available""" + if self.ui and hasattr(self.ui, 'debug'): + self.ui.debug(f"[PhoneManager] {message}") + else: + print(f"[PhoneManager] {message}") + + def initialize_phones(self): + for i in range(2): + client = ProtocolPhoneClient(i) # Use protocol client + client.set_debug_callback(self.debug) # Set debug callback + client.manager = self # Set manager reference for handshake lookup + keypair = NoiseXKSession.generate_keypair() + phone = { + 'id': i, + 'client': client, + 'state': PhoneState.IDLE, + 'number': "123-4567" if i == 0 else "987-6543", + 'audio_timer': None, + 'keypair': keypair, + 'public_key': keypair.public, + 'is_initiator': False, + 'audio_file': None, # For test audio + 'frame_counter': 0, + 'playback_enabled': False, + 'recording_enabled': False + } + client.keypair = keypair # Also set keypair on client + self.phones.append(phone) + self.debug(f"Initialized Phone {i+1} with public key: {keypair.public.data.hex()[:32]}...") + + self.phones[0]['peer_public_key'] = self.phones[1]['public_key'] + self.phones[1]['peer_public_key'] = self.phones[0]['public_key'] + + def phone_action(self, phone_id, ui_manager): + phone = self.phones[phone_id] + other_phone = self.phones[1 - phone_id] + self.debug(f"Phone {phone_id + 1} action triggered, current state: {phone['state'].name}") + + if phone['state'] == PhoneState.IDLE: + self.debug(f"Phone {phone_id + 1} initiating call to Phone {2-phone_id}") + phone['state'] = PhoneState.CALLING + other_phone['state'] = PhoneState.RINGING + phone['is_initiator'] = True + other_phone['is_initiator'] = False + phone['client'].send("RINGING") + elif phone['state'] == PhoneState.RINGING: + self.debug(f"Phone {phone_id + 1} answering call from Phone {2-phone_id}") + phone['state'] = PhoneState.IN_CALL + # Don't set other_phone state here - let it set when it receives IN_CALL + phone['client'].send("IN_CALL") + elif phone['state'] in [PhoneState.IN_CALL, PhoneState.CALLING]: + if not phone['client'].state.handshake_in_progress and phone['state'] != PhoneState.CALLING: + phone['state'] = other_phone['state'] = PhoneState.IDLE + phone['client'].send("CALL_END") + for p in [phone, other_phone]: + if p['audio_timer']: + p['audio_timer'].stop() + # End voice session + if p['client'].voice_active: + p['client'].end_voice_session() + # Close audio file + if p['audio_file']: + p['audio_file'].close() + p['audio_file'] = None + p['frame_counter'] = 0 + else: + self.debug(f"Phone {phone_id + 1} cannot hang up during handshake or call setup") + + ui_manager.update_phone_ui(phone_id) + ui_manager.update_phone_ui(1 - phone_id) + + def send_audio(self, phone_id): + phone = self.phones[phone_id] + if phone['state'] != PhoneState.IN_CALL: + self.debug(f"Phone {phone_id + 1} not in call, stopping audio timer") + if phone['audio_timer']: + phone['audio_timer'].stop() + return + + if not phone['client'].handshake_complete: + self.debug(f"Phone {phone_id + 1} handshake not complete, skipping audio send") + return + + if not phone['client'].voice_active: + self.debug(f"Phone {phone_id + 1} voice not active, skipping audio send") + return + + if phone['state'] == PhoneState.IN_CALL and phone['client'].handshake_complete and phone['client'].voice_active: + # Load test audio file if not loaded + if phone['audio_file'] is None: + wav_path = "../wav/input.wav" + if not os.path.exists(wav_path): + wav_path = "wav/input.wav" + if os.path.exists(wav_path): + try: + phone['audio_file'] = wave.open(wav_path, 'rb') + self.debug(f"Phone {phone_id + 1} loaded test audio file: {wav_path}") + # Verify it's 8kHz mono + if phone['audio_file'].getframerate() != 8000: + self.debug(f"Warning: {wav_path} is {phone['audio_file'].getframerate()}Hz, expected 8000Hz") + if phone['audio_file'].getnchannels() != 1: + self.debug(f"Warning: {wav_path} has {phone['audio_file'].getnchannels()} channels, expected 1") + + # Skip initial silence - jump to 1 second in (8000 samples) + phone['audio_file'].setpos(8000) + self.debug(f"Phone {phone_id + 1} skipped initial silence, starting at 1 second") + except Exception as e: + self.debug(f"Phone {phone_id + 1} failed to load audio: {e}") + # Use mock audio as fallback + phone['audio_file'] = None + + # Read audio frame (40ms at 8kHz = 320 samples) + if phone['audio_file']: + try: + frames = phone['audio_file'].readframes(320) + if not frames or len(frames) < 640: # 320 samples * 2 bytes + # Loop back to 1 second (skip silence) + phone['audio_file'].setpos(8000) + frames = phone['audio_file'].readframes(320) + self.debug(f"Phone {phone_id + 1} looped audio back to 1 second mark") + + # Send through protocol (codec + 4FSK + encryption) + phone['client'].send_voice_frame(frames) + + # Update waveform + if len(frames) >= 2: + samples = struct.unpack(f'{len(frames)//2}h', frames) + self.update_sent_waveform(phone_id, frames) + + # If playback is enabled on the sender, play the original audio + if phone['playback_enabled']: + self.audio_player.add_audio_data(phone_id, frames) + if phone['frame_counter'] % 25 == 0: + self.debug(f"Phone {phone_id + 1} playing original audio (sender playback)") + + phone['frame_counter'] += 1 + if phone['frame_counter'] % 25 == 0: # Log every second + self.debug(f"Phone {phone_id + 1} sent {phone['frame_counter']} voice frames") + + except Exception as e: + self.debug(f"Phone {phone_id + 1} audio send error: {e}") + else: + # Fallback: send mock audio + mock_audio = secrets.token_bytes(320) + phone['client'].send_voice_frame(mock_audio) + self.update_sent_waveform(phone_id, mock_audio) + + def start_audio(self, client_id, parent=None): + self.handshake_done_count += 1 + self.debug(f"HANDSHAKE_DONE received for client {client_id}, count: {self.handshake_done_count}") + + # Start voice session for this client + phone = self.phones[client_id] + if phone['client'].handshake_complete and not phone['client'].voice_active: + phone['client'].start_voice_session() + + if self.handshake_done_count == 2: + # Add a small delay to ensure both sides are ready + def start_audio_timers(): + self.debug("Starting audio timers for both phones") + for phone in self.phones: + if phone['state'] == PhoneState.IN_CALL: + if not phone['audio_timer'] or not phone['audio_timer'].isActive(): + phone['audio_timer'] = QTimer(parent) # Parent to PhoneUI + phone['audio_timer'].timeout.connect(lambda pid=phone['id']: self.send_audio(pid)) + phone['audio_timer'].start(40) # 40ms for each voice frame + + # Delay audio start by 500ms to ensure both sides are ready + QTimer.singleShot(500, start_audio_timers) + self.handshake_done_count = 0 + + def update_waveform(self, client_id, data): + # Only process actual audio data (should be 640 bytes for 320 samples * 2 bytes) + # Ignore small control messages + if len(data) < 320: # Less than 160 samples (too small for audio) + self.debug(f"Phone {client_id + 1} received non-audio data: {len(data)} bytes (ignoring)") + return + + self.phones[client_id]['waveform'].set_data(data) + + # Debug log audio data reception (only occasionally to avoid spam) + if not hasattr(self, '_audio_frame_count'): + self._audio_frame_count = {} + if client_id not in self._audio_frame_count: + self._audio_frame_count[client_id] = 0 + self._audio_frame_count[client_id] += 1 + + if self._audio_frame_count[client_id] == 1 or self._audio_frame_count[client_id] % 25 == 0: + self.debug(f"Phone {client_id + 1} received audio frame #{self._audio_frame_count[client_id]}: {len(data)} bytes") + + # Store audio data in buffer for potential processing + if client_id not in self.audio_buffer: + self.audio_buffer[client_id] = [] + self.audio_buffer[client_id].append(data) + + # Keep buffer size reasonable (last 30 seconds at 8kHz) + max_chunks = 30 * 25 # 30 seconds * 25 chunks/second + if len(self.audio_buffer[client_id]) > max_chunks: + self.audio_buffer[client_id] = self.audio_buffer[client_id][-max_chunks:] + + # Forward audio data to player if playback is enabled + if self.phones[client_id]['playback_enabled']: + if self._audio_frame_count[client_id] == 1: + self.debug(f"Phone {client_id + 1} forwarding audio to player (playback enabled)") + self.audio_player.add_audio_data(client_id, data) + + def update_sent_waveform(self, client_id, data): + self.phones[client_id]['sent_waveform'].set_data(data) + + def toggle_playback(self, client_id): + """Toggle audio playback for a phone""" + phone = self.phones[client_id] + + if phone['playback_enabled']: + # Stop playback + self.audio_player.stop_playback(client_id) + phone['playback_enabled'] = False + self.debug(f"Phone {client_id + 1} playback stopped") + else: + # Start playback + if self.audio_player.start_playback(client_id): + phone['playback_enabled'] = True + self.debug(f"Phone {client_id + 1} playback started") + # Removed test beep - we want to hear actual audio + else: + self.debug(f"Phone {client_id + 1} failed to start playback") + + return phone['playback_enabled'] + + def toggle_recording(self, client_id): + """Toggle audio recording for a phone""" + phone = self.phones[client_id] + + if phone['recording_enabled']: + # Stop recording and save + save_path = self.audio_player.stop_recording(client_id) + phone['recording_enabled'] = False + if save_path: + self.debug(f"Phone {client_id + 1} recording saved to {save_path}") + return False, save_path + else: + # Start recording + self.audio_player.start_recording(client_id) + phone['recording_enabled'] = True + self.debug(f"Phone {client_id + 1} recording started") + return True, None + + def save_received_audio(self, client_id, filename=None): + """Save the last received audio to a file""" + if client_id not in self.phones: + return None + + save_path = self.audio_player.stop_recording(client_id, filename) + if save_path: + self.debug(f"Phone {client_id + 1} audio saved to {save_path}") + return save_path + + def process_audio(self, client_id, processing_type, **kwargs): + """Process buffered audio with specified processing type""" + if client_id not in self.audio_buffer or not self.audio_buffer[client_id]: + self.debug(f"No audio data available for Phone {client_id + 1}") + return None + + # Combine all audio chunks + combined_audio = b''.join(self.audio_buffer[client_id]) + + # Apply processing based on type + processed_audio = combined_audio + + if processing_type == "normalize": + target_db = kwargs.get('target_db', -3) + processed_audio = self.audio_processor.normalize_audio(combined_audio, target_db) + + elif processing_type == "gain": + gain_db = kwargs.get('gain_db', 0) + processed_audio = self.audio_processor.apply_gain(combined_audio, gain_db) + + elif processing_type == "noise_gate": + threshold_db = kwargs.get('threshold_db', -40) + processed_audio = self.audio_processor.apply_noise_gate(combined_audio, threshold_db) + + elif processing_type == "low_pass": + cutoff_hz = kwargs.get('cutoff_hz', 3400) + processed_audio = self.audio_processor.apply_low_pass_filter(combined_audio, cutoff_hz) + + elif processing_type == "high_pass": + cutoff_hz = kwargs.get('cutoff_hz', 300) + processed_audio = self.audio_processor.apply_high_pass_filter(combined_audio, cutoff_hz) + + elif processing_type == "remove_silence": + threshold_db = kwargs.get('threshold_db', -40) + processed_audio = self.audio_processor.remove_silence(combined_audio, threshold_db) + + # Save processed audio + save_path = f"wav/phone{client_id + 1}_received.wav" + processed_path = self.audio_processor.save_processed_audio( + processed_audio, save_path, processing_type + ) + + return processed_path + + def export_buffered_audio(self, client_id, filename=None): + """Export current audio buffer to file""" + if client_id not in self.audio_buffer or not self.audio_buffer[client_id]: + self.debug(f"No audio data available for Phone {client_id + 1}") + return None + + # Combine all audio chunks + combined_audio = b''.join(self.audio_buffer[client_id]) + + # Generate filename if not provided + if not filename: + from datetime import datetime + timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") + filename = f"wav/phone{client_id + 1}_buffer_{timestamp}.wav" + + # Ensure directory exists + os.makedirs(os.path.dirname(filename), exist_ok=True) + + try: + with wave.open(filename, 'wb') as wav_file: + wav_file.setnchannels(1) + wav_file.setsampwidth(2) + wav_file.setframerate(8000) + wav_file.writeframes(combined_audio) + + self.debug(f"Exported audio buffer for Phone {client_id + 1} to {filename}") + return filename + + except Exception as e: + self.debug(f"Failed to export audio buffer: {e}") + return None + + def clear_audio_buffer(self, client_id): + """Clear audio buffer for a phone""" + if client_id in self.audio_buffer: + self.audio_buffer[client_id] = [] + self.debug(f"Cleared audio buffer for Phone {client_id + 1}") + + def map_state(self, state_str): + if state_str == "RINGING": + return PhoneState.RINGING + elif state_str in ["CALL_END", "CALL_DROPPED"]: + return PhoneState.IDLE + elif state_str == "IN_CALL": + return PhoneState.IN_CALL + elif state_str == "HANDSHAKE": + return PhoneState.IN_CALL + elif state_str == "HANDSHAKE_DONE": + return PhoneState.IN_CALL + return PhoneState.IDLE \ No newline at end of file diff --git a/protocol_prototype/DryBox/UI/phone_state.py b/protocol_prototype/DryBox/UI/phone_state.py new file mode 100644 index 0000000..c5d5a83 --- /dev/null +++ b/protocol_prototype/DryBox/UI/phone_state.py @@ -0,0 +1,7 @@ +from enum import Enum + +class PhoneState(Enum): + IDLE = 0 + CALLING = 1 + IN_CALL = 2 + RINGING = 3 \ No newline at end of file diff --git a/protocol_prototype/DryBox/UI/protocol_client_state.py b/protocol_prototype/DryBox/UI/protocol_client_state.py new file mode 100644 index 0000000..800cb8f --- /dev/null +++ b/protocol_prototype/DryBox/UI/protocol_client_state.py @@ -0,0 +1,133 @@ +# protocol_client_state.py +from queue import Queue +from session import NoiseXKSession +import time + +class ProtocolClientState: + """Enhanced client state for integrated protocol with voice codec""" + + def __init__(self, client_id): + self.client_id = client_id + self.command_queue = Queue() + self.initiator = None + self.keypair = None + self.peer_pubkey = None + self.session = None + self.handshake_in_progress = False + self.handshake_start_time = None + self.call_active = False + self.voice_active = False + self.debug_callback = None + + def debug(self, message): + """Send debug message""" + if self.debug_callback: + self.debug_callback(f"[State{self.client_id+1}] {message}") + else: + print(f"[State{self.client_id+1}] {message}") + + def process_command(self, client): + """Process commands from the queue.""" + if not self.command_queue.empty(): + self.debug(f"Processing command queue, size: {self.command_queue.qsize()}") + command = self.command_queue.get() + self.debug(f"Processing command: {command}") + + if command == "handshake": + # Handshake is now handled by the wrapper in the client + self.debug(f"Handshake command processed") + self.handshake_in_progress = False + self.handshake_start_time = None + + elif command == "start_voice": + if client.handshake_complete: + client.start_voice_session() + self.voice_active = True + + elif command == "end_voice": + if self.voice_active: + client.end_voice_session() + self.voice_active = False + + def start_handshake(self, initiator, keypair, peer_pubkey): + """Queue handshake command.""" + self.initiator = initiator + self.keypair = keypair + self.peer_pubkey = peer_pubkey + self.debug(f"Queuing handshake, initiator: {initiator}") + self.handshake_in_progress = True + self.handshake_start_time = time.time() + self.command_queue.put("handshake") + + def handle_data(self, client, data): + """Handle received data (control or audio).""" + try: + # Try to decode as text first + decoded_data = data.decode('utf-8').strip() + self.debug(f"Received raw: {decoded_data}") + + # Handle control messages + if decoded_data in ["RINGING", "CALL_END", "CALL_DROPPED", "IN_CALL", "HANDSHAKE", "HANDSHAKE_DONE"]: + self.debug(f"Emitting state change: {decoded_data}") + # Log which client is receiving what + self.debug(f"Client {self.client_id} received {decoded_data} message") + client.state_changed.emit(decoded_data, decoded_data, self.client_id) + + if decoded_data == "IN_CALL": + self.debug(f"Received IN_CALL, setting call_active = True") + self.call_active = True + elif decoded_data == "HANDSHAKE": + self.debug(f"Received HANDSHAKE, setting handshake_in_progress = True") + self.handshake_in_progress = True + elif decoded_data == "HANDSHAKE_DONE": + self.debug(f"Received HANDSHAKE_DONE from peer") + self.call_active = True + # Start voice session on this side too + if client.handshake_complete and not client.voice_active: + self.debug(f"Starting voice session after receiving HANDSHAKE_DONE") + self.command_queue.put("start_voice") + elif decoded_data in ["CALL_END", "CALL_DROPPED"]: + self.debug(f"Received {decoded_data}, ending call") + self.call_active = False + if self.voice_active: + self.command_queue.put("end_voice") + else: + self.debug(f"Ignored unexpected text message: {decoded_data}") + + except UnicodeDecodeError: + # Handle binary data (protocol messages or encrypted data) + if len(data) > 0 and data[0] == 0x20 and not client.handshake_complete: # Noise handshake message only before handshake completes + self.debug(f"Received Noise handshake message") + # Initialize responder if not already done + if not client.handshake_initiated: + # Find the other phone's public key + # This is a bit hacky but works for our 2-phone setup + manager = getattr(client, 'manager', None) + if manager: + other_phone = manager.phones[1 - self.client_id] + client.start_handshake(initiator=False, + keypair=client.keypair or manager.phones[self.client_id]['keypair'], + peer_pubkey=other_phone['public_key']) + # Pass to protocol handler + client._handle_protocol_message(data) + elif client.handshake_complete and client.noise_wrapper: + # Pass encrypted data back to client for decryption + client._handle_encrypted_data(data) + else: + # Pass other binary messages to protocol handler only if not yet complete + if not client.handshake_complete: + client._handle_protocol_message(data) + + def check_handshake_timeout(self, client): + """Check for handshake timeout.""" + if self.handshake_in_progress and self.handshake_start_time: + if time.time() - self.handshake_start_time > 30: + self.debug(f"Handshake timeout after 30s") + client.state_changed.emit("CALL_END", "", self.client_id) + self.handshake_in_progress = False + self.handshake_start_time = None + + def queue_voice_command(self, command): + """Queue voice-related commands""" + if command in ["start_voice", "end_voice"]: + self.command_queue.put(command) \ No newline at end of file diff --git a/protocol_prototype/DryBox/UI/protocol_phone_client.py b/protocol_prototype/DryBox/UI/protocol_phone_client.py new file mode 100644 index 0000000..f8750b2 --- /dev/null +++ b/protocol_prototype/DryBox/UI/protocol_phone_client.py @@ -0,0 +1,456 @@ +import socket +import time +import select +import struct +import array +from PyQt5.QtCore import QThread, pyqtSignal +from protocol_client_state import ProtocolClientState +from session import NoiseXKSession +from noise_wrapper import NoiseXKWrapper +from dissononce.dh.keypair import KeyPair +from dissononce.dh.x25519.public import PublicKey +import sys +import os +sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +from voice_codec import Codec2Wrapper, FSKModem, Codec2Mode +# ChaCha20 removed - using only Noise XK encryption + +class ProtocolPhoneClient(QThread): + """Integrated phone client with Noise XK, Codec2, 4FSK, and ChaCha20""" + data_received = pyqtSignal(bytes, int) + state_changed = pyqtSignal(str, str, int) + + def __init__(self, client_id): + super().__init__() + self.host = "localhost" + self.port = 12345 + self.client_id = client_id + self.sock = None + self.running = True + self.state = ProtocolClientState(client_id) + + # Noise XK session + self.noise_session = None + self.noise_wrapper = None + self.handshake_complete = False + self.handshake_initiated = False + + # No buffer needed with larger frame size + + # Voice codec components + self.codec = Codec2Wrapper(mode=Codec2Mode.MODE_1200) + self.modem = FSKModem() + + # Voice encryption handled by Noise XK + # No separate voice key needed + + # Voice state + self.voice_active = False + self.voice_frame_counter = 0 + + # Message buffer for fragmented messages + self.recv_buffer = bytearray() + + # Debug callback + self.debug_callback = None + + def set_debug_callback(self, callback): + """Set debug callback function""" + self.debug_callback = callback + self.state.debug_callback = callback + + def debug(self, message): + """Send debug message""" + if self.debug_callback: + self.debug_callback(f"[Phone{self.client_id+1}] {message}") + else: + print(f"[Phone{self.client_id+1}] {message}") + + def connect_socket(self): + retries = 3 + for attempt in range(retries): + try: + self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) + self.sock.settimeout(120) + self.sock.connect((self.host, self.port)) + self.debug(f"Connected to GSM simulator at {self.host}:{self.port}") + return True + except Exception as e: + self.debug(f"Connection attempt {attempt + 1} failed: {e}") + if attempt < retries - 1: + time.sleep(1) + self.sock = None + return False + + def run(self): + while self.running: + if not self.sock: + if not self.connect_socket(): + self.debug("Failed to connect after retries") + self.state_changed.emit("CALL_END", "", self.client_id) + break + try: + while self.running: + self.state.process_command(self) + self.state.check_handshake_timeout(self) + + if self.handshake_complete and self.voice_active: + # Process voice data if active + self._process_voice_data() + + # Always check for incoming data, even during handshake + if self.sock is None: + break + readable, _, _ = select.select([self.sock], [], [], 0.01) + if readable: + try: + if self.sock is None: + break + chunk = self.sock.recv(4096) + if not chunk: + self.debug("Disconnected from server") + self.state_changed.emit("CALL_END", "", self.client_id) + break + + # Add to buffer + self.recv_buffer.extend(chunk) + + # Process complete messages + while len(self.recv_buffer) >= 4: + # Read message length + msg_len = struct.unpack('>I', self.recv_buffer[:4])[0] + + # Check if we have the complete message + if len(self.recv_buffer) >= 4 + msg_len: + # Extract message + data = bytes(self.recv_buffer[4:4+msg_len]) + # Remove from buffer + self.recv_buffer = self.recv_buffer[4+msg_len:] + # Pass to state handler + self.state.handle_data(self, data) + else: + # Wait for more data + break + + except socket.error as e: + self.debug(f"Socket error: {e}") + self.state_changed.emit("CALL_END", "", self.client_id) + break + + self.msleep(1) + except Exception as e: + self.debug(f"Unexpected error in run loop: {e}") + self.state_changed.emit("CALL_END", "", self.client_id) + break + finally: + if self.sock: + try: + self.sock.close() + except Exception as e: + self.debug(f"Error closing socket: {e}") + self.sock = None + + def _handle_encrypted_data(self, data): + """Handle encrypted data after handshake""" + if not self.handshake_complete or not self.noise_wrapper: + self.debug(f"Cannot decrypt - handshake not complete") + return + + # All data after handshake is encrypted, decrypt it first + try: + plaintext = self.noise_wrapper.decrypt(data) + + # Check if it's a text message + try: + text_msg = plaintext.decode('utf-8').strip() + if text_msg == "HANDSHAKE_DONE": + self.debug(f"Received encrypted HANDSHAKE_DONE") + self.state_changed.emit("HANDSHAKE_DONE", "HANDSHAKE_DONE", self.client_id) + return + except: + pass + + # Otherwise handle as protocol message + self._handle_protocol_message(plaintext) + except Exception as e: + # Suppress common decryption errors + pass + + def _handle_protocol_message(self, plaintext): + """Handle decrypted protocol messages""" + if len(plaintext) < 1: + return + + msg_type = plaintext[0] + msg_data = plaintext[1:] + + if msg_type == 0x10: # Voice start + self.debug("Received VOICE_START message") + self._handle_voice_start(msg_data) + elif msg_type == 0x11: # Voice data + self._handle_voice_data(msg_data) + elif msg_type == 0x12: # Voice end + self.debug("Received VOICE_END message") + self._handle_voice_end(msg_data) + elif msg_type == 0x20: # Noise handshake + self.debug("Received NOISE_HS message") + self._handle_noise_handshake(msg_data) + else: + self.debug(f"Received unknown protocol message type: 0x{msg_type:02x}") + # Don't emit control messages to data_received - that's only for audio + # Control messages should be handled via state_changed signal + + def _handle_voice_start(self, data): + """Handle voice session start""" + self.debug("Voice session started by peer") + self.voice_active = True + self.voice_frame_counter = 0 + self.state_changed.emit("VOICE_START", "", self.client_id) + + def _handle_voice_data(self, data): + """Handle voice frame (already decrypted by Noise)""" + if len(data) < 4: + return + + try: + # Data is float array packed as bytes + # Unpack the float array + num_floats = len(data) // 4 + modulated_signal = struct.unpack(f'{num_floats}f', data) + + # Demodulate FSK + demodulated_data, confidence = self.modem.demodulate(modulated_signal) + + if confidence > 0.5: # Only decode if confidence is good + # Create Codec2Frame from demodulated data + from voice_codec import Codec2Frame, Codec2Mode + frame = Codec2Frame( + mode=Codec2Mode.MODE_1200, + bits=demodulated_data, + timestamp=time.time(), + frame_number=self.voice_frame_counter + ) + + # Decode with Codec2 + pcm_samples = self.codec.decode(frame) + + if self.voice_frame_counter == 0: + self.debug(f"First voice frame demodulated with confidence {confidence:.2f}") + + # Send PCM to UI for playback + if pcm_samples is not None and len(pcm_samples) > 0: + # Only log details for first frame and every 25th frame + if self.voice_frame_counter == 0 or self.voice_frame_counter % 25 == 0: + self.debug(f"Decoded PCM samples: type={type(pcm_samples)}, len={len(pcm_samples)}") + + # Convert to bytes if needed + if hasattr(pcm_samples, 'tobytes'): + pcm_bytes = pcm_samples.tobytes() + elif isinstance(pcm_samples, (list, array.array)): + # Convert array to bytes + import array + if isinstance(pcm_samples, list): + pcm_array = array.array('h', pcm_samples) + pcm_bytes = pcm_array.tobytes() + else: + pcm_bytes = pcm_samples.tobytes() + else: + pcm_bytes = bytes(pcm_samples) + + if self.voice_frame_counter == 0: + self.debug(f"Emitting first PCM frame: {len(pcm_bytes)} bytes") + + self.data_received.emit(pcm_bytes, self.client_id) + self.voice_frame_counter += 1 + # Log frame reception periodically + if self.voice_frame_counter == 1 or self.voice_frame_counter % 25 == 0: + self.debug(f"Received voice data frame #{self.voice_frame_counter}") + else: + self.debug(f"Codec decode returned None or empty") + else: + if self.voice_frame_counter % 10 == 0: + self.debug(f"Low confidence demodulation: {confidence:.2f}") + + except Exception as e: + self.debug(f"Voice decode error: {e}") + + def _handle_voice_end(self, data): + """Handle voice session end""" + self.debug("Voice session ended by peer") + self.voice_active = False + self.state_changed.emit("VOICE_END", "", self.client_id) + + def _handle_noise_handshake(self, data): + """Handle Noise handshake message""" + if not self.noise_wrapper: + self.debug("Received handshake message but no wrapper initialized") + return + + try: + # Process the handshake message + self.noise_wrapper.process_handshake_message(data) + + # Check if we need to send a response + response = self.noise_wrapper.get_next_handshake_message() + if response: + self.send(b'\x20' + response) + + # Check if handshake is complete + if self.noise_wrapper.handshake_complete and not self.handshake_complete: + self.debug("Noise wrapper handshake complete, calling complete_handshake()") + self.complete_handshake() + + except Exception as e: + self.debug(f"Handshake processing error: {e}") + self.state_changed.emit("CALL_END", "", self.client_id) + + def _process_voice_data(self): + """Process outgoing voice data""" + # This would be called when we have voice input to send + # For now, this is a placeholder + pass + + def send_voice_frame(self, pcm_samples): + """Send a voice frame through the protocol""" + if not self.handshake_complete: + self.debug("Cannot send voice - handshake not complete") + return + if not self.voice_active: + self.debug("Cannot send voice - voice session not active") + return + + try: + # Encode with Codec2 + codec_frame = self.codec.encode(pcm_samples) + if not codec_frame: + return + + if self.voice_frame_counter % 25 == 0: # Log every 25 frames (1 second) + self.debug(f"Encoding voice frame #{self.voice_frame_counter}: {len(pcm_samples)} bytes PCM → {len(codec_frame.bits)} bytes compressed") + + # Modulate with FSK + modulated_data = self.modem.modulate(codec_frame.bits) + + # Convert modulated float array to bytes + modulated_bytes = struct.pack(f'{len(modulated_data)}f', *modulated_data) + + if self.voice_frame_counter % 25 == 0: + self.debug(f"Voice frame size: {len(modulated_bytes)} bytes") + + # Build voice data message (no ChaCha20, will be encrypted by Noise) + msg = bytes([0x11]) + modulated_bytes + + # Send through Noise encrypted channel + self.send(msg) + + self.voice_frame_counter += 1 + + except Exception as e: + self.debug(f"Voice encode error: {e}") + + def send(self, message): + """Send data through Noise encrypted channel with proper framing""" + if self.sock and self.running: + try: + # Handshake messages (0x20) bypass Noise encryption + if isinstance(message, bytes) and len(message) > 0 and message[0] == 0x20: + # Add length prefix for framing + framed = struct.pack('>I', len(message)) + message + self.sock.send(framed) + return + + if self.handshake_complete and self.noise_wrapper: + # Encrypt everything with Noise after handshake + # Convert string to bytes if needed + if isinstance(message, str): + message = message.encode('utf-8') + encrypted = self.noise_wrapper.encrypt(message) + # Add length prefix for framing + framed = struct.pack('>I', len(encrypted)) + encrypted + self.sock.send(framed) + else: + # During handshake, send raw with framing + if isinstance(message, str): + data = message.encode('utf-8') + framed = struct.pack('>I', len(data)) + data + self.sock.send(framed) + self.debug(f"Sent control message: {message}") + else: + framed = struct.pack('>I', len(message)) + message + self.sock.send(framed) + except socket.error as e: + self.debug(f"Send error: {e}") + self.state_changed.emit("CALL_END", "", self.client_id) + + def stop(self): + self.running = False + self.voice_active = False + if self.sock: + try: + self.sock.close() + except Exception as e: + self.debug(f"Error closing socket in stop: {e}") + self.sock = None + self.quit() + self.wait(1000) + + def start_handshake(self, initiator, keypair, peer_pubkey): + """Start Noise XK handshake""" + self.debug(f"Starting Noise XK handshake as {'initiator' if initiator else 'responder'}") + self.debug(f"Our public key: {keypair.public.data.hex()[:32]}...") + self.debug(f"Peer public key: {peer_pubkey.data.hex()[:32]}...") + + # Create noise wrapper + self.noise_wrapper = NoiseXKWrapper(keypair, peer_pubkey, self.debug) + self.noise_wrapper.start_handshake(initiator) + self.handshake_initiated = True + + # Send first handshake message if initiator + if initiator: + msg = self.noise_wrapper.get_next_handshake_message() + if msg: + # Send as NOISE_HS message type + self.send(b'\x20' + msg) # 0x20 = Noise handshake message + + def complete_handshake(self): + """Called when Noise handshake completes""" + self.handshake_complete = True + + self.debug("Noise XK handshake complete!") + self.debug("Secure channel established") + + # Send HANDSHAKE_DONE message + self.send("HANDSHAKE_DONE") + + self.state_changed.emit("HANDSHAKE_COMPLETE", "", self.client_id) + + def start_voice_session(self): + """Start a voice session""" + if not self.handshake_complete: + self.debug("Cannot start voice - handshake not complete") + return + + self.voice_active = True + self.voice_frame_counter = 0 + + # Send voice start message + msg = bytes([0x10]) # Voice start message type + self.send(msg) + + self.debug("Voice session started") + self.state_changed.emit("VOICE_START", "", self.client_id) + + def end_voice_session(self): + """End a voice session""" + if not self.voice_active: + return + + self.voice_active = False + + # Send voice end message + msg = bytes([0x12]) # Voice end message type + self.send(msg) + + self.debug("Voice session ended") + self.state_changed.emit("VOICE_END", "", self.client_id) \ No newline at end of file diff --git a/protocol_prototype/DryBox/UI/session.py b/protocol_prototype/DryBox/UI/session.py new file mode 100644 index 0000000..86a4a3f --- /dev/null +++ b/protocol_prototype/DryBox/UI/session.py @@ -0,0 +1,196 @@ +import socket +import logging +from dissononce.processing.impl.handshakestate import HandshakeState +from dissononce.processing.impl.symmetricstate import SymmetricState +from dissononce.processing.impl.cipherstate import CipherState +from dissononce.processing.handshakepatterns.interactive.XK import XKHandshakePattern +from dissononce.cipher.chachapoly import ChaChaPolyCipher +from dissononce.dh.x25519.x25519 import X25519DH +from dissononce.dh.keypair import KeyPair +from dissononce.dh.x25519.public import PublicKey +from dissononce.hash.sha256 import SHA256Hash + +# Configure logging - disabled by default to avoid noise +# logging.basicConfig(level=logging.DEBUG, format="%(message)s") + +class NoiseXKSession: + @staticmethod + def generate_keypair() -> KeyPair: + """ + Generate a static X25519 KeyPair. + Returns: + KeyPair object with .private and .public attributes. + """ + return X25519DH().generate_keypair() + + def __init__(self, local_kp: KeyPair, peer_pubkey: PublicKey): + """ + Initialize with our KeyPair and the peer's PublicKey. + """ + self.local_kp: KeyPair = local_kp + self.peer_pubkey: PublicKey = peer_pubkey + + # Build the Noise handshake state (X25519 DH, ChaChaPoly cipher, SHA256 hash) + cipher = ChaChaPolyCipher() + dh = X25519DH() + hshash = SHA256Hash() + symmetric = SymmetricState(CipherState(cipher), hshash) + self._hs = HandshakeState(symmetric, dh) + + self._send_cs = None # type: CipherState + self._recv_cs = None + + def handshake(self, sock: socket.socket, initiator: bool) -> None: + """ + Perform the XK handshake over the socket. Branches on initiator/responder + so that each side reads or writes in the correct message order. + On completion, self._send_cs and self._recv_cs hold the two CipherStates. + """ + # logging.debug(f"[handshake] start (initiator={initiator})") + # initialize with our KeyPair and their PublicKey + if initiator: + # initiator knows peer’s static out-of-band + self._hs.initialize( + XKHandshakePattern(), + True, + b'', + s=self.local_kp, + rs=self.peer_pubkey + ) + else: + # logging.debug("[handshake] responder initializing without rs") + # responder must NOT supply rs here + self._hs.initialize( + XKHandshakePattern(), + False, + b'', + s=self.local_kp + ) + + cs_pair = None + if initiator: + # 1) -> e + buf1 = bytearray() + cs_pair = self._hs.write_message(b'', buf1) + # logging.debug(f"[-> e] {buf1.hex()}") + self._send_all(sock, buf1) + + # 2) <- e, es, s, ss + msg2 = self._recv_all(sock) + # logging.debug(f"[<- msg2] {msg2.hex()}") + self._hs.read_message(msg2, bytearray()) + + # 3) -> se (final) + buf3 = bytearray() + cs_pair = self._hs.write_message(b'', buf3) + # logging.debug(f"[-> se] {buf3.hex()}") + self._send_all(sock, buf3) + else: + # 1) <- e + msg1 = self._recv_all(sock) + # logging.debug(f"[<- e] {msg1.hex()}") + self._hs.read_message(msg1, bytearray()) + + # 2) -> e, es, s, ss + buf2 = bytearray() + cs_pair = self._hs.write_message(b'', buf2) + # logging.debug(f"[-> msg2] {buf2.hex()}") + self._send_all(sock, buf2) + + # 3) <- se (final) + msg3 = self._recv_all(sock) + # logging.debug(f"[<- se] {msg3.hex()}") + cs_pair = self._hs.read_message(msg3, bytearray()) + + # on the final step, we must get exactly two CipherStates + if not cs_pair or len(cs_pair) != 2: + raise RuntimeError("Handshake did not complete properly") + cs0, cs1 = cs_pair + # the library returns (cs_encrypt_for_initiator, cs_decrypt_for_initiator) + if initiator: + # initiator: cs0 encrypts, cs1 decrypts + self._send_cs, self._recv_cs = cs0, cs1 + else: + # responder must swap + self._send_cs, self._recv_cs = cs1, cs0 + + # dump the raw symmetric keys & nonces (if available) + self._dump_cipherstate("HANDSHAKE→ SEND", self._send_cs) + self._dump_cipherstate("HANDSHAKE→ RECV", self._recv_cs) + + def send(self, sock: socket.socket, plaintext: bytes) -> None: + """ + Encrypt and send a message. + """ + if self._send_cs is None: + raise RuntimeError("Handshake not complete") + ct = self._send_cs.encrypt_with_ad(b'', plaintext) + logging.debug(f"[ENCRYPT] {ct.hex()}") + # self._dump_cipherstate("SEND→ after encrypt", self._send_cs) + self._send_all(sock, ct) + + def receive(self, sock: socket.socket) -> bytes: + """ + Receive and decrypt a message. + """ + if self._recv_cs is None: + raise RuntimeError("Handshake not complete") + ct = self._recv_all(sock) + logging.debug(f"[CIPHERTEXT] {ct.hex()}") + # self._dump_cipherstate("RECV→ before decrypt", self._recv_cs) + pt = self._recv_cs.decrypt_with_ad(b'', ct) + logging.debug(f"[DECRYPT] {pt!r}") + return pt + + def decrypt(self, ciphertext: bytes) -> bytes: + """ + Decrypt a ciphertext received as bytes. + """ + if self._recv_cs is None: + raise RuntimeError("Handshake not complete") + # Remove 2-byte length prefix if present + if len(ciphertext) >= 2 and int.from_bytes(ciphertext[:2], 'big') == len(ciphertext) - 2: + logging.debug(f"[DECRYPT] Stripping 2-byte length prefix from {len(ciphertext)}-byte input") + ciphertext = ciphertext[2:] + logging.debug(f"[CIPHERTEXT] {ciphertext.hex()}") + # self._dump_cipherstate("DECRYPT→ before decrypt", self._recv_cs) + pt = self._recv_cs.decrypt_with_ad(b'', ciphertext) + logging.debug(f"[DECRYPT] {pt!r}") + return pt + + def _send_all(self, sock: socket.socket, data: bytes) -> None: + # Length-prefix (2 bytes big-endian) + data + length = len(data).to_bytes(2, 'big') + logging.debug(f"[SEND] length={length.hex()}, data={data.hex()}") + sock.sendall(length + data) + + def _recv_all(self, sock: socket.socket) -> bytes: + # Read 2-byte length prefix, then the payload + hdr = self._read_exact(sock, 2) + length = int.from_bytes(hdr, 'big') + # logging.debug(f"[RECV] length={length} ({hdr.hex()})") + data = self._read_exact(sock, length) + # logging.debug(f"[RECV] data={data.hex()}") + return data + + @staticmethod + def _read_exact(sock: socket.socket, n: int) -> bytes: + buf = bytearray() + while len(buf) < n: + chunk = sock.recv(n - len(buf)) + if not chunk: + raise ConnectionError("Socket closed during read") + buf.extend(chunk) + return bytes(buf) + + def _dump_cipherstate(self, label: str, cs: CipherState) -> None: + """ + Print the symmetric key (cs._k) and nonce counter (cs._n) for inspection. + """ + key = cs._key + nonce = getattr(cs, "_n", None) + if isinstance(key, (bytes, bytearray)): + key_hex = key.hex() + else: + key_hex = repr(key) + logging.debug(f"[{label}] key={key_hex}") \ No newline at end of file diff --git a/protocol_prototype/DryBox/UI/waveform_widget.py b/protocol_prototype/DryBox/UI/waveform_widget.py new file mode 100644 index 0000000..bb507a0 --- /dev/null +++ b/protocol_prototype/DryBox/UI/waveform_widget.py @@ -0,0 +1,67 @@ +import random +import struct +from PyQt5.QtWidgets import QWidget +from PyQt5.QtCore import QTimer, QSize, QPointF +from PyQt5.QtGui import QPainter, QColor, QPen, QLinearGradient, QBrush + +class WaveformWidget(QWidget): + def __init__(self, parent=None, dynamic=False): + super().__init__(parent) + self.dynamic = dynamic + self.setMinimumSize(200, 60) + self.setMaximumHeight(80) + self.waveform_data = [random.randint(10, 90) for _ in range(50)] + if self.dynamic: + self.timer = QTimer(self) + self.timer.timeout.connect(self.update_waveform) + self.timer.start(100) + + def update_waveform(self): + self.waveform_data = self.waveform_data[1:] + [random.randint(10, 90)] + self.update() + + def set_data(self, data): + # Convert audio data to visual amplitude + if isinstance(data, bytes) and len(data) >= 2: + # Extract PCM samples (16-bit signed) + num_samples = min(len(data) // 2, 20) # Take up to 20 samples + samples = [] + for i in range(0, num_samples * 2, 2): + if i + 1 < len(data): + sample = struct.unpack('h', data[i:i+2])[0] + # Normalize to 0-100 range + amplitude = abs(sample) / 327.68 # 32768/100 + samples.append(min(95, max(5, amplitude))) + + if samples: + # Add new samples and maintain fixed size + self.waveform_data.extend(samples) + # Keep last 50 samples + self.waveform_data = self.waveform_data[-50:] + else: + # Fallback for non-audio data + amplitude = sum(byte for byte in data[:20]) % 90 + 10 + self.waveform_data = self.waveform_data[1:] + [amplitude] + + self.update() + + def paintEvent(self, event): + painter = QPainter(self) + painter.setRenderHint(QPainter.Antialiasing) + painter.fillRect(self.rect(), QColor("#2D2D2D")) + gradient = QLinearGradient(0, 0, 0, self.height()) + gradient.setColorAt(0.0, QColor("#0078D4")) + gradient.setColorAt(1.0, QColor("#50E6A4")) + pen = QPen(QBrush(gradient), 2) + painter.setPen(pen) + bar_width = self.width() / len(self.waveform_data) + max_h = self.height() - 10 + for i, val in enumerate(self.waveform_data): + bar_height = (val / 100.0) * max_h + x = i * bar_width + y = (self.height() - bar_height) / 2 + painter.drawLine(QPointF(x + bar_width / 2, y), QPointF(x + bar_width / 2, y + bar_height)) + + def resizeEvent(self, event): + super().resizeEvent(event) + self.update() \ No newline at end of file diff --git a/protocol_prototype/DryBox/install_audio_deps.sh b/protocol_prototype/DryBox/install_audio_deps.sh new file mode 100755 index 0000000..8d4d5eb --- /dev/null +++ b/protocol_prototype/DryBox/install_audio_deps.sh @@ -0,0 +1,58 @@ +#!/bin/bash +# Install audio dependencies for DryBox + +echo "Installing audio dependencies for DryBox..." +echo + +# Detect OS +if [ -f /etc/os-release ]; then + . /etc/os-release + OS=$ID + VER=$VERSION_ID +else + echo "Cannot detect OS. Please install manually." + exit 1 +fi + +case $OS in + fedora) + echo "Detected Fedora $VER" + echo "Installing python3-devel and portaudio-devel..." + sudo dnf install -y python3-devel portaudio-devel + ;; + + ubuntu|debian) + echo "Detected $OS $VER" + echo "Installing python3-dev and portaudio19-dev..." + sudo apt-get update + sudo apt-get install -y python3-dev portaudio19-dev + ;; + + *) + echo "Unsupported OS: $OS" + echo "Please install manually:" + echo " - Python development headers" + echo " - PortAudio development libraries" + exit 1 + ;; +esac + +if [ $? -eq 0 ]; then + echo + echo "System dependencies installed successfully!" + echo "Now installing PyAudio..." + pip install pyaudio + + if [ $? -eq 0 ]; then + echo + echo "✅ Audio dependencies installed successfully!" + echo "You can now use real-time audio playback in DryBox." + else + echo + echo "❌ Failed to install PyAudio" + echo "Try: pip install --user pyaudio" + fi +else + echo + echo "❌ Failed to install system dependencies" +fi \ No newline at end of file diff --git a/protocol_prototype/DryBox/requirements.txt b/protocol_prototype/DryBox/requirements.txt new file mode 100644 index 0000000..af3c25b --- /dev/null +++ b/protocol_prototype/DryBox/requirements.txt @@ -0,0 +1,22 @@ +# Core dependencies for DryBox integrated protocol + +# Noise Protocol Framework +dissononce>=0.34.3 + +# Cryptography +cryptography>=41.0.0 + +# Qt GUI +PyQt5>=5.15.0 + +# Numerical computing (for signal processing) +numpy>=1.24.0 + +# Audio processing (for real audio I/O) +pyaudio>=0.2.11 + +# Wave file handling (included in standard library) +# wave + +# For future integration with real Codec2 +# pycodec2>=1.0.0 \ No newline at end of file diff --git a/protocol_prototype/DryBox/run_ui.sh b/protocol_prototype/DryBox/run_ui.sh new file mode 100755 index 0000000..2b3beb1 --- /dev/null +++ b/protocol_prototype/DryBox/run_ui.sh @@ -0,0 +1,11 @@ +#!/bin/bash +# Run DryBox UI with proper Wayland support on Fedora + +cd "$(dirname "$0")" + +# Use native Wayland if available +export QT_QPA_PLATFORM=wayland + +# Run the UI +cd UI +python3 main.py \ No newline at end of file diff --git a/protocol_prototype/DryBox/simulator/Dockerfile b/protocol_prototype/DryBox/simulator/Dockerfile new file mode 100644 index 0000000..ff26191 --- /dev/null +++ b/protocol_prototype/DryBox/simulator/Dockerfile @@ -0,0 +1,14 @@ +# Use official Python image +FROM python:3.9-slim + +# Set working directory +WORKDIR /app + +# Copy the simulator script +COPY gsm_simulator.py . + +# Expose the port +EXPOSE 12345 + +# Run the simulator +CMD ["python", "gsm_simulator.py"] \ No newline at end of file diff --git a/protocol_prototype/DryBox/simulator/gsm_simulator.py b/protocol_prototype/DryBox/simulator/gsm_simulator.py new file mode 100644 index 0000000..03bf5cb --- /dev/null +++ b/protocol_prototype/DryBox/simulator/gsm_simulator.py @@ -0,0 +1,110 @@ +import socket +import threading +import time +import struct + +HOST = "0.0.0.0" +PORT = 12345 +FRAME_SIZE = 10000 # Increased to avoid fragmenting voice frames +FRAME_DELAY = 0.02 + +clients = [] +clients_lock = threading.Lock() + +def handle_client(client_sock, client_id): + print(f"Starting handle_client for Client {client_id}") + recv_buffer = bytearray() + + try: + while True: + other_client = None + with clients_lock: + if len(clients) == 2 and client_id < len(clients): + other_client = clients[1 - client_id] + + try: + chunk = client_sock.recv(4096) + if not chunk: + print(f"Client {client_id} disconnected or no data received") + break + + # Add to buffer + recv_buffer.extend(chunk) + + # Process complete messages + while len(recv_buffer) >= 4: + # Read message length + msg_len = struct.unpack('>I', recv_buffer[:4])[0] + + # Check if we have the complete message + if len(recv_buffer) >= 4 + msg_len: + # Extract complete message (including length prefix) + complete_msg = bytes(recv_buffer[:4+msg_len]) + # Remove from buffer + recv_buffer = recv_buffer[4+msg_len:] + + # Forward complete message to other client + if other_client: + try: + other_client.send(complete_msg) + print(f"Forwarded {len(complete_msg)} bytes from Client {client_id} to Client {1 - client_id}") + except Exception as e: + print(f"Error forwarding from Client {client_id}: {e}") + else: + print(f"No other client to forward to from Client {client_id}") + else: + # Wait for more data + break + + except socket.error as e: + print(f"Socket error with Client {client_id}: {e}") + break + finally: + print(f"Closing connection for Client {client_id}") + with clients_lock: + if client_id < len(clients) and clients[client_id] == client_sock: + clients.pop(client_id) + print(f"Removed Client {client_id} from clients list") + client_sock.close() + +def start_simulator(): + server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + server.bind((HOST, PORT)) + server.listen(2) + print(f"GSM Simulator listening on {HOST}:{PORT}...") + + try: + while True: + client_sock, addr = server.accept() + client_sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) # Keep connection alive + with clients_lock: + if len(clients) < 2: + clients.append(client_sock) + client_id = len(clients) - 1 + else: + # Replace a closed socket or reject if both slots are active + replaced = False + for i in range(len(clients)): + if clients[i].fileno() == -1: # Check if socket is closed + clients[i] = client_sock + client_id = i + replaced = True + break + if not replaced: + print(f"Rejecting new client from {addr}: max clients (2) reached") + client_sock.close() + continue + print(f"Client {client_id} connected from {addr}") + threading.Thread(target=handle_client, args=(client_sock, client_id), daemon=True).start() + except KeyboardInterrupt: + print("Shutting down simulator...") + finally: + with clients_lock: + for client in clients: + client.close() + clients.clear() + server.close() + +if __name__ == "__main__": + start_simulator() \ No newline at end of file diff --git a/protocol_prototype/DryBox/simulator/launch_gsm_simulator.sh b/protocol_prototype/DryBox/simulator/launch_gsm_simulator.sh new file mode 100755 index 0000000..74971d1 --- /dev/null +++ b/protocol_prototype/DryBox/simulator/launch_gsm_simulator.sh @@ -0,0 +1,68 @@ +#!/bin/bash + +# Script to launch the GSM Simulator in Docker + +# Variables +IMAGE_NAME="gsm-simulator" +CONTAINER_NAME="gsm-sim" +PORT="12345" +LOG_FILE="gsm_simulator.log" + +# Check if Docker is installed +if ! command -v docker &> /dev/null; then + echo "Error: Docker is not installed. Please install Docker and try again." + exit 1 +fi + +# Check if gsm_simulator.py exists +if [ ! -f "gsm_simulator.py" ]; then + echo "Error: gsm_simulator.py not found in the current directory." + echo "Please ensure gsm_simulator.py is present and try again." + exit 1 +fi + +# Create Dockerfile if it doesn't exist +if [ ! -f "Dockerfile" ]; then + echo "Creating Dockerfile..." + cat < Dockerfile +FROM python:3.9-slim +WORKDIR /app +COPY gsm_simulator.py . +EXPOSE 12345 +CMD ["python", "gsm_simulator.py"] +EOF +fi + +# Ensure log file is writable +touch $LOG_FILE +chmod 666 $LOG_FILE + +# Build the Docker image +echo "Building Docker image: $IMAGE_NAME..." +docker build -t $IMAGE_NAME . + +# Check if the build was successful +if [ $? -ne 0 ]; then + echo "Error: Failed to build Docker image." + exit 1 +fi + +# Stop and remove any existing container +if [ "$(docker ps -q -f name=$CONTAINER_NAME)" ]; then + echo "Stopping existing container: $CONTAINER_NAME..." + docker stop $CONTAINER_NAME +fi +if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then + echo "Removing existing container: $CONTAINER_NAME..." + docker rm $CONTAINER_NAME +fi + +# Clean up dangling images +docker image prune -f + +# Run the Docker container interactively +echo "Launching GSM Simulator in Docker container: $CONTAINER_NAME..." +docker run -it --rm -p $PORT:$PORT --name $CONTAINER_NAME $IMAGE_NAME | tee $LOG_FILE + +# Note: Script will block here until container exits +echo "GSM Simulator stopped. Logs saved to $LOG_FILE." \ No newline at end of file diff --git a/protocol_prototype/DryBox/voice_codec.py b/protocol_prototype/DryBox/voice_codec.py new file mode 100644 index 0000000..dcf8609 --- /dev/null +++ b/protocol_prototype/DryBox/voice_codec.py @@ -0,0 +1,714 @@ +""" +Voice codec integration for encrypted voice over GSM. +Implements Codec2 compression with FSK modulation for transmitting +encrypted voice data over standard GSM voice channels. +""" + +import array +import math +import struct +from typing import Optional, Tuple, List +from dataclasses import dataclass +from enum import IntEnum + +try: + import numpy as np + HAS_NUMPY = True +except ImportError: + HAS_NUMPY = False + +# ANSI colors +RED = "\033[91m" +GREEN = "\033[92m" +YELLOW = "\033[93m" +BLUE = "\033[94m" +RESET = "\033[0m" + + +class Codec2Mode(IntEnum): + """Codec2 bitrate modes.""" + MODE_3200 = 0 # 3200 bps + MODE_2400 = 1 # 2400 bps + MODE_1600 = 2 # 1600 bps + MODE_1400 = 3 # 1400 bps + MODE_1300 = 4 # 1300 bps + MODE_1200 = 5 # 1200 bps (recommended for robustness) + MODE_700C = 6 # 700 bps + + +@dataclass +class Codec2Frame: + """Represents a single Codec2 compressed voice frame.""" + mode: Codec2Mode + bits: bytes + timestamp: float + frame_number: int + + +class Codec2Wrapper: + """ + Wrapper for Codec2 voice codec. + In production, this would use py_codec2 or ctypes bindings to libcodec2. + This is a simulation interface for protocol development. + """ + + # Frame sizes in bits for each mode + FRAME_BITS = { + Codec2Mode.MODE_3200: 64, + Codec2Mode.MODE_2400: 48, + Codec2Mode.MODE_1600: 64, + Codec2Mode.MODE_1400: 56, + Codec2Mode.MODE_1300: 52, + Codec2Mode.MODE_1200: 48, + Codec2Mode.MODE_700C: 28 + } + + # Frame duration in ms + FRAME_MS = { + Codec2Mode.MODE_3200: 20, + Codec2Mode.MODE_2400: 20, + Codec2Mode.MODE_1600: 40, + Codec2Mode.MODE_1400: 40, + Codec2Mode.MODE_1300: 40, + Codec2Mode.MODE_1200: 40, + Codec2Mode.MODE_700C: 40 + } + + def __init__(self, mode: Codec2Mode = Codec2Mode.MODE_1200): + """ + Initialize Codec2 wrapper. + + Args: + mode: Codec2 bitrate mode (default 1200 bps for robustness) + """ + self.mode = mode + self.frame_bits = self.FRAME_BITS[mode] + self.frame_bytes = (self.frame_bits + 7) // 8 + self.frame_ms = self.FRAME_MS[mode] + self.frame_samples = int(8000 * self.frame_ms / 1000) # 8kHz sampling + self.frame_counter = 0 + + # Quiet initialization - no print + + def encode(self, audio_samples) -> Optional[Codec2Frame]: + """ + Encode PCM audio samples to Codec2 frame. + + Args: + audio_samples: PCM samples (8kHz, 16-bit signed) + + Returns: + Codec2Frame or None if insufficient samples + """ + if len(audio_samples) < self.frame_samples: + return None + + # In production: call codec2_encode(state, bits, samples) + # Simulation: create pseudo-compressed data + compressed = self._simulate_compression(audio_samples[:self.frame_samples]) + + frame = Codec2Frame( + mode=self.mode, + bits=compressed, + timestamp=self.frame_counter * self.frame_ms / 1000.0, + frame_number=self.frame_counter + ) + + self.frame_counter += 1 + return frame + + def decode(self, frame: Codec2Frame): + """ + Decode Codec2 frame to PCM audio samples. + + Args: + frame: Codec2 compressed frame + + Returns: + PCM samples (8kHz, 16-bit signed) + """ + if frame.mode != self.mode: + raise ValueError(f"Frame mode {frame.mode} doesn't match decoder mode {self.mode}") + + # In production: call codec2_decode(state, samples, bits) + # Simulation: decompress to audio + return self._simulate_decompression(frame.bits) + + def _simulate_compression(self, samples) -> bytes: + """Simulate Codec2 compression (for testing).""" + # Convert to list if needed + if hasattr(samples, 'tolist'): + sample_list = samples.tolist() + elif hasattr(samples, '__iter__'): + sample_list = list(samples) + else: + sample_list = samples + + # Extract basic features for simulation + if HAS_NUMPY and hasattr(samples, '__array__'): + # Convert to numpy array if needed + np_samples = np.asarray(samples, dtype=np.float32) + if len(np_samples) > 0: + mean_square = np.mean(np_samples ** 2) + energy = np.sqrt(mean_square) if not np.isnan(mean_square) else 0.0 + zero_crossings = np.sum(np.diff(np.sign(np_samples)) != 0) + else: + energy = 0.0 + zero_crossings = 0 + else: + # Manual calculation without numpy + if sample_list and len(sample_list) > 0: + energy = math.sqrt(sum(s**2 for s in sample_list) / len(sample_list)) + zero_crossings = sum(1 for i in range(1, len(sample_list)) + if (sample_list[i-1] >= 0) != (sample_list[i] >= 0)) + else: + energy = 0.0 + zero_crossings = 0 + + # Pack into bytes (simplified) + # Ensure values are valid + energy_int = max(0, min(65535, int(energy))) + zc_int = max(0, min(65535, int(zero_crossings))) + data = struct.pack('= 4: + energy, zero_crossings = struct.unpack('> 6) & 0x03, + (byte >> 4) & 0x03, + (byte >> 2) & 0x03, + byte & 0x03 + ]) + + # Generate audio signal + signal = [] + + # Add preamble + if add_preamble: + preamble_samples = int(self.preamble_duration * self.sample_rate) + if HAS_NUMPY: + t = np.arange(preamble_samples) / self.sample_rate + preamble = np.sin(2 * np.pi * self.preamble_freq * t) + signal.extend(preamble) + else: + for i in range(preamble_samples): + t = i / self.sample_rate + value = math.sin(2 * math.pi * self.preamble_freq * t) + signal.append(value) + + # Modulate symbols + for symbol in symbols: + freq = self.frequencies[symbol] + if HAS_NUMPY: + t = np.arange(self.samples_per_symbol) / self.sample_rate + tone = np.sin(2 * np.pi * freq * t) + signal.extend(tone) + else: + for i in range(self.samples_per_symbol): + t = i / self.sample_rate + value = math.sin(2 * math.pi * freq * t) + signal.append(value) + + # Apply smoothing to reduce clicks + if HAS_NUMPY: + audio = np.array(signal, dtype=np.float32) + else: + audio = array.array('f', signal) + audio = self._apply_envelope(audio) + + return audio + + def demodulate(self, audio) -> Tuple[bytes, float]: + """ + Demodulate FSK audio signal to binary data. + + Args: + audio: Audio signal + + Returns: + Tuple of (demodulated data, confidence score) + """ + # Find preamble + preamble_start = self._find_preamble(audio) + if preamble_start < 0: + return b'', 0.0 + + # Skip preamble + data_start = preamble_start + int(self.preamble_duration * self.sample_rate) + + # Demodulate symbols + symbols = [] + confidence_scores = [] + + pos = data_start + while pos + self.samples_per_symbol <= len(audio): + symbol_audio = audio[pos:pos + self.samples_per_symbol] + symbol, confidence = self._demodulate_symbol(symbol_audio) + symbols.append(symbol) + confidence_scores.append(confidence) + pos += self.samples_per_symbol + + # Convert symbols to bytes + data = bytearray() + for i in range(0, len(symbols), 4): + if i + 3 < len(symbols): + byte = (symbols[i] << 6) | (symbols[i+1] << 4) | (symbols[i+2] << 2) | symbols[i+3] + data.append(byte) + + if HAS_NUMPY and confidence_scores: + avg_confidence = np.mean(confidence_scores) + else: + avg_confidence = sum(confidence_scores) / len(confidence_scores) if confidence_scores else 0.0 + return bytes(data), avg_confidence + + def _find_preamble(self, audio) -> int: + """Find preamble in audio signal.""" + # Simple energy-based detection + window_size = int(0.01 * self.sample_rate) # 10ms window + + if HAS_NUMPY: + for i in range(0, len(audio) - window_size, window_size // 2): + window = audio[i:i + window_size] + + # Check for preamble frequency + fft = np.fft.fft(window) + freqs = np.fft.fftfreq(len(window), 1/self.sample_rate) + + # Find peak near preamble frequency + idx = np.argmax(np.abs(fft[:len(fft)//2])) + peak_freq = abs(freqs[idx]) + + if abs(peak_freq - self.preamble_freq) < 50: # 50 Hz tolerance + return i + else: + # Simple zero-crossing based detection without FFT + for i in range(0, len(audio) - window_size, window_size // 2): + window = list(audio[i:i + window_size]) + + # Count zero crossings + zero_crossings = 0 + for j in range(1, len(window)): + if (window[j-1] >= 0) != (window[j] >= 0): + zero_crossings += 1 + + # Estimate frequency from zero crossings + estimated_freq = (zero_crossings * self.sample_rate) / (2 * len(window)) + + if abs(estimated_freq - self.preamble_freq) < 100: # 100 Hz tolerance + return i + + return -1 + + def _demodulate_symbol(self, audio) -> Tuple[int, float]: + """Demodulate a single FSK symbol.""" + if HAS_NUMPY: + # FFT-based demodulation + fft = np.fft.fft(audio) + freqs = np.fft.fftfreq(len(audio), 1/self.sample_rate) + magnitude = np.abs(fft[:len(fft)//2]) + + # Find energy at each FSK frequency + energies = [] + for freq in self.frequencies: + idx = np.argmin(np.abs(freqs[:len(freqs)//2] - freq)) + energy = magnitude[idx] + energies.append(energy) + + # Select symbol with highest energy + symbol = np.argmax(energies) + else: + # Goertzel algorithm for specific frequency detection + audio_list = list(audio) if hasattr(audio, '__iter__') else audio + energies = [] + + for freq in self.frequencies: + # Goertzel algorithm + omega = 2 * math.pi * freq / self.sample_rate + coeff = 2 * math.cos(omega) + + s_prev = 0 + s_prev2 = 0 + + for sample in audio_list: + s = sample + coeff * s_prev - s_prev2 + s_prev2 = s_prev + s_prev = s + + # Calculate magnitude + power = s_prev2 * s_prev2 + s_prev * s_prev - coeff * s_prev * s_prev2 + energies.append(math.sqrt(abs(power))) + + # Select symbol with highest energy + symbol = energies.index(max(energies)) + + # Confidence is ratio of strongest to second strongest + sorted_energies = sorted(energies, reverse=True) + confidence = sorted_energies[0] / (sorted_energies[1] + 1e-6) + + return symbol, min(confidence, 10.0) / 10.0 + + def _apply_envelope(self, audio): + """Apply smoothing envelope to reduce clicks.""" + # Simple raised cosine envelope + ramp_samples = int(0.002 * self.sample_rate) # 2ms ramps + + if len(audio) > 2 * ramp_samples: + if HAS_NUMPY: + # Fade in + t = np.linspace(0, np.pi/2, ramp_samples) + audio[:ramp_samples] *= np.sin(t) ** 2 + + # Fade out + audio[-ramp_samples:] *= np.sin(t[::-1]) ** 2 + else: + # Manual fade in + for i in range(ramp_samples): + t = (i / ramp_samples) * (math.pi / 2) + factor = math.sin(t) ** 2 + audio[i] *= factor + + # Manual fade out + for i in range(ramp_samples): + t = ((ramp_samples - 1 - i) / ramp_samples) * (math.pi / 2) + factor = math.sin(t) ** 2 + audio[-(i+1)] *= factor + + return audio + + +class VoiceProtocol: + """ + Integrates voice codec and modem with the Icing protocol + for encrypted voice transmission over GSM. + """ + + def __init__(self, protocol_instance): + """ + Initialize voice protocol handler. + + Args: + protocol_instance: IcingProtocol instance + """ + self.protocol = protocol_instance + self.codec = Codec2Wrapper(Codec2Mode.MODE_1200) + self.modem = FSKModem(sample_rate=8000, baud_rate=600) + + # Voice crypto state + self.voice_iv_counter = 0 + self.voice_sequence = 0 + + # Buffers + if HAS_NUMPY: + self.audio_buffer = np.array([], dtype=np.int16) + else: + self.audio_buffer = array.array('h') # 16-bit signed integers + self.frame_buffer = [] + + print(f"{GREEN}[VOICE]{RESET} Voice protocol initialized") + + def process_voice_input(self, audio_samples): + """ + Process voice input: compress, encrypt, and modulate. + + Args: + audio_samples: PCM audio samples (8kHz, 16-bit) + + Returns: + Modulated audio signal ready for transmission (numpy array or array.array) + """ + # Add to buffer + if HAS_NUMPY: + self.audio_buffer = np.concatenate([self.audio_buffer, audio_samples]) + else: + self.audio_buffer.extend(audio_samples) + + # Process complete frames + modulated_audio = [] + + while len(self.audio_buffer) >= self.codec.frame_samples: + # Extract frame + if HAS_NUMPY: + frame_audio = self.audio_buffer[:self.codec.frame_samples] + self.audio_buffer = self.audio_buffer[self.codec.frame_samples:] + else: + frame_audio = array.array('h', self.audio_buffer[:self.codec.frame_samples]) + del self.audio_buffer[:self.codec.frame_samples] + + # Compress with Codec2 + compressed_frame = self.codec.encode(frame_audio) + if not compressed_frame: + continue + + # Encrypt frame + encrypted = self._encrypt_voice_frame(compressed_frame) + + # Add FEC + protected = self._add_fec(encrypted) + + # Modulate to audio + audio_signal = self.modem.modulate(protected, add_preamble=True) + modulated_audio.append(audio_signal) + + if modulated_audio: + if HAS_NUMPY: + return np.concatenate(modulated_audio) + else: + # Concatenate array.array objects + result = array.array('f') + for audio in modulated_audio: + result.extend(audio) + return result + return None + + def process_voice_output(self, modulated_audio): + """ + Process received audio: demodulate, decrypt, and decompress. + + Args: + modulated_audio: Received FSK-modulated audio + + Returns: + Decoded PCM audio samples (numpy array or array.array) + """ + # Demodulate + data, confidence = self.modem.demodulate(modulated_audio) + + if confidence < 0.5: + print(f"{YELLOW}[VOICE]{RESET} Low demodulation confidence: {confidence:.2f}") + return None + + # Remove FEC + frame_data = self._remove_fec(data) + if not frame_data: + return None + + # Decrypt + compressed_frame = self._decrypt_voice_frame(frame_data) + if not compressed_frame: + return None + + # Decompress + audio_samples = self.codec.decode(compressed_frame) + + return audio_samples + + def _encrypt_voice_frame(self, frame: Codec2Frame) -> bytes: + """Encrypt a voice frame using ChaCha20-CTR.""" + if not self.protocol.hkdf_key: + raise ValueError("No encryption key available") + + # Prepare frame data + frame_data = struct.pack(' Optional[Codec2Frame]: + """Decrypt a voice frame.""" + if len(data) < 10: + return None + + # Extract sequence and IV hint + sequence, iv_hint = struct.unpack(' bytes: + """Add forward error correction.""" + # Simple repetition code (3x) for testing + # In production: use convolutional code or LDPC + fec_data = bytearray() + + for byte in data: + # Repeat each byte 3 times + fec_data.extend([byte, byte, byte]) + + return bytes(fec_data) + + def _remove_fec(self, data: bytes) -> Optional[bytes]: + """Remove FEC and correct errors.""" + if len(data) % 3 != 0: + return None + + corrected = bytearray() + + for i in range(0, len(data), 3): + # Majority voting + votes = [data[i], data[i+1], data[i+2]] + byte_value = max(set(votes), key=votes.count) + corrected.append(byte_value) + + return bytes(corrected) + + +# Example usage +if __name__ == "__main__": + # Test Codec2 wrapper + print(f"\n{BLUE}=== Testing Codec2 Wrapper ==={RESET}") + codec = Codec2Wrapper(Codec2Mode.MODE_1200) + + # Generate test audio + if HAS_NUMPY: + t = np.linspace(0, 0.04, 320) # 40ms at 8kHz + test_audio = (np.sin(2 * np.pi * 440 * t) * 16384).astype(np.int16) + else: + test_audio = array.array('h') + for i in range(320): + t = i * 0.04 / 320 + value = int(math.sin(2 * math.pi * 440 * t) * 16384) + test_audio.append(value) + + # Encode + frame = codec.encode(test_audio) + print(f"Encoded frame: {len(frame.bits)} bytes") + + # Decode + decoded = codec.decode(frame) + print(f"Decoded audio: {len(decoded)} samples") + + # Test FSK modem + print(f"\n{BLUE}=== Testing FSK Modem ==={RESET}") + modem = FSKModem() + + # Test data + test_data = b"Hello, secure voice!" + + # Modulate + modulated = modem.modulate(test_data) + print(f"Modulated: {len(modulated)} samples ({len(modulated)/8000:.2f}s)") + + # Demodulate + demodulated, confidence = modem.demodulate(modulated) + print(f"Demodulated: {demodulated}") + print(f"Confidence: {confidence:.2%}") + print(f"Match: {demodulated == test_data}") \ No newline at end of file diff --git a/protocol_prototype/DryBox/wav/input.wav b/protocol_prototype/DryBox/wav/input.wav new file mode 100644 index 0000000000000000000000000000000000000000..da3e9179437355dc6712b960dd9ea96fe771e328 GIT binary patch literal 73100 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

tL7%u6D;l;;H4P!|8~le z?|2AK5Bp<3GtOwJ_s~uQrQrZbayMlzj8jOhqjpob18wZ02GmDm0C2ueq9_~t+cY6%Rdj^+xG$OO&QCaC`a#VE6uq^*aWhvvYdc!Ej+C+HE*NHW0Z z3qFVQ0rwyosz1yFnT&^DNa_vcjj~CZ1}%J3(yEj?LDeDFC=oa==gfZ*gA0QNIs)y6 zH+!x>*K%rKA(Lh_E8Nr z9gNvcWg+Ynk6{hykp1vk?WWa%=$2UX3h+a&qP;*%*k*n)qF_(0tIYuxQ$BT%8V78s zEWnGJVR~o;5FVm|KTrpkhJU|6E07FptF2KVs6I)+Q5m2FVfVTt|B%x`YE}$L!F7^dUm`UF>t3* z-WUycyyJirQdQdp{IOU12BVc3g$|=Ccp<)szv5qD4bOu9d zI@F*vhMV8av`9sR&5iJj*IHOxrB;W`Bfok^9Slsr1bvY)#C&CzLp$JY(&9frF1Uk+ zqw?Tw?*uaM8Y6*n(+Hx;uByvmZERC_sHb7A*U*yTo^_B>!Tb)S917d`9BK;p8E=6z z)(yt0t>)J%0{MgyPj7m&SAXaj(%v_-9^W>y`rig$wMstB@sSX=o2mHx+^ z1EaeDg`nS10YXm#vd=!yYtw+v*9iD2rS)6-bYT6(nHPa-_7Uz>5b(s(pe;ZsZD{@g z4$&>Bz4c1#p{3Uj!TT3d>p?7U4(+kFMehsT!*r-ON<^>Gb$Gu`W?InLbAeYjMzeu` zRb2a5%dgJ_*5@r?&2%=G0!QgQ)bAZ?E{2*=$b1RJ*ik@Mlz={&M;{4NvR|#JW`Gr* z3p@v})e%}1-2=YV3W#p00;I4kXqEXIsC?^y8^0Cis({v2n**eh?7(@;2V55hMlrA1 z+MH<41ZHY~sIjF2J#015MBeHr^y0vai9j|`OQ71Rs;hPevd|hW9%wOdfv5HZC|+66 z4X7Hk4anigfr*EKc@Ygw9lFZ zbjrcNBK-{nyn#RsoecMY(|}f13Vb!y;lDG06O{< z%`nhW6M+SE4fwKy;Wl)y(FjP)-+{U{5eSt%^f;(f)ewk@Q-QFU4D*J7!YpP084u+#L(1&XXOJ4to(nDbSf{n3$(cmJSF9U zR&^a(>7r-Ui9QUTFbifV6OcNe0k8HP#FaGHIsK>hNi!hgXFITqngjFpJg`bH8qYx* z`vU!@BhbcDslT;>@>>s{y$X0~sr3iH!S@COL+m4PGAZzup46^uQLqMj>i@u8?f`1` zA)w{2g*c*hK-{YXbfnIDFYw%M0CKGlp1KakVCIjQR2e4yhqar-56i81zaFh2y z5B~tORIfhE-&h+8JmqQ1afDxhD}7*AmyQY(|}gJ-7JK1!{Fk_hiQ5m-tc zplU%U==V@yoel=c9064d#(a`T(8a&-q}L_(7%~0OdLzXp+_==lP8{vhb%N*LY4 z@U0WT)BFTv(TX4&lR!F_{GXUN9oAcF#rM=2mgj-;bko=etqz9SYy@QQLO}Kwfe!D1 z6_5gQy%)xRKJ+7(t^>6`w|-xHs3|(DM?rm%cxdwktZE*9lUh49E6hVp&=~Q+OG~YA zl3G7^5YTyN!dmYMe~t$!Pi6d9f|VHr={o>2)et0M@=B+=lm1=|L zDg`9u6kv&_R*{+jqx3I~SbZSP)%^ds6^FJP>8W(ti7=v{U=3l=7zEZzYVGi0Ks{~; z?^_-y!)<^_+!;7k8=yB^p*Le-75oFO^o4I!fZsd?sYtCieF5ZPAxPV3khdAIhW3I? zy#(2MsE0tZ(!)w&p$9+o%+L~nXAXpS-U2;HrHK!Mr}c-CYYO9(TC=<#v{2co0c7SD z&>Iid1UBA)bZ-XY)M8+x_l8exuq9OBfOB9?HPA;vn^Qp!zkd^TRvF z!OW&s3Ml~6ln46sH$1s5v_A^kECKD51UlARn9D1$dbYq?oDL(FTHE0?+;TjI9;}AH zC4fdh1Tv8U`tVJ!2+wQ_^4Sk0r#q0coBv5e5Qg zYNhBbz>NO@D{&L7!G!-4-9N)xJP8Eo^RNn6!1}xfBbfy2w?4>9EXdM$cv@<`=Qhyd zSQ!0M@V9_E#6Y#X3@Q(iho9sFC=_Aa-7FZu!VeQ@4 z_e0y@Hv^s171mHM(0hwuHC=$;VHjl}^rJ9nA3uys3ar$px(;u_0c%f%z94va8f?Cd zpoz0X4|Bu&<$`f8Xk-A1z60Yl1qhsNVCQQH(l!)EY$NE=1nAi*n6-@{$ElUwAA>~j zFb_e{o0UKg8o-}uuo7HoM}mF`P-Ezeo?7GcFs$^=@QZiwCa*!;q-w<{AZ;SN-yP_i z3as$ds)4_uw~wF??_j<-cuH#JvN({bRLz(j{vHi)UmE7Q6tve3W+%1QcSrc7R%j{! z?WKqHTMRTS15C1;@P0pFgieAMO{BMD@ynwe$Wu||Gxp@gae+4}d;Hfe2v>-^teUQ2RFgjDA zA2BeN61+tS`t<_7XF`8pz^;=Go>>@lhYx1v9z5X`tb!*nCLduf)dCwL^$k<&wWS9c z6G3<7gkCvtf{zAydj}*`0ru>7@Qc)nx&Oi22S6GXXeB4iKt}k51OF!*{Nun_#KIhZ zgt1KqIZV+RBa@L@1?H(v!5gJki=kkgzQdb}@ZBOHdqsei`Ro6`cnkVjfnCCerTp9t9e$F}f0hCrm`RiENHDiurfH7l?IqK-xjfx$N9f%+yDxiXNN_Y1| zclv;I*ZW;}-p~C!aqm56@3q(Zt=Mbtvo?<1%tCb&*L3HndPD0g@Y@)bSE0EfE!sw( ze!;(oa{(2>E^nJh%0pd3!Nr`f;4Z)Z9))jbpOdqH{(pU{kKk3hxQcn~AL z9Vg-hizZqKY=rNRldGDL^RY&f8u!V#Qp$IiptTvB|A4-lqV^_ttWQrgp40N4c8k8o z^O}R$v5sUE-gp8IoTLh215!GXRXWAkHyX!Gd|l|eNn~@7#1^I}peIMVyVK)wIBa(f z@;H!YC`i2u(NNLvnlMlS@^{nwb#!$Y4VuG-O-n+ERX$#={G!I5gGPI$vl2zjd#E4aV_ar#FfUZ_BA4`&z*5K zj2~^y6Wz?hq^fU6)Ugep;vAS=?7%Vj&;Xxm;D+Z4A#^n?4P)v0`5UJL&gFyVkk8j> zm_TFaLQ+IN+iCM*f6Hn$Y=7u}Rj7^A1{<5i-Eel@KeWvlk4b;!2_j5N_wQ>d@ZQh68~3Tk;5QO%8BH#ryJVj6L- zYi@$a1}wmJ#(O(jTF`_YX`H$g=W;c{?dZ1=gkI?9e<#nJ#g69OcZ2V$;6zLIu0ASn z(#rYTZ=wC0d{&z_ovnovNveh3HsfP$cN|WedY|B3d9Tp!5+q#KxSOEpGCiG2_F%Q>n*P!WS z94(ES)Ci)Actc2UtcL~Uv^*a*R6^hJzP--qYi9e!C|i8KBJYdW(Xz0lds){acg%&M z-ekSefBWHeIc(1%>o>#-ZOOhj`NY`^3utiI;uXGK409Wyx{zeg#lvd!c`w{=(^HJD zv9Vfg_NvL&M6935CErk>ZC z-fyQtf8b15=dFJ4L0xH-{fPt{<9+I`@LG$EU@2eKDesAUi*ZI7%P88pg#F%37fSLH zan9>-wxX@5u#*|et1Qe9;_B`q>(4|E5#jx&zlLPJlJ+E!6{mERfSw9QS&05JdaVOP z$Fg_x*!Q{mp5yA>c#%O->1+;rzu8ZmVROjOCX(Epr*E$I$CwKZpuxpB5$9B23egAL zzZVaR$!wA~$N9dG_@WbSAA#os$hxn{e=rIMxMBlcE0xXC$2R?s=fUFi)ivJ5IVMeT zwYHyH{-4VZ#`%3!@T&^`Z-I`b$cFvcunJa{iuUm-X>Ulh$ z>~{krI_U0WPUi@$~IuOnmlkrHnJwhYqqdGD2**-n& zn$eI|1bbs)bS&O|hJ*c~@C&}PBRThl#{D=PeeHH{*s}0^zw2czY0uL~7xRl9W)?HG z80S!Lq($Yj#qR7W+W3m*eF4XP_~$rd^@w&BKvv8M7HDan-{a^GCK_p2p)F{cqWwL_ z{s#+tS{}o3zWLy^gWh_>;jiMFdaTN^xUtG;rlb8=uNAbUGTv6y{}MFM^ldRMI}t{1 zA;qvXmGE+no>%3$5~sDzK*dIVF4cS3;YCmr^X=dD8RxR?Mbi;9mWRQ$M!AI)H{;u6 zcg<%(XZSC?{#?BMll}`~r~>=92=;!h-c7{0wlYkw@OCeXb$V!PA~a4j+75i+qav|8ee*r5wggpYKwKbe zwjPJ&F&+7!B6x_iAbT5kH@F^^r@uViKj_-y$RXx8J6siWz3?}s=-xTvgLn$0BTl_5 z-xG7bKE^&4pFY*|V>t4ObN#-?-}$gR)yT$a|9c~NNM>jlNi}9=D{AWmScsFzGxq9~ zEKcWY34IrfLu$ZM33SYY>V>#>m{gC0iJCAFCkn5jGvCqQzFMBf0xtB)a#waCk=10o z-fOLxtTq%?$d>Rr8^x!+wHN0N$4RkUae0ezEzo+L-rI<^EQF|(^{mS8gj5!%^-#A2 z2M*)Y5begyZ4lde9QzmfpPSjGxV|)ME8}rZ+&el}P2Cbe1Y*KCs7#%j)h zzJX~c)*?>nS_!G+-2W>%-w$o?p)O9FAEMu{UDY}LFK&;3!B_m9`3E3wd3v#@USQC&**BIfaF78%|+({2<5#~Jj;X46S-0_!>mq5|`a%o^jA z!(HwTi#5ydakQg{-$T6{Pv3^?EzUlD&KX-D(A=;6%tik~J#8nyX=LAv4$shgoDja( zcN2a3Gd+!SQ{&Xm@P8r0lX#=h&uG1mt2XB;Erk11prahWy%<;8`+m5V%lou4dFJwX z4Gpp52r5ozvqC24u)}jmvIm>;1<4f|!7dTdYQ2Alrmyg^54xs%zg2X)m9*wS{Sc#C zNGgZLB-fH`>0QkHaqfPhgqk?(6ArnaiVk&t%k23j59s(X0+e! z^*#mn#?zaK?B0>J`5I@sl5ltLe{{uLcs`OOOVfo~dJUa83U5Q)HJr3}ka6f{V$_j4 z*-lT^;b&Fa*_@;s_;!WsIzdOQ8oUEh3(zvxH9L$wBsj*%?eh12kA52Jp=!RpIOlUM z&5d(K_oWfTob2<`yh_Ai)9AuZ{0`p5+2+HIYJ>4~()t|VPx5V?#W)eA6O3;%?j54X zhiGwAeA~+guP}~jxIG6B`WV%EI18lB^~oO6k6G;@H0?**vHa&@KC6szMwX#DuM_j_ zC1f>=JzPnOE77t*U%k-sG0Pj4uPaUIn5SnL8Y8;sg9pP{gF!xx6F=j8;8Nna(juT@ z`n!$f%aCJp{C+?-wk7Pue4z}gLuX?ab*@=feHe`Rt9-Vcv?k@P%nFoN@L36#bQgS$ z!~0L6da&=OlFsqayaiuI8u@a(p9A?d^?y2So}!nWu~x}rC~_F*>!U7hJ(`!)I@+_B zysN@ooaDX&=f>msN~0gBj}B~ooDtt%?(bFj>cT6%1Lxn8Ne5Uff2`k!W;;YGHP zY*4=pTK8+MqW;TecEjm)KR#^7&ox>vf~kn9!aFRZFVplFXUzT#$1C$TaRPo$G{UKP z+@FnDt;I@tj+LbG^GS3uidUh&rue2x_F(obH0?vjQnn#%PS~RHD2PnWAv}#4e9TPt z`mBt$Vm4SeJCN7J)@(;N+?|Pv)ih?J{|BOEHccspgUIooLq-vU#u$d7U@e_!f`2jR zt!#7$;3~3p&G2}a7UrN}EZz-q?EpOMZe&?Bk279t8T(N@D1x6jnYJ?RY?_}FU!a|n*_$^H0I_>pb4=;+0qVw&$%&e&(7t^LQJHD`ikR4VEj>-$7d3 zAP-VgoUwXWIbm3F6Ot}_1cV;Ie~rI2Rjj=pG)SEk=&U!V0|Jp6myDGS)vvszdMcm*ld{|2aw4_)|uK^oj$|a2ot@RVdWOl>i%@)QxY2r8*|8XqEDBz8FP(i zuD(X#Q^;o`{Twc`8px;JrT^zdD(~?;!_oVc==c+u`jF-RjehOMg~>c|v=)*4SaLg{ z^~L0{4u4DX1PhJ%s3^1y$<1SZe!%U4u=EYe!>iS%<1-<6GOYA9sv#_8WE@Ky(`0Cg z_1ws4_t$F&-Z8w^TAy^mwHMKLv(?S}NwFt-mU+!I!i6~dJ-$VTW2JWuSgFWF|AF4$ zeO8KItw2-chc`pg;(P=bXAFOj^Q+R2gY`Z; z#DCX;s*6awsun84-y-rqsD})$nxp7!SdWa)@ji*{M>Dpp4tp`jsN3O8XEvh~{hXoK zn0>_BW078m)7AGOy%&0Z!^2T{J=E`UMn4~2+aR;LEbITy0>01~!nYiP{quRfSiky{ z97F^5^blQcMxq%G#oBQzV<^CtBwNn5jDgEpdS9jQ&HgKbs*WTdng7McQbZ`W%v4kDn1Kb~p0yLGxj&NSo?bTI+itzuNZ?Gr=!NX(5hm zr6rL&{SjhgZL=@lE!Ns{?MzR<_E{Hp?`7DGvuSs*0%!3A5!1)d5`16c)6;RMGJG^- z_v=AXoK{`T3LKG(h%9ByG!~LfZ@e20*+c02iDI2{_*zPPzvJiEdFxq>nrV4^KM&;x z>HJWmj`h%KI9?GFb{qfctX$~!26A0w3}LrMi;4pUeQ~tJ;m9*(`jU6Tw|^9 z5T5L1abuNjm2bD=$1;>e9(@}uY;gS$GVNjXv*2wP{oe}*)!eny9g#I$%+8mC^YG4> zKy(fMVzG9sdYz8uhhZ~T3(LU68ZB>kf4pnRI`2luTJ221rD?vaOcvGYbOW+Dpr@lK z+kwMd^uE-85nqpkobh6pI4OPs9S&Pxg-t7V^+v74d8dQekcD_T5|u}Bw7>Tg;AkEx z9ERmYAEj{Wknt?S{qUkaT^)0(2}V4~@9^i5r(L9v8L+uSTXD|x8mQjxwUobVppBRb zNA5FLb;Fv^)z@HriClCq*10D9a}mR5qsy8BQj@@3a>y$U9t9fi~6T5l7SJzQ)@dueQMCGWqb5_!l$%t$94w zFpgNE$Qf@{sF{cQHMrfMJf^w#XHr~GqHEp1fmHgE#~Qd?1T(9Qrn3CM4kUDRxB5UNzl9D|ri(e=W*h3m6A!?%rT&koZ?Um#m9yHC zzj_n?FCe3syOiODi{UtC_>td>)urXMEcOr-`Mb>Th*u-lh#5!denr-?u2I#;y~rYz zg_M~0#GZ^Zy^ozFmHhv|b&Sg(x`3T6fViDn{oSY!l1s5RC+RJ6+KXw;m)|jZjc2nNE#cq$7-^PBkZ_I$-&2w@nj!o5eti*OjMQGY&IGurt<7i3b6k{!YvsTu7 zSJQY(>+ejK=Ah3e!o-lg9qozgRqmbSs>q{E_DyF!4MTmzPt|cSRwV1A?Qq`C%)yoA zP!T!2GB^`i>KQOS+4V7pn@DeBb!>%E#G1eo*pJvGviFe1ZDsxfT_ZeYRQ) zQ*dXcPhu5o7%CR|yNHw{YZcxkY-+@x1HCpG*=+s9toK;5EJR&xuO_4%J1R=~U5<9I z*2Y{qHWIQ%;aL$${pdA8uV3NhFw{nNXbRprvlvF(+HdnTgx|-Gg>C#s%$pTfBC&(bdI8p-a(( zi52$OL=&y;@_ASWG9u}xQTMq%zoEC0?|8y2sSRqnz(HhuV>inJQi%O~u~%Y<_c24- z3|md|{xI?Yhtb*)wyV<7SF^iOaUr`MJA6vhy^Tf?xY(0kLb^>{w~bzGLUXKW9gBZu zvT6G3fx5?0^9I_!#HC?)HPr8rPvk*5ryuzH7OjX`#z4Pkqxuuvoa3h-ji{0D^K^3B zf}&lh{}s)f(Ow=`YLHoY;MjlB6VE%+rO@-4tiUmOUTtU3_R{DoS*$C?>gX}^oHl9XaT7VC6x;cMjNV=NK*4K%K>$-|6t zCJx4$TzOL41;O=Ut0o%D|Ep|5uSj!!>B?`$IWjl-UqS3mp2R**H;PzWjwofbSL7ig128Gip4)p%6@5piu$EET-$6j2_(e0%^8-)YmA=i^uL^Y9l>PuFy z(#rPu^)-z3W$ix8e;z9%F>{O6y|6Aj{H)UcVv^YL|6{dkyk~v zVu4uC8k8SL2cJf6qz8WXCyT*;PxH+buTjtuS`zDwzxh1;>_mM|$Ct^jS!x7x$ROmS^V_;oT|{tPYM zeK$C7TgQ>hTU!1Gj>7A|Kw1Oz6Bs=T9YJOIi31Q6F~ISBR2g~|yBLbd!4o}fXUuzY zY{BXNHbupWV!eaL7WwggI25z2(AP=i9s9Wtrj1Zp0j-VAlw!?iBaVK+`h*<5$EQ?3 z)r=-qIwJO4ePh{Xq`yG21PBSBjy*fuxGGD8qUo-NE8U|r~p`wky!*H~dZzA6l zyCr)0d?e|2CWA?&{|n>}Bh%RZ5HZPi9QB+a-HSZXc-)xp_v*X_iO69zU5nl2eYFzn zhNJy0k;R($B6rPW2f~u{(^u>_o$k)qebobphxqO*y+-ag_Ec=a<-QQqi%t1KAN?S9 zjyqQ6#}ex|KjkT&PbXt${fG8qm1HH|EWsj2%p3l-Iu2E0i$jYy;y~bjpw_06-CER) zr7;s|P8%cbXv8D*+80(MYFw<<>N1^?Aqnrc&^>cq{f5_9u=f?6{W8zF@c#S6D4CVC zmi9NinBAK_EZV=wJn{@O-(X~A@GLS6M|qA@&=%RfGwgqAVHek*NV5Q?DSLB7Uho*! z#o?>wC$UoSD~e<7VIx|XLRqY~UncJmd%hZ)RWui6-M|+|zNr*{UF7O9IOjxV7H1>6 z>SVDeY8URrnq48wG#M?C8xGG}KZ|vYqk7r^M@>;zjqSZsd!@4j>{%(EbCqxRpuPes z8;U1mmu~{so5?r6jTwEc)I^pyW{gW{MWFjAU6@T@X8UFYnN20nuK3@MFZ~$4excEG zjjuayevFsD_-+=o40X>w^bhs=fn;L;#1vziXoPFTm(siCZPN#l)OT_v*>WFI?zkLQU)N5cOEW$`w3QIT3{o!He!P7i64f0uFHT-bw1&cjL6OA%vG854n zD`KJfDQk-+_zEjVN-o+e8h4`UNB#*14;8TEkzg(e)?Q zW3tJ446g7lVvWdCtNo1=v3slxWCS<&(TmvO5%c&HNH8qp8F)Dv7pCTUKU441pfz@? z#ooDjKK(Dezm31&qBEWwiA+hvw2R2?7u=5B2V?y1L#B~Myfr;1ZQ&`w3uMN7vJtTx zH|7Tsm*46pIzRW|z#2Zm|!5i1*CieaBH-kEyZ z2wgFg`T-xFlBazujh+2(qwia<$mx#qnx?I=Ktoxz9(ewN>{YS>~V_m zuW{uHqnJWU9r7reVEi%n+3t$rcpkfWVr6?a#4pkM4DBz{M(o1q0u^B=!;{B4!6cLo zgr{~S)i?j?F0E~Y-F3cO!AeI4f4!d(TA7E&f#?rC|4fwr1wOvVt9@*i`CLBA>Wr^L zP#D_WQh9dE95v%jJ5gLMdukpEro48zyfSFj>Y&Dv1PP60e2SrJBswejym#3QpPNWJX8(KfA#Cpg7BTi?MFx7c>&B2%@Gj;y@dQEaU5h7rVs<(N zcH()2?s;@a&SQZd=HvWC^mQ?cSjUQadhGO^sqa;2irseojc+whMIJa}-dOb-rKQef z8Psk<$sBYJL~RdO$3BCFKHWqk4wC-@xcG#we?lHF!C$OT_b0E|=`dOkgSGNA8#5U7 z1EF>;`eQvRR(fL()nHPMjCAY*iTT+)=xXP)j^xk>r(Z+o2>15Z`#kdPnMd8Id`oND z#F!g>g0my>Z95LuWBmg=kqsE{=X=PE=N~>q*$>9>oovR}#?=R1kqzz%6`ec@_cDw2 zK0R&^2fff0`_ChinTX1uqdTsRB!kez!KfW*bPMq+p3NETiXq<5!RHY$7P`o@%itj-8#|3A<*$#uBR?6-Vq=pOuL9pSwJ*_6p9m_t^|Ox64(< zDC&ZfBmE7XU*_uA+w_ugJjM2%XHU*8?*58Cf8(m|CC|C`S^A?uXVBNv9H(-7}@WVqJZ#5MI^S6d?w=a09>Ds=aH>_ z7j|MTvx64H2Q1R=5Bh%}SI$S(n`rpZRk4HMLoy6K`iL#>>YmTM8;hTlp>Q_cn&bav zB9H1~oC>sYsme0qSc7D)|g{AfX{+#2Q9jY7u=c0Ow3n$;>rP1*#XBF z%Ui`ht(Kmgx+I_DxLhQ6p?K@BFdom6#1l$gA-|YC+{BNbCCZC^C$We95dT<-cZ@x@ zk*|)3eqCOV=HumfIQ-px^;~}y`YzROV^P+68Zj6RhmE3fKBE!OzQo$cuecuBwb+3X zI|1TpotTra!ntYi7<*)5cR{RxE+y5KDEkyfdg1*SzKa=ri3Er zF7WK(W$8t#x1S-a-z|^8QN|ZptpQpK>pdP4?fa-6ZlydJ!lrbDp@U>d3-Lr|8!#goag3fombZS-1~OrP@eA|AgAlOOBzNjwZ* ze`o~j=sSkS0m@MQQxskqM_u4~>F@qjVrm@p6cJW6hc|abWZSZjf`qtC^nAOEf z-z0MHe-JLDWWKYTB zDTT-)md1x&_*(&HDv7}2>CBkR9xwyhpPuhYpuhRKnLR$2M~G-)EGfj(ZPQV>i!2w> zx7fY$qtV3P*qP}mM)5l-2a+Pg9{!@H+)N|ykN1jw1*c>|TMeI-=Os>+yD5|-x}04;#cccj{Lb<_vio50 z3P1H+RSt*aS%jUQ_o>9!#1nWovVNJlb?hmQb^YVAcrqk*VUMDbU$H4MGl+GL-^gky z+Yx)q<{9-Ax*S^FnQfZ^S@Buy)7+~4*uPV3H_wIi;IG*|+4HEp(#wdHXR{-d{TKdf z11*jC`zyAr58F5lY9~Nn%m(^G)hA^46+6b?Z#=)It?nzn+y?tCx7{U=@sS;k9R=Zj7-E5$S!7`X0s@2%KxA zL(ugyUX9?1VwI#eThLrTr)jf6_8c9k@0pnUvN!dAb*8cuow!dPDP;VP8VHZDD%Xlg zp7ebR`?0FNGS9D7kWm3jW3A{a*lV6GNY7zU-p(FmPp*c-+J2YH4#^uumhpBJ6^U7H zhl2ZH`EgIz-=Dplzv^GGe?5KJ4__Y`$<=&Jd1H-T1})L{qbdv|ReTt(hQ))~WE>i8 zo|e+VA*vs=g^3vTWAtnp`|*i!P4p!C_pYx^Q|8O)AD?~Bjx^(=hQh*BJo$&}1tsZN z>^92LtW#Ljy3iS!s#n;Q<;jI=5yUFU1)_snjQkp-tWOJ$XVGHETz4}5yHPLZ*~hRx z2~FwA|9l}DISpUV7UiC0h5s8qGoJctmW|Nw1^n>ocwgK29@WAIbCr2=sJFTHYOTe( z^7OP7-Tsu8+(~z?WY?BieR%_(Hq)?aMj7jqucUwW>3gh5sjRj5q7lB_NC#%4_aQxw zfu9v}y60)(JSbU!pAV|%63?NIOK(=wqMgt0P3xmSVz8fRLF^W+jf&WF-Z;;Pv#}^b##znJwbk8nVtUVW6c7sRxrB8mq8R(@Ay{ z>DK>CDQDCcEQlKCy@Zzu{ck^MV+ zE&GZDV+|(OqIRKuQgU^AgD1eh%-Y(~R)>YTo=>=5<%+7gTXLiEb3eY_qmP}c@sy!= zQOjk$=&7~}53v_Kc8~m~D%3OTv=6cSa-p79sO)t`awu7p-p}?`O*>4b0^VZ^(&@liS#gMp>EkKGljIh3ylvmgz6f zxoYd))6y@KtI~PdL01>%u2pHKWqKd&{a4yv&6$_k(CKNlba2utZ+B{>za{sijdJ}9 zTNXCVJ(-r*!hi6uX8KU_8U8I5@%2~lrj^X>o47PK8I?Yr8>Y5YmJ4fGT@8@GW-p?9 zfa+C$BEN3Qw&WYq4&68nHVShs3eQo$_Y{`=9NJMXdq~}~Cz2LPhvW+tM@FhO^aKAC zduhK;r(|E{nia0ktrd@5>nWAH;Ph8jzFsXjJ9#N-lk~v(k?AFDPs~Rrs2hAy;X{Qt z=H7??;;dxu<7{VAEooQKC|R9+l6<3{+Xv}0*~8g)bm81|RdzV{pnAnGWS!M2yeGFk z+pVh7D+P<3w)<;x5lNlM7F?GNWkK#t|EZE?i^Bb?Rh3s;>bu-=xi8ZL1rHTGS#V=A z%6LD(+2Ihj8RlZw-LKiwT({hm++DfPRMvVv_e@qRZB@{&;LinZRNdO0ltaUJtVyfv zh3sjVo0Ywq`z5#9)t~0Z=BnhXW}hbOYF%IOKtb2!dNsRyCoPkU)4Tco8`zf@)1hcC zQip22id2WQ1@xg|Qc-=qMry-cmu^j-Q5Wmm^a>KWk(S<{UEtdJxr@}`x_MYEhE!W5A0?NvGSx&H_o`7eCp%7Mt3T&n%U!A-)~D%imBo%L_^M#5^R4G5 zGjMads#v8Vy=fMw@nu9Def=^yG{F3mlk ztDO5o(SUN*Ur1fF8^2dR76w&0kwL~fD8l}i@hpZybVTc&Tbaj%MnX0a{x)Bmc# z_+~OAweFHGfxa7(53=TktqP~)R`86cr4Krr>shwy?yLj~>!dB!;p1-7wPsmL&)31|NP>cCstpx?1^v&IvJ71OkE(PV250l6RePE6hm0zyn4GVHr zy-v*iH(RUr+=m6-lkwTuT+>`}+SaINBz4kyDqM9G6F#if55z1(#4E8c{&6Qq_bWIj zxg8c?$tI{VRYnHqXEWXBps!?BQGKl@*+psTyyZSFJ2O31?Vq+Rem8TvEBKV1o=bd@ zC%lY>c`WUc4amKayDBTI?%MOLeA{$hQa@<{Ej6-_Sdb@KJ!cSRlX>tnc-sx>pJ~-k zEbK?=O{nab{GObu%H|`eeV;`sPOeYxO_FR`_JAsVH>t^YAMfxIPtZvG{HZ!^?-cwB z2iLGW$BPJ0%ciPAccFSjZ>jfrfqK)gsFHY7_8uh6NxHKEZB%Q!q#&29O`bM8{Wdv| z|NNPk-I>fv8mpZ+#)(8P=03@7%8qfu>-Pl-8@f6@kaSj|t*uD-)3j+)kW^Kw?N`nf;w=!j(w=!W*2JzMIrb?64e)V?tf4xXk0;NwwI$LnGB%_5tn<>l)U2$VT#>HKrmF+{K;b1>yMl$a zHmXy*EPEpBl75uDPWx`dzstk2=jP-NnE(8M^8ZUe$j&X?U3g33mATeVf;dY(&d-zO zW^uLBXVq@)Q}7`>(AQOGT2Xd8E3%v?gS|$4nu1$VpCHM1c7Z((&oq2D;1Ic!>oTJX&ak)2ngjv}M zxl?oZ<|^f~Tuq#+m8>lolN6;lihDCB157KZpY&7vt_%!brDoKACpol%((fRrQP!89 z-Ip$L#Wo%-_Ou^0GugwYl{CgyNwegIq(AF;x$iC(k*aA$kCr4inUlsWr2$_zl65^* z)K)!v7F9ob-uzXlIE3r>nqQqRYOU<~$*SUwO{}+5l*ON=M4&^{7qi1G_nEoR)E@iT z-R-lV_4*B2UnsU5qw4K~T2pGxEw~65&Sc>p5qW)1%j=jOSIh2DLG$v$3AtA4$8S@~ z?=HyxHFsk+KY5{GN3B)`&D0*8U+W~c`qN~I6XgG0Fgcm7;`8j>S-F|n>#XTDg?AKo zQGN2X+Rr;v$#eecvq|5A7Ylx_m8l^5T+OvLJJfouU{X?1Z1Sc^v|R2Hl?7kOeV_ZS z@MG2M8`WOvleco6a`WiRd8)h4FBs#L=^<)PC$$=?oO`6!vVx!a^Uh|1mu8pc2B?vG zd*Q#-aJ*QB*V4I%akQkrZ$Zg9__TuM{!el%o)1>naZRn)YmKQ@ot=I{ym}02|B+pn zD__`F<>Pvp1n%vE#-$PRptXPo<|?UH-dr+km*R!!H458l+?k>t+gN-Z|bZlnF( z#r>Z3%3W7@k{awic;1)DZc_48!LC{*3tmkA&SqSZ&ZeiHfXe=ljogvlqDJME+|#)W zvwxHQisW5U%wn^gw#kz)a!T?g`|>Xo##5x-(+kDO51Z4_+uSv|W#n2%*0!sPS(ozA zH>J7s{p8}LL&2PafqcRRqW@T#J5}wj*R%0_-l^>GJbvkJSDq=JjjBGiRkbZECcH^h zT}jmV1}j~`ov{O~ocUOrY`ThqZ$n}mG4>BW?V^%k9rvAt;@6Uu1@j6Hv5c))-#>{9 z4ko?DfX|zgEy`NuYKzBa`dcJ?bQS^JpUFRK~cOT5>HF1J;i z_+Hgx3sovDP)oEPWR6rbcu(@8{O%3eE7^x4u393)7UpVi@oTT=EA*|PvyY3K&oh&~ z$b7sQCf~!KV)LqdN&C*^&&k^&wk~Yb(>&v4Ja}LBC7wm8?7pr%)3@rzU8?5ebecNJ zT(&1oYM377Nl$aS=9A=@uvRtGeXMgEHGQuUi%rWlF_M~vtzoAy8))WTDZL{3rr-iL zY<5Atq^W*iOO7V@rgxalUMHJSpS(wlbcQ5FNfUPedb6@p*~0We+J29kq@!{pRT{ma z@an>0&P?bj_PaEjlI~5;5vM*cKHOPw#A|QCxyg^o1`$gy^Xkiu`UzRdkMfle`^xBd zGsl>~23?e%Ad37XJI%=mQ^k3gsA@UEe6L>i3`;g3`B@#muX%w|YRa}v=CZo8QFb7C z#$2L#_CCC|g59%F(KuUbM!L!z`%aPCZT?0Duu|DL*60rN#0IR-ROpIaTI8vYG1D5y zU$^Gn+w+IDlDm>6JjZ3Ed@#91R;0+!p7b%X;hTW2lBs?EZ)+d*Uk2k~ruPR+O z%3Vbtn~Unl8PTQkD63_D{$~DEA}t58cYF6E-agN2HWk}G0SCAEueRB9V>5&9a$}Xm zfVZ0|#M4w|N$U>Sd5B>gSB-2Uds0FM;~u@8CO>hNxpvgp3W-Ec z^@xnbNcvgBxAo;&H_I{1!;AHJ_% z%ZK-Y@PDFezdX!`@^+tFQJKujFU89N{*F;sc9w{vI9&a&JwZ2GTi zz^)a44PXUp@m{ymqPgat--#vXuyC*Qnxj?O{JU8A820Gd>~6WPE7gphZ!Z1@>lEu$ zqea2D>iKFKbFLV;Gc3$Zs+(y%%w8@K+nmF{yp*r|Ia~DcPWGfbWB*L->3N2Q?MZk4 zC1#Jk+wiYI-|mX?~w?@g|8_2+C^Nw(!pnT-+jqczO;Ld~l(b{CM* z8eZuq=zY)JA)XP7C;6gQM@?C!$}(9e@|3Z{{T6ypF>8B}{#+rKRFe&P5Vc2KdsN0U zs#o?U*Ldb>Q+h3VS7ddY)BC~v#nJ4b97=05gXev|RgdrRGRyGpNm|q-d5(wNBx`XJ zygp(~6>;rx5!X~2F#-a1v%>$7>p6~Hc|l(5OcLM4yNwm)?1F|J$vNV!TiNvg7;{G! z=>&P9=BTI(#dWhu@>KtXk&{I3>)m&}D`&`Hy~%Uj4qG?CZVL!4=8t#a^Bc}aZ%MiZ zVzCXhtqghHEmv?e)C|M-fjIVoteBeBq!D{C-t^sh=^T_?2hUNZqLeuHuaJK^+wvEf zet;fD#gbv}nrsE3B;BbmviMLxv&9@U)C0a>#N0-9ecKM#cgkWNfuM`E@`t>`x7kBvIEa3ibmvp%03GS`81vm@Y5iA5 zQI1Yea_5QZD15A8RO{J?zIlCo89LuhPlEWyxhZm7w~_c&P%xfOL?xiN+3VJ9*wW-9 zR$&hWe8K;3W@&4n>TfEeUYYeL&0BGED@32*UF@uj`V>`UWG*+md|ljg3R<3p-`4!n z2HCI7J#CCRo_KziHn+o(x;*s>upU(tOJDCAoE#so!A|- zoYh&3re6HRO=7_Nq5n!~kH~46t1eCF;>QW{<9m~{lDVp3FHbyqnbpbtVitLAer0!L zc5`l@x#&@{Sd+X$vOUagJK^CVe(kGth1Q?Xj+Ld^%<`%;#m=6NzQI@J26Iro(*?-I?A5{;2Ryr+vJok_@&6bdRX*$_HZRUzYtcPkEPTKfu(vS@< zlX>PZZQ%5U1qJt;K{e(jH?a7PA-oY!I!Vpt7yqAENXHR_A_{MODHfIB+J;O<{NL z@Y+Wcc9U3-vXV#gi$@(9n;kEM=!EQ{r&oj<^mzKu_+_hx6CpI0!eT3{6@>KVmTlFiw| zA5r@-L^sv{5Vo?pHN1D&s(ozjSLPn$dFKPxNebX}OWMn(*Q(kJM<6y2?S^;`*x3cp$|Nn>9pGKqKVBsEP8Ord$E%CSud-zX2w+2L=nEe82 zuj6mjv)#-~oMEnTjmTmUfAAjeE|giQn%h7RZ;;=fk$k5A*VwBP*`4g>bT#2G$D=ps zYdf>_o7v2h`RY4p?)lnz&ZvviE69H(+c{Uv7yCayPdmvVK7-bMqKa6fi7FA#((Hfu zZjapZ8nNbn?fuhiJu`z?oUJ3BH`AzPHk>Z}*}Cef*~4iu?=>rVo%ElBq0-qk>CGa- z$6&i@u5)%>db@bE03Qlj_8i~y651P)?1$vhT10zswuxP7<<%0eW6$*#KK#zKNFDiV z=AhF>Y+dQ&&g2f1f5Rp(OrNDUm9nm==_^jXiXDq{6y7KGCUmHWoOuJB-N?pA#n!c? pI~VU8p!YIsa7FT6bM_<{~v2}Cp`cF literal 0 HcmV?d00001 diff --git a/protocol_prototype/DryBox/wav/input_8k_mono.wav b/protocol_prototype/DryBox/wav/input_8k_mono.wav new file mode 100644 index 0000000000000000000000000000000000000000..f6dffb102fe2d1005940aec7478a62b25cd49567 GIT binary patch literal 72374 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 K0>P)_oDFwn%T(`)t^Kll-0H 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 LCcL`bHTnMs=Kk0U literal 0 HcmV?d00001 diff --git a/protocol_prototype/DryBox/wav/input_original.wav b/protocol_prototype/DryBox/wav/input_original.wav new file mode 100644 index 0000000000000000000000000000000000000000..576bfd8daa2630eb295e298c9f95e1460d3700d3 GIT binary patch literal 805108 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 BzFCv4I*_lgYdVpk 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

VFM_$`4j#s&EI~{$;kG2};Dfw-mTEhl%By;I8 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�>o$;r@8IX$*h58K10ad`kH@tT7DVIsTj< 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

@5ZWSd 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 !`C24fU)z<702; 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 >+v%)c##Z_?m_Q^AH5B`S@*SIYJN14N9wpt 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 LOw~V@{*2)t8Sh+@ literal 0 HcmV?d00001 diff --git a/protocol_prototype/DryBox/wav/received.wav b/protocol_prototype/DryBox/wav/received.wav new file mode 100644 index 0000000000000000000000000000000000000000..2bd6b18b9680468c9ccfc5f73df7634fdb7986cf GIT binary patch literal 402604 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%0AQi)L-vP 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
psmZwrzZo_ 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
vrN(M?xk*lHfn0!t)zh`hwZcYa>mvGo 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 F{{uuwls5nX literal 0 HcmV?d00001 diff --git a/protocol_prototype/DryBox/wav/test_codec_only.wav b/protocol_prototype/DryBox/wav/test_codec_only.wav new file mode 100644 index 0000000000000000000000000000000000000000..b5f4502d8bf59169bbfc3aff8ac7df4cd92a0ebf GIT binary patch literal 684 zcmWIYbaPw6#J~{l80MOmTcRMqz`(!=gbwly3=MV+3``6H3@M2vi48zCqhK@y1~LQy DFKq|K literal 0 HcmV?d00001 diff --git a/protocol_prototype/DryBox/wav/test_full_pipeline.wav b/protocol_prototype/DryBox/wav/test_full_pipeline.wav new file mode 100644 index 0000000000000000000000000000000000000000..b5f4502d8bf59169bbfc3aff8ac7df4cd92a0ebf GIT binary patch literal 684 zcmWIYbaPw6#J~{l80MOmTcRMqz`(!=gbwly3=MV+3``6H3@M2vi48zCqhK@y1~LQy DFKq|K literal 0 HcmV?d00001 diff --git a/protocol_prototype/IcingProtocol.drawio b/protocol_prototype/IcingProtocol.drawio new file mode 100644 index 0000000..a521a38 --- /dev/null +++ b/protocol_prototype/IcingProtocol.drawio @@ -0,0 +1,805 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/protocol_prototype/Prototype/cli.py b/protocol_prototype/Prototype/cli.py new file mode 100644 index 0000000..13d314c --- /dev/null +++ b/protocol_prototype/Prototype/cli.py @@ -0,0 +1,91 @@ +import argparse +import threading +import sys + +from noise_xk.session import NoiseXKSession +from noise_xk.transport import P2PTransport +from dissononce.dh.x25519.public import PublicKey + +def main(): + parser = argparse.ArgumentParser(prog="noise_xk") + parser.add_argument( + "--listen-port", type=int, required=True, + help="Port on which to bind+listen" + ) + parser.add_argument( + "--peer-host", type=str, default="127.0.0.1", + help="Peer host to dial (default: 127.0.0.1)" + ) + parser.add_argument( + "--peer-port", type=int, required=True, + help="Peer port to dial" + ) + args = parser.parse_args() + + # 1. Generate static keypair and print our static public key + kp = NoiseXKSession.generate_keypair() + # kp.public is a PublicKey; .data holds raw bytes + local_priv = kp.private # carried implicitly in NoiseXKSession + local_pub = kp.public + print(f"[My static pubkey:] {local_pub.data.hex()}") + + # 2. Read peer pubkey from user input + peer_pubkey = None + while True: + line = input(">>> ").strip() + if line.startswith("peer_pubkey "): + hexstr = line.split(None, 1)[1] + try: + raw = bytes.fromhex(hexstr) + peer_pubkey = PublicKey(raw) # wrap raw bytes in PublicKey + break + except ValueError: + print("Invalid hex; please retry.") + else: + print("Use: peer_pubkey ") + + # 3. Establish P2P connection (race listen vs. dial) + transport = P2PTransport( + listen_port=args.listen_port, + peer_host=args.peer_host, + peer_port=args.peer_port + ) + print( + f"Racing connect/listen on ports " + f"{args.listen_port} ⇆ {args.peer_host}:{args.peer_port}…" + ) + sock, initiator = transport.connect() + print(f"Connected (initiator={initiator}); performing handshake…") + + # 4. Perform Noise XK handshake + session = NoiseXKSession(kp, peer_pubkey) + session.handshake(sock, initiator) + print("Handshake complete! You can now type messages.") + + # 5. Reader thread for incoming messages + def reader(): + while True: + try: + pt = session.receive(sock) + print(f"\n< {pt.decode()}") + except Exception as e: + print(f"\n[Receive error ({type(e).__name__}): {e!r}]") + break + + thread = threading.Thread(target=reader, daemon=True) + thread.start() + + # 6. Main loop: send user input + try: + for line in sys.stdin: + text = line.rstrip("\n") + if not text: + continue + session.send(sock, text.encode()) + except KeyboardInterrupt: + pass + finally: + sock.close() + +if __name__ == "__main__": + main() diff --git a/protocol_prototype/Prototype/noise_xk/session.py b/protocol_prototype/Prototype/noise_xk/session.py new file mode 100644 index 0000000..83b7ae4 --- /dev/null +++ b/protocol_prototype/Prototype/noise_xk/session.py @@ -0,0 +1,179 @@ +# noise_xk/session.py + +import socket +import logging +from dissononce.processing.impl.handshakestate import HandshakeState +from dissononce.processing.impl.symmetricstate import SymmetricState +from dissononce.processing.impl.cipherstate import CipherState +from dissononce.processing.handshakepatterns.interactive.XK import XKHandshakePattern +from dissononce.cipher.chachapoly import ChaChaPolyCipher +from dissononce.dh.x25519.x25519 import X25519DH +from dissononce.dh.keypair import KeyPair +from dissononce.dh.x25519.public import PublicKey +from dissononce.hash.sha256 import SHA256Hash + +# Configure root logger for debug output +logging.basicConfig(level=logging.DEBUG, format="%(message)s") + +class NoiseXKSession: + @staticmethod + def generate_keypair() -> KeyPair: + """ + Generate a static X25519 KeyPair. + Returns: + KeyPair object with .private and .public attributes. + """ + return X25519DH().generate_keypair() + + def __init__(self, local_kp: KeyPair, peer_pubkey: PublicKey): + """ + Initialize with our KeyPair and the peer's PublicKey. + """ + self.local_kp: KeyPair = local_kp + self.peer_pubkey: PublicKey = peer_pubkey + + # Build the Noise handshake state (X25519 DH, ChaChaPoly cipher, SHA256 hash) + cipher = ChaChaPolyCipher() + dh = X25519DH() + hshash = SHA256Hash() + symmetric = SymmetricState(CipherState(cipher), hshash) + self._hs = HandshakeState(symmetric, dh) + + self._send_cs = None # type: CipherState + self._recv_cs = None + + def handshake(self, sock: socket.socket, initiator: bool) -> None: + """ + Perform the XK handshake over the socket. Branches on initiator/responder + so that each side reads or writes in the correct message order. + On completion, self._send_cs and self._recv_cs hold the two CipherStates. + """ + + logging.debug(f"[handshake] start (initiator={initiator})") + # initialize with our KeyPair and their PublicKey + if initiator: + # initiator knows peer’s static out-of-band + self._hs.initialize( + XKHandshakePattern(), + True, + b'', + s=self.local_kp, + rs=self.peer_pubkey + ) + else: + logging.debug("[handshake] responder initializing without rs") + # responder must NOT supply rs here + self._hs.initialize( + XKHandshakePattern(), + False, + b'', + s=self.local_kp + ) + + cs_pair = None + if initiator: + # 1) -> e + buf1 = bytearray() + cs_pair = self._hs.write_message(b'', buf1) + logging.debug(f"[-> e] {buf1.hex()}") + self._send_all(sock, buf1) + + # 2) <- e, es, s, ss + msg2 = self._recv_all(sock) + logging.debug(f"[<- msg2] {msg2.hex()}") + self._hs.read_message(msg2, bytearray()) + + # 3) -> se (final) + buf3 = bytearray() + cs_pair = self._hs.write_message(b'', buf3) + logging.debug(f"[-> se] {buf3.hex()}") + self._send_all(sock, buf3) + else: + # 1) <- e + msg1 = self._recv_all(sock) + logging.debug(f"[<- e] {msg1.hex()}") + self._hs.read_message(msg1, bytearray()) + + # 2) -> e, es, s, ss + buf2 = bytearray() + cs_pair = self._hs.write_message(b'', buf2) + logging.debug(f"[-> msg2] {buf2.hex()}") + self._send_all(sock, buf2) + + # 3) <- se (final) + msg3 = self._recv_all(sock) + logging.debug(f"[<- se] {msg3.hex()}") + cs_pair = self._hs.read_message(msg3, bytearray()) + + # on the final step, we must get exactly two CipherStates + if not cs_pair or len(cs_pair) != 2: + raise RuntimeError("Handshake did not complete properly") + cs0, cs1 = cs_pair + # the library returns (cs_encrypt_for_initiator, cs_decrypt_for_initiator) + if initiator: + # initiator: cs0 encrypts, cs1 decrypts + self._send_cs, self._recv_cs = cs0, cs1 + else: + # responder must swap + self._send_cs, self._recv_cs = cs1, cs0 + + # dump the raw symmetric keys & nonces (if available) + self._dump_cipherstate("HANDSHAKE→ SEND", self._send_cs) + self._dump_cipherstate("HANDSHAKE→ RECV", self._recv_cs) + + def send(self, sock: socket.socket, plaintext: bytes) -> None: + """ + Encrypt and send a message. + """ + if self._send_cs is None: + raise RuntimeError("Handshake not complete") + ct = self._send_cs.encrypt_with_ad(b'', plaintext) + logging.debug(f"[ENCRYPT] {ct.hex()}") + self._dump_cipherstate("SEND→ after encrypt", self._send_cs) + self._send_all(sock, ct) + + def receive(self, sock: socket.socket) -> bytes: + """ + Receive and decrypt a message. + """ + if self._recv_cs is None: + raise RuntimeError("Handshake not complete") + ct = self._recv_all(sock) + logging.debug(f"[CIPHERTEXT] {ct.hex()}") + self._dump_cipherstate("RECV→ before decrypt", self._recv_cs) + pt = self._recv_cs.decrypt_with_ad(b'', ct) + logging.debug(f"[DECRYPT] {pt!r}") + return pt + + def _send_all(self, sock: socket.socket, data: bytes) -> None: + # Length-prefix (2 bytes big-endian) + data + length = len(data).to_bytes(2, 'big') + sock.sendall(length + data) + + def _recv_all(self, sock: socket.socket) -> bytes: + # Read 2-byte length prefix, then the payload + hdr = self._read_exact(sock, 2) + length = int.from_bytes(hdr, 'big') + return self._read_exact(sock, length) + + @staticmethod + def _read_exact(sock: socket.socket, n: int) -> bytes: + buf = bytearray() + while len(buf) < n: + chunk = sock.recv(n - len(buf)) + if not chunk: + raise ConnectionError("Socket closed during read") + buf.extend(chunk) + return bytes(buf) + + def _dump_cipherstate(self, label: str, cs: CipherState) -> None: + """ + Print the symmetric key (cs._k) and nonce counter (cs._n) for inspection. + """ + key = cs._key + nonce = getattr(cs, "_n", None) + if isinstance(key, (bytes, bytearray)): + key_hex = key.hex() + else: + key_hex = repr(key) + logging.debug(f"[{label}] key={key_hex}") diff --git a/protocol_prototype/Prototype/noise_xk/transport.py b/protocol_prototype/Prototype/noise_xk/transport.py new file mode 100644 index 0000000..d667340 --- /dev/null +++ b/protocol_prototype/Prototype/noise_xk/transport.py @@ -0,0 +1,99 @@ +import socket +import threading +import time + +class P2PTransport: + def __init__(self, listen_port: int, peer_host: str, peer_port: int): + """ + Args: + listen_port: port to bind() and accept() + peer_host: host to dial() + peer_port: port to dial() + """ + self.listen_port = listen_port + self.peer_host = peer_host + self.peer_port = peer_port + + def connect(self) -> (socket.socket, bool): + """ + Race bind+listen vs. dial: + - If dial succeeds first, return (sock, True) # we are initiator + - If accept succeeds first, return (sock, False) # we are responder + """ + server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + server.bind(('0.0.0.0', self.listen_port)) + server.listen(1) + + result = {} + event = threading.Event() + lock = threading.Lock() + + def accept_thread(): + try: + conn, _ = server.accept() + with lock: + if not event.is_set(): + result['sock'] = conn + result['initiator'] = False + event.set() + except Exception: + pass + + def dial_thread(): + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + sock.settimeout(1.0) + while not event.is_set(): + try: + sock.connect((self.peer_host, self.peer_port)) + with lock: + if not event.is_set(): + result['sock'] = sock + result['initiator'] = True + event.set() + return + except (ConnectionRefusedError, socket.timeout): + time.sleep(0.1) + except Exception: + break + + t1 = threading.Thread(target=accept_thread, daemon=True) + t2 = threading.Thread(target=dial_thread, daemon=True) + t1.start() + t2.start() + + event.wait() + sock, initiator = result['sock'], result['initiator'] + # close the listening socket—we’ve got our P2P link + server.close() + # ensure this socket is in blocking mode (no lingering timeouts) + sock.settimeout(None) + return sock, initiator + + def send_packet(self, sock: socket.socket, data: bytes) -> None: + """ + Send a 2-byte big-endian length prefix followed by data. + """ + length = len(data).to_bytes(2, 'big') + sock.sendall(length + data) + + def recv_packet(self, sock: socket.socket) -> bytes: + """ + Receive a 2-byte length prefix, then that many payload bytes. + """ + hdr = self._read_exact(sock, 2) + length = int.from_bytes(hdr, 'big') + return self._read_exact(sock, length) + + @staticmethod + def _read_exact(sock: socket.socket, n: int) -> bytes: + buf = bytearray() + while len(buf) < n: + chunk = sock.recv(n - len(buf)) + if not chunk: + raise ConnectionError("Socket closed during read") + buf.extend(chunk) + return bytes(buf) + + def close(self, sock: socket.socket) -> None: + sock.close() diff --git a/protocol_prototype/requirements.txt b/protocol_prototype/requirements.txt new file mode 100644 index 0000000..14c2100 --- /dev/null +++ b/protocol_prototype/requirements.txt @@ -0,0 +1,7 @@ +# System install +Docker +Python3 + +# Venv install +PyQt5 +dissononce \ No newline at end of file diff --git a/website/.env b/website/.env new file mode 100644 index 0000000..f40fc09 --- /dev/null +++ b/website/.env @@ -0,0 +1 @@ +PROD_URL=icing.gmoker.com diff --git a/website/Dockerfile b/website/Dockerfile new file mode 100644 index 0000000..22f3387 --- /dev/null +++ b/website/Dockerfile @@ -0,0 +1,15 @@ +FROM docker.io/golang:1.23 AS build +WORKDIR /build/ +COPY go.mod go.sum . +RUN go mod download +COPY src/ . +RUN CGO_ENABLED=0 go build -o /app + +FROM scratch +COPY --from=build /app . +COPY html/ html/ +COPY css/ css/ +COPY static/ static/ +COPY tmpl/ tmpl/ +EXPOSE 3000 +CMD ["./app"] diff --git a/website/compose.yaml b/website/compose.yaml new file mode 100644 index 0000000..2660b08 --- /dev/null +++ b/website/compose.yaml @@ -0,0 +1,22 @@ +--- +services: + app: + build: . + ports: + - "3000:3000" + develop: + watch: + - action: rebuild + path: src/ + - action: sync+restart + path: tmpl/ + target: tmpl/ + - action: sync+restart + path: html/ + target: html/ + - action: sync + path: css/ + target: css/ + - action: sync + path: static/ + target: static/ diff --git a/website/css/about.css b/website/css/about.css new file mode 100644 index 0000000..9283733 --- /dev/null +++ b/website/css/about.css @@ -0,0 +1,171 @@ +:root { + --primary-color: #000000; + --background-color: #f5f5f5; + --text-color: #333; + --secondary-text-color: #777; +} + +.content { + margin: 20px auto; + max-width: 900px; + padding: 40px; + background-color: var(--background-color); + color: var(--text-color); + border-radius: 8px; + font-family: 'Open Sans', Arial, sans-serif; + position: relative; + overflow: hidden; +} + +.title { + font-size: 2.5em; + color: var(--primary-color); + margin-bottom: 30px; + text-align: center; + animation: fadeInDown 1s ease; +} + +.section-title { + font-size: 1.8em; + color: var(--primary-color); + margin-top: 40px; + margin-bottom: 20px; + position: relative; + animation: fadeInLeft 1s ease; +} + +.section-title::after { + content: ''; + width: 50px; + height: 3px; + background-color: var(--primary-color); + position: absolute; + bottom: -10px; + left: 0; +} + +p, li { + line-height: 1.6; + font-size: 1.1em; + animation: fadeIn 1s ease; +} + +ul { + margin-left: 20px; + list-style-type: disc; +} + +.features ul li { + margin-bottom: 10px; +} + +.team-list { + list-style-type: none; + padding: 0; +} + +.team-list li { + margin-bottom: 8px; + font-weight: bold; + color: var(--text-color); +} + +.back-link-container { + text-align: center; + margin-top: 40px; + animation: fadeInUp 1s ease; +} + +.back-link { + text-decoration: none; + color: var(--primary-color); + font-weight: bold; + border: 2px solid var(--primary-color); + padding: 10px 20px; + border-radius: 5px; + transition: background-color 0.3s, color 0.3s; +} + +.back-link:hover { + background-color: var(--primary-color); + color: #fff; +} + +@keyframes fadeInDown { + from { + opacity: 0; + transform: translateY(-20px); + } to { + opacity: 1; + transform: translateY(0); + } +} + +@keyframes fadeInLeft { + from { + opacity: 0; + transform: translateX(-20px); + } to { + opacity: 1; + transform: translateX(0); + } +} + +@keyframes fadeInUp { + from { + opacity: 0; + transform: translateY(20px); + } to { + opacity: 1; + transform: translateY(0); + } +} + +@keyframes fadeIn { + from { + opacity: 0; + } to { + opacity: 1; + } +} + +@media (max-width: 768px) { + .content { + padding: 20px; + } + + .title { + font-size: 2em; + } + + .section-title { + font-size: 1.5em; + } + + p, li { + font-size: 1em; + } +} + +@media (max-width: 480px) { + .content { + padding: 15px; + } + + .title { + font-size: 1.8em; + } + + .section-title { + font-size: 1.2em; + } + + p, li { + font-size: 0.9em; + } +} + +a { + color: var(--primary-color); + text-decoration: none; +} diff --git a/website/css/index.css b/website/css/index.css new file mode 100644 index 0000000..de47602 --- /dev/null +++ b/website/css/index.css @@ -0,0 +1,16 @@ +body { + margin: 0; +} + +div { + position: absolute; + height: 100%; + width: 100%; +} + +.title { + display: flex; + align-items: center; + justify-content: center; + font-size: 3em; +} diff --git a/website/css/style.css b/website/css/style.css new file mode 100644 index 0000000..bda2311 --- /dev/null +++ b/website/css/style.css @@ -0,0 +1,4 @@ +a.nostyle { + color: inherit; + cursor: pointer; +} diff --git a/website/go.mod b/website/go.mod new file mode 100644 index 0000000..3a3a5a6 --- /dev/null +++ b/website/go.mod @@ -0,0 +1,3 @@ +module main + +go 1.23.3 diff --git a/website/go.sum b/website/go.sum new file mode 100644 index 0000000..e69de29 diff --git a/website/html/about.html b/website/html/about.html new file mode 100644 index 0000000..f03797f --- /dev/null +++ b/website/html/about.html @@ -0,0 +1,63 @@ + + + + {{template "head.tmpl". }} + + +

+ + diff --git a/website/html/index.html b/website/html/index.html new file mode 100644 index 0000000..7e79f0a --- /dev/null +++ b/website/html/index.html @@ -0,0 +1,13 @@ + + + + {{template "head.tmpl" .}} + + + +
+

ICING

+
+
+ + diff --git a/website/manifests/bin/deploy.sh b/website/manifests/bin/deploy.sh new file mode 100755 index 0000000..2cc0c9e --- /dev/null +++ b/website/manifests/bin/deploy.sh @@ -0,0 +1,39 @@ +#!/bin/bash -e +set -o pipefail + +function kapply() { + for f in "$@"; do + kubectl apply -f <(envsubst < "manifests/$f") + done +}; export -f kapply + +function kcreatesec() { + kubectl create secret generic --dry-run=client -oyaml "$@" | kubectl replace -f- +}; export -f kcreatesec + +function kcreatecm() { + kubectl create configmap --dry-run=client -oyaml "$@" | kubectl replace -f- +}; export -f kcreatecm + +function kgseckey() { + local sec="$1"; shift + local key="$1"; shift + + if ! kubectl get secret "$sec" -ojson | jq -re ".data.\"$key\" // empty" | base64 -d; then + return 1 + fi +}; export -f kgseckey + +function kgcmkey() { + local cm="$1"; shift + local key="$1"; shift + + if ! kubectl get configmap "$cm" -ojson | jq -re ".data.\"$key\" // empty"; then + return 1 + fi +}; export -f kgcmkey + + +kapply common/app.yaml + +kubectl rollout restart deployment app diff --git a/website/manifests/bin/devel.sh b/website/manifests/bin/devel.sh new file mode 100755 index 0000000..65675aa --- /dev/null +++ b/website/manifests/bin/devel.sh @@ -0,0 +1,6 @@ +#!/bin/bash -e +set -o pipefail + +export NB_REPLICAS=1 + +. ./manifests/bin/deploy.sh diff --git a/website/manifests/bin/prod.sh b/website/manifests/bin/prod.sh new file mode 100755 index 0000000..b7b5f83 --- /dev/null +++ b/website/manifests/bin/prod.sh @@ -0,0 +1,6 @@ +#!/bin/bash -e +set -o pipefail + +export NB_REPLICAS=3 + +. ./manifests/bin/deploy.sh diff --git a/website/manifests/common/app.yaml b/website/manifests/common/app.yaml new file mode 100644 index 0000000..190b834 --- /dev/null +++ b/website/manifests/common/app.yaml @@ -0,0 +1,64 @@ +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: app + annotations: + cert-manager.io/cluster-issuer: letsencrypt-prod +spec: + ingressClassName: nginx + tls: + - secretName: tls-app + hosts: + - "$BASE_URL" + rules: + - host: "$BASE_URL" + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: app + port: + name: http +--- +apiVersion: v1 +kind: Service +metadata: + name: app + labels: + app: app +spec: + selector: + app: app + ports: + - name: http + port: 80 + targetPort: http +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: app + labels: + app: app +spec: + replicas: $NB_REPLICAS + selector: + matchLabels: + app: app + template: + metadata: + labels: + app: app + spec: + imagePullSecrets: + - name: regcred + containers: + - name: app + image: "$IMAGEAPP" + imagePullPolicy: Always + ports: + - name: http + containerPort: 3000 diff --git a/website/manifests/devel/.gitkeep b/website/manifests/devel/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/website/manifests/prod/.gitkeep b/website/manifests/prod/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/website/open.sh b/website/open.sh new file mode 100755 index 0000000..743e671 --- /dev/null +++ b/website/open.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +branch="$(git describe --contains --all HEAD)" + +xdg-open "https://$branch.monorepo.icing.k8s.gmoker.com" diff --git a/website/src/main.go b/website/src/main.go new file mode 100644 index 0000000..823c600 --- /dev/null +++ b/website/src/main.go @@ -0,0 +1,14 @@ +package main + +import ( + "log" + "net/http" +) + +func main() { + http.HandleFunc("/", route) + generateTmpl() + if err := http.ListenAndServe(":3000", nil); err != nil { + log.Fatal(err) + } +} diff --git a/website/src/route.go b/website/src/route.go new file mode 100644 index 0000000..3c9abe9 --- /dev/null +++ b/website/src/route.go @@ -0,0 +1,51 @@ +package main + +import ( + "context" + "fmt" + "net/http" + "regexp" + "slices" +) + +type URLParam struct{} + +var routes = []struct { + methods []string + regex *regexp.Regexp + handler http.HandlerFunc +}{ + {[]string{"GET"}, url(""), index}, + {[]string{"GET"}, url("/static/.+"), static}, + {[]string{"GET"}, url("/(.+\\.css)"), css}, + {[]string{"GET"}, url("/([^/]+)"), html}, +} + +func url(s string) *regexp.Regexp { + return regexp.MustCompile("^" + s + "/?$") +} + +func getParam(r *http.Request, i int) string { + return r.Context().Value(URLParam{}).([]string)[i] +} + +func route(w http.ResponseWriter, r *http.Request) { + for _, rt := range routes { + matches := rt.regex.FindStringSubmatch(r.URL.Path) + if len(matches) > 0 { + if !slices.Contains(rt.methods, r.Method) { + w.Header().Set("Allow", r.Method) + http.Error( + w, "405 method not allowed", http.StatusMethodNotAllowed, + ) + return + } + fmt.Println(r.Method, r.URL.Path) + rt.handler(w, r.WithContext( + context.WithValue(r.Context(), URLParam{}, matches[1:]), + )) + return + } + } + http.NotFound(w, r) +} diff --git a/website/src/tmpl.go b/website/src/tmpl.go new file mode 100644 index 0000000..56de3e7 --- /dev/null +++ b/website/src/tmpl.go @@ -0,0 +1,31 @@ +package main + +import ( + "bytes" + "html/template" + "path/filepath" + "regexp" +) + +var TMPL map[string][]byte + +func generateTmpl() { + files, _ := filepath.Glob("html/*.html") + re := regexp.MustCompile("html/(.+).html") + pages := make([]string, len(files)) + + for i, f := range files { + pages[i] = re.FindStringSubmatch(f)[1] + } + TMPL = make(map[string][]byte, len(files)) + for i, f := range files { + b := new(bytes.Buffer) + t, _ := template.ParseFiles(f) + t.ParseGlob("tmpl/*.tmpl") + t.Execute(b, map[string]any{ + "page": pages[i], + "pages": pages, + }) + TMPL[pages[i]] = b.Bytes() + } +} diff --git a/website/src/views.go b/website/src/views.go new file mode 100644 index 0000000..a10c2bc --- /dev/null +++ b/website/src/views.go @@ -0,0 +1,29 @@ +package main + +import ( + "context" + "net/http" + "path/filepath" +) + +func index(w http.ResponseWriter, r *http.Request) { + html(w, r.WithContext( + context.WithValue(r.Context(), URLParam{}, []string{"index"}), + )) +} + +func static(w http.ResponseWriter, r *http.Request) { + http.ServeFile(w, r, r.URL.Path) +} + +func css(w http.ResponseWriter, r *http.Request) { + http.ServeFile(w, r, filepath.Join("css", getParam(r, 0))) +} + +func html(w http.ResponseWriter, r *http.Request) { + if t, found := TMPL[getParam(r, 0)]; found { + w.Write(t) + } else { + http.NotFound(w, r) + } +} diff --git a/website/static/logo.webp b/website/static/logo.webp new file mode 100644 index 0000000000000000000000000000000000000000..dfe8f0cd05441b6ca763248a355c1dc719c85dd6 GIT binary patch literal 1246 zcmV<41R?uUNk&H21ONb6MM6+kP&gpU1ONc=7yz9CDr5j;06uLnl}Mx_q9G+#3BZ62 ziD>}QhPr=^{d&*?_^;O=ynaq{PwAV;kNMBZ{I}nr|De)8|69flg2C zL(TW*Kjc5@dxL)}{ntOQ#^*g{$MS#uC!?)2$vQW;J!Y^;fH$5@>a9(kJLf_mB_sEPTLC5>rL=3c z-$DuG{!Jf~t?K)(pud6RX5hNJ#&!Q$VokbwpMrP{;P9lC6)!Qt&ICB%@yOq{-umcd zXPNl>GWqBJvQ?H0?`_$LlAA)N4e-FCOhMmo-{%$Sz5Z@mv&_e!5Q7?&_^PWNmYqS~j@mEx3oUSL0B9v@}XuO-- zRlWeL`90D+1M{ni;TI3a1Oft~EXT30cgyds$2Wbx@XV2jsqGZxf83e9KqQ4#utcL( zyLuL4!P(Wd=Bsi=k2-J&$U{};7R$)lO< zGSzgij*DOAX4)=hAvtN&bN_(;vGS%_oTQ_7cWY1H$s_%8%TyHT2Luo&MT9j_18rK@ z{6I9yGmbMFVddB+yyZVz5qH^-O$e_R%n}~;gQ-B*C;yFHTrIK=wA*ui(eM-P{TN!k zN~sgS-G7p?-n))W7JSkudJDa7a=n$&QpLTN)-DCxsrG<>)d2-`<@y_m)@90RVKBM? zxc1w{{inMDW!cuqtf%Qs7S~X6M(T`N zmDq%dn8a+gct&r?hn^Qv8&6u>H~aoM(B@2@HvLS~HkugdrV!7dt`PqNw%`ghC*a59 z;IoNA2l9{}#+&T;>QB$d5B2uCL_U(gYj4xp%}9sKfda~_FCQ`J#3I?5J!9?R>|C85 zm8QoIcing + + diff --git a/website/tmpl/vars.tmpl b/website/tmpl/vars.tmpl new file mode 100644 index 0000000..5cca768 --- /dev/null +++ b/website/tmpl/vars.tmpl @@ -0,0 +1,15 @@ +{{define "alexis"}} +Alexis DANLOS +{{end}} + +{{define "bartosz"}} +Bartosz MICHALAK +{{end}} + +{{define "florian"}} +Florian GRIFFON +{{end}} + +{{define ""}} + +{{end}}