commit d7f9a1a7d2450d631ce01fa70a41385b39b1545d
Author: leszek <leszek@koltunski.pl>
Date:   Fri Mar 14 00:31:40 2025 +0100

    bugfix: do not use ListObjects in the app anywhere except the RubikObjectList and RubikObject.
    
    In particular, stop using it in the Solver part of the app. Now after this bugfix we can rearrange the objects in the ListObjects at will.

diff --git a/src/main/java/org/distorted/dialogs/DialogPattern.java b/src/main/java/org/distorted/dialogs/DialogPattern.java
index f1b899f2..a797de8c 100644
--- a/src/main/java/org/distorted/dialogs/DialogPattern.java
+++ b/src/main/java/org/distorted/dialogs/DialogPattern.java
@@ -87,8 +87,6 @@ public class DialogPattern extends DialogAbstract
       return;
       }
 
-    android.util.Log.e("D", "prepareBody: object "+mArgument);
-
     final PatternActivity pact = (PatternActivity)getContext();
     int width = pact!=null ? pact.getScreenWidthInPixels() : 100;
     final ObjectControl control = pact!=null ? pact.getControl() : null;
diff --git a/src/main/java/org/distorted/dialogs/DialogSolvers.java b/src/main/java/org/distorted/dialogs/DialogSolvers.java
index 24d4f8be..a8e0588b 100644
--- a/src/main/java/org/distorted/dialogs/DialogSolvers.java
+++ b/src/main/java/org/distorted/dialogs/DialogSolvers.java
@@ -21,7 +21,6 @@ import android.widget.TextView;
 import androidx.fragment.app.FragmentActivity;
 
 import org.distorted.main.R;
-import org.distorted.objectlib.metadata.ListObjects;
 import org.distorted.solvers.SolverActivity;
 import org.distorted.objectlib.solvers.verifiers.ImplementedVerifierList;
 import org.distorted.solvers.SolverDescriptions;
@@ -85,9 +84,7 @@ public class DialogSolvers extends DialogAbstract
     pB.setMargins(0,2*margin,0,0);
 
     SolverActivity sact = (SolverActivity) getContext();
-    int objectOrdinal = ListObjects.getObjectOrdinal(mArgument);
-    ListObjects list = ListObjects.getObject(objectOrdinal);
-    int[] solverOrdinals = ImplementedVerifierList.getSolverOrdinals(list);
+    int[] solverOrdinals = ImplementedVerifierList.getSolverOrdinals(mArgument);
     int len = solverOrdinals==null ? 0 : solverOrdinals.length;
 
     for(int o=0; o<len; o++ )
diff --git a/src/main/java/org/distorted/objects/RubikObject.java b/src/main/java/org/distorted/objects/RubikObject.java
index a23b746f..5c8cc76e 100644
--- a/src/main/java/org/distorted/objects/RubikObject.java
+++ b/src/main/java/org/distorted/objects/RubikObject.java
@@ -81,8 +81,7 @@ public class RubikObject
     int patternOrdinal  = RubikPatternList.getOrdinal(mObjectIndex);
     mPatterns = RubikPatternList.getPatterns(patternOrdinal);
 
-    ListObjects list = ListObjects.getObject(mObjectOrdinal);
-    int[] solverOrdinals= ImplementedVerifierList.getSolverOrdinals(list);
+    int[] solverOrdinals= ImplementedVerifierList.getSolverOrdinals(mUpperName);
     mNumSolvers = solverOrdinals==null ? 0 : solverOrdinals.length;
     mExtrasOrdinal = -1;
 
diff --git a/src/main/java/org/distorted/solvers/ScreenSetupPosition.java b/src/main/java/org/distorted/solvers/ScreenSetupPosition.java
index 0ec62231..b958f967 100644
--- a/src/main/java/org/distorted/solvers/ScreenSetupPosition.java
+++ b/src/main/java/org/distorted/solvers/ScreenSetupPosition.java
@@ -9,8 +9,6 @@
 
 package org.distorted.solvers;
 
