From 1199fae5574a45d095f3cef27d375221e890422f Mon Sep 17 00:00:00 2001 From: Christian Schneppe Date: Fri, 17 Mar 2017 23:30:52 +0100 Subject: fix NPE while sending images directly from GBoard --- .../pixart/messenger/ui/ConversationActivity.java | 86 +++++++++++++--------- 1 file changed, 51 insertions(+), 35 deletions(-) (limited to 'src/main/java/de/pixart/messenger') diff --git a/src/main/java/de/pixart/messenger/ui/ConversationActivity.java b/src/main/java/de/pixart/messenger/ui/ConversationActivity.java index 62f0dcdb3..efffb1d32 100644 --- a/src/main/java/de/pixart/messenger/ui/ConversationActivity.java +++ b/src/main/java/de/pixart/messenger/ui/ConversationActivity.java @@ -1411,7 +1411,7 @@ public class ConversationActivity extends XmppActivity if (ImageUrisCount == 1) { Uri uri = mPendingImageUris.get(0); Log.d(Config.LOGTAG, "ConversationActivity.onBackendConnected() - attaching image to conversations. stopping=" + Boolean.toString(stopping)); - attachImageToConversation(getSelectedConversation(), uri); + attachImageToConversation(getSelectedConversation(), uri, false); } else { for (Iterator i = mPendingImageUris.iterator(); i.hasNext(); i.remove()) { Uri foo = i.next(); @@ -1577,7 +1577,7 @@ public class ConversationActivity extends XmppActivity if (ImageUrisCount == 1) { Uri uri = mPendingImageUris.get(0); Log.d(Config.LOGTAG, "ConversationActivity.onActivityResult() - attaching image to conversations. CHOOSE_IMAGE"); - attachImageToConversation(getSelectedConversation(), uri); + attachImageToConversation(getSelectedConversation(), uri, false); } else { for (Iterator i = mPendingImageUris.iterator(); i.hasNext(); i.remove()) { Log.d(Config.LOGTAG, "ConversationActivity.onActivityResult() - attaching images to conversations. CHOOSE_IMAGES"); @@ -1844,24 +1844,36 @@ public class ConversationActivity extends XmppActivity } public void attachImageToConversation(Uri uri) { - this.attachImageToConversation(getSelectedConversation(), uri); + this.attachImageToConversation(getSelectedConversation(), uri, true); } - private void attachImageToConversation(Conversation conversation, Uri uri) { + private void attachImageToConversation(Conversation conversation, Uri uri, boolean sendAsIs) { if (conversation == null) { return; } + if (sendAsIs) { + sendImage(conversation, uri); + return; + } final Conversation conversation_preview = conversation; final Uri uri_preview = uri; Bitmap bitmap = BitmapFactory.decodeFile(FileUtils.getPath(this, uri)); - File file = new File(FileUtils.getPath(this, uri)); + File file = null; ExifInterface exif = null; + int orientation = 0; try { - exif = new ExifInterface(file.toString()); - } catch (IOException e) { + file = new File(FileUtils.getPath(this, uri)); + } catch (Exception e) { e.printStackTrace(); } - int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); + if (file != null) { + try { + exif = new ExifInterface(file.toString()); + } catch (IOException e) { + e.printStackTrace(); + } + orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); + } Log.d(Config.LOGTAG, "EXIF: " + orientation); Bitmap rotated_image = null; Log.d(Config.LOGTAG, "Rotate image"); @@ -1902,33 +1914,7 @@ public class ConversationActivity extends XmppActivity builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(final DialogInterface dialog, final int which) { - final Toast prepareFileToast = Toast.makeText(getApplicationContext(), getText(R.string.preparing_image), Toast.LENGTH_LONG); - prepareFileToast.show(); - xmppConnectionService.attachImageToConversation(conversation_preview, uri_preview, - new UiCallback() { - - @Override - public void userInputRequried(PendingIntent pi, Message object) { - hidePrepareFileToast(prepareFileToast); - } - - @Override - public void success(Message message) { - hidePrepareFileToast(prepareFileToast); - xmppConnectionService.sendMessage(message); - } - - @Override - public void error(final int error, Message message) { - hidePrepareFileToast(prepareFileToast); - runOnUiThread(new Runnable() { - @Override - public void run() { - replaceToast(getString(error)); - } - }); - } - }); + sendImage(conversation_preview, uri_preview); } }); builder.setOnCancelListener(new DialogInterface.OnCancelListener() { @@ -1952,6 +1938,36 @@ public class ConversationActivity extends XmppActivity } } + private void sendImage(Conversation conversation, Uri uri) { + final Toast prepareFileToast = Toast.makeText(getApplicationContext(), getText(R.string.preparing_image), Toast.LENGTH_LONG); + prepareFileToast.show(); + xmppConnectionService.attachImageToConversation(conversation, uri, + new UiCallback() { + + @Override + public void userInputRequried(PendingIntent pi, Message object) { + hidePrepareFileToast(prepareFileToast); + } + + @Override + public void success(Message message) { + hidePrepareFileToast(prepareFileToast); + xmppConnectionService.sendMessage(message); + } + + @Override + public void error(final int error, Message message) { + hidePrepareFileToast(prepareFileToast); + runOnUiThread(new Runnable() { + @Override + public void run() { + replaceToast(getString(error)); + } + }); + } + }); + } + private void hidePrepareFileToast(final Toast prepareFileToast) { if (prepareFileToast != null) { runOnUiThread(new Runnable() { -- cgit v1.2.3