diff options
Diffstat (limited to 'app/src/main/java/com/wireguard/android/widget/fab/AddFloatingActionButton.java')
-rw-r--r-- | app/src/main/java/com/wireguard/android/widget/fab/AddFloatingActionButton.java | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/app/src/main/java/com/wireguard/android/widget/fab/AddFloatingActionButton.java b/app/src/main/java/com/wireguard/android/widget/fab/AddFloatingActionButton.java new file mode 100644 index 00000000..4a4dd3b5 --- /dev/null +++ b/app/src/main/java/com/wireguard/android/widget/fab/AddFloatingActionButton.java @@ -0,0 +1,96 @@ +/* + * Copyright © 2014 Jerzy Chalupski + * Copyright © 2018 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved. + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +package com.wireguard.android.widget.fab; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Paint.Style; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.ShapeDrawable; +import android.graphics.drawable.shapes.Shape; +import android.support.annotation.ColorRes; +import android.support.annotation.DrawableRes; +import android.util.AttributeSet; + +import com.wireguard.android.R; + +public class AddFloatingActionButton extends FloatingActionButton { + int mPlusColor; + + public AddFloatingActionButton(final Context context) { + this(context, null); + } + + public AddFloatingActionButton(final Context context, final AttributeSet attrs) { + super(context, attrs); + } + + public AddFloatingActionButton(final Context context, final AttributeSet attrs, final int defStyle) { + super(context, attrs, defStyle); + } + + @Override + void init(final Context context, final AttributeSet attributeSet) { + final TypedArray attr = context.obtainStyledAttributes(attributeSet, R.styleable.AddFloatingActionButton, 0, 0); + mPlusColor = attr.getColor(R.styleable.AddFloatingActionButton_fab_plusIconColor, getColor(android.R.color.white)); + attr.recycle(); + + super.init(context, attributeSet); + } + + /** + * @return the current Color of plus icon. + */ + public int getPlusColor() { + return mPlusColor; + } + + public void setPlusColor(final int color) { + if (mPlusColor != color) { + mPlusColor = color; + updateBackground(); + } + } + + public void setPlusColorResId(@ColorRes int plusColor) { + setPlusColor(getColor(plusColor)); + } + + @Override + public void setIcon(@DrawableRes final int icon) { + throw new UnsupportedOperationException("Use FloatingActionButton if you want to use custom icon"); + } + + @Override + Drawable getIconDrawable() { + final float iconSize = getDimension(R.dimen.fab_icon_size); + final float iconHalfSize = iconSize / 2f; + + final float plusSize = getDimension(R.dimen.fab_plus_icon_size); + final float plusHalfStroke = getDimension(R.dimen.fab_plus_icon_stroke) / 2f; + final float plusOffset = (iconSize - plusSize) / 2f; + + final Shape shape = new Shape() { + @Override + public void draw(final Canvas canvas, final Paint paint) { + canvas.drawRect(plusOffset, iconHalfSize - plusHalfStroke, iconSize - plusOffset, iconHalfSize + plusHalfStroke, paint); + canvas.drawRect(iconHalfSize - plusHalfStroke, plusOffset, iconHalfSize + plusHalfStroke, iconSize - plusOffset, paint); + } + }; + + final ShapeDrawable drawable = new ShapeDrawable(shape); + + final Paint paint = drawable.getPaint(); + paint.setColor(mPlusColor); + paint.setStyle(Style.FILL); + paint.setAntiAlias(true); + + return drawable; + } +} |