From 9d997bb3cc86b09f17fedfdca2128833d540b201 Mon Sep 17 00:00:00 2001 From: Christopher Fujino Date: Wed, 28 Oct 2020 11:39:13 -0700 Subject: [PATCH 1/6] Update 1.22 engine to use Dart 2.10.3 --- DEPS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DEPS b/DEPS index ddc9f7be2fa0b..e10de2a338be4 100644 --- a/DEPS +++ b/DEPS @@ -34,7 +34,7 @@ vars = { # Dart is: https://github.com/dart-lang/sdk/blob/master/DEPS. # You can use //tools/dart/create_updated_flutter_deps.py to produce # updated revision list of existing dependencies. - 'dart_revision': '1d923a386d7a9f384435a2b4c1287b2937504566', + 'dart_revision': 'ecf9ce8ef42de11033801b2870e8b310c3722902', # WARNING: DO NOT EDIT MANUALLY # The lines between blank lines above and below are generated by a script. See create_updated_flutter_deps.py From 6129c467a29ce022bf1be8b400fbab026e45d08f Mon Sep 17 00:00:00 2001 From: Hamdi Kahloun <32666446+hamdikahloun@users.noreply.github.com> Date: Thu, 8 Oct 2020 22:36:51 +0100 Subject: [PATCH 2/6] SecurityException: Permission Denial (#21290) Fix `java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider` Fixes flutter/flutter#66108 Co-authored-by: Dan Field --- .../plugin/platform/PlatformPlugin.java | 29 ++++++++++-- .../plugin/platform/PlatformPluginTest.java | 47 +++++++++++++++++++ 2 files changed, 72 insertions(+), 4 deletions(-) diff --git a/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java b/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java index cc87aa2eaf254..2c9758c75a908 100644 --- a/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java +++ b/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java @@ -17,7 +17,9 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; +import io.flutter.Log; import io.flutter.embedding.engine.systemchannels.PlatformChannel; +import java.io.FileNotFoundException; import java.util.List; /** Android implementation of the platform plugin. */ @@ -29,6 +31,7 @@ public class PlatformPlugin { private final PlatformChannel platformChannel; private PlatformChannel.SystemChromeStyle currentTheme; private int mEnabledOverlays; + private static final String TAG = "PlatformPlugin"; @VisibleForTesting final PlatformChannel.PlatformMessageHandler mPlatformMessageHandler = @@ -280,11 +283,29 @@ private void popSystemNavigator() { private CharSequence getClipboardData(PlatformChannel.ClipboardContentFormat format) { ClipboardManager clipboard = (ClipboardManager) activity.getSystemService(Context.CLIPBOARD_SERVICE); - ClipData clip = clipboard.getPrimaryClip(); - if (clip == null) return null; - if (format == null || format == PlatformChannel.ClipboardContentFormat.PLAIN_TEXT) { - return clip.getItemAt(0).coerceToText(activity); + if (!clipboard.hasPrimaryClip()) return null; + + try { + ClipData clip = clipboard.getPrimaryClip(); + if (clip == null) return null; + if (format == null || format == PlatformChannel.ClipboardContentFormat.PLAIN_TEXT) { + ClipData.Item item = clip.getItemAt(0); + if (item.getUri() != null) + activity.getContentResolver().openTypedAssetFileDescriptor(item.getUri(), "text/*", null); + return item.coerceToText(activity); + } + } catch (SecurityException e) { + Log.w( + TAG, + "Attempted to get clipboard data that requires additional permission(s).\n" + + "See the exception details for which permission(s) are required, and consider adding them to your Android Manifest as described in:\n" + + "https://developer.android.com/guide/topics/permissions/overview", + e); + return null; + } catch (FileNotFoundException e) { + return null; +>>>>>>> b2ace0ccc (SecurityException: Permission Denial (#21290)) } return null; diff --git a/shell/platform/android/test/io/flutter/plugin/platform/PlatformPluginTest.java b/shell/platform/android/test/io/flutter/plugin/platform/PlatformPluginTest.java index 355ec4e9ea5ee..398df2eaabed1 100644 --- a/shell/platform/android/test/io/flutter/plugin/platform/PlatformPluginTest.java +++ b/shell/platform/android/test/io/flutter/plugin/platform/PlatformPluginTest.java @@ -1,5 +1,6 @@ package io.flutter.plugin.platform; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; @@ -7,10 +8,17 @@ import android.app.Activity; import android.content.ClipboardManager; +import android.content.ContentResolver; import android.content.Context; +import android.media.RingtoneManager; +import android.net.Uri; import android.view.View; import android.view.Window; import io.flutter.embedding.engine.systemchannels.PlatformChannel; +import io.flutter.embedding.engine.systemchannels.PlatformChannel.ClipboardContentFormat; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; @@ -38,6 +46,45 @@ public void itIgnoresNewHapticEventsOnOldAndroidPlatforms() { platformPlugin.vibrateHapticFeedback(PlatformChannel.HapticFeedbackType.SELECTION_CLICK); } + @Config(sdk = 29) + @Test + public void platformPlugin_getClipboardData() throws IOException { + ClipboardManager clipboardManager = + RuntimeEnvironment.application.getSystemService(ClipboardManager.class); + + View fakeDecorView = mock(View.class); + Window fakeWindow = mock(Window.class); + when(fakeWindow.getDecorView()).thenReturn(fakeDecorView); + Activity fakeActivity = mock(Activity.class); + when(fakeActivity.getWindow()).thenReturn(fakeWindow); + when(fakeActivity.getSystemService(Context.CLIPBOARD_SERVICE)).thenReturn(clipboardManager); + PlatformChannel fakePlatformChannel = mock(PlatformChannel.class); + PlatformPlugin platformPlugin = new PlatformPlugin(fakeActivity, fakePlatformChannel); + + ClipboardContentFormat clipboardFormat = ClipboardContentFormat.PLAIN_TEXT; + assertNull(platformPlugin.mPlatformMessageHandler.getClipboardData(clipboardFormat)); + ClipData clip = ClipData.newPlainText("label", "Text"); + clipboardManager.setPrimaryClip(clip); + assertNotNull(platformPlugin.mPlatformMessageHandler.getClipboardData(clipboardFormat)); + + ContentResolver contentResolver = RuntimeEnvironment.application.getContentResolver(); + Uri uri = Uri.parse("content://media/external_primary/images/media/"); + clip = ClipData.newUri(contentResolver, "URI", uri); + clipboardManager.setPrimaryClip(clip); + assertNull(platformPlugin.mPlatformMessageHandler.getClipboardData(clipboardFormat)); + + uri = + RingtoneManager.getActualDefaultRingtoneUri( + RuntimeEnvironment.application.getApplicationContext(), RingtoneManager.TYPE_RINGTONE); + clip = ClipData.newUri(contentResolver, "URI", uri); + clipboardManager.setPrimaryClip(clip); + String uriData = + platformPlugin.mPlatformMessageHandler.getClipboardData(clipboardFormat).toString(); + InputStream uriInputStream = contentResolver.openInputStream(uri); + InputStream dataInputStream = new ByteArrayInputStream(uriData.getBytes()); + assertEquals(dataInputStream.read(), uriInputStream.read()); + } + @Test public void platformPlugin_hasStrings() { ClipboardManager clipboardManager = From 7edacffee10838405aef5eea08a23dec56608ffd Mon Sep 17 00:00:00 2001 From: Christopher Fujino Date: Wed, 28 Oct 2020 12:20:52 -0700 Subject: [PATCH 3/6] fix bad merge --- .../android/io/flutter/plugin/platform/PlatformPlugin.java | 1 - 1 file changed, 1 deletion(-) diff --git a/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java b/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java index 2c9758c75a908..3f18d9472ede5 100644 --- a/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java +++ b/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java @@ -305,7 +305,6 @@ private CharSequence getClipboardData(PlatformChannel.ClipboardContentFormat for return null; } catch (FileNotFoundException e) { return null; ->>>>>>> b2ace0ccc (SecurityException: Permission Denial (#21290)) } return null; From 1b5f05b85fd660421c4e1a32c52722e6870fe9ba Mon Sep 17 00:00:00 2001 From: Christopher Fujino Date: Wed, 28 Oct 2020 13:16:44 -0700 Subject: [PATCH 4/6] import assertNull --- .../test/io/flutter/plugin/platform/PlatformPluginTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/shell/platform/android/test/io/flutter/plugin/platform/PlatformPluginTest.java b/shell/platform/android/test/io/flutter/plugin/platform/PlatformPluginTest.java index 398df2eaabed1..62e6b4b80a143 100644 --- a/shell/platform/android/test/io/flutter/plugin/platform/PlatformPluginTest.java +++ b/shell/platform/android/test/io/flutter/plugin/platform/PlatformPluginTest.java @@ -2,6 +2,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; From b0e44f16a5f08b9fcc6e4cbbd38ecf5a702e9a22 Mon Sep 17 00:00:00 2001 From: Christopher Fujino Date: Wed, 28 Oct 2020 13:31:29 -0700 Subject: [PATCH 5/6] fix two additional imports --- .../test/io/flutter/plugin/platform/PlatformPluginTest.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/shell/platform/android/test/io/flutter/plugin/platform/PlatformPluginTest.java b/shell/platform/android/test/io/flutter/plugin/platform/PlatformPluginTest.java index 62e6b4b80a143..8c869838c34b4 100644 --- a/shell/platform/android/test/io/flutter/plugin/platform/PlatformPluginTest.java +++ b/shell/platform/android/test/io/flutter/plugin/platform/PlatformPluginTest.java @@ -2,12 +2,14 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import android.app.Activity; +import android.content.ClipData; import android.content.ClipboardManager; import android.content.ContentResolver; import android.content.Context; From 383d0ea2377e3f16dec976172391ee82a35d232d Mon Sep 17 00:00:00 2001 From: Christopher Fujino Date: Wed, 28 Oct 2020 13:53:32 -0700 Subject: [PATCH 6/6] update licenses golden --- ci/licenses_golden/licenses_third_party | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/licenses_golden/licenses_third_party b/ci/licenses_golden/licenses_third_party index 7324f83075dc8..8f3f3360d00a4 100644 --- a/ci/licenses_golden/licenses_third_party +++ b/ci/licenses_golden/licenses_third_party @@ -1,4 +1,4 @@ -Signature: fcda8704ef65a785787b4045cbe4f432 +Signature: 35f962fd83423ee7de3761729e0c25c4 UNUSED LICENSES: