[google_sign_in] Fix Android Java warnings (#3762)
Removes lint-baseline.xml, and fixes all resulting warnings. Also fixes some warnings that only show up in the AS linter as opportunistic fixes.
All anonymous object->lambda conversions were auto-generated by the AS auto-fix for those warnings.
Fixed an edge case bug found during warning fixes; the Dart `getTokens` call has an argument that was (I assume accidentally) declared as `bool? shouldRecoverAuth = true` instead of `bool shouldRecoverAuth = true`, which means that while it defaults to `true` if not passed, it can be explicitly passed `null` and will keep that value. This was being passed directly into the method channel, and on the Java side was extracted as a `boolean` which would throw an exception on null.
Part of https://github.com/flutter/flutter/issues/88011
diff --git a/packages/google_sign_in/google_sign_in_android/CHANGELOG.md b/packages/google_sign_in/google_sign_in_android/CHANGELOG.md
index a419d90..4f4f6dd 100644
--- a/packages/google_sign_in/google_sign_in_android/CHANGELOG.md
+++ b/packages/google_sign_in/google_sign_in_android/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 6.1.11
+
+* Fixes Java warnings.
+
## 6.1.10
* Sets an explicit Java compatibility version.
diff --git a/packages/google_sign_in/google_sign_in_android/android/build.gradle b/packages/google_sign_in/google_sign_in_android/android/build.gradle
index d6872d5..ae2abf5 100644
--- a/packages/google_sign_in/google_sign_in_android/android/build.gradle
+++ b/packages/google_sign_in/google_sign_in_android/android/build.gradle
@@ -37,7 +37,6 @@
checkAllWarnings true
warningsAsErrors true
disable 'AndroidGradlePluginVersion', 'InvalidPackage', 'GradleDependency'
- baseline file("lint-baseline.xml")
}
diff --git a/packages/google_sign_in/google_sign_in_android/android/lint-baseline.xml b/packages/google_sign_in/google_sign_in_android/android/lint-baseline.xml
deleted file mode 100644
index c59558a..0000000
--- a/packages/google_sign_in/google_sign_in_android/android/lint-baseline.xml
+++ /dev/null
@@ -1,730 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.1" type="baseline" client="gradle" name="AGP (7.0.1)" variant="all" version="7.0.1">
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` member of class `UiThreadExecutor` requires synthetic accessor"
- errorLine1=" return new UiThreadExecutor();"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/Executors.java"
- line="30"
- column="12"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `onSignInResult` of class `Delegate` requires synthetic accessor"
- errorLine1=" onSignInResult(task);"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="415"
- column="17"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `finishWithSuccess` of class `Delegate` requires synthetic accessor"
- errorLine1=" finishWithSuccess(null);"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="451"
- column="21"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `finishWithError` of class `Delegate` requires synthetic accessor"
- errorLine1=" finishWithError(ERROR_REASON_STATUS, "Failed to signout.");"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="453"
- column="21"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `finishWithSuccess` of class `Delegate` requires synthetic accessor"
- errorLine1=" finishWithSuccess(null);"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="471"
- column="21"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `finishWithError` of class `Delegate` requires synthetic accessor"
- errorLine1=" finishWithError(ERROR_REASON_STATUS, "Failed to disconnect.");"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="473"
- column="21"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `context` of class `Delegate` requires synthetic accessor"
- errorLine1=" GoogleAuthUtil.clearToken(context, token);"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="587"
- column="41"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `requestedScopes` of class `Delegate` requires synthetic accessor"
- errorLine1=" String scopesStr = "oauth2:" + Joiner.on(' ').join(requestedScopes);"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="629"
- column="66"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `context` of class `Delegate` requires synthetic accessor"
- errorLine1=" return GoogleAuthUtil.getToken(context, account, scopesStr);"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="630"
- column="46"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `pendingOperation` of class `Delegate` requires synthetic accessor"
- errorLine1=" if (shouldRecoverAuth && pendingOperation == null) {"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="649"
- column="44"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `checkAndSetPendingOperation` of class `Delegate` requires synthetic accessor"
- errorLine1=" checkAndSetPendingOperation(METHOD_GET_TOKENS, result, email);"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="658"
- column="23"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" void run(Future<T> future);"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/BackgroundTaskRunner.java"
- line="34"
- column="14"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public <T> void runInBackground(Callable<T> task, final Callback<T> callback) {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/BackgroundTaskRunner.java"
- line="56"
- column="35"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public <T> void runInBackground(Callable<T> task, final Callback<T> callback) {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/BackgroundTaskRunner.java"
- line="56"
- column="59"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public <T> ListenableFuture<T> runInBackground(final Callable<T> task) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/BackgroundTaskRunner.java"
- line="75"
- column="14"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public <T> ListenableFuture<T> runInBackground(final Callable<T> task) {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/BackgroundTaskRunner.java"
- line="75"
- column="56"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public static Executor uiThreadExecutor() {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/Executors.java"
- line="29"
- column="17"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public static void registerWith(io.flutter.plugin.common.PluginRegistry.Registrar registrar) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="65"
- column="35"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" BinaryMessenger messenger, Context context, GoogleSignInWrapper googleSignInWrapper) {"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="73"
- column="7"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" BinaryMessenger messenger, Context context, GoogleSignInWrapper googleSignInWrapper) {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="73"
- column="34"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" BinaryMessenger messenger, Context context, GoogleSignInWrapper googleSignInWrapper) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="73"
- column="51"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public void setUpRegistrar(PluginRegistry.Registrar registrar) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="81"
- column="30"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public void onAttachedToActivity(ActivityPluginBinding activityPluginBinding) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="115"
- column="36"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public void onReattachedToActivityForConfigChanges(ActivityPluginBinding activityPluginBinding) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="125"
- column="54"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public void onMethodCall(MethodCall call, Result result) {"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="135"
- column="28"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public void onMethodCall(MethodCall call, Result result) {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="135"
- column="45"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" Result result,"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="203"
- column="9"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" String signInOption,"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="204"
- column="9"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" List<String> requestedScopes,"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="205"
- column="9"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" String hostedDomain,"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="206"
- column="9"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" String clientId,"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="207"
- column="9"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" String serverClientId,"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="208"
- column="9"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public void signInSilently(Result result);"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="215"
- column="32"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public void signIn(Result result);"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="221"
- column="24"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public void getTokens(final Result result, final String email, final boolean shouldRecoverAuth);"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="230"
- column="33"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public void getTokens(final Result result, final String email, final boolean shouldRecoverAuth);"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="230"
- column="54"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public void clearAuthCache(final Result result, final String token);"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="236"
- column="38"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public void clearAuthCache(final Result result, final String token);"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="236"
- column="59"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public void signOut(Result result);"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="242"
- column="25"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public void disconnect(Result result);"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="245"
- column="28"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public void isSignedIn(Result result);"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="248"
- column="28"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public void requestScopes(final Result result, final List<String> scopes);"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="251"
- column="37"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public void requestScopes(final Result result, final List<String> scopes);"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="251"
- column="58"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public Delegate(Context context, GoogleSignInWrapper googleSignInWrapper) {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="294"
- column="21"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public Delegate(Context context, GoogleSignInWrapper googleSignInWrapper) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="294"
- column="38"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public void setUpRegistrar(PluginRegistry.Registrar registrar) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="300"
- column="32"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public void setActivity(Activity activity) {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="305"
- column="29"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public Activity getActivity() {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="310"
- column="12"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" Result result,"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="332"
- column="9"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" String signInOption,"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="333"
- column="9"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" List<String> requestedScopes,"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="334"
- column="9"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" String hostedDomain,"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="335"
- column="9"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" String clientId,"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="336"
- column="9"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" String serverClientId,"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="337"
- column="9"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public void signInSilently(Result result) {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="404"
- column="32"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public void signIn(Result result) {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="426"
- column="24"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public void signOut(Result result) {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="441"
- column="25"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public void disconnect(Result result) {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="461"
- column="28"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public void isSignedIn(final Result result) {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="481"
- column="34"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public void requestScopes(Result result, List<String> scopes) {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="487"
- column="31"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public void requestScopes(Result result, List<String> scopes) {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="487"
- column="46"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public void clearAuthCache(final Result result, final String token) {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="582"
- column="38"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public void clearAuthCache(final Result result, final String token) {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="582"
- column="59"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" final Result result, final String email, final boolean shouldRecoverAuth) {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="618"
- column="15"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" final Result result, final String email, final boolean shouldRecoverAuth) {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="618"
- column="36"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public boolean onActivityResult(int requestCode, int resultCode, Intent data) {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
- line="678"
- column="70"/>
- </issue>
-
-</issues>
diff --git a/packages/google_sign_in/google_sign_in_android/android/src/main/java/io/flutter/plugins/googlesignin/BackgroundTaskRunner.java b/packages/google_sign_in/google_sign_in_android/android/src/main/java/io/flutter/plugins/googlesignin/BackgroundTaskRunner.java
index b13ec7e..4fc0afa 100644
--- a/packages/google_sign_in/google_sign_in_android/android/src/main/java/io/flutter/plugins/googlesignin/BackgroundTaskRunner.java
+++ b/packages/google_sign_in/google_sign_in_android/android/src/main/java/io/flutter/plugins/googlesignin/BackgroundTaskRunner.java
@@ -4,6 +4,7 @@
package io.flutter.plugins.googlesignin;
+import androidx.annotation.NonNull;
import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.SettableFuture;
import java.util.concurrent.BlockingQueue;
@@ -31,7 +32,7 @@
* the future is guaranteed not to block). If the future completed with an exception, then
* {@code get()} will throw an {@code ExecutionException}.
*/
- void run(Future<T> future);
+ void run(@NonNull Future<T> future);
}
private final ThreadPoolExecutor executor;
@@ -53,16 +54,9 @@
*
* <p>The callback will be notified on the UI thread.
*/
- public <T> void runInBackground(Callable<T> task, final Callback<T> callback) {
+ public <T> void runInBackground(@NonNull Callable<T> task, final @NonNull Callback<T> callback) {
final ListenableFuture<T> future = runInBackground(task);
- future.addListener(
- new Runnable() {
- @Override
- public void run() {
- callback.run(future);
- }
- },
- Executors.uiThreadExecutor());
+ future.addListener(() -> callback.run(future), Executors.uiThreadExecutor());
}
/**
@@ -72,19 +66,16 @@
* <p>Note: the future will be notified on the background thread. To be notified on the UI thread,
* use {@link #runInBackground(Callable,Callback)}.
*/
- public <T> ListenableFuture<T> runInBackground(final Callable<T> task) {
+ public @NonNull <T> ListenableFuture<T> runInBackground(final @NonNull Callable<T> task) {
final SettableFuture<T> future = SettableFuture.create();
executor.execute(
- new Runnable() {
- @Override
- public void run() {
- if (!future.isCancelled()) {
- try {
- future.set(task.call());
- } catch (Throwable t) {
- future.setException(t);
- }
+ () -> {
+ if (!future.isCancelled()) {
+ try {
+ future.set(task.call());
+ } catch (Throwable t) {
+ future.setException(t);
}
}
});
diff --git a/packages/google_sign_in/google_sign_in_android/android/src/main/java/io/flutter/plugins/googlesignin/Executors.java b/packages/google_sign_in/google_sign_in_android/android/src/main/java/io/flutter/plugins/googlesignin/Executors.java
index 824c6da..89f5c22 100644
--- a/packages/google_sign_in/google_sign_in_android/android/src/main/java/io/flutter/plugins/googlesignin/Executors.java
+++ b/packages/google_sign_in/google_sign_in_android/android/src/main/java/io/flutter/plugins/googlesignin/Executors.java
@@ -6,6 +6,7 @@
import android.os.Handler;
import android.os.Looper;
+import androidx.annotation.NonNull;
import java.util.concurrent.Executor;
/**
@@ -16,7 +17,7 @@
*/
public final class Executors {
- private static final class UiThreadExecutor implements Executor {
+ static final class UiThreadExecutor implements Executor {
private static final Handler UI_THREAD = new Handler(Looper.getMainLooper());
@Override
@@ -26,7 +27,7 @@
}
/** Returns an {@code Executor} that will post commands to the UI thread. */
- public static Executor uiThreadExecutor() {
+ public static @NonNull Executor uiThreadExecutor() {
return new UiThreadExecutor();
}
diff --git a/packages/google_sign_in/google_sign_in_android/android/src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java b/packages/google_sign_in/google_sign_in_android/android/src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java
index 8963a51..d27cd5e 100644
--- a/packages/google_sign_in/google_sign_in_android/android/src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java
+++ b/packages/google_sign_in/google_sign_in_android/android/src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java
@@ -5,11 +5,13 @@
package io.flutter.plugins.googlesignin;
import android.accounts.Account;
+import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import com.google.android.gms.auth.GoogleAuthUtil;
import com.google.android.gms.auth.UserRecoverableAuthException;
@@ -21,7 +23,6 @@
import com.google.android.gms.common.api.ApiException;
import com.google.android.gms.common.api.CommonStatusCodes;
import com.google.android.gms.common.api.Scope;
-import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.RuntimeExecutionException;
import com.google.android.gms.tasks.Task;
import com.google.common.base.Joiner;
@@ -39,9 +40,9 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
/** Google sign-in plugin for Flutter. */
public class GoogleSignInPlugin implements MethodCallHandler, FlutterPlugin, ActivityAware {
@@ -62,7 +63,8 @@
private ActivityPluginBinding activityPluginBinding;
@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) {
GoogleSignInPlugin instance = new GoogleSignInPlugin();
instance.initInstance(registrar.messenger(), registrar.context(), new GoogleSignInWrapper());
instance.setUpRegistrar(registrar);
@@ -70,7 +72,9 @@
@VisibleForTesting
public void initInstance(
- BinaryMessenger messenger, Context context, GoogleSignInWrapper googleSignInWrapper) {
+ @NonNull BinaryMessenger messenger,
+ @NonNull Context context,
+ @NonNull GoogleSignInWrapper googleSignInWrapper) {
channel = new MethodChannel(messenger, CHANNEL_NAME);
delegate = new Delegate(context, googleSignInWrapper);
channel.setMethodCallHandler(this);
@@ -78,7 +82,7 @@
@VisibleForTesting
@SuppressWarnings("deprecation")
- public void setUpRegistrar(PluginRegistry.Registrar registrar) {
+ public void setUpRegistrar(@NonNull PluginRegistry.Registrar registrar) {
delegate.setUpRegistrar(registrar);
}
@@ -112,7 +116,7 @@
}
@Override
- public void onAttachedToActivity(ActivityPluginBinding activityPluginBinding) {
+ public void onAttachedToActivity(@NonNull ActivityPluginBinding activityPluginBinding) {
attachToActivity(activityPluginBinding);
}
@@ -122,7 +126,8 @@
}
@Override
- public void onReattachedToActivityForConfigChanges(ActivityPluginBinding activityPluginBinding) {
+ public void onReattachedToActivityForConfigChanges(
+ @NonNull ActivityPluginBinding activityPluginBinding) {
attachToActivity(activityPluginBinding);
}
@@ -132,15 +137,16 @@
}
@Override
- public void onMethodCall(MethodCall call, Result result) {
+ public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) {
switch (call.method) {
case METHOD_INIT:
- String signInOption = call.argument("signInOption");
- List<String> requestedScopes = call.argument("scopes");
+ String signInOption = Objects.requireNonNull(call.argument("signInOption"));
+ List<String> requestedScopes = Objects.requireNonNull(call.argument("scopes"));
String hostedDomain = call.argument("hostedDomain");
String clientId = call.argument("clientId");
String serverClientId = call.argument("serverClientId");
- boolean forceCodeForRefreshToken = call.argument("forceCodeForRefreshToken");
+ boolean forceCodeForRefreshToken =
+ Objects.requireNonNull(call.argument("forceCodeForRefreshToken"));
delegate.init(
result,
signInOption,
@@ -160,8 +166,8 @@
break;
case METHOD_GET_TOKENS:
- String email = call.argument("email");
- boolean shouldRecoverAuth = call.argument("shouldRecoverAuth");
+ String email = Objects.requireNonNull(call.argument("email"));
+ boolean shouldRecoverAuth = Objects.requireNonNull(call.argument("shouldRecoverAuth"));
delegate.getTokens(result, email, shouldRecoverAuth);
break;
@@ -170,7 +176,7 @@
break;
case METHOD_CLEAR_AUTH_CACHE:
- String token = call.argument("token");
+ String token = Objects.requireNonNull(call.argument("token"));
delegate.clearAuthCache(result, token);
break;
@@ -183,7 +189,7 @@
break;
case METHOD_REQUEST_SCOPES:
- List<String> scopes = call.argument("scopes");
+ List<String> scopes = Objects.requireNonNull(call.argument("scopes"));
delegate.requestScopes(result, scopes);
break;
@@ -199,26 +205,26 @@
*/
public interface IDelegate {
/** Initializes this delegate so that it is ready to perform other operations. */
- public void init(
- Result result,
- String signInOption,
- List<String> requestedScopes,
- String hostedDomain,
- String clientId,
- String serverClientId,
+ void init(
+ @NonNull Result result,
+ @NonNull String signInOption,
+ @NonNull List<String> requestedScopes,
+ @Nullable String hostedDomain,
+ @Nullable String clientId,
+ @Nullable String serverClientId,
boolean forceCodeForRefreshToken);
/**
* Returns the account information for the user who is signed in to this app. If no user is
* signed in, tries to sign the user in without displaying any user interface.
*/
- public void signInSilently(Result result);
+ void signInSilently(@NonNull Result result);
/**
* Signs the user in via the sign-in user interface, including the OAuth consent flow if scopes
* were requested.
*/
- public void signIn(Result result);
+ void signIn(@NonNull Result result);
/**
* Gets an OAuth access token with the scopes that were specified during initialization for the
@@ -227,28 +233,29 @@
* <p>If shouldRecoverAuth is set to true and user needs to recover authentication for method to
* complete, the method will attempt to recover authentication and rerun method.
*/
- public void getTokens(final Result result, final String email, final boolean shouldRecoverAuth);
+ void getTokens(
+ final @NonNull Result result, final @NonNull String email, final boolean shouldRecoverAuth);
/**
* Clears the token from any client cache forcing the next {@link #getTokens} call to fetch a
* new one.
*/
- public void clearAuthCache(final Result result, final String token);
+ void clearAuthCache(final @NonNull Result result, final @NonNull String token);
/**
* Signs the user out. Their credentials may remain valid, meaning they'll be able to silently
* sign back in.
*/
- public void signOut(Result result);
+ void signOut(@NonNull Result result);
/** Signs the user out, and revokes their credentials. */
- public void disconnect(Result result);
+ void disconnect(@NonNull Result result);
/** Checks if there is a signed in user. */
- public void isSignedIn(Result result);
+ void isSignedIn(@NonNull Result result);
/** Prompts the user to grant an additional Oauth scopes. */
- public void requestScopes(final Result result, final List<String> scopes);
+ void requestScopes(final @NonNull Result result, final @NonNull List<String> scopes);
}
/**
@@ -278,12 +285,12 @@
private static final String DEFAULT_SIGN_IN = "SignInOption.standard";
private static final String DEFAULT_GAMES_SIGN_IN = "SignInOption.games";
- private final Context context;
+ private final @NonNull Context context;
// Only set registrar for v1 embedder.
@SuppressWarnings("deprecation")
private PluginRegistry.Registrar registrar;
// Only set activity for v2 embedder. Always access activity from getActivity() method.
- private Activity activity;
+ private @Nullable Activity activity;
private final BackgroundTaskRunner backgroundTaskRunner = new BackgroundTaskRunner(1);
private final GoogleSignInWrapper googleSignInWrapper;
@@ -291,23 +298,23 @@
private List<String> requestedScopes;
private PendingOperation pendingOperation;
- public Delegate(Context context, GoogleSignInWrapper googleSignInWrapper) {
+ public Delegate(@NonNull Context context, @NonNull GoogleSignInWrapper googleSignInWrapper) {
this.context = context;
this.googleSignInWrapper = googleSignInWrapper;
}
@SuppressWarnings("deprecation")
- public void setUpRegistrar(PluginRegistry.Registrar registrar) {
+ public void setUpRegistrar(@NonNull PluginRegistry.Registrar registrar) {
this.registrar = registrar;
registrar.addActivityResultListener(this);
}
- public void setActivity(Activity activity) {
+ public void setActivity(@Nullable Activity activity) {
this.activity = activity;
}
// Only access activity with this method.
- public Activity getActivity() {
+ public @Nullable Activity getActivity() {
return registrar != null ? registrar.activity() : activity;
}
@@ -329,12 +336,12 @@
*/
@Override
public void init(
- Result result,
- String signInOption,
- List<String> requestedScopes,
- String hostedDomain,
- String clientId,
- String serverClientId,
+ @NonNull Result result,
+ @NonNull String signInOption,
+ @NonNull List<String> requestedScopes,
+ @Nullable String hostedDomain,
+ @Nullable String clientId,
+ @Nullable String serverClientId,
boolean forceCodeForRefreshToken) {
try {
GoogleSignInOptions.Builder optionsBuilder;
@@ -369,6 +376,7 @@
// by the google-services Gradle script.
// TODO(jackson): Perhaps we should provide a mechanism to override this
// behavior.
+ @SuppressLint("DiscouragedApi")
int webClientIdIdentifier =
context
.getResources()
@@ -401,20 +409,14 @@
* signed in, tries to sign the user in without displaying any user interface.
*/
@Override
- public void signInSilently(Result result) {
+ public void signInSilently(@NonNull Result result) {
checkAndSetPendingOperation(METHOD_SIGN_IN_SILENTLY, result);
Task<GoogleSignInAccount> task = signInClient.silentSignIn();
if (task.isComplete()) {
// There's immediate result available.
onSignInResult(task);
} else {
- task.addOnCompleteListener(
- new OnCompleteListener<GoogleSignInAccount>() {
- @Override
- public void onComplete(Task<GoogleSignInAccount> task) {
- onSignInResult(task);
- }
- });
+ task.addOnCompleteListener(this::onSignInResult);
}
}
@@ -423,7 +425,7 @@
* were requested.
*/
@Override
- public void signIn(Result result) {
+ public void signIn(@NonNull Result result) {
if (getActivity() == null) {
throw new IllegalStateException("signIn needs a foreground activity");
}
@@ -438,53 +440,47 @@
* sign back in.
*/
@Override
- public void signOut(Result result) {
+ public void signOut(@NonNull Result result) {
checkAndSetPendingOperation(METHOD_SIGN_OUT, result);
signInClient
.signOut()
.addOnCompleteListener(
- new OnCompleteListener<Void>() {
- @Override
- public void onComplete(Task<Void> task) {
- if (task.isSuccessful()) {
- finishWithSuccess(null);
- } else {
- finishWithError(ERROR_REASON_STATUS, "Failed to signout.");
- }
+ task -> {
+ if (task.isSuccessful()) {
+ finishWithSuccess(null);
+ } else {
+ finishWithError(ERROR_REASON_STATUS, "Failed to signout.");
}
});
}
/** Signs the user out, and revokes their credentials. */
@Override
- public void disconnect(Result result) {
+ public void disconnect(@NonNull Result result) {
checkAndSetPendingOperation(METHOD_DISCONNECT, result);
signInClient
.revokeAccess()
.addOnCompleteListener(
- new OnCompleteListener<Void>() {
- @Override
- public void onComplete(Task<Void> task) {
- if (task.isSuccessful()) {
- finishWithSuccess(null);
- } else {
- finishWithError(ERROR_REASON_STATUS, "Failed to disconnect.");
- }
+ task -> {
+ if (task.isSuccessful()) {
+ finishWithSuccess(null);
+ } else {
+ finishWithError(ERROR_REASON_STATUS, "Failed to disconnect.");
}
});
}
/** Checks if there is a signed in user. */
@Override
- public void isSignedIn(final Result result) {
+ public void isSignedIn(final @NonNull Result result) {
boolean value = GoogleSignIn.getLastSignedInAccount(context) != null;
result.success(value);
}
@Override
- public void requestScopes(Result result, List<String> scopes) {
+ public void requestScopes(@NonNull Result result, @NonNull List<String> scopes) {
checkAndSetPendingOperation(METHOD_REQUEST_SCOPES, result);
GoogleSignInAccount account = googleSignInWrapper.getLastSignedInAccount(context);
@@ -549,7 +545,6 @@
case GoogleSignInStatusCodes.SIGN_IN_FAILED:
case CommonStatusCodes.INVALID_ACCOUNT:
case CommonStatusCodes.INTERNAL_ERROR:
- return ERROR_REASON_SIGN_IN_FAILED;
default:
return ERROR_REASON_SIGN_IN_FAILED;
}
@@ -579,29 +574,24 @@
/** Clears the token kept in the client side cache. */
@Override
- public void clearAuthCache(final Result result, final String token) {
+ public void clearAuthCache(final @NonNull Result result, final @NonNull String token) {
Callable<Void> clearTokenTask =
- new Callable<Void>() {
- @Override
- public Void call() throws Exception {
- GoogleAuthUtil.clearToken(context, token);
- return null;
- }
+ () -> {
+ GoogleAuthUtil.clearToken(context, token);
+ return null;
};
backgroundTaskRunner.runInBackground(
clearTokenTask,
- new BackgroundTaskRunner.Callback<Void>() {
- @Override
- public void run(Future<Void> clearTokenFuture) {
- try {
- result.success(clearTokenFuture.get());
- } catch (ExecutionException e) {
- result.error(ERROR_REASON_EXCEPTION, e.getCause().getMessage(), null);
- } catch (InterruptedException e) {
- result.error(ERROR_REASON_EXCEPTION, e.getMessage(), null);
- Thread.currentThread().interrupt();
- }
+ clearTokenFuture -> {
+ try {
+ result.success(clearTokenFuture.get());
+ } catch (ExecutionException e) {
+ @Nullable Throwable cause = e.getCause();
+ result.error(ERROR_REASON_EXCEPTION, cause == null ? null : cause.getMessage(), null);
+ } catch (InterruptedException e) {
+ result.error(ERROR_REASON_EXCEPTION, e.getMessage(), null);
+ Thread.currentThread().interrupt();
}
});
}
@@ -615,20 +605,14 @@
*/
@Override
public void getTokens(
- final Result result, final String email, final boolean shouldRecoverAuth) {
- if (email == null) {
- result.error(ERROR_REASON_EXCEPTION, "Email is null", null);
- return;
- }
-
+ @NonNull final Result result,
+ @NonNull final String email,
+ final boolean shouldRecoverAuth) {
Callable<String> getTokenTask =
- new Callable<String>() {
- @Override
- public String call() throws Exception {
- Account account = new Account(email, "com.google");
- String scopesStr = "oauth2:" + Joiner.on(' ').join(requestedScopes);
- return GoogleAuthUtil.getToken(context, account, scopesStr);
- }
+ () -> {
+ Account account = new Account(email, "com.google");
+ String scopesStr = "oauth2:" + Joiner.on(' ').join(requestedScopes);
+ return GoogleAuthUtil.getToken(context, account, scopesStr);
};
// Background task runner has a single thread effectively serializing
@@ -636,46 +620,45 @@
// getToken calls are coming in.
backgroundTaskRunner.runInBackground(
getTokenTask,
- new BackgroundTaskRunner.Callback<String>() {
- @Override
- public void run(Future<String> tokenFuture) {
- try {
- String token = tokenFuture.get();
- HashMap<String, String> tokenResult = new HashMap<>();
- tokenResult.put("accessToken", token);
- result.success(tokenResult);
- } catch (ExecutionException e) {
- if (e.getCause() instanceof UserRecoverableAuthException) {
- if (shouldRecoverAuth && pendingOperation == null) {
- Activity activity = getActivity();
- if (activity == null) {
- result.error(
- ERROR_USER_RECOVERABLE_AUTH,
- "Cannot recover auth because app is not in foreground. "
- + e.getLocalizedMessage(),
- null);
- } else {
- checkAndSetPendingOperation(METHOD_GET_TOKENS, result, email);
- Intent recoveryIntent =
- ((UserRecoverableAuthException) e.getCause()).getIntent();
- activity.startActivityForResult(recoveryIntent, REQUEST_CODE_RECOVER_AUTH);
- }
+ tokenFuture -> {
+ try {
+ String token = tokenFuture.get();
+ HashMap<String, String> tokenResult = new HashMap<>();
+ tokenResult.put("accessToken", token);
+ result.success(tokenResult);
+ } catch (ExecutionException e) {
+ if (e.getCause() instanceof UserRecoverableAuthException) {
+ if (shouldRecoverAuth && pendingOperation == null) {
+ Activity activity = getActivity();
+ if (activity == null) {
+ result.error(
+ ERROR_USER_RECOVERABLE_AUTH,
+ "Cannot recover auth because app is not in foreground. "
+ + e.getLocalizedMessage(),
+ null);
} else {
- result.error(ERROR_USER_RECOVERABLE_AUTH, e.getLocalizedMessage(), null);
+ checkAndSetPendingOperation(METHOD_GET_TOKENS, result, email);
+ Intent recoveryIntent =
+ ((UserRecoverableAuthException) e.getCause()).getIntent();
+ activity.startActivityForResult(recoveryIntent, REQUEST_CODE_RECOVER_AUTH);
}
} else {
- result.error(ERROR_REASON_EXCEPTION, e.getCause().getMessage(), null);
+ result.error(ERROR_USER_RECOVERABLE_AUTH, e.getLocalizedMessage(), null);
}
- } catch (InterruptedException e) {
- result.error(ERROR_REASON_EXCEPTION, e.getMessage(), null);
- Thread.currentThread().interrupt();
+ } else {
+ @Nullable Throwable cause = e.getCause();
+ result.error(
+ ERROR_REASON_EXCEPTION, cause == null ? null : cause.getMessage(), null);
}
+ } catch (InterruptedException e) {
+ result.error(ERROR_REASON_EXCEPTION, e.getMessage(), null);
+ Thread.currentThread().interrupt();
}
});
}
@Override
- public boolean onActivityResult(int requestCode, int resultCode, Intent data) {
+ public boolean onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
if (pendingOperation == null) {
return false;
}
diff --git a/packages/google_sign_in/google_sign_in_android/android/src/test/java/io/flutter/plugins/googlesignin/GoogleSignInTest.java b/packages/google_sign_in/google_sign_in_android/android/src/test/java/io/flutter/plugins/googlesignin/GoogleSignInTest.java
index cbd2e40..627ac40 100644
--- a/packages/google_sign_in/google_sign_in_android/android/src/test/java/io/flutter/plugins/googlesignin/GoogleSignInTest.java
+++ b/packages/google_sign_in/google_sign_in_android/android/src/test/java/io/flutter/plugins/googlesignin/GoogleSignInTest.java
@@ -75,7 +75,9 @@
@Test
public void requestScopes_ResultErrorIfAccountIsNull() {
- MethodCall methodCall = new MethodCall("requestScopes", null);
+ HashMap<String, List<String>> arguments = new HashMap<>();
+ arguments.put("scopes", Collections.singletonList("requestedScope"));
+ MethodCall methodCall = new MethodCall("requestScopes", arguments);
when(mockGoogleSignIn.getLastSignedInAccount(mockContext)).thenReturn(null);
plugin.onMethodCall(methodCall, result);
verify(result).error("sign_in_required", "No account to grant scopes.", null);
diff --git a/packages/google_sign_in/google_sign_in_android/lib/google_sign_in_android.dart b/packages/google_sign_in/google_sign_in_android/lib/google_sign_in_android.dart
index 5a2ccab..ce651d7 100644
--- a/packages/google_sign_in/google_sign_in_android/lib/google_sign_in_android.dart
+++ b/packages/google_sign_in/google_sign_in_android/lib/google_sign_in_android.dart
@@ -70,7 +70,7 @@
return channel
.invokeMapMethod<String, dynamic>('getTokens', <String, dynamic>{
'email': email,
- 'shouldRecoverAuth': shouldRecoverAuth,
+ 'shouldRecoverAuth': shouldRecoverAuth ?? true,
}).then((Map<String, dynamic>? result) => getTokenDataFromMap(result!));
}
diff --git a/packages/google_sign_in/google_sign_in_android/pubspec.yaml b/packages/google_sign_in/google_sign_in_android/pubspec.yaml
index b6e892f..921e7f1 100644
--- a/packages/google_sign_in/google_sign_in_android/pubspec.yaml
+++ b/packages/google_sign_in/google_sign_in_android/pubspec.yaml
@@ -2,7 +2,7 @@
description: Android implementation of the google_sign_in plugin.
repository: https://github.com/flutter/packages/tree/main/packages/google_sign_in/google_sign_in_android
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+google_sign_in%22
-version: 6.1.10
+version: 6.1.11
environment:
sdk: ">=2.17.0 <4.0.0"
diff --git a/packages/google_sign_in/google_sign_in_android/test/google_sign_in_android_test.dart b/packages/google_sign_in/google_sign_in_android/test/google_sign_in_android_test.dart
index b70d2e7..671d768 100644
--- a/packages/google_sign_in/google_sign_in_android/test/google_sign_in_android_test.dart
+++ b/packages/google_sign_in/google_sign_in_android/test/google_sign_in_android_test.dart
@@ -103,6 +103,17 @@
}));
});
+ test('getTokens will not pass null for shouldRecoverAuth', () async {
+ await googleSignIn.getTokens(
+ email: 'example@example.com', shouldRecoverAuth: null);
+ expect(
+ log[0],
+ isMethodCall('getTokens', arguments: <String, dynamic>{
+ 'email': 'example@example.com',
+ 'shouldRecoverAuth': true,
+ }));
+ });
+
test('Other functions pass through arguments to the channel', () async {
final Map<void Function(), Matcher> tests = <void Function(), Matcher>{
() {