Handle SEND_MULTIPLE for images

pull/795/head
Alex Baker 6 years ago
parent e0dadacad6
commit c4ede5a0e9

@ -154,13 +154,17 @@
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain" />
<data android:mimeType="image/*" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND_MULTIPLE"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="image/*" />
</intent-filter>
</activity>
<!-- Activity for preferences -->

@ -1,25 +1,29 @@
/** TODO: make this lightweight, don't extend the entire MainActivity */
package com.todoroo.astrid.activity;
import static com.todoroo.andlib.utility.AndroidUtilities.atLeastMarshmallow;
import static org.tasks.intents.TaskIntents.getEditTaskStack;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.service.TaskCreator;
import javax.inject.Inject;
import org.tasks.data.TaskAttachment;
import org.tasks.files.FileHelper;
import org.tasks.injection.ActivityComponent;
import org.tasks.injection.InjectingAppCompatActivity;
import org.tasks.preferences.Preferences;
import java.util.ArrayList;
import javax.inject.Inject;
import timber.log.Timber;
import static com.google.common.collect.Lists.newArrayList;
import static com.todoroo.andlib.utility.AndroidUtilities.atLeastMarshmallow;
import static org.tasks.intents.TaskIntents.getEditTaskStack;
/**
* @author joshuagross
* <p>Create a new task based on incoming links from the "share" menu
@ -54,7 +58,6 @@ public final class ShareLinkActivity extends InjectingAppCompatActivity {
private void readIntent() {
Intent intent = getIntent();
String action = intent.getAction();
String type = intent.getType();
if (atLeastMarshmallow() && Intent.ACTION_PROCESS_TEXT.equals(action)) {
CharSequence text = intent.getCharSequenceExtra(Intent.EXTRA_PROCESS_TEXT);
@ -62,18 +65,32 @@ public final class ShareLinkActivity extends InjectingAppCompatActivity {
Task task = taskCreator.createWithValues(null, text.toString());
getEditTaskStack(this, null, task).startActivities();
}
} else if (Intent.ACTION_SEND.equals(action)) {
} else if (action.equals(Intent.ACTION_SEND) || action.equals(Intent.ACTION_SEND_MULTIPLE)) {
String subject = intent.getStringExtra(Intent.EXTRA_SUBJECT);
Task task = taskCreator.createWithValues(null, subject);
task.setNotes(intent.getStringExtra(Intent.EXTRA_TEXT));
if (type.startsWith("image/")) {
Uri uri = intent.getParcelableExtra(Intent.EXTRA_STREAM);
task.putTransitory(TaskAttachment.KEY, uri);
}
task.putTransitory(TaskAttachment.KEY, getAttachments(intent));
getEditTaskStack(this, null, task).startActivities();
} else {
Timber.e("Unhandled intent: %s", intent);
}
finish();
}
private ArrayList<Uri> getAttachments(Intent intent) {
String type = intent.getType();
if (type != null) {
String action = intent.getAction();
if (action.equals(Intent.ACTION_SEND)) {
if (type.startsWith("image/")) {
return newArrayList(intent.<Uri>getParcelableExtra(Intent.EXTRA_STREAM));
}
} else if (action.equals(Intent.ACTION_SEND_MULTIPLE)) {
if (type.startsWith("image/")) {
return intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
}
}
}
return new ArrayList<>();
}
}

@ -28,6 +28,8 @@ import org.tasks.injection.FragmentComponent;
import org.tasks.preferences.Preferences;
import org.tasks.ui.TaskEditControlFragment;
import java.util.ArrayList;
import javax.inject.Inject;
import androidx.annotation.Nullable;
@ -77,7 +79,9 @@ public class FilesControlSet extends TaskEditControlFragment {
if (savedInstanceState == null) {
if (task.hasTransitory(TaskAttachment.KEY)) {
copyToAttachmentDirectory(task.getTransitory(TaskAttachment.KEY));
for (Uri uri : (ArrayList<Uri>) task.getTransitory(TaskAttachment.KEY)) {
copyToAttachmentDirectory(uri);
}
}
}

Loading…
Cancel
Save