Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 21258a57 authored by Flavio Fiszman's avatar Flavio Fiszman
Browse files

Decorate PeopleSpaceTile with background chars.

Screenshots:
https://screenshot.googleplex.com/rApjvhjfUFhr24H.png
https://screenshot.googleplex.com/9FDZunQ4YQsJVjD.png
https://screenshot.googleplex.com/8ragorxeLzJRZPW.png

Change-Id: I6df2ab17d47f9aae8fe5e3f85c7c3a67d9226849
Test: PeopleSpaceUtilsTest and manual
parent 2d0c5b8a
Loading
Loading
Loading
Loading
+153 −67
Original line number Diff line number Diff line
@@ -18,8 +18,93 @@
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <LinearLayout
    <RelativeLayout
        android:background="@drawable/people_space_tile_view_card"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="start">
            <TextView
                android:id="@+id/punctuation1"
                android:textColor="?android:attr/textColorSecondary"
                android:textAppearance="@*android:style/TextAppearance.DeviceDefault.ListItem"
                android:textSize="36sp"
                android:textStyle="bold"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:maxLines="1"
                android:alpha="0.2"
                android:rotation="350" />
            <TextView
                android:id="@+id/punctuation2"
                android:textColor="?android:attr/textColorSecondary"
                android:textAppearance="@*android:style/TextAppearance.DeviceDefault.ListItem"
                android:textSize="36sp"
                android:textStyle="bold"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="25dp"
                android:maxLines="1"
                android:alpha="0.2"
                android:rotation="5" />
            <TextView
                android:id="@+id/punctuation3"
                android:textColor="?android:attr/textColorSecondary"
                android:textAppearance="@*android:style/TextAppearance.DeviceDefault.ListItem"
                android:textSize="36sp"
                android:textStyle="bold"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:layout_marginStart="25dp"
                android:maxLines="1"
                android:alpha="0.2"
                android:rotation="355"/>
            <TextView
                android:id="@+id/punctuation4"
                android:textColor="?android:attr/textColorSecondary"
                android:textAppearance="@*android:style/TextAppearance.DeviceDefault.ListItem"
                android:textSize="36sp"
                android:textStyle="bold"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="-5dp"
                android:layout_marginStart="25dp"
                android:maxLines="1"
                android:alpha="0.2"
                android:rotation="10" />
            <TextView
                android:id="@+id/punctuation5"
                android:textColor="?android:attr/textColorSecondary"
                android:textAppearance="@*android:style/TextAppearance.DeviceDefault.ListItem"
                android:textSize="36sp"
                android:textStyle="bold"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:layout_marginStart="25dp"
                android:maxLines="1"
                android:alpha="0.2"
                android:rotation="15" />
            <TextView
                android:id="@+id/punctuation6"
                android:textColor="?android:attr/textColorSecondary"
                android:textAppearance="@*android:style/TextAppearance.DeviceDefault.ListItem"
                android:textSize="36sp"
                android:textStyle="bold"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="-5dp"
                android:layout_marginStart="25dp"
                android:maxLines="1"
                android:alpha="0.2"
                android:rotation="345" />
        </LinearLayout>
        <LinearLayout
            android:id="@+id/item"
            android:orientation="vertical"
            android:paddingTop="6dp"
@@ -103,4 +188,5 @@
                    android:visibility="gone"/>
            </LinearLayout>
        </LinearLayout>
    </RelativeLayout>
</LinearLayout>
 No newline at end of file
+58 −1
Original line number Diff line number Diff line
@@ -62,6 +62,8 @@ import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Optional;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;