-import static org.distorted.objectlib.metadata.ListObjects.*;
-
 import android.content.SharedPreferences;
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
@@ -36,7 +34,6 @@ import org.distorted.objectlib.helpers.ObjectMove;
 import org.distorted.objectlib.helpers.OperatingSystemInterface;
 import org.distorted.objectlib.main.ObjectControl;
 import org.distorted.objectlib.main.TwistyObject;
-import org.distorted.objectlib.metadata.ListObjects;
 import org.distorted.objectlib.shape.*;
 import org.distorted.objectlib.solvers.verifiers.ResultScreen;
 import org.distorted.objectlib.solvers.verifiers.SolverAbstract;
@@ -65,7 +62,7 @@ public class ScreenSetupPosition extends ScreenAbstract implements ResultScreen
   private int mNumBitmapRows;
   private float mBitmapSize;
   private WeakReference<SolverActivity> mWeakAct;
-  private ListObjects mObject;
+  private String mObjectUpperName;
   private String[] mPhaseNames;
   private Timer mTimer;
   private SolverAbstract mSolver;
@@ -92,9 +89,9 @@ public class ScreenSetupPosition extends ScreenAbstract implements ResultScreen
     mSolving = false;
     mPhaseNames = null;
 
-    mObject = act.getObjectList();
+    mObjectUpperName = act.getObjectName();
     control.solveOnly();
-    generateFaceColors(mObject);
+    generateFaceColors(mObjectUpperName);
 
     mNumBitmapRows = mNumColors>8 ? 2 : 1;
     mBitmapSize = computeBitmapSize(width,heigh);
@@ -181,54 +178,39 @@ public class ScreenSetupPosition extends ScreenAbstract implements ResultScreen
 // This doesn't quite work in many cases, but in case of the solvers that will pop up in foreseeable
 // future it should be ok.
 
