diff --git a/packages/image_picker/image_picker_android/CHANGELOG.md b/packages/image_picker/image_picker_android/CHANGELOG.md index 654a05fb25bb..b0a583f27846 100644 --- a/packages/image_picker/image_picker_android/CHANGELOG.md +++ b/packages/image_picker/image_picker_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.6+14 + +* Fixes Java warnings. + ## 0.8.6+13 * Fixes `BuildContext` handling in example. diff --git a/packages/image_picker/image_picker_android/android/build.gradle b/packages/image_picker/image_picker_android/android/build.gradle index 08b4bb3b4d05..367aa853247e 100644 --- a/packages/image_picker/image_picker_android/android/build.gradle +++ b/packages/image_picker/image_picker_android/android/build.gradle @@ -36,7 +36,6 @@ android { checkAllWarnings true warningsAsErrors true disable 'AndroidGradlePluginVersion', 'InvalidPackage', 'GradleDependency' - baseline file("lint-baseline.xml") } dependencies { implementation 'androidx.core:core:1.9.0' diff --git a/packages/image_picker/image_picker_android/android/lint-baseline.xml b/packages/image_picker/image_picker_android/android/lint-baseline.xml deleted file mode 100644 index 765a6ca914b7..000000000000 --- a/packages/image_picker/image_picker_android/android/lint-baseline.xml +++ /dev/null @@ -1,400 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerDelegate.java b/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerDelegate.java index 6aa1181ce908..423088590531 100644 --- a/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerDelegate.java +++ b/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerDelegate.java @@ -95,7 +95,7 @@ private static class PendingCallState { public final @Nullable VideoSelectionOptions videoOptions; public final @NonNull Messages.Result> result; - private PendingCallState( + PendingCallState( @Nullable ImageSelectionOptions imageOptions, @Nullable VideoSelectionOptions videoOptions, @NonNull Messages.Result> result) { @@ -107,10 +107,10 @@ private PendingCallState( @VisibleForTesting final String fileProviderName; - private final Activity activity; - @VisibleForTesting final File externalFilesDirectory; - private final ImageResizer imageResizer; - private final ImagePickerCache cache; + private final @NonNull Activity activity; + @VisibleForTesting final @NonNull File externalFilesDirectory; + private final @NonNull ImageResizer imageResizer; + private final @NonNull ImagePickerCache cache; private final PermissionManager permissionManager; private final FileUriResolver fileUriResolver; private final FileUtils fileUtils; @@ -140,10 +140,10 @@ interface OnPathReadyListener { private final Object pendingCallStateLock = new Object(); public ImagePickerDelegate( - final Activity activity, - final File externalFilesDirectory, - final ImageResizer imageResizer, - final ImagePickerCache cache) { + final @NonNull Activity activity, + final @NonNull File externalFilesDirectory, + final @NonNull ImageResizer imageResizer, + final @NonNull ImagePickerCache cache) { this( activity, externalFilesDirectory, @@ -181,12 +181,7 @@ public void getFullImagePath(final Uri imageUri, final OnPathReadyListener liste activity, new String[] {(imageUri != null) ? imageUri.getPath() : ""}, null, - new MediaScannerConnection.OnScanCompletedListener() { - @Override - public void onScanCompleted(String path, Uri uri) { - listener.onPathReady(path); - } - }); + (path, uri) -> listener.onPathReady(path)); } }, new FileUtils(), @@ -199,13 +194,13 @@ public void onScanCompleted(String path, Uri uri) { */ @VisibleForTesting ImagePickerDelegate( - final Activity activity, - final File externalFilesDirectory, - final ImageResizer imageResizer, + final @NonNull Activity activity, + final @NonNull File externalFilesDirectory, + final @NonNull ImageResizer imageResizer, final @Nullable ImageSelectionOptions pendingImageOptions, final @Nullable VideoSelectionOptions pendingVideoOptions, final @Nullable Messages.Result> result, - final ImagePickerCache cache, + final @NonNull ImagePickerCache cache, final PermissionManager permissionManager, final FileUriResolver fileUriResolver, final FileUtils fileUtils, @@ -290,7 +285,9 @@ Messages.CacheRetrievalResult retrieveLostImage() { } public void chooseVideoFromGallery( - VideoSelectionOptions options, boolean usePhotoPicker, Messages.Result> result) { + @NonNull VideoSelectionOptions options, + boolean usePhotoPicker, + @NonNull Messages.Result> result) { if (!setPendingOptionsAndResult(null, options, result)) { finishWithAlreadyActiveError(result); return; @@ -318,7 +315,7 @@ private void launchPickVideoFromGalleryIntent(Boolean useAndroidPhotoPicker) { } public void takeVideoWithCamera( - VideoSelectionOptions options, Messages.Result> result) { + @NonNull VideoSelectionOptions options, @NonNull Messages.Result> result) { if (!setPendingOptionsAndResult(null, options, result)) { finishWithAlreadyActiveError(result); return; @@ -376,7 +373,7 @@ private void launchTakeVideoWithCameraIntent() { public void chooseImageFromGallery( @NonNull ImageSelectionOptions options, boolean usePhotoPicker, - Messages.Result> result) { + @NonNull Messages.Result> result) { if (!setPendingOptionsAndResult(options, null, result)) { finishWithAlreadyActiveError(result); return; @@ -388,7 +385,7 @@ public void chooseImageFromGallery( public void chooseMultiImageFromGallery( @NonNull ImageSelectionOptions options, boolean usePhotoPicker, - Messages.Result> result) { + @NonNull Messages.Result> result) { if (!setPendingOptionsAndResult(options, null, result)) { finishWithAlreadyActiveError(result); return; @@ -436,7 +433,7 @@ private void launchMultiPickImageFromGalleryIntent(Boolean useAndroidPhotoPicker } public void takeImageWithCamera( - @NonNull ImageSelectionOptions options, Messages.Result> result) { + @NonNull ImageSelectionOptions options, @NonNull Messages.Result> result) { if (!setPendingOptionsAndResult(options, null, result)) { finishWithAlreadyActiveError(result); return; @@ -556,7 +553,8 @@ public boolean onRequestPermissionsResult( } @Override - public boolean onActivityResult(final int requestCode, final int resultCode, final Intent data) { + public boolean onActivityResult( + final int requestCode, final int resultCode, final @Nullable Intent data) { Runnable handlerRunnable; switch (requestCode) { @@ -605,7 +603,7 @@ private void handleChooseMultiImageResult(int resultCode, Intent intent) { } else { paths.add(fileUtils.getPathFromUri(activity, intent.getData())); } - handleMultiImageResult(paths, false); + handleMultiImageResult(paths); return; } @@ -632,12 +630,7 @@ private void handleCaptureImageResult(int resultCode) { localPendingCameraMediaUri != null ? localPendingCameraMediaUri : Uri.parse(cache.retrievePendingCameraMediaUriPath()), - new OnPathReadyListener() { - @Override - public void onPathReady(String path) { - handleImageResult(path, true); - } - }); + path -> handleImageResult(path, true)); return; } @@ -652,12 +645,7 @@ private void handleCaptureVideoResult(int resultCode) { localPendingCameraMediaUrl != null ? localPendingCameraMediaUrl : Uri.parse(cache.retrievePendingCameraMediaUriPath()), - new OnPathReadyListener() { - @Override - public void onPathReady(String path) { - handleVideoResult(path); - } - }); + this::handleVideoResult); return; } @@ -665,8 +653,7 @@ public void onPathReady(String path) { finishWithSuccess(null); } - private void handleMultiImageResult( - ArrayList paths, boolean shouldDeleteOriginalIfScaled) { + private void handleMultiImageResult(ArrayList paths) { ImageSelectionOptions localImageOptions = null; synchronized (pendingCallStateLock) { if (pendingCallState != null) { @@ -678,13 +665,6 @@ private void handleMultiImageResult( ArrayList finalPath = new ArrayList<>(); for (int i = 0; i < paths.size(); i++) { String finalImagePath = getResizedImagePath(paths.get(i), localImageOptions); - - //delete original file if scaled - if (finalImagePath != null - && !finalImagePath.equals(paths.get(i)) - && shouldDeleteOriginalIfScaled) { - new File(paths.get(i)).delete(); - } finalPath.add(i, finalImagePath); } finishWithListSuccess(finalPath); @@ -693,7 +673,7 @@ private void handleMultiImageResult( } } - private void handleImageResult(String path, boolean shouldDeleteOriginalIfScaled) { + void handleImageResult(String path, boolean shouldDeleteOriginalIfScaled) { ImageSelectionOptions localImageOptions = null; synchronized (pendingCallStateLock) { if (pendingCallState != null) { @@ -721,7 +701,7 @@ private String getResizedImagePath(String path, @NonNull ImageSelectionOptions o outputOptions.getQuality().intValue()); } - private void handleVideoResult(String path) { + void handleVideoResult(String path) { finishWithSuccess(path); } diff --git a/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerPlugin.java b/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerPlugin.java index cbf52bd07782..330759208381 100644 --- a/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerPlugin.java +++ b/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerPlugin.java @@ -176,20 +176,18 @@ ImagePickerDelegate getDelegate() { } private FlutterPluginBinding pluginBinding; - private ActivityState activityState; + ActivityState activityState; @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) { if (registrar.activity() == null) { // If a background flutter view tries to register the plugin, there will be no activity from the registrar, // we stop the registering process immediately because the ImagePicker requires an activity. return; } Activity activity = registrar.activity(); - Application application = null; - if (registrar.context() != null) { - application = (Application) (registrar.context().getApplicationContext()); - } + Application application = (Application) (registrar.context().getApplicationContext()); ImagePickerPlugin plugin = new ImagePickerPlugin(); plugin.setup(registrar.messenger(), application, activity, registrar, null); } @@ -305,7 +303,7 @@ public void pickImages( @NonNull Messages.ImageSelectionOptions options, @NonNull Boolean allowMultiple, @NonNull Boolean usePhotoPicker, - Result> result) { + @NonNull Result> result) { ImagePickerDelegate delegate = getImagePickerDelegate(); if (delegate == null) { result.error( @@ -335,7 +333,7 @@ public void pickVideos( @NonNull Messages.VideoSelectionOptions options, @NonNull Boolean allowMultiple, @NonNull Boolean usePhotoPicker, - Result> result) { + @NonNull Result> result) { ImagePickerDelegate delegate = getImagePickerDelegate(); if (delegate == null) { result.error( diff --git a/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/Messages.java b/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/Messages.java index af98078c673c..accf64b7e734 100644 --- a/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/Messages.java +++ b/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/Messages.java @@ -1,7 +1,7 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v9.1.0), do not edit directly. +// Autogenerated from Pigeon (v9.2.5), do not edit directly. // See also: https://pub.dev/packages/pigeon package io.flutter.plugins.imagepicker; @@ -39,7 +39,7 @@ public FlutterError(@NonNull String code, @Nullable String message, @Nullable Ob } @NonNull - private static ArrayList wrapError(@NonNull Throwable exception) { + protected static ArrayList wrapError(@NonNull Throwable exception) { ArrayList errorList = new ArrayList(3); if (exception instanceof FlutterError) { FlutterError error = (FlutterError) exception; @@ -59,7 +59,7 @@ public enum SourceCamera { REAR(0), FRONT(1); - private final int index; + final int index; private SourceCamera(final int index) { this.index = index; @@ -70,7 +70,7 @@ public enum SourceType { CAMERA(0), GALLERY(1); - private final int index; + final int index; private SourceType(final int index) { this.index = index; @@ -81,7 +81,7 @@ public enum CacheRetrievalType { IMAGE(0), VIDEO(1); - private final int index; + final int index; private CacheRetrievalType(final int index) { this.index = index; @@ -134,8 +134,8 @@ public void setQuality(@NonNull Long setterArg) { this.quality = setterArg; } - /** Constructor is private to enforce null safety; use Builder. */ - private ImageSelectionOptions() {} + /** Constructor is non-public to enforce null safety; use Builder. */ + ImageSelectionOptions() {} public static final class Builder { @@ -275,8 +275,8 @@ public void setCamera(@Nullable SourceCamera setterArg) { this.camera = setterArg; } - /** Constructor is private to enforce null safety; use Builder. */ - private SourceSpecification() {} + /** Constructor is non-public to enforce null safety; use Builder. */ + SourceSpecification() {} public static final class Builder { @@ -351,8 +351,8 @@ public void setMessage(@Nullable String setterArg) { this.message = setterArg; } - /** Constructor is private to enforce null safety; use Builder. */ - private CacheRetrievalError() {} + /** Constructor is non-public to enforce null safety; use Builder. */ + CacheRetrievalError() {} public static final class Builder { @@ -446,8 +446,8 @@ public void setPaths(@NonNull List setterArg) { this.paths = setterArg; } - /** Constructor is private to enforce null safety; use Builder. */ - private CacheRetrievalResult() {} + /** Constructor is non-public to enforce null safety; use Builder. */ + CacheRetrievalResult() {} public static final class Builder { @@ -504,9 +504,10 @@ ArrayList toList() { } public interface Result { + @SuppressWarnings("UnknownNullness") void success(T result); - void error(Throwable error); + void error(@NonNull Throwable error); } private static class ImagePickerApiCodec extends StandardMessageCodec { @@ -568,7 +569,7 @@ void pickImages( @NonNull ImageSelectionOptions options, @NonNull Boolean allowMultiple, @NonNull Boolean usePhotoPicker, - Result> result); + @NonNull Result> result); /** * Selects video and returns their paths. * @@ -580,17 +581,17 @@ void pickVideos( @NonNull VideoSelectionOptions options, @NonNull Boolean allowMultiple, @NonNull Boolean usePhotoPicker, - Result> result); + @NonNull Result> result); /** Returns results from a previous app session, if any. */ @Nullable CacheRetrievalResult retrieveLostResults(); /** The codec used by ImagePickerApi. */ - static MessageCodec getCodec() { + static @NonNull MessageCodec getCodec() { return ImagePickerApiCodec.INSTANCE; } /** Sets up an instance of `ImagePickerApi` to handle messages through the `binaryMessenger`. */ - static void setup(BinaryMessenger binaryMessenger, ImagePickerApi api) { + static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImagePickerApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( diff --git a/packages/image_picker/image_picker_android/lib/src/messages.g.dart b/packages/image_picker/image_picker_android/lib/src/messages.g.dart index c0506ad4daec..a4f15c847559 100644 --- a/packages/image_picker/image_picker_android/lib/src/messages.g.dart +++ b/packages/image_picker/image_picker_android/lib/src/messages.g.dart @@ -1,7 +1,7 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v9.1.0), do not edit directly. +// Autogenerated from Pigeon (v9.2.5), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import diff --git a/packages/image_picker/image_picker_android/pubspec.yaml b/packages/image_picker/image_picker_android/pubspec.yaml index da3f36401814..b259ab809b69 100755 --- a/packages/image_picker/image_picker_android/pubspec.yaml +++ b/packages/image_picker/image_picker_android/pubspec.yaml @@ -3,7 +3,7 @@ description: Android implementation of the image_picker plugin. repository: https://github.com/flutter/packages/tree/main/packages/image_picker/image_picker_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+image_picker%22 -version: 0.8.6+13 +version: 0.8.6+14 environment: sdk: ">=2.18.0 <4.0.0" @@ -28,4 +28,4 @@ dev_dependencies: flutter_test: sdk: flutter mockito: 5.4.0 - pigeon: ^9.1.0 + pigeon: ^9.2.5 diff --git a/packages/image_picker/image_picker_android/test/test_api.g.dart b/packages/image_picker/image_picker_android/test/test_api.g.dart index aa5c38f52eb1..dbb6b143a91d 100644 --- a/packages/image_picker/image_picker_android/test/test_api.g.dart +++ b/packages/image_picker/image_picker_android/test/test_api.g.dart @@ -1,7 +1,7 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v9.1.0), do not edit directly. +// Autogenerated from Pigeon (v9.2.5), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, unnecessary_import // ignore_for_file: avoid_relative_lib_imports @@ -57,6 +57,8 @@ class _TestHostImagePickerApiCodec extends StandardMessageCodec { } abstract class TestHostImagePickerApi { + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = _TestHostImagePickerApiCodec(); /// Selects images and returns their paths. @@ -83,9 +85,12 @@ abstract class TestHostImagePickerApi { 'dev.flutter.pigeon.ImagePickerApi.pickImages', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.ImagePickerApi.pickImages was null.'); final List args = (message as List?)!; @@ -114,9 +119,12 @@ abstract class TestHostImagePickerApi { 'dev.flutter.pigeon.ImagePickerApi.pickVideos', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.ImagePickerApi.pickVideos was null.'); final List args = (message as List?)!; @@ -145,9 +153,12 @@ abstract class TestHostImagePickerApi { 'dev.flutter.pigeon.ImagePickerApi.retrieveLostResults', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { // ignore message final CacheRetrievalResult? output = api.retrieveLostResults(); return [output];