diff --git a/packages/android_intent/CHANGELOG.md b/packages/android_intent/CHANGELOG.md index a216f165bf9a..711057ce3ec6 100644 --- a/packages/android_intent/CHANGELOG.md +++ b/packages/android_intent/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.3.7+5 + +* Android Code Inspection and Clean up. + ## 0.3.7+4 * Keep handling deprecated Android v1 classes for backward compatibility. 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..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 @@ -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,14 +76,19 @@ 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"); - ComponentName componentName = - (!TextUtils.isEmpty(packageName) - && !TextUtils.isEmpty((String) call.argument("componentName"))) - ? new ComponentName(packageName, (String) call.argument("componentName")) - : null; + 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 = @@ -128,6 +134,9 @@ private static Bundle convertArguments(Map arguments) { } for (String key : arguments.keySet()) { 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) { @@ -146,12 +155,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 (integerArrayList != null) { + bundle.putIntegerArrayList(key, integerArrayList); + } else if (stringArrayList != null) { + bundle.putStringArrayList(key, stringArrayList); + } else if (stringMap != null) { + bundle.putBundle(key, convertArguments(stringMap)); } else { throw new UnsupportedOperationException("Unsupported type " + value); } @@ -159,29 +168,54 @@ private static Bundle convertArguments(Map arguments) { return bundle; } - private static boolean isTypedArrayList(Object value, Class type) { + private static ArrayList isIntegerArrayList(Object value) { + ArrayList integerArrayList = new ArrayList<>(); if (!(value instanceof ArrayList)) { - return false; + return null; } - ArrayList list = (ArrayList) value; - for (Object o : list) { - if (!(o == null || type.isInstance(o))) { - return false; + ArrayList intList = (ArrayList) value; + for (Object o : intList) { + if (!(o instanceof Integer)) { + return null; + } else { + integerArrayList.add((Integer) o); } } - return true; + return integerArrayList; } - private static boolean isStringKeyedMap(Object value) { + private static ArrayList isStringArrayList(Object value) { + ArrayList stringArrayList = new ArrayList<>(); + if (!(value instanceof ArrayList)) { + return null; + } + ArrayList stringList = (ArrayList) value; + for (Object o : stringList) { + if (!(o instanceof String)) { + return null; + } else { + stringArrayList.add((String) o); + } + } + return stringArrayList; + } + + private static Map isStringKeyedMap(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 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: