Merge "Add the password failed warning text" into ub-mail-master
This commit is contained in:
commit
351aa25ccb
|
@ -20,6 +20,42 @@
|
|||
android:layout_weight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/wrong_password_warning_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone"
|
||||
android:paddingTop="16dip"
|
||||
android:paddingBottom="16dip"
|
||||
android:text="@string/password_warning_label"
|
||||
android:textColor="@color/password_warning_color"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/email_confirmation_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone"
|
||||
android:textStyle="bold"
|
||||
android:text="@string/email_confirmation_label"
|
||||
android:textColor="@color/email_confirmation_color"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/email_confirmation"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone"
|
||||
android:paddingBottom="24dip"
|
||||
android:textColor="@color/email_confirmation_color"/>
|
||||
|
||||
<EditText
|
||||
android:id="@+id/regular_password"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="match_parent"
|
||||
android:hint="@string/account_setup_incoming_password_label"
|
||||
android:inputType="textPassword"
|
||||
android:imeOptions="actionDone"
|
||||
android:visibility="gone"/>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/oauth_group"
|
||||
android:layout_width="match_parent"
|
||||
|
@ -47,7 +83,7 @@
|
|||
android:hint="@string/account_setup_incoming_password_label"
|
||||
android:layout_gravity="center"
|
||||
android:inputType="textPassword"
|
||||
android:imeOptions="actionNext"/>
|
||||
android:imeOptions="actionDone"/>
|
||||
</LinearLayout>
|
||||
|
||||
<EditText
|
||||
|
|
|
@ -39,4 +39,8 @@
|
|||
|
||||
<color name="button_text_color">#777777</color>
|
||||
<color name="button_text_disabled_color">#cccccc</color>
|
||||
|
||||
<color name="password_warning_color">#FFA500</color>
|
||||
<color name="email_confirmation_color">#808080</color>
|
||||
|
||||
</resources>
|
|
@ -194,6 +194,11 @@
|
|||
<string name="oauth_authentication_title">Requesting authorization</string>
|
||||
<!-- Title of screen to choose with authentication to use -->
|
||||
<string name="sign_in_title">Sign in</string>
|
||||
|
||||
<!-- Warning label displayed when the email address or password are incorrect -->
|
||||
<string name="password_warning_label">Email address or password are incorrect</string>
|
||||
<!-- Label displayed to confirm what email address we are trying to validate -->
|
||||
<string name="email_confirmation_label">Email address:</string>
|
||||
<!-- Headline of screen when setting up new email account (large text over divider)
|
||||
[CHAR LIMIT=none] -->
|
||||
<string name="account_setup_basics_headline">Email account</string>
|
||||
|
@ -207,7 +212,8 @@
|
|||
<string name="or_label">OR</string>
|
||||
<!-- Label for signing in with Google using OAuth -->
|
||||
<string name="sign_in_with_google">Sign in with Google</string>
|
||||
|
||||
<!-- On "Set up email" screen, hint for account email password text field -->
|
||||
<string name="account_setup_basics_password_label">Password</string>
|
||||
<!-- hint for account email password text field -->
|
||||
<string name="password_label">Password</string>
|
||||
<!-- On the "Setup up email" screen, label indicating what service we are signed in with [CHAR LIMIT=40] -->
|
||||
|
|
|
@ -36,7 +36,7 @@ public class AccountCredentials extends Activity
|
|||
final String protocol = getIntent().getStringExtra(EXTRA_PROTOCOL);
|
||||
|
||||
final AccountSetupCredentialsFragment f =
|
||||
AccountSetupCredentialsFragment.newInstance(emailAddress, protocol);
|
||||
AccountSetupCredentialsFragment.newInstance(emailAddress, protocol, false);
|
||||
getFragmentManager().beginTransaction()
|
||||
.add(R.id.account_credentials_fragment_container, f, CREDENTIALS_FRAGMENT_TAG)
|
||||
.commit();
|
||||
|
|
|
@ -24,10 +24,12 @@ import android.text.Editable;
|
|||
import android.text.TextUtils;
|
||||
import android.text.TextWatcher;
|
||||
import android.text.format.DateUtils;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.inputmethod.EditorInfo;
|
||||
import android.widget.EditText;
|
||||
import android.widget.TextView;
|
||||
|
||||
|
@ -54,6 +56,7 @@ public class AccountSetupCredentialsFragment extends AccountSetupFragment
|
|||
|
||||
private static final String EXTRA_EMAIL = "email";
|
||||
private static final String EXTRA_PROTOCOL = "protocol";
|
||||
private static final String EXTRA_PASSWORD_FAILED = "password_failed";
|
||||
|
||||
public static final String EXTRA_PASSWORD = "password";
|
||||
public static final String EXTRA_OAUTH_PROVIDER = "provider";
|
||||
|
@ -66,6 +69,10 @@ public class AccountSetupCredentialsFragment extends AccountSetupFragment
|
|||
private EditText mImapPasswordText;
|
||||
private EditText mRegularPasswordText;
|
||||
private TextWatcher mValidationTextWatcher;
|
||||
private TextView mPasswordWarningLabel;
|
||||
private TextView mEmailConfirmationLabel;
|
||||
private TextView mEmailConfirmation;
|
||||
private TextView.OnEditorActionListener mEditorActionListener;
|
||||
private String mEmailAddress;
|
||||
private boolean mOfferOAuth;
|
||||
private boolean mOfferCerts;
|
||||
|
@ -87,11 +94,12 @@ public class AccountSetupCredentialsFragment extends AccountSetupFragment
|
|||
* @return new fragment instance
|
||||
*/
|
||||
public static AccountSetupCredentialsFragment newInstance(final String email,
|
||||
final String protocol) {
|
||||
final String protocol, final boolean passwordFailed) {
|
||||
final AccountSetupCredentialsFragment f = new AccountSetupCredentialsFragment();
|
||||
final Bundle b = new Bundle(2);
|
||||
b.putString(EXTRA_EMAIL, email);
|
||||
b.putString(EXTRA_PROTOCOL, protocol);
|
||||
b.putBoolean(EXTRA_PASSWORD_FAILED, passwordFailed);
|
||||
f.setArguments(b);
|
||||
return f;
|
||||
}
|
||||
|
@ -111,6 +119,29 @@ public class AccountSetupCredentialsFragment extends AccountSetupFragment
|
|||
mDeviceIdSection = UiUtilities.getView(view, R.id.device_id_section);
|
||||
mDeviceId = UiUtilities.getView(view, R.id.device_id);
|
||||
mClientCertificateSelector.setHostCallback(this);
|
||||
mPasswordWarningLabel = UiUtilities.getView(view, R.id.wrong_password_warning_label);
|
||||
mEmailConfirmationLabel = UiUtilities.getView(view, R.id.email_confirmation_label);
|
||||
mEmailConfirmation = UiUtilities.getView(view, R.id.email_confirmation);
|
||||
|
||||
mEditorActionListener = new TextView.OnEditorActionListener() {
|
||||
@Override
|
||||
public boolean onEditorAction(TextView view, int actionId, KeyEvent event) {
|
||||
if (actionId == EditorInfo.IME_ACTION_DONE) {
|
||||
final Callback callback = (Callback) getActivity();
|
||||
if (callback != null) {
|
||||
final Bundle results = new Bundle(1);
|
||||
results.putString(EXTRA_PASSWORD, getPassword());
|
||||
mResults = results;
|
||||
callback.onCredentialsComplete(results);
|
||||
}
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
};
|
||||
mImapPasswordText.setOnEditorActionListener(mEditorActionListener);
|
||||
mRegularPasswordText.setOnEditorActionListener(mEditorActionListener);
|
||||
|
||||
// After any text edits, call validateFields() which enables or disables the Next button
|
||||
mValidationTextWatcher = new TextWatcher() {
|
||||
|
@ -166,6 +197,8 @@ public class AccountSetupCredentialsFragment extends AccountSetupFragment
|
|||
}
|
||||
mDeviceId.setText(deviceId);
|
||||
}
|
||||
final boolean passwordFailed = getArguments().getBoolean(EXTRA_PASSWORD_FAILED, false);
|
||||
setPasswordFailed(passwordFailed);
|
||||
validatePassword();
|
||||
}
|
||||
|
||||
|
@ -174,14 +207,29 @@ public class AccountSetupCredentialsFragment extends AccountSetupFragment
|
|||
super.onDestroy();
|
||||
if (mImapPasswordText != null) {
|
||||
mImapPasswordText.removeTextChangedListener(mValidationTextWatcher);
|
||||
mImapPasswordText.setOnEditorActionListener(null);
|
||||
mImapPasswordText = null;
|
||||
}
|
||||
if (mRegularPasswordText != null) {
|
||||
mRegularPasswordText.removeTextChangedListener(mValidationTextWatcher);
|
||||
mRegularPasswordText.setOnEditorActionListener(null);
|
||||
mRegularPasswordText = null;
|
||||
}
|
||||
}
|
||||
|
||||
public void setPasswordFailed(final boolean failed) {
|
||||
if (failed) {
|
||||
mPasswordWarningLabel.setVisibility(View.VISIBLE);
|
||||
mEmailConfirmationLabel.setVisibility(View.VISIBLE);
|
||||
mEmailConfirmation.setVisibility(View.VISIBLE);
|
||||
mEmailConfirmation.setText(mEmailAddress);
|
||||
} else {
|
||||
mPasswordWarningLabel.setVisibility(View.GONE);
|
||||
mEmailConfirmationLabel.setVisibility(View.GONE);
|
||||
mEmailConfirmation.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
|
||||
public void validatePassword() {
|
||||
final Callback callback = (Callback) getActivity();
|
||||
if (callback != null) {
|
||||
|
|
|
@ -23,6 +23,7 @@ import android.app.AlertDialog;
|
|||
import android.app.Dialog;
|
||||
import android.app.DialogFragment;
|
||||
import android.app.Fragment;
|
||||
import android.app.FragmentManager;
|
||||
import android.app.FragmentTransaction;
|
||||
import android.app.LoaderManager;
|
||||
import android.app.ProgressDialog;
|
||||
|
@ -108,8 +109,10 @@ public class AccountSetupFinal extends AccountSetupActivity
|
|||
"AccountSetupFinal.authErr";
|
||||
private static final String SAVESTATE_KEY_IS_PRE_CONFIGURED = "AccountSetupFinal.preconfig";
|
||||
private static final String SAVESTATE_KEY_SKIP_AUTO_DISCOVER = "AccountSetupFinal.noAuto";
|
||||
private static final String SAVESTATE_KEY_PASSWORD_FAILED = "AccountSetupFinal.passwordFailed";
|
||||
|
||||
private static final String CONTENT_FRAGMENT_TAG = "AccountSetupContentFragment";
|
||||
private static final String CREDENTIALS_BACKSTACK_TAG = "AccountSetupCredentialsFragment";
|
||||
|
||||
// Collecting initial email and password
|
||||
private static final int STATE_BASICS = 0;
|
||||
|
@ -154,6 +157,7 @@ public class AccountSetupFinal extends AccountSetupActivity
|
|||
private boolean mPreConfiguredFailed = false;
|
||||
|
||||
private VendorPolicyLoader.Provider mProvider;
|
||||
private boolean mPasswordFailed;
|
||||
|
||||
// UI elements
|
||||
@VisibleForTesting
|
||||
|
@ -210,6 +214,7 @@ public class AccountSetupFinal extends AccountSetupActivity
|
|||
mIsPreConfiguredProvider =
|
||||
savedInstanceState.getBoolean(SAVESTATE_KEY_IS_PRE_CONFIGURED);
|
||||
mSkipAutoDiscover = savedInstanceState.getBoolean(SAVESTATE_KEY_SKIP_AUTO_DISCOVER);
|
||||
mPasswordFailed = savedInstanceState.getBoolean(SAVESTATE_KEY_PASSWORD_FAILED);
|
||||
// I don't know why this view state doesn't get restored
|
||||
updateHeadline();
|
||||
} else {
|
||||
|
@ -249,6 +254,7 @@ public class AccountSetupFinal extends AccountSetupActivity
|
|||
}
|
||||
updateHeadline();
|
||||
updateContentFragment(false /* addToBackstack */);
|
||||
mPasswordFailed = false;
|
||||
}
|
||||
|
||||
UiUtilities.getView(this, R.id.previous).setOnClickListener(this);
|
||||
|
@ -398,6 +404,7 @@ public class AccountSetupFinal extends AccountSetupActivity
|
|||
outState.putBoolean(SAVESTATE_KEY_REPORT_AUTHENTICATOR_ERROR,
|
||||
mReportAccountAuthenticatorError);
|
||||
outState.putBoolean(SAVESTATE_KEY_IS_PRE_CONFIGURED, mIsPreConfiguredProvider);
|
||||
outState.putBoolean(SAVESTATE_KEY_PASSWORD_FAILED, mPasswordFailed);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -439,13 +446,17 @@ public class AccountSetupFinal extends AccountSetupActivity
|
|||
*/
|
||||
private void updateContentFragment(boolean addToBackstack) {
|
||||
final AccountSetupFragment f;
|
||||
String backstackTag = null;
|
||||
|
||||
switch (mState) {
|
||||
case STATE_BASICS:
|
||||
f = AccountSetupBasicsFragment.newInstance();
|
||||
break;
|
||||
case STATE_CREDENTIALS:
|
||||
f = AccountSetupCredentialsFragment.newInstance(mSetupData.getEmail(),
|
||||
mSetupData.getAccount().getOrCreateHostAuthRecv(this).mProtocol);
|
||||
mSetupData.getAccount().getOrCreateHostAuthRecv(this).mProtocol,
|
||||
mPasswordFailed);
|
||||
backstackTag = CREDENTIALS_BACKSTACK_TAG;
|
||||
break;
|
||||
case STATE_TYPE:
|
||||
f = AccountSetupTypeFragment.newInstance();
|
||||
|
@ -469,7 +480,7 @@ public class AccountSetupFinal extends AccountSetupActivity
|
|||
final FragmentTransaction ft = getFragmentManager().beginTransaction();
|
||||
ft.replace(R.id.setup_fragment_container, f, CONTENT_FRAGMENT_TAG);
|
||||
if (addToBackstack) {
|
||||
ft.addToBackStack(null);
|
||||
ft.addToBackStack(backstackTag);
|
||||
}
|
||||
ft.commit();
|
||||
}
|
||||
|
@ -488,6 +499,9 @@ public class AccountSetupFinal extends AccountSetupActivity
|
|||
*/
|
||||
private void resetStateFromCurrentFragment() {
|
||||
AccountSetupFragment f = getContentFragment();
|
||||
if (mState == STATE_CREDENTIALS) {
|
||||
mPasswordFailed = false;
|
||||
}
|
||||
mState = f.getState();
|
||||
updateHeadline();
|
||||
}
|
||||
|
@ -505,6 +519,7 @@ public class AccountSetupFinal extends AccountSetupActivity
|
|||
switch (mState) {
|
||||
case STATE_BASICS:
|
||||
onBasicsComplete();
|
||||
// TODO: Move protocol choice before password entry
|
||||
if (shouldDivertToManual()) {
|
||||
// Alternate entry to the debug options screen (for devices without a physical
|
||||
// keyboard):
|
||||
|
@ -544,9 +559,13 @@ public class AccountSetupFinal extends AccountSetupActivity
|
|||
break;
|
||||
case STATE_CHECKING_PRECONFIGURED:
|
||||
if (mPreConfiguredFailed) {
|
||||
mState = STATE_MANUAL_INCOMING;
|
||||
updateHeadline();
|
||||
updateContentFragment(true /* addToBackstack */);
|
||||
// Get rid of the previous instance of the AccountSetupCredentialsFragment.
|
||||
FragmentManager fm = getFragmentManager();
|
||||
fm.popBackStackImmediate(CREDENTIALS_BACKSTACK_TAG, 0);
|
||||
final AccountSetupCredentialsFragment f = (AccountSetupCredentialsFragment)
|
||||
getContentFragment();
|
||||
f.setPasswordFailed(mPasswordFailed);
|
||||
resetStateFromCurrentFragment();
|
||||
} else {
|
||||
mState = STATE_OPTIONS;
|
||||
updateHeadline();
|
||||
|
@ -896,6 +915,7 @@ public class AccountSetupFinal extends AccountSetupActivity
|
|||
|
||||
@Override
|
||||
public void onCheckSettingsError(int reason, String message) {
|
||||
mPasswordFailed = true;
|
||||
dismissCheckSettingsFragment();
|
||||
final DialogFragment f =
|
||||
CheckSettingsErrorDialogFragment.newInstance(reason, message);
|
||||
|
@ -916,7 +936,7 @@ public class AccountSetupFinal extends AccountSetupActivity
|
|||
|
||||
@Override
|
||||
public void onCheckSettingsErrorDialogEditSettings() {
|
||||
// If we're checking pre-configured, set a flag that we failed and navigate fowards to
|
||||
// If we're checking pre-configured, set a flag that we failed and navigate forwards to
|
||||
// incoming settings
|
||||
if (mState == STATE_CHECKING_PRECONFIGURED || mState == STATE_AUTO_DISCOVER) {
|
||||
mPreConfiguredFailed = true;
|
||||
|
@ -928,6 +948,8 @@ public class AccountSetupFinal extends AccountSetupActivity
|
|||
|
||||
@Override
|
||||
public void onCheckSettingsComplete() {
|
||||
mPreConfiguredFailed = false;
|
||||
mPasswordFailed = false;
|
||||
dismissCheckSettingsFragment();
|
||||
proceed();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue