aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/app/src/main/java/com/wireguard/android/widget/fab/AddFloatingActionButton.java
diff options
context:
space:
mode:
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.java96
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;
+ }
+}