From 6659339effb3dc005792714e694ea08cdfe9bd97 Mon Sep 17 00:00:00 2001
From: Sam Whited <sam@samwhited.com>
Date: Mon, 15 Dec 2014 22:31:55 -0500
Subject: [PATCH] Allow sending of any filetype via intent

Fixes #756
---
 src/main/AndroidManifest.xml                  |  2 +-
 .../conversations/ui/ShareWithActivity.java   | 60 +++++++++++--------
 2 files changed, 37 insertions(+), 25 deletions(-)

diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml
index 937b68134..8fdfa85b4 100644
--- a/src/main/AndroidManifest.xml
+++ b/src/main/AndroidManifest.xml
@@ -114,7 +114,7 @@
 
                 <category android:name="android.intent.category.DEFAULT" />
 
-                <data android:mimeType="image/*" />
+                <data android:mimeType="*/*" />
             </intent-filter>
         </activity>
         <activity
diff --git a/src/main/java/eu/siacs/conversations/ui/ShareWithActivity.java b/src/main/java/eu/siacs/conversations/ui/ShareWithActivity.java
index 609dc2805..fffcfaca9 100644
--- a/src/main/java/eu/siacs/conversations/ui/ShareWithActivity.java
+++ b/src/main/java/eu/siacs/conversations/ui/ShareWithActivity.java
@@ -1,17 +1,5 @@
 package eu.siacs.conversations.ui;
 
-import java.util.ArrayList;
-import java.util.List;
-
-import eu.siacs.conversations.Config;
-import eu.siacs.conversations.R;
-import eu.siacs.conversations.entities.Account;
-import eu.siacs.conversations.entities.Conversation;
-import eu.siacs.conversations.entities.Message;
-import eu.siacs.conversations.ui.adapter.ConversationAdapter;
-import eu.siacs.conversations.xmpp.jid.InvalidJidException;
-import eu.siacs.conversations.xmpp.jid.Jid;
-
 import android.app.PendingIntent;
 import android.content.Intent;
 import android.net.Uri;
@@ -25,6 +13,19 @@ import android.widget.AdapterView.OnItemClickListener;
 import android.widget.ListView;
 import android.widget.Toast;
 
+import java.net.URLConnection;
+import java.util.ArrayList;
+import java.util.List;
+
+import eu.siacs.conversations.Config;
+import eu.siacs.conversations.R;
+import eu.siacs.conversations.entities.Account;
+import eu.siacs.conversations.entities.Conversation;
+import eu.siacs.conversations.entities.Message;
+import eu.siacs.conversations.ui.adapter.ConversationAdapter;
+import eu.siacs.conversations.xmpp.jid.InvalidJidException;
+import eu.siacs.conversations.xmpp.jid.Jid;
+
 public class ShareWithActivity extends XmppActivity {
 
 	private class Share {
@@ -38,9 +39,9 @@ public class ShareWithActivity extends XmppActivity {
 
 	private static final int REQUEST_START_NEW_CONVERSATION = 0x0501;
 	private ListView mListView;
-	private List<Conversation> mConversations = new ArrayList<Conversation>();
+	private List<Conversation> mConversations = new ArrayList<>();
 
-	private UiCallback<Message> attachImageCallback = new UiCallback<Message>() {
+	private UiCallback<Message> attachFileCallback = new UiCallback<Message>() {
 
 		@Override
 		public void userInputRequried(PendingIntent pi, Message object) {
@@ -78,11 +79,12 @@ public class ShareWithActivity extends XmppActivity {
 
 	@Override
 	protected void onCreate(Bundle savedInstanceState) {
-
 		super.onCreate(savedInstanceState);
 
-		getActionBar().setDisplayHomeAsUpEnabled(false);
-		getActionBar().setHomeButtonEnabled(false);
+		if (getActionBar() != null) {
+			getActionBar().setDisplayHomeAsUpEnabled(false);
+			getActionBar().setHomeButtonEnabled(false);
+		}
 
 		setContentView(R.layout.share_with);
 		setTitle(getString(R.string.title_activity_sharewith));
@@ -128,7 +130,7 @@ public class ShareWithActivity extends XmppActivity {
 	@Override
 	public void onStart() {
 		if (getIntent().getType() != null
-				&& getIntent().getType().startsWith("image/")) {
+				&& !getIntent().getType().startsWith("text/")) {
 			this.share.uri = (Uri) getIntent().getParcelableExtra(
 					Intent.EXTRA_STREAM);
 		} else {
@@ -177,12 +179,22 @@ public class ShareWithActivity extends XmppActivity {
 			selectPresence(conversation, new OnPresenceSelected() {
 				@Override
 				public void onPresenceSelected() {
-					Toast.makeText(getApplicationContext(),
-							getText(R.string.preparing_image),
-							Toast.LENGTH_LONG).show();
-					ShareWithActivity.this.xmppConnectionService
+					final String type = URLConnection.guessContentTypeFromName(share.uri.getPath());
+					if (type != null && type.startsWith("image/")) {
+						Toast.makeText(getApplicationContext(),
+								getText(R.string.preparing_image),
+								Toast.LENGTH_LONG).show();
+						ShareWithActivity.this.xmppConnectionService
 							.attachImageToConversation(conversation, share.uri,
-									attachImageCallback);
+									attachFileCallback);
+					} else {
+						Toast.makeText(getApplicationContext(),
+								getText(R.string.preparing_file),
+								Toast.LENGTH_LONG).show();
+						ShareWithActivity.this.xmppConnectionService
+							.attachFileToConversation(conversation, share.uri,
+									attachFileCallback);
+					}
 					switchToConversation(conversation, null, true);
 					finish();
 				}
@@ -195,4 +207,4 @@ public class ShareWithActivity extends XmppActivity {
 
 	}
 
-}
\ No newline at end of file
+}