[android_intent] Bump to Flutter stable, remove deprecation warnings (#2586)

* Bumps Flutter & Dart dependencies to stable
* Uses spread operator to concisely build arguments
* Refactors and cleans up the plugin a bit
diff --git a/packages/android_intent/CHANGELOG.md b/packages/android_intent/CHANGELOG.md
index 47f1917..6160ba5 100644
--- a/packages/android_intent/CHANGELOG.md
+++ b/packages/android_intent/CHANGELOG.md
@@ -1,3 +1,11 @@
+## 0.3.6+1
+
+* Bump the minimum Flutter version to 1.12.13+hotfix.5.
+* Bump the minimum Dart version to 2.3.0.
+* Uses Darts spread operator to build plugin arguments internally.
+* Remove deprecated API usage warning in AndroidIntentPlugin.java.
+* Migrates the Android example to V2 embedding.
+
 ## 0.3.6
 
 * Marks the `action` parameter as optional
diff --git a/packages/android_intent/android/build.gradle b/packages/android_intent/android/build.gradle
index 008b49f..d261dac 100644
--- a/packages/android_intent/android/build.gradle
+++ b/packages/android_intent/android/build.gradle
@@ -43,29 +43,3 @@
     testImplementation 'androidx.test:core:1.0.0'
     testImplementation 'org.robolectric:robolectric:4.3'
 }
-
-// TODO(mklim): Remove this hack once androidx.lifecycle is included on stable. https://github.com/flutter/flutter/issues/42348
-afterEvaluate {
-    def containsEmbeddingDependencies = false
-    for (def configuration : configurations.all) {
-        for (def dependency : configuration.dependencies) {
-            if (dependency.group == 'io.flutter' &&
-                dependency.name.startsWith('flutter_embedding') &&
-                dependency.isTransitive())
-            {
-                containsEmbeddingDependencies = true
-                break
-            }
-        }
-    }
-    if (!containsEmbeddingDependencies) {
-        android {
-            dependencies {
-                def lifecycle_version = "1.1.1"
-                compileOnly "android.arch.lifecycle:runtime:$lifecycle_version"
-                compileOnly "android.arch.lifecycle:common:$lifecycle_version"
-                compileOnly "android.arch.lifecycle:common-java8:$lifecycle_version"
-            }
-        }
-    }
-}
diff --git a/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/AndroidIntentPlugin.java b/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/AndroidIntentPlugin.java
index 10c8079..2f35dfc 100644
--- a/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/AndroidIntentPlugin.java
+++ b/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/AndroidIntentPlugin.java
@@ -42,7 +42,7 @@
   public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) {
     sender.setApplicationContext(binding.getApplicationContext());
     sender.setActivity(null);
-    impl.startListening(binding.getFlutterEngine().getDartExecutor());
+    impl.startListening(binding.getBinaryMessenger());
   }
 
   @Override
diff --git a/packages/android_intent/example/android/app/src/main/AndroidManifest.xml b/packages/android_intent/example/android/app/src/main/AndroidManifest.xml
index 7d6fcd4..761c35f 100644
--- a/packages/android_intent/example/android/app/src/main/AndroidManifest.xml
+++ b/packages/android_intent/example/android/app/src/main/AndroidManifest.xml
@@ -11,25 +11,27 @@
     android:label="android_intent_example"
     android:name="io.flutter.app.FlutterApplication">
     <activity
-      android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection"
-      android:exported="true"
-      android:hardwareAccelerated="true"
-      android:launchMode="singleTop"
+      android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale"
       android:name=".EmbeddingV1Activity"
       android:theme="@android:style/Theme.Black.NoTitleBar"
-      android:windowSoftInputMode="adjustResize"/>
-    <activity
-      android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection"
       android:hardwareAccelerated="true"
-      android:launchMode="singleTop"
-      android:name=".MainActivity"
-      android:theme="@android:style/Theme.Black.NoTitleBar"
       android:windowSoftInputMode="adjustResize">
+    </activity>
+
+    <activity android:name="io.flutter.embedding.android.FlutterActivity"
+      android:theme="@android:style/Theme.Black.NoTitleBar"
+      android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale"
+      android:hardwareAccelerated="true"
+      android:windowSoftInputMode="adjustResize">
+      <meta-data
+        android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
+        android:value="true" />
       <intent-filter>
         <action android:name="android.intent.action.MAIN"/>
         <category android:name="android.intent.category.LAUNCHER"/>
       </intent-filter>
     </activity>
+    <meta-data android:name="flutterEmbedding" android:value="2"/>
   </application>
   <uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>
 
