commit 1088a219103d4470732889defa1924cc4ae5eb98
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Tue Jul 12 00:48:24 2022 +0200

    Progress with colors in the Menu Level Buttons

diff --git a/src/main/java/org/distorted/objects/RubikObjectList.java b/src/main/java/org/distorted/objects/RubikObjectList.java
index 024f45f8..180c65d0 100644
--- a/src/main/java/org/distorted/objects/RubikObjectList.java
+++ b/src/main/java/org/distorted/objects/RubikObjectList.java
@@ -395,13 +395,11 @@ public class RubikObjectList
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public static boolean setCurrObject(RubikActivity act, int ordinal)
+  public static boolean setCurrObject(int ordinal)
     {
     if( mObject!=ordinal )
       {
       mObject = ordinal;
-      RubikScreenPlay play = (RubikScreenPlay) ScreenList.PLAY.getScreenClass();
-      play.setCurrObject(act);
       return true;
       }
 
diff --git a/src/main/java/org/distorted/screens/RubikScreenPattern.java b/src/main/java/org/distorted/screens/RubikScreenPattern.java
index 422dbc6b..cf2a74b2 100644
--- a/src/main/java/org/distorted/screens/RubikScreenPattern.java
+++ b/src/main/java/org/distorted/screens/RubikScreenPattern.java
@@ -62,7 +62,7 @@ public class RubikScreenPattern extends RubikScreenAbstract
     {
     int object = RubikPatternList.getObject(mPatternOrdinal);
 
-    if( !RubikObjectList.setCurrObject(act,object) )
+    if( !RubikObjectList.setCurrObject(object) )
       {
       act.changeObject(object,false);
       }
diff --git a/src/main/java/org/distorted/screens/RubikScreenPlay.java b/src/main/java/org/distorted/screens/RubikScreenPlay.java
index 4b5037f8..6697eb82 100644
--- a/src/main/java/org/distorted/screens/RubikScreenPlay.java
+++ b/src/main/java/org/distorted/screens/RubikScreenPlay.java
@@ -40,6 +40,7 @@ import android.widget.TextView;
 
 import org.distorted.dialogs.RubikDialogUpdates;
 import org.distorted.external.RubikNetwork;
+import org.distorted.external.RubikScores;
 import org.distorted.external.RubikUpdates;
 
 import org.distorted.main.R;
@@ -70,6 +71,7 @@ public class RubikScreenPlay extends RubikScreenBase implements RubikNetwork.Upd
   private PopupWindow mObjectPopup, mMenuPopup;
   private WeakReference<RubikActivity> mWeakAct;
   private TextView mBubbleUpdates;
+  private Button[] mLevel;
   private int mObjectSize, mMenuLayoutWidth, mMenuLayoutHeight, mMenuButtonHeight, mMenuTextSize;
   private int mLevelValue;
   private int mColCount, mRowCount, mMaxRowCount;
@@ -170,6 +172,7 @@ public class RubikScreenPlay extends RubikScreenBase implements RubikNetwork.Upd
           {
           View popupView = mMenuPopup.getContentView();
           popupView.setSystemUiVisibility(RubikActivity.FLAGS);
+          setupLevelColors();
           displayPopup(act,view,mMenuPopup,mMenuLayoutWidth,mMenuLayoutHeight,(int)(-mMenuLayoutWidth/2 + width/6),0);
           }
         }
@@ -235,9 +238,9 @@ public class RubikScreenPlay extends RubikScreenBase implements RubikNetwork.Upd
             if( type==MainEntry.TYPE_OBJECT )
               {
               int ordinal = mainEntry.getOrdinal();
-              RubikObjectList.setCurrObject(act,ordinal);
+              RubikObjectList.setCurrObject(ordinal);
               act.changeObject(ordinal,true);
-              if( mMenuPopup!=null ) adjustLevels(act);
+              if( mMenuPopup!=null ) setupLevelColors();
               mMovesController.clearMoves(act);
               }
             else if( type==MainEntry.TYPE_CREATOR )
@@ -458,6 +461,7 @@ public class RubikScreenPlay extends RubikScreenBase implements RubikNetwork.Upd
     levels.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize);
 
     setupLevelButtons(act,layout,padding);
+    setupLevelColors();
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -469,49 +473,24 @@ public class RubikScreenPlay extends RubikScreenBase implements RubikNetwork.Upd
     LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(sizeW,sizeH);
     params.setMargins(padding/2,0,padding/2,0);
 
