Allow cancelling ongoing signup or login

This commit is contained in:
Gabriel Calero 2018-10-26 13:04:34 -03:00
parent 11d82e0ad0
commit 3d677d8e5a
5 changed files with 87 additions and 16 deletions

View file

@ -8,8 +8,8 @@ import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.support.v7.app.AppCompatActivity; import android.support.v7.app.AppCompatActivity;
import android.view.View; import android.view.View;
import io.highfidelity.hifiinterface.fragment.LoginFragment; import io.highfidelity.hifiinterface.fragment.LoginFragment;
import io.highfidelity.hifiinterface.fragment.OnBackPressedListener;
import io.highfidelity.hifiinterface.fragment.SignupFragment; import io.highfidelity.hifiinterface.fragment.SignupFragment;
import io.highfidelity.hifiinterface.fragment.StartMenuFragment; import io.highfidelity.hifiinterface.fragment.StartMenuFragment;
@ -105,8 +105,9 @@ public class LoginMenuActivity extends AppCompatActivity
FragmentManager fragmentManager = getFragmentManager(); FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment fragment = SignupFragment.newInstance(); Fragment fragment = SignupFragment.newInstance();
fragmentTransaction.replace(R.id.content_frame, fragment); String tag = getString(R.string.tagFragmentSignup);
fragmentTransaction.addToBackStack(fragment.toString()); fragmentTransaction.replace(R.id.content_frame, fragment, tag);
fragmentTransaction.addToBackStack(tag);
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
fragmentTransaction.commit(); fragmentTransaction.commit();
hideStatusBar(); hideStatusBar();
@ -116,8 +117,9 @@ public class LoginMenuActivity extends AppCompatActivity
FragmentManager fragmentManager = getFragmentManager(); FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment fragment = LoginFragment.newInstance(); Fragment fragment = LoginFragment.newInstance();
fragmentTransaction.replace(R.id.content_frame, fragment); String tag = getString(R.string.tagFragmentLogin);
fragmentTransaction.addToBackStack(fragment.toString()); fragmentTransaction.replace(R.id.content_frame, fragment, tag);
fragmentTransaction.addToBackStack(tag);
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
fragmentTransaction.commit(); fragmentTransaction.commit();
hideStatusBar(); hideStatusBar();
@ -167,7 +169,15 @@ public class LoginMenuActivity extends AppCompatActivity
FragmentManager fm = getFragmentManager(); FragmentManager fm = getFragmentManager();
int index = fm.getBackStackEntryCount() - 1; int index = fm.getBackStackEntryCount() - 1;
if (index > 0) { if (index > 0) {
super.onBackPressed(); FragmentManager.BackStackEntry backEntry = fm.getBackStackEntryAt(index);
String tag = backEntry.getName();
Fragment topFragment = getFragmentManager().findFragmentByTag(tag);
if (topFragment instanceof OnBackPressedListener &&
((OnBackPressedListener) topFragment).doBack()) {
} else {
super.onBackPressed();
}
} else if (finishOnBack){ } else if (finishOnBack){
finishAffinity(); finishAffinity();
} else { } else {

View file

@ -148,11 +148,6 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
startActivity(new Intent(this, LoginMenuActivity.class)); startActivity(new Intent(this, LoginMenuActivity.class));
} }
private void loadSignupFragment() {
Fragment fragment = SignupFragment.newInstance();
loadFragment(fragment, getString(R.string.signup), getString(R.string.tagFragmentSignup), true, false);
}
private void loadPrivacyPolicyFragment() { private void loadPrivacyPolicyFragment() {
Fragment fragment = PolicyFragment.newInstance(); Fragment fragment = PolicyFragment.newInstance();

View file

@ -22,7 +22,8 @@ import io.highfidelity.hifiinterface.R;
import static org.qtproject.qt5.android.QtActivityDelegate.ApplicationActive; import static org.qtproject.qt5.android.QtActivityDelegate.ApplicationActive;
import static org.qtproject.qt5.android.QtActivityDelegate.ApplicationInactive; import static org.qtproject.qt5.android.QtActivityDelegate.ApplicationInactive;
public class LoginFragment extends Fragment { public class LoginFragment extends Fragment
implements OnBackPressedListener {
private EditText mUsername; private EditText mUsername;
private EditText mPassword; private EditText mPassword;
@ -31,6 +32,8 @@ public class LoginFragment extends Fragment {
private ViewGroup mLoginForm; private ViewGroup mLoginForm;
private ViewGroup mLoggingInFrame; private ViewGroup mLoggingInFrame;
private ViewGroup mLoggedInFrame; private ViewGroup mLoggedInFrame;
private boolean mLoginInProgress;
private boolean mLoginSuccess;
public native void login(String username, String password, Fragment usernameChangedListener); public native void login(String username, String password, Fragment usernameChangedListener);
public native void cancelLogin(); public native void cancelLogin();
@ -142,6 +145,8 @@ public class LoginFragment extends Fragment {
mLoginButton.setEnabled(false); mLoginButton.setEnabled(false);
hideError(); hideError();
showActivityIndicator(); showActivityIndicator();
mLoginInProgress = true;
mLoginSuccess = false;
login(username, password, this); login(username, password, this);
} }
} }
@ -188,9 +193,11 @@ public class LoginFragment extends Fragment {
} }
public void handleLoginCompleted(boolean success) { public void handleLoginCompleted(boolean success) {
mLoginInProgress = false;
getActivity().runOnUiThread(() -> { getActivity().runOnUiThread(() -> {
mLoginButton.setEnabled(true); mLoginButton.setEnabled(true);
if (success) { if (success) {
mLoginSuccess = true;
showLoggedInMessage(); showLoggedInMessage();
} else { } else {
showLoginForm(); showLoginForm();
@ -199,6 +206,22 @@ public class LoginFragment extends Fragment {
}); });
} }
@Override
public boolean doBack() {
if (mLoginInProgress) {
cancelLogin();
showLoginForm();
mLoginInProgress = false;
mLoginButton.setEnabled(true);
return true;
} else if (mLoginSuccess) {
onGetStartedClicked();
return true;
} else {
return false;
}
}
public interface OnLoginInteractionListener { public interface OnLoginInteractionListener {
void onLoginCompleted(); void onLoginCompleted();
void onCancelLogin(); void onCancelLogin();

View file

@ -0,0 +1,11 @@
package io.highfidelity.hifiinterface.fragment;
public interface OnBackPressedListener {
/**
* Processes the back pressed event and returns true if it was managed by this Fragment
* @return
*/
boolean doBack();
}

View file

@ -20,7 +20,8 @@ import io.highfidelity.hifiinterface.R;
import static org.qtproject.qt5.android.QtActivityDelegate.ApplicationActive; import static org.qtproject.qt5.android.QtActivityDelegate.ApplicationActive;
import static org.qtproject.qt5.android.QtActivityDelegate.ApplicationInactive; import static org.qtproject.qt5.android.QtActivityDelegate.ApplicationInactive;
public class SignupFragment extends Fragment { public class SignupFragment extends Fragment
implements OnBackPressedListener {
private EditText mEmail; private EditText mEmail;
private EditText mUsername; private EditText mUsername;
@ -33,6 +34,10 @@ public class SignupFragment extends Fragment {
private ViewGroup mLoggingInFrame; private ViewGroup mLoggingInFrame;
private ViewGroup mLoggedInFrame; private ViewGroup mLoggedInFrame;
private boolean mLoginInProgress;
private boolean mSignupInProgress;
private boolean mSignupSuccess;
public native void signup(String email, String username, String password); // move to SignupFragment public native void signup(String email, String username, String password); // move to SignupFragment
public native void cancelSignup(); public native void cancelSignup();
public native void login(String username, String password); public native void login(String username, String password);
@ -69,7 +74,7 @@ public class SignupFragment extends Fragment {
mSignupButton.setOnClickListener(view -> signup()); mSignupButton.setOnClickListener(view -> signup());
rootView.findViewById(R.id.getStarted).setOnClickListener(view -> onGetStartedPressed()); rootView.findViewById(R.id.getStarted).setOnClickListener(view -> onGetStartedClicked());
mPassword.setOnEditorActionListener((textView, actionId, keyEvent) -> onPasswordEditorAction(textView, actionId, keyEvent)); mPassword.setOnEditorActionListener((textView, actionId, keyEvent) -> onPasswordEditorAction(textView, actionId, keyEvent));
@ -135,6 +140,8 @@ public class SignupFragment extends Fragment {
hideError(); hideError();
mActivityText.setText(R.string.creating_account); mActivityText.setText(R.string.creating_account);
showActivityIndicator(); showActivityIndicator();
mSignupInProgress = true;
mSignupSuccess = false;
signup(email, username, password); signup(email, username, password);
} }
} }
@ -179,7 +186,7 @@ public class SignupFragment extends Fragment {
void onCancelSignup(); void onCancelSignup();
} }
private void onGetStartedPressed() { private void onGetStartedClicked() {
if (mListener != null) { if (mListener != null) {
mListener.onSignupCompleted(); mListener.onSignupCompleted();
} }
@ -187,16 +194,18 @@ public class SignupFragment extends Fragment {
public void handleSignupCompleted() { public void handleSignupCompleted() {
mSignupInProgress = false;
String username = mUsername.getText().toString().trim(); String username = mUsername.getText().toString().trim();
String password = mPassword.getText().toString(); String password = mPassword.getText().toString();
getActivity().runOnUiThread(() -> { getActivity().runOnUiThread(() -> {
mActivityText.setText(R.string.logging_in); mActivityText.setText(R.string.logging_in);
}); });
mLoginInProgress = true;
login(username, password); login(username, password);
} }
public void handleSignupFailed(String error) { public void handleSignupFailed(String error) {
mSignupInProgress = false;
getActivity().runOnUiThread(() -> { getActivity().runOnUiThread(() -> {
mSignupButton.setEnabled(true); mSignupButton.setEnabled(true);
showSignupForm(); showSignupForm();
@ -206,9 +215,11 @@ public class SignupFragment extends Fragment {
} }
public void handleLoginCompleted(boolean success) { public void handleLoginCompleted(boolean success) {
mLoginInProgress = false;
getActivity().runOnUiThread(() -> { getActivity().runOnUiThread(() -> {
mSignupButton.setEnabled(true); mSignupButton.setEnabled(true);
if (success) { if (success) {
mSignupSuccess = true;
showLoggedInMessage(); showLoggedInMessage();
} else { } else {
// Registration was successful but login failed. // Registration was successful but login failed.
@ -219,4 +230,25 @@ public class SignupFragment extends Fragment {
}); });
} }
@Override
public boolean doBack() {
if (mSignupInProgress) {
cancelSignup();
} else if (mLoginInProgress) {
cancelLogin();
}
if (mSignupInProgress || mLoginInProgress) {
showSignupForm();
mLoginInProgress = false;
mSignupInProgress = false;
mSignupButton.setEnabled(true);
return true;
} else if (mSignupSuccess) {
onGetStartedClicked();
return true;
} else {
return false;
}
}
} }