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}