aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/main/AndroidManifest.xml3
-rw-r--r--src/main/java/eu/siacs/conversations/ui/ChangePasswordActivity.java107
-rw-r--r--src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java99
-rw-r--r--src/main/res/layout/activity_edit_account.xml9
-rw-r--r--src/main/res/menu/editaccount.xml4
-rw-r--r--src/main/res/values/strings.xml4
6 files changed, 138 insertions, 88 deletions
diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml
index 5662e626..f3d58d57 100644
--- a/src/main/AndroidManifest.xml
+++ b/src/main/AndroidManifest.xml
@@ -79,6 +79,9 @@
<activity
android:name=".ui.BlocklistActivity"
android:label="@string/title_activity_block_list" />
+ <activity
+ android:name=".ui.ChangePasswordActivity"
+ android:label="@string/change_password_on_server" />
<activity
android:name=".ui.ManageAccountActivity"
android:configChanges="orientation|screenSize"
diff --git a/src/main/java/eu/siacs/conversations/ui/ChangePasswordActivity.java b/src/main/java/eu/siacs/conversations/ui/ChangePasswordActivity.java
new file mode 100644
index 00000000..54c064c6
--- /dev/null
+++ b/src/main/java/eu/siacs/conversations/ui/ChangePasswordActivity.java
@@ -0,0 +1,107 @@
+package eu.siacs.conversations.ui;
+
+import android.os.Bundle;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import eu.siacs.conversations.R;
+import eu.siacs.conversations.entities.Account;
+import eu.siacs.conversations.services.XmppConnectionService;
+import eu.siacs.conversations.xmpp.jid.InvalidJidException;
+import eu.siacs.conversations.xmpp.jid.Jid;
+
+public class ChangePasswordActivity extends XmppActivity implements XmppConnectionService.OnAccountPasswordChanged {
+
+ private Button mChangePasswordButton;
+ private View.OnClickListener mOnChangePasswordButtonClicked = new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ if (mAccount != null) {
+ final String currentPassword = mCurrentPassword.getText().toString();
+ final String newPassword = mNewPassword.getText().toString();
+ final String newPasswordConfirm = mNewPasswordConfirm.getText().toString();
+ if (!currentPassword.equals(mAccount.getPassword())) {
+ mCurrentPassword.requestFocus();
+ mCurrentPassword.setError(getString(R.string.account_status_unauthorized));
+ } else if (!newPassword.equals(newPasswordConfirm)) {
+ mNewPasswordConfirm.requestFocus();
+ mNewPasswordConfirm.setError(getString(R.string.passwords_do_not_match));
+ } else if (newPassword.trim().isEmpty()) {
+ mNewPassword.requestFocus();
+ mNewPassword.setError(getString(R.string.password_should_not_be_empty));
+ } else {
+ mCurrentPassword.setError(null);
+ mNewPassword.setError(null);
+ mNewPasswordConfirm.setError(null);
+ xmppConnectionService.updateAccountPasswordOnServer(mAccount, newPassword, ChangePasswordActivity.this);
+ mChangePasswordButton.setEnabled(false);
+ mChangePasswordButton.setTextColor(getSecondaryTextColor());
+ mChangePasswordButton.setText(R.string.updating);
+ }
+ }
+ }
+ };
+ private EditText mCurrentPassword;
+ private EditText mNewPassword;
+ private EditText mNewPasswordConfirm;
+ private Account mAccount;
+
+ @Override
+ void onBackendConnected() {
+ try {
+ final String jid = getIntent() == null ? null : getIntent().getStringExtra("account");
+ if (jid != null) {
+ this.mAccount = xmppConnectionService.findAccountByJid(Jid.fromString(jid));
+ }
+ } catch (final InvalidJidException ignored) {
+
+ }
+
+ }
+
+ @Override
+ protected void onCreate(final Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_change_password);
+ Button mCancelButton = (Button) findViewById(R.id.left_button);
+ mCancelButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ finish();
+ }
+ });
+ this.mChangePasswordButton = (Button) findViewById(R.id.right_button);
+ this.mChangePasswordButton.setOnClickListener(this.mOnChangePasswordButtonClicked);
+ this.mCurrentPassword = (EditText) findViewById(R.id.current_password);
+ this.mNewPassword = (EditText) findViewById(R.id.new_password);
+ this.mNewPasswordConfirm = (EditText) findViewById(R.id.new_password_confirm);
+ }
+
+ @Override
+ public void onPasswordChangeSucceeded() {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ Toast.makeText(ChangePasswordActivity.this,R.string.password_changed,Toast.LENGTH_LONG).show();
+ finish();
+ }
+ });
+ }
+
+ @Override
+ public void onPasswordChangeFailed() {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mNewPassword.setError(getString(R.string.could_not_change_password));
+ mChangePasswordButton.setEnabled(true);
+ mChangePasswordButton.setTextColor(getPrimaryTextColor());
+ mChangePasswordButton.setText(R.string.change_password);
+ }
+ });
+
+ }
+}
diff --git a/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java b/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java
index f8221f1b..ea45b75e 100644
--- a/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java
+++ b/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java
@@ -25,7 +25,6 @@ import android.widget.Toast;
import eu.siacs.conversations.R;
import eu.siacs.conversations.entities.Account;
-import eu.siacs.conversations.services.XmppConnectionService;
import eu.siacs.conversations.services.XmppConnectionService.OnAccountUpdate;
import eu.siacs.conversations.ui.adapter.KnownHostsAdapter;
import eu.siacs.conversations.utils.CryptoHelper;
@@ -35,13 +34,12 @@ import eu.siacs.conversations.xmpp.jid.InvalidJidException;
import eu.siacs.conversations.xmpp.jid.Jid;
import eu.siacs.conversations.xmpp.pep.Avatar;
-public class EditAccountActivity extends XmppActivity implements OnAccountUpdate, XmppConnectionService.OnAccountPasswordChanged {
+public class EditAccountActivity extends XmppActivity implements OnAccountUpdate{
private AutoCompleteTextView mAccountJid;
private EditText mPassword;
private EditText mPasswordConfirm;
private CheckBox mRegisterNew;
- private CheckBox mChangePassword;
private Button mCancelButton;
private Button mSaveButton;
private TableLayout mMoreTable;
@@ -64,7 +62,6 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate
private Account mAccount;
private boolean mFetchingAvatar = false;
- private boolean mChangingPassword = false;
private final OnClickListener mSaveButtonClickListener = new OnClickListener() {
@@ -76,7 +73,6 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate
return;
}
final boolean registerNewAccount = mRegisterNew.isChecked();
- final boolean changePassword = mChangePassword.isChecked();
final Jid jid;
try {
jid = Jid.fromString(mAccountJid.getText().toString());
@@ -92,7 +88,7 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate
}
final String password = mPassword.getText().toString();
final String passwordConfirm = mPasswordConfirm.getText().toString();
- if (registerNewAccount || changePassword) {
+ if (registerNewAccount) {
if (!password.equals(passwordConfirm)) {
mPasswordConfirm.setError(getString(R.string.passwords_do_not_match));
mPasswordConfirm.requestFocus();
@@ -104,21 +100,11 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate
mAccount.setUsername(jid.hasLocalpart() ? jid.getLocalpart() : "");
mAccount.setServer(jid.getDomainpart());
} catch (final InvalidJidException ignored) {
- }
- if (changePassword) {
- if (mAccount.isOnlineAndConnected()) {
- xmppConnectionService.updateAccountPasswordOnServer(mAccount, mPassword.getText().toString(),EditAccountActivity.this);
- mChangingPassword = true;
- updateSaveButton();
- } else {
- Toast.makeText(EditAccountActivity.this,R.string.not_connected_try_again,Toast.LENGTH_SHORT).show();
- }
return;
- } else {
- mAccount.setPassword(password);
- mAccount.setOption(Account.OPTION_REGISTER, registerNewAccount);
- xmppConnectionService.updateAccount(mAccount);
}
+ mAccount.setPassword(password);
+ mAccount.setOption(Account.OPTION_REGISTER, registerNewAccount);
+ xmppConnectionService.updateAccount(mAccount);
} else {
try {
if (xmppConnectionService.findAccountByJid(Jid.fromString(mAccountJid.getText().toString())) != null) {
@@ -157,6 +143,7 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate
@Override
public void run() {
+ invalidateOptionsMenu();
if (mAccount != null
&& mAccount.getStatus() != Account.State.ONLINE
&& mFetchingAvatar) {
@@ -209,26 +196,10 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate
@Override
public void afterTextChanged(final Editable s) {
- toggleChangePasswordCheckbox();
- }
- };
- private void toggleChangePasswordCheckbox() {
- final boolean registrationReady = mAccount != null &&
- mAccount.isOnlineAndConnected() &&
- mAccount.getXmppConnection().getFeatures().register();
- if (passwordFieldEdited() && registrationReady) {
- mChangePassword.setVisibility(View.VISIBLE);
- } else {
- mChangePassword.setVisibility(View.INVISIBLE);
- mChangePassword.setChecked(false);
}
- }
+ };
- private boolean passwordFieldEdited() {
- final String password = this.mPassword.getText().toString();
- return jidToEdit != null && mAccount != null && !password.isEmpty() && !mAccount.getPassword().equals(password);
- }
private final OnClickListener mAvatarClickListener = new OnClickListener() {
@Override
public void onClick(final View view) {
@@ -263,11 +234,7 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate
}
protected void updateSaveButton() {
- if (mChangingPassword) {
- this.mSaveButton.setEnabled(false);
- this.mSaveButton.setTextColor(getSecondaryTextColor());
- this.mSaveButton.setText(R.string.updating);
- } else if (mAccount != null && mAccount.getStatus() == Account.State.CONNECTING) {
+ if (mAccount != null && mAccount.getStatus() == Account.State.CONNECTING) {
this.mSaveButton.setEnabled(false);
this.mSaveButton.setTextColor(getSecondaryTextColor());
this.mSaveButton.setText(R.string.account_status_connecting);
@@ -322,7 +289,6 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate
this.mAvatar = (ImageView) findViewById(R.id.avater);
this.mAvatar.setOnClickListener(this.mAvatarClickListener);
this.mRegisterNew = (CheckBox) findViewById(R.id.account_register_new);
- this.mChangePassword = (CheckBox) findViewById(R.id.account_change_password);
this.mStats = (LinearLayout) findViewById(R.id.stats);
this.mSessionEst = (TextView) findViewById(R.id.session_est);
this.mServerInfoRosterVersion = (TextView) findViewById(R.id.server_info_roster_version);
@@ -353,7 +319,6 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate
}
};
this.mRegisterNew.setOnCheckedChangeListener(OnCheckedShowConfirmPassword);
- this.mChangePassword.setOnCheckedChangeListener(OnCheckedShowConfirmPassword);
}
@Override
@@ -363,13 +328,16 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate
final MenuItem showQrCode = menu.findItem(R.id.action_show_qr_code);
final MenuItem showBlocklist = menu.findItem(R.id.action_show_block_list);
final MenuItem showMoreInfo = menu.findItem(R.id.action_server_info_show_more);
+ final MenuItem changePassword = menu.findItem(R.id.action_change_password_on_server);
if (mAccount == null) {
showQrCode.setVisible(false);
showBlocklist.setVisible(false);
showMoreInfo.setVisible(false);
+ changePassword.setVisible(false);
} else if (mAccount.getStatus() != Account.State.ONLINE) {
showBlocklist.setVisible(false);
showMoreInfo.setVisible(false);
+ changePassword.setVisible(false);
} else if (!mAccount.getXmppConnection().getFeatures().blocking()) {
showBlocklist.setVisible(false);
}
@@ -396,8 +364,6 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate
getActionBar().setTitle(R.string.action_add_account);
}
}
- this.mChangePassword.setVisibility(View.GONE);
- this.mChangePassword.setChecked(false);
}
}
@@ -425,13 +391,19 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate
public boolean onOptionsItemSelected(final MenuItem item) {
switch (item.getItemId()) {
case R.id.action_show_block_list:
- final Intent intent = new Intent(this, BlocklistActivity.class);
- intent.putExtra("account", mAccount.getJid().toString());
- startActivity(intent);
+ final Intent showBlocklistIntent = new Intent(this, BlocklistActivity.class);
+ showBlocklistIntent.putExtra("account", mAccount.getJid().toString());
+ startActivity(showBlocklistIntent);
break;
case R.id.action_server_info_show_more:
mMoreTable.setVisibility(item.isChecked() ? View.GONE : View.VISIBLE);
item.setChecked(!item.isChecked());
+ break;
+ case R.id.action_change_password_on_server:
+ final Intent changePasswordIntent = new Intent(this, ChangePasswordActivity.class);
+ changePasswordIntent.putExtra("account", mAccount.getJid().toString());
+ startActivity(changePasswordIntent);
+ break;
}
return super.onOptionsItemSelected(item);
}
@@ -445,18 +417,13 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate
}
if (this.mAccount.isOptionSet(Account.OPTION_REGISTER)) {
this.mRegisterNew.setVisibility(View.VISIBLE);
- this.mChangePassword.setVisibility(View.GONE);
- this.mChangePassword.setChecked(false);
this.mRegisterNew.setChecked(true);
this.mPasswordConfirm.setText(this.mAccount.getPassword());
} else {
this.mRegisterNew.setVisibility(View.GONE);
this.mRegisterNew.setChecked(false);
- this.mChangePassword.setVisibility(View.GONE);
- this.mChangePassword.setChecked(false);
}
if (this.mAccount.isOnlineAndConnected() && !this.mFetchingAvatar) {
- toggleChangePasswordCheckbox();
this.mStats.setVisibility(View.VISIBLE);
this.mSessionEst.setText(UIHelper.readableTimeDifferenceFull(this, this.mAccount.getXmppConnection()
.getLastSessionEstablished()));
@@ -528,30 +495,4 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate
this.mStats.setVisibility(View.GONE);
}
}
-
- @Override
- public void onPasswordChangeSucceeded() {
- this.mChangingPassword = false;
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- Toast.makeText(EditAccountActivity.this,R.string.password_changed,Toast.LENGTH_SHORT).show();
- updateSaveButton();
- updateAccountInformation();
- }
- });
- }
-
- @Override
- public void onPasswordChangeFailed() {
- this.mChangingPassword = false;
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- mPassword.requestFocus();
- mPassword.setError(getString(R.string.could_not_change_password));
- updateSaveButton();
- }
- });
- }
}
diff --git a/src/main/res/layout/activity_edit_account.xml b/src/main/res/layout/activity_edit_account.xml
index d2987253..36987072 100644
--- a/src/main/res/layout/activity_edit_account.xml
+++ b/src/main/res/layout/activity_edit_account.xml
@@ -79,15 +79,6 @@
android:textColor="@color/primarytext"
android:textSize="?attr/TextSizeBody" />
- <CheckBox
- android:id="@+id/account_change_password"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="8dp"
- android:text="@string/change_password_on_server"
- android:textColor="@color/primarytext"
- android:textSize="?attr/TextSizeBody" />
-
<TextView
android:id="@+id/account_confirm_password_desc"
android:layout_width="wrap_content"
diff --git a/src/main/res/menu/editaccount.xml b/src/main/res/menu/editaccount.xml
index fc362836..4ce9e1f3 100644
--- a/src/main/res/menu/editaccount.xml
+++ b/src/main/res/menu/editaccount.xml
@@ -16,4 +16,8 @@
android:checkable="true"
android:checked="false"
android:showAsAction="never" />
+
+ <item android:id="@+id/action_change_password_on_server"
+ android:title="@string/change_password"
+ android:showAsAction="never" />
</menu> \ No newline at end of file
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index 1d1f609d..ebb95278 100644
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -399,4 +399,8 @@
<string name="shared_secret_hint_should_not_be_empty">Your hint should not be empty</string>
<string name="shared_secret_can_not_be_empty">Your shared secret can not be empty</string>
<string name="manual_verification_explanation">Carefully compare the fingerprint shown below with the fingerprint of your contact.\nYou can use any trusted form of communication like an encrypted e-mail or a telephone call to exchange those.</string>
+ <string name="change_password">Change password</string>
+ <string name="current_password">Current password</string>
+ <string name="new_password">New password</string>
+ <string name="password_should_not_be_empty">Password should not be empty</string>
</resources>