commit a42e25a6396e8e428486cd5e88a778f03f24ecb1
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Thu Apr 2 21:48:05 2020 +0100

    Bugfixes.

diff --git a/src/main/java/org/distorted/magic/RubikActivity.java b/src/main/java/org/distorted/magic/RubikActivity.java
index 82ccf93d..70ca5f00 100644
--- a/src/main/java/org/distorted/magic/RubikActivity.java
+++ b/src/main/java/org/distorted/magic/RubikActivity.java
@@ -197,11 +197,7 @@ public class RubikActivity extends AppCompatActivity
       {
       RubikSurfaceView view = findViewById(R.id.rubikSurfaceView);
       RubikPostRender post = view.getPostRender();
-
-      if( post.canDrag() )
-        {
-        post.changeObject(object,size,moves);
-        }
+      post.changeObject(object,size,moves);
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/magic/RubikPostRender.java b/src/main/java/org/distorted/magic/RubikPostRender.java
index 32b0bb86..b54c7ec4 100644
--- a/src/main/java/org/distorted/magic/RubikPostRender.java
+++ b/src/main/java/org/distorted/magic/RubikPostRender.java
@@ -45,7 +45,7 @@ public class RubikPostRender implements EffectListener
   private boolean mFinishRotation, mRemoveRotation, mRemovePatternRotation, mAddRotation,
                   mSetQuatCurrent, mSetQuatAccumulated, mChangeObject, mSolveObject,
                   mScrambleObject, mInitializeObject;
-  private boolean mCanRotate, mCanDrag, mCanUI;
+  private boolean mCanRotate, mCanPlay;
   private boolean mIsSolved;
   private RubikObjectList mNextObject;
   private int mNextSize;
@@ -79,9 +79,8 @@ public class RubikPostRender implements EffectListener
     mSolveObject          = false;
     mScrambleObject       = false;
 
-    mCanRotate   = true;
-    mCanDrag     = true;
-    mCanUI       = true;
+    mCanRotate = true;
+    mCanPlay   = true;
 
     mOldObject = null;
     mNewObject = null;
@@ -130,9 +129,8 @@ public class RubikPostRender implements EffectListener
       {
       android.util.Log.e("renderer", "exception starting effect: "+ex.getMessage());
 
-      mCanUI     = true;
+      mCanPlay   = true;
       mCanRotate = true;
-      mCanDrag   = true;
       }
     }
 
@@ -163,15 +161,14 @@ public class RubikPostRender implements EffectListener
           }
         }
 
-      mCanDrag   = true;
       mCanRotate = false;
-      mCanUI     = false;
+      mCanPlay = false;
       doEffectNow( BaseEffect.Type.WIN );
       }
     else
       {
       mCanRotate = true;
-      mCanUI     = true;
+      mCanPlay = true;
       }
 
     mIsSolved = solved;
@@ -215,13 +212,13 @@ public class RubikPostRender implements EffectListener
     {
     mFinishRotation = false;
     mCanRotate      = false;
-    mCanUI          = false;
+    mCanPlay        = false;
     mRotationFinishedID = mNewObject.finishRotationNow(this);
 
     if( mRotationFinishedID==0 ) // failed to add effect - should never happen
       {
       mCanRotate = true;
-      mCanUI     = true;
+      mCanPlay   = true;
       }
     }
 
@@ -233,9 +230,8 @@ public class RubikPostRender implements EffectListener
 
     if ( mNewObject==null || mNewObject.getObjectList()!=mNextObject || mNewObject.getSize()!=mNextSize)
       {
-      mCanDrag      = false;
-      mCanRotate    = false;
-      mCanUI        = false;
+      mCanRotate= false;
+      mCanPlay  = false;
       createObjectNow(mNextObject, mNextSize, mNextMoves);
       doEffectNow( BaseEffect.Type.SIZECHANGE );
       }
