diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java b/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java index 49fb047de..b276ef464 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java @@ -60,6 +60,8 @@ import eu.siacs.conversations.ui.service.EmojiService; import eu.siacs.conversations.ui.util.PendingItem; import eu.siacs.conversations.xmpp.OnUpdateBlocklist; +import static eu.siacs.conversations.ui.ConversationFragment.REQUEST_DECRYPT_PGP; + public class ConversationActivity extends XmppActivity implements OnConversationSelected, OnConversationArchived, OnConversationsListItemUpdated, OnConversationRead, XmppConnectionService.OnAccountUpdate, XmppConnectionService.OnConversationUpdate, XmppConnectionService.OnRosterUpdate, OnUpdateBlocklist, XmppConnectionService.OnShowErrorToast { public static final String ACTION_VIEW_CONVERSATION = "eu.siacs.conversations.action.VIEW"; @@ -194,6 +196,40 @@ public class ConversationActivity extends XmppActivity implements OnConversation return true; } + @Override + public void onActivityResult(int requestCode, int resultCode, final Intent data) { + Log.d(Config.LOGTAG,"on activity result"); + if (resultCode == RESULT_OK) { + handlePositiveActivityResult(requestCode, data); + } else { + handleNegativeActivityResult(requestCode); + } + } + + private void handleNegativeActivityResult(int requestCode) { + switch (requestCode) { + case REQUEST_DECRYPT_PGP: + Conversation conversation = ConversationFragment.getConversationReliable(this); + if (conversation == null) { + break; + } + conversation.getAccount().getPgpDecryptionService().giveUpCurrentDecryption(); + break; + } + } + + private void handlePositiveActivityResult(int requestCode, final Intent data) { + switch (requestCode) { + case REQUEST_DECRYPT_PGP: + Conversation conversation = ConversationFragment.getConversationReliable(this); + if (conversation == null) { + break; + } + conversation.getAccount().getPgpDecryptionService().continueDecryption(data); + break; + } + } + @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java index 584ccbed9..9d3e810a2 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java @@ -9,6 +9,7 @@ import android.net.Uri; import android.os.Build; import android.preference.PreferenceManager; import android.provider.MediaStore; +import android.support.annotation.IdRes; import android.support.v7.app.AlertDialog; import android.app.Fragment; import android.app.PendingIntent; @@ -639,9 +640,6 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke private void handlePositiveActivityResult(int requestCode, final Intent data) { switch (requestCode) { - case REQUEST_DECRYPT_PGP: - conversation.getAccount().getPgpDecryptionService().continueDecryption(data); - break; case REQUEST_TRUST_KEYS_TEXT: final String body = this.binding.textinput.getText().toString(); Message message = new Message(conversation, body, conversation.getNextEncryption()); @@ -697,10 +695,7 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke private void handleNegativeActivityResult(int requestCode) { switch (requestCode) { - case REQUEST_DECRYPT_PGP: - // discard the message to prevent decryption being blocked - conversation.getAccount().getPgpDecryptionService().giveUpCurrentDecryption(); - break; + //nothing to do for now } } @@ -2276,7 +2271,11 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke } public static Conversation getConversation(Activity activity) { - Fragment fragment = activity.getFragmentManager().findFragmentById(R.id.secondary_fragment); + return getConversation(activity, R.id.secondary_fragment); + } + + private static Conversation getConversation(Activity activity, @IdRes int res) { + final Fragment fragment = activity.getFragmentManager().findFragmentById(res); if (fragment != null && fragment instanceof ConversationFragment) { return ((ConversationFragment) fragment).getConversation(); } else { @@ -2284,6 +2283,14 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke } } + public static Conversation getConversationReliable(Activity activity) { + final Conversation conversation = getConversation(activity, R.id.secondary_fragment); + if (conversation != null) { + return conversation; + } + return getConversation(activity, R.id.main_fragment); + } + public Conversation getConversation() { return conversation; }