From 49db496ac56d95758f3a2b11eefa5a81af53fcfe Mon Sep 17 00:00:00 2001 From: utzcoz Date: Sat, 4 Nov 2023 20:27:09 +0800 Subject: [PATCH 1/9] Use targetSdkVersion 33 for Android platform AndroidManifest.xml buildroot has switched to use 33 as default target sdk version. Signed-off-by: utzcoz --- shell/platform/android/AndroidManifest.xml | 2 +- tools/android_lint/baseline.xml | 11 ----------- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/shell/platform/android/AndroidManifest.xml b/shell/platform/android/AndroidManifest.xml index 97c77ee7ef57f..2b904fe0412ef 100644 --- a/shell/platform/android/AndroidManifest.xml +++ b/shell/platform/android/AndroidManifest.xml @@ -5,7 +5,7 @@ --> - + diff --git a/tools/android_lint/baseline.xml b/tools/android_lint/baseline.xml index 41e7e89b6a6f4..3958739020e56 100644 --- a/tools/android_lint/baseline.xml +++ b/tools/android_lint/baseline.xml @@ -56,17 +56,6 @@ column="67"/> - - - - Date: Sat, 4 Nov 2023 20:55:59 +0800 Subject: [PATCH 2/9] Bump minSdk to 19 for Android tests The next Robolectric version, 4.11.x, removed the support for SDKs < 19 by following AndroidX strategy. Signed-off-by: utzcoz --- .../localization/LocalizationPluginTest.java | 20 +++++++++---------- .../plugin/platform/PlatformPluginTest.java | 2 +- .../platform/SingleViewPresentationTest.java | 5 ++--- .../platform/android/test_runner/build.gradle | 2 +- .../android/app/build.gradle | 2 +- testing/scenario_app/android/app/build.gradle | 2 +- 6 files changed, 16 insertions(+), 17 deletions(-) diff --git a/shell/platform/android/test/io/flutter/plugin/localization/LocalizationPluginTest.java b/shell/platform/android/test/io/flutter/plugin/localization/LocalizationPluginTest.java index a1e8a12716816..3af058c41d7dd 100644 --- a/shell/platform/android/test/io/flutter/plugin/localization/LocalizationPluginTest.java +++ b/shell/platform/android/test/io/flutter/plugin/localization/LocalizationPluginTest.java @@ -238,7 +238,7 @@ public void computePlatformResolvedLocale_fromAndroidN() { // Tests the legacy pre API 24 algorithm. @Test @Config( - minSdk = Build.VERSION_CODES.JELLY_BEAN, + minSdk = Build.VERSION_CODES.KITKAT, maxSdk = Build.VERSION_CODES.M, qualifiers = "es-rMX") public void computePlatformResolvedLocale_emptySupportedLocales_beforeAndroidN() { @@ -252,7 +252,7 @@ public void computePlatformResolvedLocale_emptySupportedLocales_beforeAndroidN() } @Test - @Config(minSdk = Build.VERSION_CODES.JELLY_BEAN, maxSdk = Build.VERSION_CODES.M, qualifiers = "") + @Config(minSdk = Build.VERSION_CODES.KITKAT, maxSdk = Build.VERSION_CODES.M, qualifiers = "") public void computePlatformResolvedLocale_selectFirstLocaleWhenNoUserSetting_beforeAndroidN() { FlutterJNI flutterJNI = new FlutterJNI(); DartExecutor dartExecutor = mock(DartExecutor.class); @@ -273,7 +273,7 @@ public void computePlatformResolvedLocale_selectFirstLocaleWhenNoUserSetting_bef @Test @Config( - minSdk = Build.VERSION_CODES.JELLY_BEAN, + minSdk = Build.VERSION_CODES.KITKAT, maxSdk = Build.VERSION_CODES.M, qualifiers = "fr-rCH") public void computePlatformResolvedLocale_selectFirstLocaleWhenNoExactMatch_beforeAndroidN() { @@ -299,7 +299,7 @@ public void computePlatformResolvedLocale_selectFirstLocaleWhenNoExactMatch_befo @Test @Config( - minSdk = Build.VERSION_CODES.JELLY_BEAN, + minSdk = Build.VERSION_CODES.KITKAT, maxSdk = Build.VERSION_CODES.M, qualifiers = "it-rIT") public void computePlatformResolvedLocale_selectExactMatchLocale_beforeAndroidN() { @@ -325,7 +325,7 @@ public void computePlatformResolvedLocale_selectExactMatchLocale_beforeAndroidN( @Test @Config( - minSdk = Build.VERSION_CODES.JELLY_BEAN, + minSdk = Build.VERSION_CODES.KITKAT, maxSdk = Build.VERSION_CODES.M, qualifiers = "fr-rCH") public void computePlatformResolvedLocale_selectOnlyLanguageLocale_beforeAndroidN() { @@ -351,35 +351,35 @@ public void computePlatformResolvedLocale_selectOnlyLanguageLocale_beforeAndroid } // Tests the legacy pre API 21 algorithm. - @Config(sdk = 16) + @Config(sdk = 19) @Test public void localeFromString_languageOnly() { Locale locale = LocalizationPlugin.localeFromString("en"); assertEquals(locale, new Locale("en")); } - @Config(sdk = 16) + @Config(sdk = 19) @Test public void localeFromString_languageAndCountry() { Locale locale = LocalizationPlugin.localeFromString("en-US"); assertEquals(locale, new Locale("en", "US")); } - @Config(sdk = 16) + @Config(sdk = 19) @Test public void localeFromString_languageCountryAndVariant() { Locale locale = LocalizationPlugin.localeFromString("zh-Hans-CN"); assertEquals(locale, new Locale("zh", "CN", "Hans")); } - @Config(sdk = 16) + @Config(sdk = 19) @Test public void localeFromString_underscore() { Locale locale = LocalizationPlugin.localeFromString("zh_Hans_CN"); assertEquals(locale, new Locale("zh", "CN", "Hans")); } - @Config(sdk = 16) + @Config(sdk = 19) @Test public void localeFromString_additionalVariantsAreIgnored() { Locale locale = LocalizationPlugin.localeFromString("de-DE-u-co-phonebk"); 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 3a77e6ae68cc1..31d638f97564c 100644 --- a/shell/platform/android/test/io/flutter/plugin/platform/PlatformPluginTest.java +++ b/shell/platform/android/test/io/flutter/plugin/platform/PlatformPluginTest.java @@ -52,7 +52,7 @@ public class PlatformPluginTest { private final Context ctx = ApplicationProvider.getApplicationContext(); - @Config(sdk = 16) + @Config(sdk = 19) @Test public void itIgnoresNewHapticEventsOnOldAndroidPlatforms() { View fakeDecorView = mock(View.class); diff --git a/shell/platform/android/test/io/flutter/plugin/platform/SingleViewPresentationTest.java b/shell/platform/android/test/io/flutter/plugin/platform/SingleViewPresentationTest.java index 046682797623f..db53f415e3ca5 100644 --- a/shell/platform/android/test/io/flutter/plugin/platform/SingleViewPresentationTest.java +++ b/shell/platform/android/test/io/flutter/plugin/platform/SingleViewPresentationTest.java @@ -4,7 +4,6 @@ package io.flutter.plugin.platform; -import static android.os.Build.VERSION_CODES.JELLY_BEAN_MR1; import static android.os.Build.VERSION_CODES.P; import static android.os.Build.VERSION_CODES.R; import static org.junit.Assert.assertEquals; @@ -28,7 +27,7 @@ @TargetApi(P) public class SingleViewPresentationTest { @Test - @Config(minSdk = JELLY_BEAN_MR1, maxSdk = R) + @Config(minSdk = KITKAT, maxSdk = R) public void returnsOuterContextInputMethodManager() { // There's a bug in Android Q caused by the IMM being instanced per display. // https://github.com/flutter/flutter/issues/38375. We need the context returned by @@ -59,7 +58,7 @@ public void returnsOuterContextInputMethodManager() { } @Test - @Config(minSdk = JELLY_BEAN_MR1, maxSdk = R) + @Config(minSdk = KITKAT, maxSdk = R) public void returnsOuterContextInputMethodManager_createDisplayContext() { // The IMM should also persist across display contexts created from the base context. diff --git a/shell/platform/android/test_runner/build.gradle b/shell/platform/android/test_runner/build.gradle index 53a537f874c15..17d252d608aac 100644 --- a/shell/platform/android/test_runner/build.gradle +++ b/shell/platform/android/test_runner/build.gradle @@ -35,7 +35,7 @@ android { compileSdkVersion 33 defaultConfig { - minSdkVersion 16 + minSdkVersion 19 } compileOptions { diff --git a/testing/android_background_image/android/app/build.gradle b/testing/android_background_image/android/app/build.gradle index c7346c23e8422..4c39c2ac3ce6d 100644 --- a/testing/android_background_image/android/app/build.gradle +++ b/testing/android_background_image/android/app/build.gradle @@ -24,7 +24,7 @@ android { } defaultConfig { applicationId 'dev.flutter.android_background_image' - minSdkVersion 16 + minSdkVersion 19 targetSdkVersion 33 versionCode 1 versionName '1.0' diff --git a/testing/scenario_app/android/app/build.gradle b/testing/scenario_app/android/app/build.gradle index 5f2a94523b996..647dd220ef4c3 100644 --- a/testing/scenario_app/android/app/build.gradle +++ b/testing/scenario_app/android/app/build.gradle @@ -26,7 +26,7 @@ android { } defaultConfig { applicationId 'dev.flutter.scenarios' - minSdkVersion 18 + minSdkVersion 19 targetSdkVersion 33 versionCode 1 versionName '1.0' From 318fca6109fc3b7abad2675f365c8b9ff5ae15f0 Mon Sep 17 00:00:00 2001 From: utzcoz Date: Sat, 4 Nov 2023 21:22:34 +0800 Subject: [PATCH 3/9] Fix building and tests Signed-off-by: utzcoz --- shell/platform/android/AndroidManifest.xml | 2 +- .../test/io/flutter/embedding/android/FlutterActivityTest.java | 2 +- .../io/flutter/plugin/platform/SingleViewPresentationTest.java | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/shell/platform/android/AndroidManifest.xml b/shell/platform/android/AndroidManifest.xml index 2b904fe0412ef..13ffe0a6fea97 100644 --- a/shell/platform/android/AndroidManifest.xml +++ b/shell/platform/android/AndroidManifest.xml @@ -5,7 +5,7 @@ --> - + diff --git a/shell/platform/android/test/io/flutter/embedding/android/FlutterActivityTest.java b/shell/platform/android/test/io/flutter/embedding/android/FlutterActivityTest.java index 9f9ecd6d63774..30dd648beac6e 100644 --- a/shell/platform/android/test/io/flutter/embedding/android/FlutterActivityTest.java +++ b/shell/platform/android/test/io/flutter/embedding/android/FlutterActivityTest.java @@ -485,7 +485,7 @@ public void itReleaseEngineWhenOnDestroy() { } @Test - @Config(minSdk = Build.VERSION_CODES.JELLY_BEAN, maxSdk = Build.VERSION_CODES.P) + @Config(minSdk = Build.VERSION_CODES.KITKAT, maxSdk = Build.VERSION_CODES.P) public void fullyDrawn_beforeAndroidQ() { Intent intent = FlutterActivityWithReportFullyDrawn.createDefaultIntent(ctx); ActivityController activityController = diff --git a/shell/platform/android/test/io/flutter/plugin/platform/SingleViewPresentationTest.java b/shell/platform/android/test/io/flutter/plugin/platform/SingleViewPresentationTest.java index db53f415e3ca5..d27e08bbbdc97 100644 --- a/shell/platform/android/test/io/flutter/plugin/platform/SingleViewPresentationTest.java +++ b/shell/platform/android/test/io/flutter/plugin/platform/SingleViewPresentationTest.java @@ -4,6 +4,7 @@ package io.flutter.plugin.platform; +import static android.os.Build.VERSION_CODES.KITKAT; import static android.os.Build.VERSION_CODES.P; import static android.os.Build.VERSION_CODES.R; import static org.junit.Assert.assertEquals; From ea7b26bae6705a5dd9be20d5bfbf826515d12985 Mon Sep 17 00:00:00 2001 From: utzcoz Date: Sun, 5 Nov 2023 12:24:32 +0800 Subject: [PATCH 4/9] Fix ObsoleteSdkInt lint Signed-off-by: utzcoz --- .../android/AndroidTouchProcessor.java | 4 +- .../embedding/android/FlutterFragment.java | 31 ++-- .../embedding/android/FlutterImageView.java | 3 - .../embedding/android/FlutterView.java | 2 - .../engine/loader/FlutterLoader.java | 15 +- .../mutatorsstack/FlutterMutatorView.java | 2 - .../engine/renderer/FlutterRenderer.java | 3 - .../localization/LocalizationPlugin.java | 24 +-- .../plugin/platform/PlatformPlugin.java | 8 +- .../platform/PlatformViewsController.java | 6 - .../platform/SingleViewPresentation.java | 7 +- .../android/io/flutter/util/ViewUtils.java | 6 +- .../io/flutter/view/AccessibilityBridge.java | 156 ++++++------------ .../view/AccessibilityViewEmbedder.java | 24 ++- .../android/io/flutter/view/VsyncWaiter.java | 3 - .../flutter/view/AccessibilityBridgeTest.java | 1 - .../test/io/flutter/view/VsyncWaiterTest.java | 3 - tools/android_lint/baseline.xml | 58 +------ 18 files changed, 88 insertions(+), 268 deletions(-) diff --git a/shell/platform/android/io/flutter/embedding/android/AndroidTouchProcessor.java b/shell/platform/android/io/flutter/embedding/android/AndroidTouchProcessor.java index f3a75a991b309..1dcace3cfeed1 100644 --- a/shell/platform/android/io/flutter/embedding/android/AndroidTouchProcessor.java +++ b/shell/platform/android/io/flutter/embedding/android/AndroidTouchProcessor.java @@ -198,9 +198,7 @@ public boolean onTouchEvent(@NonNull MotionEvent event, @NonNull Matrix transfor public boolean onGenericMotionEvent(@NonNull MotionEvent event, @NonNull Context context) { // Method isFromSource is only available in API 18+ (Jelly Bean MR2) // Mouse hover support is not implemented for API < 18. - boolean isPointerEvent = - Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2 - && event.isFromSource(InputDevice.SOURCE_CLASS_POINTER); + boolean isPointerEvent = event.isFromSource(InputDevice.SOURCE_CLASS_POINTER); boolean isMovementEvent = (event.getActionMasked() == MotionEvent.ACTION_HOVER_MOVE || event.getActionMasked() == MotionEvent.ACTION_SCROLL); diff --git a/shell/platform/android/io/flutter/embedding/android/FlutterFragment.java b/shell/platform/android/io/flutter/embedding/android/FlutterFragment.java index 586d60c9c6980..a83f9d80c1041 100644 --- a/shell/platform/android/io/flutter/embedding/android/FlutterFragment.java +++ b/shell/platform/android/io/flutter/embedding/android/FlutterFragment.java @@ -8,7 +8,6 @@ import android.content.ComponentCallbacks2; import android.content.Context; import android.content.Intent; -import android.os.Build; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; @@ -172,16 +171,14 @@ public class FlutterFragment extends Fragment @RequiresApi(18) private final OnWindowFocusChangeListener onWindowFocusChangeListener = - Build.VERSION.SDK_INT >= 18 - ? new OnWindowFocusChangeListener() { - @Override - public void onWindowFocusChanged(boolean hasFocus) { - if (stillAttachedForEvent("onWindowFocusChanged")) { - delegate.onWindowFocusChanged(hasFocus); - } - } + new OnWindowFocusChangeListener() { + @Override + public void onWindowFocusChanged(boolean hasFocus) { + if (stillAttachedForEvent("onWindowFocusChanged")) { + delegate.onWindowFocusChanged(hasFocus); } - : null; + } + }; /** * Creates a {@code FlutterFragment} with a default configuration. @@ -1128,20 +1125,16 @@ public void onStop() { @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - if (Build.VERSION.SDK_INT >= 18) { - view.getViewTreeObserver().addOnWindowFocusChangeListener(onWindowFocusChangeListener); - } + view.getViewTreeObserver().addOnWindowFocusChangeListener(onWindowFocusChangeListener); } @Override public void onDestroyView() { super.onDestroyView(); - if (Build.VERSION.SDK_INT >= 18) { - // onWindowFocusChangeListener is API 18+ only. - requireView() - .getViewTreeObserver() - .removeOnWindowFocusChangeListener(onWindowFocusChangeListener); - } + // onWindowFocusChangeListener is API 18+ only. + requireView() + .getViewTreeObserver() + .removeOnWindowFocusChangeListener(onWindowFocusChangeListener); if (stillAttachedForEvent("onDestroyView")) { delegate.onDestroyView(); } diff --git a/shell/platform/android/io/flutter/embedding/android/FlutterImageView.java b/shell/platform/android/io/flutter/embedding/android/FlutterImageView.java index 65bf6936cc88b..702a994cef311 100644 --- a/shell/platform/android/io/flutter/embedding/android/FlutterImageView.java +++ b/shell/platform/android/io/flutter/embedding/android/FlutterImageView.java @@ -39,7 +39,6 @@ * an {@link android.media.Image} and renders it to the {@link android.graphics.Canvas} in {@code * onDraw}. */ -@TargetApi(19) public class FlutterImageView extends View implements RenderSurface { private static final String TAG = "FlutterImageView"; @@ -99,7 +98,6 @@ private static void logW(String format, Object... args) { Log.w(TAG, String.format(Locale.US, format, args)); } - @TargetApi(19) @SuppressLint("WrongConstant") // RGBA_8888 is a valid constant. @NonNull private static ImageReader createImageReader(int width, int height) { @@ -194,7 +192,6 @@ public void resume() { * Acquires the next image to be drawn to the {@link android.graphics.Canvas}. Returns true if * there's an image available in the queue. */ - @TargetApi(19) public boolean acquireLatestImage() { if (!isAttachedToFlutterRenderer) { return false; diff --git a/shell/platform/android/io/flutter/embedding/android/FlutterView.java b/shell/platform/android/io/flutter/embedding/android/FlutterView.java index f5393bbaa43a0..2d41ed708552a 100644 --- a/shell/platform/android/io/flutter/embedding/android/FlutterView.java +++ b/shell/platform/android/io/flutter/embedding/android/FlutterView.java @@ -290,7 +290,6 @@ public FlutterView(@NonNull Context context, @NonNull FlutterTextureView flutter *

{@code FlutterView} requires an {@code Activity} instead of a generic {@code Context} to be * compatible with {@link PlatformViewsController}. */ - @TargetApi(19) public FlutterView(@NonNull Context context, @NonNull FlutterImageView flutterImageView) { this(context, null, flutterImageView); } @@ -357,7 +356,6 @@ private FlutterView( init(); } - @TargetApi(19) private FlutterView( @NonNull Context context, @Nullable AttributeSet attrs, diff --git a/shell/platform/android/io/flutter/embedding/engine/loader/FlutterLoader.java b/shell/platform/android/io/flutter/embedding/engine/loader/FlutterLoader.java index 1bbeefe9c0ae9..4a4abb5bada54 100644 --- a/shell/platform/android/io/flutter/embedding/engine/loader/FlutterLoader.java +++ b/shell/platform/android/io/flutter/embedding/engine/loader/FlutterLoader.java @@ -16,7 +16,6 @@ import android.os.Looper; import android.os.SystemClock; import android.util.DisplayMetrics; -import android.view.WindowManager; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import io.flutter.BuildConfig; @@ -170,17 +169,9 @@ public void startInitialization(@NonNull Context applicationContext, @NonNull Se flutterApplicationInfo = ApplicationInfoLoader.load(appContext); VsyncWaiter waiter; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 /* 17 */) { - final DisplayManager dm = - (DisplayManager) appContext.getSystemService(Context.DISPLAY_SERVICE); - waiter = VsyncWaiter.getInstance(dm, flutterJNI); - } else { - float fps = - ((WindowManager) appContext.getSystemService(Context.WINDOW_SERVICE)) - .getDefaultDisplay() - .getRefreshRate(); - waiter = VsyncWaiter.getInstance(fps, flutterJNI); - } + final DisplayManager dm = + (DisplayManager) appContext.getSystemService(Context.DISPLAY_SERVICE); + waiter = VsyncWaiter.getInstance(dm, flutterJNI); waiter.init(); // Use a background thread for initialization tasks that require disk access. diff --git a/shell/platform/android/io/flutter/embedding/engine/mutatorsstack/FlutterMutatorView.java b/shell/platform/android/io/flutter/embedding/engine/mutatorsstack/FlutterMutatorView.java index c195b28728e9b..b6eaa3d434725 100644 --- a/shell/platform/android/io/flutter/embedding/engine/mutatorsstack/FlutterMutatorView.java +++ b/shell/platform/android/io/flutter/embedding/engine/mutatorsstack/FlutterMutatorView.java @@ -3,7 +3,6 @@ import static android.view.View.OnFocusChangeListener; import android.annotation.SuppressLint; -import android.annotation.TargetApi; import android.content.Context; import android.graphics.Canvas; import android.graphics.Matrix; @@ -23,7 +22,6 @@ * A view that applies the {@link io.flutter.embedding.engine.mutatorsstack.FlutterMutatorsStack} to * its children. */ -@TargetApi(19) public class FlutterMutatorView extends FrameLayout { private FlutterMutatorsStack mutatorsStack; private float screenDensity; diff --git a/shell/platform/android/io/flutter/embedding/engine/renderer/FlutterRenderer.java b/shell/platform/android/io/flutter/embedding/engine/renderer/FlutterRenderer.java index 81eea4ea2ac3c..ff71c3d28df9b 100644 --- a/shell/platform/android/io/flutter/embedding/engine/renderer/FlutterRenderer.java +++ b/shell/platform/android/io/flutter/embedding/engine/renderer/FlutterRenderer.java @@ -355,7 +355,6 @@ public long id() { } @Override - @TargetApi(19) public void release() { if (released) { return; @@ -369,7 +368,6 @@ public void release() { } @Override - @TargetApi(19) public void pushImage(Image image) { if (released) { return; @@ -433,7 +431,6 @@ public Image acquireLatestImage() { } @Override - @TargetApi(19) protected void finalize() throws Throwable { try { if (released) { diff --git a/shell/platform/android/io/flutter/plugin/localization/LocalizationPlugin.java b/shell/platform/android/io/flutter/plugin/localization/LocalizationPlugin.java index acb1e904ca629..4ce63975928be 100644 --- a/shell/platform/android/io/flutter/plugin/localization/LocalizationPlugin.java +++ b/shell/platform/android/io/flutter/plugin/localization/LocalizationPlugin.java @@ -7,7 +7,6 @@ import android.annotation.SuppressLint; import android.content.Context; import android.content.res.Configuration; -import android.content.res.Resources; import android.os.Build; import android.os.LocaleList; import androidx.annotation.NonNull; @@ -40,18 +39,9 @@ public String getStringResource(@NonNull String key, @Nullable String localeStri Locale locale = localeFromString(localeString); // setLocale and createConfigurationContext is only available on API >= 17 - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { - Configuration config = new Configuration(context.getResources().getConfiguration()); - config.setLocale(locale); - localContext = context.createConfigurationContext(config); - } else { - // In API < 17, we have to update the locale in Configuration. - Resources resources = context.getResources(); - Configuration config = resources.getConfiguration(); - savedLocale = config.locale; - config.locale = locale; - resources.updateConfiguration(config, null); - } + Configuration config = new Configuration(context.getResources().getConfiguration()); + config.setLocale(locale); + localContext = context.createConfigurationContext(config); } String packageName = context.getPackageName(); @@ -61,14 +51,6 @@ public String getStringResource(@NonNull String key, @Nullable String localeStri stringToReturn = localContext.getResources().getString(resId); } - // In API < 17, we had to restore the original locale after using. - if (localeString != null && Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) { - Resources resources = context.getResources(); - Configuration config = resources.getConfiguration(); - config.locale = savedLocale; - resources.updateConfiguration(config, null); - } - return stringToReturn; } }; diff --git a/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java b/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java index 41ffa23853c7c..aff13bd3261a5 100644 --- a/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java +++ b/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java @@ -282,8 +282,7 @@ private void setSystemChromeEnabledSystemUIMode(PlatformChannel.SystemUiMode sys | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN; - } else if (systemUiMode == PlatformChannel.SystemUiMode.IMMERSIVE - && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + } else if (systemUiMode == PlatformChannel.SystemUiMode.IMMERSIVE) { // IMMERSIVE // Available starting at 19 // Should not show overlays, swipe from edges to reveal overlays, needs onChange callback @@ -298,8 +297,7 @@ private void setSystemChromeEnabledSystemUIMode(PlatformChannel.SystemUiMode sys | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN; - } else if (systemUiMode == PlatformChannel.SystemUiMode.IMMERSIVE_STICKY - && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + } else if (systemUiMode == PlatformChannel.SystemUiMode.IMMERSIVE_STICKY) { // STICKY IMMERSIVE // Available starting at 19 // Should not show overlays, swipe from edges to reveal overlays. The app will also receive @@ -346,7 +344,7 @@ private void setSystemChromeEnabledSystemUIOverlays( // The SYSTEM_UI_FLAG_IMMERSIVE_STICKY flag was introduced in API 19, so we // apply it // if desired, and if the current Android version is 19 or greater. - if (overlaysToShow.size() == 0 && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + if (overlaysToShow.size() == 0) { enabledOverlays |= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; } diff --git a/shell/platform/android/io/flutter/plugin/platform/PlatformViewsController.java b/shell/platform/android/io/flutter/plugin/platform/PlatformViewsController.java index 820a8629b4350..6552e2663fc65 100644 --- a/shell/platform/android/io/flutter/plugin/platform/PlatformViewsController.java +++ b/shell/platform/android/io/flutter/plugin/platform/PlatformViewsController.java @@ -152,7 +152,6 @@ public class PlatformViewsController implements PlatformViewsAccessibilityDelega private final PlatformViewsChannel.PlatformViewsHandler channelHandler = new PlatformViewsChannel.PlatformViewsHandler() { - @TargetApi(19) @Override // TODO(egarciad): Remove the need for this. // https://github.com/flutter/flutter/issues/96679 @@ -415,7 +414,6 @@ public void onTouch(@NonNull PlatformViewsChannel.PlatformViewTouch touch) { view.dispatchTouchEvent(event); } - @TargetApi(17) @Override public void setDirection(int viewId, int direction) { if (!validateDirection(direction)) { @@ -500,7 +498,6 @@ private void ensureValidRequest( // Creates a platform view based on `request`, performs configuration that's common to // all display modes, and adds it to `platformViews`. - @TargetApi(19) @VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE) public PlatformView createPlatformView( @NonNull PlatformViewsChannel.PlatformViewCreationRequest request, boolean wrapContext) { @@ -1084,7 +1081,6 @@ private void initializeRootImageViewIfNeeded() { * testing. */ @VisibleForTesting - @TargetApi(Build.VERSION_CODES.KITKAT) void initializePlatformViewIfNeeded(int viewId) { final PlatformView platformView = platformViews.get(viewId); if (platformView == null) { @@ -1296,7 +1292,6 @@ private void finishFrame(boolean isFrameRenderedUsingImageReaders) { * for public use, and is only visible for testing. */ @VisibleForTesting - @TargetApi(19) @NonNull public FlutterOverlaySurface createOverlaySurface(@NonNull PlatformOverlayView imageView) { final int id = nextOverlayLayerId++; @@ -1311,7 +1306,6 @@ public FlutterOverlaySurface createOverlaySurface(@NonNull PlatformOverlayView i * *

This member is not intended for public use, and is only visible for testing. */ - @TargetApi(19) @NonNull public FlutterOverlaySurface createOverlaySurface() { // Overlay surfaces have the same size as the background surface. diff --git a/shell/platform/android/io/flutter/plugin/platform/SingleViewPresentation.java b/shell/platform/android/io/flutter/plugin/platform/SingleViewPresentation.java index 08d52867eb2d4..c272f859286ee 100644 --- a/shell/platform/android/io/flutter/plugin/platform/SingleViewPresentation.java +++ b/shell/platform/android/io/flutter/plugin/platform/SingleViewPresentation.java @@ -7,7 +7,6 @@ import static android.content.Context.WINDOW_SERVICE; import static android.view.View.OnFocusChangeListener; -import android.annotation.TargetApi; import android.app.AlertDialog; import android.app.Presentation; import android.content.Context; @@ -15,7 +14,6 @@ import android.content.MutableContextWrapper; import android.graphics.Rect; import android.graphics.drawable.ColorDrawable; -import android.os.Build; import android.os.Bundle; import android.view.Display; import android.view.Gravity; @@ -51,7 +49,6 @@ * EmbeddedView */ @Keep -@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) class SingleViewPresentation extends Presentation { private static final String TAG = "PlatformViewsController"; @@ -123,9 +120,7 @@ public SingleViewPresentation( .setFlags( WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - getWindow().setType(WindowManager.LayoutParams.TYPE_PRIVATE_PRESENTATION); - } + getWindow().setType(WindowManager.LayoutParams.TYPE_PRIVATE_PRESENTATION); } /** diff --git a/shell/platform/android/io/flutter/util/ViewUtils.java b/shell/platform/android/io/flutter/util/ViewUtils.java index 7915f28ff427d..abcd807714dcd 100644 --- a/shell/platform/android/io/flutter/util/ViewUtils.java +++ b/shell/platform/android/io/flutter/util/ViewUtils.java @@ -7,7 +7,6 @@ import android.app.Activity; import android.content.Context; import android.content.ContextWrapper; -import android.os.Build; import android.view.View; import android.view.ViewGroup; import androidx.annotation.NonNull; @@ -68,10 +67,7 @@ public static Activity getActivity(@Nullable Context context) { * @return the view id. */ public static int generateViewId(int fallbackId) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { - return View.generateViewId(); - } - return fallbackId; + return View.generateViewId(); } /** diff --git a/shell/platform/android/io/flutter/view/AccessibilityBridge.java b/shell/platform/android/io/flutter/view/AccessibilityBridge.java index c7c249713fff8..543254d64bef9 100644 --- a/shell/platform/android/io/flutter/view/AccessibilityBridge.java +++ b/shell/platform/android/io/flutter/view/AccessibilityBridge.java @@ -379,7 +379,6 @@ public void onAccessibilityStateChanged(boolean accessibilityEnabled) { // Listener that is notified when accessibility touch exploration is turned on/off. // This is guarded at instantiation time. - @TargetApi(19) @RequiresApi(19) private final AccessibilityManager.TouchExplorationStateChangeListener touchExplorationStateChangeListener; @@ -400,10 +399,8 @@ public void onChange(boolean selfChange, Uri uri) { } // Retrieve the current value of TRANSITION_ANIMATION_SCALE from the OS. String value = - Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1 - ? null - : Settings.Global.getString( - contentResolver, Settings.Global.TRANSITION_ANIMATION_SCALE); + Settings.Global.getString( + contentResolver, Settings.Global.TRANSITION_ANIMATION_SCALE); boolean shouldAnimationsBeDisabled = value != null && value.equals("0"); if (shouldAnimationsBeDisabled) { @@ -451,40 +448,34 @@ public AccessibilityBridge( // Tell Flutter whether touch exploration is initially active or not. Then register a listener // to be notified of changes in the future. - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - touchExplorationStateChangeListener = - new AccessibilityManager.TouchExplorationStateChangeListener() { - @Override - public void onTouchExplorationStateChanged(boolean isTouchExplorationEnabled) { - if (isReleased) { - return; - } - if (!isTouchExplorationEnabled) { - setAccessibleNavigation(false); - onTouchExplorationExit(); - } + touchExplorationStateChangeListener = + new AccessibilityManager.TouchExplorationStateChangeListener() { + @Override + public void onTouchExplorationStateChanged(boolean isTouchExplorationEnabled) { + if (isReleased) { + return; + } + if (!isTouchExplorationEnabled) { + setAccessibleNavigation(false); + onTouchExplorationExit(); + } - if (onAccessibilityChangeListener != null) { - onAccessibilityChangeListener.onAccessibilityChanged( - accessibilityManager.isEnabled(), isTouchExplorationEnabled); - } + if (onAccessibilityChangeListener != null) { + onAccessibilityChangeListener.onAccessibilityChanged( + accessibilityManager.isEnabled(), isTouchExplorationEnabled); } - }; - touchExplorationStateChangeListener.onTouchExplorationStateChanged( - accessibilityManager.isTouchExplorationEnabled()); - this.accessibilityManager.addTouchExplorationStateChangeListener( - touchExplorationStateChangeListener); - } else { - touchExplorationStateChangeListener = null; - } + } + }; + touchExplorationStateChangeListener.onTouchExplorationStateChanged( + accessibilityManager.isTouchExplorationEnabled()); + this.accessibilityManager.addTouchExplorationStateChangeListener( + touchExplorationStateChangeListener); // Tell Flutter whether animations should initially be enabled or disabled. Then register a // listener to be notified of changes in the future. - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { - animationScaleObserver.onChange(false); - Uri transitionUri = Settings.Global.getUriFor(Settings.Global.TRANSITION_ANIMATION_SCALE); - this.contentResolver.registerContentObserver(transitionUri, false, animationScaleObserver); - } + animationScaleObserver.onChange(false); + Uri transitionUri = Settings.Global.getUriFor(Settings.Global.TRANSITION_ANIMATION_SCALE); + this.contentResolver.registerContentObserver(transitionUri, false, animationScaleObserver); // Tells Flutter whether the text should be bolded or not. If the user changes bold text // setting, the configuration will change and trigger a re-build of the accesibiltyBridge. @@ -507,10 +498,8 @@ public void release() { platformViewsAccessibilityDelegate.detachAccessibilityBridge(); setOnAccessibilityChangeListener(null); accessibilityManager.removeAccessibilityStateChangeListener(accessibilityStateChangeListener); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - accessibilityManager.removeTouchExplorationStateChangeListener( - touchExplorationStateChangeListener); - } + accessibilityManager.removeTouchExplorationStateChangeListener( + touchExplorationStateChangeListener); contentResolver.unregisterContentObserver(animationScaleObserver); accessibilityChannel.setAccessibilityMessageHandler(null); } @@ -669,9 +658,7 @@ public AccessibilityNodeInfo createAccessibilityNodeInfo(int virtualViewId) { } // Work around for https://github.com/flutter/flutter/issues/2101 - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { - result.setViewIdResourceName(""); - } + result.setViewIdResourceName(""); result.setPackageName(rootAccessibilityView.getContext().getPackageName()); result.setClassName("android.view.View"); result.setSource(rootAccessibilityView, virtualViewId); @@ -689,20 +676,16 @@ public AccessibilityNodeInfo createAccessibilityNodeInfo(int virtualViewId) { if (!semanticsNode.hasFlag(Flag.IS_READ_ONLY)) { result.setClassName("android.widget.EditText"); } - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { - result.setEditable(!semanticsNode.hasFlag(Flag.IS_READ_ONLY)); - if (semanticsNode.textSelectionBase != -1 && semanticsNode.textSelectionExtent != -1) { - result.setTextSelection( - semanticsNode.textSelectionBase, semanticsNode.textSelectionExtent); - } - // Text fields will always be created as a live region when they have input focus, - // so that updates to the label trigger polite announcements. This makes it easy to - // follow a11y guidelines for text fields on Android. - if (Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN_MR2 - && accessibilityFocusedSemanticsNode != null - && accessibilityFocusedSemanticsNode.id == virtualViewId) { - result.setLiveRegion(View.ACCESSIBILITY_LIVE_REGION_POLITE); - } + result.setEditable(!semanticsNode.hasFlag(Flag.IS_READ_ONLY)); + if (semanticsNode.textSelectionBase != -1 && semanticsNode.textSelectionExtent != -1) { + result.setTextSelection(semanticsNode.textSelectionBase, semanticsNode.textSelectionExtent); + } + // Text fields will always be created as a live region when they have input focus, + // so that updates to the label trigger polite announcements. This makes it easy to + // follow a11y guidelines for text fields on Android. + if (accessibilityFocusedSemanticsNode != null + && accessibilityFocusedSemanticsNode.id == virtualViewId) { + result.setLiveRegion(View.ACCESSIBILITY_LIVE_REGION_POLITE); } // Cursor movements @@ -737,19 +720,17 @@ public AccessibilityNodeInfo createAccessibilityNodeInfo(int virtualViewId) { // These are non-ops on older devices. Attempting to interact with the text will cause Talkback // to read the contents of the text box instead. - if (Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN_MR2) { - if (semanticsNode.hasAction(Action.SET_SELECTION)) { - result.addAction(AccessibilityNodeInfo.ACTION_SET_SELECTION); - } - if (semanticsNode.hasAction(Action.COPY)) { - result.addAction(AccessibilityNodeInfo.ACTION_COPY); - } - if (semanticsNode.hasAction(Action.CUT)) { - result.addAction(AccessibilityNodeInfo.ACTION_CUT); - } - if (semanticsNode.hasAction(Action.PASTE)) { - result.addAction(AccessibilityNodeInfo.ACTION_PASTE); - } + if (semanticsNode.hasAction(Action.SET_SELECTION)) { + result.addAction(AccessibilityNodeInfo.ACTION_SET_SELECTION); + } + if (semanticsNode.hasAction(Action.COPY)) { + result.addAction(AccessibilityNodeInfo.ACTION_COPY); + } + if (semanticsNode.hasAction(Action.CUT)) { + result.addAction(AccessibilityNodeInfo.ACTION_CUT); + } + if (semanticsNode.hasAction(Action.PASTE)) { + result.addAction(AccessibilityNodeInfo.ACTION_PASTE); } // Set text API isn't available until API 21. @@ -767,8 +748,7 @@ public AccessibilityNodeInfo createAccessibilityNodeInfo(int virtualViewId) { // TODO(jonahwilliams): Figure out a way conform to the expected id from TalkBack's // CustomLabelManager. talkback/src/main/java/labeling/CustomLabelManager.java#L525 } - if (Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN_MR2 - && semanticsNode.hasAction(Action.DISMISS)) { + if (semanticsNode.hasAction(Action.DISMISS)) { result.setDismissable(true); result.addAction(AccessibilityNodeInfo.ACTION_DISMISS); } @@ -862,8 +842,7 @@ && shouldSetCollectionInfo(semanticsNode)) { result.setClassName("android.widget.HorizontalScrollView"); } } else { - if (Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN_MR2 - && shouldSetCollectionInfo(semanticsNode)) { + if (shouldSetCollectionInfo(semanticsNode)) { result.setCollectionInfo( AccessibilityNodeInfo.CollectionInfo.obtain( semanticsNode.scrollChildren, // rows @@ -898,8 +877,7 @@ && shouldSetCollectionInfo(semanticsNode)) { result.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD); } } - if (semanticsNode.hasFlag(Flag.IS_LIVE_REGION) - && Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN_MR2) { + if (semanticsNode.hasFlag(Flag.IS_LIVE_REGION)) { result.setLiveRegion(View.ACCESSIBILITY_LIVE_REGION_POLITE); } @@ -1111,26 +1089,10 @@ public boolean performAction( } case AccessibilityNodeInfo.ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY: { - // Text selection APIs aren't available until API 18. We can't handle the case here so - // return false - // instead. It's extremely unlikely that this case would ever be triggered in the first - // place in API < - // 18. - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2) { - return false; - } return performCursorMoveAction(semanticsNode, virtualViewId, arguments, false); } case AccessibilityNodeInfo.ACTION_NEXT_AT_MOVEMENT_GRANULARITY: { - // Text selection APIs aren't available until API 18. We can't handle the case here so - // return false - // instead. It's extremely unlikely that this case would ever be triggered in the first - // place in API < - // 18. - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2) { - return false; - } return performCursorMoveAction(semanticsNode, virtualViewId, arguments, true); } case AccessibilityNodeInfo.ACTION_CLEAR_ACCESSIBILITY_FOCUS: @@ -1183,14 +1145,6 @@ public boolean performAction( } case AccessibilityNodeInfo.ACTION_SET_SELECTION: { - // Text selection APIs aren't available until API 18. We can't handle the case here so - // return false - // instead. It's extremely unlikely that this case would ever be triggered in the first - // place in API < - // 18. - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2) { - return false; - } final Map selection = new HashMap<>(); final boolean hasSelection = arguments != null @@ -1266,7 +1220,6 @@ public boolean performAction( * Handles the responsibilities of {@link #performAction(int, int, Bundle)} for the specific * scenario of cursor movement. */ - @TargetApi(18) @RequiresApi(18) private boolean performCursorMoveAction( @NonNull SemanticsNode semanticsNode, @@ -1996,9 +1949,7 @@ private void setAccessibilityPaneTitle(String title) { private void sendWindowContentChangeEvent(int virtualViewId) { AccessibilityEvent event = obtainAccessibilityEvent(virtualViewId, AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - event.setContentChangeTypes(AccessibilityEvent.CONTENT_CHANGE_TYPE_SUBTREE); - } + event.setContentChangeTypes(AccessibilityEvent.CONTENT_CHANGE_TYPE_SUBTREE); sendAccessibilityEvent(event); } @@ -2049,7 +2000,6 @@ private boolean doesLayoutInDisplayCutoutModeRequireLeftInset() { * Hook called just before a {@link SemanticsNode} is removed from the Android cache of Flutter's * semantics tree. */ - @TargetApi(19) @RequiresApi(19) private void willRemoveSemanticsNode(SemanticsNode semanticsNodeToBeRemoved) { if (BuildConfig.DEBUG) { diff --git a/shell/platform/android/io/flutter/view/AccessibilityViewEmbedder.java b/shell/platform/android/io/flutter/view/AccessibilityViewEmbedder.java index 368e14ce5fc29..eb4981d0533d1 100644 --- a/shell/platform/android/io/flutter/view/AccessibilityViewEmbedder.java +++ b/shell/platform/android/io/flutter/view/AccessibilityViewEmbedder.java @@ -230,20 +230,16 @@ private void copyAccessibilityFields( output.setText(input.getText()); output.setVisibleToUser(input.isVisibleToUser()); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { - output.setEditable(input.isEditable()); - } - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - output.setCanOpenPopup(input.canOpenPopup()); - output.setCollectionInfo(input.getCollectionInfo()); - output.setCollectionItemInfo(input.getCollectionItemInfo()); - output.setContentInvalid(input.isContentInvalid()); - output.setDismissable(input.isDismissable()); - output.setInputType(input.getInputType()); - output.setLiveRegion(input.getLiveRegion()); - output.setMultiLine(input.isMultiLine()); - output.setRangeInfo(input.getRangeInfo()); - } + output.setEditable(input.isEditable()); + output.setCanOpenPopup(input.canOpenPopup()); + output.setCollectionInfo(input.getCollectionInfo()); + output.setCollectionItemInfo(input.getCollectionItemInfo()); + output.setContentInvalid(input.isContentInvalid()); + output.setDismissable(input.isDismissable()); + output.setInputType(input.getInputType()); + output.setLiveRegion(input.getLiveRegion()); + output.setMultiLine(input.isMultiLine()); + output.setRangeInfo(input.getRangeInfo()); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { output.setError(input.getError()); output.setMaxTextLength(input.getMaxTextLength()); diff --git a/shell/platform/android/io/flutter/view/VsyncWaiter.java b/shell/platform/android/io/flutter/view/VsyncWaiter.java index 80f5658dea569..b99b089a5c55e 100644 --- a/shell/platform/android/io/flutter/view/VsyncWaiter.java +++ b/shell/platform/android/io/flutter/view/VsyncWaiter.java @@ -4,7 +4,6 @@ package io.flutter.view; -import android.annotation.TargetApi; import android.hardware.display.DisplayManager; import android.view.Choreographer; import android.view.Display; @@ -14,7 +13,6 @@ // TODO(mattcarroll): add javadoc. public class VsyncWaiter { - @TargetApi(17) class DisplayListener implements DisplayManager.DisplayListener { DisplayListener(DisplayManager displayManager) { this.displayManager = displayManager; @@ -59,7 +57,6 @@ public static VsyncWaiter getInstance(float fps, @NonNull FlutterJNI flutterJNI) return instance; } - @TargetApi(17) @NonNull public static VsyncWaiter getInstance( @NonNull DisplayManager displayManager, @NonNull FlutterJNI flutterJNI) { diff --git a/shell/platform/android/test/io/flutter/view/AccessibilityBridgeTest.java b/shell/platform/android/test/io/flutter/view/AccessibilityBridgeTest.java index 28077a2c6877e..ddcbe6842666f 100644 --- a/shell/platform/android/test/io/flutter/view/AccessibilityBridgeTest.java +++ b/shell/platform/android/test/io/flutter/view/AccessibilityBridgeTest.java @@ -64,7 +64,6 @@ @Config(manifest = Config.NONE) @RunWith(AndroidJUnit4.class) -@TargetApi(19) public class AccessibilityBridgeTest { @Test diff --git a/shell/platform/android/test/io/flutter/view/VsyncWaiterTest.java b/shell/platform/android/test/io/flutter/view/VsyncWaiterTest.java index 9afeb9c5deebb..ef56b9936b87b 100644 --- a/shell/platform/android/test/io/flutter/view/VsyncWaiterTest.java +++ b/shell/platform/android/test/io/flutter/view/VsyncWaiterTest.java @@ -14,7 +14,6 @@ import static org.mockito.Mockito.when; import static org.robolectric.Shadows.shadowOf; -import android.annotation.TargetApi; import android.hardware.display.DisplayManager; import android.os.Looper; import android.view.Display; @@ -50,7 +49,6 @@ public void itSetsFpsBelowApi17() { verify(mockFlutterJNI, times(1)).onVsync(anyLong(), eq(1000000000l / 10l), eq(1l)); } - @TargetApi(17) @Test public void itSetsFpsWhenDisplayManagerUpdates() { FlutterJNI mockFlutterJNI = mock(FlutterJNI.class); @@ -86,7 +84,6 @@ public void itSetsFpsWhenDisplayManagerUpdates() { verify(mockFlutterJNI, times(1)).onVsync(anyLong(), eq(1000000000l / 60l), eq(1l)); } - @TargetApi(17) @Test public void itSetsFpsWhenDisplayManagerDoesNotUpdate() { FlutterJNI mockFlutterJNI = mock(FlutterJNI.class); diff --git a/tools/android_lint/baseline.xml b/tools/android_lint/baseline.xml index 3958739020e56..d852b3b24f66b 100644 --- a/tools/android_lint/baseline.xml +++ b/tools/android_lint/baseline.xml @@ -1,61 +1,5 @@ - - - - - - - - - - - - - - - - - - - - - - + From 8e88c0259287b1b148fe21e74412319266a49c47 Mon Sep 17 00:00:00 2001 From: utzcoz <43091780+utzcoz@users.noreply.github.com> Date: Fri, 10 Nov 2023 10:24:57 +0800 Subject: [PATCH 5/9] Update AndroidManifest.xml --- shell/platform/android/AndroidManifest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shell/platform/android/AndroidManifest.xml b/shell/platform/android/AndroidManifest.xml index 13ffe0a6fea97..2a5d3b89be28b 100644 --- a/shell/platform/android/AndroidManifest.xml +++ b/shell/platform/android/AndroidManifest.xml @@ -5,7 +5,7 @@ --> - + From 0d7c6eb7984bd7ab45c18881c95798007399dacb Mon Sep 17 00:00:00 2001 From: utzcoz <43091780+utzcoz@users.noreply.github.com> Date: Fri, 10 Nov 2023 10:26:17 +0800 Subject: [PATCH 6/9] Update baseline.xml --- tools/android_lint/baseline.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/android_lint/baseline.xml b/tools/android_lint/baseline.xml index c0cfce20ca8e9..b540917bd520e 100644 --- a/tools/android_lint/baseline.xml +++ b/tools/android_lint/baseline.xml @@ -99,4 +99,5 @@ line="928" column="18"/> + From a7369c3b4fdb685333cb524966f1ea0617c6fa17 Mon Sep 17 00:00:00 2001 From: utzcoz <43091780+utzcoz@users.noreply.github.com> Date: Fri, 10 Nov 2023 10:50:06 +0800 Subject: [PATCH 7/9] Update SingleViewPresentation.java --- .../io/flutter/plugin/platform/SingleViewPresentation.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/shell/platform/android/io/flutter/plugin/platform/SingleViewPresentation.java b/shell/platform/android/io/flutter/plugin/platform/SingleViewPresentation.java index 0be3486ef0be6..4b8df39dc9aa1 100644 --- a/shell/platform/android/io/flutter/plugin/platform/SingleViewPresentation.java +++ b/shell/platform/android/io/flutter/plugin/platform/SingleViewPresentation.java @@ -7,6 +7,7 @@ import static android.content.Context.WINDOW_SERVICE; import static android.view.View.OnFocusChangeListener; +import android.annotation.TargetApi; import android.app.AlertDialog; import android.app.Presentation; import android.content.Context; @@ -14,6 +15,7 @@ import android.content.MutableContextWrapper; import android.graphics.Rect; import android.graphics.drawable.ColorDrawable; +import android.os.Build; import android.os.Bundle; import android.view.Display; import android.view.Gravity; From c5ccff8a41c0822974daf7deb19848e0738442e7 Mon Sep 17 00:00:00 2001 From: utzcoz <43091780+utzcoz@users.noreply.github.com> Date: Fri, 10 Nov 2023 12:40:20 +0800 Subject: [PATCH 8/9] Update SingleViewPresentation.java --- .../io/flutter/plugin/platform/SingleViewPresentation.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/shell/platform/android/io/flutter/plugin/platform/SingleViewPresentation.java b/shell/platform/android/io/flutter/plugin/platform/SingleViewPresentation.java index 4b8df39dc9aa1..1bed6ae2ce77f 100644 --- a/shell/platform/android/io/flutter/plugin/platform/SingleViewPresentation.java +++ b/shell/platform/android/io/flutter/plugin/platform/SingleViewPresentation.java @@ -7,7 +7,6 @@ import static android.content.Context.WINDOW_SERVICE; import static android.view.View.OnFocusChangeListener; -import android.annotation.TargetApi; import android.app.AlertDialog; import android.app.Presentation; import android.content.Context; @@ -51,7 +50,6 @@ * EmbeddedView */ @Keep -@TargetApi(Build.VERSION_CODES.KITKAT) class SingleViewPresentation extends Presentation { private static final String TAG = "PlatformViewsController"; From c8a4842ed68867bcb488f21819a54e5f34c17610 Mon Sep 17 00:00:00 2001 From: utzcoz <43091780+utzcoz@users.noreply.github.com> Date: Fri, 10 Nov 2023 12:41:03 +0800 Subject: [PATCH 9/9] Update SingleViewPresentation.java --- .../io/flutter/plugin/platform/SingleViewPresentation.java | 1 - 1 file changed, 1 deletion(-) diff --git a/shell/platform/android/io/flutter/plugin/platform/SingleViewPresentation.java b/shell/platform/android/io/flutter/plugin/platform/SingleViewPresentation.java index 1bed6ae2ce77f..c272f859286ee 100644 --- a/shell/platform/android/io/flutter/plugin/platform/SingleViewPresentation.java +++ b/shell/platform/android/io/flutter/plugin/platform/SingleViewPresentation.java @@ -14,7 +14,6 @@ import android.content.MutableContextWrapper; import android.graphics.Rect; import android.graphics.drawable.ColorDrawable; -import android.os.Build; import android.os.Bundle; import android.view.Display; import android.view.Gravity;