-    Button level1 = layout.findViewById(R.id.level1);
-    level1.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize);
-    level1.setLayoutParams(params);
-    setupLevelButton(act,level1,1);
-    Button level2 = layout.findViewById(R.id.level2);
-    level2.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize);
-    level2.setLayoutParams(params);
-    setupLevelButton(act,level2,2);
-    Button level3 = layout.findViewById(R.id.level3);
-    level3.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize);
-    level3.setLayoutParams(params);
-    setupLevelButton(act,level3,3);
-    Button level4 = layout.findViewById(R.id.level4);
-    level4.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize);
-    level4.setLayoutParams(params);
-    setupLevelButton(act,level4,4);
-    Button level5 = layout.findViewById(R.id.level5);
-    level5.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize);
-    level5.setLayoutParams(params);
-    setupLevelButton(act,level5,5);
-    Button level6 = layout.findViewById(R.id.level6);
-    level6.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize);
-    level6.setLayoutParams(params);
-    setupLevelButton(act,level6,6);
-    Button level7 = layout.findViewById(R.id.level7);
-    level7.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize);
-    level7.setLayoutParams(params);
-    setupLevelButton(act,level7,7);
-    Button level8 = layout.findViewById(R.id.level8);
-    level8.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize);
-    level8.setLayoutParams(params);
-    setupLevelButton(act,level8,8);
-    Button levelM = layout.findViewById(R.id.levelM);
-    levelM.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize);
-    levelM.setLayoutParams(params);
-    setupLevelButton(act,levelM,9);
-    }
+    mLevel = new Button[LEVELS_SHOWN+1];
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
+    mLevel[0] = layout.findViewById(R.id.level1);
+    mLevel[1] = layout.findViewById(R.id.level2);
+    mLevel[2] = layout.findViewById(R.id.level3);
+    mLevel[3] = layout.findViewById(R.id.level4);
+    mLevel[4] = layout.findViewById(R.id.level5);
+    mLevel[5] = layout.findViewById(R.id.level6);
+    mLevel[6] = layout.findViewById(R.id.level7);
+    mLevel[7] = layout.findViewById(R.id.level8);
+    mLevel[8] = layout.findViewById(R.id.levelM);
 
-  private void setupLevelButton(RubikActivity act, Button button, int level)
-    {
-    button.setOnClickListener( new View.OnClickListener()
+    for(int i=0; i<=LEVELS_SHOWN; i++)
+      {
+      final int ii = i;
+      mLevel[i].setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize);
+      mLevel[i].setLayoutParams(params);
+      mLevel[i].setOnClickListener( new View.OnClickListener()
         {
         @Override
         public void onClick(View v)
@@ -524,14 +503,31 @@ public class RubikScreenPlay extends RubikScreenBase implements RubikNetwork.Upd
 
             int currObject = RubikObjectList.getCurrObject();
             RubikObject object = RubikObjectList.getObject(currObject);
-            final int scrambles = level<=LEVELS_SHOWN ? level : (object==null ? 0 : object.getNumScramble());
-
-            mLevelValue = level;
+            final int scrambles = ii<LEVELS_SHOWN ? ii+1 : (object==null ? 0 : object.getNumScramble());
+            mLevelValue = ii+1;
             mShouldReactToEndOfScrambling = true;
             control.scrambleObject(scrambles);
             }
           }
         });
