picture notification and some drive by bug fixes

iNPUTmice created

Change summary

src/eu/siacs/conversations/services/NotificationService.java   | 38 ++-
src/eu/siacs/conversations/ui/ConversationActivity.java        | 32 +--
src/eu/siacs/conversations/ui/XmppActivity.java                |  1 
src/eu/siacs/conversations/ui/adapter/ConversationAdapter.java |  2 
4 files changed, 40 insertions(+), 33 deletions(-)

Detailed changes

src/eu/siacs/conversations/services/NotificationService.java 🔗

@@ -1,5 +1,6 @@
 package eu.siacs.conversations.services;
 
+import java.io.FileNotFoundException;
 import java.util.ArrayList;
 import java.util.LinkedHashMap;
 import java.util.regex.Matcher;
@@ -11,6 +12,7 @@ import android.app.PendingIntent;
 import android.content.Context;
 import android.content.Intent;
 import android.content.SharedPreferences;
+import android.graphics.Bitmap;
 import android.net.Uri;
 import android.os.PowerManager;
 import android.os.SystemClock;
@@ -109,19 +111,31 @@ public class NotificationService {
 					mBuilder.setLargeIcon(mXmppConnectionService
 							.getAvatarService().get(conversation, getPixel(64)));
 					mBuilder.setContentTitle(conversation.getName());
-					StringBuilder text = new StringBuilder();
-					for (int i = 0; i < messages.size(); ++i) {
-						text.append(getReadableBody(messages.get(i)));
-						if (i != messages.size() - 1) {
-							text.append("\n");
+					if (messages.size() == 1 && messages.get(0).getType() == Message.TYPE_IMAGE) {
+						try {
+							Bitmap bitmap = mXmppConnectionService.getFileBackend().getThumbnail(messages.get(0),getPixel(288),false);
+							mBuilder.setStyle(new NotificationCompat.BigPictureStyle().bigPicture(bitmap));
+							mBuilder.setContentText(mXmppConnectionService.getString(R.string.image_file));
+						} catch (FileNotFoundException e) {
+							// TODO Auto-generated catch block
+							e.printStackTrace();
+						}
+						
+					} else {
+						StringBuilder text = new StringBuilder();
+						for (int i = 0; i < messages.size(); ++i) {
+							text.append(getReadableBody(messages.get(i)));
+							if (i != messages.size() - 1) {
+								text.append("\n");
+							}
+						}
+						mBuilder.setStyle(new NotificationCompat.BigTextStyle()
+								.bigText(text.toString()));
+						mBuilder.setContentText(getReadableBody(messages.get(0)));
+						if (notify) {
+							mBuilder.setTicker(getReadableBody(messages
+									.get(messages.size() - 1)));
 						}
-					}
-					mBuilder.setStyle(new NotificationCompat.BigTextStyle()
-							.bigText(text.toString()));
-					mBuilder.setContentText(getReadableBody(messages.get(0)));
-					if (notify) {
-						mBuilder.setTicker(getReadableBody(messages
-								.get(messages.size() - 1)));
 					}
 					mBuilder.setContentIntent(createContentIntent(conversation
 							.getUuid()));

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

@@ -629,23 +629,11 @@ public class ConversationActivity extends XmppActivity implements
 	@Override
 	protected void onNewIntent(Intent intent) {
 		if (xmppConnectionServiceBound) {
-			if ((Intent.ACTION_VIEW.equals(intent.getAction()) && (VIEW_CONVERSATION
-					.equals(intent.getType())))) {
-				String convToView = (String) intent.getExtras().get(
-						CONVERSATION);
-				updateConversationList();
-				for (int i = 0; i < conversationList.size(); ++i) {
-					if (conversationList.get(i).getUuid().equals(convToView)) {
-						setSelectedConversation(conversationList.get(i));
-						break;
-					}
-				}
-				paneShouldBeOpen = false;
-				String text = intent.getExtras().getString(TEXT, null);
-				swapConversationFragment().setText(text);
+			 if (intent != null
+						&& VIEW_CONVERSATION.equals(getIntent().getType())) {
+				handleViewConversationIntent(intent);
 			}
 		} else {
-			handledViewIntent = false;
 			setIntent(intent);
 		}
 	}
@@ -705,11 +693,7 @@ public class ConversationActivity extends XmppActivity implements
 			mOpenConverstaion = null;
 		} else if (getIntent() != null
 				&& VIEW_CONVERSATION.equals(getIntent().getType())) {
-			String uuid = (String) getIntent().getExtras().get(CONVERSATION);
-			String text = getIntent().getExtras().getString(TEXT, null);
-			selectConversationByUuid(uuid);
-			paneShouldBeOpen = false;
-			swapConversationFragment().setText(text);
+			handleViewConversationIntent(getIntent());
 			setIntent(null);
 		} else {
 			showConversationsOverview();
@@ -731,6 +715,14 @@ public class ConversationActivity extends XmppActivity implements
 		}
 		ExceptionHelper.checkForCrash(this, this.xmppConnectionService);
 	}
+	
+	private void handleViewConversationIntent(Intent intent) {
+		String uuid = (String) intent.getExtras().get(CONVERSATION);
+		String text = intent.getExtras().getString(TEXT, null);
+		selectConversationByUuid(uuid);
+		paneShouldBeOpen = false;
+		swapConversationFragment().setText(text);
+	}
 
 	private void selectConversationByUuid(String uuid) {
 		for (int i = 0; i < conversationList.size(); ++i) {

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

@@ -58,7 +58,6 @@ public abstract class XmppActivity extends Activity {
 
 	public XmppConnectionService xmppConnectionService;
 	public boolean xmppConnectionServiceBound = false;
-	protected boolean handledViewIntent = false;
 
 	protected int mPrimaryTextColor;
 	protected int mSecondaryTextColor;

src/eu/siacs/conversations/ui/adapter/ConversationAdapter.java 🔗

@@ -100,6 +100,8 @@ public class ConversationAdapter extends ArrayAdapter<Conversation> {
 					mLastMessage.setText("");
 				}
 			} else if (message.getEncryption() == Message.ENCRYPTION_PGP) {
+				imagePreview.setVisibility(View.GONE);
+				mLastMessage.setVisibility(View.VISIBLE);
 				mLastMessage.setText(R.string.encrypted_message_received);
 			} else {
 				mLastMessage.setVisibility(View.GONE);