@@ -250,9 +246,8 @@ public class RubikPostRender implements EffectListener
   private void scrambleObjectNow()
     {
     mScrambleObject = false;
-    mCanDrag        = false;
     mCanRotate      = false;
-    mCanUI          = false;
+    mCanPlay        = false;
     mIsSolved       = false;
     RubikScores.getInstance().incrementNumPlays();
     doEffectNow( BaseEffect.Type.SCRAMBLE );
@@ -262,10 +257,9 @@ public class RubikPostRender implements EffectListener
 
   private void solveObjectNow()
     {
-    mSolveObject    = false;
-    mCanDrag        = false;
-    mCanRotate      = false;
-    mCanUI          = false;
+    mSolveObject = false;
+    mCanRotate   = false;
+    mCanPlay     = false;
     doEffectNow( BaseEffect.Type.SOLVE );
     }
 
@@ -350,7 +344,7 @@ public class RubikPostRender implements EffectListener
 
   void scrambleObject(int num)
     {
-    if( mCanUI )
+    if( mCanPlay )
       {
       mScrambleObject = true;
       mScrambleObjectNum = num;
@@ -361,7 +355,7 @@ public class RubikPostRender implements EffectListener
 
   void solveObject()
     {
-    if( mCanUI )
+    if( mCanPlay )
       {
       mSolveObject = true;
       }
@@ -376,9 +370,9 @@ public class RubikPostRender implements EffectListener
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  boolean canDrag()
+  public boolean canPlay()
     {
-    return mCanDrag;
+    return mCanPlay;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -476,9 +470,8 @@ public class RubikPostRender implements EffectListener
         {
         if( effectID == mEffectID[i] )
           {
-          mCanRotate   = true;
-          mCanDrag     = true;
-          mCanUI       = true;
+          mCanRotate = true;
+          mCanPlay   = true;
 
           if( i==BaseEffect.Type.SCRAMBLE.ordinal() )
             {
diff --git a/src/main/java/org/distorted/magic/RubikSurfaceView.java b/src/main/java/org/distorted/magic/RubikSurfaceView.java
index c8a50e37..6260cdd5 100644
--- a/src/main/java/org/distorted/magic/RubikSurfaceView.java
+++ b/src/main/java/org/distorted/magic/RubikSurfaceView.java
@@ -190,7 +190,7 @@ public class RubikSurfaceView extends GLSurfaceView
           }
         else
           {
-          mDragging           = mPostRender.canDrag();
+          mDragging           = true;
           mBeginningRotation  = false;
           mContinuingRotation = false;
           }
@@ -211,8 +211,6 @@ public class RubikSurfaceView extends GLSurfaceView
       float len = (float)Math.sqrt(mAxisX*mAxisX + mAxisY*mAxisY);
       mAxisX /= len;
       mAxisY /= len;
-
-      // android.util.Log.e("axis", "axis 2D: "+mAxisX+" , "+mAxisY);
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -371,7 +369,7 @@ public class RubikSurfaceView extends GLSurfaceView
                                            mPostRender.setQuatAccumulatedOnNextRender();
                                            }
                                          }
-                                       else if( mPostRender.canRotate() || mPostRender.canDrag() )
+                                       else
                                          {
                                          setUpDragOrRotate(x,y);
                                          }
diff --git a/src/main/java/org/distorted/uistate/RubikStatePattern.java b/src/main/java/org/distorted/uistate/RubikStatePattern.java
index f4efdd78..6cfa181a 100644
--- a/src/main/java/org/distorted/uistate/RubikStatePattern.java
+++ b/src/main/java/org/distorted/uistate/RubikStatePattern.java
@@ -88,7 +88,6 @@ public class RubikStatePattern extends RubikStateAbstract
     if( mPatternOrdinal<0 )
       {
       mPatternOrdinal = RubikObjectList.getSizeIndex(RubikStatePlay.DEF_OBJECT,RubikStatePlay.DEF_SIZE);
-      act.changeObject(RubikObjectList.getObject(RubikStatePlay.DEF_OBJECT),RubikStatePlay.DEF_SIZE,null);
       }
 
     FragmentManager mana = act.getSupportFragmentManager();
diff --git a/src/main/java/org/distorted/uistate/RubikStatePlay.java b/src/main/java/org/distorted/uistate/RubikStatePlay.java
index e07b6355..bd3309aa 100644
--- a/src/main/java/org/distorted/uistate/RubikStatePlay.java
+++ b/src/main/java/org/distorted/uistate/RubikStatePlay.java
@@ -116,16 +116,19 @@ public class RubikStatePlay extends RubikStateAbstract
       @Override
       public void onClick(View view)
         {
-        int total = RubikObjectList.getTotal();
-        boolean vertical = act.isVertical();
-        mLayout.setOrientation(vertical ? LinearLayout.VERTICAL:LinearLayout.HORIZONTAL);
+        if( act.getPostRender().canPlay() )
+          {
+          int total = RubikObjectList.getTotal();
+          boolean vertical = act.isVertical();
+          mLayout.setOrientation(vertical ? LinearLayout.VERTICAL:LinearLayout.HORIZONTAL);
 
-        int height = view.getHeight();
-        int width  = view.getWidth();
-        int laywid = mLayoutWidth * (vertical? 1:total);
-        int layhei = mLayoutHeight* (vertical? total:1);
+          int height = view.getHeight();
+          int width  = view.getWidth();
+          int laywid = mLayoutWidth * (vertical? 1:total);
+          int layhei = mLayoutHeight* (vertical? total:1);
 
-        mPopup.showAsDropDown(view, (width-laywid)/2, -height-layhei, Gravity.LEFT);
+          mPopup.showAsDropDown(view, (width-laywid)/2, -height-layhei, Gravity.LEFT);
+          }
         }
       });
     }
@@ -146,7 +149,7 @@ public class RubikStatePlay extends RubikStateAbstract
       @Override
       public void onClick(View v)
         {
-        RubikState.goBack(act);
+        if( act.getPostRender().canPlay() ) RubikState.goBack(act);
         }
       });
     }
@@ -195,9 +198,12 @@ public class RubikStatePlay extends RubikStateAbstract
           @Override
           public void onClick(View v)
             {
-            mObject = obj;
-            mSize   = sizes[size];
-            act.changeObject(list,sizes[size],null);
+            if( act.getPostRender().canPlay() && RubikState.getCurrentState()==RubikState.PLAY )
+              {
+              mObject = obj;
+              mSize   = sizes[size];
+              act.changeObject(list,sizes[size],null);
+              }
             mPopup.dismiss();
             }
           });
