private void ReportFinishedStateChange(NextStateActionResultCode resultCode, OneTimeActionTaskState plannedState)
        {
            IReadOnlyList <Page> stack = Navigation.NavigationStack;

            if (stack.Count > 0 && stack[stack.Count - 1].GetType() == typeof(StatusSendingModalPage))
            {
                Device.BeginInvokeOnMainThread(async() =>
                {
                    await ShowStateChangeFeedback(resultCode, plannedState);
                });
            }
        }
        private static NextStateActionOfIncident CreateNextStateAction(JObject actionJsonObject)
        {
            NextStateActionOfIncident createdAction = null;

            try
            {
                Uri parsedUrl = new Uri(actionJsonObject.Value <string>(GeobrokerActionConstants.urlProperty));
                OneTimeActionTaskState parsedPlannedState = (OneTimeActionTaskState)Enum.Parse(typeof(OneTimeActionTaskState), actionJsonObject.Value <string>(GeobrokerActionConstants.additionalDataProperty));

                createdAction = new NextStateActionOfIncident(parsedUrl, parsedPlannedState);
            }
            catch (ArgumentException e)
            {
                Console.WriteLine("Failed to build one-time-action from received JSON.");
                Console.WriteLine(e.ToString());
            }
            catch (UriFormatException e)
            {
                Console.WriteLine("Failed to create URL of one-time-action.");
                Console.WriteLine(e.ToString());
            }

            return(createdAction);
        }
 private static string CreateSuccessMessageForPlannedState(OneTimeActionTaskState plannedState)
 {
     return(plannedState == OneTimeActionTaskState.DETACHED
         ? "Der Status wurde erfolgreich auf 'Einsatz beendet' gesetzt."
         : $"Der Status wurde erfolgreich auf '{plannedState}' gesetzt.");
 }
        private async Task ShowStateChangeFeedback(NextStateActionResultCode resultCode, OneTimeActionTaskState plannedState)
        {
            await Navigation.PopToRootAsync();

            string resultMessage;

            switch (resultCode)
            {
            case NextStateActionResultCode.SUCCESS:
                resultMessage = CreateSuccessMessageForPlannedState(plannedState);
                break;

            case NextStateActionResultCode.ACTION_ID_OUTDATED:
                resultMessage = "Der Status konnte nicht gesetzt werden. Der Status wurde bereits von der Leitstelle verändert." + pleaseTryAgain;
                break;

            default:
                resultMessage = $"Der Status konnte nicht gesetzt werden. Der interne Fehlercode ist: {resultCode}." + pleaseTryAgain;
                break;
            }

            await DisplayAlert("Statusänderung", resultMessage, "OK");
        }
 public NextStateActionOfIncident(Uri url, OneTimeActionTaskState plannedState)
 {
     Url          = url;
     PlannedState = plannedState;
 }