Always show sticker icon in image editor.

Fixes flicker seen jumping toggling view once.
This commit is contained in:
Alan Evans 2020-01-23 10:41:42 -05:00 committed by Greyson Parrelli
parent 2d502213e4
commit 544a5386ad
3 changed files with 5 additions and 87 deletions

View file

@ -14,7 +14,6 @@ import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProviders;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.imageeditor.ColorableRenderer; import org.thoughtcrime.securesms.imageeditor.ColorableRenderer;
@ -55,10 +54,9 @@ public final class ImageEditorFragment extends Fragment implements ImageEditorHu
private EditorModel restoredModel; private EditorModel restoredModel;
@Nullable private EditorElement currentSelection; @Nullable private EditorElement currentSelection;
private int imageMaxHeight; private int imageMaxHeight;
private int imageMaxWidth; private int imageMaxWidth;
private ImageEditorFragmentViewModel viewModel;
public static class Data { public static class Data {
private final Bundle bundle; private final Bundle bundle;
@ -123,11 +121,6 @@ public final class ImageEditorFragment extends Fragment implements ImageEditorHu
imageMaxHeight = mediaConstraints.getImageMaxHeight(requireContext()); imageMaxHeight = mediaConstraints.getImageMaxHeight(requireContext());
StickerSearchRepository repository = new StickerSearchRepository(requireContext()); StickerSearchRepository repository = new StickerSearchRepository(requireContext());
viewModel = ViewModelProviders.of(this, new ImageEditorFragmentViewModel.Factory(requireActivity().getApplication(), repository))
.get(ImageEditorFragmentViewModel.class);
viewModel.getStickersAvailability().observe(this, isAvailable -> imageEditorHud.setStickersAvailable(isAvailable));
} }
@Nullable @Nullable

View file

@ -1,65 +0,0 @@
package org.thoughtcrime.securesms.scribbles;
import android.app.Application;
import android.database.ContentObserver;
import android.os.Handler;
import androidx.annotation.NonNull;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
import androidx.lifecycle.ViewModelProvider;
import org.thoughtcrime.securesms.database.DatabaseContentProviders;
import org.thoughtcrime.securesms.stickers.StickerSearchRepository;
import org.thoughtcrime.securesms.util.Throttler;
public final class ImageEditorFragmentViewModel extends ViewModel {
private final Application application;
private final StickerSearchRepository repository;
private final MutableLiveData<Boolean> stickersAvailable;
private final Throttler availabilityThrottler;
private final ContentObserver packObserver;
private ImageEditorFragmentViewModel(@NonNull Application application, @NonNull StickerSearchRepository repository) {
this.application = application;
this.repository = repository;
this.stickersAvailable = new MutableLiveData<>();
this.availabilityThrottler = new Throttler(500);
this.packObserver = new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange) {
availabilityThrottler.publish(() -> repository.getStickerFeatureAvailability(stickersAvailable::postValue));
}
};
application.getContentResolver().registerContentObserver(DatabaseContentProviders.StickerPack.CONTENT_URI, true, packObserver);
}
@NonNull LiveData<Boolean> getStickersAvailability() {
repository.getStickerFeatureAvailability(stickersAvailable::postValue);
return stickersAvailable;
}
@Override
protected void onCleared() {
application.getContentResolver().unregisterContentObserver(packObserver);
}
static class Factory extends ViewModelProvider.NewInstanceFactory {
private final Application application;
private final StickerSearchRepository repository;
public Factory(@NonNull Application application, @NonNull StickerSearchRepository repository) {
this.application = application;
this.repository = repository;
}
@Override
public @NonNull <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
//noinspection ConstantConditions
return modelClass.cast(new ImageEditorFragmentViewModel(application, repository));
}
}
}

View file

@ -82,7 +82,7 @@ public final class ImageEditorHud extends LinearLayout {
drawButton = findViewById(R.id.scribble_draw_button); drawButton = findViewById(R.id.scribble_draw_button);
highlightButton = findViewById(R.id.scribble_highlight_button); highlightButton = findViewById(R.id.scribble_highlight_button);
textButton = findViewById(R.id.scribble_text_button); textButton = findViewById(R.id.scribble_text_button);
stickerButton = findViewById(R.id.scribble_sticker_button); stickerButton = findViewById(R.id.scribble_sticker_button);
undoButton = findViewById(R.id.scribble_undo_button); undoButton = findViewById(R.id.scribble_undo_button);
saveButton = findViewById(R.id.scribble_save_button); saveButton = findViewById(R.id.scribble_save_button);
deleteButton = findViewById(R.id.scribble_delete_button); deleteButton = findViewById(R.id.scribble_delete_button);
@ -104,7 +104,7 @@ public final class ImageEditorHud extends LinearLayout {
} }
private void initializeVisibilityMap() { private void initializeVisibilityMap() {
setStickersAvailable(false); setVisibleViewsWhenInMode(Mode.NONE, drawButton, highlightButton, textButton, stickerButton, cropButton, undoButton, saveButton);
setVisibleViewsWhenInMode(Mode.DRAW, confirmButton, undoButton, colorPicker, colorPalette); setVisibleViewsWhenInMode(Mode.DRAW, confirmButton, undoButton, colorPicker, colorPalette);
@ -129,16 +129,6 @@ public final class ImageEditorHud extends LinearLayout {
visibilityModeMap.put(mode, new HashSet<>(Arrays.asList(views))); visibilityModeMap.put(mode, new HashSet<>(Arrays.asList(views)));
} }
@MainThread
public void setStickersAvailable(boolean stickersAvailable) {
if (stickersAvailable) {
setVisibleViewsWhenInMode(Mode.NONE, drawButton, highlightButton, textButton, stickerButton, cropButton, undoButton, saveButton);
} else {
setVisibleViewsWhenInMode(Mode.NONE, drawButton, highlightButton, textButton, cropButton, undoButton, saveButton);
}
updateButtonVisibility(currentMode);
}
private void initializeViews() { private void initializeViews() {
undoButton.setOnClickListener(v -> eventListener.onUndo()); undoButton.setOnClickListener(v -> eventListener.onUndo());