Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
d4ac98a
Add usage of updated window, system bar appearance APIs
camsim99 Nov 2, 2021
a3fc96c
Format java file:
camsim99 Nov 2, 2021
ef971cf
Format file
camsim99 Nov 2, 2021
136b0a5
Format file
camsim99 Nov 3, 2021
6b0acd3
add fix for flutter activitiy delegate
camsim99 Nov 3, 2021
f34f876
format file
camsim99 Nov 3, 2021
15959f6
Add changes for flutter activity and fragment activity
camsim99 Nov 5, 2021
2dab838
Make fixes based on manual testing
camsim99 Nov 9, 2021
66e1276
replace setdecorfitssystemwindows methods
camsim99 Nov 9, 2021
5d70fd6
Format platform plugin
camsim99 Nov 9, 2021
6377d18
add one liners
camsim99 Nov 9, 2021
6c7c963
format file
camsim99 Nov 9, 2021
4521517
change setdecorfitssystem methods
camsim99 Nov 10, 2021
21ab396
Merge remote-tracking branch 'upstream/master' into issue_199402891_dev
camsim99 Dec 1, 2021
8de6247
Remove old code
camsim99 Dec 2, 2021
42419c5
Remove changes from deprecated method
camsim99 Dec 2, 2021
968a33c
Update window inset type
camsim99 Dec 2, 2021
f3e0724
Remove old code
camsim99 Dec 2, 2021
1e60656
Format files
camsim99 Dec 2, 2021
c273413
Reformat file
camsim99 Dec 3, 2021
19629c8
WIP fixing tests
camsim99 Dec 6, 2021
e9b106a
Undo mockito version bump
camsim99 Dec 7, 2021
f0d0757
Merge remote-tracking branch 'upstream/master' into issue_199402891_dev
camsim99 Dec 10, 2021
7c6c8f3
Fix test
camsim99 Dec 13, 2021
73b030d
Change signs for consistency
camsim99 Dec 13, 2021
03f8d3b
Fix Linux Unopt errors
camsim99 Dec 13, 2021
091cd5c
Add version check
camsim99 Dec 13, 2021
0f0fc71
Remove unecessary checks
camsim99 Dec 13, 2021
ea9c1ea
Undo deprecation
camsim99 Dec 14, 2021
2e00909
Update method, leave todo
camsim99 Dec 14, 2021
2a52158
format
camsim99 Dec 14, 2021
95dba21
Update comment
camsim99 Dec 14, 2021
fd56253
Fix remainder of references
camsim99 Dec 14, 2021
b44129b
Update tests
camsim99 Dec 15, 2021
604a8a8
Merge remote-tracking branch 'upstream/master' into issue_199402891_dev
camsim99 Dec 16, 2021
d02802e
Merge remote-tracking branch 'upstream/master' into issue_199402891_dev
camsim99 Jan 10, 2022
85a0f78
Address comments
camsim99 Jan 11, 2022
cfbef5b
Undo modification of enum
camsim99 Jan 12, 2022
94ee3f6
Remove version checks
camsim99 Jan 12, 2022
2e2747d
Remove check
camsim99 Jan 12, 2022
881a2db
Add comments, add back version check
camsim99 Jan 12, 2022
8db28bc
Move conditional
camsim99 Jan 13, 2022
cf6159f
Nit
camsim99 Jan 13, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager.LayoutParams;
import androidx.core.view.WindowCompat;
import io.flutter.Log;
import io.flutter.plugin.common.PluginRegistry;
import io.flutter.plugin.platform.PlatformPlugin;
import io.flutter.util.Preconditions;
import io.flutter.view.FlutterMain;
import io.flutter.view.FlutterNativeView;
Expand Down Expand Up @@ -141,7 +141,7 @@ public void onCreate(Bundle savedInstanceState) {
Window window = activity.getWindow();
window.addFlags(LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(0x40000000);
window.getDecorView().setSystemUiVisibility(PlatformPlugin.DEFAULT_SYSTEM_UI);
WindowCompat.setDecorFitsSystemWindows(window, false);
Copy link
Contributor

@wytesk133 wytesk133 Jan 14, 2022

Choose a reason for hiding this comment

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

This line means edge-to-edge mode will become the default mode (related to flutter/flutter#86248 ?). It would be great if we can eventually land this, but do note that it will be a breaking change for apps that don't handle paddings/safe area properly. My team had to manually apply non-trivial fixes (e.g. cl/397106186 and cl/397283284) before enabling this.

}

String[] args = getArgsFromIntent(activity.getIntent());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.core.content.res.ResourcesCompat;
import androidx.core.view.WindowCompat;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.LifecycleRegistry;
Expand Down Expand Up @@ -580,7 +581,7 @@ private void configureStatusBarForFullscreenFlutterExperience() {
Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(0x40000000);
window.getDecorView().setSystemUiVisibility(PlatformPlugin.DEFAULT_SYSTEM_UI);
WindowCompat.setDecorFitsSystemWindows(window, false);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,14 @@
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.core.content.res.ResourcesCompat;
import androidx.core.view.WindowCompat;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import io.flutter.Log;
import io.flutter.embedding.android.FlutterActivityLaunchConfigs.BackgroundMode;
import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.embedding.engine.FlutterShellArgs;
import io.flutter.embedding.engine.plugins.util.GeneratedPluginRegister;
import io.flutter.plugin.platform.PlatformPlugin;

/**
* A Flutter {@code Activity} that is based upon {@link FragmentActivity}.
Expand Down Expand Up @@ -488,7 +488,7 @@ private void configureStatusBarForFullscreenFlutterExperience() {
Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(0x40000000);
window.getDecorView().setSystemUiVisibility(PlatformPlugin.DEFAULT_SYSTEM_UI);
WindowCompat.setDecorFitsSystemWindows(window, false);
}
}

Expand Down
119 changes: 58 additions & 61 deletions shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.core.view.WindowCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.core.view.WindowInsetsControllerCompat;
import io.flutter.Log;
import io.flutter.embedding.engine.systemchannels.PlatformChannel;
Expand All @@ -28,14 +30,13 @@

/** Android implementation of the platform plugin. */
public class PlatformPlugin {
public static final int DEFAULT_SYSTEM_UI =
View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;

private final Activity activity;
private final PlatformChannel platformChannel;
private final PlatformPluginDelegate platformPluginDelegate;
private PlatformChannel.SystemChromeStyle currentTheme;
private int mEnabledOverlays;
private PlatformChannel.SystemUiMode currentSystemUiMode;
private List<PlatformChannel.SystemUiOverlay> currentOverlays;
private static final String TAG = "PlatformPlugin";

/**
Expand Down Expand Up @@ -141,7 +142,7 @@ public PlatformPlugin(
this.platformChannel.setPlatformMessageHandler(mPlatformMessageHandler);
this.platformPluginDelegate = delegate;

mEnabledOverlays = DEFAULT_SYSTEM_UI;
currentSystemUiMode = PlatformChannel.SystemUiMode.EDGE_TO_EDGE;
Copy link
Contributor

Choose a reason for hiding this comment

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

Is this a new default?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

The only difference between this mode and the DEFAULT_SYSTEM_UI is the SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION flag, which has the same behavior in the new API as another flag they share, SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN, so I set this as the default as it appears to be the same.

}

/**
Expand Down Expand Up @@ -240,105 +241,98 @@ public void onSystemUiVisibilityChange(int visibility) {
private void setSystemChromeEnabledSystemUIMode(PlatformChannel.SystemUiMode systemUiMode) {
int enabledOverlays;

if (systemUiMode == PlatformChannel.SystemUiMode.LEAN_BACK
&& Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
Window window = activity.getWindow();
View view = window.getDecorView();
WindowInsetsControllerCompat windowInsetsControllerCompat =
new WindowInsetsControllerCompat(window, view);

if (systemUiMode == PlatformChannel.SystemUiMode.LEAN_BACK) {
Copy link
Contributor

Choose a reason for hiding this comment

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

Why don't we check for the build version here anymore?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

A CI failure indicated that the minimum version is 16 (Jelly Bean) so this was unneeded. Do we need to keep the check in case someone bumps it down?

Copy link
Contributor

Choose a reason for hiding this comment

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

Oh ok, that makes sense!

Do we need to keep the check in case someone bumps it down?

Now that you mention it, that would probably be a situation we would want to have covered by it. I'll defer to @blasten though :)

// LEAN BACK
// Available starting at SDK 16
// Available starting at SDK 20, due to the backwards compatibility provided by the
Copy link
Contributor

Choose a reason for hiding this comment

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

It would be great if we can eventually migrate from the deprecated APIs to use AndroidX's compat libraries, but according to https://docs.flutter.dev/development/tools/sdk/release-notes/supported-platforms we are also supporting API 19. Seems like everything here and below will require API 20+. We might need to rethink a bit on the supported modes and the default mode (especially if edge-to-edge, which works best on API 29+, is going to be the new default).

// WindowInsetsControllerCompat class for setting the behavior of system bars.
// Should not show overlays, tap to reveal overlays, needs onChange callback
// When the overlays come in on tap, the app does not receive the gesture and does not know
// the system overlay has changed. The overlays cannot be dismissed, so adding the callback
// support will allow users to restore the system ui and dismiss the overlays.
// Not compatible with top/bottom overlays enabled.
enabledOverlays =
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| 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) {
windowInsetsControllerCompat.setSystemBarsBehavior(
WindowInsetsControllerCompat.BEHAVIOR_SHOW_BARS_BY_TOUCH);
windowInsetsControllerCompat.hide(WindowInsetsCompat.Type.systemBars());
WindowCompat.setDecorFitsSystemWindows(window, false);
Copy link

@blasten blasten Jan 10, 2022

Choose a reason for hiding this comment

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

setDecorFitsSystemWindows(window, false) means edge-to-edge.

Are all the values in https://github.com/flutter/flutter/blob/61a0add2865c51bfee33939c1820709d1115c77d/packages/flutter/lib/src/services/system_chrome.dart#L90 equivalent edge-to-edge? @Piinks

Copy link
Contributor

@Piinks Piinks Jan 10, 2022

Choose a reason for hiding this comment

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

I am not sure I understand the question, are all the values in >what< equivalent to edge to edge?

Copy link

Choose a reason for hiding this comment

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

In the enum SystemUiMode

Copy link
Contributor

Choose a reason for hiding this comment

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

No, only one is edge to edge, the rest are different?

Copy link

Choose a reason for hiding this comment

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

Thanks.

It sounds like only the case PlatformChannel.SystemUiMode.EDGE_TO_EDGE would be setDecorFitsSystemWindows(window, false). I don't know if there's a better way to test this than manually trying each mode and seeing the before and after this PR.

Copy link
Contributor Author

@camsim99 camsim99 Jan 10, 2022

Choose a reason for hiding this comment

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

That call replaces the flag SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN which is also a part of other modes

Copy link

Choose a reason for hiding this comment

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

Thanks for the videos. It does seem like all the modes that Flutter supports are edge-to-edge in Android terminology. https://developer.android.com/training/gestures/edge-to-edge - I didn't see any example where the opposite to that definition is true.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

It seems like to implement edge to edge mode like that shown in the guide, you have to do some further style customization besides using this method (like to get the transparent bars).

} else if (systemUiMode == PlatformChannel.SystemUiMode.IMMERSIVE) {
// IMMERSIVE
// Available starting at 19
// Available starting at SDK 20, due to the backwards compatibility provided by the
// WindowInsetsControllerCompat class for setting the behavior of system bars.
// Should not show overlays, swipe from edges to reveal overlays, needs onChange callback
// When the overlays come in on swipe, the app does not receive the gesture and does not know
// the system overlay has changed. The overlays cannot be dismissed, so adding callback
// support will allow users to restore the system ui and dismiss the overlays.
// Not compatible with top/bottom overlays enabled.
enabledOverlays =
View.SYSTEM_UI_FLAG_IMMERSIVE
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| 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) {
windowInsetsControllerCompat.setSystemBarsBehavior(
WindowInsetsControllerCompat.BEHAVIOR_SHOW_BARS_BY_SWIPE);
windowInsetsControllerCompat.hide(WindowInsetsCompat.Type.systemBars());
WindowCompat.setDecorFitsSystemWindows(window, false);
} else if (systemUiMode == PlatformChannel.SystemUiMode.IMMERSIVE_STICKY) {
// STICKY IMMERSIVE
// Available starting at 19
// Available starting at SDK 20, due to the backwards compatibility provided by the
// WindowInsetsControllerCompat class for setting the behavior of system bars.
// Should not show overlays, swipe from edges to reveal overlays. The app will also receive
// the swipe gesture. The overlays cannot be dismissed, so adding callback support will
// allow users to restore the system ui and dismiss the overlays.
// Not compatible with top/bottom overlays enabled.
enabledOverlays =
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN;
windowInsetsControllerCompat.setSystemBarsBehavior(
WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE);
windowInsetsControllerCompat.hide(WindowInsetsCompat.Type.systemBars());
WindowCompat.setDecorFitsSystemWindows(window, false);
} else if (systemUiMode == PlatformChannel.SystemUiMode.EDGE_TO_EDGE
&& Build.VERSION.SDK_INT >= 29) {
Copy link

Choose a reason for hiding this comment

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

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Actually, it seems like there's a test that ensures this is not enabled for versions below this. @Piinks any insight on this?

Copy link
Contributor

Choose a reason for hiding this comment

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

This is restricted on purpose, see flutter/flutter#89774 for context.

Copy link

Choose a reason for hiding this comment

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

@Piinks For the comment below, "SDK 29 and up will apply..." are these things set somewhere else?

I'm trying to understand where the differences are between the Flutter implementation and the internal Android implementation.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Sorry for budding in here, but I did ask @Piinks about this yesterday, and it's my understanding that this comment is a bit misleading. The call made when the edge to edge mode is set in Flutter is just to lay out the app behind the system bars, same for Android. The remaining steps to achieve edge to edge mode like in Android (shown in the guide) in Flutter are done beyond a call to setSystemChromeEnabledSystemUIMode. Changing the color of the system bars, as mentioned in the comment, actually would have to be done by setting the overlay style via setSystemChromeSystemUIOverlayStyle. Please correct me if I'm wrong!

// EDGE TO EDGE
// Available starting at 29
// SDK 29 and up will apply a translucent body scrim behind 2/3 button navigation bars
// Available starting at SDK 29. See issue for context:
// https://github.com/flutter/flutter/issues/89774.
// Will apply a translucent body scrim behind 2/3 button navigation bars
// to ensure contrast with buttons on the nav and status bars, unless the contrast is not
// enforced in the overlay styling.
enabledOverlays =
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
WindowCompat.setDecorFitsSystemWindows(window, false);
} else {
// When none of the conditions are matched, return without updating the system UI overlays.
return;
}

mEnabledOverlays = enabledOverlays;
updateSystemUiOverlays();
currentSystemUiMode = systemUiMode;
}

private void setSystemChromeEnabledSystemUIOverlays(
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Note that this method is deprecated now.

List<PlatformChannel.SystemUiOverlay> overlaysToShow) {
Window window = activity.getWindow();
View view = window.getDecorView();
WindowInsetsControllerCompat windowInsetsControllerCompat =
new WindowInsetsControllerCompat(window, view);

// Start by assuming we want to hide all system overlays (like an immersive
// game).
int enabledOverlays =
DEFAULT_SYSTEM_UI
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;

// 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) {
enabledOverlays |= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
windowInsetsControllerCompat.hide(WindowInsetsCompat.Type.systemBars());
WindowCompat.setDecorFitsSystemWindows(window, false);

// We apply sticky immersive mode if desired. Available starting at SDK 20.
if (overlaysToShow.size() == 0) {
currentSystemUiMode = PlatformChannel.SystemUiMode.IMMERSIVE_STICKY;

windowInsetsControllerCompat.setSystemBarsBehavior(
WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE);
}

// Re-add any desired system overlays.
for (int i = 0; i < overlaysToShow.size(); ++i) {
PlatformChannel.SystemUiOverlay overlayToShow = overlaysToShow.get(i);
switch (overlayToShow) {
case TOP_OVERLAYS:
enabledOverlays &= ~View.SYSTEM_UI_FLAG_FULLSCREEN;
windowInsetsControllerCompat.show(WindowInsetsCompat.Type.statusBars());
break;
case BOTTOM_OVERLAYS:
enabledOverlays &= ~View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
enabledOverlays &= ~View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
windowInsetsControllerCompat.show(WindowInsetsCompat.Type.navigationBars());
break;
}
}

mEnabledOverlays = enabledOverlays;
updateSystemUiOverlays();
currentOverlays = overlaysToShow;
}

/**
Expand All @@ -350,8 +344,11 @@ private void setSystemChromeEnabledSystemUIOverlays(
* PlatformPlugin}.
*/
public void updateSystemUiOverlays() {
activity.getWindow().getDecorView().setSystemUiVisibility(mEnabledOverlays);
if (currentTheme != null) {
setSystemChromeEnabledSystemUIMode(currentSystemUiMode);

if (currentOverlays != null) {
setSystemChromeEnabledSystemUIOverlays(currentOverlays);
Copy link

Choose a reason for hiding this comment

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

setSystemChromeEnabledSystemUIOverlays sets currentOverlays.

Is what situation updateSystemUiOverlays needs to call setSystemChromeEnabledSystemUIOverlays again with the same value?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

If someone decides to make a call to setSystemChromeEnabledSystemUIMode after updateSystemUiOverlays is called to change the systemUiMode, this could possibly hide some of the system bars, so then calling updateSystemUiOverlays would show those system bars again.

Copy link

Choose a reason for hiding this comment

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

right, but wouldn't an external call to setSystemChromeEnabledSystemUIMode set a new currentSystemUiMode , thus making updateSystemUiOverlays() call setSystemChromeEnabledSystemUIMode(currentSystemUiMode) with the same value?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Oh, I see what you mean. In that case, if currentOverlays isn't null, then there's no need to make the call to setSystemChromeEnabledSystemUIMode.

} else if (currentTheme != null) {
setSystemChromeSystemUIOverlayStyle(currentTheme);
}
}
Expand Down
Loading