Skip to content
Snippets Groups Projects
PasswordActivity.java 4.1 KiB
Newer Older
package org.briarproject.android;

import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
Ernir Erlingsson's avatar
Ernir Erlingsson committed
import android.support.annotation.NonNull;
import android.support.design.widget.TextInputLayout;
import android.support.v7.app.AlertDialog;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;

akwizgran's avatar
akwizgran committed
import org.briarproject.R;
import org.briarproject.android.controller.PasswordController;
Ernir Erlingsson's avatar
Ernir Erlingsson committed
import org.briarproject.android.controller.handler.UiResultHandler;
import org.briarproject.android.util.AndroidUtils;
akwizgran's avatar
akwizgran committed

import javax.inject.Inject;

import static android.content.Intent.ACTION_MAIN;
import static android.content.Intent.CATEGORY_HOME;
import static android.view.View.INVISIBLE;
akwizgran's avatar
akwizgran committed
import static android.view.View.VISIBLE;

public class PasswordActivity extends BaseActivity {
akwizgran's avatar
akwizgran committed
	@Inject
	protected PasswordController passwordController;

	private Button signInButton;
	private ProgressBar progress;
	private TextInputLayout input;
	private EditText password;
	@Override
	public void onCreate(Bundle state) {
		super.onCreate(state);

akwizgran's avatar
akwizgran committed
		if (!passwordController.accountExists()) {
			deleteAccount();

		setContentView(R.layout.activity_password);
akwizgran's avatar
akwizgran committed
		signInButton = (Button) findViewById(R.id.btn_sign_in);
		progress = (ProgressBar) findViewById(R.id.progress_wheel);
		input = (TextInputLayout) findViewById(R.id.password_layout);
akwizgran's avatar
akwizgran committed
		password = (EditText) findViewById(R.id.edit_password);
		password.setOnEditorActionListener(new OnEditorActionListener() {
			public boolean onEditorAction(TextView v, int actionId,
					KeyEvent event) {
				validatePassword();
		password.addTextChangedListener(new TextWatcher() {
akwizgran's avatar
akwizgran committed

			@Override
			public void beforeTextChanged(CharSequence s, int start, int count,

			@Override
			public void onTextChanged(CharSequence s, int start, int before,
					int count) {
				if (count > 0) AndroidUtils.setError(input, null, false);
			}

			@Override
			public void afterTextChanged(Editable s) {
			}
	public void injectActivity(ActivityComponent component) {
		component.inject(this);
	}

	@Override
	public void onBackPressed() {
		// Show the home screen rather than another password prompt
		Intent intent = new Intent(ACTION_MAIN);
		intent.addCategory(CATEGORY_HOME);
		startActivity(intent);
	}

akwizgran's avatar
akwizgran committed
	private void deleteAccount() {
		passwordController.deleteAccount(this);
		setResult(RESULT_CANCELED);
		startActivity(new Intent(this, SetupActivity.class));
		finish();
		validatePassword();
	public void onForgottenPasswordClick(View v) {
		// TODO Encapsulate the dialog in a re-usable fragment
		AlertDialog.Builder builder = new AlertDialog.Builder(this,
				R.style.BriarDialogTheme);
		builder.setTitle(R.string.dialog_title_lost_password);
		builder.setMessage(R.string.dialog_message_lost_password);
		builder.setPositiveButton(R.string.cancel, null);
		builder.setNegativeButton(R.string.delete,
				new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {
akwizgran's avatar
akwizgran committed
						deleteAccount();
		AlertDialog dialog = builder.create();
		dialog.show();
	private void validatePassword() {
		hideSoftKeyboard(password);
		signInButton.setVisibility(INVISIBLE);
		progress.setVisibility(VISIBLE);
Ernir Erlingsson's avatar
Ernir Erlingsson committed
		passwordController.validatePassword(password.getText().toString(),
				new UiResultHandler<Boolean>(this) {
Ernir Erlingsson's avatar
Ernir Erlingsson committed
					public void onResultUi(@NonNull Boolean result) {
						if (result) {

	private void tryAgain() {
akwizgran's avatar
akwizgran committed
		AndroidUtils.setError(input, getString(R.string.try_again), true);
		signInButton.setVisibility(VISIBLE);
		progress.setVisibility(INVISIBLE);
		password.setText("");

		// show the keyboard again
		showSoftKeyboard(password);
	}