show dialog when no contact in a muc has pgp support

iNPUTmice created

Change summary

res/values/strings.xml                                  |  2 
src/eu/siacs/conversations/entities/MucOptions.java     | 18 +++++++
src/eu/siacs/conversations/ui/ConversationActivity.java |  2 
src/eu/siacs/conversations/ui/ConversationFragment.java | 28 +++++++++-
4 files changed, 44 insertions(+), 6 deletions(-)

Detailed changes

res/values/strings.xml 🔗

@@ -115,6 +115,8 @@
     <string name="offering">offering&#8230;</string>
     <string name="no_pgp_key">No OpenPGP Key found</string>
     <string name="contact_has_no_pgp_key">Conversations is unable to encrypt your messages because your contact is not announcing his or hers public key.\n\n<small>Please ask your contact to setup OpenPGP.</small></string>
+    <string name="no_pgp_keys">No OpenPGP Keys found</string>
+    <string name="contacts_have_no_pgp_keys">Conversations is unable to encrypt your messages because your contacts are not announcing their public key.\n\n<small>Please ask your contacts to setup OpenPGP.</small></string>
     <string name="encrypted_message_received"><i>Encrypted message received. Touch to view and decrypt.</i></string>
     <string name="encrypted_image_received"><i>Encrypted image received. Touch to view and decrypt.</i></string>
     <string name="image_file"><i>Image received. Touch to view</i></string>

src/eu/siacs/conversations/entities/MucOptions.java 🔗

@@ -250,4 +250,22 @@ public class MucOptions {
 		}
 		return primitivLongArray;
 	}
+	
+	public boolean pgpKeysInUse() {
+		for(User user : getUsers()) {
+			if (user.getPgpKeyId()!=0) {
+				return true;
+			}
+		}
+		return false;
+	}
+	
+	public boolean everybodyHasKeys() {
+		for(User user : getUsers()) {
+			if (user.getPgpKeyId()==0) {
+				return false;
+			}
+		}
+		return true;
+	}
 }

src/eu/siacs/conversations/ui/ConversationActivity.java 🔗

@@ -396,7 +396,7 @@ public class ConversationActivity extends XmppActivity {
 					final ConversationFragment fragment = (ConversationFragment) getFragmentManager()
 							.findFragmentByTag("conversation");
 					if (fragment != null) {
-						fragment.showNoPGPKeyDialog(new OnClickListener() {
+						fragment.showNoPGPKeyDialog(false,new OnClickListener() {
 							
 							@Override
 							public void onClick(DialogInterface dialog, int which) {

src/eu/siacs/conversations/ui/ConversationFragment.java 🔗

@@ -701,7 +701,7 @@ public class ConversationFragment extends Fragment {
 					});
 	
 				} else {
-					showNoPGPKeyDialog(new DialogInterface.OnClickListener() {
+					showNoPGPKeyDialog(false,new DialogInterface.OnClickListener() {
 	
 						@Override
 						public void onClick(DialogInterface dialog, int which) {
@@ -713,16 +713,34 @@ public class ConversationFragment extends Fragment {
 					});
 				}
 			} else {
-				activity.encryptTextMessage();
+				if (conversation.getMucOptions().pgpKeysInUse()) {
+					activity.encryptTextMessage();
+				} else {
+					showNoPGPKeyDialog(true,new DialogInterface.OnClickListener() {
+						
+						@Override
+						public void onClick(DialogInterface dialog, int which) {
+							conversation.setNextEncryption(Message.ENCRYPTION_NONE);
+							message.setEncryption(Message.ENCRYPTION_NONE);
+							xmppService.sendMessage(message, null);
+							chatMsg.setText("");
+						}
+					});
+				}
 			}
 		}
 	}
 
-	public void showNoPGPKeyDialog(DialogInterface.OnClickListener listener) {
+	public void showNoPGPKeyDialog(boolean plural, DialogInterface.OnClickListener listener) {
 		AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
-		builder.setTitle(getString(R.string.no_pgp_key));
 		builder.setIconAttribute(android.R.attr.alertDialogIcon);
-		builder.setMessage(getText(R.string.contact_has_no_pgp_key));
+		if (plural) {
+			builder.setTitle(getString(R.string.no_pgp_keys));
+			builder.setMessage(getText(R.string.contacts_have_no_pgp_keys));
+		} else {
+			builder.setTitle(getString(R.string.no_pgp_key));
+			builder.setMessage(getText(R.string.contact_has_no_pgp_key));
+		}
 		builder.setNegativeButton(getString(R.string.cancel), null);
 		builder.setPositiveButton(getString(R.string.send_unencrypted),
 				listener);