commit a84c3a25e9e7224994af485c7c9d852ef05f82b8
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Wed Jul 7 13:23:09 2021 +0200

    Make it impossible to launch more than one Tutorial screen at a time.

diff --git a/src/main/java/org/distorted/dialogs/RubikDialogTutorial.java b/src/main/java/org/distorted/dialogs/RubikDialogTutorial.java
index a15d34e2..8ce056ce 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogTutorial.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogTutorial.java
@@ -141,6 +141,8 @@ public class RubikDialogTutorial extends AppCompatDialogFragment
     {
     super.onResume();
 
+    if( mPagerAdapter!=null ) mPagerAdapter.clickPossible();
+
     Window window = getDialog().getWindow();
     Context context = getContext();
 
diff --git a/src/main/java/org/distorted/dialogs/RubikDialogTutorialPagerAdapter.java b/src/main/java/org/distorted/dialogs/RubikDialogTutorialPagerAdapter.java
index 4563da8b..0d12f403 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogTutorialPagerAdapter.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogTutorialPagerAdapter.java
@@ -50,6 +50,19 @@ class RubikDialogTutorialPagerAdapter extends PagerAdapter
     viewPager.setOffscreenPageLimit(1);
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  void clickPossible()
+    {
+    for(int i=0; i<mNumTabs; i++)
+      {
+      if( mViews[i]!=null )
+        {
+        mViews[i].clickPossible(true);
+        }
+      }
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   @Override
diff --git a/src/main/java/org/distorted/dialogs/RubikDialogTutorialView.java b/src/main/java/org/distorted/dialogs/RubikDialogTutorialView.java
index 33ea6fb9..b0d544ab 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogTutorialView.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogTutorialView.java
@@ -45,6 +45,10 @@ import org.distorted.tutorials.TutorialList;
 
 public class RubikDialogTutorialView extends FrameLayout
   {
+  private boolean mCanClick;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
   public RubikDialogTutorialView(Context context, AttributeSet attrs, int defStyle)
     {
     super(context, attrs, defStyle);
@@ -63,6 +67,7 @@ public class RubikDialogTutorialView extends FrameLayout
     {
     super(act);
 
+    clickPossible(true);
     int widthT = (int)(width* RubikActivity.TUTORIAL_ITEM_TEXT);
 
     RubikActivity ract = (RubikActivity)getContext();
@@ -94,6 +99,13 @@ public class RubikDialogTutorialView extends FrameLayout
     addView(tab);
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  void clickPossible(boolean click)
+    {
+    mCanClick = click;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   private View createRow(final RubikActivity act, int countryID, final String desc, final String url,
@@ -111,8 +123,12 @@ public class RubikDialogTutorialView extends FrameLayout
       @Override
       public void onClick(View v)
         {
-        act.switchTutorial(url,obj,size);
-        analyticsReport(act,desc,auth,obj,size);
+        if( mCanClick )
+          {
+          act.switchTutorial(url,obj,size);
+          analyticsReport(act,desc,auth,obj,size);
+          clickPossible(false);
+          }
         }
       });
 
diff --git a/src/main/java/org/distorted/helpers/MovesAndLockController.java b/src/main/java/org/distorted/helpers/MovesAndLockController.java
index abf2c66d..a5fda393 100644
--- a/src/main/java/org/distorted/helpers/MovesAndLockController.java
+++ b/src/main/java/org/distorted/helpers/MovesAndLockController.java
@@ -215,8 +215,13 @@ public class MovesAndLockController implements MovesFinished
               if( System.currentTimeMillis()-mLockTime > LOCK_TIME )
                 {
                 changeLockIcon(act,false);
-                mTimer.cancel();
-                mTimer = null;
+
+                if( mTimer!=null )
+                  {
+                  mTimer.cancel();
+                  mTimer = null;
+                  }
+
                 mTimerRunning = false;
                 }
               }
