mirror of
https://github.com/roytam1/palemoon27.git
synced 2026-06-06 08:29:08 +00:00
172 lines
5.5 KiB
Java
172 lines
5.5 KiB
Java
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
package org.mozilla.goanna.fxa.activities;
|
|
|
|
import org.mozilla.goanna.R;
|
|
import org.mozilla.goanna.background.common.log.Logger;
|
|
import org.mozilla.goanna.fxa.FirefoxAccounts;
|
|
import org.mozilla.goanna.fxa.authenticator.AndroidFxAccount;
|
|
import org.mozilla.goanna.fxa.login.Engaged;
|
|
import org.mozilla.goanna.fxa.login.State;
|
|
import org.mozilla.goanna.fxa.login.State.Action;
|
|
import org.mozilla.goanna.fxa.sync.FxAccountSyncStatusHelper;
|
|
import org.mozilla.goanna.fxa.tasks.FxAccountCodeResender;
|
|
import org.mozilla.goanna.sync.setup.activities.ActivityUtils;
|
|
|
|
import android.accounts.Account;
|
|
import android.app.Activity;
|
|
import android.content.Context;
|
|
import android.content.Intent;
|
|
import android.os.Bundle;
|
|
import android.view.View;
|
|
import android.view.View.OnClickListener;
|
|
import android.widget.TextView;
|
|
|
|
/**
|
|
* Activity which displays account created successfully screen to the user, and
|
|
* starts them on the email verification path.
|
|
*/
|
|
public class FxAccountConfirmAccountActivity extends FxAccountAbstractActivity implements OnClickListener {
|
|
private static final String LOG_TAG = FxAccountConfirmAccountActivity.class.getSimpleName();
|
|
|
|
// Set in onCreate.
|
|
protected TextView verificationLinkTextView;
|
|
protected View resendLink;
|
|
protected View changeEmail;
|
|
|
|
// Set in onResume.
|
|
protected AndroidFxAccount fxAccount;
|
|
|
|
protected final InnerSyncStatusDelegate syncStatusDelegate = new InnerSyncStatusDelegate();
|
|
|
|
public FxAccountConfirmAccountActivity() {
|
|
super(CANNOT_RESUME_WHEN_NO_ACCOUNTS_EXIST);
|
|
}
|
|
|
|
/**
|
|
* {@inheritDoc}
|
|
*/
|
|
@Override
|
|
public void onCreate(Bundle icicle) {
|
|
Logger.debug(LOG_TAG, "onCreate(" + icicle + ")");
|
|
|
|
super.onCreate(icicle);
|
|
setContentView(R.layout.fxaccount_confirm_account);
|
|
|
|
verificationLinkTextView = (TextView) ensureFindViewById(null, R.id.verification_link_text, "verification link text");
|
|
resendLink = ensureFindViewById(null, R.id.resend_confirmation_email_link, "resend confirmation email link");
|
|
resendLink.setOnClickListener(this);
|
|
changeEmail = ensureFindViewById(null, R.id.change_confirmation_email_link, "change confirmation email address");
|
|
changeEmail.setOnClickListener(this);
|
|
|
|
View backToBrowsingButton = ensureFindViewById(null, R.id.button, "back to browsing button");
|
|
backToBrowsingButton.setOnClickListener(new OnClickListener() {
|
|
@Override
|
|
public void onClick(View v) {
|
|
ActivityUtils.openURLInFennec(v.getContext(), null);
|
|
setResult(Activity.RESULT_OK);
|
|
finish();
|
|
}
|
|
});
|
|
}
|
|
|
|
@Override
|
|
public void onResume() {
|
|
super.onResume();
|
|
this.fxAccount = getAndroidFxAccount();
|
|
if (fxAccount == null) {
|
|
Logger.warn(LOG_TAG, "Could not get Firefox Account.");
|
|
setResult(RESULT_CANCELED);
|
|
finish();
|
|
return;
|
|
}
|
|
|
|
FxAccountSyncStatusHelper.getInstance().startObserving(syncStatusDelegate);
|
|
|
|
refresh();
|
|
|
|
fxAccount.requestSync(FirefoxAccounts.NOW);
|
|
}
|
|
|
|
@Override
|
|
public void onPause() {
|
|
super.onPause();
|
|
FxAccountSyncStatusHelper.getInstance().stopObserving(syncStatusDelegate);
|
|
|
|
if (fxAccount != null) {
|
|
fxAccount.requestSync(FirefoxAccounts.SOON);
|
|
}
|
|
}
|
|
|
|
protected class InnerSyncStatusDelegate implements FirefoxAccounts.SyncStatusListener {
|
|
protected final Runnable refreshRunnable = new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
refresh();
|
|
}
|
|
};
|
|
|
|
@Override
|
|
public Context getContext() {
|
|
return FxAccountConfirmAccountActivity.this;
|
|
}
|
|
|
|
@Override
|
|
public Account getAccount() {
|
|
return fxAccount.getAndroidAccount();
|
|
}
|
|
|
|
@Override
|
|
public void onSyncStarted() {
|
|
Logger.info(LOG_TAG, "Got sync started message; ignoring.");
|
|
}
|
|
|
|
@Override
|
|
public void onSyncFinished() {
|
|
if (fxAccount == null) {
|
|
return;
|
|
}
|
|
Logger.info(LOG_TAG, "Got sync finished message; refreshing.");
|
|
runOnUiThread(refreshRunnable);
|
|
}
|
|
}
|
|
|
|
protected void refresh() {
|
|
final State state = fxAccount.getState();
|
|
final Action neededAction = state.getNeededAction();
|
|
switch (neededAction) {
|
|
case NeedsVerification:
|
|
// This is what we're here to handle.
|
|
break;
|
|
default:
|
|
// We're not in the right place! Redirect to status.
|
|
Logger.warn(LOG_TAG, "No need to verify Firefox Account that needs action " + neededAction.toString() +
|
|
" (in state " + state.getStateLabel() + ").");
|
|
setResult(RESULT_CANCELED);
|
|
this.redirectToActivity(FxAccountStatusActivity.class);
|
|
return;
|
|
}
|
|
|
|
final String email = fxAccount.getEmail();
|
|
final String text = getResources().getString(R.string.fxaccount_confirm_account_verification_link, email);
|
|
verificationLinkTextView.setText(text);
|
|
|
|
boolean resendLinkShouldBeEnabled = ((Engaged) state).getSessionToken() != null;
|
|
resendLink.setEnabled(resendLinkShouldBeEnabled);
|
|
resendLink.setClickable(resendLinkShouldBeEnabled);
|
|
}
|
|
|
|
@Override
|
|
public void onClick(View v) {
|
|
if (v.equals(resendLink)) {
|
|
FxAccountCodeResender.resendCode(this, fxAccount);
|
|
} else if (v.equals(changeEmail)) {
|
|
final Account account = fxAccount.getAndroidAccount();
|
|
Intent intent = new Intent(this, FxAccountGetStartedActivity.class);
|
|
FxAccountStatusActivity.maybeDeleteAndroidAccount(this, account, intent);
|
|
}
|
|
}
|
|
}
|