Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
 bool IsAlreadyInSameStatus(NavigationStateStatus status)
 {
     if (CurrentStatus == status)
     {
         Log.Warning($"NavigationState has already to desired status {CurrentStatus}");
         return(true);
     }
     return(false);
 }
Exemplo n.º 4
0
 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;
 }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        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);
        }