diff --git a/packages/android_intent/example/android/app/src/main/java/io/flutter/plugins/androidintentexample/EmbeddingV1Activity.java b/packages/android_intent/example/android/app/src/main/java/io/flutter/plugins/androidintentexample/EmbeddingV1Activity.java
index 95dc41a..1bbe89a 100644
--- a/packages/android_intent/example/android/app/src/main/java/io/flutter/plugins/androidintentexample/EmbeddingV1Activity.java
+++ b/packages/android_intent/example/android/app/src/main/java/io/flutter/plugins/androidintentexample/EmbeddingV1Activity.java
@@ -6,12 +6,13 @@
 
 import android.os.Bundle;
 import io.flutter.app.FlutterActivity;
-import io.flutter.plugins.GeneratedPluginRegistrant;
+import io.flutter.plugins.androidintent.AndroidIntentPlugin;
 
 public class EmbeddingV1Activity extends FlutterActivity {
   @Override
   protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
-    GeneratedPluginRegistrant.registerWith(this);
+    AndroidIntentPlugin.registerWith(
+        registrarFor("io.flutter.plugins.androidintent.AndroidIntentPlugin"));
   }
 }
diff --git a/packages/android_intent/example/android/app/src/main/java/io/flutter/plugins/androidintentexample/MainActivity.java b/packages/android_intent/example/android/app/src/main/java/io/flutter/plugins/androidintentexample/MainActivity.java
deleted file mode 100644
index 56e0bab..0000000
--- a/packages/android_intent/example/android/app/src/main/java/io/flutter/plugins/androidintentexample/MainActivity.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package io.flutter.plugins.androidintentexample;
-
-import io.flutter.embedding.android.FlutterActivity;
-import io.flutter.embedding.engine.FlutterEngine;
-import io.flutter.plugins.androidintent.AndroidIntentPlugin;
-
-public class MainActivity extends FlutterActivity {
-  @Override
-  public void configureFlutterEngine(FlutterEngine flutterEngine) {
-    flutterEngine.getPlugins().add(new AndroidIntentPlugin());
-  }
-}
diff --git a/packages/android_intent/example/pubspec.yaml b/packages/android_intent/example/pubspec.yaml
index 4418e9f..22ff833 100644
--- a/packages/android_intent/example/pubspec.yaml
+++ b/packages/android_intent/example/pubspec.yaml
@@ -16,6 +16,3 @@
 # The following section is specific to Flutter.
 flutter:
   uses-material-design: true
-
-environment:
-  flutter: ">=1.9.1+hotfix.2 <2.0.0"
\ No newline at end of file
diff --git a/packages/android_intent/lib/android_intent.dart b/packages/android_intent/lib/android_intent.dart
index 26e270a..ff95299 100644
--- a/packages/android_intent/lib/android_intent.dart
+++ b/packages/android_intent/lib/android_intent.dart
@@ -134,31 +134,23 @@
     if (!_platform.isAndroid) {
       return;
     }
-    final Map<String, dynamic> args = <String, dynamic>{};
-    if (action != null) {
-      args['action'] = action;
-    }
-    if (flags != null) {
-      args['flags'] = convertFlags(flags);
-    }
-    if (category != null) {
-      args['category'] = category;
-    }
-    if (data != null) {
-      args['data'] = data;
-    }
-    if (arguments != null) {
-      args['arguments'] = arguments;
-    }
-    if (package != null) {
-      args['package'] = package;
-      if (componentName != null) {
-        args['componentName'] = componentName;
-      }
-    }
-    if (type != null) {
-      args['type'] = type;
-    }
-    await _channel.invokeMethod<void>('launch', args);
+
+    await _channel.invokeMethod<void>('launch', _buildArguments());
+  }
+
+  /// Constructs the map of arguments which is passed to the plugin.
+  Map<String, dynamic> _buildArguments() {
+    return {
+      if (action != null) 'action': action,
+      if (flags != null) 'flags': convertFlags(flags),
+      if (category != null) 'category': category,
+      if (data != null) 'data': data,
+      if (arguments != null) 'arguments': arguments,
+      if (package != null) ...{
+        'package': package,
+        if (componentName != null) 'componentName': componentName,
+      },
+      if (type != null) 'type': type,
+    };
   }
 }
diff --git a/packages/android_intent/pubspec.yaml b/packages/android_intent/pubspec.yaml
index 2faf45e..82f6e18 100644
--- a/packages/android_intent/pubspec.yaml
+++ b/packages/android_intent/pubspec.yaml
@@ -1,7 +1,7 @@
 name: android_intent
 description: Flutter plugin for launching Android Intents. Not supported on iOS.
 homepage: https://github.com/flutter/plugins/tree/master/packages/android_intent
-version: 0.3.6
+version: 0.3.6+1
 
 flutter:
   plugin:
@@ -23,5 +23,5 @@
   pedantic: ^1.8.0
 
 environment:
-  sdk: ">=2.0.0-dev.28.0 <3.0.0"
-  flutter: ">=1.10.0 <2.0.0"
+  sdk: ">=2.3.0 <3.0.0"
+  flutter: ">=1.12.13+hotfix.5 <2.0.0"
\ No newline at end of file