From 279f4d668a751a7d5f1a2e66f3c8be46586c73e9 Mon Sep 17 00:00:00 2001
From: Torsten Grote <t@grobox.de>
Date: Wed, 21 Dec 2016 18:04:05 -0200
Subject: [PATCH] Add new UnreadMessageButton class

---
 .../android/view/UnreadMessageButton.java     | 76 +++++++++++++++++++
 .../main/res/drawable/chevron_down_white.xml  |  9 +++
 .../main/res/drawable/chevron_up_white.xml    |  9 +++
 .../layout/activity_threaded_conversation.xml | 34 +++++++--
 .../main/res/layout/unread_message_button.xml | 31 ++++++++
 briar-android/src/main/res/values/attrs.xml   |  7 ++
 6 files changed, 160 insertions(+), 6 deletions(-)
 create mode 100644 briar-android/src/main/java/org/briarproject/briar/android/view/UnreadMessageButton.java
 create mode 100644 briar-android/src/main/res/drawable/chevron_down_white.xml
 create mode 100644 briar-android/src/main/res/drawable/chevron_up_white.xml
 create mode 100644 briar-android/src/main/res/layout/unread_message_button.xml

diff --git a/briar-android/src/main/java/org/briarproject/briar/android/view/UnreadMessageButton.java b/briar-android/src/main/java/org/briarproject/briar/android/view/UnreadMessageButton.java
new file mode 100644
index 0000000000..6e061226d7
--- /dev/null
+++ b/briar-android/src/main/java/org/briarproject/briar/android/view/UnreadMessageButton.java
@@ -0,0 +1,76 @@
+package org.briarproject.briar.android.view;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.support.annotation.Nullable;
+import android.support.annotation.UiThread;
+import android.support.design.widget.FloatingActionButton;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.widget.FrameLayout;
+import android.widget.TextView;
+
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.briar.R;
+
+@UiThread
+@NotNullByDefault
+public class UnreadMessageButton extends FrameLayout {
+
+	private final static int UP = 0, DOWN = 1;
+
+	private final FloatingActionButton fab;
+	private final TextView unread;
+
+	public UnreadMessageButton(Context context) {
+		this(context, null);
+	}
+
+	public UnreadMessageButton(Context context, @Nullable AttributeSet attrs) {
+		this(context, attrs, 0);
+	}
+
+	public UnreadMessageButton(Context context, @Nullable AttributeSet attrs,
+			int defStyleAttr) {
+		super(context, attrs, defStyleAttr);
+
+		LayoutInflater inflater = (LayoutInflater) context
+				.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+		inflater
+				.inflate(R.layout.unread_message_button, this, true);
+
+		fab = (FloatingActionButton) findViewById(R.id.fab);
+		unread = (TextView) findViewById(R.id.unreadCountView);
+
+		TypedArray attributes = context.obtainStyledAttributes(attrs,
+				R.styleable.UnreadMessageButton);
+		int direction = attributes
+				.getInteger(R.styleable.UnreadMessageButton_direction, DOWN);
+		setDirection(direction);
+		attributes.recycle();
+
+		setUnreadCount(0);
+	}
+
+	private void setDirection(int direction) {
+		if (direction == UP) {
+			fab.setImageResource(R.drawable.chevron_up_white);
+		} else if (direction == DOWN) {
+			fab.setImageResource(R.drawable.chevron_down_white);
+		} else {
+			throw new IllegalArgumentException();
+		}
+	}
+
+	public void setUnreadCount(int count) {
+		if (count == 0) {
+			unread.setVisibility(INVISIBLE);
+			fab.hide();
+		} else {
+			unread.setVisibility(VISIBLE);
+			unread.setText(String.valueOf(count));
+			if (!fab.isShown()) fab.show();
+		}
+	}
+
+}
diff --git a/briar-android/src/main/res/drawable/chevron_down_white.xml b/briar-android/src/main/res/drawable/chevron_down_white.xml
new file mode 100644
index 0000000000..c7c475fea4
--- /dev/null
+++ b/briar-android/src/main/res/drawable/chevron_down_white.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportHeight="24.0"
+        android:viewportWidth="24.0">
+	<path
+		android:fillColor="#FFFFFFFF"
+		android:pathData="M7.41,7.84L12,12.42l4.59,-4.58L18,9.25l-6,6 -6,-6z"/>
+</vector>
diff --git a/briar-android/src/main/res/drawable/chevron_up_white.xml b/briar-android/src/main/res/drawable/chevron_up_white.xml
new file mode 100644
index 0000000000..3715aa2f0d
--- /dev/null
+++ b/briar-android/src/main/res/drawable/chevron_up_white.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportHeight="24.0"
+        android:viewportWidth="24.0">
+	<path
+		android:fillColor="#FFFFFFFF"
+		android:pathData="M7.41,15.41L12,10.83l4.59,4.58L18,14l-6,-6 -6,6z"/>
+</vector>
diff --git a/briar-android/src/main/res/layout/activity_threaded_conversation.xml b/briar-android/src/main/res/layout/activity_threaded_conversation.xml
index 9847ed644e..913a175607 100644
--- a/briar-android/src/main/res/layout/activity_threaded_conversation.xml
+++ b/briar-android/src/main/res/layout/activity_threaded_conversation.xml
@@ -2,21 +2,43 @@
 <LinearLayout
 	xmlns:android="http://schemas.android.com/apk/res/android"
 	xmlns:app="http://schemas.android.com/apk/res-auto"
