commit b3a907f10537c4cc4754af29768080fbac2030ce
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Thu Mar 30 12:57:00 2023 +0200

    Dino4 solver: progress.

diff --git a/src/main/java/org/distorted/screens/RubikScreenSolver.java b/src/main/java/org/distorted/screens/RubikScreenSolver.java
index 871d1d24..8e74c430 100644
--- a/src/main/java/org/distorted/screens/RubikScreenSolver.java
+++ b/src/main/java/org/distorted/screens/RubikScreenSolver.java
@@ -48,13 +48,16 @@ import org.distorted.solvers.SolverMain;
 public class RubikScreenSolver extends RubikScreenAbstract
   {
   private static final int RESET_DURATION = 1000;
+  private static final int MODE_NORMAL = 0;
+  private static final int MODE_DINO_4 = 1;
 
   private static Bitmap[] mBitmap;
   private ImageButton[] mColorButton;
   private TransparentImageButton mResetButton,mBackButton, mSolveButton;
   private boolean mSolving;
-  private int mCurrentColor;
+  private int mCurrentColor, mCurrentButton;
   private int[] mFaceColors;
+  private int mColorMode;
   private int mNumColors;
   private float mBitmapSize;
   private WeakReference<RubikActivity> mWeakAct;
@@ -139,6 +142,8 @@ public class RubikScreenSolver extends RubikScreenAbstract
 
   public void generateFaceColors(int object)
     {
+    mColorMode = MODE_NORMAL;
+
     if( object== ObjectSignatures.PYRA_3 ||
         object== ObjectSignatures.PYRA_4 ||
         object== ObjectSignatures.PYRA_5 ||
@@ -186,6 +191,7 @@ public class RubikScreenSolver extends RubikScreenAbstract
       {
       mNumColors  = 4;
       mFaceColors = new int[] { COLOR_YELLOW, COLOR_RED, COLOR_BLUE, COLOR_WHITE };
+      mColorMode  = MODE_DINO_4;
       }
     else
       {
@@ -225,6 +231,22 @@ public class RubikScreenSolver extends RubikScreenAbstract
       }
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private int translateColor(int color)
+    {
+    if( mColorMode==MODE_DINO_4 )
+      {
+      int realColor = mFaceColors[color];
+      int[] hexColors = ShapeHexahedron.FACE_COLORS;
+
+      for(int i=0; i<6; i++)
+        if( hexColors[i]==realColor ) return i;
+      }
+
+    return color;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   private void setupColorButtons(final RubikActivity act, final float width)
@@ -252,7 +274,8 @@ public class RubikScreenSolver extends RubikScreenAbstract
         @Override
         public void onClick(View view)
           {
-          mCurrentColor = ii;
+          mCurrentColor = translateColor(ii);
+          mCurrentButton= ii;
           markButton(act);
           }
         });
@@ -330,7 +353,7 @@ public class RubikScreenSolver extends RubikScreenAbstract
       {
       Drawable d = mColorButton[b].getBackground();
 
-      if( b==mCurrentColor )
+      if( b==mCurrentButton )
         {
         d.setColorFilter(ContextCompat.getColor(act,R.color.red), PorterDuff.Mode.MULTIPLY);
         }
@@ -345,14 +368,16 @@ public class RubikScreenSolver extends RubikScreenAbstract
 
   public void savePreferences(SharedPreferences.Editor editor)
     {
-    editor.putInt("stateSolver_color", mCurrentColor);
+    editor.putInt("stateSolver_color" , mCurrentColor );
+    editor.putInt("stateSolver_button", mCurrentButton);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public void restorePreferences(SharedPreferences preferences)
     {
-    mCurrentColor = preferences.getInt("stateSolver_color", 0);
+    mCurrentColor = preferences.getInt("stateSolver_color" , 0);
+    mCurrentButton= preferences.getInt("stateSolver_button", 0);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
