Files
WPinternals/ViewModels/BusyViewModel.cs
T
Gustave Monce 0e6f905809 Implement the ability to re-unlock an already unlocked phone
+ Start to work on a better UI for reset
2019-12-22 12:23:46 +01:00

215 lines
6.8 KiB
C#

// Copyright (c) 2018, Rene Lergner - wpinternals.net - @Heathcliff74xda
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System;
using System.Threading;
namespace WPinternals
{
internal class BusyViewModel : ContextViewModel
{
private ulong MaxProgressValue = 0;
internal ProgressUpdater ProgressUpdater = null;
// UIContext can be passed to BusyViewModel, when it needs to update progress-controls and it is created on a worker-thread.
internal BusyViewModel(string Message, string SubMessage = null, ulong? MaxProgressValue = null, SynchronizationContext UIContext = null, bool ShowAnimation = true, bool ShowRebootHelp = false)
{
LogFile.Log(Message);
if (UIContext == null)
this.UIContext = SynchronizationContext.Current;
else
this.UIContext = UIContext;
this.Message = Message;
this.SubMessage = SubMessage;
this.ShowAnimation = ShowAnimation;
this.ShowRebootHelp = ShowRebootHelp;
if (MaxProgressValue != null)
{
ProgressPercentage = 0;
this.MaxProgressValue = (ulong)MaxProgressValue;
ProgressUpdater = new ProgressUpdater((ulong)MaxProgressValue, (p, t) =>
{
if ((this.UIContext == null) || (this.UIContext == SynchronizationContext.Current))
{
ProgressPercentage = p;
TimeRemaining = t;
}
else
{
this.UIContext.Post((s) =>
{
ProgressPercentage = p;
TimeRemaining = t;
}, null);
}
});
}
}
internal void SetShowRebootHelp(bool Value)
{
ShowRebootHelp = Value;
}
internal void SetProgress(ulong Value)
{
if (ProgressUpdater != null)
UIContext.Post((s) => { ProgressUpdater.SetProgress(Value); }, null);
}
private string _Message = null;
public string Message
{
get
{
return _Message;
}
set
{
_Message = value;
OnPropertyChanged("Message");
}
}
private string _SubMessage = null;
public string SubMessage
{
get
{
return _SubMessage;
}
set
{
_SubMessage = value;
OnPropertyChanged("SubMessage");
}
}
private int? _ProgressPercentage = null;
public int? ProgressPercentage
{
get
{
return _ProgressPercentage;
}
set
{
if (_ProgressPercentage != value)
{
_ProgressPercentage = value;
OnPropertyChanged("ProgressPercentage");
OnPropertyChanged("ShowAnimation");
UpdateProgressText();
}
}
}
private TimeSpan? _TimeRemaining = null;
public TimeSpan? TimeRemaining
{
get
{
return _TimeRemaining;
}
set
{
if (_TimeRemaining != value)
{
_TimeRemaining = value;
OnPropertyChanged("TimeRemaining");
UpdateProgressText();
}
}
}
private void UpdateProgressText()
{
string NewText = null;
if (ProgressPercentage != null)
{
NewText = "Progress: " + ((int)ProgressPercentage).ToString() + "%";
}
if (TimeRemaining != null)
{
if (NewText == null)
NewText = "";
else
NewText += " - ";
NewText += "Estimated time remaining: " + ((TimeSpan)TimeRemaining).ToString(@"h\:mm\:ss");
}
ProgressText = NewText;
}
private string _ProgressText = null;
public string ProgressText
{
get
{
return _ProgressText;
}
set
{
if (_ProgressText != value)
{
_ProgressText = value;
OnPropertyChanged("ProgressText");
}
}
}
private bool _ShowAnimation = true;
public bool ShowAnimation
{
get
{
return (_ProgressPercentage == null) && _ShowAnimation;
}
set
{
if (_ShowAnimation != value)
{
_ShowAnimation = value;
OnPropertyChanged("ShowAnimation");
}
}
}
private bool _ShowRebootHelp = false;
public bool ShowRebootHelp
{
get
{
return _ShowRebootHelp;
}
set
{
if (_ShowRebootHelp != value)
{
_ShowRebootHelp = value;
OnPropertyChanged("ShowRebootHelp");
}
}
}
}
}