+	xmlns:tools="http://schemas.android.com/tools"
 	android:layout_width="match_parent"
 	android:layout_height="match_parent"
 	android:orientation="vertical"
-	xmlns:tools="http://schemas.android.com/tools"
 	tools:context=".android.forum.ForumActivity">
 
 	<include layout="@layout/toolbar"/>
 
-	<org.briarproject.briar.android.view.BriarRecyclerView
-		android:id="@+id/list"
+	<android.support.design.widget.CoordinatorLayout
 		android:layout_width="match_parent"
 		android:layout_height="0dp"
-		android:layout_weight="1"
-		app:emptyText="@string/no_forum_posts"
-		app:scrollToEnd="false"/>
+		android:layout_weight="1">
+
+		<org.briarproject.briar.android.view.BriarRecyclerView
+			android:id="@+id/list"
+			android:layout_width="match_parent"
+			android:layout_height="match_parent"
+			app:emptyText="@string/no_forum_posts"
+			app:scrollToEnd="false"/>
+
+		<org.briarproject.briar.android.view.UnreadMessageButton
+			android:id="@+id/upButton"
+			android:layout_width="wrap_content"
+			android:layout_height="wrap_content"
+			android:layout_gravity="top|right"
+			app:layout_anchorGravity="top|right"
+			app:direction="up"/>
+
+		<org.briarproject.briar.android.view.UnreadMessageButton
+			android:id="@+id/downButton"
+			android:layout_width="wrap_content"
+			android:layout_height="wrap_content"
+			android:layout_gravity="bottom|right"
+			app:layout_anchorGravity="bottom|right"
+			app:direction="down"/>
+
+	</android.support.design.widget.CoordinatorLayout>
 
 	<org.briarproject.briar.android.view.TextInputView
 		android:id="@+id/text_input_container"
diff --git a/briar-android/src/main/res/layout/unread_message_button.xml b/briar-android/src/main/res/layout/unread_message_button.xml
new file mode 100644
index 0000000000..9c00eca8e6
--- /dev/null
+++ b/briar-android/src/main/res/layout/unread_message_button.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<merge
+	xmlns:android="http://schemas.android.com/apk/res/android"
+	xmlns:app="http://schemas.android.com/apk/res-auto"
+	xmlns:tools="http://schemas.android.com/tools"
+	tools:showIn="@layout/activity_threaded_conversation">
+
+	<android.support.design.widget.FloatingActionButton
+		android:id="@+id/fab"
+		android:layout_width="wrap_content"
+		android:layout_height="wrap_content"
+		app:fabSize="mini"
+		app:useCompatPadding="true"/>
+
+	<TextView
+		android:id="@+id/unreadCountView"
+		android:layout_width="wrap_content"
+		android:layout_height="@dimen/unread_bubble_size"
+		android:layout_gravity="right|top"
+		android:layout_marginRight="5dp"
+		android:layout_marginTop="10dp"
+		android:background="@drawable/bubble"
+		android:elevation="7dp"
+		android:gravity="center"
+		android:minWidth="@dimen/unread_bubble_size"
+		android:textColor="@color/briar_text_primary_inverse"
+		android:textSize="@dimen/unread_bubble_text_size"
+		android:textStyle="bold"
+		tools:text="12"/>
+
+</merge>
\ No newline at end of file
diff --git a/briar-android/src/main/res/values/attrs.xml b/briar-android/src/main/res/values/attrs.xml
index d28d0e3f73..6d6207cd0b 100644
--- a/briar-android/src/main/res/values/attrs.xml
+++ b/briar-android/src/main/res/values/attrs.xml
@@ -25,4 +25,11 @@
 		<attr name="fillHeight" format="boolean"/>
 	</declare-styleable>
 
+	<declare-styleable name="UnreadMessageButton">
+		<attr name="direction" format="enum">
+			<enum name="up" value="0"/>
+			<enum name="down" value="1"/>
+		</attr>
+	</declare-styleable>
+
 </resources>
\ No newline at end of file
-- 
GitLab