commit 6918030eb76abfaac734b10b6f8aa605abba0ab1
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Tue Feb 18 15:51:58 2020 +0000

    Major rearrangement of the UI.

diff --git a/src/main/java/org/distorted/magic/RubikActivity.java b/src/main/java/org/distorted/magic/RubikActivity.java
index a84e5a5e..1c8c7c81 100644
--- a/src/main/java/org/distorted/magic/RubikActivity.java
+++ b/src/main/java/org/distorted/magic/RubikActivity.java
@@ -22,7 +22,6 @@ package org.distorted.magic;
 import android.content.SharedPreferences;
 import android.os.Bundle;
 import android.preference.PreferenceManager;
-import android.support.v4.app.FragmentManager;
 import android.support.v7.app.AppCompatActivity;
 import android.view.View;
 
@@ -43,12 +42,6 @@ public class RubikActivity extends AppCompatActivity implements View.OnClickList
       super.onCreate(savedState);
       setTheme(R.style.CustomActivityThemeNoActionBar);
       setContentView(R.layout.main);
-
-      if( savedState==null )
-        {
-        RubikDialogMain diag = new RubikDialogMain();
-        diag.show(getSupportFragmentManager(), RubikDialogMain.getDialogTag() );
-        }
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -113,9 +106,6 @@ public class RubikActivity extends AppCompatActivity implements View.OnClickList
           {
           RubikSurfaceView view = findViewById(R.id.rubikSurfaceView);
           view.enterState(this, mCurrentState);
-
-          RubikDialogMain diag = new RubikDialogMain();
-          diag.show(getSupportFragmentManager(), RubikDialogMain.getDialogTag() );
           }
         else
           {
@@ -169,18 +159,6 @@ public class RubikActivity extends AppCompatActivity implements View.OnClickList
 
     public void Play(View v)
       {
-      FragmentManager mana = getSupportFragmentManager();
-      RubikDialogMain diag = (RubikDialogMain) mana.findFragmentByTag(RubikDialogMain.getDialogTag());
-
-      if( diag!=null )
-        {
-        diag.dismiss();
-        }
-      else
-        {
-        android.util.Log.e("act", "cannot find main dialog!");
-        }
-
       mCurrentState = RubikState.PLAY;
       RubikSurfaceView view = findViewById(R.id.rubikSurfaceView);
       view.enterState(this,mCurrentState);
diff --git a/src/main/java/org/distorted/magic/RubikSurfaceView.java b/src/main/java/org/distorted/magic/RubikSurfaceView.java
index 13988e1d..d71871ea 100644
--- a/src/main/java/org/distorted/magic/RubikSurfaceView.java
+++ b/src/main/java/org/distorted/magic/RubikSurfaceView.java
@@ -26,6 +26,7 @@ import android.content.pm.ConfigurationInfo;
 import android.graphics.PorterDuff;
 import android.graphics.drawable.Drawable;
 import android.opengl.GLSurfaceView;
+import android.support.v4.app.FragmentManager;
 import android.support.v4.content.ContextCompat;
 import android.util.AttributeSet;
 import android.util.DisplayMetrics;
@@ -70,7 +71,8 @@ public class RubikSurfaceView extends GLSurfaceView
     private int mScreenWidth, mScreenHeight, mScreenMin;
 
     private HorizontalNumberPicker mPicker;
-    private int mScrambleValue;
+    private int mPickerValue;
+    private RubikState mCurrentState;
 
     private static int mButton = RubikSize.SIZE3.ordinal();
     private static Static4D mQuatCurrent    = new Static4D(0,0,0,1);
@@ -90,14 +92,17 @@ public class RubikSurfaceView extends GLSurfaceView
 
     void savePreferences(SharedPreferences.Editor editor)
       {
-      editor.putInt("scramble", mScrambleValue );
+      if( mPicker!=null )
+        {
+        editor.putInt("scramble", mPicker.getValue() );
+        }
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     void restorePreferences(SharedPreferences preferences)
       {
-      mScrambleValue= preferences.getInt("scramble", DEF_SCRAMBLE);
+      mPickerValue= preferences.getInt("scramble", DEF_SCRAMBLE);
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -260,10 +265,49 @@ public class RubikSurfaceView extends GLSurfaceView
 
     void enterState(RubikActivity act, RubikState state)
       {
-      switch(state)
+      if( mCurrentState!=state )
+        {
+        switch(state)
+          {
+          case MAIN: enterMainState(act); break;
+          case PLAY: enterPlayState(act); break;
+          }
+
+        if( mCurrentState==RubikState.PLAY )
+          {
+          mPickerValue = mPicker.getValue();
+          }
+        if( mCurrentState==RubikState.MAIN )
+          {
+          FragmentManager mana = act.getSupportFragmentManager();
+          RubikDialogMain diag = (RubikDialogMain) mana.findFragmentByTag(RubikDialogMain.getDialogTag());
+
+          if( diag!=null )
+            {
+            diag.dismiss();
+            }
+          else
+            {
+            android.util.Log.e("act", "cannot find main dialog!");
+            }
+          }
+        if( state==RubikState.MAIN )
+          {
+          FragmentManager mana = act.getSupportFragmentManager();
+          RubikDialogMain diag = (RubikDialogMain) mana.findFragmentByTag(RubikDialogMain.getDialogTag());
+
+          if( diag==null )
+            {
+            RubikDialogMain diag2 = new RubikDialogMain();
+            diag2.show( mana, RubikDialogMain.getDialogTag() );
+            }
+          }
+
+        mCurrentState = state;
+        }
+      else
         {
-        case MAIN: enterMainState(act); break;
-        case PLAY: enterPlayState(act); break;
+        android.util.Log.e("act", "trying to change into same state "+state);
         }
       }
 
@@ -361,7 +405,7 @@ public class RubikSurfaceView extends GLSurfaceView
         {
         mPicker.setMin(MIN_SCRAMBLE);
         mPicker.setMax(MAX_SCRAMBLE);
-        mPicker.setValue(mScrambleValue);
+        mPicker.setValue(mPickerValue);
         }
       }
 
@@ -378,6 +422,8 @@ public class RubikSurfaceView extends GLSurfaceView
         mRenderer = new RubikRenderer(this);
         mMovement = new RubikCubeMovement();
 
+        mCurrentState = null;
+
         final ActivityManager activityManager     = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
         final ConfigurationInfo configurationInfo = activityManager.getDeviceConfigurationInfo();
         setEGLContextClientVersion( (configurationInfo.reqGlEsVersion>>16) >= 3 ? 3:2 );
