fixed onActivityResult handling for pgp

This commit is contained in:
Daniel Gultsch 2018-02-24 22:15:07 +01:00
parent b0bec2c390
commit 3b75161113
2 changed files with 51 additions and 8 deletions

View file

@ -60,6 +60,8 @@ import eu.siacs.conversations.ui.service.EmojiService;
import eu.siacs.conversations.ui.util.PendingItem; import eu.siacs.conversations.ui.util.PendingItem;
import eu.siacs.conversations.xmpp.OnUpdateBlocklist; 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 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"; 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; 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 @Override
protected void onCreate(final Bundle savedInstanceState) { protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);

View file

@ -9,6 +9,7 @@ import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import android.provider.MediaStore; import android.provider.MediaStore;
import android.support.annotation.IdRes;
import android.support.v7.app.AlertDialog; import android.support.v7.app.AlertDialog;
import android.app.Fragment; import android.app.Fragment;
import android.app.PendingIntent; import android.app.PendingIntent;
@ -639,9 +640,6 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
private void handlePositiveActivityResult(int requestCode, final Intent data) { private void handlePositiveActivityResult(int requestCode, final Intent data) {
switch (requestCode) { switch (requestCode) {
case REQUEST_DECRYPT_PGP:
conversation.getAccount().getPgpDecryptionService().continueDecryption(data);
break;
case REQUEST_TRUST_KEYS_TEXT: case REQUEST_TRUST_KEYS_TEXT:
final String body = this.binding.textinput.getText().toString(); final String body = this.binding.textinput.getText().toString();
Message message = new Message(conversation, body, conversation.getNextEncryption()); 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) { private void handleNegativeActivityResult(int requestCode) {
switch (requestCode) { switch (requestCode) {
case REQUEST_DECRYPT_PGP: //nothing to do for now
// discard the message to prevent decryption being blocked
conversation.getAccount().getPgpDecryptionService().giveUpCurrentDecryption();
break;
} }
} }
@ -2276,7 +2271,11 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
} }
public static Conversation getConversation(Activity activity) { 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) { if (fragment != null && fragment instanceof ConversationFragment) {
return ((ConversationFragment) fragment).getConversation(); return ((ConversationFragment) fragment).getConversation();
} else { } 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() { public Conversation getConversation() {
return conversation; return conversation;
} }