Skip to content

Commit

Permalink
Show loading dialog when loading magic link.
Browse files Browse the repository at this point in the history
  • Loading branch information
notandyvee committed Aug 1, 2024
1 parent 5138a01 commit 7e68496
Showing 1 changed file with 46 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,17 @@

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextThemeWrapper;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;

import com.automattic.simplenote.R;
Expand All @@ -22,6 +24,7 @@
import com.automattic.simplenote.viewmodels.MagicLinkUiState;
import com.automattic.simplenote.viewmodels.CompleteMagicLinkViewModel;
import com.simperium.android.AuthenticationActivity;
import com.simperium.android.ProgressDialogFragment;

import net.openid.appauth.AuthorizationException;
import net.openid.appauth.AuthorizationRequest;
Expand Down Expand Up @@ -50,16 +53,23 @@ public class SimplenoteAuthenticationActivity extends AuthenticationActivity {
@Inject
Simplenote simplenote;

@Nullable
CompleteMagicLinkViewModel completeMagicLinkViewModel;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

final Intent intent = getIntent();

final boolean isMagicLink = intent.getBooleanExtra(KEY_IS_MAGIC_LINK, false);
if (isMagicLink) {
CompleteMagicLinkViewModel completeMagicLinkViewModel = new ViewModelProvider(this).get(CompleteMagicLinkViewModel.class);
final String authKey = intent.getStringExtra(KEY_MAGIC_LINK_AUTH_KEY);
final String authCode = intent.getStringExtra(KEY_MAGIC_LINK_AUTH_CODE);
if (isMagicLink && authKey != null && authCode != null) {
completeMagicLinkViewModel = new ViewModelProvider(this).get(CompleteMagicLinkViewModel.class);
completeMagicLinkViewModel.getMagicLinkUiState().observe(this, state -> {
if (state instanceof MagicLinkUiState.Success) {
hideDialog();
final MagicLinkUiState.Success stateResult = (MagicLinkUiState.Success) state;
simplenote.loginWithToken(stateResult.getEmail(), stateResult.getToken());

Expand All @@ -72,12 +82,13 @@ public void onCreate(Bundle savedInstanceState) {
);

finish();
} else if (state instanceof MagicLinkUiState.Loading) {
showLoadingDialog(R.string.magic_link_complete_login_loading_message);
} else if (state instanceof MagicLinkUiState.Error) {
hideDialog();
showDialogError(((MagicLinkUiState.Error) state).getMessageRes());
}
});
final String authKey = intent.getStringExtra(KEY_MAGIC_LINK_AUTH_KEY);
final String authCode = intent.getStringExtra(KEY_MAGIC_LINK_AUTH_CODE);
completeMagicLinkViewModel.completeLogin(authKey, authCode, false);
}
}
Expand Down Expand Up @@ -202,23 +213,45 @@ protected void onRestoreInstanceState(Bundle savedInstanceState) {
}
}

private void showLoadingDialog(@StringRes int stringRes) {
final Fragment fragment = getSupportFragmentManager().findFragmentByTag(ProgressDialogFragment.TAG);
if (fragment == null) {
final ProgressDialogFragment progressDialogFragment = ProgressDialogFragment.newInstance(getString(stringRes));
progressDialogFragment.setStyle(DialogFragment.STYLE_NO_TITLE, R.style.Simperium);
progressDialogFragment.show(getSupportFragmentManager(), ProgressDialogFragment.TAG);
}
}

private void hideDialog() {
final Fragment fragment = getSupportFragmentManager().findFragmentByTag(ProgressDialogFragment.TAG);
if (fragment != null) {
try {
final ProgressDialogFragment progressDialogFragment = (ProgressDialogFragment) fragment;
if (!progressDialogFragment.isHidden()) {
progressDialogFragment.dismiss();
}
} catch (final ClassCastException e) {
Log.e(TAG, "We have a class other than ProgressDialogFragment", e);
}
}
}

private void showDialogError(@StringRes int message) {
if (isFinishing() || message == 0) {
return;
}

Context context = new ContextThemeWrapper(SimplenoteAuthenticationActivity.this, getTheme());
mPendingDialog = new AlertDialog.Builder(context)
.setTitle(R.string.simperium_dialog_title_error)
.setMessage(message)
.setPositiveButton(android.R.string.ok, null)
.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
mPendingDialog = null;
.setTitle(R.string.simperium_dialog_title_error)
.setMessage(message)
.setPositiveButton(android.R.string.ok, (dialog, which) -> {
if (completeMagicLinkViewModel != null) {
completeMagicLinkViewModel.resetState();
}
})
.show();
.setOnDismissListener(dialog -> mPendingDialog = null)
.show();

AnalyticsTracker.track(
AnalyticsTracker.Stat.WPCC_LOGIN_FAILED,
Expand Down

0 comments on commit 7e68496

Please sign in to comment.