+      }
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private void setupLevelColors()
+    {
+    int currObject = RubikObjectList.getCurrObject();
+    int dbLevel = RubikObjectList.getDBLevel(currObject);
+    RubikScores scores = RubikScores.getInstance();
+
+    for(int i=0; i<=LEVELS_SHOWN; i++)
+      {
+      int level = i<LEVELS_SHOWN ? i : dbLevel;
+      boolean isSolved = scores.isSolved(currObject,level);
+      int icon = isSolved ? R.drawable.ui_solved : R.drawable.ui_notsolved;
+      mLevel[i].setCompoundDrawablesWithIntrinsicBounds(icon,0,0,0);
+      }
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -561,14 +557,7 @@ public class RubikScreenPlay extends RubikScreenBase implements RubikNetwork.Upd
 
   public void restorePreferences(SharedPreferences preferences)
     {
-    mLevelValue    = preferences.getInt("play_LevelValue", 0);
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public void setCurrObject(RubikActivity act)
-    {
-    if( mMenuPopup!=null ) adjustLevels(act);
+    mLevelValue = preferences.getInt("play_LevelValue", 0);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -616,103 +605,6 @@ public class RubikScreenPlay extends RubikScreenBase implements RubikNetwork.Upd
       }
     }
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-/*
-  private void adjustSolvedIcons()
-    {
-    if( mPlayLayout!=null )
-      {
-      int currObject = RubikObjectList.getCurrObject();
-      int dbLevel = RubikObjectList.getDBLevel(currObject);
-      int numLevel= Math.min(dbLevel, LEVELS_SHOWN)+1;
-      RubikScores scores = RubikScores.getInstance();
-
-      for(int i=0; i<numLevel; i++)
-        {
-        int level = i<numLevel-1 ? i : dbLevel;
-        Button button = (Button)mPlayLayout.getChildAt(i);
-        boolean isSolved = i>0 ? scores.isSolved(currObject, level-1) : hasBeenPlayed();
-        int icon = isSolved ? R.drawable.ui_solved : R.drawable.ui_notsolved;
-        button.setCompoundDrawablesWithIntrinsicBounds(icon,0,0,0);
-        }
-      }
-    }
-*/
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  private void adjustLevels(final RubikActivity act)
-    {
-    /*
-    int currObject = RubikObjectList.getCurrObject();
-    int dbLevel = RubikObjectList.getDBLevel(currObject);
-    RubikObject object = RubikObjectList.getObject(currObject);
-    int numScrambles = object==null ? 0 : object.getNumScramble();
-    int numLevel = Math.min(dbLevel, LEVELS_SHOWN)+1;
-    String[] levels = new String[numLevel];
-
-    levels[0] = act.getString(R.string.free_play);
-    for(int i=1; i<numLevel-1; i++) levels[i] = act.getString(R.string.lv_placeholder,i);
-    levels[numLevel-1] = act.getString(R.string.level_full);
-
-    if( mLevelValue>dbLevel || mLevelValue<1 ||
-       (mLevelValue<dbLevel || mLevelValue>LEVELS_SHOWN ) ) mLevelValue=1;
-
-    float width  = act.getScreenWidthInPixels();
-    int margin   = (int)(width*RubikActivity.SMALL_MARGIN);
-    int padding  = (int)(width*RubikActivity.PADDING);
-    int butWidth = 0;//mPlayLayoutWidth - 2*padding;
-    int butHeight= (int)mMenuItemSize;
-    int bigButH  = (int)(mMenuItemSize*BIG_BUTTON) ;
-
-    LinearLayout.LayoutParams pM = new LinearLayout.LayoutParams( butWidth, butHeight );
-    pM.setMargins(margin, 0, margin, margin);
-    LinearLayout.LayoutParams pB = new LinearLayout.LayoutParams( butWidth, bigButH   );
-    pB.setMargins(margin, margin, margin, 2*margin);
-
-    mPlayLayout.removeAllViews();
-
-    for(int i=0; i<numLevel; i++)
-      {
-      final int level     = i<numLevel-1 ? i : dbLevel;
-      final int scrambles = i<numLevel-1 ? i : numScrambles;
-      Button button = new Button(act);
-      button.setLayoutParams(i==0 ? pB : (i==numLevel-1 ? pB : pM));
-      button.setText(levels[i]);
-      button.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize);
-
-      button.setOnClickListener( new View.OnClickListener()
-        {
-        @Override
-        public void onClick(View v)
-          {
-          ObjectControl control = act.getControl();
-
-          if(control.isUINotBlocked())
-            {
-            if( mPlayPopup!=null ) mPlayPopup.dismiss();
-
-            if( level>0 )
-              {
-              mLevelValue = level;
-              mShouldReactToEndOfScrambling = true;
-              control.scrambleObject(scrambles);
-              }
-            else
-              {
-              addToPlayedObjects();
-              mShouldReactToEndOfScrambling = false;
-              ScreenList.switchScreen(act, ScreenList.FREE);
-              }
-            }
-          }
-        });
-
-      mPlayLayout.addView(button);
-      }
-
-     */
-    }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public int getLevel()
diff --git a/src/main/java/org/distorted/screens/RubikScreenSolver.java b/src/main/java/org/distorted/screens/RubikScreenSolver.java
index 8781a53f..0cdf71c4 100644
--- a/src/main/java/org/distorted/screens/RubikScreenSolver.java
+++ b/src/main/java/org/distorted/screens/RubikScreenSolver.java
@@ -87,7 +87,7 @@ public class RubikScreenSolver extends RubikScreenAbstract
     act.changeIfDifferent(currentObject,control);
     control.solveOnly();
 
-    RubikObjectList.setCurrObject(act, currentObject);
+    RubikObjectList.setCurrObject(currentObject);
 
     generateFaceColors();
 
