commit 7c0cc7a597005ba1c5fb09dd798b8021d03022f2
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Sun Nov 16 00:33:44 2025 +0100

    progress with remembering solves

diff --git a/src/main/java/org/distorted/dialogs/DialogAbandon.java b/src/main/java/org/distorted/dialogs/DialogAbandon.java
index ae1b9c4a..2b711f57 100644
--- a/src/main/java/org/distorted/dialogs/DialogAbandon.java
+++ b/src/main/java/org/distorted/dialogs/DialogAbandon.java
@@ -19,6 +19,7 @@ import androidx.fragment.app.FragmentActivity;
 import org.distorted.main.R;
 import org.distorted.play.PlayActivity;
 import org.distorted.play.ScreenList;
+import org.distorted.play.ScreenSolving;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -48,7 +49,9 @@ public class DialogAbandon extends DialogAbstract
 
     if( act!=null )
       {
-      act.rememberSolve();
+      ScreenSolving solving = (ScreenSolving)ScreenList.SOLV.getScreenClass();
+      int time = solving.stopTimerAndGetRecord();
+      act.rememberSolve(time);
       ScreenList.goBack(act);
       }
     }
diff --git a/src/main/java/org/distorted/helpers/RubikRememberedSolves.java b/src/main/java/org/distorted/helpers/RubikRememberedSolves.java
index 96a390fa..f9111714 100644
--- a/src/main/java/org/distorted/helpers/RubikRememberedSolves.java
+++ b/src/main/java/org/distorted/helpers/RubikRememberedSolves.java
@@ -110,7 +110,7 @@ public class RubikRememberedSolves
         JSONArray levels = new JSONArray(contents);
         JSONArray lvl = levels.getJSONArray(level);
         JSONObject data = createData(elapsed,rot,quats);
-        if( lvl.length()>=MAXSOLVES ) lvl.remove(0);
+        if( lvl.length()>=MAXSOLVES || level==0) lvl.remove(0);
         lvl.put(data);
         return levels.toString();
         }
diff --git a/src/main/java/org/distorted/main/MainObjectPopup.java b/src/main/java/org/distorted/main/MainObjectPopup.java
index 18928726..6e9a98ec 100644
--- a/src/main/java/org/distorted/main/MainObjectPopup.java
+++ b/src/main/java/org/distorted/main/MainObjectPopup.java
@@ -26,10 +26,12 @@ import android.widget.TextView;
 
 import org.distorted.helpers.RubikRememberedSolves;
 import org.distorted.helpers.RubikScores;
+import org.distorted.library.type.Static4D;
 import org.distorted.objects.RubikObject;
 import org.distorted.objects.RubikObjectList;
 import org.json.JSONArray;
 import org.json.JSONException;
+import org.json.JSONObject;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -277,16 +279,38 @@ public class MainObjectPopup
               }
             catch(JSONException jex)
               {
-              android.util.Log.e("D", "exception trying to parse file: "+jex.getMessage() );
+              android.util.Log.e("D", "Exception 1 trying to parse file: "+jex.getMessage() );
               }
             }
 
-          if( numSolves>0 )
+          if( numSolves>0 && ll>=0 )
             {
             MainSolvesPopup popup = new MainSolvesPopup(act,object,mObjectOrdinal,scrambles,ll,json,height);
             popup.show(v);
             }
-          else act.switchToPlay(object,mObjectOrdinal,scrambles,ll,0,null,null);
+          else
+            {
+            if( numSolves>0 )
+              {
+              RubikRememberedSolves solves = RubikRememberedSolves.getInstance();
+
+              try
+                {
+                JSONObject obj = json.getJSONObject(0);
+                Static4D rotQuat = solves.getRotQuat(obj);
+                int[] quats = solves.getQuats(obj);
+                act.switchToPlay(object,mObjectOrdinal,scrambles,ll,1,rotQuat,quats);
+                }
+              catch(JSONException jex)
+                {
+                android.util.Log.e("D", "Exception 2 trying to parse file: "+jex.getMessage() );
+                }
+              }
+            else
+              {
+              act.switchToPlay(object,mObjectOrdinal,scrambles,ll,0,null,null);
+              }
+            }
           }
         });
       }
diff --git a/src/main/java/org/distorted/play/PlayActivity.java b/src/main/java/org/distorted/play/PlayActivity.java
index 37ee3825..18d49ab0 100644
--- a/src/main/java/org/distorted/play/PlayActivity.java
+++ b/src/main/java/org/distorted/play/PlayActivity.java
@@ -344,14 +344,12 @@ public class PlayActivity extends BaseActivity implements DialogScores.ScoresInv
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-    public void rememberSolve()
+    public void rememberSolve(int time)
       {
       ObjectControl control = getControl();
       TwistyObject object = control.getObject();
 
       int level = mLevel==LEVELS_SHOWN ? mLevel : mLevel+1;
-      ScreenSolving solving = (ScreenSolving)ScreenList.SOLV.getScreenClass();
-      int time = solving.stopTimerAndGetRecord();
       String name = object.getShortName();
       int numCubits = object.getNumCubits();
       int[] quats = new int[numCubits];
diff --git a/src/main/java/org/distorted/play/ScreenFree.java b/src/main/java/org/distorted/play/ScreenFree.java
index 9ab6dfb8..53140126 100644
--- a/src/main/java/org/distorted/play/ScreenFree.java
+++ b/src/main/java/org/distorted/play/ScreenFree.java
@@ -79,7 +79,7 @@ public class ScreenFree extends ScreenBase
       @Override
       public void onClick(View v)
         {
-        act.rememberSolve();
+        act.rememberSolve(1);  // has to be >0. See PlayActivity.mModeResume
         act.finish();
         }
       });
