Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/stefan-niedermann/nextcloud-deck.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Niedermann <info@niedermann.it>2020-07-08 14:26:01 +0300
committerNiedermann IT-Dienstleistungen <stefan-niedermann@users.noreply.github.com>2020-07-08 15:21:08 +0300
commite008f7db066a70fdbed79705a0b8e40743d15d08 (patch)
treee0a93a23f6fc7df2c76fb85fb0acc3fb73ef24da /app/src/main
parentb2d3e3ad177163a241e5398770c5f6acf4f5c39b (diff)
#579 Compact mode
Diffstat (limited to 'app/src/main')
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/archivedcards/ArchivedCardsAdapter.java4
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/AbstractCardViewHolder.java121
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardAdapter.java17
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardViewHolder.java70
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CompactCardViewHolder.java84
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/settings/SettingsFragment.java4
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/view/CompactLabelChip.java23
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/view/CompactLabelLayout.java20
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/view/LabelChip.java10
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/view/LabelLayout.java9
-rw-r--r--app/src/main/res/layout/item_card_compact.xml94
-rw-r--r--app/src/main/res/values/dimens.xml2
-rw-r--r--app/src/main/res/values/setup.xml1
-rw-r--r--app/src/main/res/values/strings.xml1
-rw-r--r--app/src/main/res/xml/settings.xml8
15 files changed, 409 insertions, 59 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/archivedcards/ArchivedCardsAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/archivedcards/ArchivedCardsAdapter.java
index bc2891360..a5a065cd1 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/archivedcards/ArchivedCardsAdapter.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/archivedcards/ArchivedCardsAdapter.java
@@ -12,8 +12,8 @@ import it.niedermann.nextcloud.deck.model.Account;
import it.niedermann.nextcloud.deck.model.full.FullCard;
import it.niedermann.nextcloud.deck.persistence.sync.SyncManager;
import it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.WrappedLiveData;
+import it.niedermann.nextcloud.deck.ui.card.AbstractCardViewHolder;
import it.niedermann.nextcloud.deck.ui.card.CardAdapter;
-import it.niedermann.nextcloud.deck.ui.card.CardViewHolder;
import it.niedermann.nextcloud.deck.ui.exception.ExceptionDialogFragment;
import static it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.LiveDataHelper.observeOnce;
@@ -26,7 +26,7 @@ public class ArchivedCardsAdapter extends CardAdapter {
}
@Override
- public void onBindViewHolder(@NonNull CardViewHolder viewHolder, int position) {
+ public void onBindViewHolder(@NonNull AbstractCardViewHolder viewHolder, int position) {
viewHolder.bind(cardList.get(position), account, boardRemoteId, hasEditPermission, R.menu.archived_card_menu, this, counterMaxValue, mainColor);
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/AbstractCardViewHolder.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/AbstractCardViewHolder.java
new file mode 100644
index 000000000..984f7099f
--- /dev/null
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/AbstractCardViewHolder.java
@@ -0,0 +1,121 @@
+package it.niedermann.nextcloud.deck.ui.card;
+
+import android.content.Context;
+import android.view.Menu;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.View.OnLongClickListener;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.CallSuper;
+import androidx.annotation.ColorInt;
+import androidx.annotation.MenuRes;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.appcompat.widget.PopupMenu;
+import androidx.core.graphics.drawable.DrawableCompat;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.google.android.material.card.MaterialCardView;
+
+import org.jetbrains.annotations.Contract;
+
+import java.util.List;
+
+import it.niedermann.nextcloud.deck.R;
+import it.niedermann.nextcloud.deck.model.Account;
+import it.niedermann.nextcloud.deck.model.Card;
+import it.niedermann.nextcloud.deck.model.User;
+import it.niedermann.nextcloud.deck.model.enums.DBStatus;
+import it.niedermann.nextcloud.deck.model.full.FullCard;
+import it.niedermann.nextcloud.deck.util.DateUtil;
+import it.niedermann.nextcloud.deck.util.ViewUtil;
+
+public abstract class AbstractCardViewHolder extends RecyclerView.ViewHolder {
+
+ public AbstractCardViewHolder(@NonNull View itemView) {
+ super(itemView);
+ }
+
+ /**
+ * Removes all {@link OnClickListener} and {@link OnLongClickListener}
+ */
+ @CallSuper
+ public void bind(@NonNull FullCard fullCard, @NonNull Account account, @Nullable Long boardRemoteId, boolean hasEditPermission, @MenuRes int optionsMenu, @NonNull CardOptionsItemSelectedListener optionsItemsSelectedListener, @NonNull String counterMaxValue, @ColorInt int mainColor) {
+ final Context context = itemView.getContext();
+
+ bindCardClickListener(null);
+ bindCardLongClickListener(null);
+
+ getCardMenu().setVisibility(hasEditPermission ? View.VISIBLE : View.GONE);
+ getCardTitle().setText(fullCard.getCard().getTitle().trim());
+
+ DrawableCompat.setTint(getNotSyncedYet().getDrawable(), mainColor);
+ getNotSyncedYet().setVisibility(DBStatus.LOCAL_EDITED.equals(fullCard.getStatusEnum()) ? View.VISIBLE : View.GONE);
+
+ if (fullCard.getCard().getDueDate() != null) {
+ setupDueDate(getCardDueDate(), fullCard.getCard());
+ getCardDueDate().setVisibility(View.VISIBLE);
+ } else {
+ getCardDueDate().setVisibility(View.GONE);
+ }
+
+ getCardMenu().setOnClickListener(view -> {
+ final PopupMenu popup = new PopupMenu(context, view);
+ popup.inflate(optionsMenu);
+ final Menu menu = popup.getMenu();
+ if (containsUser(fullCard.getAssignedUsers(), account.getUserName())) {
+ menu.removeItem(menu.findItem(R.id.action_card_assign).getItemId());
+ } else {
+ menu.removeItem(menu.findItem(R.id.action_card_unassign).getItemId());
+ }
+ if (boardRemoteId == null || fullCard.getCard().getId() == null) {
+ menu.removeItem(R.id.share_link);
+ }
+
+ popup.setOnMenuItemClickListener(item -> optionsItemsSelectedListener.onCardOptionsItemSelected(item, fullCard));
+ popup.show();
+ });
+ }
+
+ protected abstract TextView getCardDueDate();
+
+ protected abstract ImageView getNotSyncedYet();
+
+ protected abstract TextView getCardTitle();
+
+ protected abstract View getCardMenu();
+
+ protected abstract MaterialCardView getCard();
+
+ public void bindCardClickListener(@Nullable OnClickListener l) {
+ getCard().setOnClickListener(l);
+ }
+
+ public void bindCardLongClickListener(@Nullable OnLongClickListener l) {
+ getCard().setOnLongClickListener(l);
+ }
+
+ public MaterialCardView getDraggable() {
+ return getCard();
+ }
+
+ private static void setupDueDate(@NonNull TextView cardDueDate, @NonNull Card card) {
+ final Context context = cardDueDate.getContext();
+ cardDueDate.setText(DateUtil.getRelativeDateTimeString(context, card.getDueDate().getTime()));
+ ViewUtil.themeDueDate(context, cardDueDate, card.getDueDate());
+ }
+
+ @Contract("null, _ -> false")
+ private static boolean containsUser(List<User> userList, String username) {
+ if (userList != null) {
+ for (User user : userList) {
+ if (user.getPrimaryKey().equals(username)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+} \ No newline at end of file
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardAdapter.java
index 5910850fa..f682bf803 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardAdapter.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardAdapter.java
@@ -1,6 +1,5 @@
package it.niedermann.nextcloud.deck.ui.card;
-import android.annotation.SuppressLint;
import android.content.ClipData;
import android.content.Context;
import android.content.Intent;
@@ -25,6 +24,7 @@ import it.niedermann.android.crosstabdnd.DraggedItemLocalState;
import it.niedermann.nextcloud.deck.DeckLog;
import it.niedermann.nextcloud.deck.R;
import it.niedermann.nextcloud.deck.databinding.ItemCardBinding;
+import it.niedermann.nextcloud.deck.databinding.ItemCardCompactBinding;
import it.niedermann.nextcloud.deck.model.Account;
import it.niedermann.nextcloud.deck.model.Stack;
import it.niedermann.nextcloud.deck.model.full.FullCard;
@@ -36,12 +36,14 @@ import it.niedermann.nextcloud.deck.ui.branding.Branded;
import it.niedermann.nextcloud.deck.ui.branding.BrandedAlertDialogBuilder;
import it.niedermann.nextcloud.deck.ui.exception.ExceptionDialogFragment;
+import static androidx.preference.PreferenceManager.getDefaultSharedPreferences;
import static it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.LiveDataHelper.observeOnce;
import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.getSecondaryForegroundColorDependingOnTheme;
import static it.niedermann.nextcloud.deck.util.MimeTypeUtil.TEXT_PLAIN;
-public class CardAdapter extends RecyclerView.Adapter<CardViewHolder> implements DragAndDropAdapter<FullCard>, CardOptionsItemSelectedListener, Branded {
+public class CardAdapter extends RecyclerView.Adapter<AbstractCardViewHolder> implements DragAndDropAdapter<FullCard>, CardOptionsItemSelectedListener, Branded {
+ private final boolean compactMode;
protected final SyncManager syncManager;
protected final FragmentManager fragmentManager;
@@ -79,6 +81,7 @@ public class CardAdapter extends RecyclerView.Adapter<CardViewHolder> implements
this.syncManager = syncManager;
this.selectCardListener = selectCardListener;
this.mainColor = context.getResources().getColor(R.color.defaultBrand);
+ this.compactMode = getDefaultSharedPreferences(context).getBoolean(context.getString(R.string.pref_key_compact), false);
syncManager.getStacksForBoard(account.getId(), boardLocalId).observe(this.lifecycleOwner, (stacks) -> {
availableStacks.clear();
availableStacks.addAll(stacks);
@@ -93,13 +96,15 @@ public class CardAdapter extends RecyclerView.Adapter<CardViewHolder> implements
@NonNull
@Override
- public CardViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int position) {
- return new CardViewHolder(ItemCardBinding.inflate(LayoutInflater.from(viewGroup.getContext()), viewGroup, false));
+ public AbstractCardViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int position) {
+ return compactMode
+ ? new CompactCardViewHolder(ItemCardCompactBinding.inflate(LayoutInflater.from(viewGroup.getContext()), viewGroup, false))
+ : new CardViewHolder(ItemCardBinding.inflate(LayoutInflater.from(viewGroup.getContext()), viewGroup, false));
}
- @SuppressLint("SetTextI18n")
@Override
- public void onBindViewHolder(@NonNull CardViewHolder viewHolder, int position) {
+ public void onBindViewHolder(@NonNull AbstractCardViewHolder holder, int position) {
+ AbstractCardViewHolder viewHolder = (AbstractCardViewHolder) holder;
@NonNull FullCard fullCard = cardList.get(position);
viewHolder.bind(fullCard, account, boardRemoteId, hasEditPermission, R.menu.card_menu, this, counterMaxValue, mainColor);
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardViewHolder.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardViewHolder.java
index 279d38360..ff3c5ae0c 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardViewHolder.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardViewHolder.java
@@ -1,19 +1,16 @@
package it.niedermann.nextcloud.deck.ui.card;
import android.content.Context;
-import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
+import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.ColorInt;
import androidx.annotation.MenuRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
-import androidx.appcompat.widget.PopupMenu;
-import androidx.core.graphics.drawable.DrawableCompat;
-import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.card.MaterialCardView;
@@ -27,12 +24,9 @@ import it.niedermann.nextcloud.deck.model.Account;
import it.niedermann.nextcloud.deck.model.Card;
import it.niedermann.nextcloud.deck.model.Label;
import it.niedermann.nextcloud.deck.model.User;
-import it.niedermann.nextcloud.deck.model.enums.DBStatus;
import it.niedermann.nextcloud.deck.model.full.FullCard;
-import it.niedermann.nextcloud.deck.util.DateUtil;
-import it.niedermann.nextcloud.deck.util.ViewUtil;
-public class CardViewHolder extends RecyclerView.ViewHolder {
+public class CardViewHolder extends AbstractCardViewHolder {
private ItemCardBinding binding;
@SuppressWarnings("WeakerAccess")
@@ -45,12 +39,9 @@ public class CardViewHolder extends RecyclerView.ViewHolder {
* Removes all {@link OnClickListener} and {@link OnLongClickListener}
*/
public void bind(@NonNull FullCard fullCard, @NonNull Account account, @Nullable Long boardRemoteId, boolean hasEditPermission, @MenuRes int optionsMenu, @NonNull CardOptionsItemSelectedListener optionsItemsSelectedListener, @NonNull String counterMaxValue, @ColorInt int mainColor) {
- final Context context = itemView.getContext();
+ super.bind(fullCard, account, boardRemoteId, hasEditPermission, optionsMenu, optionsItemsSelectedListener, counterMaxValue, mainColor);
- bindCardClickListener(null);
- bindCardLongClickListener(null);
- binding.cardMenu.setVisibility(hasEditPermission ? View.VISIBLE : View.GONE);
- binding.cardTitle.setText(fullCard.getCard().getTitle().trim());
+ final Context context = itemView.getContext();
if (fullCard.getAssignedUsers() != null && fullCard.getAssignedUsers().size() > 0) {
binding.overlappingAvatars.setAvatars(account, fullCard.getAssignedUsers());
@@ -59,16 +50,6 @@ public class CardViewHolder extends RecyclerView.ViewHolder {
binding.overlappingAvatars.setVisibility(View.GONE);
}
- DrawableCompat.setTint(binding.notSyncedYet.getDrawable(), mainColor);
- binding.notSyncedYet.setVisibility(DBStatus.LOCAL_EDITED.equals(fullCard.getStatusEnum()) ? View.VISIBLE : View.GONE);
-
- if (fullCard.getCard().getDueDate() != null) {
- setupDueDate(binding.cardDueDate, fullCard.getCard());
- binding.cardDueDate.setVisibility(View.VISIBLE);
- } else {
- binding.cardDueDate.setVisibility(View.GONE);
- }
-
final int attachmentsCount = fullCard.getAttachments().size();
if (attachmentsCount == 0) {
@@ -104,23 +85,31 @@ public class CardViewHolder extends RecyclerView.ViewHolder {
} else {
binding.cardCountTasks.setVisibility(View.GONE);
}
+ }
- binding.cardMenu.setOnClickListener(view -> {
- final PopupMenu popup = new PopupMenu(context, view);
- popup.inflate(optionsMenu);
- final Menu menu = popup.getMenu();
- if (containsUser(fullCard.getAssignedUsers(), account.getUserName())) {
- menu.removeItem(menu.findItem(R.id.action_card_assign).getItemId());
- } else {
- menu.removeItem(menu.findItem(R.id.action_card_unassign).getItemId());
- }
- if (boardRemoteId == null || fullCard.getCard().getId() == null) {
- menu.removeItem(R.id.share_link);
- }
+ @Override
+ protected TextView getCardDueDate() {
+ return binding.cardDueDate;
+ }
+
+ @Override
+ protected ImageView getNotSyncedYet() {
+ return binding.notSyncedYet;
+ }
+
+ @Override
+ protected TextView getCardTitle() {
+ return binding.cardTitle;
+ }
- popup.setOnMenuItemClickListener(item -> optionsItemsSelectedListener.onCardOptionsItemSelected(item, fullCard));
- popup.show();
- });
+ @Override
+ protected View getCardMenu() {
+ return binding.cardMenu;
+ }
+
+ @Override
+ protected MaterialCardView getCard() {
+ return binding.card;
}
public void bindCardClickListener(@Nullable OnClickListener l) {
@@ -135,11 +124,6 @@ public class CardViewHolder extends RecyclerView.ViewHolder {
return binding.card;
}
- private static void setupDueDate(@NonNull TextView cardDueDate, @NonNull Card card) {
- final Context context = cardDueDate.getContext();
- cardDueDate.setText(DateUtil.getRelativeDateTimeString(context, card.getDueDate().getTime()));
- ViewUtil.themeDueDate(context, cardDueDate, card.getDueDate());
- }
private static void setupCounter(@NonNull TextView textView, @NonNull String counterMaxValue, int count) {
if (count > 99) {
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CompactCardViewHolder.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CompactCardViewHolder.java
new file mode 100644
index 000000000..e9f366d99
--- /dev/null
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CompactCardViewHolder.java
@@ -0,0 +1,84 @@
+package it.niedermann.nextcloud.deck.ui.card;
+
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.View.OnLongClickListener;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.ColorInt;
+import androidx.annotation.MenuRes;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.google.android.material.card.MaterialCardView;
+
+import java.util.List;
+
+import it.niedermann.nextcloud.deck.databinding.ItemCardCompactBinding;
+import it.niedermann.nextcloud.deck.model.Account;
+import it.niedermann.nextcloud.deck.model.Label;
+import it.niedermann.nextcloud.deck.model.full.FullCard;
+
+public class CompactCardViewHolder extends AbstractCardViewHolder {
+ private ItemCardCompactBinding binding;
+
+ @SuppressWarnings("WeakerAccess")
+ public CompactCardViewHolder(@NonNull ItemCardCompactBinding binding) {
+ super(binding.getRoot());
+ this.binding = binding;
+ }
+
+ /**
+ * Removes all {@link OnClickListener} and {@link OnLongClickListener}
+ */
+ public void bind(@NonNull FullCard fullCard, @NonNull Account account, @Nullable Long boardRemoteId, boolean hasEditPermission, @MenuRes int optionsMenu, @NonNull CardOptionsItemSelectedListener optionsItemsSelectedListener, @NonNull String counterMaxValue, @ColorInt int mainColor) {
+ super.bind(fullCard, account, boardRemoteId, hasEditPermission, optionsMenu, optionsItemsSelectedListener, counterMaxValue, mainColor);
+
+ List<Label> labels = fullCard.getLabels();
+ if (labels != null && labels.size() > 0) {
+ binding.labels.updateLabels(labels);
+ binding.labels.setVisibility(View.VISIBLE);
+ } else {
+ binding.labels.removeAllViews();
+ binding.labels.setVisibility(View.GONE);
+ }
+ }
+
+ public void bindCardClickListener(@Nullable OnClickListener l) {
+ binding.card.setOnClickListener(l);
+ }
+
+ public void bindCardLongClickListener(@Nullable OnLongClickListener l) {
+ binding.card.setOnLongClickListener(l);
+ }
+
+ public MaterialCardView getDraggable() {
+ return binding.card;
+ }
+
+ @Override
+ protected TextView getCardDueDate() {
+ return binding.cardDueDate;
+ }
+
+ @Override
+ protected ImageView getNotSyncedYet() {
+ return binding.notSyncedYet;
+ }
+
+ @Override
+ protected TextView getCardTitle() {
+ return binding.cardTitle;
+ }
+
+ @Override
+ protected View getCardMenu() {
+ return binding.cardMenu;
+ }
+
+ @Override
+ protected MaterialCardView getCard() {
+ return binding.card;
+ }
+} \ No newline at end of file
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/settings/SettingsFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/settings/SettingsFragment.java
index ea8d90f22..04429f225 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/settings/SettingsFragment.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/settings/SettingsFragment.java
@@ -23,6 +23,7 @@ public class SettingsFragment extends PreferenceFragmentCompat implements Brande
private BrandedSwitchPreference wifiOnlyPref;
private BrandedSwitchPreference themePref;
private BrandedSwitchPreference brandingPref;
+ private BrandedSwitchPreference compactPref;
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
@@ -67,6 +68,8 @@ public class SettingsFragment extends PreferenceFragmentCompat implements Brande
DeckLog.error("Could not find preference with key: \"" + getString(R.string.pref_key_dark_theme) + "\"");
}
+ compactPref = findPreference(getString(R.string.pref_key_compact));
+
final ListPreference backgroundSyncPref = findPreference(getString(R.string.pref_key_background_sync));
if (backgroundSyncPref != null) {
backgroundSyncPref.setOnPreferenceChangeListener((Preference preference, Object newValue) -> {
@@ -92,5 +95,6 @@ public class SettingsFragment extends PreferenceFragmentCompat implements Brande
wifiOnlyPref.applyBrand(mainColor);
themePref.applyBrand(mainColor);
brandingPref.applyBrand(mainColor);
+ compactPref.applyBrand(mainColor);
}
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/view/CompactLabelChip.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/view/CompactLabelChip.java
new file mode 100644
index 000000000..8659cef36
--- /dev/null
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/view/CompactLabelChip.java
@@ -0,0 +1,23 @@
+package it.niedermann.nextcloud.deck.ui.view;
+
+import android.annotation.SuppressLint;
+import android.content.Context;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Px;
+
+import it.niedermann.nextcloud.deck.R;
+import it.niedermann.nextcloud.deck.model.Label;
+
+import static it.niedermann.nextcloud.deck.util.DimensionUtil.dpToPx;
+
+@SuppressLint("ViewConstructor")
+public class CompactLabelChip extends LabelChip {
+
+ public CompactLabelChip(@NonNull Context context, @NonNull Label label, @Px int gutter) {
+ super(context, label, gutter);
+ params.setFlexBasisPercent(1 / 6.5f);
+ setHeight(dpToPx(context, R.dimen.compact_label_height));
+ setText("");
+ }
+} \ No newline at end of file
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/view/CompactLabelLayout.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/view/CompactLabelLayout.java
new file mode 100644
index 000000000..ae44b2dde
--- /dev/null
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/view/CompactLabelLayout.java
@@ -0,0 +1,20 @@
+package it.niedermann.nextcloud.deck.ui.view;
+
+import android.content.Context;
+import android.util.AttributeSet;
+
+import androidx.annotation.NonNull;
+
+import it.niedermann.nextcloud.deck.model.Label;
+
+public class CompactLabelLayout extends LabelLayout {
+
+ public CompactLabelLayout(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ @Override
+ protected LabelChip createLabelChip(@NonNull Label label) {
+ return new CompactLabelChip(getContext(), label, gutter);
+ }
+}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/view/LabelChip.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/view/LabelChip.java
index db4e123d3..a41cdcc22 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/view/LabelChip.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/view/LabelChip.java
@@ -23,15 +23,15 @@ public class LabelChip extends Chip {
private final Label label;
+ protected final FlexboxLayout.LayoutParams params = new FlexboxLayout.LayoutParams(
+ ViewGroup.LayoutParams.WRAP_CONTENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT
+ );
+
public LabelChip(@NonNull Context context, @NonNull Label label, @Px int gutter) {
super(context);
this.label = label;
- FlexboxLayout.LayoutParams params = new FlexboxLayout.LayoutParams(
- ViewGroup.LayoutParams.WRAP_CONTENT,
- ViewGroup.LayoutParams.WRAP_CONTENT
- );
-
params.setMargins(0, 0, gutter, 0);
setLayoutParams(params);
setEnsureMinTouchTargetSize(false);
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/view/LabelLayout.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/view/LabelLayout.java
index 814c63ce1..ffe7190a3 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/view/LabelLayout.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/view/LabelLayout.java
@@ -20,7 +20,8 @@ import static it.niedermann.nextcloud.deck.util.DimensionUtil.dpToPx;
public class LabelLayout extends FlexboxLayout {
@Px
- private int gutter;
+ protected int gutter;
+ @NonNull
private List<LabelChip> chipList = new LinkedList<>();
public LabelLayout(Context context, AttributeSet attrs) {
@@ -82,9 +83,13 @@ public class LabelLayout extends FlexboxLayout {
continue labelList;
}
}
- LabelChip chip = new LabelChip(getContext(), label, gutter);
+ LabelChip chip = createLabelChip(label);
addView(chip);
chipList.add(chip);
}
}
+
+ protected LabelChip createLabelChip(@NonNull Label label) {
+ return new LabelChip(getContext(), label, gutter);
+ }
}
diff --git a/app/src/main/res/layout/item_card_compact.xml b/app/src/main/res/layout/item_card_compact.xml
new file mode 100644
index 000000000..e7fdb9732
--- /dev/null
+++ b/app/src/main/res/layout/item_card_compact.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<com.google.android.material.card.MaterialCardView 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:id="@+id/card"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="@dimen/spacer_2x"
+ android:layout_marginTop="@dimen/spacer_1x"
+ android:layout_marginEnd="@dimen/spacer_2x"
+ android:layout_marginBottom="@dimen/spacer_1x"
+ android:focusable="true"
+ app:cardBackgroundColor="@color/bg_card">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:paddingTop="@dimen/spacer_1x"
+ android:paddingBottom="@dimen/spacer_1x">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:paddingStart="@dimen/spacer_2x"
+ android:paddingEnd="0dp">
+
+ <TextView
+ android:id="@+id/card_title"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="4sp"
+ android:layout_weight="1"
+ android:textColor="?attr/colorAccent"
+ android:textSize="18sp"
+ tools:ignore="RtlSymmetry"
+ tools:text="Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut l" />
+
+ <ImageView
+ android:id="@+id/not_synced_yet"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="8sp"
+ android:contentDescription="@string/not_synced_yet"
+ android:visibility="gone"
+ app:srcCompat="@drawable/ic_sync_blue_24dp"
+ tools:visibility="visible" />
+
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:paddingStart="@dimen/spacer_1hx"
+ tools:ignore="RtlSymmetry">
+
+ <androidx.appcompat.widget.AppCompatTextView
+ android:id="@+id/card_due_date"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:background="@drawable/due_tomorrow_background"
+ android:drawablePadding="@dimen/spacer_1hx"
+ android:gravity="center"
+ android:padding="@dimen/spacer_1hx"
+ android:textColor="@color/fg_secondary"
+ app:drawableStartCompat="@drawable/calendar_blank_grey600_24dp"
+ tools:text="tomorrow" />
+
+ </LinearLayout>
+
+ <ImageView
+ android:id="@+id/card_menu"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:background="?attr/selectableItemBackgroundBorderless"
+ android:contentDescription="@string/label_menu"
+ android:padding="@dimen/spacer_1hx"
+ android:tint="?attr/colorAccent"
+ app:srcCompat="@drawable/ic_menu" />
+ </LinearLayout>
+
+ <it.niedermann.nextcloud.deck.ui.view.CompactLabelLayout
+ android:id="@+id/labels"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="@dimen/spacer_1x"
+ android:animateLayoutChanges="true"
+ android:paddingStart="@dimen/spacer_2x"
+ android:paddingEnd="@dimen/spacer_2x"
+ app:flexWrap="nowrap"
+ tools:layout_height="@dimen/avatar_size" />
+
+ </LinearLayout>
+</com.google.android.material.card.MaterialCardView> \ No newline at end of file
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index db8b51610..1a0cbca51 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -4,6 +4,8 @@
<dimen name="spacer_2x">16dp</dimen>
<dimen name="spacer_3x">24dp</dimen>
+ <dimen name="compact_label_height">6dp</dimen>
+
<!-- Drawer header -->
<dimen name="drawer_header_height">100dp</dimen>
<dimen name="drawer_header_logo_size">42dp</dimen>
diff --git a/app/src/main/res/values/setup.xml b/app/src/main/res/values/setup.xml
index 247bb0697..c790a5868 100644
--- a/app/src/main/res/values/setup.xml
+++ b/app/src/main/res/values/setup.xml
@@ -8,6 +8,7 @@
<string name="pref_key_wifi_only" translatable="false">wifiOnly</string>
<string name="pref_key_dark_theme" translatable="false">darkTheme</string>
<string name="pref_key_branding" translatable="false">branding</string>
+ <string name="pref_key_compact" translatable="false">compact</string>
<string name="pref_key_background_sync" translatable="false">backgroundSync</string>
<string name="pref_value_background_sync_off">off</string>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 208c8bdbb..ae74a0157 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -154,6 +154,7 @@
<string name="delete_board_message">This will permanently delete this board including all lists and cards.</string>
<string name="settings_theme_title">Dark theme</string>
<string name="settings_branding_title">Branding</string>
+ <string name="settings_compact_title">Compact mode</string>
<string name="settings_background_sync">Background synchronization</string>
<string name="pref_value_wifi_and_mobile">Sync on Wi-Fi and mobile data</string>
<string name="pref_value_wifi_only">Sync only on Wi-Fi</string>
diff --git a/app/src/main/res/xml/settings.xml b/app/src/main/res/xml/settings.xml
index 14943fff6..587d0f633 100644
--- a/app/src/main/res/xml/settings.xml
+++ b/app/src/main/res/xml/settings.xml
@@ -29,6 +29,12 @@
android:icon="@drawable/ic_format_paint_grey600_24dp"
android:key="@string/pref_key_branding"
android:title="@string/settings_branding_title"
- app:defaultValue="true" />
+ app:defaultValue="false" />
+
+ <it.niedermann.nextcloud.deck.ui.branding.BrandedSwitchPreference
+ android:icon="@drawable/ic_format_paint_grey600_24dp"
+ android:key="@string/pref_key_compact"
+ android:title="@string/settings_compact_title"
+ app:defaultValue="false" />
</it.niedermann.nextcloud.deck.ui.branding.BrandedPreferenceCategory>
</PreferenceScreen>