25
25
import android .view .WindowManager ;
26
26
27
27
import androidx .annotation .NonNull ;
28
+ import androidx .annotation .Nullable ;
28
29
import androidx .appcompat .app .ActionBar ;
29
30
import androidx .appcompat .app .AppCompatActivity ;
30
31
import androidx .core .app .ActivityCompat ;
41
42
import io .sentry .SentryLevel ;
42
43
import io .sentry .android .core .SentryAndroid ;
43
44
44
- import static com .fpvout .digiview .VideoReaderExoplayer .VideoZoomedIn ;
45
-
46
45
public class MainActivity extends AppCompatActivity implements UsbDeviceListener , ConnectCheckerRtmp , ActivityCompat .OnRequestPermissionsResultCallback {
47
46
private static final String TAG = "DIGIVIEW" ;
48
47
private static final String ACTION_USB_PERMISSION = "com.fpvout.digiview.USB_PERMISSION" ;
@@ -69,6 +68,18 @@ public class MainActivity extends AppCompatActivity implements UsbDeviceListener
69
68
private ScaleGestureDetector scaleGestureDetector ;
70
69
private SharedPreferences sharedPreferences ;
71
70
private static final String ShowWatermark = "ShowWatermark" ;
71
+ private Runnable hideSettingsButtonRunnable = new Runnable () {
72
+ @ Override
73
+ public void run () {
74
+ toggleView (settingsButton , false );
75
+ }
76
+ };
77
+ private Runnable hideLiveButtonRunnable = new Runnable () {
78
+ @ Override
79
+ public void run () {
80
+ toggleView (liveButton , false );
81
+ }
82
+ };
72
83
73
84
@ Override
74
85
protected void onCreate (Bundle savedInstanceState ) {
@@ -151,11 +162,84 @@ protected void onCreate(Bundle savedInstanceState) {
151
162
}
152
163
}
153
164
165
+ private void toggleFullOverlay () {
166
+ if (overlayView .getAlpha () > 0.0f ) return ;
167
+
168
+ if (sharedPreferences .getBoolean (ShowWatermark , true )) {
169
+ toggleView (watermarkView , 0.3f );
170
+ }
171
+
172
+ settingsButton .removeCallbacks (hideSettingsButtonRunnable );
173
+ toggleView (settingsButton , new AnimatorListenerAdapter () {
174
+ @ Override
175
+ public void onAnimationEnd (Animator animation ) {
176
+ settingsButton .postDelayed (hideSettingsButtonRunnable , 3000 );
177
+ }
178
+ });
179
+ liveButton .removeCallbacks (hideLiveButtonRunnable );
180
+ toggleView (liveButton , new AnimatorListenerAdapter () {
181
+ @ Override
182
+ public void onAnimationEnd (Animator animation ) {
183
+ liveButton .postDelayed (hideLiveButtonRunnable , 3000 );
184
+ }
185
+ });
186
+ }
187
+
188
+ private void hideFullOverlay () {
189
+ toggleView (watermarkView , sharedPreferences .getBoolean (ShowWatermark , true ), 0.3f );
190
+
191
+ toggleView (settingsButton , false );
192
+ toggleView (liveButton , false );
193
+ toggleView (overlayView , false );
194
+ }
195
+
196
+ private void showFullOverlay () {
197
+ toggleView (watermarkView , false );
198
+
199
+ settingsButton .removeCallbacks (hideSettingsButtonRunnable );
200
+ toggleView (settingsButton , true );
201
+
202
+ liveButton .removeCallbacks (hideLiveButtonRunnable );
203
+ toggleView (liveButton , true );
204
+ }
205
+
206
+ private void toggleView (View view , @ Nullable AnimatorListenerAdapter animatorListener ) {
207
+ toggleView (view , view .getAlpha () == 0.0f , 1.0f , animatorListener );
208
+ }
209
+
210
+ private void toggleView (View view , float visibleAlpha ) {
211
+ toggleView (view , view .getAlpha () == 0.0f , visibleAlpha );
212
+ }
213
+
214
+ private void toggleView (View view , boolean visible ) {
215
+ toggleView (view , visible , 1.0f , null );
216
+ }
217
+
218
+ private void toggleView (View view , boolean visible , float visibleAlpha ) {
219
+ toggleView (view , visible , visibleAlpha , null );
220
+ }
221
+
222
+ private void toggleView (View view , boolean visible , float visibleAlpha , @ Nullable AnimatorListenerAdapter animatorListener ) {
223
+ if (!visible ) {
224
+ view .animate ().cancel ();
225
+ view .animate ()
226
+ .alpha (0 )
227
+ .setDuration (shortAnimationDuration )
228
+ .setListener (null );
229
+ } else {
230
+ view .animate ().cancel ();
231
+ view .animate ()
232
+ .alpha (visibleAlpha )
233
+ .setDuration (shortAnimationDuration )
234
+ .setListener (animatorListener );
235
+ }
236
+ }
237
+
154
238
private void setupGestureDetectors () {
155
239
gestureDetector = new GestureDetector (this , new GestureDetector .SimpleOnGestureListener () {
156
240
@ Override
157
241
public boolean onSingleTapConfirmed (MotionEvent e ) {
158
- toggleSettingsButton ();
242
+ toggleFullOverlay ();
159
243
return super .onSingleTapConfirmed (e );
160
244
}
161
245
@@ -186,81 +270,6 @@ public boolean onTouchEvent(MotionEvent event) {
186
270
return super .onTouchEvent (event );
187
271
}
188
272
189
- private void updateWatermark () {
190
- if (overlayView .getVisibility () == View .VISIBLE ) {
191
- watermarkView .setAlpha (0 );
192
- return ;
193
- }
194
-
195
- if (sharedPreferences .getBoolean (ShowWatermark , true )) {
196
- watermarkView .setAlpha (0.3F );
197
- } else {
198
- watermarkView .setAlpha (0F );
199
- }
200
- }
201
-
202
- private void updateVideoZoom () {
203
- if (sharedPreferences .getBoolean (VideoZoomedIn , true )) {
204
- mVideoReader .zoomIn ();
205
- } else {
206
- mVideoReader .zoomOut ();
207
- }
208
- }
209
-
210
- private void cancelButtonAnimation () {
211
- Handler handler = settingsButton .getHandler ();
212
- if (handler != null ) {
213
- settingsButton .getHandler ().removeCallbacksAndMessages (null );
214
- }
215
- }
216
-
217
- private void showSettingsButton () {
218
- cancelButtonAnimation ();
219
-
220
- if (overlayView .getVisibility () == View .VISIBLE ) {
221
- buttonAlpha = 1 ;
222
- settingsButton .setAlpha (1 );
223
- }
224
- }
225
-
226
- private void toggleSettingsButton () {
227
- if (buttonAlpha == 1 && overlayView .getVisibility () == View .VISIBLE ) return ;
228
-
229
- // cancel any pending delayed animations first
230
- cancelButtonAnimation ();
231
-
232
- if (buttonAlpha == 1 ) {
233
- buttonAlpha = 0 ;
234
- } else {
235
- buttonAlpha = 1 ;
236
- }
237
-
238
- settingsButton .animate ()
239
- .alpha (buttonAlpha )
240
- .setDuration (shortAnimationDuration )
241
- .setListener (new AnimatorListenerAdapter () {
242
- @ Override
243
- public void onAnimationEnd (Animator animation ) {
244
- autoHideSettingsButton ();
245
- }
246
- });
247
- }
248
-
249
- private void autoHideSettingsButton () {
250
- if (overlayView .getVisibility () == View .VISIBLE ) return ;
251
- if (buttonAlpha == 0 ) return ;
252
-
253
- settingsButton .postDelayed (new Runnable () {
254
- @ Override
255
- public void run () {
256
- buttonAlpha = 0 ;
257
- settingsButton .animate ()
258
- .alpha (0 )
259
- .setDuration (shortAnimationDuration );
260
- }
261
- }, 3000 );
262
- }
263
-
264
273
@ Override
265
274
public void usbDeviceApproved (UsbDevice device ) {
266
275
Log .i (TAG , "USB - usbDevice approved" );
@@ -303,10 +312,7 @@ private void connect() {
303
312
usbConnected = true ;
304
313
mUsbMaskConnection .setUsbDevice (usbManager .openDevice (usbDevice ), usbDevice );
305
314
mVideoReader .setUsbMaskConnection (mUsbMaskConnection );
306
- overlayView .hide ();
307
315
mVideoReader .start ();
308
- updateWatermark ();
309
- autoHideSettingsButton ();
310
316
showOverlay (R .string .waiting_for_video , OverlayStatus .Connected );
311
317
}
312
318
@@ -335,11 +341,6 @@ public void onResume() {
335
341
showOverlay (R .string .waiting_for_usb_device , OverlayStatus .Connected );
336
342
}
337
343
}
338
-
339
- settingsButton .setAlpha (1 );
340
- autoHideSettingsButton ();
341
- updateWatermark ();
342
- updateVideoZoom ();
343
344
}
344
345
345
346
private boolean onVideoReaderEvent (VideoReaderExoplayer .VideoReaderEventMessageCode m ) {
@@ -348,22 +349,15 @@ private boolean onVideoReaderEvent(VideoReaderExoplayer.VideoReaderEventMessageC
348
349
showOverlay (R .string .waiting_for_video , OverlayStatus .Connected );
349
350
} else if (VideoReaderExoplayer .VideoReaderEventMessageCode .VIDEO_PLAYING .equals (m )) {
350
351
Log .d (TAG , "event: VIDEO_PLAYING" );
351
- hideOverlay ();
352
+ hideFullOverlay ();
352
353
}
353
354
return false ; // false to continue listening
354
355
}
355
356
356
357
private void showOverlay (int textId , OverlayStatus connected ) {
358
+ toggleView (overlayView , true );
359
+ showFullOverlay ();
357
360
overlayView .show (textId , connected );
358
- updateWatermark ();
359
- showSettingsButton ();
360
- }
361
-
362
- private void hideOverlay () {
363
- overlayView .hide ();
364
- updateWatermark ();
365
- showSettingsButton ();
366
- autoHideSettingsButton ();
367
361
}
368
362
369
363
@ Override
0 commit comments