commit 400ff34d157e3a08a67aa70648d4031236a70461
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Mon Dec 6 01:46:07 2021 +0100

    Move the 'currObject' from RubikScreenPlay (WTF?) to RubikObjectList.

diff --git a/src/main/java/org/distorted/dialogs/RubikDialogNewRecord.java b/src/main/java/org/distorted/dialogs/RubikDialogNewRecord.java
index 3820317d..30a8ab80 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogNewRecord.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogNewRecord.java
@@ -38,6 +38,7 @@ import android.widget.TextView;
 import org.distorted.main.R;
 import org.distorted.main.RubikActivity;
 import org.distorted.network.RubikScores;
+import org.distorted.objects.RubikObjectList;
 import org.distorted.screens.ScreenList;
 import org.distorted.screens.RubikScreenPlay;
 
@@ -78,8 +79,7 @@ public class RubikDialogNewRecord extends AppCompatDialogFragment
 
         if( name.length()>0 )
           {
-          RubikScreenPlay play = (RubikScreenPlay) ScreenList.PLAY.getScreenClass();
-          int object = play.getObject();
+          int object = RubikObjectList.getCurrObject();
 
           bundle.putInt("tab", object );
           bundle.putBoolean("submitting", true);
diff --git a/src/main/java/org/distorted/dialogs/RubikDialogPattern.java b/src/main/java/org/distorted/dialogs/RubikDialogPattern.java
index e3472225..092063db 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogPattern.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogPattern.java
@@ -131,13 +131,12 @@ public class RubikDialogPattern extends AppCompatDialogFragment
 
   private int getPatternOrdinal()
     {
-    RubikScreenPlay play = (RubikScreenPlay) ScreenList.PLAY.getScreenClass();
-    int obj  = play.getObject();
+    int obj = RubikObjectList.getCurrObject();
     int ret = RubikPatternList.getOrdinal(obj);
 
     if( ret<0 )
       {
-      ret = RubikPatternList.getOrdinal(RubikScreenPlay.DEF_OBJECT);
+      ret = RubikPatternList.getOrdinal(RubikObjectList.DEF_OBJECT);
       }
 
     return ret;
diff --git a/src/main/java/org/distorted/dialogs/RubikDialogSetName.java b/src/main/java/org/distorted/dialogs/RubikDialogSetName.java
index a085b3fc..69d8ef90 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogSetName.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogSetName.java
@@ -41,6 +41,7 @@ import android.widget.TextView;
 import org.distorted.main.R;
 import org.distorted.main.RubikActivity;
 import org.distorted.network.RubikScores;
+import org.distorted.objects.RubikObjectList;
 import org.distorted.screens.ScreenList;
 import org.distorted.screens.RubikScreenPlay;
 
@@ -145,10 +146,9 @@ public class RubikDialogSetName extends AppCompatDialogFragment
           RubikActivity act = (RubikActivity)getActivity();
           ScreenList.switchScreen(act, ScreenList.PLAY);
           RubikScores.getInstance().setName(name);
-          RubikScreenPlay play = (RubikScreenPlay) ScreenList.PLAY.getScreenClass();
 
           Bundle bundle = new Bundle();
-          bundle.putInt("tab", play.getObject() );
+          bundle.putInt("tab", RubikObjectList.getCurrObject() );
           bundle.putBoolean("submitting", true);
 
           RubikDialogScores scores = new RubikDialogScores();
diff --git a/src/main/java/org/distorted/dialogs/RubikDialogTutorial.java b/src/main/java/org/distorted/dialogs/RubikDialogTutorial.java
index 83d7af4f..eea5a3d0 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogTutorial.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogTutorial.java
@@ -43,6 +43,7 @@ import com.google.android.material.tabs.TabLayout;
 
 import org.distorted.main.R;
 import org.distorted.main.RubikActivity;
+import org.distorted.objects.RubikObjectList;
 import org.distorted.screens.RubikScreenPlay;
 import org.distorted.screens.ScreenList;
 import org.distorted.tutorials.TutorialList;
@@ -128,14 +129,12 @@ public class RubikDialogTutorial extends AppCompatDialogFragment
 
   private int getTutorialOrdinal()
     {
-    RubikScreenPlay play = (RubikScreenPlay) ScreenList.PLAY.getScreenClass();
-    int obj = play.getObject();
-
+    int obj = RubikObjectList.getCurrObject();
     int ret = TutorialList.getOrdinal(obj);
 
     if( ret<0 )
       {
-      ret = TutorialList.getOrdinal(RubikScreenPlay.DEF_OBJECT);
+      ret = TutorialList.getOrdinal(RubikObjectList.DEF_OBJECT);
       }
 
     return ret;
diff --git a/src/main/java/org/distorted/main/RubikActivity.java b/src/main/java/org/distorted/main/RubikActivity.java
index 55c0a752..a4219feb 100644
--- a/src/main/java/org/distorted/main/RubikActivity.java
+++ b/src/main/java/org/distorted/main/RubikActivity.java
@@ -256,8 +256,7 @@ public class RubikActivity extends AppCompatActivity
         scores.setCountry(this);
         }
 
-      RubikScreenPlay play = (RubikScreenPlay) ScreenList.PLAY.getScreenClass();
-      int object = play.getObject();
+      int object = RubikObjectList.getCurrObject();
       changeIfDifferent(object,view.getObjectControl());
 
       if( mIsChinese && !mPolicyAccepted ) PrivacyPolicy();
@@ -307,6 +306,7 @@ public class RubikActivity extends AppCompatActivity
         ScreenList.getScreen(i).getScreenClass().savePreferences(editor);
         }
 
+      RubikObjectList.savePreferences(editor);
       ScreenList.savePreferences(editor);
       RubikSurfaceView view = findViewById(R.id.rubikSurfaceView);
       view.getObjectControl().savePreferences(editor);
@@ -333,6 +333,7 @@ public class RubikActivity extends AppCompatActivity
         ScreenList.getScreen(i).getScreenClass().restorePreferences(preferences);
         }
 
