diff --git a/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java b/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java index 3f18d9472ede57d2dc6f0b343f81eb27f36c3205..781afe218fce6467fd20977ebd573f02983010e0 100644 --- a/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java +++ b/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java @@ -14,6 +14,7 @@ import android.view.HapticFeedbackConstants; import android.view.SoundEffectConstants; import android.view.View; import android.view.Window; +import android.view.WindowManager; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; @@ -268,9 +269,11 @@ public class PlatformPlugin { window.setStatusBarColor(systemChromeStyle.statusBarColor); } } - if (systemChromeStyle.systemNavigationBarDividerColor != null) { - // Not available until Android P. - // window.setNavigationBarDividerColor(systemNavigationBarDividerColor); + if (systemChromeStyle.systemNavigationBarDividerColor != null + && Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); + window.setNavigationBarDividerColor(systemChromeStyle.systemNavigationBarDividerColor); } view.setSystemUiVisibility(flags); currentTheme = systemChromeStyle; 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 0d9e0ea88e16cea19d5bc43c252a6feb37db5158..0cb1040f14cfedd98776f9277057c6138a87637e 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 @@ package io.flutter.plugin.platform; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; @@ -18,7 +19,9 @@ 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.Brightness; import io.flutter.embedding.engine.systemchannels.PlatformChannel.ClipboardContentFormat; +import io.flutter.embedding.engine.systemchannels.PlatformChannel.SystemChromeStyle; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; @@ -110,4 +113,23 @@ public class PlatformPluginTest { clipboardManager.setPrimaryClip(clip); assertFalse(platformPlugin.mPlatformMessageHandler.clipboardHasStrings()); } + + @Config(sdk = 29) + @Test + public void setNavigationBarDividerColor() { + 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); + PlatformChannel fakePlatformChannel = mock(PlatformChannel.class); + PlatformPlugin platformPlugin = new PlatformPlugin(fakeActivity, fakePlatformChannel); + SystemChromeStyle style = + new SystemChromeStyle(0XFF000000, null, 0XFFC70039, null, 0XFF006DB3); + platformPlugin.mPlatformMessageHandler.setSystemUiOverlayStyle(style); + + assertEquals(0XFF006DB3, fakeActivity.getWindow().getNavigationBarDividerColor()); + assertEquals(0XFFC70039, fakeActivity.getWindow().getStatusBarColor()); + assertEquals(0XFF000000, fakeActivity.getWindow().getNavigationBarColor()); + } }