commit 8fa39aa65000d46152bf80cc925144ce81f6dc45
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Thu Jul 15 23:26:44 2021 +0200

    Improve debugging in BlockController.

diff --git a/src/main/java/org/distorted/helpers/BlockController.java b/src/main/java/org/distorted/helpers/BlockController.java
index 9576a4a5..e36a3bee 100644
--- a/src/main/java/org/distorted/helpers/BlockController.java
+++ b/src/main/java/org/distorted/helpers/BlockController.java
@@ -47,7 +47,8 @@ public class BlockController
 
   private static final long THRESHHOLD_0 =  3000;
   private static final long THRESHHOLD_1 = 25000;
-  private static final long THRESHHOLD_2 = 45000;
+  private static final long THRESHHOLD_2 =  5000;
+  private static final long THRESHHOLD_3 = 45000;
 
   private static long mPauseTime, mResumeTime;
 
@@ -97,6 +98,7 @@ public class BlockController
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 // RUBIK_PLACE_3 and TUTORIAL_PLACE_3 are scrambles, those can take up to 20 seconds.
+// RUBIK_PLACE_4 and TUTORIAL_PLACE_4 are solves, those can (maybe) sometimes take more than 3 seconds.
 // CONTROL_PLACE_* are the visual tutorials, could take up to 45 seconds.
 
   private long getThreshhold(int last)
@@ -105,8 +107,10 @@ public class BlockController
       {
       case RUBIK_PLACE_3   :
       case TUTORIAL_PLACE_3: return THRESHHOLD_1;
+      case RUBIK_PLACE_4   :
+      case TUTORIAL_PLACE_4: return THRESHHOLD_2;
       case CONTROL_PLACE_0 :
-      case CONTROL_PLACE_1 : return THRESHHOLD_2;
+      case CONTROL_PLACE_1 : return THRESHHOLD_3;
       default              : return THRESHHOLD_0;
       }
     }
@@ -116,43 +120,54 @@ public class BlockController
   private void checkingThread()
     {
     long now = System.currentTimeMillis();
-
     long touchThreshhold = getThreshhold(mLastTouchPlace);
+    long touchBlocked = now-mTouchBlockTime;
 
-    if( mTouchBlockTime>mPauseTime && now-mTouchBlockTime>touchThreshhold )
+    if( mTouchBlockTime>mPauseTime && touchBlocked>touchThreshhold )
       {
       TwistyActivity act = mAct.get();
+      boolean reallyBlocked = true;
 
       if( act!=null )
         {
         TwistyPreRender pre = act.getTwistyPreRender();
-        if( pre!=null ) pre.unblockTouch();
+        if( pre!=null )
+          {
+          reallyBlocked = pre.isTouchBlocked();
+          pre.unblockTouch();
+          }
         }
 
-      reportTouchProblem(touchThreshhold);
+      reportTouchProblem(touchBlocked, reallyBlocked);
       }
 
     long uiThreshhold = getThreshhold(mLastUIPlace);
+    long uiBlocked = now-mUIBlockTime;
 
-    if( mUIBlockTime>mPauseTime && now-mUIBlockTime>uiThreshhold )
+    if( mUIBlockTime>mPauseTime && uiBlocked>uiThreshhold )
       {
       TwistyActivity act = mAct.get();
+      boolean reallyBlocked = true;
 
       if( act!=null )
         {
         TwistyPreRender pre = act.getTwistyPreRender();
-        if( pre!=null ) pre.unblockUI();
+        if( pre!=null )
+          {
+          reallyBlocked = !pre.isUINotBlocked();
+          pre.unblockUI();
+          }
         }
 
-      reportUIProblem(uiThreshhold);
+      reportUIProblem(uiBlocked, reallyBlocked);
       }
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private void reportTouchProblem(long time)
+  private void reportUIProblem(long time, boolean reallyBlocked)
     {
-    String error = "TOUCH BLOCK "+mLastTouchPlace+" blocked for "+time+" milliseconds!";
+    String error = "UI BLOCK "+mLastUIPlace+" blocked for "+time+" milliseconds ("+reallyBlocked+")";
 
     if( BuildConfig.DEBUG )
        {
@@ -162,17 +177,17 @@ public class BlockController
       {
       Exception ex = new Exception(error);
       FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();
-      crashlytics.setCustomKey("type"  , "Touch" );
-      crashlytics.setCustomKey("place" , mLastTouchPlace );
+      crashlytics.setCustomKey("pause" , mPauseTime );
+      crashlytics.setCustomKey("resume", mResumeTime );
       crashlytics.recordException(ex);
       }
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private void reportUIProblem(long time)
+  private void reportTouchProblem(long time, boolean reallyBlocked)
     {
-    String error = "UI BLOCK "+mLastUIPlace+" blocked for "+time+" milliseconds!";
+    String error = "TOUCH BLOCK "+mLastTouchPlace+" blocked for "+time+" milliseconds ("+reallyBlocked+")";
 
     if( BuildConfig.DEBUG )
        {
@@ -182,8 +197,8 @@ public class BlockController
       {
       Exception ex = new Exception(error);
       FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();
-      crashlytics.setCustomKey("type"  , "UI" );
-      crashlytics.setCustomKey("place" , mLastUIPlace );
+      crashlytics.setCustomKey("pause" , mPauseTime );
+      crashlytics.setCustomKey("resume", mResumeTime );
       crashlytics.recordException(ex);
       }
     }
diff --git a/src/main/java/org/distorted/helpers/TwistyPreRender.java b/src/main/java/org/distorted/helpers/TwistyPreRender.java
index e4677d0e..94b2bb93 100644
--- a/src/main/java/org/distorted/helpers/TwistyPreRender.java
+++ b/src/main/java/org/distorted/helpers/TwistyPreRender.java
@@ -23,6 +23,8 @@ package org.distorted.helpers;
 
 public interface TwistyPreRender
   {
+  boolean isTouchBlocked();
+  boolean isUINotBlocked();
   void blockTouch(int place);
   void unblockTouch();
   void blockEverything(int place);
diff --git a/src/main/java/org/distorted/main/RubikPreRender.java b/src/main/java/org/distorted/main/RubikPreRender.java
index ef969350..ce689035 100644
--- a/src/main/java/org/distorted/main/RubikPreRender.java
+++ b/src/main/java/org/distorted/main/RubikPreRender.java
@@ -532,7 +532,7 @@ public class RubikPreRender implements EffectController, TwistyPreRender
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  boolean isTouchBlocked()
+  public boolean isTouchBlocked()
     {
     return mTouchBlocked;
     }
diff --git a/src/main/java/org/distorted/tutorials/TutorialPreRender.java b/src/main/java/org/distorted/tutorials/TutorialPreRender.java
index 559aa36a..990508f2 100644
--- a/src/main/java/org/distorted/tutorials/TutorialPreRender.java
+++ b/src/main/java/org/distorted/tutorials/TutorialPreRender.java
@@ -326,7 +326,7 @@ public class TutorialPreRender implements EffectController, TwistyPreRender
 // PUBLIC API
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  boolean isTouchBlocked()
+  public boolean isTouchBlocked()
     {
     return mTouchBlocked;
     }
