MagicCreateActivity.java

  1package eu.siacs.conversations.ui;
  2
  3import android.content.Intent;
  4import android.content.pm.ActivityInfo;
  5import android.os.Bundle;
  6import android.text.Editable;
  7import android.text.TextWatcher;
  8import android.view.View;
  9import android.widget.Button;
 10import android.widget.EditText;
 11import android.widget.TextView;
 12import android.widget.Toast;
 13
 14import java.security.SecureRandom;
 15
 16import eu.siacs.conversations.Config;
 17import eu.siacs.conversations.R;
 18import eu.siacs.conversations.entities.Account;
 19import eu.siacs.conversations.utils.CryptoHelper;
 20import rocks.xmpp.addr.Jid;
 21
 22public class MagicCreateActivity extends XmppActivity implements TextWatcher {
 23
 24	private TextView mFullJidDisplay;
 25	private EditText mUsername;
 26
 27	@Override
 28	protected void refreshUiReal() {
 29
 30	}
 31
 32	@Override
 33	void onBackendConnected() {
 34
 35	}
 36
 37	@Override
 38	public void onStart() {
 39		super.onStart();
 40		final int theme = findTheme();
 41		if (this.mTheme != theme) {
 42			recreate();
 43		}
 44	}
 45
 46	@Override
 47	protected void onCreate(final Bundle savedInstanceState) {
 48		if (getResources().getBoolean(R.bool.portrait_only)) {
 49			setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
 50		}
 51		super.onCreate(savedInstanceState);
 52		setContentView(R.layout.magic_create);
 53		setSupportActionBar(findViewById(R.id.toolbar));
 54		configureActionBar(getSupportActionBar());
 55		mFullJidDisplay = findViewById(R.id.full_jid);
 56		mUsername = findViewById(R.id.username);
 57		Button next = findViewById(R.id.create_account);
 58		next.setOnClickListener(v -> {
 59			try {
 60				String username = mUsername.getText().toString();
 61				Jid jid = Jid.of(username.toLowerCase(), Config.MAGIC_CREATE_DOMAIN, null);
 62				if (!jid.getEscapedLocal().equals(jid.getLocal())|| username.length() < 3) {
 63					mUsername.setError(getString(R.string.invalid_username));
 64					mUsername.requestFocus();
 65				} else {
 66					mUsername.setError(null);
 67					Account account = xmppConnectionService.findAccountByJid(jid);
 68					if (account == null) {
 69						account = new Account(jid, CryptoHelper.createPassword(new SecureRandom()));
 70						account.setOption(Account.OPTION_REGISTER, true);
 71						account.setOption(Account.OPTION_DISABLED, true);
 72						account.setOption(Account.OPTION_MAGIC_CREATE, true);
 73						xmppConnectionService.createAccount(account);
 74					}
 75					Intent intent = new Intent(MagicCreateActivity.this, EditAccountActivity.class);
 76					intent.putExtra("jid", account.getJid().asBareJid().toString());
 77					intent.putExtra("init", true);
 78					intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
 79					Toast.makeText(MagicCreateActivity.this, R.string.secure_password_generated, Toast.LENGTH_SHORT).show();
 80					WelcomeActivity.addInviteUri(intent, getIntent());
 81					startActivity(intent);
 82				}
 83			} catch (IllegalArgumentException e) {
 84				mUsername.setError(getString(R.string.invalid_username));
 85				mUsername.requestFocus();
 86			}
 87		});
 88		mUsername.addTextChangedListener(this);
 89	}
 90
 91	@Override
 92	public void beforeTextChanged(CharSequence s, int start, int count, int after) {
 93
 94	}
 95
 96	@Override
 97	public void onTextChanged(CharSequence s, int start, int before, int count) {
 98
 99	}
100
101	@Override
102	public void afterTextChanged(Editable s) {
103		if (s.toString().trim().length() > 0) {
104			try {
105				mFullJidDisplay.setVisibility(View.VISIBLE);
106				Jid jid = Jid.of(s.toString().toLowerCase(), Config.MAGIC_CREATE_DOMAIN, null);
107				mFullJidDisplay.setText(getString(R.string.your_full_jid_will_be, jid.toEscapedString()));
108			} catch (IllegalArgumentException e) {
109				mFullJidDisplay.setVisibility(View.INVISIBLE);
110			}
111
112		} else {
113			mFullJidDisplay.setVisibility(View.INVISIBLE);
114		}
115	}
116}