47 |
47 |
|
48 |
48 |
private static final long THRESHHOLD_0 = 3000;
|
49 |
49 |
private static final long THRESHHOLD_1 = 25000;
|
50 |
|
private static final long THRESHHOLD_2 = 45000;
|
|
50 |
private static final long THRESHHOLD_2 = 5000;
|
|
51 |
private static final long THRESHHOLD_3 = 45000;
|
51 |
52 |
|
52 |
53 |
private static long mPauseTime, mResumeTime;
|
53 |
54 |
|
... | ... | |
97 |
98 |
|
98 |
99 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
99 |
100 |
// RUBIK_PLACE_3 and TUTORIAL_PLACE_3 are scrambles, those can take up to 20 seconds.
|
|
101 |
// RUBIK_PLACE_4 and TUTORIAL_PLACE_4 are solves, those can (maybe) sometimes take more than 3 seconds.
|
100 |
102 |
// CONTROL_PLACE_* are the visual tutorials, could take up to 45 seconds.
|
101 |
103 |
|
102 |
104 |
private long getThreshhold(int last)
|
... | ... | |
105 |
107 |
{
|
106 |
108 |
case RUBIK_PLACE_3 :
|
107 |
109 |
case TUTORIAL_PLACE_3: return THRESHHOLD_1;
|
|
110 |
case RUBIK_PLACE_4 :
|
|
111 |
case TUTORIAL_PLACE_4: return THRESHHOLD_2;
|
108 |
112 |
case CONTROL_PLACE_0 :
|
109 |
|
case CONTROL_PLACE_1 : return THRESHHOLD_2;
|
|
113 |
case CONTROL_PLACE_1 : return THRESHHOLD_3;
|
110 |
114 |
default : return THRESHHOLD_0;
|
111 |
115 |
}
|
112 |
116 |
}
|
... | ... | |
116 |
120 |
private void checkingThread()
|
117 |
121 |
{
|
118 |
122 |
long now = System.currentTimeMillis();
|
119 |
|
|
120 |
123 |
long touchThreshhold = getThreshhold(mLastTouchPlace);
|
|
124 |
long touchBlocked = now-mTouchBlockTime;
|
121 |
125 |
|
122 |
|
if( mTouchBlockTime>mPauseTime && now-mTouchBlockTime>touchThreshhold )
|
|
126 |
if( mTouchBlockTime>mPauseTime && touchBlocked>touchThreshhold )
|
123 |
127 |
{
|
124 |
128 |
TwistyActivity act = mAct.get();
|
|
129 |
boolean reallyBlocked = true;
|
125 |
130 |
|
126 |
131 |
if( act!=null )
|
127 |
132 |
{
|
128 |
133 |
TwistyPreRender pre = act.getTwistyPreRender();
|
129 |
|
if( pre!=null ) pre.unblockTouch();
|
|
134 |
if( pre!=null )
|
|
135 |
{
|
|
136 |
reallyBlocked = pre.isTouchBlocked();
|
|
137 |
pre.unblockTouch();
|
|
138 |
}
|
130 |
139 |
}
|
131 |
140 |
|
132 |
|
reportTouchProblem(touchThreshhold);
|
|
141 |
reportTouchProblem(touchBlocked, reallyBlocked);
|
133 |
142 |
}
|
134 |
143 |
|
135 |
144 |
long uiThreshhold = getThreshhold(mLastUIPlace);
|
|
145 |
long uiBlocked = now-mUIBlockTime;
|
136 |
146 |
|
137 |
|
if( mUIBlockTime>mPauseTime && now-mUIBlockTime>uiThreshhold )
|
|
147 |
if( mUIBlockTime>mPauseTime && uiBlocked>uiThreshhold )
|
138 |
148 |
{
|
139 |
149 |
TwistyActivity act = mAct.get();
|
|
150 |
boolean reallyBlocked = true;
|
140 |
151 |
|
141 |
152 |
if( act!=null )
|
142 |
153 |
{
|
143 |
154 |
TwistyPreRender pre = act.getTwistyPreRender();
|
144 |
|
if( pre!=null ) pre.unblockUI();
|
|
155 |
if( pre!=null )
|
|
156 |
{
|
|
157 |
reallyBlocked = !pre.isUINotBlocked();
|
|
158 |
pre.unblockUI();
|
|
159 |
}
|
145 |
160 |
}
|
146 |
161 |
|
147 |
|
reportUIProblem(uiThreshhold);
|
|
162 |
reportUIProblem(uiBlocked, reallyBlocked);
|
148 |
163 |
}
|
149 |
164 |
}
|
150 |
165 |
|
151 |
166 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
152 |
167 |
|
153 |
|
private void reportTouchProblem(long time)
|
|
168 |
private void reportUIProblem(long time, boolean reallyBlocked)
|
154 |
169 |
{
|
155 |
|
String error = "TOUCH BLOCK "+mLastTouchPlace+" blocked for "+time+" milliseconds!";
|
|
170 |
String error = "UI BLOCK "+mLastUIPlace+" blocked for "+time+" milliseconds ("+reallyBlocked+")";
|
156 |
171 |
|
157 |
172 |
if( BuildConfig.DEBUG )
|
158 |
173 |
{
|
... | ... | |
162 |
177 |
{
|
163 |
178 |
Exception ex = new Exception(error);
|
164 |
179 |
FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();
|
165 |
|
crashlytics.setCustomKey("type" , "Touch" );
|
166 |
|
crashlytics.setCustomKey("place" , mLastTouchPlace );
|
|
180 |
crashlytics.setCustomKey("pause" , mPauseTime );
|
|
181 |
crashlytics.setCustomKey("resume", mResumeTime );
|
167 |
182 |
crashlytics.recordException(ex);
|
168 |
183 |
}
|
169 |
184 |
}
|
170 |
185 |
|
171 |
186 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
172 |
187 |
|
173 |
|
private void reportUIProblem(long time)
|
|
188 |
private void reportTouchProblem(long time, boolean reallyBlocked)
|
174 |
189 |
{
|
175 |
|
String error = "UI BLOCK "+mLastUIPlace+" blocked for "+time+" milliseconds!";
|
|
190 |
String error = "TOUCH BLOCK "+mLastTouchPlace+" blocked for "+time+" milliseconds ("+reallyBlocked+")";
|
176 |
191 |
|
177 |
192 |
if( BuildConfig.DEBUG )
|
178 |
193 |
{
|
... | ... | |
182 |
197 |
{
|
183 |
198 |
Exception ex = new Exception(error);
|
184 |
199 |
FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();
|
185 |
|
crashlytics.setCustomKey("type" , "UI" );
|
186 |
|
crashlytics.setCustomKey("place" , mLastUIPlace );
|
|
200 |
crashlytics.setCustomKey("pause" , mPauseTime );
|
|
201 |
crashlytics.setCustomKey("resume", mResumeTime );
|
187 |
202 |
crashlytics.recordException(ex);
|
188 |
203 |
}
|
189 |
204 |
}
|
Improve debugging in BlockController.