From 2e41fe756ae2953ce320488f5188237238b8ef1b Mon Sep 17 00:00:00 2001 From: "B. Petersen" Date: Wed, 22 Feb 2017 20:43:05 +0100 Subject: [PATCH] Show correct error box when an attachment cannot be opened. --- CHANGELOG.md | 1 + .../com/b44t/messenger/AndroidUtilities.java | 31 +++-- .../com/b44t/messenger/MessageObject.java | 4 - .../main/java/com/b44t/messenger/MrMsg.java | 1 + .../main/java/com/b44t/ui/ChatActivity.java | 108 ++---------------- .../src/main/res/values-de/strings.xml | 3 +- .../src/main/res/values-es/strings.xml | 1 - .../src/main/res/values-fr/strings.xml | 1 - .../src/main/res/values-it/strings.xml | 1 - .../src/main/res/values-nl/strings.xml | 1 - .../src/main/res/values-pl/strings.xml | 1 - .../src/main/res/values-pt/strings.xml | 1 - MessengerProj/src/main/res/values/strings.xml | 1 - 13 files changed, 32 insertions(+), 123 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8f62ae49e..bf85bc468 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## UNRELEASED +* Allow sending and opening attachments of any type * Send contacts and email addresses * Clickable email addresses * Update Polish translation diff --git a/MessengerProj/src/main/java/com/b44t/messenger/AndroidUtilities.java b/MessengerProj/src/main/java/com/b44t/messenger/AndroidUtilities.java index cffef509b..764a1d816 100644 --- a/MessengerProj/src/main/java/com/b44t/messenger/AndroidUtilities.java +++ b/MessengerProj/src/main/java/com/b44t/messenger/AndroidUtilities.java @@ -988,21 +988,32 @@ public class AndroidUtilities { } */ + public static String getMimetypeForView(MessageObject message) + { + String mimeType = "application/octet-stream"; + String fileName = message.messageOwner.media.document.file_name; + try { + MimeTypeMap mimeMap = MimeTypeMap.getSingleton(); + int idx = fileName.lastIndexOf('.'); + if (idx != -1) { + String ext = fileName.substring(idx + 1); + mimeType = mimeMap.getMimeTypeFromExtension(ext.toLowerCase()); + } + if (mimeType == null) { + mimeType = message.messageOwner.media.document.mime_type; + } + } + catch(Exception e) { + } + return mimeType; + } + public static void openForView(MessageObject message, Activity activity) throws Exception { String fileName = message.messageOwner.media.document.file_name; Uri toOpen = Uri.parse("content://" + BuildConfig.APPLICATION_ID + ".attachments/" + fileName); - String mimeType = null; - MimeTypeMap mimeMap = MimeTypeMap.getSingleton(); - int idx = fileName.lastIndexOf('.'); - if (idx != -1) { - String ext = fileName.substring(idx + 1); - mimeType = mimeMap.getMimeTypeFromExtension(ext.toLowerCase()); - } - if (mimeType == null) { - mimeType = message.messageOwner.media.document.mime_type; - } + String mimeType = getMimetypeForView(message); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(toOpen, mimeType); diff --git a/MessengerProj/src/main/java/com/b44t/messenger/MessageObject.java b/MessengerProj/src/main/java/com/b44t/messenger/MessageObject.java index d1f5940a3..e3b33124d 100644 --- a/MessengerProj/src/main/java/com/b44t/messenger/MessageObject.java +++ b/MessengerProj/src/main/java/com/b44t/messenger/MessageObject.java @@ -727,10 +727,6 @@ public class MessageObject { return messageOwner.media instanceof TLRPC.TL_messageMediaDocument && isGifDocument(messageOwner.media.document); } - public boolean isWebpageDocument() { - return false; - } - public boolean isNewGif() { return messageOwner.media != null && isNewGifDocument(messageOwner.media.document); } diff --git a/MessengerProj/src/main/java/com/b44t/messenger/MrMsg.java b/MessengerProj/src/main/java/com/b44t/messenger/MrMsg.java index 567273145..71b49ad3f 100644 --- a/MessengerProj/src/main/java/com/b44t/messenger/MrMsg.java +++ b/MessengerProj/src/main/java/com/b44t/messenger/MrMsg.java @@ -199,6 +199,7 @@ public class MrMsg { ret.media = new TLRPC.TL_messageMediaDocument(); ret.media.caption = ""; ret.media.document = new TLRPC.TL_document(); + ret.media.document.file_name = getFilename(); ret.media.document.mr_path = path; if( type == MR_MSG_AUDIO || type == MR_MSG_VOICE ) { TLRPC.TL_documentAttributeAudio attr = new TLRPC.TL_documentAttributeAudio(); diff --git a/MessengerProj/src/main/java/com/b44t/ui/ChatActivity.java b/MessengerProj/src/main/java/com/b44t/ui/ChatActivity.java index 462b76596..d5e412624 100644 --- a/MessengerProj/src/main/java/com/b44t/ui/ChatActivity.java +++ b/MessengerProj/src/main/java/com/b44t/ui/ChatActivity.java @@ -72,7 +72,6 @@ import com.b44t.messenger.browser.Browser; import com.b44t.messenger.support.widget.LinearLayoutManager; import com.b44t.messenger.support.widget.RecyclerView; import com.b44t.messenger.ApplicationLoader; -import com.b44t.messenger.FileLoader; import com.b44t.messenger.ConnectionsManager; import com.b44t.messenger.TLRPC; import com.b44t.messenger.FileLog; @@ -154,7 +153,6 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not private boolean openSearchKeyboard; - private MessageObject forwaringMessage; private boolean paused = true; private boolean wasPaused = false; private boolean readWhenResume = false; @@ -231,7 +229,6 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not NotificationCenter.getInstance().addObserver(this, NotificationCenter.replaceMessagesObjects); NotificationCenter.getInstance().addObserver(this, NotificationCenter.notificationsSettingsUpdated); NotificationCenter.getInstance().addObserver(this, NotificationCenter.errSelfNotInGroup); - //NotificationCenter.getInstance().addObserver(this, NotificationCenter.chatSearchResultsAvailable); if (AndroidUtilities.isTablet()) { NotificationCenter.getInstance().postNotificationName(NotificationCenter.openedChatChanged, dialog_id, false); @@ -363,7 +360,6 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not NotificationCenter.getInstance().removeObserver(this, NotificationCenter.replaceMessagesObjects); NotificationCenter.getInstance().removeObserver(this, NotificationCenter.notificationsSettingsUpdated); NotificationCenter.getInstance().removeObserver(this, NotificationCenter.errSelfNotInGroup); - //NotificationCenter.getInstance().removeObserver(this, NotificationCenter.chatSearchResultsAvailable); NotificationCenter.getInstance().removeObserver(this, NotificationCenter.audioPlayStateChanged); if (AndroidUtilities.isTablet()) { @@ -1423,27 +1419,6 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not }); } - /* - private void clearChatData() { - messages.clear(); - messagesByDays.clear(); - chatListView.setEmptyView(null); - messagesDict.clear(); - maxMessageId = Integer.MAX_VALUE; - minMessageId = Integer.MIN_VALUE; - maxDate = Integer.MIN_VALUE; - minDate = 0; - endReached = false; - forwardEndReached = true; - first = true; - firstLoading = true; - loadingForward = false; - startLoadFromMessageId = 0; - last_message_id = 0; - chatAdapter.notifyDataSetChanged(); - } - */ - private void moveScrollToLastMessage() { if( m_msglist.length > 0 ) { chatLayoutManager.scrollToPositionWithOffset(m_msglist.length - 1, -100000 - chatListView.getPaddingTop()); @@ -2463,7 +2438,6 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not return; } - forwaringMessage = null; selectedMessagesIds.clear(); actionBar.hideActionMode(); actionBar.createActionMode(); @@ -2536,48 +2510,6 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not dialogsFragment.finishFragment(false); } } - - /* - if (dialog_id != 0 && (forwaringMessage != null || !selectedMessagesIds.isEmpty() )) { - if (forwaringMessage != null) { - forwaringMessage = null; - } else { - selectedMessagesIds.clear(); - actionBar.hideActionMode(); - } - - if (did != dialog_id) { - int lower_part = (int) did; - if (lower_part != 0) { - Bundle args = new Bundle(); - args.putBoolean("scrollToTopOnResume", scrollToTopOnResume); - if (lower_part > 0) { - args.putInt("user_id", lower_part); - } else if (lower_part < 0) { - args.putInt("chat_id", -lower_part); - } - - ChatActivity chatActivity = new ChatActivity(args); - if (presentFragment(chatActivity, true)) { - if (!AndroidUtilities.isTablet()) { - removeSelfFromStack(); - } - } else { - activity.finishFragment(); - } - } else { - activity.finishFragment(); - } - } else { - activity.finishFragment(); - moveScrollToLastMessage(); - if (AndroidUtilities.isTablet()) { - actionBar.hideActionMode(); - } - updateVisibleRows(); - } - } - */ } @Override @@ -2656,20 +2588,6 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not return messageObjects; } - private void alertUserOpenError(MessageObject message) { - if (getParentActivity() == null) { - return; - } - AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); - builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), null); - if (message.type == MessageObject.MO_TYPE3_VIDEO) { - builder.setMessage(LocaleController.getString("NoPlayerInstalled", R.string.NoPlayerInstalled)); - } else { - builder.setMessage(LocaleController.formatString("NoHandleAppInstalled", R.string.NoHandleAppInstalled, message.getDocument().mime_type)); - } - showDialog(builder.create()); - } - private void openSearchWithText(String text) { avatarContainer.setVisibility(View.GONE); headerItem.setVisibility(View.GONE); @@ -2963,29 +2881,19 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not @Override public void didPressedImage(ChatMessageCell cell) { MessageObject message = cell.getMessageObject(); - if (Build.VERSION.SDK_INT >= 16 && message.isVideo() || message.type == MessageObject.MO_TYPE1_PHOTO || message.type == MessageObject.MO_TYPE0_TEXT && !message.isWebpageDocument() || message.isGif()) { + if( (Build.VERSION.SDK_INT >= 16 && message.isVideo()) || message.type == MessageObject.MO_TYPE1_PHOTO || message.isGif()) { PhotoViewer.getInstance().setParentActivity(getParentActivity()); PhotoViewer.getInstance().openPhoto(message, message.type != MessageObject.MO_TYPE0_TEXT ? dialog_id : 0, 0, ChatActivity.this); - } else if (message.type == MessageObject.MO_TYPE3_VIDEO) { - try { - File f = null; - if (message.messageOwner.attachPath != null && message.messageOwner.attachPath.length() != 0) { - f = new File(message.messageOwner.attachPath); - } - if (f == null || !f.exists()) { - f = FileLoader.getPathToMessage(message.messageOwner); - } - Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setDataAndType(Uri.fromFile(f), "video/mp4"); - getParentActivity().startActivityForResult(intent, 500); - } catch (Exception e) { - alertUserOpenError(message); - } - } else if (message.type == MessageObject.MO_TYPE9_FILE || message.type == MessageObject.MO_TYPE0_TEXT) { + } else if (message.type == MessageObject.MO_TYPE9_FILE || message.type == MessageObject.MO_TYPE3_VIDEO ) { try { AndroidUtilities.openForView(message, getParentActivity()); } catch (Exception e) { - alertUserOpenError(message); + if ( getParentActivity()!=null ) { + AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); + builder.setPositiveButton(ApplicationLoader.applicationContext.getString(R.string.OK), null); + builder.setMessage(LocaleController.formatString("NoHandleAppInstalled", R.string.NoHandleAppInstalled, AndroidUtilities.getMimetypeForView(message))); + showDialog(builder.create()); + } } } } diff --git a/MessengerProj/src/main/res/values-de/strings.xml b/MessengerProj/src/main/res/values-de/strings.xml index 323e70320..a67e417f4 100644 --- a/MessengerProj/src/main/res/values-de/strings.xml +++ b/MessengerProj/src/main/res/values-de/strings.xml @@ -277,8 +277,7 @@ Ich Lädt … - Du hast keinen Videoplayer. Bitte installiere einen um fortzufahren. - Du hast keine Applikationen, die den Dateityp \'%1$s\' öffnen könnten. Bitte installiere eine entsprechende Anwendung um fortzufahren. + Um den Dateityp \"%1$s\" öffnen zu können, muss eine entsprechende App installiert werden. Kontakt befindet sich schon in der Gruppe. Ausgewählte Nachrichten an ]]>%1$s]]> weiterleiten? Nachricht an ]]>%1$s]]> senden? diff --git a/MessengerProj/src/main/res/values-es/strings.xml b/MessengerProj/src/main/res/values-es/strings.xml index 186d40709..7dafe2650 100644 --- a/MessengerProj/src/main/res/values-es/strings.xml +++ b/MessengerProj/src/main/res/values-es/strings.xml @@ -274,7 +274,6 @@ Tú Cargando… - No tienes reproductor de vídeo. Por favor, instala uno para continuar. No tienes aplicaciones que puedan manejar el tipo de archivo “%1$s”. Por favor, instala una para continuar. ¿Añadir a ]]>%1$s]]> al grupo? Este usuario ya está en el grupo diff --git a/MessengerProj/src/main/res/values-fr/strings.xml b/MessengerProj/src/main/res/values-fr/strings.xml index 6f6fc4f4e..795b6f91c 100644 --- a/MessengerProj/src/main/res/values-fr/strings.xml +++ b/MessengerProj/src/main/res/values-fr/strings.xml @@ -272,7 +272,6 @@ Moi Chargement… - Vous n\'avez pas de lecteur vidéo, installez-en un pour continuer Vous n\'avez pas d\'application qui peut gérer le type \'%1$s\', veuillez en installer un pour continuer Ce contact est déjà dans ce groupe Renvoyer les messages sélectionnés à ]]>%1$s]]> ? diff --git a/MessengerProj/src/main/res/values-it/strings.xml b/MessengerProj/src/main/res/values-it/strings.xml index 6a9f40cf9..75049b4a3 100644 --- a/MessengerProj/src/main/res/values-it/strings.xml +++ b/MessengerProj/src/main/res/values-it/strings.xml @@ -274,7 +274,6 @@ Tu Caricamento… - Non hai un lettore video, per favore installane uno per continuare Non hai applicazioni che possono gestire il tipo di file \'%1$s\': installane una per proseguire Aggiungere ]]>%1$s]]> al gruppo? Questo utente è già membro del gruppo diff --git a/MessengerProj/src/main/res/values-nl/strings.xml b/MessengerProj/src/main/res/values-nl/strings.xml index 415af378a..e9ddbbee3 100644 --- a/MessengerProj/src/main/res/values-nl/strings.xml +++ b/MessengerProj/src/main/res/values-nl/strings.xml @@ -274,7 +274,6 @@ Jij Bezig met laden - Je hebt geen mediaspeler. Installeer een mediaspeler om door te gaan. Je hebt geen apps die bestandstype \'%1$s\' kunnen verwerken, gelieve een compatibele app te installeren ]]>%1$s]]> toevoegen aan de groep? Gebruiker is al een groepslid diff --git a/MessengerProj/src/main/res/values-pl/strings.xml b/MessengerProj/src/main/res/values-pl/strings.xml index a2882ef2e..7342419b7 100644 --- a/MessengerProj/src/main/res/values-pl/strings.xml +++ b/MessengerProj/src/main/res/values-pl/strings.xml @@ -277,7 +277,6 @@ Ja Wczytywanie… - Nie masz odtwarzacza wideo. Zainstaluj jakiś, aby kontynuować. Nie masz aplikacji obsługujących pliki typu „%1$s”. Zainstaluj jakąś, aby kontynuować. Ten kontakt jest już w tej grupie Przekazać wybrane wiadomości do ]]>%1$s]]>? diff --git a/MessengerProj/src/main/res/values-pt/strings.xml b/MessengerProj/src/main/res/values-pt/strings.xml index ba7d5fb77..1b5628b99 100644 --- a/MessengerProj/src/main/res/values-pt/strings.xml +++ b/MessengerProj/src/main/res/values-pt/strings.xml @@ -274,7 +274,6 @@ Você Carregando… - Você não possui um reprodutor de vídeo, instale um para continuar Você não possui um aplicativo que suporte o tipo de arquivo \'%1$s\', por favor instale um para continuar Adicionar ]]>%1$s]]> no grupo? Este usuário já está neste grupo diff --git a/MessengerProj/src/main/res/values/strings.xml b/MessengerProj/src/main/res/values/strings.xml index 465253ba9..ff62044e9 100644 --- a/MessengerProj/src/main/res/values/strings.xml +++ b/MessengerProj/src/main/res/values/strings.xml @@ -277,7 +277,6 @@ Me Loading … - You don\'t have a video player, please install one to continue You don\'t have applications that can handle the file type \'%1$s\', please install one to continue This contact is already in this group. Forward selected messages to ]]>%1$s]]>?