+      RubikObjectList.restorePreferences(preferences);
       ScreenList.restorePreferences(preferences);
 
       RubikSurfaceView view = findViewById(R.id.rubikSurfaceView);
diff --git a/src/main/java/org/distorted/main/RubikObjectLibInterface.java b/src/main/java/org/distorted/main/RubikObjectLibInterface.java
index a44704a4..8068f8d2 100644
--- a/src/main/java/org/distorted/main/RubikObjectLibInterface.java
+++ b/src/main/java/org/distorted/main/RubikObjectLibInterface.java
@@ -100,8 +100,7 @@ public class RubikObjectLibInterface implements ObjectLibInterface
     {
     RubikScreenPlay play= (RubikScreenPlay) ScreenList.PLAY.getScreenClass();
     RubikScores scores  = RubikScores.getInstance();
-
-    int object  = play.getObject();
+    int object  = RubikObjectList.getCurrObject();
     int level   = play.getLevel();
     String name = scores.getName();
     RubikObject obj = RubikObjectList.getObject(object);
@@ -433,8 +432,7 @@ public class RubikObjectLibInterface implements ObjectLibInterface
     {
     RubikScreenSolver solver = (RubikScreenSolver) ScreenList.SVER.getScreenClass();
     int color = solver.getCurrentColor();
-    RubikScreenPlay play = (RubikScreenPlay) ScreenList.PLAY.getScreenClass();
-    int currObject = play.getObject();
+    int currObject = RubikObjectList.getCurrObject();
     mLastCubitColor = SolverMain.cubitIsLocked(currObject,cubit);
     mLastCubit = cubit;
     mLastCubitFace = face;
diff --git a/src/main/java/org/distorted/objects/RubikObjectList.java b/src/main/java/org/distorted/objects/RubikObjectList.java
index b551d411..a28b8190 100644
--- a/src/main/java/org/distorted/objects/RubikObjectList.java
+++ b/src/main/java/org/distorted/objects/RubikObjectList.java
@@ -19,8 +19,13 @@
 
 package org.distorted.objects;
 
+import android.content.SharedPreferences;
+
+import org.distorted.main.RubikActivity;
 import org.distorted.objectlib.main.ObjectConstants;
 import org.distorted.objectlib.main.ObjectType;
+import org.distorted.screens.RubikScreenPlay;
+import org.distorted.screens.ScreenList;
 
 import java.util.ArrayList;
 import static org.distorted.objectlib.main.ObjectType.NUM_OBJECTS;
@@ -29,11 +34,14 @@ import static org.distorted.objectlib.main.ObjectType.NUM_OBJECTS;
 
 public class RubikObjectList
 {
+  public static final int DEF_OBJECT= ObjectConstants.CUBE_3;
+
   public static int MAX_LEVEL;
 
   private static RubikObjectList mType;
   private static int mNumObjects;
   private static ArrayList<RubikObject> mObjects;
+  private static int mObject = DEF_OBJECT;
 
   static
     {
@@ -99,6 +107,52 @@ public class RubikObjectList
     return type.getNumScramble();
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public static void savePreferences(SharedPreferences.Editor editor)
+    {
+    RubikObject object = getObject(mObject);
+
+    if( object!=null )
+      {
+      editor.putString("statePlay_objName", object.getName() );
+      }
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public static void restorePreferences(SharedPreferences preferences)
+    {
+    RubikObject object = getObject(DEF_OBJECT);
+    String defName = object==null ? "CUBE_3" : object.getName();
+    String objName= preferences.getString("statePlay_objName",defName);
+    mObject = getOrdinal(objName);
+
+    if( mObject<0 || mObject>=mNumObjects ) mObject = DEF_OBJECT;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public static boolean setCurrObject(RubikActivity act, int ordinal)
+    {
+    if( mObject!=ordinal )
+      {
+      mObject = ordinal;
+      RubikScreenPlay play = (RubikScreenPlay) ScreenList.PLAY.getScreenClass();
+      play.setCurrObject(act);
+      return true;
+      }
+
+    return false;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public static int getCurrObject()
+    {
+    return mObject;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public static RubikObject getObject(int ordinal)
diff --git a/src/main/java/org/distorted/screens/RubikScreenPattern.java b/src/main/java/org/distorted/screens/RubikScreenPattern.java
index 46122091..f5af2207 100644
--- a/src/main/java/org/distorted/screens/RubikScreenPattern.java
+++ b/src/main/java/org/distorted/screens/RubikScreenPattern.java
@@ -34,6 +34,7 @@ import org.distorted.main.R;
 import org.distorted.dialogs.RubikDialogPattern;
 import org.distorted.helpers.TransparentImageButton;
 import org.distorted.main.RubikActivity;
+import org.distorted.objects.RubikObjectList;
 import org.distorted.patterns.RubikPattern;
 import org.distorted.patterns.RubikPatternList;
 
@@ -59,10 +60,9 @@ public class RubikScreenPattern extends RubikScreenAbstract
 
   void leaveScreen(RubikActivity act)
     {
-    RubikScreenPlay play = (RubikScreenPlay) ScreenList.PLAY.getScreenClass();
     int object = RubikPatternList.getObject(mPatternOrdinal);
 
-    if( !play.setObject(act,object) )
+    if( !RubikObjectList.setCurrObject(act,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 28009153..b2959058 100644
--- a/src/main/java/org/distorted/screens/RubikScreenPlay.java
+++ b/src/main/java/org/distorted/screens/RubikScreenPlay.java
@@ -35,7 +35,6 @@ import android.widget.ImageButton;
 import android.widget.LinearLayout;
 import android.widget.PopupWindow;
 
-import org.distorted.objectlib.main.ObjectConstants;
 import org.distorted.objectlib.main.ObjectControl;
 
 import org.distorted.main.R;
@@ -58,7 +57,6 @@ public class RubikScreenPlay extends RubikScreenBase
   {
   public static final int NUM_COLUMNS  = 4;
   public static final int LEVELS_SHOWN = 10;
-  public static final int DEF_OBJECT= ObjectConstants.CUBE_3;
 
   private static final int[] BUTTON_LABELS = { R.string.scores,
                                                R.string.patterns,
@@ -73,12 +71,11 @@ public class RubikScreenPlay extends RubikScreenBase
   private TransparentImageButton mObjButton, mMenuButton, mSolveButton, mScrambleButton;
   private TransparentButton mPlayButton;
   private PopupWindow mObjectPopup, mMenuPopup, mPlayPopup;
-  private int mObject = DEF_OBJECT;
+  private LinearLayout mPlayLayout;
   private int mObjectSize, mMenuLayoutWidth, mMenuLayoutHeight, mPlayLayoutWidth;
   private int mLevelValue;
   private float mButtonSize, mMenuItemSize, mMenuTextSize;
   private int mColCount, mRowCount, mMaxRowCount;
-  private LinearLayout mPlayLayout;
   private int mUpperBarHeight;
   private boolean mShouldReactToEndOfScrambling;
 
@@ -179,7 +176,8 @@ public class RubikScreenPlay extends RubikScreenBase
           final int maxHeight= (int)(0.9f*(height-mUpperBarHeight) );
           View popupView = mPlayPopup.getContentView();
           popupView.setSystemUiVisibility(RubikActivity.FLAGS);
-          final int dbLevel = RubikObjectList.getDBLevel(mObject);
+          final int object  = RubikObjectList.getCurrObject();
+          final int dbLevel = RubikObjectList.getDBLevel(object);
           final int levelsShown = Math.min(dbLevel,LEVELS_SHOWN);
           final int popupHeight = (int)(levelsShown*(mMenuItemSize+margin)+3*margin+mMenuItemSize*(LAST_BUTTON-1.0f));
           final int realHeight = Math.min(popupHeight,maxHeight);
@@ -268,6 +266,7 @@ public class RubikScreenPlay extends RubikScreenBase
       int iconSize = RubikActivity.getDrawableSize();
       int icons = robject==null ? 0 : robject.getIconID(iconSize);
       int row = object/NUM_COLUMNS;
+      final int ordinal = robject==null ? 0 : robject.getOrdinal();
 
       ImageButton button = new ImageButton(act);
       button.setBackgroundResource(icons);
@@ -278,8 +277,8 @@ public class RubikScreenPlay extends RubikScreenBase
           {
           if( act.getControl().isUINotBlocked() && ScreenList.getCurrentScreen()== ScreenList.PLAY )
             {
-            mObject = robject==null ? 0 : robject.getOrdinal();
-            act.changeObject(mObject, true);
+            RubikObjectList.setCurrObject(act,ordinal);
+            act.changeObject(ordinal,true);
             if( mPlayLayout!=null ) adjustLevels(act);
             mMovesController.clearMoves(act);
             }
@@ -338,7 +337,8 @@ public class RubikScreenPlay extends RubikScreenBase
       @Override
       public void onClick(View v)
         {
-        act.switchConfig(mObject);
+        int currObject = RubikObjectList.getCurrObject();
+        act.switchConfig(currObject);
         }
       });
     }
@@ -408,7 +408,8 @@ public class RubikScreenPlay extends RubikScreenBase
     switch(button)
       {
       case 0: Bundle sBundle = new Bundle();
-              sBundle.putInt("tab", mObject );
+              int currObject = RubikObjectList.getCurrObject();
+              sBundle.putInt("tab", currObject );
               sBundle.putBoolean("submitting", false);
               RubikDialogScores scores = new RubikDialogScores();
               scores.setArguments(sBundle);
@@ -460,7 +461,8 @@ public class RubikScreenPlay extends RubikScreenBase
       @Override
       public void onClick(View v)
         {
-        RubikObject object = RubikObjectList.getObject(mObject);
+        int currObject = RubikObjectList.getCurrObject();
+        RubikObject object = RubikObjectList.getObject(currObject);
         int numScrambles = object==null ? 0 : object.getNumScramble();
         mShouldReactToEndOfScrambling = false;
         act.getControl().scrambleObject(numScrambles);
@@ -472,40 +474,21 @@ public class RubikScreenPlay extends RubikScreenBase
 
   public void savePreferences(SharedPreferences.Editor editor)
     {
-    android.util.Log.e("D", "savePrefs");
 
-    RubikObject object = RubikObjectList.getObject(mObject);
-
-    if( object!=null )
-      {
-      editor.putString("statePlay_objName", object.getName() );
-      }
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public void restorePreferences(SharedPreferences preferences)
     {
-    RubikObject object = RubikObjectList.getObject(DEF_OBJECT);
-    String defName = object==null ? "CUBE_3" : object.getName();
-    String objName= preferences.getString("statePlay_objName",defName);
-    mObject = RubikObjectList.getOrdinal(objName);
 
-    if( mObject<0 || mObject>=RubikObjectList.getNumObjects() ) mObject = DEF_OBJECT;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public boolean setObject(RubikActivity act, int ordinal)
+  public void setCurrObject(RubikActivity act)
     {
-    if( mObject!=ordinal )
-      {
-      mObject = ordinal;
-      if( mPlayLayout!=null ) adjustLevels(act);
-      return true;
-      }
-
-    return false;
+    if( mPlayLayout!=null ) adjustLevels(act);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -557,7 +540,8 @@ public class RubikScreenPlay extends RubikScreenBase
 
   public void adjustSolvedIcons()
     {
-    int dbLevel = RubikObjectList.getDBLevel(mObject);
+    int currObject = RubikObjectList.getCurrObject();
+    int dbLevel = RubikObjectList.getDBLevel(currObject);
     int numLevel= Math.min(dbLevel, LEVELS_SHOWN);
     RubikScores scores = RubikScores.getInstance();
 
@@ -565,7 +549,7 @@ public class RubikScreenPlay extends RubikScreenBase
       {
       int level = i<numLevel-1 ? i+1 : dbLevel;
       Button button = (Button)mPlayLayout.getChildAt(i);
-      int icon = scores.isSolved(mObject, level-1) ? R.drawable.ui_solved : R.drawable.ui_notsolved;
+      int icon = scores.isSolved(currObject, level-1) ? R.drawable.ui_solved : R.drawable.ui_notsolved;
       button.setCompoundDrawablesWithIntrinsicBounds(icon,0,0,0);
       }
     }
@@ -574,8 +558,9 @@ public class RubikScreenPlay extends RubikScreenBase
 
   private void adjustLevels(final RubikActivity act)
     {
-    int dbLevel = RubikObjectList.getDBLevel(mObject);
-    RubikObject object = RubikObjectList.getObject(mObject);
+    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);
     String[] levels = new String[numLevel];
@@ -623,7 +608,7 @@ public class RubikScreenPlay extends RubikScreenBase
       button.setText(levels[i]);
       button.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize);
 
-      int icon = scores.isSolved(mObject, level-1) ? R.drawable.ui_solved : R.drawable.ui_notsolved;
+      int icon = scores.isSolved(currObject, level-1) ? R.drawable.ui_solved : R.drawable.ui_notsolved;
       button.setCompoundDrawablesWithIntrinsicBounds(icon,0,0,0);
 
       button.setOnClickListener( new View.OnClickListener()
@@ -660,11 +645,4 @@ public class RubikScreenPlay extends RubikScreenBase
     {
     return mShouldReactToEndOfScrambling;
     }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public int getObject()
-    {
-    return mObject;
-    }
   }
diff --git a/src/main/java/org/distorted/screens/RubikScreenSolver.java b/src/main/java/org/distorted/screens/RubikScreenSolver.java
index 653cfb16..c8f60024 100644
--- a/src/main/java/org/distorted/screens/RubikScreenSolver.java
+++ b/src/main/java/org/distorted/screens/RubikScreenSolver.java
@@ -40,6 +40,7 @@ import org.distorted.dialogs.RubikDialogSolverError;
 import org.distorted.helpers.TransparentImageButton;
 import org.distorted.main.R;
 import org.distorted.main.RubikActivity;
+import org.distorted.objects.RubikObjectList;
 import org.distorted.solvers.ImplementedSolversList;
 import org.distorted.solvers.SolverMain;
 
@@ -86,8 +87,7 @@ public class RubikScreenSolver extends RubikScreenAbstract
     act.changeIfDifferent(currentObject,control);
     control.solveOnly();
 
-    RubikScreenPlay play = (RubikScreenPlay) ScreenList.PLAY.getScreenClass();
-    play.setObject(act, currentObject);
+    RubikObjectList.setCurrObject(act, currentObject);
 
     generateFaceColors();
 
diff --git a/src/main/java/org/distorted/screens/RubikScreenSolving.java b/src/main/java/org/distorted/screens/RubikScreenSolving.java
index 5c64ea30..1de6c140 100644
--- a/src/main/java/org/distorted/screens/RubikScreenSolving.java
+++ b/src/main/java/org/distorted/screens/RubikScreenSolving.java
@@ -34,6 +34,7 @@ import org.distorted.helpers.TransparentImageButton;
 import org.distorted.main.R;
 import org.distorted.main.RubikActivity;
 import org.distorted.network.RubikScores;
+import org.distorted.objects.RubikObjectList;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -185,7 +186,7 @@ public class RubikScreenSolving extends RubikScreenBase
       mElapsed = System.currentTimeMillis()-mStartTime;
 
       RubikScreenPlay play = (RubikScreenPlay) ScreenList.PLAY.getScreenClass();
-      int object = play.getObject();
+      int object = RubikObjectList.getCurrObject();
       int level = play.getLevel();
       boolean isNew = mScores.setRecord(object, level, mElapsed);
 
diff --git a/src/main/java/org/distorted/tutorials/TutorialScreen.java b/src/main/java/org/distorted/tutorials/TutorialScreen.java
index 024ee5d7..d953091a 100644
--- a/src/main/java/org/distorted/tutorials/TutorialScreen.java
+++ b/src/main/java/org/distorted/tutorials/TutorialScreen.java
@@ -75,8 +75,7 @@ public class TutorialScreen
       @Override
       public void onClick(View v)
         {
-        RubikScreenPlay play = (RubikScreenPlay) ScreenList.PLAY.getScreenClass();
-        int object = play.getObject();
+        int object = RubikObjectList.getCurrObject();
         RubikObject obj = RubikObjectList.getObject(object);
         int numScrambles = obj==null ? 0 : obj.getNumScramble();
         act.getControl().scrambleObject(numScrambles);
