From c4d173c1ca077d995c06dc1973893f5c94bc5bbf Mon Sep 17 00:00:00 2001 From: Hamdi Kahloun Date: Thu, 17 Sep 2020 13:47:07 +0100 Subject: [PATCH 01/12] androidintent --- packages/android_intent/CHANGELOG.md | 4 + packages/android_intent/android/build.gradle | 5 ++ .../androidintent/MethodCallHandlerImpl.java | 85 +++++++++++++------ packages/android_intent/pubspec.yaml | 2 +- 4 files changed, 67 insertions(+), 29 deletions(-) diff --git a/packages/android_intent/CHANGELOG.md b/packages/android_intent/CHANGELOG.md index f06652e71931..7ee03cf3cc91 100644 --- a/packages/android_intent/CHANGELOG.md +++ b/packages/android_intent/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.3.7+4 + +* Android Code Inspection and Clean up. + ## 0.3.7+3 * Update the `platform` package dependency to resolve the conflict with the latest flutter. diff --git a/packages/android_intent/android/build.gradle b/packages/android_intent/android/build.gradle index d261dac7df1c..5d0f1cae7159 100644 --- a/packages/android_intent/android/build.gradle +++ b/packages/android_intent/android/build.gradle @@ -1,5 +1,6 @@ group 'io.flutter.plugins.androidintent' version '1.0-SNAPSHOT' +def args = ["-Xlint:deprecation","-Xlint:unchecked","-Werror"] buildscript { repositories { @@ -19,6 +20,10 @@ rootProject.allprojects { } } +project.getTasks().withType(JavaCompile){ + options.compilerArgs.addAll(args) +} + apply plugin: 'com.android.library' android { diff --git a/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/MethodCallHandlerImpl.java b/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/MethodCallHandlerImpl.java index a47f7a162b78..23fedd4d2589 100644 --- a/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/MethodCallHandlerImpl.java +++ b/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/MethodCallHandlerImpl.java @@ -15,6 +15,7 @@ import io.flutter.plugin.common.MethodChannel.MethodCallHandler; import io.flutter.plugin.common.MethodChannel.Result; import java.util.ArrayList; +import java.util.HashMap; import java.util.Map; /** Forwards incoming {@link MethodCall}s to {@link IntentSender#send}. */ @@ -75,19 +76,22 @@ public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) { String action = convertAction((String) call.argument("action")); Integer flags = call.argument("flags"); String category = call.argument("category"); - Uri data = call.argument("data") != null ? Uri.parse((String) call.argument("data")) : null; - Bundle arguments = convertArguments((Map) call.argument("arguments")); + String stringData = call.argument("data"); + Uri data = call.argument("data") != null ? Uri.parse(stringData) : null; + Map stringMap = call.argument("arguments"); + Bundle arguments = convertArguments(stringMap); String packageName = call.argument("package"); + String component = call.argument("componentName"); ComponentName componentName = - (!TextUtils.isEmpty(packageName) - && !TextUtils.isEmpty((String) call.argument("componentName"))) - ? new ComponentName(packageName, (String) call.argument("componentName")) - : null; + (packageName != null && component != null && !TextUtils.isEmpty(packageName) + && !TextUtils.isEmpty(component)) + ? new ComponentName(packageName, component) + : null; String type = call.argument("type"); Intent intent = - sender.buildIntent( - action, flags, category, data, arguments, packageName, componentName, type); + sender.buildIntent( + action, flags, category, data, arguments, packageName, componentName, type); if ("launch".equalsIgnoreCase(call.method)) { sender.send(intent); @@ -146,12 +150,12 @@ private static Bundle convertArguments(Map arguments) { bundle.putLongArray(key, (long[]) value); } else if (value instanceof double[]) { bundle.putDoubleArray(key, (double[]) value); - } else if (isTypedArrayList(value, Integer.class)) { - bundle.putIntegerArrayList(key, (ArrayList) value); - } else if (isTypedArrayList(value, String.class)) { - bundle.putStringArrayList(key, (ArrayList) value); - } else if (isStringKeyedMap(value)) { - bundle.putBundle(key, convertArguments((Map) value)); + } else if (integers(value) != null) { + bundle.putIntegerArrayList(key, integers(value)); + } else if (strings(value) != null) { + bundle.putStringArrayList(key, strings(value)); + } else if (map(value) != null) { + bundle.putBundle(key, convertArguments((map(value)))); } else { throw new UnsupportedOperationException("Unsupported type " + value); } @@ -159,29 +163,54 @@ private static Bundle convertArguments(Map arguments) { return bundle; } - private static boolean isTypedArrayList(Object value, Class type) { + private static ArrayList integers(Object value){ + ArrayList integerArrayList = new ArrayList<>(); if (!(value instanceof ArrayList)) { - return false; + return null; + } + ArrayList intList = (ArrayList) value; + for(Object o : intList){ + if (!(o instanceof Integer)) { + return null; + } else { + integerArrayList.add((Integer) o); + } + } + return integerArrayList; + } + + private static ArrayList strings(Object value){ + ArrayList stringArrayList = new ArrayList<>(); + if (!(value instanceof ArrayList)) { + return null; } - ArrayList list = (ArrayList) value; - for (Object o : list) { - if (!(o == null || type.isInstance(o))) { - return false; + ArrayList stringList = (ArrayList) value; + for(Object o : stringList){ + if (!(o instanceof String)) { + return null; + } else { + stringArrayList.add((String) o); } } - return true; + return stringArrayList; } - private static boolean isStringKeyedMap(Object value) { + private static Map map(Object value) { + Map stringMap = new HashMap<>(); if (!(value instanceof Map)) { - return false; + return null; } - Map map = (Map) value; - for (Object key : map.keySet()) { - if (!(key == null || key instanceof String)) { - return false; + Map mapValue = (Map) value; + for (Object key : mapValue.keySet()) { + if (!(key instanceof String)) { + return null; + } else { + Object o = mapValue.get(key); + if (o != null) { + stringMap.put((String) key, o); + } } } - return true; + return stringMap; } } diff --git a/packages/android_intent/pubspec.yaml b/packages/android_intent/pubspec.yaml index 166a73dfcb4d..c56f855f0c7e 100644 --- a/packages/android_intent/pubspec.yaml +++ b/packages/android_intent/pubspec.yaml @@ -4,7 +4,7 @@ homepage: https://github.com/flutter/plugins/tree/master/packages/android_intent # 0.3.y+z is compatible with 1.0.0, if you land a breaking change bump # the version to 2.0.0. # See more details: https://github.com/flutter/flutter/wiki/Package-migration-to-1.0.0 -version: 0.3.7+3 +version: 0.3.7+4 flutter: plugin: From b00ee2306e32d483440f80218f16031b09030c72 Mon Sep 17 00:00:00 2001 From: Hamdi Kahloun Date: Thu, 17 Sep 2020 14:21:11 +0100 Subject: [PATCH 02/12] androidintent --- .../androidintent/MethodCallHandlerImpl.java | 152 +++++++++--------- 1 file changed, 77 insertions(+), 75 deletions(-) diff --git a/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/MethodCallHandlerImpl.java b/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/MethodCallHandlerImpl.java index 23fedd4d2589..be592f3c0c73 100644 --- a/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/MethodCallHandlerImpl.java +++ b/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/MethodCallHandlerImpl.java @@ -34,76 +34,6 @@ public final class MethodCallHandlerImpl implements MethodCallHandler { this.sender = sender; } - /** - * Registers this instance as a method call handler on the given {@code messenger}. - * - *

