[quick_actions] Fix Android lint issues (#3885)
Removes lint-baseline.xml and fixes all warnings.
Part of https://github.com/flutter/flutter/issues/88011
diff --git a/packages/quick_actions/quick_actions_android/CHANGELOG.md b/packages/quick_actions/quick_actions_android/CHANGELOG.md
index 32a0fa1..30344bc 100644
--- a/packages/quick_actions/quick_actions_android/CHANGELOG.md
+++ b/packages/quick_actions/quick_actions_android/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.0.5
+
+* Fixes Java warnings.
+
## 1.0.4
* Fixes compatibility with AGP versions older than 4.2.
diff --git a/packages/quick_actions/quick_actions_android/android/build.gradle b/packages/quick_actions/quick_actions_android/android/build.gradle
index 71bd5b2..942584d 100644
--- a/packages/quick_actions/quick_actions_android/android/build.gradle
+++ b/packages/quick_actions/quick_actions_android/android/build.gradle
@@ -36,7 +36,6 @@
checkAllWarnings true
warningsAsErrors true
disable 'AndroidGradlePluginVersion', 'InvalidPackage', 'GradleDependency'
- baseline file("lint-baseline.xml")
}
dependencies {
diff --git a/packages/quick_actions/quick_actions_android/android/lint-baseline.xml b/packages/quick_actions/quick_actions_android/android/lint-baseline.xml
deleted file mode 100644
index e0ecdc8..0000000
--- a/packages/quick_actions/quick_actions_android/android/lint-baseline.xml
+++ /dev/null
@@ -1,103 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.2" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.2)" variant="all" version="7.4.2">
-
- <issue
- id="DiscouragedApi"
- message="Use of this function is discouraged because resource reflection makes it harder to perform build optimizations and compile-time verification of code. It is much more efficient to retrieve resources by identifier (e.g. `R.foo.bar`) than by name (e.g. `getIdentifier("bar", "foo", null)`)."
- errorLine1=" final int resourceId = res.getIdentifier(icon, "drawable", packageName);"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/quickactions/MethodCallHandlerImpl.java"
- line="149"
- column="32"/>
- </issue>
-
- <issue
- id="DiscouragedApi"
- message="Use of this function is discouraged because resource reflection makes it harder to perform build optimizations and compile-time verification of code. It is much more efficient to retrieve resources by identifier (e.g. `R.foo.bar`) than by name (e.g. `getIdentifier("bar", "foo", null)`)."
- errorLine1=" return res.getIdentifier(icon, "mipmap", packageName);"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/quickactions/MethodCallHandlerImpl.java"
- line="152"
- column="18"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` member of class `UiThreadExecutor` requires synthetic accessor"
- errorLine1=" Executor uiThreadExecutor = new UiThreadExecutor();"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/quickactions/MethodCallHandlerImpl.java"
- line="60"
- column="39"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
- errorLine1=" public static void registerWith(io.flutter.plugin.common.PluginRegistry.Registrar registrar) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/quickactions/QuickActionsPlugin.java"
- line="33"
- column="35"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
- errorLine1=" public void onAttachedToEngine(FlutterPluginBinding binding) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/quickactions/QuickActionsPlugin.java"
- line="39"
- column="34"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
- errorLine1=" public void onDetachedFromEngine(FlutterPluginBinding binding) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/quickactions/QuickActionsPlugin.java"
- line="44"
- column="36"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
- errorLine1=" public void onAttachedToActivity(ActivityPluginBinding binding) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/quickactions/QuickActionsPlugin.java"
- line="49"
- column="36"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
- errorLine1=" public void onReattachedToActivityForConfigChanges(ActivityPluginBinding binding) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/quickactions/QuickActionsPlugin.java"
- line="62"
- column="54"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
- errorLine1=" public boolean onNewIntent(Intent intent) {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/quickactions/QuickActionsPlugin.java"
- line="73"
- column="30"/>
- </issue>
-
-</issues>
diff --git a/packages/quick_actions/quick_actions_android/android/src/main/java/io/flutter/plugins/quickactions/MethodCallHandlerImpl.java b/packages/quick_actions/quick_actions_android/android/src/main/java/io/flutter/plugins/quickactions/MethodCallHandlerImpl.java
index 96b141f..c6a0db5 100644
--- a/packages/quick_actions/quick_actions_android/android/src/main/java/io/flutter/plugins/quickactions/MethodCallHandlerImpl.java
+++ b/packages/quick_actions/quick_actions_android/android/src/main/java/io/flutter/plugins/quickactions/MethodCallHandlerImpl.java
@@ -15,11 +15,13 @@
import android.os.Build;
import android.os.Handler;
import android.os.Looper;
+import androidx.annotation.NonNull;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import java.util.concurrent.Executor;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
@@ -27,7 +29,6 @@
class MethodCallHandlerImpl implements MethodChannel.MethodCallHandler {
protected static final String EXTRA_ACTION = "some unique action key";
- private static final String CHANNEL_ID = "plugins.flutter.io/quick_actions_android";
private final Context context;
private Activity activity;
@@ -42,7 +43,7 @@
}
@Override
- public void onMethodCall(MethodCall call, MethodChannel.Result result) {
+ public void onMethodCall(@NonNull MethodCall call, @NonNull MethodChannel.Result result) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N_MR1) {
// We already know that this functionality does not work for anything
// lower than API 25 so we chose not to return error. Instead we do nothing.
@@ -54,13 +55,12 @@
switch (call.method) {
case "setShortcutItems":
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N_MR1) {
- List<Map<String, String>> serializedShortcuts = call.arguments();
+ List<Map<String, String>> serializedShortcuts = Objects.requireNonNull(call.arguments());
List<ShortcutInfo> shortcuts = deserializeShortcuts(serializedShortcuts);
Executor uiThreadExecutor = new UiThreadExecutor();
ThreadPoolExecutor executor =
- new ThreadPoolExecutor(
- 0, 1, 1, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());
+ new ThreadPoolExecutor(0, 1, 1, TimeUnit.SECONDS, new LinkedBlockingQueue<>());
executor.execute(
() -> {
@@ -140,6 +140,8 @@
return shortcutInfos;
}
+ // This method requires doing dynamic resource lookup, which is a discouraged API.
+ @SuppressWarnings("DiscouragedApi")
private int loadResourceId(Context context, String icon) {
if (icon == null) {
return 0;
@@ -167,7 +169,7 @@
.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
}
- private static class UiThreadExecutor implements Executor {
+ static class UiThreadExecutor implements Executor {
private final Handler handler = new Handler(Looper.getMainLooper());
@Override
diff --git a/packages/quick_actions/quick_actions_android/android/src/main/java/io/flutter/plugins/quickactions/QuickActionsPlugin.java b/packages/quick_actions/quick_actions_android/android/src/main/java/io/flutter/plugins/quickactions/QuickActionsPlugin.java
index b410878..91950f3 100644
--- a/packages/quick_actions/quick_actions_android/android/src/main/java/io/flutter/plugins/quickactions/QuickActionsPlugin.java
+++ b/packages/quick_actions/quick_actions_android/android/src/main/java/io/flutter/plugins/quickactions/QuickActionsPlugin.java
@@ -9,6 +9,7 @@
import android.content.Intent;
import android.content.pm.ShortcutManager;
import android.os.Build;
+import androidx.annotation.NonNull;
import io.flutter.embedding.engine.plugins.FlutterPlugin;
import io.flutter.embedding.engine.plugins.activity.ActivityAware;
import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding;
@@ -30,23 +31,24 @@
* <p>Must be called when the application is created.
*/
@SuppressWarnings("deprecation")
- public static void registerWith(io.flutter.plugin.common.PluginRegistry.Registrar registrar) {
+ public static void registerWith(
+ @NonNull io.flutter.plugin.common.PluginRegistry.Registrar registrar) {
final QuickActionsPlugin plugin = new QuickActionsPlugin();
plugin.setupChannel(registrar.messenger(), registrar.context(), registrar.activity());
}
@Override
- public void onAttachedToEngine(FlutterPluginBinding binding) {
+ public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) {
setupChannel(binding.getBinaryMessenger(), binding.getApplicationContext(), null);
}
@Override
- public void onDetachedFromEngine(FlutterPluginBinding binding) {
+ public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {
teardownChannel();
}
@Override
- public void onAttachedToActivity(ActivityPluginBinding binding) {
+ public void onAttachedToActivity(@NonNull ActivityPluginBinding binding) {
activity = binding.getActivity();
handler.setActivity(activity);
binding.addOnNewIntentListener(this);
@@ -59,7 +61,7 @@
}
@Override
- public void onReattachedToActivityForConfigChanges(ActivityPluginBinding binding) {
+ public void onReattachedToActivityForConfigChanges(@NonNull ActivityPluginBinding binding) {
binding.removeOnNewIntentListener(this);
onAttachedToActivity(binding);
}
@@ -70,7 +72,7 @@
}
@Override
- public boolean onNewIntent(Intent intent) {
+ public boolean onNewIntent(@NonNull Intent intent) {
// Do nothing for anything lower than API 25 as the functionality isn't supported.
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N_MR1) {
return false;
diff --git a/packages/quick_actions/quick_actions_android/pubspec.yaml b/packages/quick_actions/quick_actions_android/pubspec.yaml
index 65f71d6..0c82184 100644
--- a/packages/quick_actions/quick_actions_android/pubspec.yaml
+++ b/packages/quick_actions/quick_actions_android/pubspec.yaml
@@ -2,7 +2,7 @@
description: An implementation for the Android platform of the Flutter `quick_actions` plugin.
repository: https://github.com/flutter/packages/tree/main/packages/quick_actions/quick_actions_android
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+in_app_purchase%22
-version: 1.0.4
+version: 1.0.5
environment:
sdk: ">=2.17.0 <4.0.0"