commit 972f9eaedafc0a9952b63a663d9a340e84d78024
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Wed Apr 6 18:29:34 2022 +0200

    Bandaged 3x3: remember object state and move history.

diff --git a/src/main/java/org/distorted/bandaged/BandagedPlayActivity.java b/src/main/java/org/distorted/bandaged/BandagedPlayActivity.java
index cc740e99..ad39b65f 100644
--- a/src/main/java/org/distorted/bandaged/BandagedPlayActivity.java
+++ b/src/main/java/org/distorted/bandaged/BandagedPlayActivity.java
@@ -19,8 +19,10 @@
 
 package org.distorted.bandaged;
 
+import android.content.SharedPreferences;
 import android.os.Build;
 import android.os.Bundle;
+import android.preference.PreferenceManager;
 import android.util.DisplayMetrics;
 import android.view.DisplayCutout;
 import android.view.View;
@@ -191,6 +193,7 @@ public class BandagedPlayActivity extends AppCompatActivity
       super.onPause();
       BandagedPlayView view = findViewById(R.id.bandagedPlayView);
       view.onPause();
+      savePreferences();
       DistortedLibrary.onPause(ACTIVITY_NUMBER);
       }
 
@@ -205,7 +208,8 @@ public class BandagedPlayActivity extends AppCompatActivity
       view.onResume();
 
       if( mScreen==null ) mScreen = new BandagedPlayScreen();
-      mScreen.onAttachedToWindow(this);
+      mScreen.onAttachedToWindow(this, mObjectName);
+      restorePreferences();
 
       if( mObjectName.length()>0 )
         {
@@ -222,6 +226,25 @@ public class BandagedPlayActivity extends AppCompatActivity
       DistortedLibrary.onDestroy(ACTIVITY_NUMBER);
       }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private void savePreferences()
