--- /dev/null
+using System;
+using Tizen.NUI;
+
+namespace Fitness.Services
+{
+ /// <summary>
+ /// Manages screen activity.
+ /// </summary>
+ public class ScreenActivityService : IDisposable
+ {
+ private readonly Window win = NUIApplication.GetDefaultWindow();
+ private Timer activityTimer;
+ private uint activatyInterval = 3000;
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ScreenActivityService"/> class.
+ /// </summary>
+ public ScreenActivityService()
+ {
+ activityTimer = new Timer(activatyInterval);
+ activityTimer.Tick += ActivatyTimer_Tick;
+ win.TouchEvent += Win_TouchEvent;
+ }
+
+ /// <summary>
+ /// Raised when the screen is touched.
+ /// </summary>
+ public event EventHandler ScreenActivated;
+
+ /// <summary>
+ /// Raised when the screen is deactivated.
+ /// </summary>
+ public event EventHandler ScreenDeactivated;
+
+ /// <summary>
+ /// Starts the screen activity timer.
+ /// </summary>
+ public void StartTimer()
+ {
+ activityTimer.Start();
+ }
+
+ /// <summary>
+ /// Stops the screen activity timer.
+ /// </summary>
+ public void StopTimer()
+ {
+ activityTimer.Stop();
+ }
+
+ /// <summary>
+ /// Disposes activity timer.
+ /// </summary>
+ public void Dispose()
+ {
+ activityTimer?.Dispose();
+ }
+
+ private void Win_TouchEvent(object sender, Window.TouchEventArgs e)
+ {
+ if (e.Touch.GetState(0) == PointStateType.Down)
+ {
+ ScreenActivated?.Invoke(this, EventArgs.Empty);
+ }
+ }
+
+ private bool ActivatyTimer_Tick(object source, Timer.TickEventArgs e)
+ {
+ ScreenDeactivated?.Invoke(this, EventArgs.Empty);
+ return false;
+ }
+ }
+}
using System.Threading;
using System.Threading.Tasks;
using Fitness.Models;
+using Fitness.Services;
using Fitness.ViewModels;
using Tizen.Multimedia;
using Tizen.NUI;
private const int TransitionTime = 500;
private const string UnhandledWorkoutStateMessage = "Unhandled workout state.";
+ private ScreenActivityService screenActivityService;
private CancellationTokenSource source;
private bool isInitialized = false;
private (Coordinates Preview, Coordinates Camera) playing;
Initialize();
}
+ /// <summary>
+ /// Dispose.
+ /// </summary>
+ /// <param name="type">Dispose type.</param>
+ protected override void Dispose(DisposeTypes type)
+ {
+ screenActivityService?.Dispose();
+ base.Dispose(type);
+ }
+
/// <summary>
/// OnDisappearing.
/// </summary>
cameraView.Preview -= DetectPreview;
cameraView.StopPreview();
}
+
+ screenActivityService.ScreenActivated -= OnScreenActivated;
+ screenActivityService.ScreenDeactivated -= OnScreenDeactivated;
}
/// <summary>
cameraView.StartPreview();
cameraView.Preview += DetectPreview;
}
+
+ screenActivityService.ScreenActivated += OnScreenActivated;
+ screenActivityService.ScreenDeactivated += OnScreenDeactivated;
}
private static void OnWorkoutStateChanged(BindableObject bindable, object oldValue, object newValue)
PlayingView.PreviewStub.Relayout += OnPlayingViewRelayout;
cameraView.Preview += DetectPreview;
+ screenActivityService = new ScreenActivityService();
}
private void ExecuteNewState(WorkoutState newState, WorkoutState oldState)
source?.Dispose();
source = new CancellationTokenSource();
+ if (oldState == WorkoutState.Playing)
+ {
+ screenActivityService.StopTimer();
+ }
+
switch (newState)
{
case WorkoutState.Loading:
case WorkoutState.Playing:
_ = ExecutePlayingState(oldState);
+ OnScreenActivated();
break;
case WorkoutState.OnHold:
}
}
+ private void OnScreenActivated(object sender, System.EventArgs e)
+ {
+ OnScreenActivated();
+ }
+
+ private void OnScreenActivated()
+ {
+ UpperBar.Show();
+ PlayingView.BottomBar.Show();
+ screenActivityService.StartTimer();
+ }
+
+ private void OnScreenDeactivated(object sender, System.EventArgs e)
+ {
+ UpperBar.Hide();
+ PlayingView.BottomBar.Hide();
+ }
+
private void OnPlayingViewRelayout(object sender, System.EventArgs e)
{
SetPositionAndSize();