fixed onActivityResult handling for pgp

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/ui/ConversationActivity.java | 36 +
src/main/java/eu/siacs/conversations/ui/ConversationFragment.java | 23 
2 files changed, 51 insertions(+), 8 deletions(-)

Detailed changes

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);

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;
 	}