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