Indent subtasks in share output

pull/996/head
Alex Baker 5 years ago
parent 82307a9d78
commit c57aa4d608

@ -10,6 +10,9 @@ import static com.todoroo.andlib.sql.SqlConstants.LEFT_PARENTHESIS;
import static com.todoroo.andlib.sql.SqlConstants.RIGHT_PARENTHESIS; import static com.todoroo.andlib.sql.SqlConstants.RIGHT_PARENTHESIS;
import static com.todoroo.andlib.sql.SqlConstants.SPACE; import static com.todoroo.andlib.sql.SqlConstants.SPACE;
import com.google.common.base.Joiner;
import java.util.List;
public class Field extends DBObject<Field> { public class Field extends DBObject<Field> {
protected Field(String expression) { protected Field(String expression) {
@ -63,4 +66,20 @@ public class Field extends DBObject<Field> {
} }
}; };
} }
public <T> Criterion in(List<T> entries) {
final Field field = this;
return new Criterion(Operator.in) {
@Override
protected void populate(StringBuilder sb) {
sb.append(field)
.append(SPACE)
.append(Operator.in)
.append(SPACE)
.append(LEFT_PARENTHESIS)
.append(Joiner.on(",").join(entries))
.append(RIGHT_PARENTHESIS);
}
};
}
} }

@ -7,11 +7,13 @@
package com.todoroo.astrid.activity; package com.todoroo.astrid.activity;
import static android.app.Activity.RESULT_OK; import static android.app.Activity.RESULT_OK;
import static com.google.common.base.Strings.padStart;
import static com.google.common.collect.Lists.newArrayList; import static com.google.common.collect.Lists.newArrayList;
import static com.google.common.collect.Lists.transform; import static com.google.common.collect.Lists.transform;
import static com.todoroo.andlib.utility.AndroidUtilities.assertMainThread; import static com.todoroo.andlib.utility.AndroidUtilities.assertMainThread;
import static org.tasks.activities.RemoteListPicker.newRemoteListSupportPicker; import static org.tasks.activities.RemoteListPicker.newRemoteListSupportPicker;
import static org.tasks.caldav.CaldavCalendarSettingsActivity.EXTRA_CALDAV_CALENDAR; import static org.tasks.caldav.CaldavCalendarSettingsActivity.EXTRA_CALDAV_CALENDAR;
import static org.tasks.db.DbUtils.collect;
import android.app.Activity; import android.app.Activity;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
@ -58,6 +60,7 @@ import com.todoroo.astrid.adapter.TaskAdapterProvider;
import com.todoroo.astrid.api.CaldavFilter; import com.todoroo.astrid.api.CaldavFilter;
import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.GtasksFilter; import com.todoroo.astrid.api.GtasksFilter;
import com.todoroo.astrid.api.IdListFilter;
import com.todoroo.astrid.api.SearchFilter; import com.todoroo.astrid.api.SearchFilter;
import com.todoroo.astrid.api.TagFilter; import com.todoroo.astrid.api.TagFilter;
import com.todoroo.astrid.core.BuiltInFilterExposer; import com.todoroo.astrid.core.BuiltInFilterExposer;
@ -488,7 +491,7 @@ public final class TaskListFragment extends InjectingFragment
((PlaceFilter) filter).openMap(context); ((PlaceFilter) filter).openMap(context);
return true; return true;
case R.id.menu_share: case R.id.menu_share:
send(transform(taskDao.fetchTasks(preferences, filter), TaskContainer::getTask)); send(taskDao.fetchTasks(preferences, filter));
return true; return true;
default: default:
return onOptionsItemSelected(item); return onOptionsItemSelected(item);
@ -752,7 +755,10 @@ public final class TaskListFragment extends InjectingFragment
recyclerAdapter.notifyDataSetChanged(); recyclerAdapter.notifyDataSetChanged();
return true; return true;
case R.id.menu_share: case R.id.menu_share:
send(taskDao.fetch(taskAdapter.getSelected())); send(
collect(
taskAdapter.getSelected(),
ids -> taskDao.fetchTasks(preferences, new IdListFilter(ids))));
return true; return true;
case R.id.delete: case R.id.delete:
dialogBuilder dialogBuilder
@ -775,13 +781,17 @@ public final class TaskListFragment extends InjectingFragment
} }
} }
private void send(List<Task> tasks) { private void send(List<TaskContainer> tasks) {
Intent intent = new Intent(Intent.ACTION_SEND); Intent intent = new Intent(Intent.ACTION_SEND);
String output = String output =
Joiner.on("\n") Joiner.on("\n")
.join( .join(
transform( transform(
tasks, t -> String.format("%s %s", t.isCompleted() ? "☑" : "☐", t.getTitle()))); tasks, t -> {
String checkbox = t.isCompleted() ? "☑" : "☐";
checkbox = padStart(checkbox, 1 + t.getIndent() * 3, ' ');
return String.format("%s %s", checkbox, t.getTitle());
}));
intent.putExtra(Intent.EXTRA_SUBJECT, filter.listingTitle); intent.putExtra(Intent.EXTRA_SUBJECT, filter.listingTitle);
intent.putExtra(Intent.EXTRA_TEXT, output); intent.putExtra(Intent.EXTRA_TEXT, output);
intent.setType("text/plain"); intent.setType("text/plain");

@ -0,0 +1,42 @@
package com.todoroo.astrid.api;
import android.os.Parcel;
import com.todoroo.andlib.sql.Join;
import com.todoroo.andlib.sql.QueryTemplate;
import com.todoroo.astrid.data.Task;
import java.util.List;
import org.tasks.data.Tag;
public class IdListFilter extends Filter {
/** Parcelable Creator Object */
public static final Creator<IdListFilter> CREATOR =
new Creator<IdListFilter>() {
/** {@inheritDoc} */
@Override
public IdListFilter createFromParcel(Parcel source) {
IdListFilter item = new IdListFilter();
item.readFromParcel(source);
return item;
}
/** {@inheritDoc} */
@Override
public IdListFilter[] newArray(int size) {
return new IdListFilter[size];
}
};
private IdListFilter() {}
public IdListFilter(List<Long>ids) {
super("", getQueryTemplate(ids));
}
private static QueryTemplate getQueryTemplate(List<Long> ids) {
return new QueryTemplate()
.join(Join.left(Tag.TABLE, Tag.TASK.eq(Task.ID)))
.where(Task.ID.in(ids));
}
}
Loading…
Cancel
Save