protected override void OnAppLinkRequestReceived(Uri uri)
        {
            string token = uri.Segments[2];

            if (!WakaTimeRepo.IsTokenValid(token))
            {
                Current.MainPage.DisplayAlert("Invalid Token", "An invalid token was supplied, you have not been signed in.", "Ok");

                return;
            }

            App.cache.RemoveAll();

            Preferences.Set("token", token);

            MainPage = new MainPage();

            Current.MainPage.DisplayAlert("Successful Login", "You can always log out at the bottom of the navigation menu.", "Ok");
        }
        private async void OnItemSelected(object sender, SelectedItemChangedEventArgs e)
        {
            NavigationItem item = e.SelectedItem as NavigationItem;

            if (item == null)
            {
                return;
            }

            if (item.TargetType != null)
            {
                Detail = new NavigationPage((Page)Activator.CreateInstance(item.TargetType));
            }
            else
            {
                switch (item.Title)
                {
                case "Profile":
                    Detail = new NavigationPage(new UserPage(MainPage.CurrentLeader));

                    break;

                case "Login":
                    if (await DisplayAlert("Login", "You are about to be redirected.", "Continue", "Cancel"))
                    {
                        try
                        {
                            await Browser.OpenAsync(WakaTimeRepo.RedirectUrl, BrowserLaunchMode.External);
                        }
                        catch (Exception)
                        {
                            Console.WriteLine("Failed to start browser, the device might not have a browser installed.");

                            break;
                        }

                        string result = await DisplayPromptAsync("Token", "Go To https://wakatime.damon.sh if you didn't get redirected.\n\nPut the login token in the field below after authenticating.", "Confirm", "Cancel");

                        if (WakaTimeRepo.IsTokenValid(result))
                        {
                            App.cache.RemoveAll();

                            Preferences.Set("token", result);

                            (Application.Current).MainPage = new MainPage();
                        }
                        else
                        {
                            DisplayAlert("Invalid Token", "An invalid WakaTime token has been inserted", "Ok");
                        }
                    }

                    break;

                case "Logout":
                    if (await DisplayAlert("Logout?", "Are you sure you want to logout?", "Yes, please", "No, please take me back"))
                    {
                        App.cache.RemoveAll();

                        Preferences.Remove("token");

                        (Application.Current).MainPage = new MainPage();
                    }

                    break;

                default:
                    break;
                }
            }

            IsPresented = false;
            masterPage.lvwNavigation.SelectedItem       = null;
            masterPage.lvwBottomNavigation.SelectedItem = null;
        }