Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.

[share] MethodCallHandler.java uses unchecked or unsafe operations #3004

Merged
merged 14 commits into from
Sep 17, 2020
Merged

[share] MethodCallHandler.java uses unchecked or unsafe operations #3004

merged 14 commits into from
Sep 17, 2020

Conversation

hamdikahloun
Copy link
Member

@hamdikahloun hamdikahloun commented Sep 7, 2020

Description

  • Handle deprecation & unchecked warning as error

  • Avoiding uses unchecked or unsafe Object Type Casting in MethodCallHandler.java

Related issue : flutter/flutter#65970
A message is displayed when building for android:

flutter build apk
You are building a fat APK that includes binaries for android-arm, android-arm64, android-x64.
If you are deploying the app to the Play Store, it's recommended to use app bundles or split the APK to reduce the APK
size.
    To generate an app bundle, run:
        flutter build appbundle --target-platform android-arm,android-arm64,android-x64
        Learn more on: https://developer.android.com/guide/app-bundle
    To split the APKs per ABI, run:
        flutter build apk --target-platform android-arm,android-arm64,android-x64 --split-per-abi
        Learn more on:  https://developer.android.com/studio/build/configure-apk-splits#configure-abi-split
Note: C:\Users\hamdi\Downloads\plugins-master\packages\share\android\src\main\java\io\flutter\plugins\share\MethodCallHandler.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
Removed unused resources: Binary resource data reduced from 46KB to 37KB: Removed 20%
Running Gradle task 'assembleRelease'...
Running Gradle task 'assembleRelease'... Done                     107,9s
√ Built build\app\outputs\flutter-apk\app-release.apk (16.3MB).
flutter build appbundle
Running "flutter pub get" in example...                             0,8s
Note: C:\Users\hamdi\Downloads\plugins-master\packages\share\android\src\main\java\io\flutter\plugins\share\MethodCallHandler.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
Removed unused resources: Binary resource data reduced from 36KB to 22KB: Removed 39%
Running Gradle task 'bundleRelease'...
Running Gradle task 'bundleRelease'... Done                        60,2s
√ Built build\app\outputs\bundle\release\app.aab (16.4MB).

Checklist

Before you create this PR confirm that it meets all requirements listed below by checking the relevant checkboxes ([x]). This will ensure a smooth and quick review process.

  • I read the Contributor Guide and followed the process outlined there for submitting PRs.
  • My PR includes unit or integration tests for all changed/updated/fixed behaviors (See Contributor Guide).
  • All existing and new tests are passing.
  • I updated/added relevant documentation (doc comments with ///).
  • The analyzer (flutter analyze) does not report any problems on my PR.
  • I read and followed the Flutter Style Guide.
  • The title of the PR starts with the name of the plugin surrounded by square brackets, e.g. [shared_preferences]
  • I updated pubspec.yaml with an appropriate new version according to the pub versioning philosophy.
  • I updated CHANGELOG.md to add a description of the change.
  • I signed the CLA.
  • I am willing to follow-up on review comments in a timely manner.

Breaking Change

Does your PR require plugin users to manually update their apps to accommodate your change?

  • Yes, this is a breaking change (please indicate a breaking change in CHANGELOG.md and increment major revision).
  • No, this is not a breaking change.

@hamdikahloun
Copy link
Member Author

Hi @cyanglaz
Can you review this PR please.
Thanks

@pingbird
Copy link
Member

I'm confused, what issue does this solve exactly?

@hamdikahloun
Copy link
Member Author

hamdikahloun commented Sep 10, 2020

Hi @PixelToast

A message is displayed when building for android:

flutter build apk
You are building a fat APK that includes binaries for android-arm, android-arm64, android-x64.
If you are deploying the app to the Play Store, it's recommended to use app bundles or split the APK to reduce the APK
size.
    To generate an app bundle, run:
        flutter build appbundle --target-platform android-arm,android-arm64,android-x64
        Learn more on: https://developer.android.com/guide/app-bundle
    To split the APKs per ABI, run:
        flutter build apk --target-platform android-arm,android-arm64,android-x64 --split-per-abi
        Learn more on:  https://developer.android.com/studio/build/configure-apk-splits#configure-abi-split
Note: C:\Users\hamdi\Downloads\plugins-master\packages\share\android\src\main\java\io\flutter\plugins\share\MethodCallHandler.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
Removed unused resources: Binary resource data reduced from 46KB to 37KB: Removed 20%
Running Gradle task 'assembleRelease'...
Running Gradle task 'assembleRelease'... Done                     107,9s
√ Built build\app\outputs\flutter-apk\app-release.apk (16.3MB).
flutter build appbundle
Running "flutter pub get" in example...                             0,8s
Note: C:\Users\hamdi\Downloads\plugins-master\packages\share\android\src\main\java\io\flutter\plugins\share\MethodCallHandler.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
Removed unused resources: Binary resource data reduced from 36KB to 22KB: Removed 39%
Running Gradle task 'bundleRelease'...
Running Gradle task 'bundleRelease'... Done                        60,2s
√ Built build\app\outputs\bundle\release\app.aab (16.4MB).

@pingbird
Copy link
Member

Ah, I understand the concern, thanks for the PR!

Why not use the generic type parameter of MethodCall.argument to do the casting? Serializing and deserializing definitely isn't the right approach in my opinion.

@hamdikahloun
Copy link
Member Author

hamdikahloun commented Sep 10, 2020

@PixelToast

(List<String>) call.argument("paths")

Casting Argument to Object will be fine but Casting to List it's unsafe operation.

@pingbird
Copy link
Member

I don't have a dev environment available at the moment, but would call.argument<List<String>>("paths") work instead of (List<String>) call.argument("paths")?
Before I was referring to https://api.flutter.dev/javadoc/io/flutter/plugin/common/MethodCall.html#argument-java.lang.String- which shows that the argument method is generic.

@hamdikahloun
Copy link
Member Author

hamdikahloun commented Sep 10, 2020

Thank you for your reply @PixelToast 🥇
i just checked the function argument in MethodCall class and it's so easy !
So why the Object Casting ?

I just pushed the new code

List<String> paths = call.argument("paths");
List<String> mimeTypes = call.argument("mimeTypes");
String text = call.argument("text");
String subject = call.argument("subject");

share.shareFiles(paths, mimeTypes, text, subject);

Comment on lines 40 to 43
paths = call.argument("paths");
mimeTypes = call.argument("mimeTypes");
text = call.argument("text");
subject = call.argument("subject");
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: move this out of the try block

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@dnfield PR updated . Thank you

@@ -21,23 +21,27 @@

@Override
public void onMethodCall(MethodCall call, MethodChannel.Result result) {
String text, subject;
List<String> paths, mimeTypes;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: move to "shareFiles" case, since that's the only place it's used.

Also for these, please use one var per declaration, per https://google.github.io/styleguide/javaguide.html#s4.8.2-variable-declarations

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@dnfield PR updated . Thank you

Comment on lines 24 to 25
String text;
String subject;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry for not saying this on the last round, but I think this is going to be a bit more readable if we don't declare these up here, since we don't expect to use them again outside of the block. We can just do String text = and String subject = in the cases that need them.

Copy link
Contributor

@dnfield dnfield left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@dnfield dnfield merged commit 17d7548 into flutter:master Sep 17, 2020
danielroek pushed a commit to Baseflow/flutter-plugins that referenced this pull request Sep 18, 2020
jorgefspereira pushed a commit to jorgefspereira/plugins_flutter that referenced this pull request Oct 10, 2020
FlutterSu pushed a commit to FlutterSu/flutter-plugins that referenced this pull request Nov 20, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants