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>2021-05-26 17:04:56 +0300
committerStefan Niedermann <info@niedermann.it>2021-05-26 17:04:56 +0300
commit15f29a3ab0f55f4dc0d5f96aa5b06f3ef522e243 (patch)
tree1b012d0d9a35f5b529c6319d1ace403f72c9e191 /app/src/main/java/it/niedermann/nextcloud
parentcf8a2c85bcd55c95aad4ad25765da4245e9dda84 (diff)
- ✏️ Remember edit / preview mode for description (#971)
Signed-off-by: Stefan Niedermann <info@niedermann.it>
Diffstat (limited to 'app/src/main/java/it/niedermann/nextcloud')
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/EditCardViewModel.java33
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/CardDetailsFragment.java47
2 files changed, 56 insertions, 24 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/EditCardViewModel.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/EditCardViewModel.java
index c22e96281..d94398215 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/EditCardViewModel.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/EditCardViewModel.java
@@ -1,6 +1,7 @@
package it.niedermann.nextcloud.deck.ui.card;
import android.app.Application;
+import android.content.SharedPreferences;
import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
@@ -8,11 +9,13 @@ import androidx.core.content.ContextCompat;
import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
+import androidx.preference.PreferenceManager;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
+import it.niedermann.android.sharedpreferences.SharedPreferenceBooleanLiveData;
import it.niedermann.nextcloud.deck.DeckLog;
import it.niedermann.nextcloud.deck.R;
import it.niedermann.nextcloud.deck.api.IResponseCallback;
@@ -28,6 +31,7 @@ import it.niedermann.nextcloud.deck.model.ocs.Activity;
import it.niedermann.nextcloud.deck.persistence.sync.SyncManager;
import static androidx.lifecycle.Transformations.distinctUntilChanged;
+import static androidx.lifecycle.Transformations.map;
@SuppressWarnings("WeakerAccess")
public class EditCardViewModel extends AndroidViewModel {
@@ -43,11 +47,37 @@ public class EditCardViewModel extends AndroidViewModel {
private boolean canEdit = false;
private boolean createMode = false;
private final MutableLiveData<Integer> brandingColor$ = new MutableLiveData<>();
+ private final SharedPreferences sharedPreferences;
+ private final MutableLiveData<Boolean> descriptionIsPreview = new MutableLiveData<>(false);
public EditCardViewModel(@NonNull Application application) {
super(application);
this.syncManager = new SyncManager(application);
this.brandingColor$.setValue(ContextCompat.getColor(application, R.color.primary));
+ sharedPreferences = PreferenceManager.getDefaultSharedPreferences(application);
+ }
+
+ public LiveData<Boolean> descriptionIsPreviewMode() {
+ if (isCreateMode()) {
+ return descriptionIsPreview;
+ } else {
+ return map(distinctUntilChanged(new SharedPreferenceBooleanLiveData(sharedPreferences, getApplication().getString(R.string.shared_preference_description_preview), false)), (isPreview) -> {
+ this.descriptionIsPreview.setValue(isPreview);
+ return isPreview;
+ });
+ }
+ }
+
+ public void toggleDescriptionPreviewMode() {
+ final boolean newValue = Boolean.FALSE.equals(descriptionIsPreview.getValue());
+ if (isCreateMode()) {
+ descriptionIsPreview.setValue(newValue);
+ } else {
+ sharedPreferences
+ .edit()
+ .putBoolean(getApplication().getString(R.string.shared_preference_description_preview), newValue)
+ .apply();
+ }
}
public LiveData<Integer> getBrandingColor() {
@@ -136,6 +166,9 @@ public class EditCardViewModel extends AndroidViewModel {
public void setCreateMode(boolean createMode) {
this.createMode = createMode;
+ if (createMode) {
+ this.descriptionIsPreview.setValue(false);
+ }
}
public long getBoardId() {
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/CardDetailsFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/CardDetailsFragment.java
index db4b3f08c..57316a40b 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/CardDetailsFragment.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/CardDetailsFragment.java
@@ -18,7 +18,6 @@ import androidx.core.content.ContextCompat;
import androidx.core.graphics.ColorUtils;
import androidx.core.graphics.drawable.DrawableCompat;
import androidx.fragment.app.Fragment;
-import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.GridLayoutManager;
@@ -37,6 +36,7 @@ import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
+import it.niedermann.android.markdown.MarkdownEditor;
import it.niedermann.android.util.ColorUtil;
import it.niedermann.android.util.DimensionUtil;
import it.niedermann.nextcloud.deck.DeckLog;
@@ -68,7 +68,6 @@ public class CardDetailsFragment extends Fragment implements OnDateSetListener,
private AssigneeAdapter adapter;
private final DateTimeFormatter dateFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM);
private final DateTimeFormatter timeFormatter = DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT);
- boolean editorActive = true;
public static Fragment newInstance() {
return new CardDetailsFragment();
@@ -132,39 +131,39 @@ public class CardDetailsFragment extends Fragment implements OnDateSetListener,
private void setupDescription() {
if (viewModel.canEdit()) {
binding.descriptionViewer.setMovementMethod(LinkMovementMethod.getInstance());
- binding.descriptionToggle.setOnClickListener((v) -> {
- editorActive = !editorActive;
- if (editorActive) {
- binding.descriptionEditor.setMarkdownString(viewModel.getFullCard().getCard().getDescription());
- binding.descriptionEditorWrapper.setVisibility(VISIBLE);
- binding.descriptionViewer.setVisibility(GONE);
- binding.descriptionToggle.setImageResource(R.drawable.ic_baseline_eye_24);
- } else {
- binding.descriptionViewer.setMarkdownString(viewModel.getFullCard().getCard().getDescription());
- binding.descriptionEditorWrapper.setVisibility(GONE);
- binding.descriptionViewer.setVisibility(VISIBLE);
+ viewModel.descriptionIsPreviewMode().observe(getViewLifecycleOwner(), (isPreview) -> {
+ if (isPreview) {
+ toggleView(binding.descriptionViewer, binding.descriptionEditorWrapper, binding.descriptionViewer);
binding.descriptionToggle.setImageResource(R.drawable.ic_edit_grey600_24dp);
+ } else {
+ toggleView(binding.descriptionEditorWrapper, binding.descriptionViewer, binding.descriptionEditor);
+ binding.descriptionToggle.setImageResource(R.drawable.ic_baseline_eye_24);
}
});
- binding.descriptionEditor.setMarkdownString(viewModel.getFullCard().getCard().getDescription());
- final Observer<CharSequence> descriptionObserver = (description) -> {
+ binding.descriptionToggle.setOnClickListener((v) -> viewModel.toggleDescriptionPreviewMode());
+ } else {
+ binding.descriptionEditor.setEnabled(false);
+ binding.descriptionEditorWrapper.setVisibility(VISIBLE);
+ binding.descriptionViewer.setEnabled(false);
+ binding.descriptionViewer.setVisibility(GONE);
+ binding.descriptionViewer.setMarkdownString(viewModel.getFullCard().getCard().getDescription());
+ }
+ }
+ private void toggleView(@NonNull View viewToShow, @NonNull View viewToHide, @NonNull MarkdownEditor editorToShow) {
+ editorToShow.setMarkdownString(viewModel.getFullCard().getCard().getDescription());
+ if (!editorToShow.getMarkdownString().hasActiveObservers()) {
+ editorToShow.getMarkdownString().observe(getViewLifecycleOwner(), (description) -> {
if (viewModel.getFullCard() != null) {
viewModel.getFullCard().getCard().setDescription(description == null ? "" : description.toString());
} else {
ExceptionDialogFragment.newInstance(new IllegalStateException(FullCard.class.getSimpleName() + " was empty when trying to setup description"), viewModel.getAccount()).show(getChildFragmentManager(), ExceptionDialogFragment.class.getSimpleName());
}
binding.descriptionToggle.setVisibility(TextUtils.isEmpty(description) ? INVISIBLE : VISIBLE);
- };
- binding.descriptionEditor.getMarkdownString().observe(getViewLifecycleOwner(), descriptionObserver);
- binding.descriptionViewer.getMarkdownString().observe(getViewLifecycleOwner(), descriptionObserver);
- } else {
- binding.descriptionEditor.setEnabled(false);
- binding.descriptionEditorWrapper.setVisibility(VISIBLE);
- binding.descriptionViewer.setEnabled(false);
- binding.descriptionViewer.setVisibility(GONE);
- binding.descriptionViewer.setMarkdownString(viewModel.getFullCard().getCard().getDescription());
+ });
}
+ viewToHide.setVisibility(GONE);
+ viewToShow.setVisibility(VISIBLE);
}
private void setupDueDate() {