Expand/collapse all subtasks for list

gtask_related_email
Alex Baker 5 years ago
parent 7e4279bdb6
commit 0208f00502

@ -313,7 +313,10 @@ public final class TaskListFragment extends InjectingFragment
hidden.setChecked(preferences.getBoolean(R.string.p_show_hidden_tasks, false));
completed.setChecked(preferences.getBoolean(R.string.p_show_completed_tasks, false));
}
if (taskAdapter.supportsManualSorting()) {
menu.findItem(R.id.menu_collapse_subtasks).setVisible(false);
menu.findItem(R.id.menu_expand_subtasks).setVisible(false);
}
menu.findItem(R.id.menu_voice_add).setVisible(device.voiceInputAvailable());
search = menu.findItem(R.id.menu_search).setOnActionExpandListener(this);
@ -401,6 +404,14 @@ public final class TaskListFragment extends InjectingFragment
tagSettings.putExtra(TagSettingsActivity.EXTRA_TAG_DATA, ((TagFilter) filter).getTagData());
startActivityForResult(tagSettings, REQUEST_TAG_SETTINGS);
return true;
case R.id.menu_expand_subtasks:
taskDao.setCollapsed(taskListViewModel.getValue(), false);
localBroadcastManager.broadcastRefresh();
return true;
case R.id.menu_collapse_subtasks:
taskDao.setCollapsed(taskListViewModel.getValue(), true);
localBroadcastManager.broadcastRefresh();
return true;
default:
return onOptionsItemSelected(item);
}

@ -6,10 +6,13 @@
package com.todoroo.astrid.dao;
import static com.google.common.collect.Iterables.filter;
import static com.google.common.collect.Iterables.transform;
import static com.google.common.collect.Lists.transform;
import static com.todoroo.andlib.sql.SqlConstants.COUNT;
import static com.todoroo.andlib.utility.AndroidUtilities.atLeastLollipop;
import static com.todoroo.andlib.utility.DateUtilities.now;
import static org.tasks.db.DbUtils.batch;
import androidx.room.Dao;
import androidx.room.Insert;
@ -165,6 +168,16 @@ public abstract class TaskDao {
@Query("UPDATE tasks SET collapsed = :collapsed WHERE _id = :id")
public abstract void setCollapsed(long id, boolean collapsed);
@Transaction
public void setCollapsed(List<TaskContainer> tasks, boolean collapsed) {
batch(
transform(filter(tasks, TaskContainer::hasChildren), TaskContainer::getId),
l -> collapse(l, collapsed));
}
@Query("UPDATE tasks SET collapsed = :collapsed WHERE _id IN (:ids)")
abstract void collapse(List<Long> ids, boolean collapsed);
/**
* Saves the given task to the database.getDatabase(). Task must already exist. Returns true on
* success.

@ -30,6 +30,14 @@
android:checkable="true"
android:title="@string/show_completed"/>
</group>
<item
android:id="@+id/menu_expand_subtasks"
android:title="@string/expand_subtasks"
app:showAsAction="never" />
<item
android:id="@+id/menu_collapse_subtasks"
android:title="@string/collapse_subtasks"
app:showAsAction="never" />
<item
android:id="@+id/menu_clear_completed"
android:title="@string/gtasks_GTA_clear_completed"

@ -554,4 +554,6 @@ File %1$s contained %2$s.\n\n
<string name="monthly">Monthly</string>
<string name="annually">Yearly</string>
<string name="caldav_account_repeating_tasks">Let server schedule recurring tasks</string>
<string name="expand_subtasks">Expand subtasks</string>
<string name="collapse_subtasks">Collapse subtasks</string>
</resources>

Loading…
Cancel
Save