diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index b5fd30a..ce80bef 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -2,6 +2,12 @@
+
+
+
+
+ to be uploaded - handled by MainActivity.kt directly, not a
+ plugin (see its doc comment for why). -->
@@ -43,6 +50,10 @@
+
+ when (call.method) {
+ "getInitialShare" -> result.success(extractShareMetadata(intent))
+ else -> result.notImplemented()
+ }
+ }
+
+ EventChannel(flutterEngine.dartExecutor.binaryMessenger, newShareChannelName)
+ .setStreamHandler(object : EventChannel.StreamHandler {
+ override fun onListen(arguments: Any?, events: EventChannel.EventSink) {
+ newShareSink = events
+ }
+ override fun onCancel(arguments: Any?) {
+ newShareSink = null
+ }
+ })
+
+ MethodChannel(flutterEngine.dartExecutor.binaryMessenger, uploadServiceChannelName)
+ .setMethodCallHandler { call, result ->
+ when (call.method) {
+ "startUpload" -> {
+ startUploadService(call, result)
+ }
+ else -> result.notImplemented()
+ }
+ }
+ }
+
+ override fun onNewIntent(intent: Intent) {
+ super.onNewIntent(intent)
+ setIntent(intent)
+ val shared = extractShareMetadata(intent)
+ if (shared.isNotEmpty()) {
+ mainHandler.post { newShareSink?.success(shared) }
+ }
+ }
+
+ /// Cheap Uri metadata only (display name / size / mime type) via a
+ /// single ContentResolver query - never reads the file's actual bytes,
+ /// so this is fast regardless of how large the shared file is.
+ private fun extractShareMetadata(intent: Intent): List