aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/eu/siacs/conversations/ui
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/eu/siacs/conversations/ui')
-rw-r--r--src/main/java/eu/siacs/conversations/ui/ConversationActivity.java77
-rw-r--r--src/main/java/eu/siacs/conversations/ui/ConversationFragment.java27
-rw-r--r--src/main/java/eu/siacs/conversations/ui/adapter/ConversationAdapter.java36
-rw-r--r--src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java165
4 files changed, 223 insertions, 82 deletions
diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java b/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java
index 5d11bb59..7e28cc6c 100644
--- a/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java
+++ b/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java
@@ -52,13 +52,14 @@ public class ConversationActivity extends XmppActivity implements
public static final int REQUEST_SEND_MESSAGE = 0x0201;
public static final int REQUEST_DECRYPT_PGP = 0x0202;
public static final int REQUEST_ENCRYPT_MESSAGE = 0x0207;
- private static final int REQUEST_ATTACH_FILE_DIALOG = 0x0203;
+ private static final int REQUEST_ATTACH_IMAGE_DIALOG = 0x0203;
private static final int REQUEST_IMAGE_CAPTURE = 0x0204;
private static final int REQUEST_RECORD_AUDIO = 0x0205;
private static final int REQUEST_SEND_PGP_IMAGE = 0x0206;
+ private static final int REQUEST_ATTACH_FILE_DIALOG = 0x0208;
private static final int ATTACHMENT_CHOICE_CHOOSE_IMAGE = 0x0301;
private static final int ATTACHMENT_CHOICE_TAKE_PHOTO = 0x0302;
- private static final int ATTACHMENT_CHOICE_RECORD_VOICE = 0x0303;
+ private static final int ATTACHMENT_CHOICE_CHOOSE_FILE = 0x0303;
private static final String STATE_OPEN_CONVERSATION = "state_open_conversation";
private static final String STATE_PANEL_OPEN = "state_panel_open";
private static final String STATE_PENDING_URI = "state_pending_uri";
@@ -66,6 +67,7 @@ public class ConversationActivity extends XmppActivity implements
private String mOpenConverstaion = null;
private boolean mPanelOpen = true;
private Uri mPendingImageUri = null;
+ private Uri mPendingFileUri = null;
private View mContentView;
@@ -76,7 +78,7 @@ public class ConversationActivity extends XmppActivity implements
private ArrayAdapter<Conversation> listAdapter;
- private Toast prepareImageToast;
+ private Toast prepareFileToast;
public List<Conversation> getConversationList() {
@@ -308,11 +310,16 @@ public class ConversationActivity extends XmppActivity implements
attachFileIntent.setAction(Intent.ACTION_GET_CONTENT);
Intent chooser = Intent.createChooser(attachFileIntent,
getString(R.string.attach_file));
+ startActivityForResult(chooser, REQUEST_ATTACH_IMAGE_DIALOG);
+ } else if (attachmentChoice == ATTACHMENT_CHOICE_CHOOSE_FILE) {
+ Intent attachFileIntent = new Intent();
+ //attachFileIntent.setType("file/*");
+ attachFileIntent.setType("*/*");
+ attachFileIntent.addCategory(Intent.CATEGORY_OPENABLE);
+ attachFileIntent.setAction(Intent.ACTION_GET_CONTENT);
+ Intent chooser = Intent.createChooser(attachFileIntent,
+ getString(R.string.attach_file));
startActivityForResult(chooser, REQUEST_ATTACH_FILE_DIALOG);
- } else if (attachmentChoice == ATTACHMENT_CHOICE_RECORD_VOICE) {
- Intent intent = new Intent(
- MediaStore.Audio.Media.RECORD_SOUND_ACTION);
- startActivityForResult(intent, REQUEST_RECORD_AUDIO);
}
}
});
@@ -483,7 +490,7 @@ public class ConversationActivity extends XmppActivity implements
attachFile(ATTACHMENT_CHOICE_TAKE_PHOTO);
break;
case R.id.attach_record_voice:
- attachFile(ATTACHMENT_CHOICE_RECORD_VOICE);
+ attachFile(ATTACHMENT_CHOICE_CHOOSE_FILE);
break;
}
return false;
@@ -675,14 +682,17 @@ public class ConversationActivity extends XmppActivity implements
} else {
showConversationsOverview();
mPendingImageUri = null;
+ mPendingFileUri = null;
setSelectedConversation(conversationList.get(0));
this.mConversationFragment.reInit(getSelectedConversation());
}
if (mPendingImageUri != null) {
- attachImageToConversation(getSelectedConversation(),
- mPendingImageUri);
+ attachImageToConversation(getSelectedConversation(),mPendingImageUri);
mPendingImageUri = null;
+ } else if (mPendingFileUri != null) {
+ attachFileToConversation(getSelectedConversation(),mPendingFileUri);
+ mPendingFileUri = null;
}
ExceptionHelper.checkForCrash(this, this.xmppConnectionService);
setIntent(new Intent());
@@ -726,13 +736,20 @@ public class ConversationActivity extends XmppActivity implements
selectedFragment.hideSnackbar();
selectedFragment.updateMessages();
}
- } else if (requestCode == REQUEST_ATTACH_FILE_DIALOG) {
+ } else if (requestCode == REQUEST_ATTACH_IMAGE_DIALOG) {
mPendingImageUri = data.getData();
if (xmppConnectionServiceBound) {
attachImageToConversation(getSelectedConversation(),
mPendingImageUri);
mPendingImageUri = null;
}
+ } else if (requestCode == REQUEST_ATTACH_FILE_DIALOG) {
+ mPendingFileUri = data.getData();
+ if (xmppConnectionServiceBound) {
+ attachFileToConversation(getSelectedConversation(),
+ mPendingFileUri);
+ mPendingFileUri = null;
+ }
} else if (requestCode == REQUEST_SEND_PGP_IMAGE) {
} else if (requestCode == ATTACHMENT_CHOICE_CHOOSE_IMAGE) {
@@ -754,9 +771,6 @@ public class ConversationActivity extends XmppActivity implements
Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
intent.setData(mPendingImageUri);
sendBroadcast(intent);
- } else if (requestCode == REQUEST_RECORD_AUDIO) {
- attachAudioToConversation(getSelectedConversation(),
- data.getData());
}
} else {
if (requestCode == REQUEST_IMAGE_CAPTURE) {
@@ -765,21 +779,40 @@ public class ConversationActivity extends XmppActivity implements
}
}
- private void attachAudioToConversation(Conversation conversation, Uri uri) {
+ private void attachFileToConversation(Conversation conversation, Uri uri) {
+ prepareFileToast = Toast.makeText(getApplicationContext(),
+ getText(R.string.preparing_file), Toast.LENGTH_LONG);
+ prepareFileToast.show();
+ xmppConnectionService.attachFileToConversation(conversation,uri, new UiCallback<Message>() {
+ @Override
+ public void success(Message message) {
+ hidePrepareFileToast();
+ xmppConnectionService.sendMessage(message);
+ }
+
+ @Override
+ public void error(int errorCode, Message message) {
+ displayErrorDialog(errorCode);
+ }
+ @Override
+ public void userInputRequried(PendingIntent pi, Message message) {
+
+ }
+ });
}
private void attachImageToConversation(Conversation conversation, Uri uri) {
- prepareImageToast = Toast.makeText(getApplicationContext(),
+ prepareFileToast = Toast.makeText(getApplicationContext(),
getText(R.string.preparing_image), Toast.LENGTH_LONG);
- prepareImageToast.show();
+ prepareFileToast.show();
xmppConnectionService.attachImageToConversation(conversation, uri,
new UiCallback<Message>() {
@Override
public void userInputRequried(PendingIntent pi,
Message object) {
- hidePrepareImageToast();
+ hidePrepareFileToast();
ConversationActivity.this.runIntent(pi,
ConversationActivity.REQUEST_SEND_PGP_IMAGE);
}
@@ -791,19 +824,19 @@ public class ConversationActivity extends XmppActivity implements
@Override
public void error(int error, Message message) {
- hidePrepareImageToast();
+ hidePrepareFileToast();
displayErrorDialog(error);
}
});
}
- private void hidePrepareImageToast() {
- if (prepareImageToast != null) {
+ private void hidePrepareFileToast() {
+ if (prepareFileToast != null) {
runOnUiThread(new Runnable() {
@Override
public void run() {
- prepareImageToast.cancel();
+ prepareFileToast.cancel();
}
});
}
diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java
index 11f2c4fc..bc609fb3 100644
--- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java
+++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java
@@ -42,6 +42,9 @@ import eu.siacs.conversations.crypto.PgpEngine;
import eu.siacs.conversations.entities.Account;
import eu.siacs.conversations.entities.Contact;
import eu.siacs.conversations.entities.Conversation;
+import eu.siacs.conversations.entities.Downloadable;
+import eu.siacs.conversations.entities.DownloadableFile;
+import eu.siacs.conversations.entities.DownloadablePlaceholder;
import eu.siacs.conversations.entities.Message;
import eu.siacs.conversations.entities.MucOptions;
import eu.siacs.conversations.entities.Presences;
@@ -354,6 +357,7 @@ public class ConversationFragment extends Fragment {
MenuItem sendAgain = menu.findItem(R.id.send_again);
MenuItem copyUrl = menu.findItem(R.id.copy_url);
MenuItem downloadImage = menu.findItem(R.id.download_image);
+ MenuItem cancelTransmission = menu.findItem(R.id.cancel_transmission);
if (this.selectedMessage.getType() != Message.TYPE_TEXT
|| this.selectedMessage.getDownloadable() != null) {
copyText.setVisible(false);
@@ -370,12 +374,15 @@ public class ConversationFragment extends Fragment {
|| this.selectedMessage.getImageParams().url == null) {
copyUrl.setVisible(false);
}
-
if (this.selectedMessage.getType() != Message.TYPE_TEXT
|| this.selectedMessage.getDownloadable() != null
|| !this.selectedMessage.bodyContainsDownloadable()) {
downloadImage.setVisible(false);
}
+ if (this.selectedMessage.getDownloadable() == null
+ || this.selectedMessage.getDownloadable() instanceof DownloadablePlaceholder) {
+ cancelTransmission.setVisible(false);
+ }
}
}
@@ -397,6 +404,9 @@ public class ConversationFragment extends Fragment {
case R.id.download_image:
downloadImage(selectedMessage);
return true;
+ case R.id.cancel_transmission:
+ cancelTransmission(selectedMessage);
+ return true;
default:
return super.onContextItemSelected(item);
}
@@ -423,6 +433,14 @@ public class ConversationFragment extends Fragment {
}
private void resendMessage(Message message) {
+ if (message.getType() == Message.TYPE_FILE || message.getType() == Message.TYPE_IMAGE) {
+ DownloadableFile file = activity.xmppConnectionService.getFileBackend().getFile(message);
+ if (!file.exists()) {
+ Toast.makeText(activity,R.string.file_deleted,Toast.LENGTH_SHORT).show();
+ message.setDownloadable(new DownloadablePlaceholder(Downloadable.STATUS_DELETED));
+ return;
+ }
+ }
activity.xmppConnectionService.resendFailedMessages(message);
}
@@ -439,6 +457,13 @@ public class ConversationFragment extends Fragment {
.createNewConnection(message);
}
+ private void cancelTransmission(Message message) {
+ Downloadable downloadable = message.getDownloadable();
+ if (downloadable!=null) {
+ downloadable.cancel();
+ }
+ }
+
protected void privateMessageWith(final Jid counterpart) {
this.mEditMessage.setText("");
this.conversation.setNextCounterpart(counterpart);
diff --git a/src/main/java/eu/siacs/conversations/ui/adapter/ConversationAdapter.java b/src/main/java/eu/siacs/conversations/ui/adapter/ConversationAdapter.java
index b3df8d72..b81544e6 100644
--- a/src/main/java/eu/siacs/conversations/ui/adapter/ConversationAdapter.java
+++ b/src/main/java/eu/siacs/conversations/ui/adapter/ConversationAdapter.java
@@ -6,6 +6,7 @@ import eu.siacs.conversations.Config;
import eu.siacs.conversations.R;
import eu.siacs.conversations.entities.Conversation;
import eu.siacs.conversations.entities.Downloadable;
+import eu.siacs.conversations.entities.DownloadableFile;
import eu.siacs.conversations.entities.Message;
import eu.siacs.conversations.ui.ConversationActivity;
import eu.siacs.conversations.ui.XmppActivity;
@@ -75,7 +76,7 @@ public class ConversationAdapter extends ArrayAdapter<Conversation> {
convName.setTypeface(null, Typeface.NORMAL);
}
- if (message.getType() == Message.TYPE_IMAGE
+ if (message.getType() == Message.TYPE_IMAGE || message.getType() == Message.TYPE_FILE
|| message.getDownloadable() != null) {
Downloadable d = message.getDownloadable();
if (conversation.isRead()) {
@@ -89,13 +90,35 @@ public class ConversationAdapter extends ArrayAdapter<Conversation> {
if (d.getStatus() == Downloadable.STATUS_CHECKING) {
mLastMessage.setText(R.string.checking_image);
} else if (d.getStatus() == Downloadable.STATUS_DOWNLOADING) {
- mLastMessage.setText(R.string.receiving_image);
+ if (message.getType() == Message.TYPE_FILE) {
+ mLastMessage.setText(getContext().getString(R.string.receiving_file,d.getMimeType(), d.getProgress()));
+ } else {
+ mLastMessage.setText(getContext().getString(R.string.receiving_image, d.getProgress()));
+ }
} else if (d.getStatus() == Downloadable.STATUS_OFFER) {
- mLastMessage.setText(R.string.image_offered_for_download);
+ if (message.getType() == Message.TYPE_FILE) {
+ mLastMessage.setText(R.string.file_offered_for_download);
+ } else {
+ mLastMessage.setText(R.string.image_offered_for_download);
+ }
} else if (d.getStatus() == Downloadable.STATUS_OFFER_CHECK_FILESIZE) {
mLastMessage.setText(R.string.image_offered_for_download);
} else if (d.getStatus() == Downloadable.STATUS_DELETED) {
- mLastMessage.setText(R.string.image_file_deleted);
+ if (message.getType() == Message.TYPE_FILE) {
+ mLastMessage.setText(R.string.file_deleted);
+ } else {
+ mLastMessage.setText(R.string.image_file_deleted);
+ }
+ } else if (d.getStatus() == Downloadable.STATUS_FAILED) {
+ if (message.getType() == Message.TYPE_FILE) {
+ mLastMessage.setText(R.string.file_transmission_failed);
+ } else {
+ mLastMessage.setText(R.string.image_transmission_failed);
+ }
+ } else if (message.getImageParams().width > 0) {
+ mLastMessage.setVisibility(View.GONE);
+ imagePreview.setVisibility(View.VISIBLE);
+ activity.loadBitmap(message, imagePreview);
} else {
mLastMessage.setText("");
}
@@ -103,6 +126,11 @@ public class ConversationAdapter extends ArrayAdapter<Conversation> {
imagePreview.setVisibility(View.GONE);
mLastMessage.setVisibility(View.VISIBLE);
mLastMessage.setText(R.string.encrypted_message_received);
+ } else if (message.getType() == Message.TYPE_FILE && message.getImageParams().width <= 0) {
+ DownloadableFile file = activity.xmppConnectionService.getFileBackend().getFile(message);
+ mLastMessage.setVisibility(View.VISIBLE);
+ imagePreview.setVisibility(View.GONE);
+ mLastMessage.setText(getContext().getString(R.string.file,file.getMimeType()));
} else {
mLastMessage.setVisibility(View.GONE);
imagePreview.setVisibility(View.VISIBLE);
diff --git a/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java b/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java
index 3ebb9390..fc80c234 100644
--- a/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java
+++ b/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java
@@ -1,16 +1,21 @@
package eu.siacs.conversations.ui.adapter;
import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
import android.graphics.Typeface;
+import android.net.Uri;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.ForegroundColorSpan;
import android.text.style.StyleSpan;
import android.util.DisplayMetrics;
+import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.view.ViewGroup;
+import android.webkit.MimeTypeMap;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
@@ -18,6 +23,9 @@ import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.InputStream;
import java.util.List;
import eu.siacs.conversations.Config;
@@ -25,6 +33,7 @@ import eu.siacs.conversations.R;
import eu.siacs.conversations.entities.Contact;
import eu.siacs.conversations.entities.Conversation;
import eu.siacs.conversations.entities.Downloadable;
+import eu.siacs.conversations.entities.DownloadableFile;
import eu.siacs.conversations.entities.Message;
import eu.siacs.conversations.entities.Message.ImageParams;
import eu.siacs.conversations.ui.ConversationActivity;
@@ -96,10 +105,11 @@ public class MessageAdapter extends ArrayAdapter<Message> {
}
boolean multiReceived = message.getConversation().getMode() == Conversation.MODE_MULTI
&& message.getMergedStatus() <= Message.STATUS_RECEIVED;
- if (message.getType() == Message.TYPE_IMAGE
- || message.getDownloadable() != null) {
+ if (message.getType() == Message.TYPE_IMAGE || message.getType() == Message.TYPE_FILE || message.getDownloadable() != null) {
ImageParams params = message.getImageParams();
- if (params.size != 0) {
+ if (params.size > (1.5 * 1024 * 1024)) {
+ filesize = params.size / (1024 * 1024)+ " MB";
+ } else if (params.size > 0) {
filesize = params.size / 1024 + " KB";
}
if (message.getDownloadable() != null && message.getDownloadable().getStatus() == Downloadable.STATUS_FAILED) {
@@ -111,7 +121,12 @@ public class MessageAdapter extends ArrayAdapter<Message> {
info = getContext().getString(R.string.waiting);
break;
case Message.STATUS_UNSEND:
- info = getContext().getString(R.string.sending);
+ Downloadable d = message.getDownloadable();
+ if (d!=null) {
+ info = getContext().getString(R.string.sending_file,d.getProgress());
+ } else {
+ info = getContext().getString(R.string.sending);
+ }
break;
case Message.STATUS_OFFERED:
info = getContext().getString(R.string.offering);
@@ -181,13 +196,13 @@ public class MessageAdapter extends ArrayAdapter<Message> {
}
}
- private void displayInfoMessage(ViewHolder viewHolder, int r) {
+ private void displayInfoMessage(ViewHolder viewHolder, String text) {
if (viewHolder.download_button != null) {
viewHolder.download_button.setVisibility(View.GONE);
}
viewHolder.image.setVisibility(View.GONE);
viewHolder.messageBody.setVisibility(View.VISIBLE);
- viewHolder.messageBody.setText(getContext().getString(r));
+ viewHolder.messageBody.setText(text);
viewHolder.messageBody.setTextColor(activity.getSecondaryTextColor());
viewHolder.messageBody.setTypeface(null, Typeface.ITALIC);
viewHolder.messageBody.setTextIsSelectable(false);
@@ -252,11 +267,11 @@ public class MessageAdapter extends ArrayAdapter<Message> {
}
private void displayDownloadableMessage(ViewHolder viewHolder,
- final Message message, int resid) {
+ final Message message, String text) {
viewHolder.image.setVisibility(View.GONE);
viewHolder.messageBody.setVisibility(View.GONE);
viewHolder.download_button.setVisibility(View.VISIBLE);
- viewHolder.download_button.setText(resid);
+ viewHolder.download_button.setText(text);
viewHolder.download_button.setOnClickListener(new OnClickListener() {
@Override
@@ -267,6 +282,22 @@ public class MessageAdapter extends ArrayAdapter<Message> {
viewHolder.download_button.setOnLongClickListener(openContextMenu);
}
+ private void displayOpenableMessage(ViewHolder viewHolder,final Message message) {
+ final DownloadableFile file = activity.xmppConnectionService.getFileBackend().getFile(message);
+ viewHolder.image.setVisibility(View.GONE);
+ viewHolder.messageBody.setVisibility(View.GONE);
+ viewHolder.download_button.setVisibility(View.VISIBLE);
+ viewHolder.download_button.setText(activity.getString(R.string.open_file,file.getMimeType()));
+ viewHolder.download_button.setOnClickListener(new OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+ openDonwloadable(file);
+ }
+ });
+ viewHolder.download_button.setOnLongClickListener(openContextMenu);
+ }
+
private void displayImageMessage(ViewHolder viewHolder,
final Message message) {
if (viewHolder.download_button != null) {
@@ -455,58 +486,66 @@ public class MessageAdapter extends ArrayAdapter<Message> {
});
}
- if (item.getType() == Message.TYPE_IMAGE
- || item.getDownloadable() != null) {
+ if (item.getDownloadable() != null && item.getDownloadable().getStatus() != Downloadable.STATUS_UPLOADING) {
Downloadable d = item.getDownloadable();
- if (d != null && d.getStatus() == Downloadable.STATUS_DOWNLOADING) {
- displayInfoMessage(viewHolder, R.string.receiving_image);
- } else if (d != null
- && d.getStatus() == Downloadable.STATUS_CHECKING) {
- displayInfoMessage(viewHolder, R.string.checking_image);
- } else if (d != null
- && d.getStatus() == Downloadable.STATUS_DELETED) {
- displayInfoMessage(viewHolder, R.string.image_file_deleted);
- } else if (d != null && d.getStatus() == Downloadable.STATUS_OFFER) {
- displayDownloadableMessage(viewHolder, item,
- R.string.download_image);
- } else if (d != null
- && d.getStatus() == Downloadable.STATUS_OFFER_CHECK_FILESIZE) {
- displayDownloadableMessage(viewHolder, item,
- R.string.check_image_filesize);
- } else if (d != null && d.getStatus() == Downloadable.STATUS_FAILED) {
- displayInfoMessage(viewHolder, R.string.image_transmission_failed);
- } else if ((item.getEncryption() == Message.ENCRYPTION_DECRYPTED)
- || (item.getEncryption() == Message.ENCRYPTION_NONE)
- || (item.getEncryption() == Message.ENCRYPTION_OTR)) {
- displayImageMessage(viewHolder, item);
- } else if (item.getEncryption() == Message.ENCRYPTION_PGP) {
- displayInfoMessage(viewHolder, R.string.encrypted_message);
- } else {
- displayDecryptionFailed(viewHolder);
- }
- } else {
- if (item.getEncryption() == Message.ENCRYPTION_PGP) {
- if (activity.hasPgp()) {
- displayInfoMessage(viewHolder, R.string.encrypted_message);
+ if (d.getStatus() == Downloadable.STATUS_DOWNLOADING) {
+ if (item.getType() == Message.TYPE_FILE) {
+ displayInfoMessage(viewHolder,activity.getString(R.string.receiving_file,d.getMimeType(),d.getProgress()));
} else {
- displayInfoMessage(viewHolder,
- R.string.install_openkeychain);
- if (viewHolder != null) {
- viewHolder.message_box
- .setOnClickListener(new OnClickListener() {
-
- @Override
- public void onClick(View v) {
- activity.showInstallPgpDialog();
- }
- });
- }
+ displayInfoMessage(viewHolder,activity.getString(R.string.receiving_image,d.getProgress()));
}
- } else if (item.getEncryption() == Message.ENCRYPTION_DECRYPTION_FAILED) {
- displayDecryptionFailed(viewHolder);
+ } else if (d.getStatus() == Downloadable.STATUS_CHECKING) {
+ displayInfoMessage(viewHolder,activity.getString(R.string.checking_image));
+ } else if (d.getStatus() == Downloadable.STATUS_DELETED) {
+ if (item.getType() == Message.TYPE_FILE) {
+ displayInfoMessage(viewHolder, activity.getString(R.string.file_deleted));
+ } else {
+ displayInfoMessage(viewHolder, activity.getString(R.string.image_file_deleted));
+ }
+ } else if (d.getStatus() == Downloadable.STATUS_OFFER) {
+ if (item.getType() == Message.TYPE_FILE) {
+ displayDownloadableMessage(viewHolder,item,activity.getString(R.string.download_file,d.getMimeType()));
+ } else {
+ displayDownloadableMessage(viewHolder, item,activity.getString(R.string.download_image));
+ }
+ } else if (d.getStatus() == Downloadable.STATUS_OFFER_CHECK_FILESIZE) {
+ displayDownloadableMessage(viewHolder, item,activity.getString(R.string.check_image_filesize));
+ } else if (d.getStatus() == Downloadable.STATUS_FAILED) {
+ if (item.getType() == Message.TYPE_FILE) {
+ displayInfoMessage(viewHolder, activity.getString(R.string.file_transmission_failed));
+ } else {
+ displayInfoMessage(viewHolder, activity.getString(R.string.image_transmission_failed));
+ }
+ }
+ } else if (item.getType() == Message.TYPE_IMAGE && item.getEncryption() != Message.ENCRYPTION_PGP && item.getEncryption() != Message.ENCRYPTION_DECRYPTION_FAILED) {
+ displayImageMessage(viewHolder, item);
+ } else if (item.getType() == Message.TYPE_FILE && item.getEncryption() != Message.ENCRYPTION_PGP && item.getEncryption() != Message.ENCRYPTION_DECRYPTION_FAILED) {
+ if (item.getImageParams().width > 0) {
+ displayImageMessage(viewHolder,item);
+ } else {
+ displayOpenableMessage(viewHolder, item);
+ }
+ } else if (item.getEncryption() == Message.ENCRYPTION_PGP) {
+ if (activity.hasPgp()) {
+ displayInfoMessage(viewHolder,activity.getString(R.string.encrypted_message));
} else {
- displayTextMessage(viewHolder, item);
+ displayInfoMessage(viewHolder,
+ activity.getString(R.string.install_openkeychain));
+ if (viewHolder != null) {
+ viewHolder.message_box
+ .setOnClickListener(new OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+ activity.showInstallPgpDialog();
+ }
+ });
+ }
}
+ } else if (item.getEncryption() == Message.ENCRYPTION_DECRYPTION_FAILED) {
+ displayDecryptionFailed(viewHolder);
+ } else {
+ displayTextMessage(viewHolder, item);
}
displayStatus(viewHolder, item);
@@ -524,6 +563,22 @@ public class MessageAdapter extends ArrayAdapter<Message> {
}
}
+ public void openDonwloadable(DownloadableFile file) {
+ if (!file.exists()) {
+ Toast.makeText(activity,R.string.file_deleted,Toast.LENGTH_SHORT).show();
+ return;
+ }
+ Intent openIntent = new Intent(Intent.ACTION_VIEW);
+ openIntent.setDataAndType(Uri.fromFile(file), file.getMimeType());
+ PackageManager manager = activity.getPackageManager();
+ List<ResolveInfo> infos = manager.queryIntentActivities(openIntent, 0);
+ if (infos.size() > 0) {
+ getContext().startActivity(openIntent);
+ } else {
+ Toast.makeText(activity,R.string.no_application_found_to_open_file,Toast.LENGTH_SHORT).show();
+ }
+ }
+
public interface OnContactPictureClicked {
public void onContactPictureClicked(Message message);
}