commit 972017824d2479809f507f9469824e4ba1701dba
Author: leszek <leszek@koltunski.pl>
Date:   Thu Nov 16 01:03:15 2023 +0100

    bugfixes

diff --git a/src/main/java/org/distorted/bandaged/BandagedActivity.java b/src/main/java/org/distorted/bandaged/BandagedActivity.java
index 8f6e7607..22d82f7e 100644
--- a/src/main/java/org/distorted/bandaged/BandagedActivity.java
+++ b/src/main/java/org/distorted/bandaged/BandagedActivity.java
@@ -313,12 +313,11 @@ public class BandagedActivity extends AppCompatActivity
     public void playObject(String name)
       {
       Intent intent = new Intent(this, PlayActivity.class);
-      intent.putExtra("level", 0);
+      intent.putExtra("level", -1);
       intent.putExtra("name", name);
       intent.putExtra("scrambles", NUM_SCRAMBLES);
       intent.putExtra("local", true);
       intent.putExtra("ordinal", 0);
-      intent.putExtra("free", true);
       startActivity(intent);
       }
 
diff --git a/src/main/java/org/distorted/external/RubikScores.java b/src/main/java/org/distorted/external/RubikScores.java
index d34ccff9..64bbf25f 100644
--- a/src/main/java/org/distorted/external/RubikScores.java
+++ b/src/main/java/org/distorted/external/RubikScores.java
@@ -35,7 +35,7 @@ public class RubikScores
   public static final int RECORD_NOT_NEW = 2;
 
   public static final int MAX_RECORD = 10;
-  public static final int MULT = 1000000;
+  private static final int MULT = 1000000;
   public static final int NO_RECORD = Integer.MAX_VALUE;
   private static RubikScores mThis;
 
@@ -83,7 +83,7 @@ public class RubikScores
 
   private int mapKey(int object,int level)
     {
-    return object*MULT + level;
+    return object*MULT + (level<0 ? MULT-1 : level);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -151,8 +151,9 @@ public class RubikScores
     for(int key: mMap.keySet())
       {
       MapValue value = mMap.get(key);
+      int level = key%MULT;
 
-      if( value!=null && !value.submitted && value.record<NO_RECORD)
+      if( level<MULT-1 && value!=null && !value.submitted && value.record<NO_RECORD)
         {
         if( !first )
           {
@@ -167,13 +168,13 @@ public class RubikScores
         if( object!=null )
           {
           builderObj.append(object.getUpperName());
-          builderLvl.append(key%MULT);
+          builderLvl.append(level);
           builderTim.append(value.record);
           }
         }
       }
 
-    return strObj+builderObj.toString()+strLvl+builderLvl.toString()+strTim+builderTim.toString();
+    return strObj+builderObj+strLvl+builderLvl+strTim+builderTim;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/main/MainActivity.java b/src/main/java/org/distorted/main/MainActivity.java
index 91f93d17..7c53d652 100644
--- a/src/main/java/org/distorted/main/MainActivity.java
+++ b/src/main/java/org/distorted/main/MainActivity.java
@@ -406,7 +406,7 @@ public class MainActivity extends AppCompatActivity implements RubikNetwork.Upda
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-    public void switchToPlay(RubikObject object, int scrambles, boolean free, int level)
+    public void switchToPlay(RubikObject object, int scrambles, int level)
       {
       Intent intent = new Intent(this, PlayActivity.class);
       intent.putExtra("level", level);
@@ -414,7 +414,6 @@ public class MainActivity extends AppCompatActivity implements RubikNetwork.Upda
       intent.putExtra("scrambles", scrambles);
       intent.putExtra("local", object.isLocal() );
       intent.putExtra("ordinal", object.getObjectOrdinal() );
-      intent.putExtra("free", free );
       startActivity(intent);
       }
 
diff --git a/src/main/java/org/distorted/main/MainObjectPopup.java b/src/main/java/org/distorted/main/MainObjectPopup.java
index 859e9f62..c83763b1 100644
--- a/src/main/java/org/distorted/main/MainObjectPopup.java
+++ b/src/main/java/org/distorted/main/MainObjectPopup.java
@@ -199,11 +199,9 @@ public class MainObjectPopup
       level[l].setLayoutParams(params);
       level[l].setPadding(0,0,0,0);
 
-      boolean isSolved = scores.isSolved(mObjectOrdinal,l);
+      final int ll=l-1;
+      boolean isSolved = scores.isSolved(mObjectOrdinal,ll);
       level[l].setBackgroundTintList( isSolved ? colorG : colorD);
-
-      final int ll=l;
-      boolean free = l==0;
       int scrambles = (l>0 && l<min) ? l : numScramble;
 
       level[l].setOnClickListener( new View.OnClickListener()
@@ -212,9 +210,9 @@ public class MainObjectPopup
         public void onClick(View v)
           {
           mPopup.dismiss();
-          if( ll==0 ) scores.setRecord(mObjectOrdinal,0,0); // remember we've entered the 'Free'
+          if( ll<0 ) scores.setRecord(mObjectOrdinal,ll,0); // remember we've entered the 'Free'
                                                             // so that the button turns green
-          act.switchToPlay(object,scrambles,free,ll);
+          act.switchToPlay(object,scrambles,ll);
           }
         });
       }
diff --git a/src/main/java/org/distorted/playui/PlayActivity.java b/src/main/java/org/distorted/playui/PlayActivity.java
index ab0d5d20..c9197d3e 100644
--- a/src/main/java/org/distorted/playui/PlayActivity.java
+++ b/src/main/java/org/distorted/playui/PlayActivity.java
@@ -85,18 +85,18 @@ public class PlayActivity extends AppCompatActivity
         mNumScrambles  = b.getInt("scrambles");
         mObjectLocal   = b.getBoolean("local");
         mObjectOrdinal = b.getInt("ordinal");
-        mModeFree      = b.getBoolean("free");
         }
       else
         {
-        mLevel = 0;
+        mLevel = -1;
         mObjectName = "";
         mNumScrambles = 0;
         mObjectLocal = true;
         mObjectOrdinal = 0;
-        mModeFree = true;
         }
 
+      mModeFree = (mLevel<0);
+
       DisplayMetrics displaymetrics = new DisplayMetrics();
       getWindowManager().getDefaultDisplay().getRealMetrics(displaymetrics);
       mScreenWidth =displaymetrics.widthPixels;
