From a3d3de0c0da9fee7b9aac2bd9a5cf0188fb3073b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=9Cmit=20Tun=C3=A7?= Date: Wed, 29 Apr 2026 22:33:02 +0300 Subject: [PATCH] feat: implement mobile UI, Android build configuration, and share intent handling using share_handler --- android/app/build.gradle.kts | 6 +-- android/app/src/main/AndroidManifest.xml | 10 +++++ android/build.gradle.kts | 22 ++++++---- .../providers/share_handler_provider.dart | 31 ++++++++++++++ .../screens/mobile_sender_screen.dart | 9 +++++ pubspec.lock | 40 +++++++++++++++---- pubspec.yaml | 2 +- 7 files changed, 100 insertions(+), 20 deletions(-) create mode 100644 lib/features/sender/presentation/providers/share_handler_provider.dart diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index 8fbbeb5..89869f1 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -11,12 +11,12 @@ android { ndkVersion = flutter.ndkVersion compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 } kotlinOptions { - jvmTarget = "1.8" + jvmTarget = "17" } diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 03c8219..7f0e0f3 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -24,6 +24,16 @@ + + + + + + + + + + diff --git a/android/build.gradle.kts b/android/build.gradle.kts index 1bf24c7..d0547d4 100644 --- a/android/build.gradle.kts +++ b/android/build.gradle.kts @@ -18,15 +18,21 @@ subprojects { project.layout.buildDirectory.value(newSubprojectBuildDir) } - // Java ve Kotlin'i 1.8'e zorla - tasks.withType().configureEach { - sourceCompatibility = "1.8" - targetCompatibility = "1.8" - } + // Java ve Kotlin'i 17'ye zorla + afterEvaluate { + if (project.hasProperty("android")) { + configure { + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + } + } - tasks.withType().configureEach { - compilerOptions { - jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_1_8) + tasks.withType().configureEach { + compilerOptions { + jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17) + } } } } diff --git a/lib/features/sender/presentation/providers/share_handler_provider.dart b/lib/features/sender/presentation/providers/share_handler_provider.dart new file mode 100644 index 0000000..3773a57 --- /dev/null +++ b/lib/features/sender/presentation/providers/share_handler_provider.dart @@ -0,0 +1,31 @@ +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:share_handler/share_handler.dart'; +import 'sender_providers.dart'; + +final shareHandlerProvider = Provider((ref) { + final handler = ShareHandler.instance; + + // Listen for background shares + handler.sharedMediaStream.listen((SharedMedia media) { + _handleMedia(media, ref); + }); + + // Check for initial share (app opened via share) + handler.getInitialSharedMedia().then((media) { + if (media != null) { + _handleMedia(media, ref); + } + }); + + return; +}); + +void _handleMedia(SharedMedia media, Ref ref) { + final content = media.content; + if (content != null && content.isNotEmpty) { + // If it's a URL or contains a URL, send it + if (content.startsWith('http')) { + ref.read(senderProvider.notifier).sendLink(content); + } + } +} diff --git a/lib/features/sender/presentation/screens/mobile_sender_screen.dart b/lib/features/sender/presentation/screens/mobile_sender_screen.dart index 34447a1..3913676 100644 --- a/lib/features/sender/presentation/screens/mobile_sender_screen.dart +++ b/lib/features/sender/presentation/screens/mobile_sender_screen.dart @@ -3,6 +3,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../../../core/theme/app_colors.dart'; import '../../../discovery/presentation/providers/discovery_providers.dart'; import '../providers/sender_providers.dart'; +import '../providers/share_handler_provider.dart'; class MobileSenderScreen extends ConsumerStatefulWidget { const MobileSenderScreen({super.key}); @@ -14,6 +15,11 @@ class MobileSenderScreen extends ConsumerStatefulWidget { class _MobileSenderScreenState extends ConsumerState { final _urlController = TextEditingController(); + @override + void initState() { + super.initState(); + } + @override void dispose() { _urlController.dispose(); @@ -22,6 +28,9 @@ class _MobileSenderScreenState extends ConsumerState { @override Widget build(BuildContext context) { + // Initialize share handler + ref.watch(shareHandlerProvider); + final devicesAsync = ref.watch(discoveredDevicesProvider); final senderState = ref.watch(senderProvider); diff --git a/pubspec.lock b/pubspec.lock index 9602f27..9cedd1b 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -744,14 +744,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.2.0" - receive_sharing_intent: - dependency: "direct main" - description: - name: receive_sharing_intent - sha256: ec76056e4d258ad708e76d85591d933678625318e411564dcb9059048ca3a593 - url: "https://pub.dev" - source: hosted - version: "1.8.1" record_use: dependency: transitive description: @@ -776,6 +768,38 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.3" + share_handler: + dependency: "direct main" + description: + name: share_handler + sha256: "0a6d007f0e44fbee27164adcd159ecbc88238864313f4e5c58161cae2180328d" + url: "https://pub.dev" + source: hosted + version: "0.0.25" + share_handler_android: + dependency: transitive + description: + name: share_handler_android + sha256: caf555b933dc72783aa37fef75688c7b86bd6f7bc17d80fbf585bc42f123cc8d + url: "https://pub.dev" + source: hosted + version: "0.0.11" + share_handler_ios: + dependency: transitive + description: + name: share_handler_ios + sha256: cdc21f88f336a944157a8e9ceb191525cee3b082d6eb6c2082488e4f09dc3ece + url: "https://pub.dev" + source: hosted + version: "0.0.15" + share_handler_platform_interface: + dependency: transitive + description: + name: share_handler_platform_interface + sha256: "7a4df95a87b326b2f07458d937f2281874567c364b7b7ebe4e7d50efaae5f106" + url: "https://pub.dev" + source: hosted + version: "0.0.6" shared_preferences: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 50e007b..cfdd9f0 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -39,13 +39,13 @@ dependencies: media_kit: ^1.2.6 media_kit_video: ^2.0.1 media_kit_libs_video: ^1.0.7 - receive_sharing_intent: ^1.8.1 flutter_inappwebview: ^6.1.5 shared_preferences: ^2.5.5 google_fonts: ^8.1.0 flutter_svg: ^2.2.4 path_provider: ^2.1.5 dio: ^5.9.2 + share_handler: ^0.0.25 dev_dependencies: flutter_test: