private async void ButtonLogin_OnClicked(object sender, EventArgs e)
        {
            ViewModel.IsLoggingIn  = true;
            ViewModel.Status       = "Logging in...";
            ViewModel.StatusDetail = null;

            string userName = ViewModel.UserName;
            string password = ViewModel.Password;

            DijnetLoginResult loginResult = await authClient.LoginAsync(userName, password);

            if (loginResult.Success)
            {
                bool             remember   = ViewModel.Remember;
                bool             autoLogin  = ViewModel.AutoLogin;
                DijnetCredential credential = new DijnetCredential(userName, password, remember, autoLogin);

                await credentialManager.UpdateCredentialAsync(credential);
                await OnLoginSuccess(loginResult.CookieContainer, loginResult.Url);
            }
            else
            {
                ViewModel.Status       = "Failed to log in!";
                ViewModel.StatusDetail = loginResult.Error;
                ViewModel.IsLoggingIn  = false;
            }
        }
        private async Task <bool> TryAutoLoginAsync(DijnetCredential dijnetCredential)
        {
            if (dijnetCredential.IsValid && dijnetCredential.AutoLogin)
            {
                ViewModel.Status = "Logging in...";

                DijnetLoginResult loginResult = await authClient.LoginAsync(dijnetCredential.UserName, dijnetCredential.Password);

                if (loginResult.Success)
                {
                    await OnLoginSuccess(loginResult.CookieContainer, loginResult.Url);

                    return(true);
                }
            }

            return(false);
        }
        private void EnableManualLogin(DijnetCredential dijnetCredential)
        {
            if (dijnetCredential.IsValid)
            {
                ViewModel.UserName  = dijnetCredential.UserName;
                ViewModel.Password  = dijnetCredential.Password;
                ViewModel.Remember  = dijnetCredential.Remember;
                ViewModel.AutoLogin = dijnetCredential.AutoLogin;
            }
            else
            {
                ViewModel.UserName  = null;
                ViewModel.Password  = null;
                ViewModel.Remember  = false;
                ViewModel.AutoLogin = false;
            }

            ViewModel.Status        = null;
            ViewModel.IsManualLogin = true;
        }
        protected override async void OnAppearing()
        {
            base.OnAppearing();

            DijnetCredential dijnetCredential = await credentialManager.GetStoredCredentialAsync();

            if (firstAutoLogin)
            {
                firstAutoLogin = false;

                bool success = await TryAutoLoginAsync(dijnetCredential);

                if (!success)
                {
                    EnableManualLogin(dijnetCredential);
                }
            }
            else
            {
                EnableManualLogin(dijnetCredential);
            }

            ViewModel.IsLoggingIn = false;
        }