Stops any previously started and unstopped calls. - * - *

This should be cleaned with {@link #stopListening} once the messenger is disposed of. - */ - void startListening(BinaryMessenger messenger) { - if (methodChannel != null) { - Log.wtf(TAG, "Setting a method call handler before the last was disposed."); - stopListening(); - } - - methodChannel = new MethodChannel(messenger, "plugins.flutter.io/android_intent"); - methodChannel.setMethodCallHandler(this); - } - - /** - * Clears this instance from listening to method calls. - * - *

Does nothing is {@link #startListening} hasn't been called, or if we're already stopped. - */ - void stopListening() { - if (methodChannel == null) { - Log.d(TAG, "Tried to stop listening when no methodChannel had been initialized."); - return; - } - - methodChannel.setMethodCallHandler(null); - methodChannel = null; - } - - /** - * Parses the incoming call and forwards it to the cached {@link IntentSender}. - * - *

Always calls {@code result#success}. - */ - @Override - public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) { - String action = convertAction((String) call.argument("action")); - Integer flags = call.argument("flags"); - String category = call.argument("category"); - String stringData = call.argument("data"); - Uri data = call.argument("data") != null ? Uri.parse(stringData) : null; - Map stringMap = call.argument("arguments"); - Bundle arguments = convertArguments(stringMap); - String packageName = call.argument("package"); - String component = call.argument("componentName"); - ComponentName componentName = - (packageName != null && component != null && !TextUtils.isEmpty(packageName) - && !TextUtils.isEmpty(component)) - ? new ComponentName(packageName, component) - : null; - String type = call.argument("type"); - - Intent intent = - sender.buildIntent( - action, flags, category, data, arguments, packageName, componentName, type); - - if ("launch".equalsIgnoreCase(call.method)) { - sender.send(intent); - - result.success(null); - } else if ("canResolveActivity".equalsIgnoreCase(call.method)) { - result.success(sender.canResolveActivity(intent)); - } else { - result.notImplemented(); - } - } - private static String convertAction(String action) { if (action == null) { return null; @@ -163,13 +93,13 @@ private static Bundle convertArguments(Map arguments) { return bundle; } - private static ArrayList integers(Object value){ + private static ArrayList integers(Object value) { ArrayList integerArrayList = new ArrayList<>(); if (!(value instanceof ArrayList)) { return null; } ArrayList intList = (ArrayList) value; - for(Object o : intList){ + for (Object o : intList) { if (!(o instanceof Integer)) { return null; } else { @@ -179,13 +109,13 @@ private static ArrayList integers(Object value){ return integerArrayList; } - private static ArrayList strings(Object value){ + private static ArrayList strings(Object value) { ArrayList stringArrayList = new ArrayList<>(); if (!(value instanceof ArrayList)) { return null; } ArrayList stringList = (ArrayList) value; - for(Object o : stringList){ + for (Object o : stringList) { if (!(o instanceof String)) { return null; } else { @@ -200,7 +130,7 @@ private static ArrayList strings(Object value){ if (!(value instanceof Map)) { return null; } - Map mapValue = (Map) value; + Map mapValue = (Map) value; for (Object key : mapValue.keySet()) { if (!(key instanceof String)) { return null; @@ -213,4 +143,76 @@ private static ArrayList strings(Object value){ } return stringMap; } + + /** + * Registers this instance as a method call handler on the given {@code messenger}. + * + *

Stops any previously started and unstopped calls. + * + *

This should be cleaned with {@link #stopListening} once the messenger is disposed of. + */ + void startListening(BinaryMessenger messenger) { + if (methodChannel != null) { + Log.wtf(TAG, "Setting a method call handler before the last was disposed."); + stopListening(); + } + + methodChannel = new MethodChannel(messenger, "plugins.flutter.io/android_intent"); + methodChannel.setMethodCallHandler(this); + } + + /** + * Clears this instance from listening to method calls. + * + *

Does nothing is {@link #startListening} hasn't been called, or if we're already stopped. + */ + void stopListening() { + if (methodChannel == null) { + Log.d(TAG, "Tried to stop listening when no methodChannel had been initialized."); + return; + } + + methodChannel.setMethodCallHandler(null); + methodChannel = null; + } + + /** + * Parses the incoming call and forwards it to the cached {@link IntentSender}. + * + *

Always calls {@code result#success}. + */ + @Override + public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) { + String action = convertAction((String) call.argument("action")); + Integer flags = call.argument("flags"); + String category = call.argument("category"); + String stringData = call.argument("data"); + Uri data = call.argument("data") != null ? Uri.parse(stringData) : null; + Map stringMap = call.argument("arguments"); + Bundle arguments = convertArguments(stringMap); + String packageName = call.argument("package"); + String component = call.argument("componentName"); + ComponentName componentName = + (packageName != null + && component != null + && !TextUtils.isEmpty(packageName) + && !TextUtils.isEmpty(component)) + ? new ComponentName(packageName, component) + : null; + String type = call.argument("type"); + + Intent intent = + sender.buildIntent( + action, flags, category, data, arguments, packageName, componentName, type); + + if ("launch".equalsIgnoreCase(call.method)) { + sender.send(intent); + + result.success(null); + } else if ("canResolveActivity".equalsIgnoreCase(call.method)) { + result.success(sender.canResolveActivity(intent)); + } else { + result.notImplemented(); + } + } } From fa065171906c65372dcba0363a56d15318a118c1 Mon Sep 17 00:00:00 2001 From: Hamdi Kahloun Date: Thu, 17 Sep 2020 14:32:22 +0100 Subject: [PATCH 03/12] androidintent --- .../androidintent/MethodCallHandlerImpl.java | 152 +++++++++--------- 1 file changed, 75 insertions(+), 77 deletions(-) diff --git a/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/MethodCallHandlerImpl.java b/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/MethodCallHandlerImpl.java index be592f3c0c73..23fedd4d2589 100644 --- a/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/MethodCallHandlerImpl.java +++ b/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/MethodCallHandlerImpl.java @@ -34,6 +34,76 @@ public final class MethodCallHandlerImpl implements MethodCallHandler { this.sender = sender; } + /** + * Registers this instance as a method call handler on the given {@code messenger}. + * + *

Stops any previously started and unstopped calls. + * + *

This should be cleaned with {@link #stopListening} once the messenger is disposed of. + */ + void startListening(BinaryMessenger messenger) { + if (methodChannel != null) { + Log.wtf(TAG, "Setting a method call handler before the last was disposed."); + stopListening(); + } + + methodChannel = new MethodChannel(messenger, "plugins.flutter.io/android_intent"); + methodChannel.setMethodCallHandler(this); + } + + /** + * Clears this instance from listening to method calls. + * + *

Does nothing is {@link #startListening} hasn't been called, or if we're already stopped. + */ + void stopListening() { + if (methodChannel == null) { + Log.d(TAG, "Tried to stop listening when no methodChannel had been initialized."); + return; + } + + methodChannel.setMethodCallHandler(null); + methodChannel = null; + } + + /** + * Parses the incoming call and forwards it to the cached {@link IntentSender}. + * + *

Always calls {@code result#success}. + */ + @Override + public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) { + String action = convertAction((String) call.argument("action")); + Integer flags = call.argument("flags"); + String category = call.argument("category"); + String stringData = call.argument("data"); + Uri data = call.argument("data") != null ? Uri.parse(stringData) : null; + Map stringMap = call.argument("arguments"); + Bundle arguments = convertArguments(stringMap); + String packageName = call.argument("package"); + String component = call.argument("componentName"); + ComponentName componentName = + (packageName != null && component != null && !TextUtils.isEmpty(packageName) + && !TextUtils.isEmpty(component)) + ? new ComponentName(packageName, component) + : null; + String type = call.argument("type"); + + Intent intent = + sender.buildIntent( + action, flags, category, data, arguments, packageName, componentName, type); + + if ("launch".equalsIgnoreCase(call.method)) { + sender.send(intent); + + result.success(null); + } else if ("canResolveActivity".equalsIgnoreCase(call.method)) { + result.success(sender.canResolveActivity(intent)); + } else { + result.notImplemented(); + } + } + private static String convertAction(String action) { if (action == null) { return null; @@ -93,13 +163,13 @@ private static Bundle convertArguments(Map arguments) { return bundle; } - private static ArrayList integers(Object value) { + private static ArrayList integers(Object value){ ArrayList integerArrayList = new ArrayList<>(); if (!(value instanceof ArrayList)) { return null; } ArrayList intList = (ArrayList) value; - for (Object o : intList) { + for(Object o : intList){ if (!(o instanceof Integer)) { return null; } else { @@ -109,13 +179,13 @@ private static ArrayList integers(Object value) { return integerArrayList; } - private static ArrayList strings(Object value) { + private static ArrayList strings(Object value){ ArrayList stringArrayList = new ArrayList<>(); if (!(value instanceof ArrayList)) { return null; } ArrayList stringList = (ArrayList) value; - for (Object o : stringList) { + for(Object o : stringList){ if (!(o instanceof String)) { return null; } else { @@ -130,7 +200,7 @@ private static ArrayList strings(Object value) { if (!(value instanceof Map)) { return null; } - Map mapValue = (Map) value; + Map mapValue = (Map) value; for (Object key : mapValue.keySet()) { if (!(key instanceof String)) { return null; @@ -143,76 +213,4 @@ private static ArrayList strings(Object value) { } return stringMap; } - - /** - * Registers this instance as a method call handler on the given {@code messenger}. - * - *

Stops any previously started and unstopped calls. - * - *

This should be cleaned with {@link #stopListening} once the messenger is disposed of. - */ - void startListening(BinaryMessenger messenger) { - if (methodChannel != null) { - Log.wtf(TAG, "Setting a method call handler before the last was disposed."); - stopListening(); - } - - methodChannel = new MethodChannel(messenger, "plugins.flutter.io/android_intent"); - methodChannel.setMethodCallHandler(this); - } - - /** - * Clears this instance from listening to method calls. - * - *

Does nothing is {@link #startListening} hasn't been called, or if we're already stopped. - */ - void stopListening() { - if (methodChannel == null) { - Log.d(TAG, "Tried to stop listening when no methodChannel had been initialized."); - return; - } - - methodChannel.setMethodCallHandler(null); - methodChannel = null; - } - - /** - * Parses the incoming call and forwards it to the cached {@link IntentSender}. - * - *

Always calls {@code result#success}. - */ - @Override - public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) { - String action = convertAction((String) call.argument("action")); - Integer flags = call.argument("flags"); - String category = call.argument("category"); - String stringData = call.argument("data"); - Uri data = call.argument("data") != null ? Uri.parse(stringData) : null; - Map stringMap = call.argument("arguments"); - Bundle arguments = convertArguments(stringMap); - String packageName = call.argument("package"); - String component = call.argument("componentName"); - ComponentName componentName = - (packageName != null - && component != null - && !TextUtils.isEmpty(packageName) - && !TextUtils.isEmpty(component)) - ? new ComponentName(packageName, component) - : null; - String type = call.argument("type"); - - Intent intent = - sender.buildIntent( - action, flags, category, data, arguments, packageName, componentName, type); - - if ("launch".equalsIgnoreCase(call.method)) { - sender.send(intent); - - result.success(null); - } else if ("canResolveActivity".equalsIgnoreCase(call.method)) { - result.success(sender.canResolveActivity(intent)); - } else { - result.notImplemented(); - } - } } From b715ceacecbed2a0b16d4365a5739109f3f1b40e Mon Sep 17 00:00:00 2001 From: Hamdi Kahloun Date: Thu, 17 Sep 2020 14:34:06 +0100 Subject: [PATCH 04/12] androidintent --- .../flutter/plugins/androidintent/MethodCallHandlerImpl.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/MethodCallHandlerImpl.java b/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/MethodCallHandlerImpl.java index 23fedd4d2589..4ecfbd22aa5b 100644 --- a/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/MethodCallHandlerImpl.java +++ b/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/MethodCallHandlerImpl.java @@ -83,7 +83,9 @@ public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) { String packageName = call.argument("package"); String component = call.argument("componentName"); ComponentName componentName = - (packageName != null && component != null && !TextUtils.isEmpty(packageName) + (packageName != null + && component != null + && !TextUtils.isEmpty(packageName) && !TextUtils.isEmpty(component)) ? new ComponentName(packageName, component) : null; From 14487087fb62cac0c56a30b59e965866532e3b11 Mon Sep 17 00:00:00 2001 From: Hamdi Kahloun Date: Thu, 17 Sep 2020 17:59:36 +0100 Subject: [PATCH 05/12] android_intent --- .../plugins/androidintent/MethodCallHandlerImpl.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/MethodCallHandlerImpl.java b/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/MethodCallHandlerImpl.java index 4ecfbd22aa5b..0d204424be0d 100644 --- a/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/MethodCallHandlerImpl.java +++ b/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/MethodCallHandlerImpl.java @@ -165,13 +165,13 @@ private static Bundle convertArguments(Map arguments) { return bundle; } - private static ArrayList integers(Object value){ + private static ArrayList integers(Object value) { ArrayList integerArrayList = new ArrayList<>(); if (!(value instanceof ArrayList)) { return null; } ArrayList intList = (ArrayList) value; - for(Object o : intList){ + for (Object o : intList) { if (!(o instanceof Integer)) { return null; } else { @@ -181,13 +181,13 @@ private static ArrayList integers(Object value){ return integerArrayList; } - private static ArrayList strings(Object value){ + private static ArrayList strings(Object value) { ArrayList stringArrayList = new ArrayList<>(); if (!(value instanceof ArrayList)) { return null; } ArrayList stringList = (ArrayList) value; - for(Object o : stringList){ + for (Object o : stringList) { if (!(o instanceof String)) { return null; } else { @@ -202,7 +202,7 @@ private static ArrayList strings(Object value){ if (!(value instanceof Map)) { return null; } - Map mapValue = (Map) value; + Map mapValue = (Map) value; for (Object key : mapValue.keySet()) { if (!(key instanceof String)) { return null; From accd4e639477f63f69272e370d4c9628caf2b604 Mon Sep 17 00:00:00 2001 From: Hamdi Kahloun Date: Thu, 17 Sep 2020 18:10:57 +0100 Subject: [PATCH 06/12] android_intent --- .../flutter/plugins/androidintent/MethodCallHandlerImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/MethodCallHandlerImpl.java b/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/MethodCallHandlerImpl.java index 0d204424be0d..da7ad62186e0 100644 --- a/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/MethodCallHandlerImpl.java +++ b/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/MethodCallHandlerImpl.java @@ -92,8 +92,8 @@ public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) { String type = call.argument("type"); Intent intent = - sender.buildIntent( - action, flags, category, data, arguments, packageName, componentName, type); + sender.buildIntent( + action, flags, category, data, arguments, packageName, componentName, type); if ("launch".equalsIgnoreCase(call.method)) { sender.send(intent); From a8b34e648ed18a2a817fa0e0d23b6b6a12ca144e Mon Sep 17 00:00:00 2001 From: Hamdi Kahloun Date: Thu, 17 Sep 2020 19:16:46 +0100 Subject: [PATCH 07/12] android_intent --- .../androidintent/MethodCallHandlerImpl.java | 173 +++++++++--------- 1 file changed, 89 insertions(+), 84 deletions(-) diff --git a/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/MethodCallHandlerImpl.java b/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/MethodCallHandlerImpl.java index da7ad62186e0..2eaba555634f 100644 --- a/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/MethodCallHandlerImpl.java +++ b/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/MethodCallHandlerImpl.java @@ -7,16 +7,19 @@ import android.provider.Settings; import android.text.TextUtils; import android.util.Log; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; import io.flutter.plugin.common.MethodChannel.MethodCallHandler; import io.flutter.plugin.common.MethodChannel.Result; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; /** Forwards incoming {@link MethodCall}s to {@link IntentSender#send}. */ public final class MethodCallHandlerImpl implements MethodCallHandler { @@ -34,78 +37,6 @@ public final class MethodCallHandlerImpl implements MethodCallHandler { this.sender = sender; } - /** - * Registers this instance as a method call handler on the given {@code messenger}. - * - *

Stops any previously started and unstopped calls. - * - *

This should be cleaned with {@link #stopListening} once the messenger is disposed of. - */ - void startListening(BinaryMessenger messenger) { - if (methodChannel != null) { - Log.wtf(TAG, "Setting a method call handler before the last was disposed."); - stopListening(); - } - - methodChannel = new MethodChannel(messenger, "plugins.flutter.io/android_intent"); - methodChannel.setMethodCallHandler(this); - } - - /** - * Clears this instance from listening to method calls. - * - *

Does nothing is {@link #startListening} hasn't been called, or if we're already stopped. - */ - void stopListening() { - if (methodChannel == null) { - Log.d(TAG, "Tried to stop listening when no methodChannel had been initialized."); - return; - } - - methodChannel.setMethodCallHandler(null); - methodChannel = null; - } - - /** - * Parses the incoming call and forwards it to the cached {@link IntentSender}. - * - *

Always calls {@code result#success}. - */ - @Override - public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) { - String action = convertAction((String) call.argument("action")); - Integer flags = call.argument("flags"); - String category = call.argument("category"); - String stringData = call.argument("data"); - Uri data = call.argument("data") != null ? Uri.parse(stringData) : null; - Map stringMap = call.argument("arguments"); - Bundle arguments = convertArguments(stringMap); - String packageName = call.argument("package"); - String component = call.argument("componentName"); - ComponentName componentName = - (packageName != null - && component != null - && !TextUtils.isEmpty(packageName) - && !TextUtils.isEmpty(component)) - ? new ComponentName(packageName, component) - : null; - String type = call.argument("type"); - - Intent intent = - sender.buildIntent( - action, flags, category, data, arguments, packageName, componentName, type); - - if ("launch".equalsIgnoreCase(call.method)) { - sender.send(intent); - - result.success(null); - } else if ("canResolveActivity".equalsIgnoreCase(call.method)) { - result.success(sender.canResolveActivity(intent)); - } else { - result.notImplemented(); - } - } - private static String convertAction(String action) { if (action == null) { return null; @@ -134,6 +65,8 @@ private static Bundle convertArguments(Map arguments) { } for (String key : arguments.keySet()) { Object value = arguments.get(key); + ArrayList stringArrayList = isStringArrayList(value); + ArrayList integerArrayList = isIntegerArrayList(value); if (value instanceof Integer) { bundle.putInt(key, (Integer) value); } else if (value instanceof String) { @@ -152,12 +85,12 @@ private static Bundle convertArguments(Map arguments) { bundle.putLongArray(key, (long[]) value); } else if (value instanceof double[]) { bundle.putDoubleArray(key, (double[]) value); - } else if (integers(value) != null) { - bundle.putIntegerArrayList(key, integers(value)); - } else if (strings(value) != null) { - bundle.putStringArrayList(key, strings(value)); - } else if (map(value) != null) { - bundle.putBundle(key, convertArguments((map(value)))); + } else if (integerArrayList != null) { + bundle.putIntegerArrayList(key, integerArrayList); + } else if (stringArrayList != null) { + bundle.putStringArrayList(key, stringArrayList); + } else if (isStringKeyedMap(value) != null) { + bundle.putBundle(key, convertArguments((isStringKeyedMap(value)))); } else { throw new UnsupportedOperationException("Unsupported type " + value); } @@ -165,7 +98,7 @@ private static Bundle convertArguments(Map arguments) { return bundle; } - private static ArrayList integers(Object value) { + private static ArrayList isIntegerArrayList(Object value) { ArrayList integerArrayList = new ArrayList<>(); if (!(value instanceof ArrayList)) { return null; @@ -181,7 +114,7 @@ private static ArrayList integers(Object value) { return integerArrayList; } - private static ArrayList strings(Object value) { + private static ArrayList isStringArrayList(Object value) { ArrayList stringArrayList = new ArrayList<>(); if (!(value instanceof ArrayList)) { return null; @@ -197,7 +130,7 @@ private static ArrayList strings(Object value) { return stringArrayList; } - private static Map map(Object value) { + private static Map isStringKeyedMap(Object value) { Map stringMap = new HashMap<>(); if (!(value instanceof Map)) { return null; @@ -215,4 +148,76 @@ private static ArrayList strings(Object value) { } return stringMap; } + + /** + * Registers this instance as a method call handler on the given {@code messenger}. + * + *

Stops any previously started and unstopped calls. + * + *

This should be cleaned with {@link #stopListening} once the messenger is disposed of. + */ + void startListening(BinaryMessenger messenger) { + if (methodChannel != null) { + Log.wtf(TAG, "Setting a method call handler before the last was disposed."); + stopListening(); + } + + methodChannel = new MethodChannel(messenger, "plugins.flutter.io/android_intent"); + methodChannel.setMethodCallHandler(this); + } + + /** + * Clears this instance from listening to method calls. + * + *

Does nothing is {@link #startListening} hasn't been called, or if we're already stopped. + */ + void stopListening() { + if (methodChannel == null) { + Log.d(TAG, "Tried to stop listening when no methodChannel had been initialized."); + return; + } + + methodChannel.setMethodCallHandler(null); + methodChannel = null; + } + + /** + * Parses the incoming call and forwards it to the cached {@link IntentSender}. + * + *

Always calls {@code result#success}. + */ + @Override + public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) { + String action = convertAction((String) call.argument("action")); + Integer flags = call.argument("flags"); + String category = call.argument("category"); + String stringData = call.argument("data"); + Uri data = call.argument("data") != null ? Uri.parse(stringData) : null; + Map stringMap = call.argument("arguments"); + Bundle arguments = convertArguments(stringMap); + String packageName = call.argument("package"); + String component = call.argument("componentName"); + ComponentName componentName = null; + if (packageName != null + && component != null + && !TextUtils.isEmpty(packageName) + && !TextUtils.isEmpty(component)) { + componentName = new ComponentName(packageName, component); + } + String type = call.argument("type"); + + Intent intent = + sender.buildIntent( + action, flags, category, data, arguments, packageName, componentName, type); + + if ("launch".equalsIgnoreCase(call.method)) { + sender.send(intent); + + result.success(null); + } else if ("canResolveActivity".equalsIgnoreCase(call.method)) { + result.success(sender.canResolveActivity(intent)); + } else { + result.notImplemented(); + } + } } From 401971003a14177946cf2412b0b97a73c0fc690a Mon Sep 17 00:00:00 2001 From: Hamdi Kahloun Date: Thu, 17 Sep 2020 19:24:50 +0100 Subject: [PATCH 08/12] android_intent --- .../androidintent/MethodCallHandlerImpl.java | 147 +++++++++--------- 1 file changed, 72 insertions(+), 75 deletions(-) diff --git a/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/MethodCallHandlerImpl.java b/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/MethodCallHandlerImpl.java index 2eaba555634f..95aa4d0ef092 100644 --- a/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/MethodCallHandlerImpl.java +++ b/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/MethodCallHandlerImpl.java @@ -7,14 +7,11 @@ import android.provider.Settings; import android.text.TextUtils; import android.util.Log; - import androidx.annotation.NonNull; import androidx.annotation.Nullable; - import java.util.ArrayList; import java.util.HashMap; import java.util.Map; - import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; @@ -37,6 +34,78 @@ public final class MethodCallHandlerImpl implements MethodCallHandler { this.sender = sender; } + /** + * Registers this instance as a method call handler on the given {@code messenger}. + * + *

Stops any previously started and unstopped calls. + * + *

This should be cleaned with {@link #stopListening} once the messenger is disposed of. + */ + void startListening(BinaryMessenger messenger) { + if (methodChannel != null) { + Log.wtf(TAG, "Setting a method call handler before the last was disposed."); + stopListening(); + } + + methodChannel = new MethodChannel(messenger, "plugins.flutter.io/android_intent"); + methodChannel.setMethodCallHandler(this); + } + + /** + * Clears this instance from listening to method calls. + * + *

Does nothing is {@link #startListening} hasn't been called, or if we're already stopped. + */ + void stopListening() { + if (methodChannel == null) { + Log.d(TAG, "Tried to stop listening when no methodChannel had been initialized."); + return; + } + + methodChannel.setMethodCallHandler(null); + methodChannel = null; + } + + /** + * Parses the incoming call and forwards it to the cached {@link IntentSender}. + * + *

Always calls {@code result#success}. + */ + @Override + public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) { + String action = convertAction((String) call.argument("action")); + Integer flags = call.argument("flags"); + String category = call.argument("category"); + String stringData = call.argument("data"); + Uri data = call.argument("data") != null ? Uri.parse(stringData) : null; + Map stringMap = call.argument("arguments"); + Bundle arguments = convertArguments(stringMap); + String packageName = call.argument("package"); + String component = call.argument("componentName"); + ComponentName componentName = null; + if (packageName != null + && component != null + && !TextUtils.isEmpty(packageName) + && !TextUtils.isEmpty(component)) { + componentName = new ComponentName(packageName, component); + } + String type = call.argument("type"); + + Intent intent = + sender.buildIntent( + action, flags, category, data, arguments, packageName, componentName, type); + + if ("launch".equalsIgnoreCase(call.method)) { + sender.send(intent); + + result.success(null); + } else if ("canResolveActivity".equalsIgnoreCase(call.method)) { + result.success(sender.canResolveActivity(intent)); + } else { + result.notImplemented(); + } + } + private static String convertAction(String action) { if (action == null) { return null; @@ -148,76 +217,4 @@ private static ArrayList isStringArrayList(Object value) { } return stringMap; } - - /** - * Registers this instance as a method call handler on the given {@code messenger}. - * - *

Stops any previously started and unstopped calls. - * - *

This should be cleaned with {@link #stopListening} once the messenger is disposed of. - */ - void startListening(BinaryMessenger messenger) { - if (methodChannel != null) { - Log.wtf(TAG, "Setting a method call handler before the last was disposed."); - stopListening(); - } - - methodChannel = new MethodChannel(messenger, "plugins.flutter.io/android_intent"); - methodChannel.setMethodCallHandler(this); - } - - /** - * Clears this instance from listening to method calls. - * - *

Does nothing is {@link #startListening} hasn't been called, or if we're already stopped. - */ - void stopListening() { - if (methodChannel == null) { - Log.d(TAG, "Tried to stop listening when no methodChannel had been initialized."); - return; - } - - methodChannel.setMethodCallHandler(null); - methodChannel = null; - } - - /** - * Parses the incoming call and forwards it to the cached {@link IntentSender}. - * - *

Always calls {@code result#success}. - */ - @Override - public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) { - String action = convertAction((String) call.argument("action")); - Integer flags = call.argument("flags"); - String category = call.argument("category"); - String stringData = call.argument("data"); - Uri data = call.argument("data") != null ? Uri.parse(stringData) : null; - Map stringMap = call.argument("arguments"); - Bundle arguments = convertArguments(stringMap); - String packageName = call.argument("package"); - String component = call.argument("componentName"); - ComponentName componentName = null; - if (packageName != null - && component != null - && !TextUtils.isEmpty(packageName) - && !TextUtils.isEmpty(component)) { - componentName = new ComponentName(packageName, component); - } - String type = call.argument("type"); - - Intent intent = - sender.buildIntent( - action, flags, category, data, arguments, packageName, componentName, type); - - if ("launch".equalsIgnoreCase(call.method)) { - sender.send(intent); - - result.success(null); - } else if ("canResolveActivity".equalsIgnoreCase(call.method)) { - result.success(sender.canResolveActivity(intent)); - } else { - result.notImplemented(); - } - } } From 71702b2d68cef530e45204d8a13f49924cded377 Mon Sep 17 00:00:00 2001 From: Hamdi Kahloun Date: Thu, 17 Sep 2020 19:36:02 +0100 Subject: [PATCH 09/12] android_intent --- .../androidintent/MethodCallHandlerImpl.java | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/MethodCallHandlerImpl.java b/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/MethodCallHandlerImpl.java index 95aa4d0ef092..74a3dd1514aa 100644 --- a/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/MethodCallHandlerImpl.java +++ b/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/MethodCallHandlerImpl.java @@ -9,14 +9,14 @@ import android.util.Log; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; import io.flutter.plugin.common.MethodChannel.MethodCallHandler; import io.flutter.plugin.common.MethodChannel.Result; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; /** Forwards incoming {@link MethodCall}s to {@link IntentSender#send}. */ public final class MethodCallHandlerImpl implements MethodCallHandler { @@ -84,16 +84,16 @@ public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) { String component = call.argument("componentName"); ComponentName componentName = null; if (packageName != null - && component != null - && !TextUtils.isEmpty(packageName) - && !TextUtils.isEmpty(component)) { + && component != null + && !TextUtils.isEmpty(packageName) + && !TextUtils.isEmpty(component)) { componentName = new ComponentName(packageName, component); } String type = call.argument("type"); Intent intent = - sender.buildIntent( - action, flags, category, data, arguments, packageName, componentName, type); + sender.buildIntent( + action, flags, category, data, arguments, packageName, componentName, type); if ("launch".equalsIgnoreCase(call.method)) { sender.send(intent); @@ -136,6 +136,7 @@ private static Bundle convertArguments(Map arguments) { Object value = arguments.get(key); ArrayList stringArrayList = isStringArrayList(value); ArrayList integerArrayList = isIntegerArrayList(value); + Map stringMap = isStringKeyedMap(value); if (value instanceof Integer) { bundle.putInt(key, (Integer) value); } else if (value instanceof String) { @@ -158,8 +159,8 @@ private static Bundle convertArguments(Map arguments) { bundle.putIntegerArrayList(key, integerArrayList); } else if (stringArrayList != null) { bundle.putStringArrayList(key, stringArrayList); - } else if (isStringKeyedMap(value) != null) { - bundle.putBundle(key, convertArguments((isStringKeyedMap(value)))); + } else if (stringMap != null) { + bundle.putBundle(key, convertArguments(stringMap)); } else { throw new UnsupportedOperationException("Unsupported type " + value); } From 33d890341b41838966a138850fe982e45a519d87 Mon Sep 17 00:00:00 2001 From: Hamdi Kahloun Date: Thu, 17 Sep 2020 19:43:46 +0100 Subject: [PATCH 10/12] android_intent --- .../io/flutter/plugins/androidintent/MethodCallHandlerImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/MethodCallHandlerImpl.java b/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/MethodCallHandlerImpl.java index 74a3dd1514aa..753541bf9338 100644 --- a/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/MethodCallHandlerImpl.java +++ b/packages/android_intent/android/src/main/java/io/flutter/plugins/androidintent/MethodCallHandlerImpl.java @@ -136,7 +136,7 @@ private static Bundle convertArguments(Map arguments) { Object value = arguments.get(key); ArrayList stringArrayList = isStringArrayList(value); ArrayList integerArrayList = isIntegerArrayList(value); - Map stringMap = isStringKeyedMap(value); + Map stringMap = isStringKeyedMap(value); if (value instanceof Integer) { bundle.putInt(key, (Integer) value); } else if (value instanceof String) { From 15d04e1787fa80545565c1ef4a8ba12c2b442bef Mon Sep 17 00:00:00 2001 From: Hamdi Kahloun <32666446+hamdikahloun@users.noreply.github.com> Date: Sat, 26 Sep 2020 00:30:14 +0100 Subject: [PATCH 11/12] Update pubspec.yaml --- packages/android_intent/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/android_intent/pubspec.yaml b/packages/android_intent/pubspec.yaml index c56f855f0c7e..764719e3901a 100644 --- a/packages/android_intent/pubspec.yaml +++ b/packages/android_intent/pubspec.yaml @@ -4,7 +4,7 @@ homepage: https://github.com/flutter/plugins/tree/master/packages/android_intent # 0.3.y+z is compatible with 1.0.0, if you land a breaking change bump # the version to 2.0.0. # See more details: https://github.com/flutter/flutter/wiki/Package-migration-to-1.0.0 -version: 0.3.7+4 +version: 0.3.7+5 flutter: plugin: From 54029da0c260e35e61514ecd1c7950ece5dd1722 Mon Sep 17 00:00:00 2001 From: Hamdi Kahloun <32666446+hamdikahloun@users.noreply.github.com> Date: Sat, 26 Sep 2020 00:31:25 +0100 Subject: [PATCH 12/12] Update CHANGELOG.md --- packages/android_intent/CHANGELOG.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/android_intent/CHANGELOG.md b/packages/android_intent/CHANGELOG.md index 7ee03cf3cc91..711057ce3ec6 100644 --- a/packages/android_intent/CHANGELOG.md +++ b/packages/android_intent/CHANGELOG.md @@ -1,7 +1,11 @@ -## 0.3.7+4 +## 0.3.7+5 * Android Code Inspection and Clean up. +## 0.3.7+4 + +* Keep handling deprecated Android v1 classes for backward compatibility. + ## 0.3.7+3 * Update the `platform` package dependency to resolve the conflict with the latest flutter. @@ -16,8 +20,8 @@ ## 0.3.7 -* Add a `Future canResolveActivity` method to the AndroidIntent class. It - can be used to determine whether a device supports a particular intent or has +* Add a `Future canResolveActivity` method to the AndroidIntent class. It + can be used to determine whether a device supports a particular intent or has an app installed that can resolve it. It is based on PackageManager [resolveActivity](https://developer.android.com/reference/android/content/pm/PackageManager#resolveActivity(android.content.Intent,%20int)). @@ -40,7 +44,7 @@ ## 0.3.5 -* Add support for [setType](https://developer.android.com/reference/android/content/Intent.html#setType(java.lang.String)) and [setDataAndType](https://developer.android.com/reference/android/content/Intent.html#setDataAndType(android.net.Uri,%20java.lang.String)) parameters. +* Add support for [setType](https://developer.android.com/reference/android/content/Intent.html#setType(java.lang.String)) and [setDataAndType](https://developer.android.com/reference/android/content/Intent.html#setDataAndType(android.net.Uri,%20java.lang.String)) parameters. ## 0.3.4+8