mirror of
https://github.com/usatiuk/PomoTime.git
synced 2025-10-28 08:27:48 +01:00
properly(hopefully) handle app termination and suspension
This commit is contained in:
@@ -7,6 +7,7 @@ using Windows.ApplicationModel;
|
||||
using Windows.ApplicationModel.Activation;
|
||||
using Windows.Foundation;
|
||||
using Windows.Foundation.Collections;
|
||||
using Windows.Storage;
|
||||
using Windows.UI.Xaml;
|
||||
using Windows.UI.Xaml.Controls;
|
||||
using Windows.UI.Xaml.Controls.Primitives;
|
||||
@@ -22,6 +23,8 @@ namespace PomoTime
|
||||
/// </summary>
|
||||
sealed partial class App : Application
|
||||
{
|
||||
public RunningState RunningState = new RunningState();
|
||||
|
||||
/// <summary>
|
||||
/// Initializes the singleton application object. This is the first line of authored code
|
||||
/// executed, and as such is the logical equivalent of main() or WinMain().
|
||||
@@ -50,9 +53,18 @@ namespace PomoTime
|
||||
|
||||
rootFrame.NavigationFailed += OnNavigationFailed;
|
||||
|
||||
if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
|
||||
if (e.PreviousExecutionState == ApplicationExecutionState.Terminated
|
||||
|| e.PreviousExecutionState == ApplicationExecutionState.ClosedByUser)
|
||||
{
|
||||
//TODO: Load state from previously suspended application
|
||||
ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
|
||||
if (localSettings.Values["MinutesLeft"] != null)
|
||||
{
|
||||
RunningState.MinutesLeft = (int)localSettings.Values["MinutesLeft"];
|
||||
RunningState.SecondsLeft = (int)localSettings.Values["SecondsLeft"];
|
||||
RunningState.IsRunning = (bool)localSettings.Values["IsRunning"];
|
||||
RunningState.PreviousShortBreaks = (int)localSettings.Values["PreviousShortBreaks"];
|
||||
RunningState.CurrentPeriod = (Period)localSettings.Values["CurrentPeriod"];
|
||||
}
|
||||
}
|
||||
|
||||
// Place the frame in the current Window
|
||||
@@ -66,7 +78,7 @@ namespace PomoTime
|
||||
// When the navigation stack isn't restored navigate to the first page,
|
||||
// configuring the new page by passing required information as a navigation
|
||||
// parameter
|
||||
rootFrame.Navigate(typeof(MainPage), e.Arguments);
|
||||
rootFrame.Navigate(typeof(MainPage), RunningState);
|
||||
}
|
||||
// Ensure the current window is active
|
||||
Window.Current.Activate();
|
||||
|
||||
@@ -66,6 +66,7 @@ namespace PomoTime
|
||||
|
||||
Application.Current.Suspending += OnSuspending;
|
||||
Application.Current.Resuming += OnResuming;
|
||||
|
||||
this.Loaded += MainPageLoaded;
|
||||
|
||||
ApplicationDataContainer roamingSettings = Windows.Storage.ApplicationData.Current.RoamingSettings;
|
||||
@@ -104,9 +105,6 @@ namespace PomoTime
|
||||
BreakMinutes = DefaultBreakMinutes;
|
||||
LongBreakMinutes = DefaultLongBreakMinutes;
|
||||
}
|
||||
MainViewRunningState.MinutesLeft = WorkMinutes;
|
||||
MainViewRunningState.SecondsLeft = 0;
|
||||
|
||||
}
|
||||
|
||||
void timer_Tick()
|
||||
@@ -280,18 +278,26 @@ namespace PomoTime
|
||||
minutes["LongBreakMinutes"] = LongBreakMinutes;
|
||||
roamingSettings.Values["Minutes"] = minutes;
|
||||
|
||||
ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
|
||||
SuspendTime = DateTime.Now;
|
||||
localSettings.Values["SuspendTime"] = SuspendTime.Ticks;
|
||||
localSettings.Values["MinutesLeft"] = MainViewRunningState.MinutesLeft;
|
||||
localSettings.Values["SecondsLeft"] = MainViewRunningState.SecondsLeft;
|
||||
localSettings.Values["IsRunning"] = MainViewRunningState.IsRunning;
|
||||
localSettings.Values["PreviousShortBreaks"] = MainViewRunningState.PreviousShortBreaks;
|
||||
localSettings.Values["CurrentPeriod"] = (int)MainViewRunningState.CurrentPeriod;
|
||||
|
||||
deferral.Complete();
|
||||
}
|
||||
|
||||
private void OnResuming(object sender, Object e)
|
||||
private void FastForwardTime(DateTime since)
|
||||
{
|
||||
TimeSpan TimeFromSuspend = DateTime.Now - SuspendTime;
|
||||
if(!MainViewRunningState.IsRunning)
|
||||
TimeSpan TimeFromSuspend = DateTime.Now - since;
|
||||
if (!MainViewRunningState.IsRunning)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if(TimeFromSuspend.TotalSeconds >= MainViewRunningState.MinutesLeft * 60 + MainViewRunningState.SecondsLeft)
|
||||
if (TimeFromSuspend.TotalSeconds >= MainViewRunningState.MinutesLeft * 60 + MainViewRunningState.SecondsLeft)
|
||||
{
|
||||
MainViewRunningState.IsRunning = false;
|
||||
MainViewRunningState.MinutesLeft = 0;
|
||||
@@ -299,7 +305,7 @@ namespace PomoTime
|
||||
return;
|
||||
}
|
||||
|
||||
if(TimeFromSuspend.Seconds > MainViewRunningState.SecondsLeft)
|
||||
if (TimeFromSuspend.Seconds > MainViewRunningState.SecondsLeft)
|
||||
{
|
||||
MainViewRunningState.MinutesLeft -= TimeFromSuspend.Minutes + 1;
|
||||
MainViewRunningState.SecondsLeft = MainViewRunningState.SecondsLeft + 60 - TimeFromSuspend.Seconds;
|
||||
@@ -308,6 +314,15 @@ namespace PomoTime
|
||||
|
||||
MainViewRunningState.MinutesLeft -= TimeFromSuspend.Minutes;
|
||||
MainViewRunningState.SecondsLeft -= TimeFromSuspend.Seconds;
|
||||
|
||||
}
|
||||
|
||||
private void OnResuming(object sender, Object e)
|
||||
{
|
||||
ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
|
||||
SuspendTime = new DateTime((long)localSettings.Values["SuspendTime"]);
|
||||
|
||||
FastForwardTime(SuspendTime);
|
||||
}
|
||||
|
||||
private void MainPageLoaded(object sender, RoutedEventArgs e)
|
||||
@@ -321,5 +336,18 @@ namespace PomoTime
|
||||
});
|
||||
}, TimeSpan.FromSeconds(1));
|
||||
}
|
||||
|
||||
protected override void OnNavigatedTo(NavigationEventArgs e)
|
||||
{
|
||||
base.OnNavigatedTo(e);
|
||||
|
||||
MainViewRunningState = (RunningState)e.Parameter;
|
||||
|
||||
ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
|
||||
SuspendTime = new DateTime((long)localSettings.Values["SuspendTime"]);
|
||||
|
||||
FastForwardTime(SuspendTime);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
<Identity
|
||||
Name="44844StepanUsatyuk.PomoTime"
|
||||
Publisher="CN=D7EE55C2-4D4B-40F8-8EE5-CC4CEBCE2133"
|
||||
Version="1.0.1.0" />
|
||||
Version="1.0.2.0" />
|
||||
|
||||
<mp:PhoneIdentity PhoneProductId="4d8bddac-8ab7-4c19-b3c7-7b5a27b87594" PhonePublisherId="00000000-0000-0000-0000-000000000000"/>
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
<ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||
<WindowsXamlEnableOverview>true</WindowsXamlEnableOverview>
|
||||
<AppxPackageSigningEnabled>True</AppxPackageSigningEnabled>
|
||||
<PackageCertificateThumbprint>037FCF0D18772F50AACCB9F3A4F9061066C3F0CB</PackageCertificateThumbprint>
|
||||
<PackageCertificateThumbprint>5805544F843D1A5B2C86CA0F6C5FB14BC9E5DA32</PackageCertificateThumbprint>
|
||||
<GenerateAppInstallerFile>False</GenerateAppInstallerFile>
|
||||
<AppxPackageSigningTimestampDigestAlgorithm>SHA256</AppxPackageSigningTimestampDigestAlgorithm>
|
||||
<AppxAutoIncrementPackageRevision>True</AppxAutoIncrementPackageRevision>
|
||||
|
||||
Reference in New Issue
Block a user