/** * Wire * Copyright (C) 2016 Wire Swiss GmbH * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.waz.zclient.pages.extendedcursor.image; import android.content.Context; import android.support.v4.content.ContextCompat; import android.text.TextUtils; import android.util.AttributeSet; import android.view.View; import android.widget.FrameLayout; import android.widget.TextView; import com.waz.api.ImageAsset; import com.waz.zclient.R; import com.waz.zclient.controllers.drawing.DrawingController; import com.waz.zclient.controllers.drawing.IDrawingController; import com.waz.zclient.pages.main.profile.views.ConfirmationMenu; import com.waz.zclient.pages.main.profile.views.ConfirmationMenuListener; import com.waz.zclient.ui.theme.OptionsDarkTheme; import com.waz.zclient.ui.utils.TextViewUtils; import com.waz.zclient.utils.ViewUtils; import com.waz.zclient.views.images.ImageAssetView; public class ImagePreviewLayout extends FrameLayout implements ConfirmationMenuListener, View.OnClickListener { public enum Source { IN_APP_GALLERY, DEVICE_GALLERY, CAMERA } private ConfirmationMenu approveImageSelectionMenu; private ImageAssetView imageView; private FrameLayout titleTextViewContainer; private TextView titleTextView; private View sketchMenuContainer; private View sketchDrawButton; private View sketchEmojiButton; private View sketchTextButton; private boolean sketchShouldBeVisible; private Callback callback; private ImageAsset imageAsset; private Source source; public ImagePreviewLayout(Context context) { this(context, null); } public ImagePreviewLayout(Context context, AttributeSet attrs) { this(context, attrs, 0); } public ImagePreviewLayout(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onFinishInflate() { super.onFinishInflate(); // eats the click setOnClickListener(this); imageView = ViewUtils.getView(this, R.id.iv__conversation__preview); approveImageSelectionMenu = ViewUtils.getView(this, R.id.cm__cursor_preview); sketchMenuContainer = ViewUtils.getView(this, R.id.ll__preview__sketch); sketchDrawButton = ViewUtils.getView(this, R.id.gtv__preview__drawing_button__sketch); sketchEmojiButton = ViewUtils.getView(this, R.id.gtv__preview__drawing_button__emoji); sketchTextButton = ViewUtils.getView(this, R.id.gtv__preview__drawing_button__text); titleTextView = ViewUtils.getView(this, R.id.ttv__image_preview__title); titleTextViewContainer = ViewUtils.getView(this, R.id.ttv__image_preview__title__container); imageView.setOnClickListener(this); approveImageSelectionMenu.setWireTheme(new OptionsDarkTheme(getContext())); approveImageSelectionMenu.setCancel(getResources().getString(R.string.confirmation_menu__cancel)); approveImageSelectionMenu.setConfirm(getResources().getString(R.string.confirmation_menu__confirm_done)); approveImageSelectionMenu.setConfirmationMenuListener(this); sketchDrawButton.setOnClickListener(this); sketchEmojiButton.setOnClickListener(this); sketchTextButton.setOnClickListener(this); // By default sketch button is visible sketchShouldBeVisible = true; } @Override public void confirm() { callback.onSendPictureFromPreview(imageAsset, source); } @Override public void cancel() { callback.onCancelPreview(); } public void setImageAsset(final ImageAsset imageAsset, Source source, Callback callback) { this.source = source; this.imageAsset = imageAsset; this.callback = callback; imageView.setImageAsset(imageAsset); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.iv__conversation__preview: if (approveImageSelectionMenu.getVisibility() == VISIBLE) { if (sketchShouldBeVisible) { ViewUtils.fadeOutView(sketchMenuContainer); } ViewUtils.fadeOutView(approveImageSelectionMenu); if (!TextUtils.isEmpty(titleTextView.getText())) { ViewUtils.fadeOutView(titleTextViewContainer); } } else { if (sketchShouldBeVisible) { ViewUtils.fadeInView(sketchMenuContainer); } ViewUtils.fadeInView(approveImageSelectionMenu); if (!TextUtils.isEmpty(titleTextView.getText())) { ViewUtils.fadeInView(titleTextViewContainer); } } break; case R.id.gtv__preview__drawing_button__sketch: if (callback != null) { callback.onSketchOnPreviewPicture(imageAsset, source, IDrawingController.DrawingMethod.DRAW); } break; case R.id.gtv__preview__drawing_button__emoji: if (callback != null) { callback.onSketchOnPreviewPicture(imageAsset, source, IDrawingController.DrawingMethod.EMOJI); } break; case R.id.gtv__preview__drawing_button__text: if (callback != null) { callback.onSketchOnPreviewPicture(imageAsset, source, IDrawingController.DrawingMethod.TEXT); } break; } } public void setAccentColor(int color) { approveImageSelectionMenu.setAccentColor(color); } public void showSketch(boolean show) { sketchShouldBeVisible = show; sketchMenuContainer.setVisibility(show ? VISIBLE : GONE); } public void setTitle(String title) { titleTextView.setText(title); titleTextViewContainer.setVisibility(TextUtils.isEmpty(titleTextView.getText()) ? GONE : VISIBLE); } public void hightlightTitle() { TextViewUtils.highlightAndBoldText(titleTextView, ContextCompat.getColor(getContext(), R.color.sharing__image_preview__title__color)); } public void setTitleIsSingleLine(boolean isSingleLine) { titleTextView.setSingleLine(isSingleLine); } public interface Callback { void onCancelPreview(); void onSketchOnPreviewPicture(ImageAsset imageAsset, Source source, DrawingController.DrawingMethod method); void onSendPictureFromPreview(ImageAsset imageAsset, Source source); } }