session-android/src/org/thoughtcrime/securesms/scribbles/ScribbleToolbar.java

241 lines
8.0 KiB
Java

/**
* Copyright (C) 2016 Open Whisper Systems
*
* 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 org.thoughtcrime.securesms.scribbles;
import android.animation.LayoutTransition;
import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.support.annotation.Nullable;
import android.support.v7.widget.Toolbar;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import org.thoughtcrime.securesms.R;
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public class ScribbleToolbar extends Toolbar implements View.OnClickListener {
private enum Selected {
NONE,
STICKER,
TEXT,
BRUSH
}
private int foregroundSelectedTint;
private int foregroundUnselectedTint;
private LinearLayout toolsView;
private ImageView saveView;
private ImageView brushView;
private ImageView textView;
private ImageView stickerView;
private ImageView separatorView;
private ImageView undoView;
private ImageView deleteView;
private Drawable background;
@Nullable
private ScribbleToolbarListener listener;
private int toolColor = Color.RED;
private Selected selected = Selected.NONE;
public ScribbleToolbar(Context context) {
super(context);
init(context);
}
public ScribbleToolbar(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init(context);
}
public ScribbleToolbar(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
private void init(Context context) {
inflate(context, R.layout.scribble_toolbar, this);
this.toolsView = (LinearLayout) findViewById(R.id.tools_view);
this.brushView = (ImageView) findViewById(R.id.brush_button);
this.textView = (ImageView) findViewById(R.id.text_button);
this.stickerView = (ImageView) findViewById(R.id.sticker_button);
this.separatorView = (ImageView) findViewById(R.id.separator);
this.saveView = (ImageView) findViewById(R.id.save);
this.undoView = (ImageView) findViewById(R.id.undo);
this.deleteView = (ImageView) findViewById(R.id.delete);
this.background = getResources().getDrawable(R.drawable.circle_tintable);
this.foregroundSelectedTint = getResources().getColor(R.color.white);
this.foregroundUnselectedTint = getResources().getColor(R.color.grey_800);
this.undoView.setOnClickListener(this);
this.brushView.setOnClickListener(this);
this.textView.setOnClickListener(this);
this.stickerView.setOnClickListener(this);
this.separatorView.setOnClickListener(this);
this.deleteView.setOnClickListener(this);
this.saveView.setOnClickListener(this);
}
public void setListener(@Nullable ScribbleToolbarListener listener) {
this.listener = listener;
}
public void setToolColor(int toolColor) {
this.toolColor = toolColor;
this.background.setColorFilter(new PorterDuffColorFilter(toolColor, PorterDuff.Mode.MULTIPLY));
}
public int getToolColor() {
return this.toolColor;
}
@Override
public void onClick(View v) {
this.toolsView.getLayoutTransition().enableTransitionType(LayoutTransition.CHANGING);
if (v == this.brushView) {
boolean enabled = selected != Selected.BRUSH;
setBrushSelected(enabled);
if (listener != null) listener.onBrushSelected(enabled);
} else if (v == this.stickerView) {
setNoneSelected();
if (listener != null) listener.onStickerSelected(true);
} else if (v == this.textView) {
boolean enabled = selected != Selected.TEXT;
setTextSelected(enabled);
if (listener != null) listener.onTextSelected(enabled);
} else if (v == this.deleteView) {
setNoneSelected();
if (listener != null) listener.onDeleteSelected();
} else if (v == this.undoView) {
if (listener != null) listener.onPaintUndo();
} else if (v == this.saveView) {
if (listener != null) listener.onSave();
}
}
private void setBrushSelected(boolean enabled) {
if (enabled) {
this.textView.setBackground(null);
this.textView.setColorFilter(new PorterDuffColorFilter(foregroundUnselectedTint, PorterDuff.Mode.MULTIPLY));
this.brushView.setBackground(background);
this.brushView.setColorFilter(new PorterDuffColorFilter(foregroundSelectedTint, PorterDuff.Mode.MULTIPLY));
this.stickerView.setBackground(null);
this.stickerView.setColorFilter(new PorterDuffColorFilter(foregroundUnselectedTint, PorterDuff.Mode.MULTIPLY));
this.separatorView.setVisibility(View.VISIBLE);
this.undoView.setVisibility(View.VISIBLE);
this.deleteView.setVisibility(View.GONE);
this.selected = Selected.BRUSH;
} else {
this.brushView.setBackground(null);
this.brushView.setColorFilter(new PorterDuffColorFilter(foregroundUnselectedTint, PorterDuff.Mode.MULTIPLY));
this.separatorView.setVisibility(View.GONE);
this.undoView.setVisibility(View.GONE);
this.selected = Selected.NONE;
}
}
public void setTextSelected(boolean enabled) {
if (enabled) {
this.brushView.setBackground(null);
this.brushView.setColorFilter(new PorterDuffColorFilter(foregroundUnselectedTint, PorterDuff.Mode.MULTIPLY));
this.textView.setBackground(background);
this.textView.setColorFilter(new PorterDuffColorFilter(foregroundSelectedTint, PorterDuff.Mode.MULTIPLY));
this.stickerView.setBackground(null);
this.stickerView.setColorFilter(new PorterDuffColorFilter(foregroundUnselectedTint, PorterDuff.Mode.MULTIPLY));
this.separatorView.setVisibility(View.VISIBLE);
this.undoView.setVisibility(View.GONE);
this.deleteView.setVisibility(View.VISIBLE);
this.selected = Selected.TEXT;
} else {
this.textView.setBackground(null);
this.textView.setColorFilter(new PorterDuffColorFilter(foregroundUnselectedTint, PorterDuff.Mode.MULTIPLY));
this.separatorView.setVisibility(View.GONE);
this.deleteView.setVisibility(View.GONE);
this.selected = Selected.NONE;
}
}
public void setStickerSelected(boolean enabled) {
if (enabled) {
this.brushView.setBackground(null);
this.brushView.setColorFilter(new PorterDuffColorFilter(foregroundUnselectedTint, PorterDuff.Mode.MULTIPLY));
this.textView.setBackground(null);
this.textView.setColorFilter(new PorterDuffColorFilter(foregroundUnselectedTint, PorterDuff.Mode.MULTIPLY));
this.separatorView.setVisibility(View.VISIBLE);
this.undoView.setVisibility(View.GONE);
this.deleteView.setVisibility(View.VISIBLE);
this.selected = Selected.STICKER;
} else {
this.separatorView.setVisibility(View.GONE);
this.deleteView.setVisibility(View.GONE);
this.selected = Selected.NONE;
}
}
public void setNoneSelected() {
setBrushSelected(false);
setStickerSelected(false);
setTextSelected(false);
this.selected = Selected.NONE;
}
public interface ScribbleToolbarListener {
public void onBrushSelected(boolean enabled);
public void onPaintUndo();
public void onTextSelected(boolean enabled);
public void onStickerSelected(boolean enabled);
public void onDeleteSelected();
public void onSave();
}
}