diff options
author | Stefan Niedermann <info@niedermann.it> | 2020-04-24 12:08:58 +0300 |
---|---|---|
committer | Niedermann IT-Dienstleistungen <stefan-niedermann@users.noreply.github.com> | 2020-04-24 15:12:11 +0300 |
commit | 9c719f71585c10f6d6e4cce207abe4ab8e587ad0 (patch) | |
tree | 7bc31220be2cd12b072c2facd6b82bacf1708897 | |
parent | d0e9f234fce30abfb667a936d0f51ffa45055388 (diff) |
#396 Filter cards
Remember label and user filter
-rw-r--r-- | app/src/main/java/it/niedermann/nextcloud/deck/model/internal/FilterInformation.java | 43 | ||||
-rw-r--r-- | app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java | 15 | ||||
-rw-r--r-- | app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDialogFragment.java | 47 | ||||
-rw-r--r-- | app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/LabelFilterAdapter.java | 40 | ||||
-rw-r--r-- | app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/UserFilterAdapter.java | 109 | ||||
-rw-r--r-- | app/src/main/res/layout/dialog_filter.xml | 23 | ||||
-rw-r--r-- | app/src/main/res/layout/item_filter_label.xml | 27 | ||||
-rw-r--r-- | app/src/main/res/layout/item_filter_user.xml (renamed from app/src/main/res/layout/item_user.xml) | 21 | ||||
-rw-r--r-- | app/src/main/res/layout/item_label.xml | 39 |
9 files changed, 188 insertions, 176 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/model/internal/FilterInformation.java b/app/src/main/java/it/niedermann/nextcloud/deck/model/internal/FilterInformation.java index c8619636f..448d0bf3e 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/model/internal/FilterInformation.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/model/internal/FilterInformation.java @@ -8,14 +8,16 @@ import java.io.Serializable; import java.util.ArrayList; import java.util.List; +import it.niedermann.nextcloud.deck.model.Label; +import it.niedermann.nextcloud.deck.model.User; import it.niedermann.nextcloud.deck.model.enums.EDueType; public class FilterInformation implements Serializable { private EDueType dueType = EDueType.NO_FILTER; @NonNull - private List<Long> userIDs = new ArrayList<>(); + private List<User> users = new ArrayList<>(); @NonNull - private List<Long> labelIDs = new ArrayList<>(); + private List<Label> labels = new ArrayList<>(); public EDueType getDueType() { return dueType; @@ -25,49 +27,46 @@ public class FilterInformation implements Serializable { this.dueType = dueType; } - @NotNull - public List<Long> getUserIDs() { - return userIDs; + @NonNull + public List<User> getUsers() { + return users; } @NotNull - public List<Long> getLabelIDs() { - return labelIDs; + public List<Label> getLabels() { + return labels; } - public void addUserId(long id) { - userIDs.add(id); + public void addAllLabels(List<Label> labels) { + this.labels.addAll(labels); } - public void removeUserId(Long id) { - userIDs.remove(id); + public void addAllUsers(List<User> users) { + this.users.addAll(users); } - public void addAllLabelIds(List<Long> ids) { - labelIDs.addAll(ids); + public void clearLabels() { + labels.clear(); } - public void clearLabelIds() { - labelIDs.clear(); - } - - public void removeLabelId(Long id) { - labelIDs.remove(id); + public void clearUsers() { + users.clear(); } /** * @return whether or not any filter is set */ public boolean hasActiveFilter() { - return (dueType != null && dueType != EDueType.NO_FILTER) || userIDs.size() > 0 || labelIDs.size() > 0; + return (dueType != null && dueType != EDueType.NO_FILTER) || users.size() > 0 || labels.size() > 0; } + @NotNull @Override public String toString() { return "FilterInformation{" + "dueType=" + dueType + - ", userIDs=" + userIDs + - ", labelIDs=" + labelIDs + + ", users=" + users + + ", labels=" + labels + '}'; } } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java index 038386457..5943dc244 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java @@ -29,6 +29,7 @@ import it.niedermann.nextcloud.deck.model.full.FullBoard; import it.niedermann.nextcloud.deck.model.full.FullCard; import it.niedermann.nextcloud.deck.model.full.FullStack; import it.niedermann.nextcloud.deck.model.interfaces.AbstractRemoteEntity; +import it.niedermann.nextcloud.deck.model.interfaces.IRemoteEntity; import it.niedermann.nextcloud.deck.model.internal.FilterInformation; import it.niedermann.nextcloud.deck.model.ocs.Activity; import it.niedermann.nextcloud.deck.model.ocs.comment.DeckComment; @@ -171,15 +172,15 @@ public class DataBaseAdapter { args.add(accountId); args.add(localStackId); - if (!filter.getLabelIDs().isEmpty()){ + if (!filter.getLabels().isEmpty()){ query.append("and exists(select 1 from joincardwithlabel where c.localId = cardId and labelId in ("); - fillSqlWithListValues(query, args, filter.getLabelIDs()); + fillSqlWithListValues(query, args, filter.getLabels()); query.append(")) "); } - if (!filter.getUserIDs().isEmpty()){ + if (!filter.getUsers().isEmpty()){ query.append("and exists(select 1 from JoinCardWithUser where c.localId = cardId and userId in ("); - fillSqlWithListValues(query, args, filter.getLabelIDs()); + fillSqlWithListValues(query, args, filter.getLabels()); query.append(")) "); } if (filter.getDueType() != EDueType.NO_FILTER){ @@ -208,13 +209,13 @@ public class DataBaseAdapter { } - private void fillSqlWithListValues(StringBuilder query, List<Object> args, List<Long> labelIDs) { - for (int i = 0; i < labelIDs.size(); i++) { + private void fillSqlWithListValues(StringBuilder query, List<Object> args, List<? extends IRemoteEntity> entities) { + for (int i = 0; i < entities.size(); i++) { if (i > 0) { query.append(", "); } query.append("?"); - args.add(labelIDs.get(i)); + args.add(entities.get(i).getLocalId()); } } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDialogFragment.java index b3b3eea47..f5817c4ef 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDialogFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDialogFragment.java @@ -5,13 +5,14 @@ import android.content.Context; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; +import android.widget.LinearLayout; import androidx.annotation.NonNull; +import androidx.annotation.Px; import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.DialogFragment; import androidx.lifecycle.ViewModelProvider; -import it.niedermann.nextcloud.deck.DeckLog; import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.databinding.DialogFilterBinding; import it.niedermann.nextcloud.deck.model.Account; @@ -29,12 +30,17 @@ public class FilterDialogFragment extends BrandedDialogFragment { private static final String KEY_ACCOUNT = "account"; private static final String KEY_BOARD_ID = "board_id"; + private DialogFilterBinding binding; private MainViewModel viewModel; private LabelFilterAdapter labelAdapter; private UserFilterAdapter userAdapter; private OverdueFilterAdapter overdueAdapter; private FilterInformation filterInformation; + @Px + private int avatarSize; + private LinearLayout.LayoutParams avatarLayoutParams; + private Account account; private long boardId; @@ -73,14 +79,12 @@ public class FilterDialogFragment extends BrandedDialogFragment { final AlertDialog.Builder dialogBuilder = new BrandedAlertDialogBuilder(requireContext()); - final DialogFilterBinding binding = DialogFilterBinding.inflate(requireActivity().getLayoutInflater()); + SyncManager syncManager = new SyncManager(requireActivity()); + + binding = DialogFilterBinding.inflate(requireActivity().getLayoutInflater()); overdueAdapter = new OverdueFilterAdapter(requireContext()); - userAdapter = new UserFilterAdapter(requireContext()); - binding.overdue.setAdapter(overdueAdapter); - binding.people.setAdapter(userAdapter); - binding.overdue.setSelection(overdueAdapter.getPosition(this.filterInformation.getDueType())); binding.overdue.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override @@ -94,32 +98,16 @@ public class FilterDialogFragment extends BrandedDialogFragment { } }); - SyncManager syncManager = new SyncManager(requireActivity()); - observeOnce(syncManager.findProposalsForLabelsToAssign(account.getId(), boardId), requireActivity(), (labels) -> { - labelAdapter = new LabelFilterAdapter(requireContext(), labels, this.filterInformation.getLabelIDs()); + labelAdapter = new LabelFilterAdapter(requireContext(), labels, this.filterInformation.getLabels()); binding.labels.setNestedScrollingEnabled(false); binding.labels.setAdapter(labelAdapter); }); observeOnce(syncManager.findProposalsForUsersToAssign(account.getId(), boardId), requireActivity(), (users) -> { - userAdapter.addAll(users); - userAdapter.notifyDataSetChanged(); - for (long userId : this.filterInformation.getUserIDs()) { - binding.people.setSelection(userAdapter.getPosition(userId)); - } - binding.people.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { - @Override - public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { - DeckLog.info("clicked position: " + position); - filterInformation.addUserId(userAdapter.getItemId(position)); - } - - @Override - public void onNothingSelected(AdapterView<?> parent) { - // Nothing to do - } - }); + userAdapter = new UserFilterAdapter(requireContext(), account, users, this.filterInformation.getUsers()); + binding.users.setNestedScrollingEnabled(false); + binding.users.setAdapter(userAdapter); }); return dialogBuilder @@ -128,9 +116,10 @@ public class FilterDialogFragment extends BrandedDialogFragment { .setNeutralButton(android.R.string.cancel, null) .setNegativeButton(R.string.simple_clear, (a, b) -> viewModel.postFilterInformation(null)) .setPositiveButton(R.string.simple_filter, (a, b) -> { - // Nach dieser Zeile ist labelAdapter.getSelected() leer - filterInformation.clearLabelIds(); - filterInformation.addAllLabelIds(labelAdapter.getSelected()); + filterInformation.clearLabels(); + filterInformation.addAllLabels(labelAdapter.getSelected()); + filterInformation.clearUsers(); + filterInformation.addAllUsers(userAdapter.getSelected()); viewModel.postFilterInformation(filterInformation); }) .create(); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/LabelFilterAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/LabelFilterAdapter.java index 184603bb6..82a75cec9 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/LabelFilterAdapter.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/LabelFilterAdapter.java @@ -1,21 +1,23 @@ package it.niedermann.nextcloud.deck.ui.filter; import android.content.Context; +import android.content.res.ColorStateList; +import android.graphics.Color; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; +import com.google.android.material.chip.Chip; + import java.util.ArrayList; import java.util.List; import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.model.Label; -import it.niedermann.nextcloud.deck.util.ViewUtil; +import it.niedermann.nextcloud.deck.util.ColorUtil; @SuppressWarnings("WeakerAccess") public class LabelFilterAdapter extends RecyclerView.Adapter<LabelFilterAdapter.LabelViewHolder> { @@ -24,13 +26,13 @@ public class LabelFilterAdapter extends RecyclerView.Adapter<LabelFilterAdapter. @NonNull private final List<Label> labels = new ArrayList<>(); @NonNull - private final List<Long> selectedLabelIds = new ArrayList<>(); + private final List<Label> selectedLabels = new ArrayList<>(); - public LabelFilterAdapter(@NonNull Context context, @NonNull List<Label> labels, @NonNull List<Long> selectedLabelIds) { + public LabelFilterAdapter(@NonNull Context context, @NonNull List<Label> labels, @NonNull List<Label> selectedLabels) { super(); this.context = context; this.labels.addAll(labels); - this.selectedLabelIds.addAll(selectedLabelIds); + this.selectedLabels.addAll(selectedLabels); setHasStableIds(true); notifyDataSetChanged(); } @@ -43,7 +45,7 @@ public class LabelFilterAdapter extends RecyclerView.Adapter<LabelFilterAdapter. @NonNull @Override public LabelViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { - View view = LayoutInflater.from(context).inflate(R.layout.item_label, viewGroup, false); + View view = LayoutInflater.from(context).inflate(R.layout.item_filter_label, viewGroup, false); return new LabelViewHolder(view); } @@ -57,32 +59,34 @@ public class LabelFilterAdapter extends RecyclerView.Adapter<LabelFilterAdapter. return labels.size(); } - public List<Long> getSelected() { - return selectedLabelIds; + public List<Label> getSelected() { + return selectedLabels; } class LabelViewHolder extends RecyclerView.ViewHolder { // TODO Use ViewBinding - private TextView textView; - private ImageView imageView; + private Chip chip; LabelViewHolder(@NonNull View itemView) { super(itemView); - textView = itemView.findViewById(R.id.displayname); - imageView = itemView.findViewById(R.id.label); + chip = itemView.findViewById(R.id.label); } void bind(final Label label) { - imageView.setImageDrawable(ViewUtil.getTintedImageView(imageView.getContext(), R.drawable.ic_label_grey600_24dp, "#" + label.getColor())); - textView.setText(label.getTitle()); + chip.setText(label.getTitle()); + final int labelColor = Color.parseColor("#" + label.getColor()); + chip.setChipBackgroundColor(ColorStateList.valueOf(labelColor)); + final int color = ColorUtil.getForegroundColorForBackgroundColor(labelColor); + chip.setTextColor(color); + itemView.setSelected(selectedLabels.contains(label)); itemView.setOnClickListener(view -> { - if (selectedLabelIds.contains(label.getLocalId())) { - selectedLabelIds.remove(label.getLocalId()); + if (selectedLabels.contains(label)) { + selectedLabels.remove(label); itemView.setSelected(false); } else { - selectedLabelIds.add(label.getLocalId()); + selectedLabels.add(label); itemView.setSelected(true); } }); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/UserFilterAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/UserFilterAdapter.java index d1baa900f..49cb5ae6a 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/UserFilterAdapter.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/UserFilterAdapter.java @@ -4,68 +4,97 @@ import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.ArrayAdapter; +import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; -import org.jetbrains.annotations.NotNull; - -import java.util.NoSuchElementException; +import java.util.ArrayList; +import java.util.List; +import it.niedermann.nextcloud.deck.R; +import it.niedermann.nextcloud.deck.model.Account; import it.niedermann.nextcloud.deck.model.User; +import it.niedermann.nextcloud.deck.util.ViewUtil; -public class UserFilterAdapter extends ArrayAdapter<User> { +import static it.niedermann.nextcloud.deck.util.DimensionUtil.dpToPx; +@SuppressWarnings("WeakerAccess") +public class UserFilterAdapter extends RecyclerView.Adapter<UserFilterAdapter.UserViewHolder> { + final int avatarSize; + @NonNull + private final Context context; + @NonNull + private final Account account; @NonNull - private final LayoutInflater inflater; + private final List<User> users = new ArrayList<>(); + @NonNull + private final List<User> selectedUsers = new ArrayList<>(); - @SuppressWarnings("WeakerAccess") - public UserFilterAdapter(@NonNull Context context) { - super(context, android.R.layout.simple_list_item_multiple_choice, android.R.id.text1); - inflater = LayoutInflater.from(context); + public UserFilterAdapter(@NonNull Context context, @NonNull Account account, @NonNull List<User> users, @NonNull List<User> selectedUsers) { + super(); + this.account = account; + this.context = context; + this.users.addAll(users); + this.selectedUsers.addAll(selectedUsers); + setHasStableIds(true); + notifyDataSetChanged(); + avatarSize = dpToPx(context, R.dimen.avatar_size); } @Override - public boolean hasStableIds() { - return true; + public long getItemId(int position) { + return users.get(position).getLocalId(); } + @NonNull @Override - public long getItemId(int position) { - final User user = getItem(position); - if(user == null) { - throw new NoSuchElementException(); - } - return user.getLocalId(); + public UserViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { + View view = LayoutInflater.from(context).inflate(R.layout.item_filter_user, viewGroup, false); + return new UserViewHolder(view); } @Override - public View getDropDownView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { - return getView(position, convertView, parent); + public void onBindViewHolder(@NonNull UserViewHolder viewHolder, int position) { + viewHolder.bind(users.get(position)); } - @SuppressWarnings("WeakerAccess") - public int getPosition(long labelId) { - for (int i = 0; i < getCount(); i++) { - if (getItemId(i) == labelId) { - return i; - } - } - throw new NoSuchElementException(); + @Override + public int getItemCount() { + return users.size(); } - @NotNull - @Override - public View getView(int position, View convertView, @NotNull ViewGroup parent) { - final View view; - if (convertView == null) { - view = inflater.inflate(android.R.layout.simple_list_item_multiple_choice, parent, false); - } else { - view = convertView; + public List<User> getSelected() { + return selectedUsers; + } + + class UserViewHolder extends RecyclerView.ViewHolder { + + // TODO Use ViewBinding + private TextView displayName; + private ImageView avatar; + + UserViewHolder(@NonNull View itemView) { + super(itemView); + displayName = itemView.findViewById(R.id.displayName); + avatar = itemView.findViewById(R.id.avatar); + } + + void bind(final User user) { + displayName.setText(user.getDisplayname()); + ViewUtil.addAvatar(avatar, account.getUrl(), user.getUid(), avatarSize, R.drawable.ic_person_grey600_24dp); + itemView.setSelected(selectedUsers.contains(user)); + + itemView.setOnClickListener(view -> { + if (selectedUsers.contains(user)) { + selectedUsers.remove(user); + itemView.setSelected(false); + } else { + selectedUsers.add(user); + itemView.setSelected(true); + } + }); } - ((TextView) view.findViewById(android.R.id.text1)).setText(getItem(position).getDisplayname()); - return view; } -} +}
\ No newline at end of file diff --git a/app/src/main/res/layout/dialog_filter.xml b/app/src/main/res/layout/dialog_filter.xml index ccdd64e69..938eb41dd 100644 --- a/app/src/main/res/layout/dialog_filter.xml +++ b/app/src/main/res/layout/dialog_filter.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" - android:layout_height="match_parent" - xmlns:app="http://schemas.android.com/apk/res-auto"> + android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" @@ -24,27 +24,28 @@ android:choiceMode="multipleChoice" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" tools:itemCount="4" - tools:listitem="@layout/item_user" /> + tools:listitem="@layout/item_filter_label" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" + android:layout_marginTop="@dimen/spacer_2x" android:labelFor="@id/overdue" - android:text="@string/filter_by_assigned_user" - android:visibility="gone" /> + android:text="@string/filter_by_assigned_user" /> - <ListView - android:id="@+id/people" + <androidx.recyclerview.widget.RecyclerView + android:id="@+id/users" android:layout_width="match_parent" - android:layout_height="150dp" + android:layout_height="wrap_content" android:choiceMode="multipleChoice" - android:visibility="gone" - tools:layout_height="150dp" - tools:listitem="@android:layout/simple_list_item_multiple_choice" /> + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" + tools:itemCount="4" + tools:listitem="@layout/item_filter_user" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" + android:layout_marginTop="@dimen/spacer_2x" android:labelFor="@id/overdue" android:text="@string/filter_by_duedate" /> diff --git a/app/src/main/res/layout/item_filter_label.xml b/app/src/main/res/layout/item_filter_label.xml new file mode 100644 index 000000000..085ad6e2b --- /dev/null +++ b/app/src/main/res/layout/item_filter_label.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="?attr/selectableItemBackground" + android:orientation="horizontal" + android:paddingStart="@dimen/spacer_1x" + android:paddingLeft="@dimen/spacer_1x" + android:paddingEnd="@dimen/spacer_1x" + android:paddingRight="@dimen/spacer_1x"> + + <com.google.android.material.chip.Chip + android:id="@+id/label" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + tools:text="@tools:sample/lorem" /> + + <androidx.appcompat.widget.AppCompatImageView + android:layout_width="22dp" + android:layout_height="22dp" + android:layout_gravity="center" + android:layout_marginStart="@dimen/spacer_1x" + android:layout_marginLeft="@dimen/spacer_1x" + android:background="@drawable/selected" /> + +</LinearLayout>
\ No newline at end of file diff --git a/app/src/main/res/layout/item_user.xml b/app/src/main/res/layout/item_filter_user.xml index c6ccf607f..814476933 100644 --- a/app/src/main/res/layout/item_user.xml +++ b/app/src/main/res/layout/item_filter_user.xml @@ -4,32 +4,33 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" + android:background="?attr/selectableItemBackground" android:orientation="horizontal" - android:padding="@dimen/spacer_2x"> + android:padding="@dimen/spacer_1x"> <FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content"> - <androidx.appcompat.widget.AppCompatImageView - android:layout_width="22dp" - android:layout_height="22dp" - android:layout_gravity="end|bottom" - android:background="@drawable/selected" /> - <ImageView android:id="@+id/avatar" android:layout_width="@dimen/avatar_size" android:layout_height="@dimen/avatar_size" - android:layout_marginEnd="@dimen/spacer_2x" - android:layout_marginRight="@dimen/spacer_2x" + android:layout_marginEnd="11dp" + android:layout_marginRight="11dp" android:contentDescription="@null" app:srcCompat="@drawable/ic_person_grey600_24dp" tools:srcCompat="@tools:sample/avatars" /> + + <androidx.appcompat.widget.AppCompatImageView + android:layout_width="22dp" + android:layout_height="22dp" + android:layout_gravity="end|bottom" + android:background="@drawable/selected" /> </FrameLayout> <TextView - android:id="@+id/displayname" + android:id="@+id/displayName" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" diff --git a/app/src/main/res/layout/item_label.xml b/app/src/main/res/layout/item_label.xml deleted file mode 100644 index 5817d0c6a..000000000 --- a/app/src/main/res/layout/item_label.xml +++ /dev/null @@ -1,39 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:app="http://schemas.android.com/apk/res-auto" - xmlns:tools="http://schemas.android.com/tools" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:background="?attr/selectableItemBackground" - android:orientation="horizontal" - android:padding="@dimen/spacer_1x"> - - <FrameLayout - android:layout_width="wrap_content" - android:layout_height="wrap_content"> - - <androidx.appcompat.widget.AppCompatImageView - android:layout_width="22dp" - android:layout_height="22dp" - android:layout_gravity="end|bottom" - android:background="@drawable/selected" /> - - <ImageView - android:id="@+id/label" - android:layout_width="@dimen/avatar_size" - android:layout_height="@dimen/avatar_size" - android:layout_marginEnd="@dimen/spacer_2x" - android:layout_marginRight="@dimen/spacer_2x" - android:contentDescription="@null" - app:srcCompat="@drawable/ic_label_grey600_24dp" /> - </FrameLayout> - - <TextView - android:id="@+id/displayname" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_gravity="center" - android:textSize="16sp" - tools:text="@tools:sample/lorem" /> - -</LinearLayout>
\ No newline at end of file |