Loading packages/SystemUI/res/layout/people_space_small_avatar_tile.xml +153 −67 Original line number Diff line number Diff line Loading @@ -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" Loading Loading @@ -103,4 +188,5 @@ android:visibility="gone"/> </LinearLayout> </LinearLayout> </RelativeLayout> </LinearLayout> No newline at end of file packages/SystemUI/src/com/android/systemui/people/PeopleSpaceUtils.java +58 −1 Original line number Diff line number Diff line Loading @@ -64,6 +64,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; Loading @@ -77,6 +79,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, Loading Loading @@ -267,7 +274,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); } Loading Loading @@ -306,6 +315,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) { Loading packages/SystemUI/tests/src/com/android/systemui/people/PeopleSpaceUtilsTest.java +89 −0 Original line number Diff line number Diff line Loading @@ -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") Loading Loading
packages/SystemUI/res/layout/people_space_small_avatar_tile.xml +153 −67 Original line number Diff line number Diff line Loading @@ -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" Loading Loading @@ -103,4 +188,5 @@ android:visibility="gone"/> </LinearLayout> </LinearLayout> </RelativeLayout> </LinearLayout> No newline at end of file
packages/SystemUI/src/com/android/systemui/people/PeopleSpaceUtils.java +58 −1 Original line number Diff line number Diff line Loading @@ -64,6 +64,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; Loading @@ -77,6 +79,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, Loading Loading @@ -267,7 +274,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); } Loading Loading @@ -306,6 +315,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) { Loading
packages/SystemUI/tests/src/com/android/systemui/people/PeopleSpaceUtilsTest.java +89 −0 Original line number Diff line number Diff line Loading @@ -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") Loading