+    {
+    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
+    SharedPreferences.Editor editor = preferences.edit();
+    mScreen.savePreferences(this,editor);
+
+    editor.apply();
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private void restorePreferences()
+    {
+    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
+    mScreen.restorePreferences(this,preferences);
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     void OpenGLError()
diff --git a/src/main/java/org/distorted/bandaged/BandagedPlayScreen.java b/src/main/java/org/distorted/bandaged/BandagedPlayScreen.java
index 9347c9e0..6c3c4f46 100644
--- a/src/main/java/org/distorted/bandaged/BandagedPlayScreen.java
+++ b/src/main/java/org/distorted/bandaged/BandagedPlayScreen.java
@@ -40,7 +40,8 @@ public class BandagedPlayScreen
 
   private TransparentImageButton mBackButton, mScrambleButton, mSolveButton;
   private final LockController mLockController;
-  protected MovesController mMovesController;
+  private MovesController mMovesController;
+  private String mKey;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -112,8 +113,10 @@ public class BandagedPlayScreen
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  void onAttachedToWindow(final BandagedPlayActivity act)
+  void onAttachedToWindow(final BandagedPlayActivity act, String objectName)
     {
+    mKey = "moveController_"+objectName;
+
     int width = act.getScreenWidthInPixels();
 
     LinearLayout.LayoutParams paramsL = new LinearLayout.LayoutParams(width/4, LinearLayout.LayoutParams.MATCH_PARENT);
@@ -188,15 +191,19 @@ public class BandagedPlayScreen
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public void saveMovePreferences(SharedPreferences.Editor editor)
+  public void savePreferences(BandagedPlayActivity act, SharedPreferences.Editor editor)
     {
-    mMovesController.savePreferences(editor);
+    mMovesController.savePreferences(mKey,editor);
+    ObjectControl control = act.getControl();
+    control.savePreferences(editor);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public void restoreMovePreferences(Activity act, SharedPreferences preferences)
+  public void restorePreferences(BandagedPlayActivity act, SharedPreferences preferences)
     {
-    mMovesController.restorePreferences(act,preferences);
+    mMovesController.restorePreferences(act,mKey,preferences);
+    ObjectControl control = act.getControl();
+    control.restorePreferences(preferences);
     }
 }
diff --git a/src/main/java/org/distorted/helpers/MovesController.java b/src/main/java/org/distorted/helpers/MovesController.java
index 86de649e..89854a25 100644
--- a/src/main/java/org/distorted/helpers/MovesController.java
+++ b/src/main/java/org/distorted/helpers/MovesController.java
@@ -182,7 +182,7 @@ public class MovesController implements MovesFinished
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-    public void savePreferences(SharedPreferences.Editor editor)
+    public void savePreferences(String key, SharedPreferences.Editor editor)
       {
       StringBuilder moves = new StringBuilder();
       int numMoves = getNumMoves();
@@ -199,15 +199,15 @@ public class MovesController implements MovesFinished
         moves.append(move.mAngle);
         }
 
-      editor.putString("movesController", moves.toString() );
+      editor.putString( key, moves.toString() );
       editor.apply();
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-    public void restorePreferences(Activity act, SharedPreferences preferences)
+    public void restorePreferences(Activity act, String key, SharedPreferences preferences)
       {
-      String objects = preferences.getString("movesController","");
+      String objects = preferences.getString( key,"");
 
       if( objects.length()>0 )
         {
diff --git a/src/main/java/org/distorted/main/RubikActivity.java b/src/main/java/org/distorted/main/RubikActivity.java
index c40feea2..cd81fd05 100644
--- a/src/main/java/org/distorted/main/RubikActivity.java
+++ b/src/main/java/org/distorted/main/RubikActivity.java
@@ -100,6 +100,9 @@ public class RubikActivity extends AppCompatActivity
     private static final float RATIO_BAR  = 0.10f;
     private static final float RATIO_INSET= 0.09f;
 
+    private static final String KEY_PLAY = "movesController_play";
+    private static final String KEY_SOLV = "movesController_solv";
+
     private boolean mJustStarted;
     private FirebaseAnalytics mFirebaseAnalytics;
     private static int mScreenWidth, mScreenHeight;
@@ -325,12 +328,12 @@ public class RubikActivity extends AppCompatActivity
       if( curr==ScreenList.PLAY )
         {
         RubikScreenPlay play = (RubikScreenPlay)ScreenList.PLAY.getScreenClass();
-        play.saveMovePreferences(editor);
+        play.saveMovePreferences(KEY_PLAY,editor);
         }
       if( curr==ScreenList.SOLV )
         {
         RubikScreenSolving solv = (RubikScreenSolving)ScreenList.SOLV.getScreenClass();
-        solv.saveMovePreferences(editor);
+        solv.saveMovePreferences(KEY_SOLV,editor);
         }
 
       editor.apply();
@@ -393,12 +396,12 @@ public class RubikActivity extends AppCompatActivity
       if( curr==ScreenList.PLAY )
         {
         RubikScreenPlay play = (RubikScreenPlay)ScreenList.PLAY.getScreenClass();
-        play.restoreMovePreferences(this,preferences);
+        play.restoreMovePreferences(this,KEY_PLAY,preferences);
         }
       if( curr==ScreenList.SOLV )
         {
         RubikScreenSolving solv = (RubikScreenSolving)ScreenList.SOLV.getScreenClass();
-        solv.restoreMovePreferences(this,preferences);
+        solv.restoreMovePreferences(this,KEY_SOLV,preferences);
         }
       }
 
diff --git a/src/main/java/org/distorted/screens/RubikScreenBase.java b/src/main/java/org/distorted/screens/RubikScreenBase.java
index 85eae3f4..db4d4c4b 100644
--- a/src/main/java/org/distorted/screens/RubikScreenBase.java
+++ b/src/main/java/org/distorted/screens/RubikScreenBase.java
@@ -104,15 +104,15 @@ abstract class RubikScreenBase extends RubikScreenAbstract
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public void saveMovePreferences(SharedPreferences.Editor editor)
+  public void saveMovePreferences(String key,SharedPreferences.Editor editor)
     {
-    mMovesController.savePreferences(editor);
+    mMovesController.savePreferences(key,editor);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public void restoreMovePreferences(Activity act, SharedPreferences preferences)
+  public void restoreMovePreferences(Activity act, String key, SharedPreferences preferences)
     {
-    mMovesController.restorePreferences(act,preferences);
+    mMovesController.restorePreferences(act,key,preferences);
     }
   }
