commit 2da6829841b88e0e83511c73b1deae1044197206
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Wed Oct 13 13:59:16 2021 +0200

    Create the 3 Popups only on first button click - this time we can have the final screen dimensions (and also it starts faster ) Before we weree getting the screen size from before hiding navigation bars, which made the height smaller, which made the number of obejcts and levels in the popups sometimes too small!

diff --git a/src/main/java/org/distorted/main/RubikActivity.java b/src/main/java/org/distorted/main/RubikActivity.java
index f27fa171..c947b306 100644
--- a/src/main/java/org/distorted/main/RubikActivity.java
+++ b/src/main/java/org/distorted/main/RubikActivity.java
@@ -337,6 +337,14 @@ public class RubikActivity extends AppCompatActivity
       errDiag.show(getSupportFragmentManager(), null);
       }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    void setScreenSize(int width, int height)
+      {
+      mScreenWidth = width;
+      mScreenHeight= height;
+      }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 // PUBLIC API
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/main/RubikSurfaceView.java b/src/main/java/org/distorted/main/RubikSurfaceView.java
index d0596399..c6838da9 100644
--- a/src/main/java/org/distorted/main/RubikSurfaceView.java
+++ b/src/main/java/org/distorted/main/RubikSurfaceView.java
@@ -49,6 +49,16 @@ public class RubikSurfaceView extends GLSurfaceView
       mScreenWidth = width;
       mScreenHeight= height;
       mObjectController.setScreenSize(width,height);
+
+      try
+        {
+        RubikActivity act = (RubikActivity)getContext();
+        act.setScreenSize(width,height);
+        }
+      catch( Exception ex )
+        {
+        android.util.Log.e("D", "Failed to set screen size!");
+        }
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/screens/RubikScreenPlay.java b/src/main/java/org/distorted/screens/RubikScreenPlay.java
index 84708bf0..8ff60bb0 100644
--- a/src/main/java/org/distorted/screens/RubikScreenPlay.java
+++ b/src/main/java/org/distorted/screens/RubikScreenPlay.java
@@ -104,7 +104,6 @@ public class RubikScreenPlay extends RubikScreenBase
   void enterScreen(final RubikActivity act)
     {
     float width = act.getScreenWidthInPixels();
-    float height= act.getScreenHeightInPixels();
     mUpperBarHeight = act.getHeightUpperBar();
 
     mMenuTextSize = width*RubikActivity.MENU_MED_TEXT_SIZE;
@@ -118,16 +117,13 @@ public class RubikScreenPlay extends RubikScreenBase
     LinearLayout layoutTop = act.findViewById(R.id.upperBar);
     layoutTop.removeAllViews();
 
-    setupObjectWindow(act,width,height);
     setupObjectButton(act,width);
     layoutTop.addView(mObjButton);
 
-    setupMenuWindow(act,width);
     setupMenuButton(act,width);
     layoutTop.addView(mMenuButton);
 
-    setupPlayWindow(act,width);
-    setupPlayButton(act,width,height);
+    setupPlayButton(act,width);
     layoutTop.addView(mPlayButton);
 
     setupSolveButton(act,width);
@@ -148,7 +144,14 @@ public class RubikScreenPlay extends RubikScreenBase
       @Override
       public void onClick(View view)
         {
-        if( mObjectPopup!=null && act.getControl().isUINotBlocked())
+        if( mObjectPopup==null )
+          {
+          float width = act.getScreenWidthInPixels();
+          float height= act.getScreenHeightInPixels();
+          setupObjectWindow(act,width,height);
+          }
+
+        if( act.getControl().isUINotBlocked())
           {
           int rowCount = Math.min(mMaxRowCount,mRowCount);
           View popupView = mObjectPopup.getContentView();
@@ -161,10 +164,9 @@ public class RubikScreenPlay extends RubikScreenBase
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private void setupPlayButton(final RubikActivity act, final float width, final float height)
+  private void setupPlayButton(final RubikActivity act, final float width)
     {
-    final int margin   = (int)(width*RubikActivity.MARGIN);
-    final int maxHeight= (int)(0.9f*(height-mUpperBarHeight) );
+    final int margin = (int)(width*RubikActivity.MARGIN);
 
     mPlayButton = new TransparentButton(act, R.string.play, mButtonSize, width);
 
@@ -173,8 +175,16 @@ public class RubikScreenPlay extends RubikScreenBase
       @Override
       public void onClick(View view)
         {
-        if( mPlayPopup!=null && act.getControl().isUINotBlocked())
+         if( mPlayPopup==null )
+          {
+          float width = act.getScreenWidthInPixels();
+          setupPlayWindow(act,width);
+          }
+
+        if( act.getControl().isUINotBlocked())
           {
+          float height= act.getScreenHeightInPixels();
+          final int maxHeight= (int)(0.9f*(height-mUpperBarHeight) );
           View popupView = mPlayPopup.getContentView();
           popupView.setSystemUiVisibility(RubikActivity.FLAGS);
           final int dbLevel = getDBLevel(mObject);
@@ -191,7 +201,7 @@ public class RubikScreenPlay extends RubikScreenBase
 
   private void setupMenuButton(final RubikActivity act, final float width)
     {
-    final int margin  = (int)(width*RubikActivity.MARGIN);
+    final int margin = (int)(width*RubikActivity.MARGIN);
     final int icon = RubikActivity.getDrawable(R.drawable.ui_small_menu,R.drawable.ui_medium_menu, R.drawable.ui_big_menu, R.drawable.ui_huge_menu);
 
     mMenuButton = new TransparentImageButton(act, icon, width,LinearLayout.LayoutParams.MATCH_PARENT);
@@ -201,7 +211,13 @@ public class RubikScreenPlay extends RubikScreenBase
       @Override
       public void onClick(View view)
         {
-        if( mMenuPopup!=null && act.getControl().isUINotBlocked())
+        if( mMenuPopup==null )
+          {
+          float width = act.getScreenWidthInPixels();
+          setupMenuWindow(act,width);
+          }
+
+        if( act.getControl().isUINotBlocked())
           {
           View popupView = mMenuPopup.getContentView();
           popupView.setSystemUiVisibility(RubikActivity.FLAGS);
