Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 71eaca7e authored by shawnlin's avatar shawnlin Committed by Shawn Lin
Browse files

Fixed status bar glitch for apps that access internal res

In 12L, to support mulit-display devices, we changed the way to get the
status bar height by adding an API to calculate instead of directly
reading the resource of status_bar_height.

However, some apps still using Resources.getIdentify() to get this
internal resources dimen as status bar height to layout their UI which
cause status bar glitch in their app.

For compatibility purpose:
1. Create a new dimen res status_bar_height_default which will be used
   by framework to determine the status bar heigth
2. For status_bar_height
   - Set the value to the size which already consider the cutout size
     for defualt display as before so that it won't breaking existing
     app.
   - It is only used for apps using Resources.getIdentifier()

Bug: 216782082
Test: verified on the apps with such issue.
Change-Id: I306efa187ffa69223c06fd248cfe57d183f96c59
parent 194d7396
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -43,7 +43,7 @@ public final class SystemBarUtils {
     * Gets the status bar height with a specific display cutout.
     */
    public static int getStatusBarHeight(Resources res, DisplayCutout cutout) {
        final int defaultSize = res.getDimensionPixelSize(R.dimen.status_bar_height);
        final int defaultSize = res.getDimensionPixelSize(R.dimen.status_bar_height_default);
        final int safeInsetTop = cutout == null ? 0 : cutout.getSafeInsetTop();
        final int waterfallInsetTop = cutout == null ? 0 : cutout.getWaterfallInsets().top;
        // The status bar height should be:
@@ -73,7 +73,7 @@ public final class SystemBarUtils {
            }
        }
        final int defaultSize =
                context.getResources().getDimensionPixelSize(R.dimen.status_bar_height);
                context.getResources().getDimensionPixelSize(R.dimen.status_bar_height_default);
        // The status bar height should be:
        // Max(top cutout size, (status bar default height + waterfall top size))
        return Math.max(insets.top, defaultSize + waterfallInsets.top);
+2 −0
Original line number Diff line number Diff line
@@ -27,6 +27,8 @@
    <dimen name="password_keyboard_spacebar_vertical_correction">2dip</dimen>
    <dimen name="preference_widget_width">72dp</dimen>

    <!-- Height of the status bar -->
    <dimen name="status_bar_height">@dimen/status_bar_height_landscape</dimen>
    <!-- Height of area above QQS where battery/time go -->
    <dimen name="quick_qs_offset_height">48dp</dimen>
    <!-- Default height of an action bar. -->
+5 −2
Original line number Diff line number Diff line
@@ -39,14 +39,17 @@
    <!-- Elevation of toast view -->
    <dimen name="toast_elevation">2dp</dimen>

    <!-- The default height of the status bar used in {@link SystemBarUtils#getStatusBarHeight} to
         calculate the status bar height. -->
    <dimen name="status_bar_height_default">24dp</dimen>
    <!-- Height of the status bar.
         Do not read this dimen directly. Use {@link SystemBarUtils#getStatusBarHeight} instead.
         -->
    <dimen name="status_bar_height">24dp</dimen>
    <dimen name="status_bar_height">@dimen/status_bar_height_portrait</dimen>
    <!-- Height of the status bar in portrait.
         Do not read this dimen directly. Use {@link SystemBarUtils#getStatusBarHeight} instead.
         -->
    <dimen name="status_bar_height_portrait">@dimen/status_bar_height</dimen>
    <dimen name="status_bar_height_portrait">24dp</dimen>
    <!-- Height of the status bar in landscape.
         Do not read this dimen directly. Use {@link SystemBarUtils#getStatusBarHeight} instead.
         -->
+2 −0
Original line number Diff line number Diff line
@@ -4761,4 +4761,6 @@
  <java-symbol type="layout" name="app_language_picker_current_locale_item" />
  <java-symbol type="id" name="system_locale_subtitle" />
  <java-symbol type="id" name="language_picker_item" />

  <java-symbol type="dimen" name="status_bar_height_default" />
</resources>
+3 −0
Original line number Diff line number Diff line
@@ -44,6 +44,9 @@
     -->
    <bool name="config_fillMainBuiltInDisplayCutout">true</bool>

    <!-- Height of the status bar -->
    <dimen name="status_bar_height_portrait">48dp</dimen>
    <dimen name="status_bar_height_landscape">28dp</dimen>
</resources>

Loading