Handle send intents with images

pull/795/head
Alex Baker 7 years ago
parent 3ca0a04f1a
commit e0dadacad6

@ -158,7 +158,8 @@
<intent-filter> <intent-filter>
<action android:name="android.intent.action.SEND"/> <action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain"/> <data android:mimeType="text/plain" />
<data android:mimeType="image/*" />
</intent-filter> </intent-filter>
</activity> </activity>

@ -5,13 +5,19 @@ import static com.todoroo.andlib.utility.AndroidUtilities.atLeastMarshmallow;
import static org.tasks.intents.TaskIntents.getEditTaskStack; import static org.tasks.intents.TaskIntents.getEditTaskStack;
import android.content.Intent; import android.content.Intent;
import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.service.TaskCreator; import com.todoroo.astrid.service.TaskCreator;
import javax.inject.Inject; import javax.inject.Inject;
import org.tasks.data.TaskAttachment;
import org.tasks.files.FileHelper;
import org.tasks.injection.ActivityComponent; import org.tasks.injection.ActivityComponent;
import org.tasks.injection.InjectingAppCompatActivity; import org.tasks.injection.InjectingAppCompatActivity;
import org.tasks.preferences.Preferences;
import timber.log.Timber; import timber.log.Timber;
/** /**
@ -22,6 +28,7 @@ public final class ShareLinkActivity extends InjectingAppCompatActivity {
@Inject TaskCreator taskCreator; @Inject TaskCreator taskCreator;
@Inject TaskDao taskDao; @Inject TaskDao taskDao;
@Inject Preferences preferences;
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
@ -46,21 +53,23 @@ public final class ShareLinkActivity extends InjectingAppCompatActivity {
private void readIntent() { private void readIntent() {
Intent intent = getIntent(); Intent intent = getIntent();
String action = intent.getAction();
String type = intent.getType();
if (atLeastMarshmallow() && Intent.ACTION_PROCESS_TEXT.equals(intent.getAction())) { if (atLeastMarshmallow() && Intent.ACTION_PROCESS_TEXT.equals(action)) {
CharSequence text = intent.getCharSequenceExtra(Intent.EXTRA_PROCESS_TEXT); CharSequence text = intent.getCharSequenceExtra(Intent.EXTRA_PROCESS_TEXT);
if (text != null) { if (text != null) {
Task task = taskCreator.createWithValues(null, text.toString()); Task task = taskCreator.createWithValues(null, text.toString());
getEditTaskStack(this, null, task).startActivities(); getEditTaskStack(this, null, task).startActivities();
} }
} else if (Intent.ACTION_SEND.equals(intent.getAction())) { } else if (Intent.ACTION_SEND.equals(action)) {
String subject = intent.getStringExtra(Intent.EXTRA_SUBJECT); String subject = intent.getStringExtra(Intent.EXTRA_SUBJECT);
if (subject == null) {
subject = "";
}
Task task = taskCreator.createWithValues(null, subject); Task task = taskCreator.createWithValues(null, subject);
task.setNotes(intent.getStringExtra(Intent.EXTRA_TEXT)); task.setNotes(intent.getStringExtra(Intent.EXTRA_TEXT));
if (type.startsWith("image/")) {
Uri uri = intent.getParcelableExtra(Intent.EXTRA_STREAM);
task.putTransitory(TaskAttachment.KEY, uri);
}
getEditTaskStack(this, null, task).startActivities(); getEditTaskStack(this, null, task).startActivities();
} else { } else {
Timber.e("Unhandled intent: %s", intent); Timber.e("Unhandled intent: %s", intent);

@ -74,6 +74,13 @@ public class FilesControlSet extends TaskEditControlFragment {
for (TaskAttachment attachment : taskAttachmentDao.getAttachments(taskUuid)) { for (TaskAttachment attachment : taskAttachmentDao.getAttachments(taskUuid)) {
addAttachment(attachment); addAttachment(attachment);
} }
if (savedInstanceState == null) {
if (task.hasTransitory(TaskAttachment.KEY)) {
copyToAttachmentDirectory(task.getTransitory(TaskAttachment.KEY));
}
}
return view; return view;
} }
@ -154,10 +161,7 @@ public class FilesControlSet extends TaskEditControlFragment {
@SuppressLint("NewApi") @SuppressLint("NewApi")
private void showFile(final TaskAttachment m) { private void showFile(final TaskAttachment m) {
final Uri uri = m.parseUri(); FileHelper.startActionView(getActivity(), m.parseUri());
if (uri != null) {
FileHelper.startActionView(getActivity(), uri);
}
} }
private void copyToAttachmentDirectory(Uri input) { private void copyToAttachmentDirectory(Uri input) {

@ -31,6 +31,7 @@ import org.tasks.data.Tag;
import org.tasks.data.TagDao; import org.tasks.data.TagDao;
import org.tasks.data.TagData; import org.tasks.data.TagData;
import org.tasks.data.TagDataDao; import org.tasks.data.TagDataDao;
import org.tasks.data.TaskAttachment;
import org.tasks.preferences.DefaultFilterProvider; import org.tasks.preferences.DefaultFilterProvider;
import org.tasks.preferences.Preferences; import org.tasks.preferences.Preferences;
import timber.log.Timber; import timber.log.Timber;
@ -151,9 +152,8 @@ public class TaskCreator {
tags.add((String) value); tags.add((String) value);
break; break;
case GoogleTask.KEY: case GoogleTask.KEY:
task.putTransitory(key, value);
break;
case CaldavTask.KEY: case CaldavTask.KEY:
case TaskAttachment.KEY:
task.putTransitory(key, value); task.putTransitory(key, value);
break; break;
default: default:

@ -18,6 +18,8 @@ public final class TaskAttachment {
@Deprecated public static final Table TABLE = new Table("task_attachments"); @Deprecated public static final Table TABLE = new Table("task_attachments");
public static final String KEY = "attachment";
@Deprecated @Deprecated
public static final Property.LongProperty ID = new Property.LongProperty(TABLE, "_id"); public static final Property.LongProperty ID = new Property.LongProperty(TABLE, "_id");
/** default directory for files on external storage */ /** default directory for files on external storage */

@ -135,6 +135,10 @@ public class FileHelper {
} }
public static void startActionView(Activity context, Uri uri) { public static void startActionView(Activity context, Uri uri) {
if (uri == null) {
return;
}
MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton(); MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
String filename = getFilename(context, uri); String filename = getFilename(context, uri);
String extension = Files.getFileExtension(filename); String extension = Files.getFileExtension(filename);

Loading…
Cancel
Save