diff options
author | Stefan Niedermann <info@niedermann.it> | 2021-05-26 17:04:56 +0300 |
---|---|---|
committer | Stefan Niedermann <info@niedermann.it> | 2021-05-26 17:04:56 +0300 |
commit | 15f29a3ab0f55f4dc0d5f96aa5b06f3ef522e243 (patch) | |
tree | 1b012d0d9a35f5b529c6319d1ace403f72c9e191 /app/src/main/java/it/niedermann/nextcloud | |
parent | cf8a2c85bcd55c95aad4ad25765da4245e9dda84 (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.java | 33 | ||||
-rw-r--r-- | app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/CardDetailsFragment.java | 47 |
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() { |