-  public void generateFaceColors(ListObjects object)
+  public void generateFaceColors(String upper)
     {
     mColorMode = MODE_NORMAL;
 
-    if( object==PYRA_3 ||
-        object==PYRA_4 ||
-        object==PYRA_5 ||
-        object==PDUO_2 ||
-        object==JING_2 ||
-        object==MORP_2 ||
-        object==MORP_3 ||
-        object==MORP_4  )
+
+    if( upper.startsWith("PYRA") || upper.startsWith("PDUO") || upper.startsWith("JING") ||
+        upper.startsWith("MORP") )
       {
       mNumColors  = ShapeTetrahedron.NUM_FACES;
       mFaceColors = ShapeTetrahedron.FACE_COLORS;
       }
-    else if( object==DIAM_2 ||
-             object==DIAM_3 ||
-             object==DIAM_4 ||
-             object==TRAJ_3 ||
-             object==TRAJ_4 ||
-             object==PDIA_3  )
+    else if( upper.startsWith("DIAM") || upper.startsWith("TRAJ") || upper.startsWith("PDIA") )
       {
       mNumColors  = ShapeOctahedron.NUM_FACES;
       mFaceColors = ShapeOctahedron.FACE_COLORS;
       }
-    else if( object==CRYS_3 ||
-             object==STAR_3 ||
-             object==PENT_2 ||
-             object==KILO_3 ||
-             object==KILO_5 ||
-             object==MEGA_3 ||
-             object==MEGA_5  )
+    else if( upper.startsWith("CRYS") || upper.startsWith("STAR") || upper.startsWith("PENT") ||
+             upper.startsWith("KILO") || upper.startsWith("MEGA") )
       {
       mNumColors  = ShapeDodecahedron.NUM_FACES;
       mFaceColors = ShapeDodecahedron.FACE_COLORS;
       }
-    else if( object==BALL_4 )
+    else if( upper.startsWith("BALL") )
       {
       mNumColors  = ShapeDiamond.NUM_FACES;
       mFaceColors = ShapeDiamond.FACE_COLORS;
       }
-    else if( object==ICOS_2 )
+    else if( upper.startsWith("ICOS") )
       {
       mNumColors  = ShapeIcosahedron.NUM_FACES;
       mFaceColors = ShapeIcosahedron.FACE_COLORS;
       }
-    else if( object==DIN4_3 )
+    else if( upper.startsWith("DIN4") )
       {
       mNumColors  = 4;
       mFaceColors = new int[] { ShapeColors.COLOR_YELLOW, ShapeColors.COLOR_RED, ShapeColors.COLOR_BLUE, ShapeColors.COLOR_WHITE};
@@ -292,7 +274,7 @@ public class ScreenSetupPosition extends ScreenAbstract implements ResultScreen
 
   private void pressSolve(SolverActivity act)
     {
-    int[] solverOrdinals = ImplementedVerifierList.getSolverOrdinals(mObject);
+    int[] solverOrdinals = ImplementedVerifierList.getSolverOrdinals(mObjectUpperName);
 
     if( solverOrdinals!=null  )
       {
@@ -314,9 +296,8 @@ public class ScreenSetupPosition extends ScreenAbstract implements ResultScreen
             }
           else // more than one solver - pop up a choosing dialog
             {
-            String upperName = mObject.name();
             Bundle bundle = new Bundle();
-            bundle.putString("argument", upperName );
+            bundle.putString("argument", mObjectUpperName );
             DialogSolvers dialog = new DialogSolvers();
             dialog.setArguments(bundle);
             dialog.show( act.getSupportFragmentManager(), DialogSolvers.getDialogTag());
@@ -326,7 +307,7 @@ public class ScreenSetupPosition extends ScreenAbstract implements ResultScreen
         }
       else displayErrorDialog(act.getString(R.string.solver_generic_not_implemented));
       }
-    else displayErrorDialog("No solvers found for object "+mObject.name() );
+    else displayErrorDialog("No solvers found for object "+mObjectUpperName );
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/solvers/SolverActivity.java b/src/main/java/org/distorted/solvers/SolverActivity.java
index 0e6849bc..61ae254c 100644
--- a/src/main/java/org/distorted/solvers/SolverActivity.java
+++ b/src/main/java/org/distorted/solvers/SolverActivity.java
@@ -26,7 +26,6 @@ import org.distorted.objectlib.helpers.OperatingSystemInterface;
 import org.distorted.objectlib.main.InitAssets;
 import org.distorted.objectlib.main.ObjectControl;
 import org.distorted.objectlib.main.TwistyObject;
-import org.distorted.objectlib.metadata.ListObjects;
 import org.distorted.objectlib.solvers.verifiers.SolverAbstract;
 import org.distorted.objects.RubikObject;
 import org.distorted.objects.RubikObjectList;
@@ -227,9 +226,10 @@ public class SolverActivity extends BaseActivity
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-    public ListObjects getObjectList()
+    public String getObjectName()
       {
-      return ListObjects.getObject(mObjectOrdinal);
+      RubikObject object = RubikObjectList.getObject(mObjectOrdinal);
+      return object !=null ? object.getUpperName() : "NULL";
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/solvers/SolverObjectLibInterface.java b/src/main/java/org/distorted/solvers/SolverObjectLibInterface.java
index 61fdc569..60f3b920 100644
--- a/src/main/java/org/distorted/solvers/SolverObjectLibInterface.java
+++ b/src/main/java/org/distorted/solvers/SolverObjectLibInterface.java
@@ -16,7 +16,6 @@ import org.distorted.main.BuildConfig;
 import org.distorted.objectlib.helpers.BlockController;
 import org.distorted.objectlib.helpers.ObjectLibInterface;
 import org.distorted.objectlib.main.ObjectControl;
-import org.distorted.objectlib.metadata.ListObjects;
 import org.distorted.objects.RubikObject;
 import org.distorted.objects.RubikObjectList;
 import org.distorted.objectlib.solvers.verifiers.ImplementedVerifierList;
@@ -173,8 +172,8 @@ public class SolverObjectLibInterface implements ObjectLibInterface
     SolverActivity act = mAct.get();
     ScreenSetupPosition solver = (ScreenSetupPosition) ScreenList.SVER.getScreenClass();
     int color = solver.getCurrentColor();
-    ListObjects currObject = act.getObjectList();
-    mLastCubitColor = ImplementedVerifierList.cubitIsLocked(currObject,cubit);
+    String objectUpperName = act.getObjectName();
+    mLastCubitColor = ImplementedVerifierList.cubitIsLocked(objectUpperName,cubit);
     mLastCubit = cubit;
     mLastCubitFace = face;
     ObjectControl control = act.getControl();
