public async Task <bool> Unload() { NavigationStateStatus newStatus = NavigationStateStatus.Unloaded; if (IsAlreadyInSameStatus(newStatus)) { return(true); } bool result = await ScreenState.UnloadState(); if (result) { UpdateState(newStatus); } if (freezingState != null && freezingState.Completion.Task.Status != TaskStatus.RanToCompletion) { freezingState.Completion.SetResult(true); freezingState = null; } // FIXME: when quit is done a double home navigation is done // this causes that the hide/unload of the state is done twice // because the stack is not empty, the hide state is the one creating // the second home transition if (Completion.Task.Status != TaskStatus.RanToCompletion && completeWhenUnload) { Completion.SetResult(result); } return(result); }
public async Task <bool> Unfreeze() { NavigationStateStatus newStatus = NavigationStateStatus.Shown; if (IsAlreadyInSameStatus(newStatus)) { return(true); } bool result = await ScreenState.UnfreezeState(); if (result) { UpdateState(newStatus); } var freezingStateMemento = freezingState; freezingState = null; if (freezingStateMemento.Completion.Task.Status != TaskStatus.RanToCompletion) { freezingStateMemento.Completion.SetResult(result); } return(result); }
bool IsAlreadyInSameStatus(NavigationStateStatus status) { if (CurrentStatus == status) { Log.Warning($"NavigationState has already to desired status {CurrentStatus}"); return(true); } return(false); }
void UpdateState(NavigationStateStatus status) { Log.Verbose($"Transitioning navigation state {Name} from {CurrentStatus} to {status}"); if (Math.Abs(status - CurrentStatus) > 1 && !((CurrentStatus == NavigationStateStatus.Hidden && status == NavigationStateStatus.Shown) || (CurrentStatus == NavigationStateStatus.Shown && status == NavigationStateStatus.Hidden))) { Log.Warning($"Possible inconsistent status transition from {CurrentStatus} to {status}"); } CurrentStatus = status; }
public async Task <bool> Hide() { NavigationStateStatus newStatus = NavigationStateStatus.Hidden; if (IsAlreadyInSameStatus(newStatus)) { return(true); } bool result = await ScreenState.HideState(); if (result) { UpdateState(newStatus); } return(result); }
public async Task <bool> Load(dynamic data) { NavigationStateStatus newStatus = NavigationStateStatus.Loaded; if (IsAlreadyInSameStatus(newStatus)) { return(true); } bool result = await ScreenState.LoadState(data); if (result) { UpdateState(newStatus); } return(result); }
public async Task <bool> Freeze(NavigationState freezingState) { NavigationStateStatus newStatus = NavigationStateStatus.Frozen; if (IsAlreadyInSameStatus(newStatus)) { return(true); } this.freezingState = freezingState; bool result = await ScreenState.FreezeState(); if (result) { UpdateState(newStatus); } return(result); }