aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/de/pixart/messenger/ui/EditAccountActivity.java
diff options
context:
space:
mode:
authorChristian Schneppe <christian@pix-art.de>2018-04-01 22:14:30 +0200
committerChristian Schneppe <christian@pix-art.de>2018-04-01 22:14:30 +0200
commit0c9ba838e10d75713c2b51c22fb53a8ceb2f408c (patch)
tree7c07321883a10780f031b12c90bf65ecc557f678 /src/main/java/de/pixart/messenger/ui/EditAccountActivity.java
parent6dae9982e26a8ddcb0856f641acb247607c70143 (diff)
finished 'Set Status Message' dialog
Diffstat (limited to 'src/main/java/de/pixart/messenger/ui/EditAccountActivity.java')
-rw-r--r--src/main/java/de/pixart/messenger/ui/EditAccountActivity.java88
1 files changed, 85 insertions, 3 deletions
diff --git a/src/main/java/de/pixart/messenger/ui/EditAccountActivity.java b/src/main/java/de/pixart/messenger/ui/EditAccountActivity.java
index a24dd3691..eddbc44b6 100644
--- a/src/main/java/de/pixart/messenger/ui/EditAccountActivity.java
+++ b/src/main/java/de/pixart/messenger/ui/EditAccountActivity.java
@@ -1,9 +1,11 @@
package de.pixart.messenger.ui;
+import android.app.Activity;
import android.app.AlertDialog.Builder;
import android.app.PendingIntent;
import android.content.ActivityNotFoundException;
import android.content.Intent;
+import android.content.IntentSender;
import android.content.SharedPreferences;
import android.databinding.DataBindingUtil;
import android.graphics.Bitmap;
@@ -54,6 +56,7 @@ import de.pixart.messenger.crypto.axolotl.XmppAxolotlSession;
import de.pixart.messenger.databinding.ActivityEditAccountBinding;
import de.pixart.messenger.databinding.DialogPresenceBinding;
import de.pixart.messenger.entities.Account;
+import de.pixart.messenger.entities.Presence;
import de.pixart.messenger.entities.PresenceTemplate;
import de.pixart.messenger.services.BarcodeProvider;
import de.pixart.messenger.services.XmppConnectionService;
@@ -61,6 +64,7 @@ import de.pixart.messenger.services.XmppConnectionService.OnAccountUpdate;
import de.pixart.messenger.services.XmppConnectionService.OnCaptchaRequested;
import de.pixart.messenger.ui.adapter.KnownHostsAdapter;
import de.pixart.messenger.ui.adapter.PresenceTemplateAdapter;
+import de.pixart.messenger.ui.util.PendingItem;
import de.pixart.messenger.utils.CryptoHelper;
import de.pixart.messenger.utils.UIHelper;
import de.pixart.messenger.utils.XmppUri;
@@ -77,6 +81,7 @@ public class EditAccountActivity extends OmemoActivity implements OnAccountUpdat
OnKeyStatusUpdated, OnCaptchaRequested, KeyChainAliasCallback, XmppConnectionService.OnShowErrorToast, XmppConnectionService.OnMamPreferencesFetched {
private static final int REQUEST_DATA_SAVER = 0xf244;
+ private static final int REQUEST_CHANGE_STATUS = 0xee11;
private TextInputLayout mAccountJidLayout;
private EditText mPassword;
private TextInputLayout mPasswordLayout;
@@ -125,6 +130,8 @@ public class EditAccountActivity extends OmemoActivity implements OnAccountUpdat
private Account mAccount;
private String messageFingerprint;
+ private final PendingItem<PresenceTemplate> mPendingPresenceTemplate = new PendingItem<>();
+
private boolean mFetchingAvatar = false;
private final OnClickListener mSaveButtonClickListener = new OnClickListener() {
@@ -436,6 +443,14 @@ public class EditAccountActivity extends OmemoActivity implements OnAccountUpdat
if (requestCode == REQUEST_BATTERY_OP || requestCode == REQUEST_DATA_SAVER) {
updateAccountInformation(mAccount == null);
}
+ if (requestCode == REQUEST_CHANGE_STATUS) {
+ PresenceTemplate template = mPendingPresenceTemplate.pop();
+ if (template != null && resultCode == Activity.RESULT_OK) {
+ generateSignature(data, template);
+ } else {
+ Log.d(Config.LOGTAG, "pgp result not ok");
+ }
+ }
}
@Override
@@ -887,21 +902,88 @@ public class EditAccountActivity extends OmemoActivity implements OnAccountUpdat
boolean manualStatus = sharedPreferences.getBoolean(SettingsActivity.MANUALLY_CHANGE_PRESENCE, getResources().getBoolean(R.bool.manually_change_presence));
AlertDialog.Builder builder = new AlertDialog.Builder(this);
final DialogPresenceBinding binding = DataBindingUtil.inflate(getLayoutInflater(), R.layout.dialog_presence, null, false);
+ String current = mAccount.getPresenceStatusMessage();
+ if (current != null && !current.trim().isEmpty()) {
+ binding.statusMessage.append(current);
+ }
+ setAvailabilityRadioButton(mAccount.getPresenceStatus(), binding);
binding.show.setVisibility(manualStatus ? View.VISIBLE : View.GONE);
List<PresenceTemplate> templates = xmppConnectionService.getPresenceTemplates(mAccount);
PresenceTemplateAdapter presenceTemplateAdapter = new PresenceTemplateAdapter(this, R.layout.simple_list_item, templates);
binding.statusMessage.setAdapter(presenceTemplateAdapter);
binding.statusMessage.setOnItemClickListener((parent, view, position, id) -> {
PresenceTemplate template = (PresenceTemplate) parent.getItemAtPosition(position);
- Log.d(Config.LOGTAG, "selected: " + template.getStatusMessage());
+ setAvailabilityRadioButton(template.getStatus(), binding);
});
- builder.setTitle(R.string.change_presence);
+ builder.setTitle(R.string.edit_status_message_title);
builder.setView(binding.getRoot());
builder.setNegativeButton(R.string.cancel, null);
- builder.setPositiveButton(R.string.confirm, null);
+ builder.setPositiveButton(R.string.confirm, (dialog, which) -> {
+ PresenceTemplate template = new PresenceTemplate(getAvailabilityRadioButton(binding), binding.statusMessage.getText().toString().trim());
+ if (mAccount.getPgpId() != 0 && hasPgp()) {
+ generateSignature(null, template);
+ } else {
+ xmppConnectionService.changeStatus(mAccount, template, null);
+ }
+ });
builder.create().show();
}
+ private void generateSignature(Intent intent, PresenceTemplate template) {
+ xmppConnectionService.getPgpEngine().generateSignature(intent, mAccount, template.getStatusMessage(), new UiCallback<String>() {
+ @Override
+ public void success(String signature) {
+ xmppConnectionService.changeStatus(mAccount, template, signature);
+ }
+
+ @Override
+ public void error(int errorCode, String object) {
+
+ }
+
+ @Override
+ public void userInputRequried(PendingIntent pi, String object) {
+ mPendingPresenceTemplate.push(template);
+ try {
+ startIntentSenderForResult(pi.getIntentSender(), REQUEST_CHANGE_STATUS, null, 0, 0, 0);
+ } catch (final IntentSender.SendIntentException ignored) {
+ }
+ }
+ });
+ }
+
+ private static void setAvailabilityRadioButton(Presence.Status status, DialogPresenceBinding binding) {
+ if (status == null) {
+ binding.online.setChecked(true);
+ return;
+ }
+ switch (status) {
+ case DND:
+ binding.dnd.setChecked(true);
+ break;
+ case XA:
+ binding.xa.setChecked(true);
+ break;
+ case AWAY:
+ binding.xa.setChecked(true);
+ break;
+ default:
+ binding.online.setChecked(true);
+ }
+ }
+
+ private static Presence.Status getAvailabilityRadioButton(DialogPresenceBinding binding) {
+ if (binding.dnd.isChecked()) {
+ return Presence.Status.DND;
+ } else if (binding.xa.isChecked()) {
+ return Presence.Status.XA;
+ } else if (binding.away.isChecked()) {
+ return Presence.Status.AWAY;
+ } else {
+ return Presence.Status.ONLINE;
+ }
+ }
+
@Override
public void alias(String alias) {
if (alias != null) {