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
path: root/app
diff options
context:
space:
mode:
authorStefan Niedermann <info@niedermann.it>2020-07-20 16:26:38 +0300
committerStefan Niedermann <info@niedermann.it>2020-07-20 16:26:38 +0300
commit2919455778f058da9163a617e2193d78dab4a34e (patch)
tree9064c662b2d9019d206f9da382d034a1704132be /app
parent36c6742baca3084a70af94e5682451c985aabcfc (diff)
parentd91126b47a87e3ece1499a2c366fb31ac1122acd (diff)
Merge branch 'master' into stack-widget
# Conflicts: # app/src/main/res/values/strings.xml
Diffstat (limited to 'app')
-rw-r--r--app/build.gradle4
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java11
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/PushNotificationActivity.java9
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/attachments/AttachmentAdapter.java2
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/attachments/AttachmentsActivity.java10
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/DefaultCardViewHolder.java19
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/AttachmentViewHolder.java44
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/CardAttachmentAdapter.java94
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/CardAttachmentsFragment.java4
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/DefaultAttachmentViewHolder.java48
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/ImageAttachmentViewHolder.java30
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDialogFragment.java4
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/util/AttachmentUtil.java34
-rw-r--r--app/src/main/res/drawable/ic_baseline_subject_24.xml5
-rw-r--r--app/src/main/res/layout/activity_exception.xml1
-rw-r--r--app/src/main/res/layout/activity_main.xml2
-rw-r--r--app/src/main/res/layout/item_card_compact.xml1
-rw-r--r--app/src/main/res/layout/item_card_default.xml12
-rw-r--r--app/src/main/res/layout/item_card_default_only_title.xml1
-rw-r--r--app/src/main/res/layout/item_tip.xml1
-rw-r--r--app/src/main/res/values-ca/strings.xml4
-rw-r--r--app/src/main/res/values-cs-rCZ/strings.xml7
-rw-r--r--app/src/main/res/values-da/strings.xml1
-rw-r--r--app/src/main/res/values-de/strings.xml19
-rw-r--r--app/src/main/res/values-el/strings.xml4
-rw-r--r--app/src/main/res/values-es/strings.xml9
-rw-r--r--app/src/main/res/values-eu/strings.xml4
-rw-r--r--app/src/main/res/values-fr/strings.xml7
-rw-r--r--app/src/main/res/values-gl/strings.xml7
-rw-r--r--app/src/main/res/values-he/strings.xml2
-rw-r--r--app/src/main/res/values-hr/strings.xml2
-rw-r--r--app/src/main/res/values-hu-rHU/strings.xml2
-rw-r--r--app/src/main/res/values-it/strings.xml7
-rw-r--r--app/src/main/res/values-ja-rJP/strings.xml1
-rw-r--r--app/src/main/res/values-ko/strings.xml1
-rw-r--r--app/src/main/res/values-nl/strings.xml2
-rw-r--r--app/src/main/res/values-pl/strings.xml7
-rw-r--r--app/src/main/res/values-pt-rBR/strings.xml7
-rw-r--r--app/src/main/res/values-ru/strings.xml4
-rw-r--r--app/src/main/res/values-sk-rSK/strings.xml9
-rw-r--r--app/src/main/res/values-sl/strings.xml13
-rw-r--r--app/src/main/res/values-sr/strings.xml11
-rw-r--r--app/src/main/res/values-sv/strings.xml2
-rw-r--r--app/src/main/res/values-tr/strings.xml7
-rw-r--r--app/src/main/res/values-uk/strings.xml1
-rw-r--r--app/src/main/res/values-zh-rCN/strings.xml2
-rw-r--r--app/src/main/res/values/strings.xml2
47 files changed, 340 insertions, 140 deletions
diff --git a/app/build.gradle b/app/build.gradle
index 7a0eca9c7..ffe0981a4 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -6,8 +6,8 @@ android {
applicationId "it.niedermann.nextcloud.deck"
minSdkVersion 17
targetSdkVersion 29
- versionCode 1008001
- versionName "1.8.1"
+ versionCode 1008003
+ versionName "1.8.3"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
javaCompileOptions {
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java
index d761f2d51..100cb98d1 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java
@@ -768,6 +768,7 @@ public class SyncManager {
return liveData;
}
+ @Deprecated
@AnyThread
public WrappedLiveData<FullStack> updateStack(@NonNull FullStack stack) {
WrappedLiveData<FullStack> liveData = new WrappedLiveData<>();
@@ -777,7 +778,16 @@ public class SyncManager {
updateStack(account, board, stack, liveData);
});
return liveData;
+ }
+ @AnyThread
+ public WrappedLiveData<Void> updateStackTitle(long accountId, long localStackId, @NonNull String newTitle) {
+ WrappedLiveData<Void> liveData = new WrappedLiveData<>();
+ doAsync(() -> {
+ // TODO implement, replaces #updateStack(@NonNull FullStack stack)
+ liveData.postError(new UnsupportedOperationException("Not yet implemented."));
+ });
+ return liveData;
}
@AnyThread
@@ -1436,6 +1446,7 @@ public class SyncManager {
public LiveData<List<Label>> findProposalsForLabelsToAssign(final long accountId, final long boardId, long notAssignedToLocalCardId) {
return dataBaseAdapter.findProposalsForLabelsToAssign(accountId, boardId, notAssignedToLocalCardId);
}
+
public LiveData<List<Label>> findProposalsForLabelsToAssign(final long accountId, final long boardId) {
return findProposalsForLabelsToAssign(accountId, boardId, -1L);
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/PushNotificationActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/PushNotificationActivity.java
index b0b0d68ae..b0438c40b 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/PushNotificationActivity.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/PushNotificationActivity.java
@@ -5,6 +5,7 @@ import android.net.Uri;
import android.text.TextUtils;
import android.view.View;
+import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
import androidx.annotation.UiThread;
import androidx.appcompat.app.AppCompatActivity;
@@ -18,6 +19,7 @@ import it.niedermann.nextcloud.deck.model.Account;
import it.niedermann.nextcloud.deck.persistence.sync.SyncManager;
import it.niedermann.nextcloud.deck.ui.card.EditActivity;
import it.niedermann.nextcloud.deck.ui.exception.ExceptionHandler;
+import it.niedermann.nextcloud.deck.util.ColorUtil;
import static android.graphics.Color.parseColor;
import static it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.LiveDataHelper.observeOnce;
@@ -146,10 +148,13 @@ public class PushNotificationActivity extends AppCompatActivity {
return true;
}
+ // TODO implement Branded interface
+ // TODO apply branding based on board color
public void applyBrandToSubmitButton(@NonNull Account account) {
+ @ColorInt final int mainColor = parseColor(account.getColor());
try {
- binding.submit.setBackgroundColor(parseColor(account.getColor()));
- binding.submit.setTextColor(parseColor(account.getTextColor()));
+ binding.submit.setBackgroundColor(mainColor);
+ binding.submit.setTextColor(ColorUtil.getForegroundColorForBackgroundColor(mainColor));
} catch (Throwable t) {
DeckLog.logError(t);
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/attachments/AttachmentAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/attachments/AttachmentAdapter.java
index 0794323ec..b17b34137 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/attachments/AttachmentAdapter.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/attachments/AttachmentAdapter.java
@@ -52,7 +52,7 @@ public class AttachmentAdapter extends RecyclerView.Adapter<AttachmentViewHolder
@Override
public void onBindViewHolder(@NonNull AttachmentViewHolder holder, int position) {
final Attachment attachment = attachments.get(position);
- final String uri = AttachmentUtil.getRemoteUrl(account.getUrl(), cardRemoteId, attachment.getId());
+ final String uri = AttachmentUtil.getRemoteOrLocalUrl(account.getUrl(), cardRemoteId, attachment);
if (MimeTypeUtil.isImage(attachment.getMimetype())) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
holder.binding.preview.setTransitionName(context.getString(R.string.transition_attachment_preview, String.valueOf(attachment.getLocalId())));
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/attachments/AttachmentsActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/attachments/AttachmentsActivity.java
index 98cfd4440..3b1c534ba 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/attachments/AttachmentsActivity.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/attachments/AttachmentsActivity.java
@@ -2,6 +2,7 @@ package it.niedermann.nextcloud.deck.ui.attachments;
import android.content.Context;
import android.content.Intent;
+import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
@@ -9,6 +10,8 @@ import android.view.View;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.SharedElementCallback;
+import androidx.core.content.ContextCompat;
+import androidx.core.graphics.drawable.DrawableCompat;
import androidx.recyclerview.widget.RecyclerView;
import androidx.viewpager2.widget.ViewPager2;
@@ -44,6 +47,9 @@ public class AttachmentsActivity extends AppCompatActivity {
supportPostponeEnterTransition();
setSupportActionBar(binding.toolbar);
+ final Drawable navigationIcon = getResources().getDrawable(R.drawable.ic_arrow_back_white_24dp);
+ DrawableCompat.setTint(navigationIcon, ContextCompat.getColor(this, android.R.color.white));
+ binding.toolbar.setNavigationIcon(navigationIcon);
final Bundle args = getIntent().getExtras();
if (args == null || !args.containsKey(BUNDLE_KEY_ACCOUNT) || !args.containsKey(BUNDLE_KEY_CARD_ID)) {
@@ -67,7 +73,7 @@ public class AttachmentsActivity extends AppCompatActivity {
}
}
if (fullCard.getAttachments().size() == 0) {
- DeckLog.logError(new IllegalStateException(AttachmentsActivity.class.getSimpleName() + " called, but card " + fullCard.getLocalId() + "has no attachments"));
+ DeckLog.logError(new IllegalStateException(AttachmentsActivity.class.getSimpleName() + " called, but card " + fullCard.getCard().getTitle() + " has no attachments"));
supportFinishAfterTransition();
return;
}
@@ -79,7 +85,7 @@ public class AttachmentsActivity extends AppCompatActivity {
binding.toolbar.setTitle(attachments.get(position).getBasename());
}
};
- RecyclerView.Adapter adapter = new AttachmentAdapter(account, fullCard.getId(), attachments);
+ RecyclerView.Adapter<AttachmentViewHolder> adapter = new AttachmentAdapter(account, fullCard.getId(), attachments);
binding.viewPager.setAdapter(adapter);
binding.viewPager.registerOnPageChangeCallback(onPageChangeCallback);
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/DefaultCardViewHolder.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/DefaultCardViewHolder.java
index 5e82061d1..a362fd3b7 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/DefaultCardViewHolder.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/DefaultCardViewHolder.java
@@ -1,6 +1,7 @@
package it.niedermann.nextcloud.deck.ui.card;
import android.content.Context;
+import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
@@ -21,7 +22,7 @@ import java.util.List;
import it.niedermann.nextcloud.deck.R;
import it.niedermann.nextcloud.deck.databinding.ItemCardDefaultBinding;
import it.niedermann.nextcloud.deck.model.Account;
-import it.niedermann.nextcloud.deck.model.Card;
+import it.niedermann.nextcloud.deck.model.Card.TaskStatus;
import it.niedermann.nextcloud.deck.model.Label;
import it.niedermann.nextcloud.deck.model.User;
import it.niedermann.nextcloud.deck.model.full.FullCard;
@@ -51,7 +52,6 @@ public class DefaultCardViewHolder extends AbstractCardViewHolder {
}
final int attachmentsCount = fullCard.getAttachments().size();
-
if (attachmentsCount == 0) {
binding.cardCountAttachments.setVisibility(View.GONE);
} else {
@@ -60,7 +60,6 @@ public class DefaultCardViewHolder extends AbstractCardViewHolder {
}
final int commentsCount = fullCard.getCommentCount();
-
if (commentsCount == 0) {
binding.cardCountComments.setVisibility(View.GONE);
} else {
@@ -69,7 +68,7 @@ public class DefaultCardViewHolder extends AbstractCardViewHolder {
binding.cardCountComments.setVisibility(View.VISIBLE);
}
- List<Label> labels = fullCard.getLabels();
+ final List<Label> labels = fullCard.getLabels();
if (labels != null && labels.size() > 0) {
binding.labels.updateLabels(labels);
binding.labels.setVisibility(View.VISIBLE);
@@ -78,12 +77,20 @@ public class DefaultCardViewHolder extends AbstractCardViewHolder {
binding.labels.setVisibility(View.GONE);
}
- Card.TaskStatus taskStatus = fullCard.getCard().getTaskStatus();
+ final TaskStatus taskStatus = fullCard.getCard().getTaskStatus();
if (taskStatus.taskCount > 0) {
binding.cardCountTasks.setText(context.getResources().getString(R.string.task_count, String.valueOf(taskStatus.doneCount), String.valueOf(taskStatus.taskCount)));
+ binding.cardCountTasks.setCompoundDrawablesWithIntrinsicBounds(context.getResources().getDrawable(R.drawable.ic_check_grey600_24dp), null, null, null);
binding.cardCountTasks.setVisibility(View.VISIBLE);
} else {
- binding.cardCountTasks.setVisibility(View.GONE);
+ final String description = fullCard.getCard().getDescription();
+ if (!TextUtils.isEmpty(description)) {
+ binding.cardCountTasks.setCompoundDrawablesWithIntrinsicBounds(context.getResources().getDrawable(R.drawable.ic_baseline_subject_24), null, null, null);
+ binding.cardCountTasks.setText(null);
+ binding.cardCountTasks.setVisibility(View.VISIBLE);
+ } else {
+ binding.cardCountTasks.setVisibility(View.GONE);
+ }
}
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/AttachmentViewHolder.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/AttachmentViewHolder.java
index ed3031b7c..3b4a913ed 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/AttachmentViewHolder.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/AttachmentViewHolder.java
@@ -1,18 +1,60 @@
package it.niedermann.nextcloud.deck.ui.card.attachments;
+import android.view.MenuInflater;
import android.view.View;
import android.widget.ImageView;
+import androidx.annotation.CallSuper;
import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.core.graphics.drawable.DrawableCompat;
+import androidx.fragment.app.FragmentManager;
import androidx.recyclerview.widget.RecyclerView;
+import it.niedermann.nextcloud.deck.R;
+import it.niedermann.nextcloud.deck.model.Account;
+import it.niedermann.nextcloud.deck.model.Attachment;
+import it.niedermann.nextcloud.deck.model.enums.DBStatus;
+import it.niedermann.nextcloud.deck.ui.branding.BrandingUtil;
+import it.niedermann.nextcloud.deck.util.AttachmentUtil;
+
+import static it.niedermann.nextcloud.deck.util.ClipboardUtil.copyToClipboard;
+
public abstract class AttachmentViewHolder extends RecyclerView.ViewHolder {
AttachmentViewHolder(@NonNull View itemView) {
super(itemView);
}
+ public void bind(@NonNull Account account, @NonNull MenuInflater menuInflater, @NonNull FragmentManager fragmentManager, Long cardRemoteId, Attachment attachment, @Nullable View.OnClickListener onClickListener, @ColorInt int mainColor) {
+ bind(menuInflater, fragmentManager, cardRemoteId, attachment, onClickListener, mainColor, AttachmentUtil.getRemoteOrLocalUrl(account.getUrl(), cardRemoteId, attachment));
+ }
+
+ @CallSuper
+ public void bind(@NonNull MenuInflater menuInflater, @NonNull FragmentManager fragmentManager, Long cardRemoteId, Attachment attachment, @Nullable View.OnClickListener onClickListener, @ColorInt int mainColor, @Nullable String attachmentUri) {
+ setNotSyncedYetStatus(!DBStatus.LOCAL_EDITED.equals(attachment.getStatusEnum()), mainColor);
+ itemView.setOnCreateContextMenuListener((menu, v, menuInfo) -> {
+ menuInflater.inflate(R.menu.attachment_menu, menu);
+ menu.findItem(R.id.delete).setOnMenuItemClickListener(item -> {
+ DeleteAttachmentDialogFragment.newInstance(attachment).show(fragmentManager, DeleteAttachmentDialogFragment.class.getCanonicalName());
+ return false;
+ });
+ if (attachmentUri == null || attachment.getId() == null || cardRemoteId == null) {
+ menu.findItem(android.R.id.copyUrl).setVisible(false);
+ } else {
+ menu.findItem(android.R.id.copyUrl).setVisible(true);
+ menu.findItem(android.R.id.copyUrl).setOnMenuItemClickListener(item -> copyToClipboard(itemView.getContext(), attachment.getFilename(), attachmentUri));
+ }
+ });
+ }
+
abstract protected ImageView getPreview();
- abstract protected void setNotSyncedYetStatus(boolean synced, @ColorInt int color);
+ protected void setNotSyncedYetStatus(boolean synced, @ColorInt int mainColor) {
+ final ImageView notSyncedYet = getNotSyncedYetStatusIcon();
+ DrawableCompat.setTint(notSyncedYet.getDrawable(), BrandingUtil.getSecondaryForegroundColorDependingOnTheme(notSyncedYet.getContext(), mainColor));
+ notSyncedYet.setVisibility(synced ? View.GONE : View.VISIBLE);
+ }
+
+ abstract protected ImageView getNotSyncedYetStatusIcon();
} \ No newline at end of file
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/CardAttachmentAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/CardAttachmentAdapter.java
index a72ed8ef2..ea347417a 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/CardAttachmentAdapter.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/CardAttachmentAdapter.java
@@ -3,9 +3,7 @@ package it.niedermann.nextcloud.deck.ui.card.attachments;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
-import android.net.Uri;
import android.os.Build;
-import android.text.format.Formatter;
import android.view.LayoutInflater;
import android.view.MenuInflater;
import android.view.View;
@@ -18,8 +16,6 @@ import androidx.core.app.ActivityOptionsCompat;
import androidx.fragment.app.FragmentManager;
import androidx.recyclerview.widget.RecyclerView;
-import com.bumptech.glide.Glide;
-
import java.util.ArrayList;
import java.util.List;
@@ -28,17 +24,15 @@ import it.niedermann.nextcloud.deck.databinding.ItemAttachmentDefaultBinding;
import it.niedermann.nextcloud.deck.databinding.ItemAttachmentImageBinding;
import it.niedermann.nextcloud.deck.model.Account;
import it.niedermann.nextcloud.deck.model.Attachment;
-import it.niedermann.nextcloud.deck.model.enums.DBStatus;
import it.niedermann.nextcloud.deck.ui.attachments.AttachmentsActivity;
-import it.niedermann.nextcloud.deck.util.AttachmentUtil;
-import it.niedermann.nextcloud.deck.util.DateUtil;
+import it.niedermann.nextcloud.deck.ui.branding.Branded;
import it.niedermann.nextcloud.deck.util.MimeTypeUtil;
import static androidx.recyclerview.widget.RecyclerView.NO_ID;
-import static it.niedermann.nextcloud.deck.util.ClipboardUtil.copyToClipboard;
+import static it.niedermann.nextcloud.deck.util.AttachmentUtil.openAttachmentInBrowser;
@SuppressWarnings("WeakerAccess")
-public class CardAttachmentAdapter extends RecyclerView.Adapter<AttachmentViewHolder> {
+public class CardAttachmentAdapter extends RecyclerView.Adapter<AttachmentViewHolder> implements Branded {
public static final int VIEW_TYPE_DEFAULT = 2;
public static final int VIEW_TYPE_IMAGE = 1;
@@ -54,14 +48,13 @@ public class CardAttachmentAdapter extends RecyclerView.Adapter<AttachmentViewHo
FragmentManager fragmentManager;
@NonNull
private List<Attachment> attachments = new ArrayList<>();
- @Nullable
+ @NonNull
private final AttachmentClickedListener attachmentClickedListener;
CardAttachmentAdapter(
- @NonNull Context context,
@NonNull FragmentManager fragmentManager,
@NonNull MenuInflater menuInflater,
- @Nullable AttachmentClickedListener attachmentClickedListener,
+ @NonNull AttachmentClickedListener attachmentClickedListener,
@NonNull Account account,
@Nullable Long cardLocalId
) {
@@ -95,39 +88,14 @@ public class CardAttachmentAdapter extends RecyclerView.Adapter<AttachmentViewHo
@Override
public void onBindViewHolder(@NonNull AttachmentViewHolder holder, int position) {
- final Context context = holder.itemView.getContext();
final Attachment attachment = attachments.get(position);
- final int viewType = getItemViewType(position);
-
- @Nullable final String uri = (attachment.getId() == null || cardRemoteId == null)
- ? attachment.getLocalPath() :
- AttachmentUtil.getRemoteUrl(account.getUrl(), cardRemoteId, attachment.getId());
- holder.setNotSyncedYetStatus(!DBStatus.LOCAL_EDITED.equals(attachment.getStatusEnum()), mainColor);
- holder.itemView.setOnCreateContextMenuListener((menu, v, menuInfo) -> {
- menuInflater.inflate(R.menu.attachment_menu, menu);
- menu.findItem(R.id.delete).setOnMenuItemClickListener(item -> {
- DeleteAttachmentDialogFragment.newInstance(attachment).show(fragmentManager, DeleteAttachmentDialogFragment.class.getCanonicalName());
- return false;
- });
- if (uri == null) {
- menu.findItem(android.R.id.copyUrl).setVisible(false);
- } else {
- menu.findItem(android.R.id.copyUrl).setOnMenuItemClickListener(item -> copyToClipboard(context, attachment.getFilename(), uri));
- }
- });
+ final Context context = holder.itemView.getContext();
+ final View.OnClickListener onClickListener;
- switch (viewType) {
+ switch (getItemViewType(position)) {
case VIEW_TYPE_IMAGE: {
- holder.getPreview().setImageResource(R.drawable.ic_image_grey600_24dp);
- Glide.with(context)
- .load(uri)
- .placeholder(R.drawable.ic_image_grey600_24dp)
- .error(R.drawable.ic_image_grey600_24dp)
- .into(holder.getPreview());
- holder.itemView.setOnClickListener((v) -> {
- if (attachmentClickedListener != null) {
- attachmentClickedListener.onAttachmentClicked(position);
- }
+ onClickListener = (event) -> {
+ attachmentClickedListener.onAttachmentClicked(position);
final Intent intent = AttachmentsActivity.createIntent(context, account, cardLocalId, attachment.getLocalId());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && context instanceof Activity) {
String transitionName = context.getString(R.string.transition_attachment_preview, String.valueOf(attachment.getLocalId()));
@@ -136,46 +104,16 @@ public class CardAttachmentAdapter extends RecyclerView.Adapter<AttachmentViewHo
} else {
context.startActivity(intent);
}
- });
+ };
break;
}
case VIEW_TYPE_DEFAULT:
default: {
- DefaultAttachmentViewHolder defaultHolder = (DefaultAttachmentViewHolder) holder;
-
- if (MimeTypeUtil.isAudio(attachment.getMimetype())) {
- holder.getPreview().setImageResource(R.drawable.ic_music_note_grey600_24dp);
- } else if (MimeTypeUtil.isVideo(attachment.getMimetype())) {
- holder.getPreview().setImageResource(R.drawable.ic_local_movies_grey600_24dp);
- } else if (MimeTypeUtil.isPdf(attachment.getMimetype())) {
- holder.getPreview().setImageResource(R.drawable.ic_baseline_picture_as_pdf_24);
- } else if (MimeTypeUtil.isContact(attachment.getMimetype())) {
- holder.getPreview().setImageResource(R.drawable.ic_baseline_contact_mail_24);
- } else {
- holder.getPreview().setImageResource(R.drawable.ic_attach_file_grey600_24dp);
- }
-
- if (cardRemoteId != null) {
- defaultHolder.itemView.setOnClickListener((event) -> {
- Intent openURL = new Intent(Intent.ACTION_VIEW);
- openURL.setData(Uri.parse(AttachmentUtil.getRemoteUrl(account.getUrl(), cardRemoteId, attachment.getId())));
- context.startActivity(openURL);
- });
- }
- defaultHolder.binding.filename.setText(attachment.getBasename());
- defaultHolder.binding.filesize.setText(Formatter.formatFileSize(context, attachment.getFilesize()));
- if (attachment.getLastModifiedLocal() != null) {
- defaultHolder.binding.modified.setText(DateUtil.getRelativeDateTimeString(context, attachment.getLastModifiedLocal().getTime()));
- defaultHolder.binding.modified.setVisibility(View.VISIBLE);
- } else if (attachment.getLastModified() != null) {
- defaultHolder.binding.modified.setText(DateUtil.getRelativeDateTimeString(context, attachment.getLastModified().getTime()));
- defaultHolder.binding.modified.setVisibility(View.VISIBLE);
- } else {
- defaultHolder.binding.modified.setVisibility(View.GONE);
- }
+ onClickListener = (event) -> openAttachmentInBrowser(context, account.getUrl(), cardRemoteId, attachment.getId());
break;
}
}
+ holder.bind(account, menuInflater, fragmentManager, cardRemoteId, attachment, onClickListener, mainColor);
}
@Override
@@ -205,4 +143,10 @@ public class CardAttachmentAdapter extends RecyclerView.Adapter<AttachmentViewHo
this.attachments.remove(a);
notifyItemRemoved(index);
}
+
+ @Override
+ public void applyBrand(@ColorInt int mainColor) {
+ this.mainColor = mainColor;
+ notifyDataSetChanged();
+ }
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/CardAttachmentsFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/CardAttachmentsFragment.java
index 23f6377a5..8cf948e6f 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/CardAttachmentsFragment.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/CardAttachmentsFragment.java
@@ -82,7 +82,6 @@ public class CardAttachmentsFragment extends BrandedFragment implements Attachme
syncManager = new SyncManager(requireContext());
adapter = new CardAttachmentAdapter(
- requireContext(),
getChildFragmentManager(),
requireActivity().getMenuInflater(),
this,
@@ -163,6 +162,7 @@ public class CardAttachmentsFragment extends BrandedFragment implements Attachme
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+ //noinspection SwitchStatementWithTooFewBranches
switch (requestCode) {
case REQUEST_CODE_ADD_FILE: {
if (resultCode == RESULT_OK) {
@@ -245,6 +245,7 @@ public class CardAttachmentsFragment extends BrandedFragment implements Attachme
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
+ //noinspection SwitchStatementWithTooFewBranches
switch (requestCode) {
case REQUEST_CODE_ADD_FILE_PERMISSION:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
@@ -289,6 +290,7 @@ public class CardAttachmentsFragment extends BrandedFragment implements Attachme
@Override
public void applyBrand(int mainColor) {
applyBrandToFAB(mainColor, binding.fab);
+ adapter.applyBrand(mainColor);
}
public static Fragment newInstance() {
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/DefaultAttachmentViewHolder.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/DefaultAttachmentViewHolder.java
index 7acdd390e..2890d2a81 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/DefaultAttachmentViewHolder.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/DefaultAttachmentViewHolder.java
@@ -1,15 +1,25 @@
package it.niedermann.nextcloud.deck.ui.card.attachments;
+import android.text.format.Formatter;
+import android.view.MenuInflater;
import android.view.View;
import android.widget.ImageView;
import androidx.annotation.ColorInt;
-import androidx.core.graphics.drawable.DrawableCompat;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.FragmentManager;
+import it.niedermann.nextcloud.deck.R;
import it.niedermann.nextcloud.deck.databinding.ItemAttachmentDefaultBinding;
+import it.niedermann.nextcloud.deck.model.Account;
+import it.niedermann.nextcloud.deck.model.Attachment;
+import it.niedermann.nextcloud.deck.util.AttachmentUtil;
+import it.niedermann.nextcloud.deck.util.DateUtil;
+import it.niedermann.nextcloud.deck.util.MimeTypeUtil;
public class DefaultAttachmentViewHolder extends AttachmentViewHolder {
- ItemAttachmentDefaultBinding binding;
+ private ItemAttachmentDefaultBinding binding;
@SuppressWarnings("WeakerAccess")
public DefaultAttachmentViewHolder(ItemAttachmentDefaultBinding binding) {
@@ -23,8 +33,36 @@ public class DefaultAttachmentViewHolder extends AttachmentViewHolder {
}
@Override
- protected void setNotSyncedYetStatus(boolean synced, @ColorInt int mainColor) {
- DrawableCompat.setTint(binding.notSyncedYet.getDrawable(), mainColor);
- binding.notSyncedYet.setVisibility(synced ? View.GONE : View.VISIBLE);
+ protected ImageView getNotSyncedYetStatusIcon() {
+ return binding.notSyncedYet;
+ }
+
+ public void bind(@NonNull Account account, @NonNull MenuInflater menuInflater, @NonNull FragmentManager fragmentManager, Long cardRemoteId, Attachment attachment, @Nullable View.OnClickListener onClickListener, @ColorInt int mainColor) {
+ super.bind(account, menuInflater, fragmentManager, cardRemoteId, attachment, onClickListener, mainColor);
+
+ if (MimeTypeUtil.isAudio(attachment.getMimetype())) {
+ getPreview().setImageResource(R.drawable.ic_music_note_grey600_24dp);
+ } else if (MimeTypeUtil.isVideo(attachment.getMimetype())) {
+ getPreview().setImageResource(R.drawable.ic_local_movies_grey600_24dp);
+ } else if (MimeTypeUtil.isPdf(attachment.getMimetype())) {
+ getPreview().setImageResource(R.drawable.ic_baseline_picture_as_pdf_24);
+ } else if (MimeTypeUtil.isContact(attachment.getMimetype())) {
+ getPreview().setImageResource(R.drawable.ic_baseline_contact_mail_24);
+ } else {
+ getPreview().setImageResource(R.drawable.ic_attach_file_grey600_24dp);
+ }
+
+ itemView.setOnClickListener((event) -> AttachmentUtil.openAttachmentInBrowser(itemView.getContext(), account.getUrl(), cardRemoteId, attachment.getId()));
+ binding.filename.setText(attachment.getBasename());
+ binding.filesize.setText(Formatter.formatFileSize(binding.filesize.getContext(), attachment.getFilesize()));
+ if (attachment.getLastModifiedLocal() != null) {
+ binding.modified.setText(DateUtil.getRelativeDateTimeString(binding.modified.getContext(), attachment.getLastModifiedLocal().getTime()));
+ binding.modified.setVisibility(View.VISIBLE);
+ } else if (attachment.getLastModified() != null) {
+ binding.modified.setText(DateUtil.getRelativeDateTimeString(binding.modified.getContext(), attachment.getLastModified().getTime()));
+ binding.modified.setVisibility(View.VISIBLE);
+ } else {
+ binding.modified.setVisibility(View.GONE);
+ }
}
} \ No newline at end of file
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/ImageAttachmentViewHolder.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/ImageAttachmentViewHolder.java
index d13675a30..e3139295f 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/ImageAttachmentViewHolder.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/ImageAttachmentViewHolder.java
@@ -1,12 +1,21 @@
package it.niedermann.nextcloud.deck.ui.card.attachments;
+import android.view.MenuInflater;
import android.view.View;
import android.widget.ImageView;
import androidx.annotation.ColorInt;
-import androidx.core.graphics.drawable.DrawableCompat;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.FragmentManager;
+import com.bumptech.glide.Glide;
+
+import it.niedermann.nextcloud.deck.R;
import it.niedermann.nextcloud.deck.databinding.ItemAttachmentImageBinding;
+import it.niedermann.nextcloud.deck.model.Account;
+import it.niedermann.nextcloud.deck.model.Attachment;
+import it.niedermann.nextcloud.deck.util.AttachmentUtil;
public class ImageAttachmentViewHolder extends AttachmentViewHolder {
private ItemAttachmentImageBinding binding;
@@ -23,8 +32,21 @@ public class ImageAttachmentViewHolder extends AttachmentViewHolder {
}
@Override
- protected void setNotSyncedYetStatus(boolean synced, @ColorInt int mainColor) {
- DrawableCompat.setTint(binding.notSyncedYet.getDrawable(), mainColor);
- binding.notSyncedYet.setVisibility(synced ? View.GONE : View.VISIBLE);
+ protected ImageView getNotSyncedYetStatusIcon() {
+ return binding.notSyncedYet;
+ }
+
+ public void bind(@NonNull Account account, @NonNull MenuInflater menuInflater, @NonNull FragmentManager fragmentManager, Long cardRemoteId, Attachment attachment, @Nullable View.OnClickListener onClickListener, @ColorInt int mainColor) {
+ @Nullable final String uri = AttachmentUtil.getRemoteOrLocalUrl(account.getUrl(), cardRemoteId, attachment);
+
+ super.bind(menuInflater, fragmentManager, cardRemoteId, attachment, onClickListener, mainColor, uri);
+
+ getPreview().setImageResource(R.drawable.ic_image_grey600_24dp);
+ Glide.with(getPreview().getContext())
+ .load(uri)
+ .placeholder(R.drawable.ic_image_grey600_24dp)
+ .error(R.drawable.ic_image_grey600_24dp)
+ .into(getPreview());
+ itemView.setOnClickListener(onClickListener);
}
} \ No newline at end of file
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 b6a0c17a4..b3bba2f05 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
@@ -48,7 +48,7 @@ public class FilterDialogFragment extends BrandedDialogFragment {
super.onCreate(savedInstanceState);
indicator = getResources().getDrawable(R.drawable.circle_grey600_8dp);
- indicator.setColorFilter(getResources().getColor(R.color.primary), PorterDuff.Mode.SRC_ATOP);
+ indicator.setColorFilter(getResources().getColor(R.color.defaultBrand), PorterDuff.Mode.SRC_ATOP);
filterViewModel = new ViewModelProvider(requireActivity()).get(FilterViewModel.class);
@@ -66,7 +66,7 @@ public class FilterDialogFragment extends BrandedDialogFragment {
tab.setIcon(draft.getLabels().size() > 0 ? indicator : null);
break;
case 1:
- tab.setIcon(draft.getUsers().size() > 0 ? indicator : null);
+ tab.setIcon(draft.getUsers().size() > 0 || draft.isNoAssignedUser() ? indicator : null);
break;
case 2:
tab.setIcon(draft.getDueType() != EDueType.NO_FILTER ? indicator : null);
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/util/AttachmentUtil.java b/app/src/main/java/it/niedermann/nextcloud/deck/util/AttachmentUtil.java
index 6b2d6925f..844a301e8 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/util/AttachmentUtil.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/util/AttachmentUtil.java
@@ -1,9 +1,12 @@
package it.niedermann.nextcloud.deck.util;
import android.content.Context;
+import android.content.Intent;
import android.net.Uri;
+import android.widget.Toast;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import java.io.File;
import java.io.FileNotFoundException;
@@ -12,6 +15,8 @@ import java.io.IOException;
import java.io.InputStream;
import it.niedermann.nextcloud.deck.DeckLog;
+import it.niedermann.nextcloud.deck.R;
+import it.niedermann.nextcloud.deck.model.Attachment;
/**
* Created by stefan on 07.03.20.
@@ -22,7 +27,34 @@ public class AttachmentUtil {
private AttachmentUtil() {
}
- public static String getRemoteUrl(String accountUrl, long cardRemoteId, long attachmentRemoteId) {
+ /**
+ * @return {@link AttachmentUtil#getRemoteUrl} or {@link Attachment#getLocalPath()} as fallback in case this {@param attachment} has not yet been synced.
+ */
+ @Nullable
+ public static String getRemoteOrLocalUrl(@NonNull String accountUrl, @Nullable Long cardRemoteId, @NonNull Attachment attachment) {
+ return (attachment.getId() == null || cardRemoteId == null)
+ ? attachment.getLocalPath()
+ : getRemoteUrl(accountUrl, cardRemoteId, attachment.getId());
+ }
+
+ /**
+ * Tries to open the given {@link Attachment} in web browser. Displays a toast on failure.
+ */
+ public static void openAttachmentInBrowser(@NonNull Context context, @NonNull String accountUrl, Long cardRemoteId, Long attachmentRemoteId) {
+ if (cardRemoteId == null) {
+ Toast.makeText(context, R.string.card_does_not_yet_exist, Toast.LENGTH_LONG).show();
+ DeckLog.logError(new IllegalArgumentException("cardRemoteId must not be null."));
+ return;
+ }
+ if (attachmentRemoteId == null) {
+ Toast.makeText(context, R.string.attachment_does_not_yet_exist, Toast.LENGTH_LONG).show();
+ DeckLog.logError(new IllegalArgumentException("attachmentRemoteId must not be null."));
+ return;
+ }
+ context.startActivity(new Intent(Intent.ACTION_VIEW).setData(Uri.parse(AttachmentUtil.getRemoteUrl(accountUrl, cardRemoteId, attachmentRemoteId))));
+ }
+
+ private static String getRemoteUrl(@NonNull String accountUrl, @NonNull Long cardRemoteId, @NonNull Long attachmentRemoteId) {
return accountUrl + "/index.php/apps/deck/cards/" + cardRemoteId + "/attachment/" + attachmentRemoteId;
}
diff --git a/app/src/main/res/drawable/ic_baseline_subject_24.xml b/app/src/main/res/drawable/ic_baseline_subject_24.xml
new file mode 100644
index 000000000..37cd0c43d
--- /dev/null
+++ b/app/src/main/res/drawable/ic_baseline_subject_24.xml
@@ -0,0 +1,5 @@
+<vector android:autoMirrored="true" android:height="24dp"
+ android:tint="#757575" android:viewportHeight="24"
+ android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+ <path android:fillColor="#FF000000" android:pathData="M14,17L4,17v2h10v-2zM20,9L4,9v2h16L20,9zM4,15h16v-2L4,13v2zM4,5v2h16L20,5L4,5z"/>
+</vector>
diff --git a/app/src/main/res/layout/activity_exception.xml b/app/src/main/res/layout/activity_exception.xml
index 881c8fa85..932fa7bf2 100644
--- a/app/src/main/res/layout/activity_exception.xml
+++ b/app/src/main/res/layout/activity_exception.xml
@@ -30,7 +30,6 @@
android:layout_weight="1"
android:hint="An error appeared."
app:drawableEndCompat="@drawable/ic_bug_report_black_24dp"
- app:drawableRightCompat="@drawable/ic_bug_report_black_24dp"
tools:ignore="HardcodedText" />
</LinearLayout>
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index e0af061bf..ac0dadf82 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -45,7 +45,6 @@
android:paddingEnd="@dimen/spacer_1hx"
android:text="@string/info_box_maintenance_mode"
android:textColor="@color/grey600"
- app:drawableLeftCompat="@drawable/ic_info_outline_grey600_24dp"
app:drawableStartCompat="@drawable/ic_info_outline_grey600_24dp" />
</LinearLayout>
@@ -71,7 +70,6 @@
android:paddingEnd="@dimen/spacer_1hx"
android:text="@string/info_box_version_not_supported"
android:textColor="@android:color/white"
- app:drawableLeftCompat="@drawable/ic_warning_white_24dp"
app:drawableStartCompat="@drawable/ic_warning_white_24dp" />
</LinearLayout>
diff --git a/app/src/main/res/layout/item_card_compact.xml b/app/src/main/res/layout/item_card_compact.xml
index 457aa0d25..ce5ef98f7 100644
--- a/app/src/main/res/layout/item_card_compact.xml
+++ b/app/src/main/res/layout/item_card_compact.xml
@@ -62,6 +62,7 @@
android:drawablePadding="@dimen/spacer_1hx"
android:gravity="center"
android:padding="@dimen/spacer_1hx"
+ android:paddingEnd="@dimen/spacer_1x"
android:textColor="@color/fg_secondary"
app:drawableStartCompat="@drawable/calendar_blank_grey600_24dp"
tools:text="tomorrow" />
diff --git a/app/src/main/res/layout/item_card_default.xml b/app/src/main/res/layout/item_card_default.xml
index 01970ef57..724d4dd4f 100644
--- a/app/src/main/res/layout/item_card_default.xml
+++ b/app/src/main/res/layout/item_card_default.xml
@@ -9,8 +9,8 @@
android:layout_marginTop="@dimen/spacer_1x"
android:layout_marginEnd="@dimen/spacer_2x"
android:layout_marginBottom="@dimen/spacer_1x"
- app:cardBackgroundColor="@color/bg_card"
- android:focusable="true">
+ android:focusable="true"
+ app:cardBackgroundColor="@color/bg_card">
<LinearLayout
android:layout_width="match_parent"
@@ -32,8 +32,8 @@
android:layout_height="wrap_content"
android:layout_marginTop="4sp"
android:layout_weight="1"
- android:textSize="18sp"
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" />
@@ -62,6 +62,7 @@
android:drawablePadding="@dimen/spacer_1hx"
android:gravity="center"
android:padding="@dimen/spacer_1hx"
+ android:paddingEnd="@dimen/spacer_1x"
android:textColor="@color/fg_secondary"
app:drawableStartCompat="@drawable/calendar_blank_grey600_24dp"
tools:text="tomorrow" />
@@ -100,7 +101,6 @@
android:drawablePadding="@dimen/spacer_1hx"
android:gravity="center_vertical"
android:padding="@dimen/spacer_1hx"
- app:drawableLeftCompat="@drawable/ic_comment_white_24dp"
app:drawableStartCompat="@drawable/ic_comment_white_24dp"
app:drawableTint="@color/grey600"
tools:text="2" />
@@ -111,8 +111,7 @@
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:padding="@dimen/spacer_1hx"
- app:drawableLeftCompat="@drawable/ic_check_grey600_24dp"
- app:drawableStartCompat="@drawable/ic_check_grey600_24dp"
+ tools:drawableStartCompat="@drawable/ic_check_grey600_24dp"
tools:text="1/2" />
<androidx.appcompat.widget.AppCompatTextView
@@ -121,7 +120,6 @@
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:padding="@dimen/spacer_1hx"
- app:drawableLeftCompat="@drawable/ic_attach_file_grey600_24dp"
app:drawableStartCompat="@drawable/ic_attach_file_grey600_24dp"
tools:text="3" />
</LinearLayout>
diff --git a/app/src/main/res/layout/item_card_default_only_title.xml b/app/src/main/res/layout/item_card_default_only_title.xml
index 7d32e7f44..67dace190 100644
--- a/app/src/main/res/layout/item_card_default_only_title.xml
+++ b/app/src/main/res/layout/item_card_default_only_title.xml
@@ -58,6 +58,7 @@
android:drawablePadding="@dimen/spacer_1hx"
android:gravity="center"
android:padding="@dimen/spacer_1hx"
+ android:paddingEnd="@dimen/spacer_1x"
android:textColor="@color/fg_secondary"
app:drawableStartCompat="@drawable/calendar_blank_grey600_24dp"
tools:text="tomorrow" />
diff --git a/app/src/main/res/layout/item_tip.xml b/app/src/main/res/layout/item_tip.xml
index 2177d013c..fc2d3587a 100644
--- a/app/src/main/res/layout/item_tip.xml
+++ b/app/src/main/res/layout/item_tip.xml
@@ -15,7 +15,6 @@
android:drawablePadding="@dimen/spacer_2x"
android:gravity="start|center"
android:textAppearance="?attr/textAppearanceListItem"
- app:drawableLeftCompat="@drawable/ic_lightbulb_outline_grey600_24dp"
app:drawableStartCompat="@drawable/ic_lightbulb_outline_grey600_24dp"
tools:maxLength="200"
tools:text="@tools:sample/lorem/random" />
diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml
index 1e3f1fb8b..d11a012eb 100644
--- a/app/src/main/res/values-ca/strings.xml
+++ b/app/src/main/res/values-ca/strings.xml
@@ -38,7 +38,6 @@
<string name="simple_disabled">Desactivat</string>
<string name="simple_copied">Copiat</string>
<string name="simple_archive">Arxiu</string>
-
<string name="edit_board">Edita el tauler</string>
<string name="archive_board">Arxiva el tauler</string>
<string name="delete_board">Suprimeix el tauler</string>
@@ -245,4 +244,5 @@
<string name="simple_reply">Respon</string>
<string name="simple_report">Informar</string>
<string name="error_action_open_battery_settings">Paràmetres de la bateria</string>
-</resources>
+ <string name="clone_board">Clonar tauler</string>
+ </resources>
diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml
index 06d1fb151..902e839c6 100644
--- a/app/src/main/res/values-cs-rCZ/strings.xml
+++ b/app/src/main/res/values-cs-rCZ/strings.xml
@@ -38,6 +38,7 @@
<string name="simple_disabled">vypnuto</string>
<string name="simple_copied">Zkopírováno</string>
<string name="simple_archive">Archiv</string>
+ <string name="simple_unassigned">Nepřiřazeno</string>
<string name="edit_board">Upravit tabuli</string>
<string name="archive_board">Archivovat tabuli</string>
@@ -263,4 +264,10 @@
</plurals>
<string name="simple_report">Hlášení</string>
<string name="error_action_open_battery_settings">Nastavení správy napájení</string>
+ <string name="move_warning">Při přesunutí karty na jinou tabuli není možné přenést také komentáře či přílohy.</string>
+ <string name="clone_board">Klonovat tabuli</string>
+ <string name="cloning_board">Klonování %1$s…</string>
+ <string name="successfully_cloned_board">%1$s úspěšně naklonováno</string>
+ <string name="attachment_does_not_yet_exist">Příloha ještě neexistuje v Deck</string>
+ <string name="card_does_not_yet_exist">Karta ještě neexistuje v Deck</string>
</resources>
diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml
index 8ac1e8373..efd98ec81 100644
--- a/app/src/main/res/values-da/strings.xml
+++ b/app/src/main/res/values-da/strings.xml
@@ -37,7 +37,6 @@
<string name="simple_disabled">slået fra</string>
<string name="simple_copied">opieret</string>
<string name="simple_archive">Arkivér</string>
-
<string name="edit_board">Rediger liste</string>
<string name="archive_board">Arkivér liste</string>
<string name="delete_board">Slet liste</string>
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index b0e4128b8..74aae9b0e 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -24,7 +24,7 @@
<string name="simple_switch">Wechseln</string>
<string name="simple_filter">Filter</string>
<string name="simple_overdue">Überfällig</string>
- <string name="simple_clear">Löschen</string>
+ <string name="simple_clear">Leeren</string>
<string name="simple_discard">Verwerfen</string>
<string name="simple_update">Aktualisieren</string>
<string name="simple_delete">Löschen</string>
@@ -38,6 +38,7 @@
<string name="simple_disabled">Deaktiviert</string>
<string name="simple_copied">Kopiert</string>
<string name="simple_archive">Archivieren</string>
+ <string name="simple_unassigned">Nicht zugewiesen</string>
<string name="edit_board">Board bearbeiten</string>
<string name="archive_board">Board archivieren</string>
@@ -96,7 +97,7 @@
<string name="action_card_delete">Karte löschen</string>
<string name="add_board">Board hinzufügen</string>
- <string name="label_clear_due_date">Fälligkeitsdatum löschen</string>
+ <string name="label_clear_due_date">Fälligkeitsdatum entfernen</string>
<string name="label_add">%1$s hinzufügen</string>
<string name="card_edit_details">Details</string>
@@ -217,12 +218,12 @@
<string name="error_dialog_title">Oh nein - Was jetzt? 🙁</string>
<string name="error_dialog_tip_token_mismatch_retry">Bitte versuchen Sie, das Schließen der App zu erzwingen und erneut zu starten. Möglicherweise bestand eine gestörte Verbindung zur Nextcloud-App.</string>
- <string name="error_dialog_tip_token_mismatch_clear_storage">Falls dieser Fehler weiterhin besteht können Sie versuchen den Speicherinhalt der beiden Apps Nextcloud und Nextcloud Deck zu löschen um das Problem zu beheben.</string>
- <string name="error_dialog_tip_database_upgrade_failed">Die Aktualisierung der Datenbank ist fehlgeschlagen. Bitte melden Sie das Problem und löschen Sie den Speicher, um die App normal zu verwenden.</string>
- <string name="error_dialog_tip_clear_storage">Sie können den Speicherinhalt löschen indem Sie die App öffnen und Speicher → Speicherinhalt löschen auswählen.</string>
+ <string name="error_dialog_tip_token_mismatch_clear_storage">Falls dieser Fehler weiterhin besteht können Sie versuchen den Speicherinhalt der beiden Apps Nextcloud und Nextcloud Deck zu leeren um das Problem zu beheben.</string>
+ <string name="error_dialog_tip_database_upgrade_failed">Die Aktualisierung der Datenbank ist fehlgeschlagen. Bitte melden Sie das Problem und leeren Sie den Speicher, um die App normal zu verwenden.</string>
+ <string name="error_dialog_tip_clear_storage">Sie können den Speicherinhalt leeren indem Sie die App öffnen und Speicher → Speicherinhalt löschen auswählen.</string>
<string name="error_dialog_tip_files_outdated">Sie scheinen eine alte Version der Nextcloud-App installiert zu haben. Bitte besuchen Sie den Play Store oder F-Droid, um die neueste Version zu installieren.</string>
<string name="error_dialog_tip_files_force_stop">Etwas scheint bei der Nextcloud App nicht zu funktionieren. Bitte versuchen Sie sowohl die Nextcloud App als auch die Nextcloud Deck App zu stoppen.</string>
- <string name="error_dialog_tip_files_delete_storage">Wenn das erzwungene Stoppen nicht hilft, können Sie versuchen, den Speicher beider Apps zu löschen.</string>
+ <string name="error_dialog_tip_files_delete_storage">Wenn das erzwungene Stoppen nicht hilft, können Sie versuchen, den Speicher beider Apps zu leeren .</string>
<string name="error_dialog_timeout_instance">Der Server reagierte nicht in der üblichen Zeit. Bitte stellen Sie sicher, dass Ihre Instanz einwandfrei läuft.</string>
<string name="error_dialog_timeout_toggle">Überprüfen Sie Ihre Netzwerkverbindung. Manchmal kann es hilfreich sein, die mobilen Daten oder das WLAN aus- und wieder einzuschalten.</string>
<string name="error_dialog_check_server">Die Antwort des Servers war fehlerhaft. Bitte überprüfen Sie ob die Deck App über die Weboberfläche erreichbar ist.</string>
@@ -257,4 +258,10 @@
</plurals>
<string name="simple_report">Melden</string>
<string name="error_action_open_battery_settings">Batterie-Einstellungen</string>
+ <string name="move_warning">Beim Verschieben einer Karte auf ein anderes Board werden weder Kommentare noch Anhänge transferriert.</string>
+ <string name="clone_board">Board klonen</string>
+ <string name="cloning_board">Klone %1$s…</string>
+ <string name="successfully_cloned_board">%1$s erfolgreich geklont</string>
+ <string name="attachment_does_not_yet_exist">Anhang existiert bislang nicht in Deck</string>
+ <string name="card_does_not_yet_exist">Karte existiert bislang nicht in Deck</string>
</resources>
diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml
index cb1f66037..0c0226f2a 100644
--- a/app/src/main/res/values-el/strings.xml
+++ b/app/src/main/res/values-el/strings.xml
@@ -38,7 +38,6 @@
<string name="simple_disabled">απενεργοποιημένο</string>
<string name="simple_copied">Αντιγράφτηκε</string>
<string name="simple_archive">Αρχειοθέτηση</string>
-
<string name="edit_board">Επεξεργασία πίνακα</string>
<string name="archive_board">Αρχειοθέτηση πίνακα</string>
<string name="delete_board">Διαγραφή πίνακα</string>
@@ -257,4 +256,5 @@
</plurals>
<string name="simple_report">Αναφορά</string>
<string name="error_action_open_battery_settings">Ρυθμίσεις μπαταρίας</string>
-</resources>
+ <string name="clone_board">Κλωνοποίηση πίνακα</string>
+ </resources>
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index 9bd01d6dd..814a11013 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -38,6 +38,7 @@
<string name="simple_disabled">deshabilitado</string>
<string name="simple_copied">Copiado</string>
<string name="simple_archive">Archivar</string>
+ <string name="simple_unassigned">No asignado</string>
<string name="edit_board">Editar tablero</string>
<string name="archive_board">Archivar tablero</string>
@@ -129,6 +130,7 @@
<string name="delete_board_message">Esto borrará permanente el tablero, incluyendo todas las listas y tarjetas.</string>
<string name="settings_theme_title">Tema oscuro</string>
<string name="settings_branding_title">Branding</string>
+ <string name="settings_compact_title">Modo compacto 🆕</string>
<string name="settings_background_sync">Sincronización en segundo plano</string>
<string name="pref_value_wifi_and_mobile">Sincronizar sobre Wi-Fi y datos móviles</string>
<string name="pref_value_wifi_only">Sincronizar solo sobre Wi-Fi</string>
@@ -217,6 +219,7 @@
<string name="error_dialog_title">Oh no - ¿Ahora qué? 🙁</string>
<string name="error_dialog_tip_token_mismatch_retry">Por favor, intenta forzar el cierre de la aplicación y vuelve a abrirla. Es posible que haya habido un problema de conexión con la aplicación Nextcloud.</string>
<string name="error_dialog_tip_token_mismatch_clear_storage">Si el problema persiste, intenta limpiar borrar el almacenamiento de ambas apps, Nextcloud y Nextcloud Deck para solucionar este problema.</string>
+ <string name="error_dialog_tip_database_upgrade_failed">Falló la actualización de la base de datos. Por favor, informe del problema y limpie el almacenamiento para usar la aplicación de manera normal.</string>
<string name="error_dialog_tip_clear_storage">Puedes limpiar el almacenamiento abriendo la información de la app y seleccionando Almacenamiento → Eliminar datos.</string>
<string name="error_dialog_tip_files_outdated">Su aplicación Nextcloud parece que está desactualizada. Por favor visite la Play Store o F-Droid para conseguir la versión más reciente.</string>
<string name="error_dialog_tip_files_force_stop">Algo parece ir mal en tu app de Nextcloud. Por favor, intenta forzar el cierre de ambas, Nextcloud y Nextcloud Deck.</string>
@@ -255,4 +258,10 @@
</plurals>
<string name="simple_report">Informe</string>
<string name="error_action_open_battery_settings">Ajustes de batería</string>
+ <string name="move_warning">No se pueden transferir cio los comentarios ni los adjuntos al mover una tarjeta a otro tablero.</string>
+ <string name="clone_board">Clonar tablero</string>
+ <string name="cloning_board">Clonando %1$s…</string>
+ <string name="successfully_cloned_board">Clonados con éxito %1$s</string>
+ <string name="attachment_does_not_yet_exist">El adjunto todavía no existe en Deck</string>
+ <string name="card_does_not_yet_exist">La tarjeta todavía no existe en Deck</string>
</resources>
diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml
index e704e9fcd..e61e068a3 100644
--- a/app/src/main/res/values-eu/strings.xml
+++ b/app/src/main/res/values-eu/strings.xml
@@ -38,7 +38,6 @@
<string name="simple_disabled">desgaituta</string>
<string name="simple_copied">Kopiatuta</string>
<string name="simple_archive">Artxibatu</string>
-
<string name="edit_board">Editatu mahaia</string>
<string name="archive_board">Artxibatu mahaia</string>
<string name="delete_board">Ezabatu mahaia</string>
@@ -250,4 +249,5 @@
<string name="add_text_as_comment">Gehitu iruzkin gisa</string>
<string name="simple_report">Jakinarazi</string>
<string name="error_action_open_battery_settings">Bateria ezarpenak</string>
-</resources>
+ <string name="clone_board">Klonatu taula</string>
+ </resources>
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 6c6d1792e..c127f936b 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -38,6 +38,7 @@
<string name="simple_disabled">désactivé</string>
<string name="simple_copied">Copié</string>
<string name="simple_archive">Archiver</string>
+ <string name="simple_unassigned">Non attribué</string>
<string name="edit_board">Modifier le tableau</string>
<string name="archive_board">Archiver le tableau</string>
@@ -257,4 +258,10 @@
</plurals>
<string name="simple_report">Signaler</string>
<string name="error_action_open_battery_settings">Paramètres de batterie</string>
+ <string name="move_warning">Ni les commentaires ni les pièces jointes ne peuvent être transférés lorsque la carte est déplacée sur un autre tableau.</string>
+ <string name="clone_board">Dupliquer le tableau</string>
+ <string name="cloning_board">Clonage de %1$s…</string>
+ <string name="successfully_cloned_board">Cloné avec succès %1$s</string>
+ <string name="attachment_does_not_yet_exist">Pièce jointe non encore présente dans le tableau</string>
+ <string name="card_does_not_yet_exist">Carte non encore présente dans le tableau</string>
</resources>
diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml
index e4a279121..d847e2849 100644
--- a/app/src/main/res/values-gl/strings.xml
+++ b/app/src/main/res/values-gl/strings.xml
@@ -38,6 +38,7 @@
<string name="simple_disabled">desactivado</string>
<string name="simple_copied">Copiada</string>
<string name="simple_archive">Aquivar</string>
+ <string name="simple_unassigned">Desasignado</string>
<string name="edit_board">Editar taboleiro</string>
<string name="archive_board">Arquivar taboleiro</string>
@@ -257,4 +258,10 @@
</plurals>
<string name="simple_report">Informe</string>
<string name="error_action_open_battery_settings">Axustes da batería</string>
+ <string name="move_warning">Non é posíbel transferir nin comentarios nin ficheiros anexos ao mover a tarxeta a outro taboleiro.</string>
+ <string name="clone_board">Clonar taboleiro</string>
+ <string name="cloning_board">Clonando %1$s…</string>
+ <string name="successfully_cloned_board">%1$s foi clonado satisfactoriamente</string>
+ <string name="attachment_does_not_yet_exist">Aínda non existe o anexo no Deck</string>
+ <string name="card_does_not_yet_exist">Aínda non existe a tarxeta no Deck</string>
</resources>
diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml
index ba71635e7..fedc64ee4 100644
--- a/app/src/main/res/values-he/strings.xml
+++ b/app/src/main/res/values-he/strings.xml
@@ -38,7 +38,6 @@
<string name="simple_disabled">מושבת</string>
<string name="simple_copied">הועתק</string>
<string name="simple_archive">לארכיון</string>
-
<string name="edit_board">ערוך לוח</string>
<string name="archive_board">לוח פעיל</string>
<string name="delete_board">מחק לוח</string>
@@ -229,4 +228,5 @@
<string name="manage_accounts">ניהול חשבונות</string>
<string name="simple_reply">תגובה</string>
<string name="simple_report">דיווח</string>
+ <string name="clone_board">שכפול לוח</string>
</resources>
diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml
index ed1573282..ed6e03a22 100644
--- a/app/src/main/res/values-hr/strings.xml
+++ b/app/src/main/res/values-hr/strings.xml
@@ -38,7 +38,6 @@
<string name="simple_disabled">onemogućeno</string>
<string name="simple_copied">Kopirano</string>
<string name="simple_archive">Arhiva</string>
-
<string name="edit_board">Uredi ploču</string>
<string name="archive_board">Arhiviraj ploču</string>
<string name="delete_board">Izbriši ploču</string>
@@ -233,4 +232,5 @@
<string name="manage_accounts">Upravljaj računima</string>
<string name="simple_reply">Odgovori</string>
<string name="simple_report">Prijavi</string>
+ <string name="clone_board">Kloniraj ploču</string>
</resources>
diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml
index fc6e5ea13..c077b93ac 100644
--- a/app/src/main/res/values-hu-rHU/strings.xml
+++ b/app/src/main/res/values-hu-rHU/strings.xml
@@ -38,7 +38,6 @@
<string name="simple_disabled">letiltva</string>
<string name="simple_copied">Másolva</string>
<string name="simple_archive">Archívum</string>
-
<string name="edit_board">Tábla szerkesztése</string>
<string name="archive_board">Tábla archiválása</string>
<string name="delete_board">Tábla törlése</string>
@@ -242,4 +241,5 @@
<string name="manage_accounts">Fiókok kezelése</string>
<string name="simple_reply">Válasz</string>
<string name="simple_report">Jelentés</string>
+ <string name="clone_board">Tábla klónozása</string>
</resources>
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index b3cee302e..86ed1d3e1 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -38,6 +38,7 @@
<string name="simple_disabled">disabilitato</string>
<string name="simple_copied">Copiato</string>
<string name="simple_archive">Archivio</string>
+ <string name="simple_unassigned">Non assegnato</string>
<string name="edit_board">Modifica lavagna</string>
<string name="archive_board">Archivia lavagna</string>
@@ -257,4 +258,10 @@
</plurals>
<string name="simple_report">Segnala</string>
<string name="error_action_open_battery_settings">Impostazioni batteria</string>
+ <string name="move_warning">Né i commenti, né gli allegati possono essere trasferiti quando si sposta la scheda su un\'altra lavagna.</string>
+ <string name="clone_board">Clona lavagna</string>
+ <string name="cloning_board">Clonazione di %1$s…</string>
+ <string name="successfully_cloned_board">%1$s clonato correttamente</string>
+ <string name="attachment_does_not_yet_exist">L\'allegato non esiste ancora in Deck</string>
+ <string name="card_does_not_yet_exist">La scheda non esiste ancora in Deck</string>
</resources>
diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml
index 7934aa0aa..56ed62eec 100644
--- a/app/src/main/res/values-ja-rJP/strings.xml
+++ b/app/src/main/res/values-ja-rJP/strings.xml
@@ -38,7 +38,6 @@
<string name="simple_disabled">無効</string>
<string name="simple_copied">コピーしました</string>
<string name="simple_archive">アーカイブ</string>
-
<string name="edit_board">ボードを編集</string>
<string name="archive_board">ボードをアーカイブ</string>
<string name="delete_board">ボードを削除</string>
diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml
index d45e135d1..3007b145d 100644
--- a/app/src/main/res/values-ko/strings.xml
+++ b/app/src/main/res/values-ko/strings.xml
@@ -38,7 +38,6 @@
<string name="simple_disabled">비활성화</string>
<string name="simple_copied">복사됨</string>
<string name="simple_archive">보관</string>
-
<string name="edit_board">게시판 편집</string>
<string name="archive_board">게시판 보관</string>
<string name="delete_board">게시판 삭제</string>
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 92ba83726..6e9dec214 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -38,7 +38,6 @@
<string name="simple_disabled">uitgeschakeld</string>
<string name="simple_copied">Gekopieerd</string>
<string name="simple_archive">Archiveer</string>
-
<string name="edit_board">Pas bord aan</string>
<string name="archive_board">Archiveer bord</string>
<string name="delete_board">Bord verwijderen</string>
@@ -241,4 +240,5 @@
<string name="manage_accounts">Accounts beheren </string>
<string name="simple_reply">Antwoord</string>
<string name="simple_report">Rapporteer</string>
+ <string name="clone_board">Dupliceer bord</string>
</resources>
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index 1dc85ba54..97ca2a23e 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -38,6 +38,7 @@
<string name="simple_disabled">wyłączony</string>
<string name="simple_copied">Skopiowano</string>
<string name="simple_archive">Archiwizuj</string>
+ <string name="simple_unassigned">Nieprzypisane</string>
<string name="edit_board">Edytuj tablicę</string>
<string name="archive_board">Zarchiwizuj tablicę</string>
@@ -263,4 +264,10 @@
</plurals>
<string name="simple_report">Raport</string>
<string name="error_action_open_battery_settings">Ustawienia baterii</string>
+ <string name="move_warning">Nie można przenosić komentarzy, ani załączników karty na inną tablicę.</string>
+ <string name="clone_board">Klonuj tablicę</string>
+ <string name="cloning_board">Klonowanie %1$s…</string>
+ <string name="successfully_cloned_board">Pomyślnie sklonowano %1$s</string>
+ <string name="attachment_does_not_yet_exist">Załącznik nie istnieje jeszcze w Deck</string>
+ <string name="card_does_not_yet_exist">Karta nie istnieje jeszcze w Deck</string>
</resources>
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index 8d8822f9e..f1225028c 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -38,6 +38,7 @@
<string name="simple_disabled">desativado</string>
<string name="simple_copied">Copiado</string>
<string name="simple_archive">Arquivados</string>
+ <string name="simple_unassigned">Não atribuído</string>
<string name="edit_board">Editar painel</string>
<string name="archive_board">Arquivar painel</string>
@@ -257,4 +258,10 @@
</plurals>
<string name="simple_report">Reportar</string>
<string name="error_action_open_battery_settings">Configurações da bateria</string>
+ <string name="move_warning">Comentários ou anexos não podem ser transferidos ao mover o cartão para outra placa.</string>
+ <string name="clone_board">Clonar painel</string>
+ <string name="cloning_board">Clonando %1$s…</string>
+ <string name="successfully_cloned_board">%1$s clonado com sucesso</string>
+ <string name="attachment_does_not_yet_exist">O anexo ainda não existe no Deck</string>
+ <string name="card_does_not_yet_exist">O cartão ainda não existe no Deck</string>
</resources>
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index a338d3505..122b5e04d 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -38,7 +38,6 @@
<string name="simple_disabled">отключено</string>
<string name="simple_copied">Скопировано</string>
<string name="simple_archive">Переместить в архив</string>
-
<string name="edit_board">Редактировать доску</string>
<string name="archive_board">Переместить доску в архив</string>
<string name="delete_board">Удалить доску</string>
@@ -261,4 +260,5 @@
</plurals>
<string name="simple_report">Сообщить</string>
<string name="error_action_open_battery_settings">Настройки аккумулятора</string>
-</resources>
+ <string name="clone_board">Скопировать доску</string>
+ </resources>
diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml
index 51b963d38..fd405ebb4 100644
--- a/app/src/main/res/values-sk-rSK/strings.xml
+++ b/app/src/main/res/values-sk-rSK/strings.xml
@@ -38,6 +38,7 @@
<string name="simple_disabled">zakázané</string>
<string name="simple_copied">Skopírované</string>
<string name="simple_archive">Archivovať</string>
+ <string name="simple_unassigned">Nepriradený</string>
<string name="edit_board">Upraviť nástenku</string>
<string name="archive_board">Archivovať nástenku</string>
@@ -133,6 +134,7 @@
<string name="delete_board_message">Táto nástenka sa natrvalo odstráni, vrátane všetkých zoznamov a kariet.</string>
<string name="settings_theme_title">Tmavý motív</string>
<string name="settings_branding_title">Použitie vlastného loga</string>
+ <string name="settings_compact_title">Kompaktný režim 🆕</string>
<string name="settings_background_sync">Synchronizácia na pozadí</string>
<string name="pref_value_wifi_and_mobile">Synchronizovať na Wi-Fi a mobilných dátach</string>
<string name="pref_value_wifi_only">Synchronizovať len na Wi-Fi</string>
@@ -221,6 +223,7 @@
<string name="error_dialog_title">Ale nie - Čo teraz? 🙁</string>
<string name="error_dialog_tip_token_mismatch_retry">Skúste vyinútiť zatvorenie aplikácie a znova ju reštartovať. Možno došlo k chybnému pripojeniu k aplikácii Nextcloud.</string>
<string name="error_dialog_tip_token_mismatch_clear_storage">Ak problém pretrváva, pokúste sa tento problém vyriešiť vymazaním úložiska oboch aplikácií: Nextcloud a Nextcloud Deck.</string>
+ <string name="error_dialog_tip_database_upgrade_failed">Aktualizácia databázy zlyhala. Nahláste problém a vymažte ukladací priestor, aby ste aplikáciu mohli normálne používať.</string>
<string name="error_dialog_tip_clear_storage">Úložisko môžete vyčistiť otvorením informácii o aplikácii a výberom Úložisko → Vyčistiť úložisko.</string>
<string name="error_dialog_tip_files_outdated">Váš Nextcloud vyzerá byť zastaralý. Navštívte Play Store alebo F-Droid pre získanie najnovšej verzie.</string>
<string name="error_dialog_tip_files_force_stop">Zdá sa, že s Nextcloudom niečo nie je v poriadku. Pokúste sa vynútiť zastavenie aplikácie Nextcloud aj aplikácie Nextcloud Deck.</string>
@@ -261,4 +264,8 @@
</plurals>
<string name="simple_report">Hlásenie</string>
<string name="error_action_open_battery_settings">Nastavenia batérie.</string>
-</resources>
+ <string name="move_warning">Pri presúvaní karty na inú nástenku nie je možné prenášať komentáre ani prílohy.</string>
+ <string name="clone_board">Duplikovať nástenku</string>
+ <string name="cloning_board">Klonovanie %1$s…</string>
+ <string name="successfully_cloned_board">%1$s úspešne klonovaný</string>
+ </resources>
diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml
index 84239bb54..43e79d280 100644
--- a/app/src/main/res/values-sl/strings.xml
+++ b/app/src/main/res/values-sl/strings.xml
@@ -38,6 +38,7 @@
<string name="simple_disabled">onemogočeno</string>
<string name="simple_copied">Kopirano!</string>
<string name="simple_archive">Arhiv</string>
+ <string name="simple_unassigned">Nedodeljeno</string>
<string name="edit_board">Uredi zbirko</string>
<string name="archive_board">Arhiviraj zbirko</string>
@@ -133,6 +134,7 @@
<string name="delete_board_message">S tem dejanjem bo zbirka z vsemi paketi nalog in nalogami trajno izbrisana.</string>
<string name="settings_theme_title">Temna tema</string>
<string name="settings_branding_title">Prilagajanje oblikovanja</string>
+ <string name="settings_compact_title">Stisnjen pogled 🆕</string>
<string name="settings_background_sync"> Usklajevanje v ozadju</string>
<string name="pref_value_wifi_and_mobile">Usklajuj na Wi-Fi in mobilni povezavi</string>
<string name="pref_value_wifi_only">Usklajuj le na Wi-Fi</string>
@@ -221,6 +223,7 @@
<string name="error_dialog_title">Ojoj, kaj pa zdaj? 🙁</string>
<string name="error_dialog_tip_token_mismatch_retry">Poskusite vsiliti končanje programa in ga ponovno zagnati. Morda je težava v neustrezni povezavi z okoljem Nextcloud</string>
<string name="error_dialog_tip_token_mismatch_clear_storage">Če se težava še naprej pojavlja, poskusite počistiti podatke programa Nextcloud in Nextcloud Deck.</string>
+ <string name="error_dialog_tip_database_upgrade_failed">Nadgradnja podatkovne zbirke je spodletela. Pošljite poročilo o napaki in nato počistite shrambo za normalno uporabo programa.</string>
<string name="error_dialog_tip_clear_storage">Shrambo je mogoče počistiti med podrobnostmi programa Shramba → Počisti shrambo.</string>
<string name="error_dialog_tip_files_outdated">Program Nextcloud je očitno starejše različice. Posodobite jo prek Trgovine Play ali s posodabljalnikom F-Droid.</string>
<string name="error_dialog_tip_files_force_stop">Kaže, da je nekaj narobe s programom Nextcloud. Poskusite vsiljeno zaustaviti programa Nextcloud in Nextcloud Deck.</string>
@@ -236,6 +239,7 @@
<string name="error_dialog_version_not_parsable">Ni mogoče določiti različice strežnika, povezanega s programom Deck. Prepričajte se, da je nameščen in omogočen.</string>
<string name="error_dialog_capabilities_not_parsable">Ni mogoče pridobiti podatkov o zmožnostih strežnika. Prepričajte se, da strežnik teče in da imajo programi dostop do okolja Nextcloud.</string>
<string name="error_dialog_attachment_upload_failed">Priloge ni mogoče poslati. Souporabo omogočite na nek drug način, nam pa posredujte poročilo o hrošču.</string>
+ <string name="error_dialog_tip_disable_battery_optimizations">Onemogočite vso optimizacijo porabe baterije za programa Nextcloud in Deck.</string>
<string name="error_action_open_deck_info">Odpri podrobnosti programa</string>
<string name="error_action_open_network">Nastavitve omrežja</string>
<string name="error_action_server_logs">Dnevniki strežnika</string>
@@ -259,4 +263,11 @@
<item quantity="other">%1$d napak med pošiljanjem</item>
</plurals>
<string name="simple_report">Poročilo</string>
- </resources>
+ <string name="error_action_open_battery_settings">Nastavitve baterije</string>
+ <string name="move_warning">Ni mogoče prenesti ne opomb ne prilog med premikanjem naloge v drugo zbirko.</string>
+ <string name="clone_board">Kloniraj zbirko</string>
+ <string name="cloning_board">Poteka kloniranje %1$s…</string>
+ <string name="successfully_cloned_board">Kloniranje %1$s je uspešno končano</string>
+ <string name="attachment_does_not_yet_exist">Priloga v Deck še ne obstaja</string>
+ <string name="card_does_not_yet_exist">Naloga v Deck še ne obstaja</string>
+</resources>
diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml
index 0af202087..0376ba1b7 100644
--- a/app/src/main/res/values-sr/strings.xml
+++ b/app/src/main/res/values-sr/strings.xml
@@ -38,6 +38,7 @@
<string name="simple_disabled">искључено</string>
<string name="simple_copied">Копирано</string>
<string name="simple_archive">Архива</string>
+ <string name="simple_unassigned">Недодељен</string>
<string name="edit_board">Измени таблу</string>
<string name="archive_board">Архивирај таблу</string>
@@ -131,6 +132,7 @@
<string name="delete_board_message">Ово ће трајно да уклони ову таблу укључујући све спискове и картице.</string>
<string name="settings_theme_title">Тамна тема</string>
<string name="settings_branding_title">Брендирање</string>
+ <string name="settings_compact_title">Компактни режим 🆕</string>
<string name="settings_background_sync">Позадинска синхронизација</string>
<string name="pref_value_wifi_and_mobile">Синхронизуј и на бежичној и на мобилној вези</string>
<string name="pref_value_wifi_only">Синхронизуј само преко бежичне везе</string>
@@ -219,6 +221,7 @@
<string name="error_dialog_title">О, не - шта сад? 🙁</string>
<string name="error_dialog_tip_token_mismatch_retry">Покушајте да форсирано затворите апликацију и стартујете је поново. Можда је била неисправна конекција ка Некстклауд апликацији.</string>
<string name="error_dialog_tip_token_mismatch_clear_storage">Ако проблем настави да се дешава, пробајте да очистите податке од обе апликације: и Некстклауд и Некстклауд Шпила да бисте решили проблем.</string>
+ <string name="error_dialog_tip_database_upgrade_failed">Ажурирање базе није успело. Пријавите овај проблем и очистите складиште да користите апликацију нормално.</string>
<string name="error_dialog_tip_clear_storage">Складиште можете очистити ако отворите информације о апликацији и бирањем Меморија → Обриши податке.</string>
<string name="error_dialog_tip_files_outdated">Изгледа да је верзија Некстклауд апликације стара. Посетите Play Store или Ф-дроид да скинете најновију верзију.</string>
<string name="error_dialog_tip_files_force_stop">Нешто није у реду да Вашом Некстклауд апликацијом. Пробајте да форсирано зауставите обе, и Некстклауд апликацију и апликацију Некстклауд Шпила.</string>
@@ -233,6 +236,8 @@
<string name="error_dialog_redirect">Сервер је одговорио са HTTP 302 кодом, што значи да немате инсталирану Deck апликацију или да Вам сервер није правилно конфигурисан. Ово може да буде проузорковано произвољним додавањима у .htaccess фајлу или другим Некстклауд апликацијама као што је OID Client.</string>
<string name="error_dialog_version_not_parsable">Не можемо да одредимо серверску верзију апликације Шпила. Проверите да ли је инсталирана и укључена.</string>
<string name="error_dialog_capabilities_not_parsable">Не можемо да дохватимо могућности Вашег сервера. Проверите да Вам сервер ради добро и да ли друге клијентске апликације могу да му приступе.</string>
+ <string name="error_dialog_attachment_upload_failed">Прилог није могао бити отпремљен. Молимо пробајте да га поделите на други начин и пријавите нам ову грешку.</string>
+ <string name="error_dialog_tip_disable_battery_optimizations">Искључите све оптимизације батерије за Некстаклауд и Шпил апликације.</string>
<string name="error_action_open_deck_info">Отвори инфо о апликацији</string>
<string name="error_action_open_network">Поставке мреже</string>
<string name="error_action_server_logs">Дневник са сервера</string>
@@ -256,4 +261,10 @@
</plurals>
<string name="simple_report">Пријави</string>
<string name="error_action_open_battery_settings">Подешавања батерије</string>
+ <string name="move_warning">Ни коментари ни прилози не могу да се пребаце када се картица помера на другу таблу.</string>
+ <string name="clone_board">Клонирај таблу</string>
+ <string name="cloning_board">Клонирам %1$s…</string>
+ <string name="successfully_cloned_board">Успешно клониран %1$s</string>
+ <string name="attachment_does_not_yet_exist">Прилог још не постоји у Шпил апликацији</string>
+ <string name="card_does_not_yet_exist">Картица још не постоји у Шпил апликацији</string>
</resources>
diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml
index 11c7b3500..d56d64a7e 100644
--- a/app/src/main/res/values-sv/strings.xml
+++ b/app/src/main/res/values-sv/strings.xml
@@ -38,7 +38,6 @@
<string name="simple_disabled">inaktiverad</string>
<string name="simple_copied">Kopierad</string>
<string name="simple_archive">Arkivera</string>
-
<string name="edit_board">Ändra tavla</string>
<string name="archive_board">Arkivera tavla</string>
<string name="delete_board">Radera tavla</string>
@@ -235,4 +234,5 @@
<item quantity="other">%1$d fel vid uppladdning</item>
</plurals>
<string name="simple_report">Rapportera</string>
+ <string name="clone_board">Kopiera tavla</string>
</resources>
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index 7b35c3683..df3186a1a 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -38,6 +38,7 @@
<string name="simple_disabled">devre dışı</string>
<string name="simple_copied">Kopyalandı</string>
<string name="simple_archive">Arşivle</string>
+ <string name="simple_unassigned">Atanmamış</string>
<string name="edit_board">Panoyu düzenle</string>
<string name="archive_board">Panoyu arşivle</string>
@@ -257,4 +258,8 @@
</plurals>
<string name="simple_report">Hata bildirin</string>
<string name="error_action_open_battery_settings">Pil ayarları</string>
-</resources>
+ <string name="move_warning">Kart başka bir panoya taşınırken yorum ya da ek dosyalar aktarılamaz.</string>
+ <string name="clone_board">Panoyu kopyala</string>
+ <string name="cloning_board">%1$s kopyalanıyor…</string>
+ <string name="successfully_cloned_board">%1$s kopyalandı</string>
+ </resources>
diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml
index 24f1a7d0f..27daca4cf 100644
--- a/app/src/main/res/values-uk/strings.xml
+++ b/app/src/main/res/values-uk/strings.xml
@@ -38,7 +38,6 @@
<string name="simple_disabled">вимкнено</string>
<string name="simple_copied">Скопійовано</string>
<string name="simple_archive">Архів</string>
-
<string name="edit_board">Редагувати дошку</string>
<string name="archive_board">Архівувати дошку</string>
<string name="delete_board">Вилучити дошку</string>
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index cdfb70ae2..b8af40813 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -38,7 +38,6 @@
<string name="simple_disabled">已禁用</string>
<string name="simple_copied">已复制</string>
<string name="simple_archive">归档</string>
-
<string name="edit_board">编辑面板</string>
<string name="archive_board">归档面板</string>
<string name="delete_board">删除面板</string>
@@ -225,4 +224,5 @@
<string name="manage_accounts">管理账号</string>
<string name="simple_reply">回复</string>
<string name="simple_report">报告</string>
+ <string name="clone_board">克隆面板</string>
</resources>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index ca7cc2fb8..0bc17f30e 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -288,6 +288,8 @@
<string name="clone_board">Clone board</string>
<string name="cloning_board">Cloning %1$s…</string>
<string name="successfully_cloned_board">Successfully cloned %1$s</string>
+ <string name="attachment_does_not_yet_exist">Attachment does not yet exist in Deck</string>
+ <string name="card_does_not_yet_exist">Card does not yet exist in Deck</string>
<string name="widget_stack_title">Stack</string>
<string name="widget_stack_header_icon">Widget header icon</string>