commit e8f6670fa7f3bf7f60945c0bb6f00087b1223c76
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Sun Oct 18 14:44:33 2020 +0100

    Avoid cutouts in a new way

diff --git a/src/main/java/org/distorted/main/RubikActivity.java b/src/main/java/org/distorted/main/RubikActivity.java
index 8584ac76..ff861330 100644
--- a/src/main/java/org/distorted/main/RubikActivity.java
+++ b/src/main/java/org/distorted/main/RubikActivity.java
@@ -107,8 +107,7 @@ public class RubikActivity extends AppCompatActivity
       mIsLocked = false;
 
       hideNavigationBar();
-
-      // huaweiHack();
+      cutoutHack();
       // askForPermissions();
       }
 
@@ -145,6 +144,17 @@ public class RubikActivity extends AppCompatActivity
       {
       super.onAttachedToWindow();
 
+      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P)
+        {
+        DisplayCutout cutout = getWindow().getDecorView().getRootWindowInsets().getDisplayCutout();
+        int insetHeight = cutout!=null ? cutout.getSafeInsetTop() : 0;
+
+        LinearLayout layoutHid = findViewById(R.id.hiddenBar);
+        ViewGroup.LayoutParams paramsHid = layoutHid.getLayoutParams();
+        paramsHid.height = (int)(0.8f*insetHeight);
+        layoutHid.setLayoutParams(paramsHid);
+        }
+
       final float RATIO = 0.10f;
       float height = getScreenHeightInPixels();
 
@@ -157,21 +167,12 @@ public class RubikActivity extends AppCompatActivity
       ViewGroup.LayoutParams paramsBot = layoutBot.getLayoutParams();
       paramsBot.height = (int)(height*RATIO);
       layoutBot.setLayoutParams(paramsBot);
-
-      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P)
-        {
-        DisplayCutout cutout = getWindow().getDecorView().getRootWindowInsets().getDisplayCutout();
-        int inset = cutout!=null ? cutout.getSafeInsetTop() : 0;
-        RubikStatePlay.setSafeInsetTop(inset);
-        }
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
-// on some Huawei devices ( P40, P40 Pro, Mate 30 Pro, Mate 30, Nova 5T, P30 ) this has to be called
-// so that the App enters fullscreen mode. Otherwise there's a black bar at the top. See
-// https://forums.developer.huawei.com/forumPortal/en/topicview?tid=0201361898979080302&fid=0101246461018590361
+// do not avoid cutouts
 
-    private void huaweiHack()
+    private void cutoutHack()
       {
       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P)
         {
diff --git a/src/main/java/org/distorted/states/RubikStatePlay.java b/src/main/java/org/distorted/states/RubikStatePlay.java
index 016ea85a..c5934bd1 100644
--- a/src/main/java/org/distorted/states/RubikStatePlay.java
+++ b/src/main/java/org/distorted/states/RubikStatePlay.java
@@ -55,8 +55,6 @@ public class RubikStatePlay extends RubikStateAbstract implements RubikPreRender
   private static int[] BUTTON_LABELS = { R.string.scores, R.string.patterns, R.string.solver, R.string.about };
   private static final int NUM_BUTTONS = BUTTON_LABELS.length;
 
-  private static int mSafeInsetTop;
-
   private ImageButton mObjButton, mMenuButton, mPrevButton, mSolveButton, mLockButton;
   private Button mPlayButton;
   private PopupWindow mObjectPopup, mMenuPopup, mPlayPopup;
@@ -176,7 +174,7 @@ public class RubikStatePlay extends RubikStateAbstract implements RubikPreRender
           View popupView = mObjectPopup.getContentView();
           popupView.setSystemUiVisibility(RubikActivity.FLAGS);
 
-          mObjectPopup.showAsDropDown(view, margin, margin + mSafeInsetTop);
+          mObjectPopup.showAsDropDown(view, margin, margin);
           mObjectPopup.update(view, mObjectSize*mColCount, mObjectSize*mRowCount);
 
           mObjectPopup.setFocusable(true);
@@ -215,7 +213,7 @@ public class RubikStatePlay extends RubikStateAbstract implements RubikPreRender
         final int maxLevel = ObjectList.getMaxLevel(mObject, sizeIndex);
         final int levelsShown = Math.min(maxLevel,LEVELS_SHOWN);
 
-        mPlayPopup.showAsDropDown(view, margin, margin + mSafeInsetTop);
+        mPlayPopup.showAsDropDown(view, margin, margin);
         mPlayPopup.update(view, mPlayLayoutWidth, (int)(levelsShown*(mMenuItemSize+margin)+2*margin));
 
         mPlayPopup.setFocusable(true);
@@ -252,7 +250,7 @@ public class RubikStatePlay extends RubikStateAbstract implements RubikPreRender
           View popupView = mMenuPopup.getContentView();
           popupView.setSystemUiVisibility(RubikActivity.FLAGS);
 
-          mMenuPopup.showAsDropDown(view, (int)(-width/12), margin + mSafeInsetTop);
+          mMenuPopup.showAsDropDown(view, (int)(-width/12), margin);
           mMenuPopup.update(view, mMenuLayoutWidth, mMenuLayoutHeight);
 
           mMenuPopup.setFocusable(true);
@@ -663,13 +661,6 @@ public class RubikStatePlay extends RubikStateAbstract implements RubikPreRender
       }
     }
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public static void setSafeInsetTop(int top)
-    {
-    mSafeInsetTop = top;
-    }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public int getLevel()
diff --git a/src/main/res/layout/main.xml b/src/main/res/layout/main.xml
index a822a48d..ee97aa6a 100644
--- a/src/main/res/layout/main.xml
+++ b/src/main/res/layout/main.xml
@@ -12,7 +12,7 @@
         android:layout_alignParentTop="true"/>
 
     <LinearLayout
-        android:id="@+id/upperBar"
+        android:id="@+id/hiddenBar"
         android:layout_alignParentTop="true"
         android:layout_width="fill_parent"
         android:layout_height="0dp"
@@ -21,6 +21,16 @@
         android:background="@android:color/transparent">
     </LinearLayout>
 
+    <LinearLayout
+        android:id="@+id/upperBar"
+        android:layout_below="@id/hiddenBar"
+        android:layout_width="fill_parent"
+        android:layout_height="0dp"
+        android:gravity="center"
+        android:orientation="horizontal"
+        android:background="@android:color/transparent">
+    </LinearLayout>
+
     <LinearLayout
         android:id="@+id/lowerBar"
         android:layout_alignParentBottom="true"
