diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index 30af69c72..bc7a4617f 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -1615,6 +1615,17 @@ public class XmppConnectionService extends Service { } } + public boolean isConversationStillOpen(final Conversation conversation) { + synchronized (this.conversations) { + for(Conversation current : this.conversations) { + if (current == conversation) { + return true; + } + } + } + return false; + } + public Conversation findOrCreateConversation(Account account, Jid jid, boolean muc, final boolean async) { return this.findOrCreateConversation(account, jid, muc, false, async); } diff --git a/src/main/java/eu/siacs/conversations/ui/BlockContactDialog.java b/src/main/java/eu/siacs/conversations/ui/BlockContactDialog.java index a5727068b..9c462cba3 100644 --- a/src/main/java/eu/siacs/conversations/ui/BlockContactDialog.java +++ b/src/main/java/eu/siacs/conversations/ui/BlockContactDialog.java @@ -1,19 +1,15 @@ package eu.siacs.conversations.ui; +import android.databinding.DataBindingUtil; import android.support.v7.app.AlertDialog; -import android.content.Context; -import android.content.DialogInterface; import android.text.SpannableString; import android.text.Spanned; import android.text.style.TypefaceSpan; -import android.view.LayoutInflater; import android.view.View; -import android.widget.CheckBox; -import android.widget.LinearLayout; -import android.widget.TextView; import android.widget.Toast; import eu.siacs.conversations.R; +import eu.siacs.conversations.databinding.DialogBlockContactBinding; import eu.siacs.conversations.entities.Blockable; import eu.siacs.conversations.entities.Conversation; import rocks.xmpp.addr.Jid; @@ -23,13 +19,10 @@ public final class BlockContactDialog { final AlertDialog.Builder builder = new AlertDialog.Builder(xmppActivity); final boolean isBlocked = blockable.isBlocked(); builder.setNegativeButton(R.string.cancel, null); - LayoutInflater inflater = (LayoutInflater) xmppActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - LinearLayout view = (LinearLayout) inflater.inflate(R.layout.dialog_block_contact,null); - TextView message = (TextView) view.findViewById(R.id.text); - final CheckBox report = (CheckBox) view.findViewById(R.id.report_spam); + DialogBlockContactBinding binding = DataBindingUtil.inflate(xmppActivity.getLayoutInflater(), R.layout.dialog_block_contact, null, false); final boolean reporting = blockable.getAccount().getXmppConnection().getFeatures().spamReporting(); - report.setVisibility(!isBlocked && reporting ? View.VISIBLE : View.GONE); - builder.setView(view); + binding.reportSpam.setVisibility(!isBlocked && reporting ? View.VISIBLE : View.GONE); + builder.setView(binding.getRoot()); String value; SpannableString spannable; @@ -45,27 +38,23 @@ public final class BlockContactDialog { } int start = spannable.toString().indexOf(value); if (start >= 0) { - spannable.setSpan(new TypefaceSpan("monospace"),start,start + value.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + spannable.setSpan(new TypefaceSpan("monospace"), start, start + value.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } - message.setText(spannable); - builder.setPositiveButton(isBlocked ? R.string.unblock : R.string.block, new DialogInterface.OnClickListener() { - - @Override - public void onClick(final DialogInterface dialog, final int which) { - if (isBlocked) { - xmppActivity.xmppConnectionService.sendUnblockRequest(blockable); - } else { - boolean toastShown = false; - if (xmppActivity.xmppConnectionService.sendBlockRequest(blockable, report.isChecked())) { - Toast.makeText(xmppActivity,R.string.corresponding_conversations_closed,Toast.LENGTH_SHORT).show(); - toastShown = true; - } - if (xmppActivity instanceof ContactDetailsActivity) { - if (!toastShown) { - Toast.makeText(xmppActivity,R.string.contact_blocked_past_tense,Toast.LENGTH_SHORT).show(); - } - xmppActivity.finish(); + binding.text.setText(spannable); + builder.setPositiveButton(isBlocked ? R.string.unblock : R.string.block, (dialog, which) -> { + if (isBlocked) { + xmppActivity.xmppConnectionService.sendUnblockRequest(blockable); + } else { + boolean toastShown = false; + if (xmppActivity.xmppConnectionService.sendBlockRequest(blockable, binding.reportSpam.isChecked())) { + Toast.makeText(xmppActivity, R.string.corresponding_conversations_closed, Toast.LENGTH_SHORT).show(); + toastShown = true; + } + if (xmppActivity instanceof ContactDetailsActivity) { + if (!toastShown) { + Toast.makeText(xmppActivity, R.string.contact_blocked_past_tense, Toast.LENGTH_SHORT).show(); } + xmppActivity.finish(); } } }); diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java index d67730a14..ea6184b6d 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java @@ -1435,9 +1435,7 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke switch (attachmentChoice) { case ATTACHMENT_CHOICE_CHOOSE_IMAGE: intent.setAction(Intent.ACTION_GET_CONTENT); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { - intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); - } + intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); intent.setType("image/*"); chooser = true; break; @@ -1800,9 +1798,15 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke if (this.activity == null || this.binding == null) { return false; } + + if (!activity.xmppConnectionService.isConversationStillOpen(this.conversation)) { + activity.onConversationArchived(this.conversation); + return false; + } + stopScrolling(); Log.d(Config.LOGTAG, "reInit(hasExtras=" + Boolean.toString(hasExtras) + ")"); - + if (this.conversation.isRead() && hasExtras) { Log.d(Config.LOGTAG, "trimming conversation"); this.conversation.trim(); @@ -1992,6 +1996,12 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke Log.d(Config.LOGTAG, "ConversationFragment.refresh() skipped updated because view binding was null"); return; } + if (this.conversation != null && this.activity != null && this.activity.xmppConnectionService != null) { + if (!activity.xmppConnectionService.isConversationStillOpen(this.conversation)) { + activity.onConversationArchived(this.conversation); + return; + } + } this.refresh(true); } @@ -2033,10 +2043,6 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke } } - public void setFocusOnInputField() { - this.binding.textinput.requestFocus(); - } - public void doneSendingPgpMessage() { mSendingPgpMessage.set(false); } @@ -2464,8 +2470,8 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke if (uuid != null) { Conversation conversation = activity.xmppConnectionService.findConversationByUuid(uuid); if (conversation == null) { - Log.d(Config.LOGTAG, "unable to restore activity"); clearPending(); + activity.onConversationArchived(null); return; } reInit(conversation); @@ -2473,6 +2479,12 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke if (scrollState != null) { setScrollPosition(scrollState); } + } else { + if (!activity.xmppConnectionService.isConversationStillOpen(conversation)) { + clearPending(); + activity.onConversationArchived(conversation); + return; + } } ActivityResult activityResult = postponedActivityResult.pop(); if (activityResult != null) { diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationsActivity.java b/src/main/java/eu/siacs/conversations/ui/ConversationsActivity.java index 363168548..2528f8a2a 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationsActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationsActivity.java @@ -242,10 +242,8 @@ public class ConversationsActivity extends XmppActivity implements OnConversatio Toast.makeText(this, R.string.device_does_not_support_battery_op, Toast.LENGTH_SHORT).show(); } }); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { - builder.setOnDismissListener(dialog -> setNeverAskForBatteryOptimizationsAgain()); - } - AlertDialog dialog = builder.create(); + builder.setOnDismissListener(dialog -> setNeverAskForBatteryOptimizationsAgain()); + final AlertDialog dialog = builder.create(); dialog.setCanceledOnTouchOutside(false); dialog.show(); } diff --git a/src/main/res/layout/dialog_block_contact.xml b/src/main/res/layout/dialog_block_contact.xml index 23abaaa94..627e210a4 100644 --- a/src/main/res/layout/dialog_block_contact.xml +++ b/src/main/res/layout/dialog_block_contact.xml @@ -1,23 +1,27 @@ - + - - + - \ No newline at end of file + + + + + + \ No newline at end of file