mirror of
https://github.com/usatiuk/PomoTime.git
synced 2025-10-29 00:47: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.ApplicationModel.Activation;
|
||||||
using Windows.Foundation;
|
using Windows.Foundation;
|
||||||
using Windows.Foundation.Collections;
|
using Windows.Foundation.Collections;
|
||||||
|
using Windows.Storage;
|
||||||
using Windows.UI.Xaml;
|
using Windows.UI.Xaml;
|
||||||
using Windows.UI.Xaml.Controls;
|
using Windows.UI.Xaml.Controls;
|
||||||
using Windows.UI.Xaml.Controls.Primitives;
|
using Windows.UI.Xaml.Controls.Primitives;
|
||||||
@@ -22,6 +23,8 @@ namespace PomoTime
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
sealed partial class App : Application
|
sealed partial class App : Application
|
||||||
{
|
{
|
||||||
|
public RunningState RunningState = new RunningState();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes the singleton application object. This is the first line of authored code
|
/// 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().
|
/// executed, and as such is the logical equivalent of main() or WinMain().
|
||||||
@@ -50,9 +53,18 @@ namespace PomoTime
|
|||||||
|
|
||||||
rootFrame.NavigationFailed += OnNavigationFailed;
|
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
|
// 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,
|
// When the navigation stack isn't restored navigate to the first page,
|
||||||
// configuring the new page by passing required information as a navigation
|
// configuring the new page by passing required information as a navigation
|
||||||
// parameter
|
// parameter
|
||||||
rootFrame.Navigate(typeof(MainPage), e.Arguments);
|
rootFrame.Navigate(typeof(MainPage), RunningState);
|
||||||
}
|
}
|
||||||
// Ensure the current window is active
|
// Ensure the current window is active
|
||||||
Window.Current.Activate();
|
Window.Current.Activate();
|
||||||
|
|||||||
@@ -66,6 +66,7 @@ namespace PomoTime
|
|||||||
|
|
||||||
Application.Current.Suspending += OnSuspending;
|
Application.Current.Suspending += OnSuspending;
|
||||||
Application.Current.Resuming += OnResuming;
|
Application.Current.Resuming += OnResuming;
|
||||||
|
|
||||||
this.Loaded += MainPageLoaded;
|
this.Loaded += MainPageLoaded;
|
||||||
|
|
||||||
ApplicationDataContainer roamingSettings = Windows.Storage.ApplicationData.Current.RoamingSettings;
|
ApplicationDataContainer roamingSettings = Windows.Storage.ApplicationData.Current.RoamingSettings;
|
||||||
@@ -104,9 +105,6 @@ namespace PomoTime
|
|||||||
BreakMinutes = DefaultBreakMinutes;
|
BreakMinutes = DefaultBreakMinutes;
|
||||||
LongBreakMinutes = DefaultLongBreakMinutes;
|
LongBreakMinutes = DefaultLongBreakMinutes;
|
||||||
}
|
}
|
||||||
MainViewRunningState.MinutesLeft = WorkMinutes;
|
|
||||||
MainViewRunningState.SecondsLeft = 0;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void timer_Tick()
|
void timer_Tick()
|
||||||
@@ -280,18 +278,26 @@ namespace PomoTime
|
|||||||
minutes["LongBreakMinutes"] = LongBreakMinutes;
|
minutes["LongBreakMinutes"] = LongBreakMinutes;
|
||||||
roamingSettings.Values["Minutes"] = minutes;
|
roamingSettings.Values["Minutes"] = minutes;
|
||||||
|
|
||||||
|
ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
|
||||||
SuspendTime = DateTime.Now;
|
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();
|
deferral.Complete();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnResuming(object sender, Object e)
|
private void FastForwardTime(DateTime since)
|
||||||
{
|
{
|
||||||
TimeSpan TimeFromSuspend = DateTime.Now - SuspendTime;
|
TimeSpan TimeFromSuspend = DateTime.Now - since;
|
||||||
if(!MainViewRunningState.IsRunning)
|
if (!MainViewRunningState.IsRunning)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(TimeFromSuspend.TotalSeconds >= MainViewRunningState.MinutesLeft * 60 + MainViewRunningState.SecondsLeft)
|
if (TimeFromSuspend.TotalSeconds >= MainViewRunningState.MinutesLeft * 60 + MainViewRunningState.SecondsLeft)
|
||||||
{
|
{
|
||||||
MainViewRunningState.IsRunning = false;
|
MainViewRunningState.IsRunning = false;
|
||||||
MainViewRunningState.MinutesLeft = 0;
|
MainViewRunningState.MinutesLeft = 0;
|
||||||
@@ -299,7 +305,7 @@ namespace PomoTime
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(TimeFromSuspend.Seconds > MainViewRunningState.SecondsLeft)
|
if (TimeFromSuspend.Seconds > MainViewRunningState.SecondsLeft)
|
||||||
{
|
{
|
||||||
MainViewRunningState.MinutesLeft -= TimeFromSuspend.Minutes + 1;
|
MainViewRunningState.MinutesLeft -= TimeFromSuspend.Minutes + 1;
|
||||||
MainViewRunningState.SecondsLeft = MainViewRunningState.SecondsLeft + 60 - TimeFromSuspend.Seconds;
|
MainViewRunningState.SecondsLeft = MainViewRunningState.SecondsLeft + 60 - TimeFromSuspend.Seconds;
|
||||||
@@ -308,6 +314,15 @@ namespace PomoTime
|
|||||||
|
|
||||||
MainViewRunningState.MinutesLeft -= TimeFromSuspend.Minutes;
|
MainViewRunningState.MinutesLeft -= TimeFromSuspend.Minutes;
|
||||||
MainViewRunningState.SecondsLeft -= TimeFromSuspend.Seconds;
|
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)
|
private void MainPageLoaded(object sender, RoutedEventArgs e)
|
||||||
@@ -321,5 +336,18 @@ namespace PomoTime
|
|||||||
});
|
});
|
||||||
}, TimeSpan.FromSeconds(1));
|
}, 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
|
<Identity
|
||||||
Name="44844StepanUsatyuk.PomoTime"
|
Name="44844StepanUsatyuk.PomoTime"
|
||||||
Publisher="CN=D7EE55C2-4D4B-40F8-8EE5-CC4CEBCE2133"
|
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"/>
|
<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>
|
<ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||||
<WindowsXamlEnableOverview>true</WindowsXamlEnableOverview>
|
<WindowsXamlEnableOverview>true</WindowsXamlEnableOverview>
|
||||||
<AppxPackageSigningEnabled>True</AppxPackageSigningEnabled>
|
<AppxPackageSigningEnabled>True</AppxPackageSigningEnabled>
|
||||||
<PackageCertificateThumbprint>037FCF0D18772F50AACCB9F3A4F9061066C3F0CB</PackageCertificateThumbprint>
|
<PackageCertificateThumbprint>5805544F843D1A5B2C86CA0F6C5FB14BC9E5DA32</PackageCertificateThumbprint>
|
||||||
<GenerateAppInstallerFile>False</GenerateAppInstallerFile>
|
<GenerateAppInstallerFile>False</GenerateAppInstallerFile>
|
||||||
<AppxPackageSigningTimestampDigestAlgorithm>SHA256</AppxPackageSigningTimestampDigestAlgorithm>
|
<AppxPackageSigningTimestampDigestAlgorithm>SHA256</AppxPackageSigningTimestampDigestAlgorithm>
|
||||||
<AppxAutoIncrementPackageRevision>True</AppxAutoIncrementPackageRevision>
|
<AppxAutoIncrementPackageRevision>True</AppxAutoIncrementPackageRevision>
|
||||||
|
|||||||
Reference in New Issue
Block a user