@@ -75,6 +77,11 @@ public class PeopleSpaceUtils {
    private static final int ONE_DAY = 1;
    public static final String OPTIONS_PEOPLE_SPACE_TILE = "options_people_space_tile";

    private static final Pattern DOUBLE_EXCLAMATION_PATTERN = Pattern.compile("[!][!]+");
    private static final Pattern DOUBLE_QUESTION_PATTERN = Pattern.compile("[?][?]+");
    private static final Pattern ANY_DOUBLE_MARK_PATTERN = Pattern.compile("[!?][!?]+");
    private static final Pattern MIXED_MARK_PATTERN = Pattern.compile("![?].*|.*[?]!");

    /** Represents whether {@link StatusBarNotification} was posted or removed. */
    public enum NotificationAction {
        POSTED,
@@ -242,7 +249,9 @@ public class PeopleSpaceUtils {
            views.setViewVisibility(R.id.image, View.VISIBLE);
            views.setViewVisibility(R.id.content, View.GONE);
        } else {
            views.setTextViewText(R.id.content, tile.getNotificationContent());
            CharSequence content = tile.getNotificationContent();
            views = setPunctuationRemoteViewsFields(views, content);
            views.setTextViewText(R.id.content, content);
            views.setViewVisibility(R.id.content, View.VISIBLE);
            views.setViewVisibility(R.id.image, View.GONE);
        }
@@ -281,6 +290,54 @@ public class PeopleSpaceUtils {
        return views;
    }

    private static RemoteViews setPunctuationRemoteViewsFields(
            RemoteViews views, CharSequence content) {
        String punctuation = getBackgroundTextFromMessage(content.toString());
        int visibility = View.GONE;
        if (punctuation  != null) {
            visibility = View.VISIBLE;
        }
        views.setTextViewText(R.id.punctuation1, punctuation);
        views.setTextViewText(R.id.punctuation2, punctuation);
        views.setTextViewText(R.id.punctuation3, punctuation);
        views.setTextViewText(R.id.punctuation4, punctuation);
        views.setTextViewText(R.id.punctuation5, punctuation);
        views.setTextViewText(R.id.punctuation6, punctuation);

        views.setViewVisibility(R.id.punctuation1, visibility);
        views.setViewVisibility(R.id.punctuation2, visibility);
        views.setViewVisibility(R.id.punctuation3, visibility);
        views.setViewVisibility(R.id.punctuation4, visibility);
        views.setViewVisibility(R.id.punctuation5, visibility);
        views.setViewVisibility(R.id.punctuation6, visibility);

        return views;
    }

    /** Gets character for tile background decoration based on notification content. */
    @VisibleForTesting
    static String getBackgroundTextFromMessage(String message) {
        if (!ANY_DOUBLE_MARK_PATTERN.matcher(message).find()) {
            return null;
        }
        if (MIXED_MARK_PATTERN.matcher(message).find()) {
            return "!?";
        }
        Matcher doubleQuestionMatcher = DOUBLE_QUESTION_PATTERN.matcher(message);
        if (!doubleQuestionMatcher.find()) {
            return "!";
        }
        Matcher doubleExclamationMatcher = DOUBLE_EXCLAMATION_PATTERN.matcher(message);
        if (!doubleExclamationMatcher.find()) {
            return "?";
        }
        // If we have both "!!" and "??", return the one that comes first.
        if (doubleQuestionMatcher.start() < doubleExclamationMatcher.start()) {
            return "?";
        }
        return "!";
    }

    /** Gets the most recent {@link Notification.MessagingStyle.Message} from the notification. */
    public static Notification.MessagingStyle.Message getLastMessagingStyleMessage(
            StatusBarNotification sbn) {
+89 −0
Original line number Diff line number Diff line
@@ -123,6 +123,95 @@ public class PeopleSpaceUtilsTest extends SysuiTestCase {
        assertThat(lastMessage).isNull();
    }

    @Test
    public void testGetBackgroundTextFromMessageNoPunctuation() {
        String backgroundText = PeopleSpaceUtils.getBackgroundTextFromMessage("test");

        assertThat(backgroundText).isNull();
    }

    @Test
    public void testGetBackgroundTextFromMessageSingleExclamation() {
        String backgroundText = PeopleSpaceUtils.getBackgroundTextFromMessage("test!");

        assertThat(backgroundText).isNull();
    }

    @Test
    public void testGetBackgroundTextFromMessageSingleQuestion() {
        String backgroundText = PeopleSpaceUtils.getBackgroundTextFromMessage("?test");

        assertThat(backgroundText).isNull();
    }

    @Test
    public void testGetBackgroundTextFromMessageSeparatedMarks() {
        String backgroundText = PeopleSpaceUtils.getBackgroundTextFromMessage("test! right!");

        assertThat(backgroundText).isNull();
    }

    @Test
    public void testGetBackgroundTextFromMessageDoubleExclamation() {
        String backgroundText = PeopleSpaceUtils.getBackgroundTextFromMessage("!!test");

        assertThat(backgroundText).isEqualTo("!");
    }

    @Test
    public void testGetBackgroundTextFromMessageDoubleQuestion() {
        String backgroundText = PeopleSpaceUtils.getBackgroundTextFromMessage("test??");

        assertThat(backgroundText).isEqualTo("?");
    }

    @Test
    public void testGetBackgroundTextFromMessageMixed() {
        String backgroundText = PeopleSpaceUtils.getBackgroundTextFromMessage("test?!");

        assertThat(backgroundText).isEqualTo("!?");
    }

    @Test
    public void testGetBackgroundTextFromMessageMixedInTheMiddle() {
        String backgroundText = PeopleSpaceUtils.getBackgroundTextFromMessage(
                "test!? in the middle");

        assertThat(backgroundText).isEqualTo("!?");
    }

    @Test
    public void testGetBackgroundTextFromMessageMixedDifferentOrder() {
        String backgroundText = PeopleSpaceUtils.getBackgroundTextFromMessage(
                "test!? in the middle");

        assertThat(backgroundText).isEqualTo("!?");
    }

    @Test
    public void testGetBackgroundTextFromMessageMultiple() {
        String backgroundText = PeopleSpaceUtils.getBackgroundTextFromMessage(
                "test!?!!? in the middle");

        assertThat(backgroundText).isEqualTo("!?");
    }

    @Test
    public void testGetBackgroundTextFromMessageQuestionFirst() {
        String backgroundText = PeopleSpaceUtils.getBackgroundTextFromMessage(
                "test?? in the middle!!");

        assertThat(backgroundText).isEqualTo("?");
    }

    @Test
    public void testGetBackgroundTextFromMessageExclamationFirst() {
        String backgroundText = PeopleSpaceUtils.getBackgroundTextFromMessage(
                "test!! in the middle??");

        assertThat(backgroundText).isEqualTo("!");
    }

    @Test
    public void testGetLastMessagingStyleMessage() {
        Notification notification = new Notification.Builder(mContext, "test")