commit 2011391df88ababc0b5ce7d0529e678d37618f81
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Wed Nov 30 16:38:41 2022 +0100

    Interface: properly support object which have numScrambles less than 8.

diff --git a/src/main/java/org/distorted/screens/RubikScreenPlay.java b/src/main/java/org/distorted/screens/RubikScreenPlay.java
index 59a11d97..76844f93 100644
--- a/src/main/java/org/distorted/screens/RubikScreenPlay.java
+++ b/src/main/java/org/distorted/screens/RubikScreenPlay.java
@@ -69,6 +69,7 @@ public class RubikScreenPlay extends RubikScreenBase implements RubikNetwork.Upd
   private int mUpperBarHeight;
   private boolean mShouldReactToEndOfScrambling;
   private float mScreenWidth;
+  private int mOldNumScramble;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -89,6 +90,7 @@ public class RubikScreenPlay extends RubikScreenBase implements RubikNetwork.Upd
     mMenuTextSize     = (int)(mScreenWidth*RubikActivity.MENU_MAIN_TEXT_SIZE);
 
     mObjectPopup = null;
+    mOldNumScramble = 1000; // used to remember which 'level' buttons are visible; initially all visible
 
     // TOP ////////////////////////////
     LinearLayout layoutTop = act.findViewById(R.id.upperBar);
@@ -161,7 +163,7 @@ public class RubikScreenPlay extends RubikScreenBase implements RubikNetwork.Upd
           {
           View popupView = mMenuPopup.getContentView();
           popupView.setSystemUiVisibility(RubikActivity.FLAGS);
-          setupLevelColors(act);
+          setupLevelButtonVisibilityAndColor(act);
           displayPopup(act,view,mMenuPopup,mMenuLayoutWidth,mMenuLayoutHeight,(int)(-mMenuLayoutWidth/2 + width/6),0);
           }
         }
@@ -207,7 +209,7 @@ public class RubikScreenPlay extends RubikScreenBase implements RubikNetwork.Upd
               {
               RubikObjectList.setCurrObject(ordinal);
               act.changeObject(ordinal,true);
-              if( mMenuPopup!=null ) setupLevelColors(act);
+              if( mMenuPopup!=null ) setupLevelButtonVisibilityAndColor(act);
               mMovesController.clearMoves(act);
               }
             else
@@ -481,9 +483,11 @@ public class RubikScreenPlay extends RubikScreenBase implements RubikNetwork.Upd
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private void setupLevelColors(RubikActivity act)
+  private void setupLevelButtonVisibilityAndColor(RubikActivity act)
     {
     int currObject = RubikObjectList.getCurrObject();
+    RubikObject object = RubikObjectList.getObject(currObject);
+    int numScramble = object==null ? 1 : object.getNumScramble();
     RubikScores scores = RubikScores.getInstance();
     Resources res = act.getResources();
     ColorStateList colorG = ColorStateList.valueOf(res.getColor(R.color.green));
@@ -494,6 +498,30 @@ public class RubikScreenPlay extends RubikScreenBase implements RubikNetwork.Upd
       boolean isSolved = scores.isSolved(currObject,level);
       mLevel[level].setBackgroundTintList( isSolved ? colorG : colorD);
       }
+
+    if( numScramble<=LEVELS_SHOWN || mOldNumScramble<=LEVELS_SHOWN )
+      {
+      if( numScramble<mOldNumScramble )
+        {
+        int max = Math.min(LEVELS_SHOWN,mOldNumScramble-1);
+        for(int level=numScramble; level<=max; level++) mLevel[level].setVisibility(View.INVISIBLE);
+        mLevel[numScramble-1].setText(R.string.levelM);
+        }
+      if( numScramble>mOldNumScramble )
+        {
+        int max = Math.min(LEVELS_SHOWN,numScramble-1);
+        mLevel[mOldNumScramble-1].setText( String.valueOf(mOldNumScramble) );
+
+        for(int level=mOldNumScramble; level<=max; level++)
+          {
+          mLevel[level].setVisibility(View.VISIBLE);
+          if( level<max ) mLevel[level].setText( String.valueOf(level+1) );
+          else            mLevel[level].setText( R.string.levelM );
+          }
+        }
+      }
+
+    mOldNumScramble = numScramble;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
