diff --git a/app/src/main/java/com/todoroo/astrid/tags/TagsControlSet.java b/app/src/main/java/com/todoroo/astrid/tags/TagsControlSet.java index 378e499c3..779c3b4c6 100644 --- a/app/src/main/java/com/todoroo/astrid/tags/TagsControlSet.java +++ b/app/src/main/java/com/todoroo/astrid/tags/TagsControlSet.java @@ -147,7 +147,7 @@ public final class TagsControlSet extends TaskEditControlFragment { if (tagData == null) { continue; } - Chip chip = chipProvider.newClosableChip(getActivity(), tagData); + Chip chip = chipProvider.newClosableChip(tagData); chipProvider.apply(chip, tagData); chip.setOnClickListener(view -> onClickRow()); chip.setOnCloseIconClickListener( diff --git a/app/src/main/java/org/tasks/tasklist/SubtaskViewHolder.java b/app/src/main/java/org/tasks/tasklist/SubtaskViewHolder.java index 8130885e5..7f33ffe80 100644 --- a/app/src/main/java/org/tasks/tasklist/SubtaskViewHolder.java +++ b/app/src/main/java/org/tasks/tasklist/SubtaskViewHolder.java @@ -3,7 +3,6 @@ package org.tasks.tasklist; import static com.todoroo.andlib.utility.AndroidUtilities.atLeastLollipop; import android.annotation.SuppressLint; -import android.app.Activity; import android.graphics.Paint; import android.util.DisplayMetrics; import android.view.View; @@ -15,19 +14,19 @@ import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; import com.google.android.material.chip.Chip; +import com.google.android.material.chip.ChipGroup; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.ui.CheckableImageView; import org.tasks.R; import org.tasks.data.TaskContainer; -import org.tasks.locale.Locale; import org.tasks.ui.CheckBoxProvider; +import org.tasks.ui.ChipProvider; public class SubtaskViewHolder extends RecyclerView.ViewHolder { - private final Activity context; - private final Locale locale; private final Callbacks callbacks; private final DisplayMetrics metrics; + private final ChipProvider chipProvider; private final CheckBoxProvider checkBoxProvider; public TaskContainer task; @@ -41,23 +40,21 @@ public class SubtaskViewHolder extends RecyclerView.ViewHolder { @BindView(R.id.completeBox) CheckableImageView completeBox; - @BindView(R.id.chip_button) - Chip chip; + @BindView(R.id.chip_group) + ChipGroup chipGroup; private int indent; SubtaskViewHolder( - Activity context, - Locale locale, ViewGroup view, Callbacks callbacks, DisplayMetrics metrics, + ChipProvider chipProvider, CheckBoxProvider checkBoxProvider) { super(view); - this.context = context; - this.locale = locale; this.callbacks = callbacks; this.metrics = metrics; + this.chipProvider = chipProvider; this.checkBoxProvider = checkBoxProvider; ButterKnife.bind(this, view); @@ -79,14 +76,13 @@ public class SubtaskViewHolder extends RecyclerView.ViewHolder { this.task = task; setIndent(task.indent); if (task.hasChildren()) { - chip.setText(locale.formatNumber(task.children)); - chip.setVisibility(View.VISIBLE); - chip.setChipIconResource( - task.isCollapsed() - ? R.drawable.ic_keyboard_arrow_up_black_24dp - : R.drawable.ic_keyboard_arrow_down_black_24dp); + chipGroup.removeAllViews(); + Chip child = chipProvider.newSubtaskChip(task, true); + child.setOnClickListener(v -> callbacks.toggleSubtask(task.getId(), !task.isCollapsed())); + chipGroup.addView(child); + chipGroup.setVisibility(View.VISIBLE); } else { - chip.setVisibility(View.GONE); + chipGroup.setVisibility(View.GONE); } nameView.setText(task.getTitle()); @@ -112,11 +108,6 @@ public class SubtaskViewHolder extends RecyclerView.ViewHolder { callbacks.openSubtask(task.getTask()); } - @OnClick(R.id.chip_button) - void toggleSubtasks(View v) { - callbacks.toggleSubtask(task.getId(), !task.isCollapsed()); - } - @OnClick(R.id.completeBox) void onCompleteBoxClick(View v) { if (task == null) { diff --git a/app/src/main/java/org/tasks/tasklist/SubtasksRecyclerAdapter.java b/app/src/main/java/org/tasks/tasklist/SubtasksRecyclerAdapter.java index 5f0f861fd..a33fba9ef 100644 --- a/app/src/main/java/org/tasks/tasklist/SubtasksRecyclerAdapter.java +++ b/app/src/main/java/org/tasks/tasklist/SubtasksRecyclerAdapter.java @@ -13,16 +13,16 @@ import androidx.recyclerview.widget.RecyclerView; import java.util.List; import org.tasks.R; import org.tasks.data.TaskContainer; -import org.tasks.locale.Locale; import org.tasks.tasklist.SubtaskViewHolder.Callbacks; import org.tasks.ui.CheckBoxProvider; +import org.tasks.ui.ChipProvider; public class SubtasksRecyclerAdapter extends RecyclerView.Adapter implements ListUpdateCallback { private final DisplayMetrics metrics; private final Activity activity; - private final Locale locale; + private final ChipProvider chipProvider; private final CheckBoxProvider checkBoxProvider; private final Callbacks callbacks; private final AsyncListDiffer differ; @@ -30,11 +30,11 @@ public class SubtasksRecyclerAdapter extends RecyclerView.Adapter chips = - chipProvider.getChips( - context, - filter, - indent > 0, - hideSubtaskChip, - task); + List chips = chipProvider.getChips(filter, indent > 0, hideSubtaskChip, task); if (chips.isEmpty()) { chipGroup.setVisibility(View.GONE); } else { diff --git a/app/src/main/java/org/tasks/ui/ChipProvider.java b/app/src/main/java/org/tasks/ui/ChipProvider.java index e9f4b2d5f..0c54b80ee 100644 --- a/app/src/main/java/org/tasks/ui/ChipProvider.java +++ b/app/src/main/java/org/tasks/ui/ChipProvider.java @@ -7,7 +7,6 @@ import static com.google.common.collect.Sets.newHashSet; import static com.todoroo.andlib.utility.AndroidUtilities.assertMainThread; import android.app.Activity; -import android.content.Context; import android.content.res.ColorStateList; import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; @@ -29,7 +28,7 @@ import org.tasks.R; import org.tasks.billing.Inventory; import org.tasks.data.TagData; import org.tasks.data.TaskContainer; -import org.tasks.injection.ForActivity; +import org.tasks.locale.Locale; import org.tasks.preferences.Preferences; import org.tasks.themes.ColorProvider; import org.tasks.themes.CustomIcons; @@ -37,10 +36,12 @@ import org.tasks.themes.ThemeColor; public class ChipProvider { + private final Activity activity; private final Inventory inventory; private final int iconAlpha; private final ChipListCache lists; private final ColorProvider colorProvider; + private final Locale locale; private final Ordering orderByName = new Ordering() { @Override @@ -54,16 +55,19 @@ public class ChipProvider { @Inject public ChipProvider( - @ForActivity Context context, + Activity activity, Inventory inventory, ChipListCache lists, Preferences preferences, - ColorProvider colorProvider) { + ColorProvider colorProvider, + Locale locale) { + this.activity = activity; this.inventory = inventory; iconAlpha = - (int) (255 * ResourcesCompat.getFloat(context.getResources(), R.dimen.alpha_secondary)); + (int) (255 * ResourcesCompat.getFloat(activity.getResources(), R.dimen.alpha_secondary)); this.lists = lists; this.colorProvider = colorProvider; + this.locale = locale; setStyle(preferences.getIntegerFromString(R.string.p_chip_style, 0)); setAppearance(preferences.getIntegerFromString(R.string.p_chip_appearance, 0)); @@ -78,8 +82,25 @@ public class ChipProvider { showIcon = appearance != 1; } + public Chip newSubtaskChip(TaskContainer task, boolean compact) { + Chip chip = newChip(task); + apply( + chip, + task.isCollapsed() + ? R.drawable.ic_keyboard_arrow_up_black_24dp + : R.drawable.ic_keyboard_arrow_down_black_24dp, + compact + ? locale.formatNumber(task.children) + : activity + .getResources() + .getQuantityString(R.plurals.subtask_count, task.children, task.children), + 0, + true, + true); + return chip; + } + public List getChips( - Activity activity, Filter filter, boolean isSubtask, boolean hideSubtaskChip, @@ -88,22 +109,10 @@ public class ChipProvider { List chips = new ArrayList<>(); if (!hideSubtaskChip && task.hasChildren()) { - Chip chip = newChip(activity, task); - apply( - chip, - task.isCollapsed() - ? R.drawable.ic_keyboard_arrow_up_black_24dp - : R.drawable.ic_keyboard_arrow_down_black_24dp, - activity - .getResources() - .getQuantityString(R.plurals.subtask_count, task.children, task.children), - 0, - true, - true); - chips.add(chip); + chips.add(newSubtaskChip(task, !showText)); } if (task.hasLocation()) { - Chip chip = newChip(activity, task.getLocation()); + Chip chip = newChip(task.getLocation()); apply(chip, R.drawable.ic_outline_place_24px, task.getLocation().getDisplayName(), 0, showText, showIcon); chips.add(chip); } @@ -111,13 +120,11 @@ public class ChipProvider { if (!Strings.isNullOrEmpty(task.getGoogleTaskList()) && !(filter instanceof GtasksFilter)) { chips.add( newChip( - activity, lists.getGoogleTaskList(task.getGoogleTaskList()), R.drawable.ic_outline_cloud_24px)); } else if (!Strings.isNullOrEmpty(task.getCaldav()) && !(filter instanceof CaldavFilter)) { chips.add( - newChip( - activity, lists.getCaldavList(task.getCaldav()), R.drawable.ic_outline_cloud_24px)); + newChip(lists.getCaldavList(task.getCaldav()), R.drawable.ic_outline_cloud_24px)); } } String tagString = task.getTagsString(); @@ -129,7 +136,7 @@ public class ChipProvider { chips.addAll( transform( orderByName.sortedCopy(filter(transform(tags, lists::getTag), Predicates.notNull())), - tag -> newChip(activity, tag, R.drawable.ic_outline_label_24px))); + tag -> newChip(tag, R.drawable.ic_outline_label_24px))); } removeIf(chips, Predicates.isNull()); @@ -156,33 +163,33 @@ public class ChipProvider { true); } - private @Nullable Chip newChip(Activity activity, Filter filter, int defIcon) { - return newChip(activity, filter, defIcon, showText, showIcon); + private @Nullable Chip newChip(Filter filter, int defIcon) { + return newChip(filter, defIcon, showText, showIcon); } - Chip newChip(Activity activity, Filter filter, int defIcon, boolean showText, boolean showIcon) { + Chip newChip(Filter filter, int defIcon, boolean showText, boolean showIcon) { if (filter == null) { return null; } - Chip chip = newChip(activity, filter); + Chip chip = newChip(filter); apply(chip, getIcon(filter.icon, defIcon), filter.listingTitle, filter.tint, showText, showIcon); return chip; } - public Chip newClosableChip(Activity activity, Object tag) { - Chip chip = getChip(activity); + public Chip newClosableChip(Object tag) { + Chip chip = getChip(); chip.setCloseIconVisible(true); chip.setTag(tag); return chip; } - private Chip newChip(Activity activity, Object tag) { - Chip chip = getChip(activity); + private Chip newChip(@Nullable Object tag) { + Chip chip = getChip(); chip.setTag(tag); return chip; } - private Chip getChip(Activity activity) { + private Chip getChip() { return (Chip) activity .getLayoutInflater() diff --git a/app/src/main/java/org/tasks/ui/RemoteListFragment.java b/app/src/main/java/org/tasks/ui/RemoteListFragment.java index 78a8cfb03..125c1cdc6 100644 --- a/app/src/main/java/org/tasks/ui/RemoteListFragment.java +++ b/app/src/main/java/org/tasks/ui/RemoteListFragment.java @@ -219,7 +219,7 @@ public class RemoteListFragment extends TaskEditControlFragment { chipGroup.setVisibility(View.VISIBLE); chipGroup.removeAllViews(); Chip chip = - chipProvider.newChip(getActivity(), selectedList, R.drawable.ic_outline_cloud_24px, true, true); + chipProvider.newChip(selectedList, R.drawable.ic_outline_cloud_24px, true, true); chip.setCloseIconVisible(true); chip.setOnClickListener(v -> openPicker()); chip.setOnCloseIconClickListener(v -> setSelected(null)); diff --git a/app/src/main/java/org/tasks/ui/SubtaskControlSet.java b/app/src/main/java/org/tasks/ui/SubtaskControlSet.java index dad6ce1bb..b4a536cb2 100644 --- a/app/src/main/java/org/tasks/ui/SubtaskControlSet.java +++ b/app/src/main/java/org/tasks/ui/SubtaskControlSet.java @@ -73,6 +73,7 @@ public class SubtaskControlSet extends TaskEditControlFragment implements Callba @Inject TaskDao taskDao; @Inject Locale locale; @Inject CheckBoxProvider checkBoxProvider; + @Inject ChipProvider chipProvider; private TaskListViewModel viewModel; private final RefreshReceiver refreshReceiver = new RefreshReceiver(); @@ -106,7 +107,7 @@ public class SubtaskControlSet extends TaskEditControlFragment implements Callba } } - recyclerAdapter = new SubtasksRecyclerAdapter(activity, locale, checkBoxProvider, this); + recyclerAdapter = new SubtasksRecyclerAdapter(activity, chipProvider, checkBoxProvider, this); if (task.getId() > 0) { recyclerAdapter.submitList(viewModel.getValue()); viewModel.setFilter(new Filter("subtasks", getQueryTemplate(task)), true); diff --git a/app/src/main/res/layout/subtask_adapter_row_body.xml b/app/src/main/res/layout/subtask_adapter_row_body.xml index a00267cc5..23359ca55 100644 --- a/app/src/main/res/layout/subtask_adapter_row_body.xml +++ b/app/src/main/res/layout/subtask_adapter_row_body.xml @@ -1,6 +1,5 @@ - + android:layout_alignParentRight="true" />