Compact subtask chip, fix edit screen chip theme

pull/935/head
Alex Baker 5 years ago
parent bfdf23d1f4
commit b139941f90

@ -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(

@ -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) {

@ -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<SubtaskViewHolder>
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<TaskContainer> differ;
@ -30,11 +30,11 @@ public class SubtasksRecyclerAdapter extends RecyclerView.Adapter<SubtaskViewHol
public SubtasksRecyclerAdapter(
Activity activity,
Locale locale,
ChipProvider chipProvider,
CheckBoxProvider checkBoxProvider,
SubtaskViewHolder.Callbacks callbacks) {
this.activity = activity;
this.locale = locale;
this.chipProvider = chipProvider;
this.checkBoxProvider = checkBoxProvider;
this.callbacks = callbacks;
differ =
@ -49,7 +49,7 @@ public class SubtasksRecyclerAdapter extends RecyclerView.Adapter<SubtaskViewHol
ViewGroup view =
(ViewGroup)
LayoutInflater.from(activity).inflate(R.layout.subtask_adapter_row_body, parent, false);
return new SubtaskViewHolder(activity, locale, view, callbacks, metrics, checkBoxProvider);
return new SubtaskViewHolder(view, callbacks, metrics, chipProvider, checkBoxProvider);
}
@Override

@ -263,13 +263,7 @@ public class ViewHolder extends RecyclerView.ViewHolder {
}
private void setupChips(Filter filter, boolean hideSubtaskChip) {
List<Chip> chips =
chipProvider.getChips(
context,
filter,
indent > 0,
hideSubtaskChip,
task);
List<Chip> chips = chipProvider.getChips(filter, indent > 0, hideSubtaskChip, task);
if (chips.isEmpty()) {
chipGroup.setVisibility(View.GONE);
} else {

@ -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<TagFilter> orderByName =
new Ordering<TagFilter>() {
@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<Chip> getChips(
Activity activity,
Filter filter,
boolean isSubtask,
boolean hideSubtaskChip,
@ -88,22 +109,10 @@ public class ChipProvider {
List<Chip> 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()

@ -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));

@ -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);

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/rowBody"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -17,21 +16,19 @@
android:paddingEnd="@dimen/keyline_first"
android:paddingRight="@dimen/keyline_first" />
<com.google.android.material.chip.Chip
android:id="@+id/chip_button"
style="@style/ChipStyle"
<com.google.android.material.chip.ChipGroup
android:id="@+id/chip_group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:textColor="?android:textColorSecondary"
app:chipIconTint="@color/icon_tint"
app:chipStrokeColor="?android:textColorSecondary"/>
android:layout_alignParentRight="true" />
<TextView
android:id="@+id/title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_toStartOf="@id/chip_button"
android:layout_toLeftOf="@id/chip_button"
android:layout_toStartOf="@id/chip_group"
android:layout_toLeftOf="@id/chip_group"
android:layout_toEndOf="@id/completeBox"
android:layout_toRightOf="@id/completeBox"
android:background="?attr/selectableItemBackground"

Loading…
Cancel
Save