diff options
| author | 2021-01-26 13:46:36 +0000 | |
|---|---|---|
| committer | 2021-01-26 13:46:36 +0000 | |
| commit | 56fbe0eb9c292677526759e792bfbb00e62ab025 (patch) | |
| tree | f0de697ec92c432feb56267ee11b05bf29d78afb | |
| parent | d8d8acfd9fb1f2125dc06b34d2c520368d31421e (diff) | |
| parent | e5e3e0ba88715ff19624e6402cea3843bba4e584 (diff) | |
Merge "Update PeopleTile & ConversationChannel"
| -rw-r--r-- | core/java/android/app/people/ConversationChannel.java | 36 | ||||
| -rw-r--r-- | core/java/android/app/people/PeopleSpaceTile.java (renamed from packages/SystemUI/src/com/android/systemui/people/PeopleSpaceTile.java) | 109 | ||||
| -rw-r--r-- | core/tests/coretests/src/android/app/people/PeopleSpaceTileTest.java (renamed from packages/SystemUI/tests/src/com/android/systemui/people/PeopleSpaceTileTest.java) | 97 | ||||
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/people/PeopleSpaceActivity.java | 5 | ||||
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/people/PeopleSpaceTileView.java | 1 | ||||
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/people/PeopleSpaceUtils.java | 22 | ||||
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/people/widget/PeopleSpaceWidgetRemoteViewsFactory.java | 2 | ||||
| -rw-r--r-- | packages/SystemUI/tests/src/com/android/systemui/people/PeopleSpaceUtilsTest.java | 10 | ||||
| -rw-r--r-- | packages/SystemUI/tests/src/com/android/systemui/people/widget/PeopleSpaceWidgetManagerTest.java | 2 |
9 files changed, 220 insertions, 64 deletions
diff --git a/core/java/android/app/people/ConversationChannel.java b/core/java/android/app/people/ConversationChannel.java index a648b3bd1e37..332e159679ae 100644 --- a/core/java/android/app/people/ConversationChannel.java +++ b/core/java/android/app/people/ConversationChannel.java @@ -16,12 +16,16 @@ package android.app.people; +import android.annotation.Nullable; import android.app.NotificationChannel; import android.app.NotificationChannelGroup; import android.content.pm.ShortcutInfo; import android.os.Parcel; import android.os.Parcelable; +import java.util.ArrayList; +import java.util.List; + /** * The non-customized notification channel of a conversation. It contains the information to render * the conversation and allows the user to open and customize the conversation setting. @@ -36,6 +40,8 @@ public final class ConversationChannel implements Parcelable { private NotificationChannelGroup mParentNotificationChannelGroup; private long mLastEventTimestamp; private boolean mHasActiveNotifications; + private boolean mHasBirthdayToday; + private List<ConversationStatus> mStatuses; public static final Creator<ConversationChannel> CREATOR = new Creator<ConversationChannel>() { @Override @@ -61,6 +67,21 @@ public final class ConversationChannel implements Parcelable { mHasActiveNotifications = hasActiveNotifications; } + public ConversationChannel(ShortcutInfo shortcutInfo, int uid, + NotificationChannel parentNotificationChannel, + NotificationChannelGroup parentNotificationChannelGroup, long lastEventTimestamp, + boolean hasActiveNotifications, boolean hasBirthdayToday, + List<ConversationStatus> statuses) { + mShortcutInfo = shortcutInfo; + mUid = uid; + mParentNotificationChannel = parentNotificationChannel; + mParentNotificationChannelGroup = parentNotificationChannelGroup; + mLastEventTimestamp = lastEventTimestamp; + mHasActiveNotifications = hasActiveNotifications; + mHasBirthdayToday = hasBirthdayToday; + mStatuses = statuses; + } + public ConversationChannel(Parcel in) { mShortcutInfo = in.readParcelable(ShortcutInfo.class.getClassLoader()); mUid = in.readInt(); @@ -69,6 +90,9 @@ public final class ConversationChannel implements Parcelable { in.readParcelable(NotificationChannelGroup.class.getClassLoader()); mLastEventTimestamp = in.readLong(); mHasActiveNotifications = in.readBoolean(); + mHasBirthdayToday = in.readBoolean(); + mStatuses = new ArrayList<>(); + in.readParcelableList(mStatuses, ConversationStatus.class.getClassLoader()); } @Override @@ -84,6 +108,8 @@ public final class ConversationChannel implements Parcelable { dest.writeParcelable(mParentNotificationChannelGroup, flags); dest.writeLong(mLastEventTimestamp); dest.writeBoolean(mHasActiveNotifications); + dest.writeBoolean(mHasBirthdayToday); + dest.writeParcelableList(mStatuses, flags); } public ShortcutInfo getShortcutInfo() { @@ -113,4 +139,14 @@ public final class ConversationChannel implements Parcelable { public boolean hasActiveNotifications() { return mHasActiveNotifications; } + + /** Whether this conversation has a birthday today, as associated in the Contacts Database. */ + public boolean hasBirthdayToday() { + return mHasBirthdayToday; + } + + /** Returns statuses associated with the conversation. */ + public @Nullable List<ConversationStatus> getStatuses() { + return mStatuses; + } } diff --git a/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceTile.java b/core/java/android/app/people/PeopleSpaceTile.java index d7ee97bc3bc5..9a53b99aaefe 100644 --- a/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceTile.java +++ b/core/java/android/app/people/PeopleSpaceTile.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 The Android Open Source Project + * Copyright (C) 2021 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.systemui.people; +package android.app.people; import android.annotation.NonNull; import android.app.Person; @@ -30,6 +30,9 @@ import android.net.Uri; import android.os.Parcel; import android.os.Parcelable; +import java.util.ArrayList; +import java.util.List; + /** * The People Space tile contains all relevant information to render a tile in People Space: namely * the data of any visible conversation notification associated, associated statuses, and the last @@ -45,16 +48,15 @@ public class PeopleSpaceTile implements Parcelable { private int mUid; private Uri mContactUri; private String mPackageName; - private String mStatusText; + private String mBirthdayText; private long mLastInteractionTimestamp; private boolean mIsImportantConversation; - private boolean mIsHiddenConversation; private String mNotificationKey; - // TODO: add mNotificationTimestamp private CharSequence mNotificationContent; private Uri mNotificationDataUri; private Intent mIntent; - // TODO: add a List of the Status objects once created + private long mNotificationTimestamp; + private List<ConversationStatus> mStatuses; private PeopleSpaceTile(Builder b) { mId = b.mId; @@ -63,14 +65,15 @@ public class PeopleSpaceTile implements Parcelable { mContactUri = b.mContactUri; mUid = b.mUid; mPackageName = b.mPackageName; - mStatusText = b.mStatusText; + mBirthdayText = b.mBirthdayText; mLastInteractionTimestamp = b.mLastInteractionTimestamp; mIsImportantConversation = b.mIsImportantConversation; - mIsHiddenConversation = b.mIsHiddenConversation; mNotificationKey = b.mNotificationKey; mNotificationContent = b.mNotificationContent; mNotificationDataUri = b.mNotificationDataUri; mIntent = b.mIntent; + mNotificationTimestamp = b.mNotificationTimestamp; + mStatuses = b.mStatuses; } public String getId() { @@ -98,8 +101,8 @@ public class PeopleSpaceTile implements Parcelable { return mPackageName; } - public String getStatusText() { - return mStatusText; + public String getBirthdayText() { + return mBirthdayText; } /** Returns the timestamp of the last interaction. */ @@ -115,13 +118,6 @@ public class PeopleSpaceTile implements Parcelable { } /** - * Whether the conversation should be hidden. - */ - public boolean isHiddenConversation() { - return mIsHiddenConversation; - } - - /** * If a notification is currently active that maps to the relevant shortcut ID, provides the * associated notification's key. */ @@ -148,20 +144,32 @@ public class PeopleSpaceTile implements Parcelable { return mIntent; } + /** Returns the timestamp of the last notification. */ + public long getNotificationTimestamp() { + return mNotificationTimestamp; + } + + /** Returns the statuses associated with the tile. */ + public List<ConversationStatus> getStatuses() { + return mStatuses; + } + /** Converts a {@link PeopleSpaceTile} into a {@link PeopleSpaceTile.Builder}. */ - public PeopleSpaceTile.Builder toBuilder() { - PeopleSpaceTile.Builder builder = - new PeopleSpaceTile.Builder(mId, mUserName.toString(), mUserIcon, mIntent); + public Builder toBuilder() { + Builder builder = + new Builder(mId, mUserName.toString(), mUserIcon, mIntent); builder.setContactUri(mContactUri); builder.setUid(mUid); builder.setPackageName(mPackageName); - builder.setStatusText(mStatusText); + builder.setBirthdayText(mBirthdayText); builder.setLastInteractionTimestamp(mLastInteractionTimestamp); builder.setIsImportantConversation(mIsImportantConversation); - builder.setIsHiddenConversation(mIsHiddenConversation); builder.setNotificationKey(mNotificationKey); builder.setNotificationContent(mNotificationContent); builder.setNotificationDataUri(mNotificationDataUri); + builder.setIntent(mIntent); + builder.setNotificationTimestamp(mNotificationTimestamp); + builder.setStatuses(mStatuses); return builder; } @@ -173,14 +181,15 @@ public class PeopleSpaceTile implements Parcelable { private Uri mContactUri; private int mUid; private String mPackageName; - private String mStatusText; + private String mBirthdayText; private long mLastInteractionTimestamp; private boolean mIsImportantConversation; - private boolean mIsHiddenConversation; private String mNotificationKey; private CharSequence mNotificationContent; private Uri mNotificationDataUri; private Intent mIntent; + private long mNotificationTimestamp; + private List<ConversationStatus> mStatuses; /** Builder for use only if a shortcut is not available for the tile. */ public Builder(String id, String userName, Icon userIcon, Intent intent) { @@ -200,7 +209,22 @@ public class PeopleSpaceTile implements Parcelable { mContactUri = getContactUri(info); } - private Uri getContactUri(ShortcutInfo info) { + public Builder(ConversationChannel channel, LauncherApps launcherApps) { + ShortcutInfo info = channel.getShortcutInfo(); + mId = info.getId(); + mUserName = info.getLabel(); + mUserIcon = convertDrawableToIcon(launcherApps.getShortcutIconDrawable(info, 0)); + mUid = info.getUserId(); + mPackageName = info.getPackage(); + mContactUri = getContactUri(info); + mStatuses = channel.getStatuses(); + mLastInteractionTimestamp = channel.getLastEventTimestamp(); + mIsImportantConversation = channel.getParentNotificationChannel() != null + && channel.getParentNotificationChannel().isImportantConversation(); + } + + /** Returns the Contact's Uri if present. */ + public Uri getContactUri(ShortcutInfo info) { if (info.getPersons() == null || info.getPersons().length != 1) { return null; } @@ -246,8 +270,8 @@ public class PeopleSpaceTile implements Parcelable { } /** Sets the status text. */ - public Builder setStatusText(String statusText) { - mStatusText = statusText; + public Builder setBirthdayText(String birthdayText) { + mBirthdayText = birthdayText; return this; } @@ -263,12 +287,6 @@ public class PeopleSpaceTile implements Parcelable { return this; } - /** Sets whether the conversation is hidden. */ - public Builder setIsHiddenConversation(boolean isHiddenConversation) { - mIsHiddenConversation = isHiddenConversation; - return this; - } - /** Sets the associated notification's key. */ public Builder setNotificationKey(String notificationKey) { mNotificationKey = notificationKey; @@ -293,6 +311,18 @@ public class PeopleSpaceTile implements Parcelable { return this; } + /** Sets the notification timestamp. */ + public Builder setNotificationTimestamp(long notificationTimestamp) { + mNotificationTimestamp = notificationTimestamp; + return this; + } + + /** Sets the statuses. */ + public Builder setStatuses(List<ConversationStatus> statuses) { + mStatuses = statuses; + return this; + } + /** Builds a {@link PeopleSpaceTile}. */ @NonNull public PeopleSpaceTile build() { @@ -300,21 +330,23 @@ public class PeopleSpaceTile implements Parcelable { } } - private PeopleSpaceTile(Parcel in) { + public PeopleSpaceTile(Parcel in) { mId = in.readString(); mUserName = in.readCharSequence(); mUserIcon = in.readParcelable(Icon.class.getClassLoader()); mContactUri = in.readParcelable(Uri.class.getClassLoader()); mUid = in.readInt(); mPackageName = in.readString(); - mStatusText = in.readString(); + mBirthdayText = in.readString(); mLastInteractionTimestamp = in.readLong(); mIsImportantConversation = in.readBoolean(); - mIsHiddenConversation = in.readBoolean(); mNotificationKey = in.readString(); mNotificationContent = in.readCharSequence(); mNotificationDataUri = in.readParcelable(Uri.class.getClassLoader()); mIntent = in.readParcelable(Intent.class.getClassLoader()); + mNotificationTimestamp = in.readLong(); + mStatuses = new ArrayList<>(); + in.readParcelableList(mStatuses, ConversationStatus.class.getClassLoader()); } @Override @@ -330,14 +362,15 @@ public class PeopleSpaceTile implements Parcelable { dest.writeParcelable(mContactUri, flags); dest.writeInt(mUid); dest.writeString(mPackageName); - dest.writeString(mStatusText); + dest.writeString(mBirthdayText); dest.writeLong(mLastInteractionTimestamp); dest.writeBoolean(mIsImportantConversation); - dest.writeBoolean(mIsHiddenConversation); dest.writeString(mNotificationKey); dest.writeCharSequence(mNotificationContent); dest.writeParcelable(mNotificationDataUri, flags); dest.writeParcelable(mIntent, flags); + dest.writeLong(mNotificationTimestamp); + dest.writeParcelableList(mStatuses, flags); } public static final @android.annotation.NonNull diff --git a/packages/SystemUI/tests/src/com/android/systemui/people/PeopleSpaceTileTest.java b/core/tests/coretests/src/android/app/people/PeopleSpaceTileTest.java index bd6167b1f781..1573c19b89a3 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/people/PeopleSpaceTileTest.java +++ b/core/tests/coretests/src/android/app/people/PeopleSpaceTileTest.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.systemui.people; +package android.app.people; import static com.google.common.truth.Truth.assertThat; @@ -25,6 +25,8 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.when; +import android.app.NotificationChannel; +import android.app.NotificationManager; import android.content.Context; import android.content.Intent; import android.content.pm.LauncherApps; @@ -34,13 +36,13 @@ import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.Icon; import android.net.Uri; +import android.os.Parcel; import androidx.test.InstrumentationRegistry; import androidx.test.filters.SmallTest; import androidx.test.runner.AndroidJUnit4; -import com.android.systemui.SysuiTestCase; -import com.android.systemui.people.PeopleSpaceTile; +import com.google.common.collect.ImmutableList; import org.junit.Before; import org.junit.Test; @@ -48,10 +50,13 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import java.util.List; + @RunWith(AndroidJUnit4.class) @SmallTest -public class PeopleSpaceTileTest extends SysuiTestCase { +public class PeopleSpaceTileTest { + private Context mContext; private final Drawable mDrawable = new ColorDrawable(Color.BLUE); private final Icon mIcon = PeopleSpaceTile.convertDrawableToIcon(mDrawable); @@ -60,6 +65,7 @@ public class PeopleSpaceTileTest extends SysuiTestCase { @Before public void setUp() { + mContext = InstrumentationRegistry.getContext(); MockitoAnnotations.initMocks(this); when(mLauncherApps.getShortcutIconDrawable(any(), eq(0))).thenReturn(mDrawable); } @@ -132,7 +138,7 @@ public class PeopleSpaceTileTest extends SysuiTestCase { PeopleSpaceTile tile = new PeopleSpaceTile.Builder( new ShortcutInfo.Builder(mContext, "123").build(), mLauncherApps).build(); // Automatically added by creating a ShortcutInfo. - assertThat(tile.getPackageName()).isEqualTo("com.android.systemui.tests"); + assertThat(tile.getPackageName()).isEqualTo("com.android.frameworks.coretests"); tile = new PeopleSpaceTile.Builder( new ShortcutInfo.Builder(mContext, "123").build(), mLauncherApps).setPackageName( @@ -171,16 +177,85 @@ public class PeopleSpaceTileTest extends SysuiTestCase { } @Test - public void testHiddenConversation() { + public void testStatuses() { PeopleSpaceTile tile = new PeopleSpaceTile.Builder( new ShortcutInfo.Builder(mContext, "123").build(), mLauncherApps).build(); - assertFalse(tile.isHiddenConversation()); + assertThat(tile.getStatuses()).isNull(); + List<ConversationStatus> statusList = ImmutableList.of( + new ConversationStatus.Builder("id", ConversationStatus.ACTIVITY_BIRTHDAY).build()); tile = new PeopleSpaceTile .Builder(new ShortcutInfo.Builder(mContext, "123").build(), mLauncherApps) - .setIsHiddenConversation(true) + .setStatuses(statusList) + .build(); + assertThat(tile.getStatuses()).isEqualTo(statusList); + } + + @Test + public void testCreateFromConversationChannel() { + ShortcutInfo shortcutInfo = new ShortcutInfo.Builder(mContext, "123").setLongLabel( + "name").build(); + ConversationChannel convo = new ConversationChannel(shortcutInfo, 0, null, null, + 0L, false, true, null); + PeopleSpaceTile tile = new PeopleSpaceTile.Builder(convo, mLauncherApps).build(); + assertThat(tile.getStatuses()).isNull(); + assertThat(tile.getId()).isEqualTo("123"); + assertThat(tile.getUserName()).isEqualTo("name"); + assertFalse(tile.isImportantConversation()); + assertThat(tile.getLastInteractionTimestamp()).isEqualTo(0L); + + List<ConversationStatus> statuses = ImmutableList.of( + new ConversationStatus.Builder("id", ConversationStatus.ACTIVITY_BIRTHDAY).build()); + NotificationChannel notificationChannel = new NotificationChannel("123", + "channel", + NotificationManager.IMPORTANCE_DEFAULT); + notificationChannel.setImportantConversation(true); + convo = new ConversationChannel(shortcutInfo, 0, notificationChannel, null, + 123L, false, true, statuses); + tile = new PeopleSpaceTile.Builder(convo, mLauncherApps).build(); + assertThat(tile.getStatuses()).isEqualTo(statuses); + assertTrue(tile.isImportantConversation()); + assertThat(tile.getLastInteractionTimestamp()).isEqualTo(123L); + } + + @Test + public void testWriteThenReadFromParcel() { + List<ConversationStatus> statusList = ImmutableList.of( + new ConversationStatus.Builder("id", ConversationStatus.ACTIVITY_BIRTHDAY).build()); + PeopleSpaceTile tile = new PeopleSpaceTile.Builder( + new ShortcutInfo.Builder(mContext, "123").build(), mLauncherApps) + .setUserName("name") + .setUserIcon(mIcon) + .setContactUri(Uri.parse("contact")) + .setUid(42) + .setPackageName("package.name") + .setLastInteractionTimestamp(7L) + .setIsImportantConversation(true) + .setStatuses(statusList).setNotificationKey("key") + .setNotificationContent("content") + .setNotificationDataUri(Uri.parse("data")) + .setIntent(new Intent()) .build(); - assertTrue(tile.isHiddenConversation()); + + Parcel parcel = Parcel.obtain(); + tile.writeToParcel(parcel, 0); + parcel.setDataPosition(0); + PeopleSpaceTile readTile = PeopleSpaceTile.CREATOR.createFromParcel(parcel); + + assertThat(readTile.getId()).isEqualTo(tile.getId()); + assertThat(readTile.getUserName()).isEqualTo(tile.getUserName()); + assertThat(readTile.getUserIcon().toString()).isEqualTo(tile.getUserIcon().toString()); + assertThat(readTile.getContactUri()).isEqualTo(tile.getContactUri()); + assertThat(readTile.getUid()).isEqualTo(tile.getUid()); + assertThat(readTile.getPackageName()).isEqualTo(tile.getPackageName()); + assertThat(readTile.getLastInteractionTimestamp()).isEqualTo( + tile.getLastInteractionTimestamp()); + assertThat(readTile.isImportantConversation()).isEqualTo(tile.isImportantConversation()); + assertThat(readTile.getStatuses()).isEqualTo(tile.getStatuses()); + assertThat(readTile.getNotificationKey()).isEqualTo(tile.getNotificationKey()); + assertThat(readTile.getNotificationContent()).isEqualTo(tile.getNotificationContent()); + assertThat(readTile.getNotificationDataUri()).isEqualTo(tile.getNotificationDataUri()); + assertThat(readTile.getIntent().toString()).isEqualTo(tile.getIntent().toString()); } @Test @@ -208,8 +283,8 @@ public class PeopleSpaceTileTest extends SysuiTestCase { PeopleSpaceTile tile = new PeopleSpaceTile.Builder(new ShortcutInfo.Builder(mContext, "123").build(), mLauncherApps) - .setNotificationDataUri(Uri.parse("test")) - .build(); + .setNotificationDataUri(Uri.parse("test")) + .build(); assertThat(tile.getNotificationDataUri()).isEqualTo(Uri.parse("test")); } diff --git a/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceActivity.java b/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceActivity.java index a8761a63f6ad..a4e91896be9e 100644 --- a/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceActivity.java +++ b/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceActivity.java @@ -22,6 +22,7 @@ import static android.appwidget.AppWidgetManager.INVALID_APPWIDGET_ID; import android.app.Activity; import android.app.INotificationManager; import android.app.people.IPeopleManager; +import android.app.people.PeopleSpaceTile; import android.appwidget.AppWidgetManager; import android.content.ComponentName; import android.content.Context; @@ -134,8 +135,10 @@ public class PeopleSpaceActivity extends Activity { + tile.getId() + " for widget ID: " + mAppWidgetId); } + // Ensure updates to app widget can be retrieved from both appWidget Id and tile ID. editor.putString(String.valueOf(mAppWidgetId), tile.getId()); - editor.commit(); + editor.putInt(tile.getId(), mAppWidgetId); + editor.apply(); AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(mContext); Bundle options = new Bundle(); options.putParcelable(PeopleSpaceUtils.OPTIONS_PEOPLE_SPACE_TILE, tile); diff --git a/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceTileView.java b/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceTileView.java index 25b91da7fadc..9ae7847031aa 100644 --- a/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceTileView.java +++ b/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceTileView.java @@ -16,6 +16,7 @@ package com.android.systemui.people; +import android.app.people.PeopleSpaceTile; import android.content.Context; import android.content.pm.LauncherApps; import android.graphics.drawable.Drawable; diff --git a/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceUtils.java b/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceUtils.java index 8669a817dfc2..91e7968f7546 100644 --- a/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceUtils.java +++ b/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceUtils.java @@ -23,6 +23,7 @@ import android.app.Notification; import android.app.PendingIntent; import android.app.people.ConversationChannel; import android.app.people.IPeopleManager; +import android.app.people.PeopleSpaceTile; import android.appwidget.AppWidgetManager; import android.content.Context; import android.content.Intent; @@ -221,7 +222,7 @@ public class PeopleSpaceUtils { return tile; } return tile.toBuilder() - .setStatusText(storedTile.getStatusText()) + .setBirthdayText(storedTile.getBirthdayText()) .setNotificationKey(storedTile.getNotificationKey()) .setNotificationContent(storedTile.getNotificationContent()) .setNotificationDataUri(storedTile.getNotificationDataUri()) @@ -234,6 +235,10 @@ public class PeopleSpaceUtils { int appWidgetId) { Bundle options = appWidgetManager.getAppWidgetOptions(appWidgetId); PeopleSpaceTile storedTile = options.getParcelable(OPTIONS_PEOPLE_SPACE_TILE); + if (storedTile == null) { + if (DEBUG) Log.d(TAG, "Could not find stored tile to add notification to"); + return; + } if (notificationAction == PeopleSpaceUtils.NotificationAction.POSTED) { if (DEBUG) Log.i(TAG, "Adding notification to storage, appWidgetId: " + appWidgetId); Notification.MessagingStyle.Message message = getLastMessagingStyleMessage(sbn); @@ -263,6 +268,10 @@ public class PeopleSpaceUtils { private static void updateAppWidgetOptions(AppWidgetManager appWidgetManager, int appWidgetId, PeopleSpaceTile tile) { + if (tile == null) { + if (DEBUG) Log.d(TAG, "Requested to store null tile"); + return; + } Bundle newOptions = new Bundle(); newOptions.putParcelable(OPTIONS_PEOPLE_SPACE_TILE, tile); appWidgetManager.updateAppWidgetOptions(appWidgetId, newOptions); @@ -274,7 +283,7 @@ public class PeopleSpaceUtils { RemoteViews views; if (tile.getNotificationKey() != null) { views = createNotificationRemoteViews(context, tile); - } else if (tile.getStatusText() != null) { + } else if (tile.getBirthdayText() != null) { views = createStatusRemoteViews(context, tile); } else { views = createLastInteractionRemoteViews(context, tile); @@ -344,7 +353,7 @@ public class PeopleSpaceUtils { PeopleSpaceTile tile) { RemoteViews views = new RemoteViews( context.getPackageName(), R.layout.people_space_large_avatar_tile); - views.setTextViewText(R.id.status, tile.getStatusText()); + views.setTextViewText(R.id.status, tile.getBirthdayText()); return views; } @@ -536,11 +545,10 @@ public class PeopleSpaceUtils { } private static boolean hasBirthdayStatus(PeopleSpaceTile tile, Context context) { - return tile.getStatusText() != null && tile.getStatusText().equals( + return tile.getBirthdayText() != null && tile.getBirthdayText().equals( context.getString(R.string.birthday_status)); } - /** Calls to retrieve birthdays on a background thread. */ private static void getBirthdaysOnBackgroundThread(Context context, AppWidgetManager appWidgetManager, @@ -581,7 +589,7 @@ public class PeopleSpaceUtils { if (DEBUG) Log.d(TAG, "Remove " + storedTile.getUserName() + "'s birthday"); updateAppWidgetOptionsAndView(appWidgetManager, context, appWidgetId, storedTile.toBuilder() - .setStatusText(null) + .setBirthdayText(null) .build()); } } @@ -605,7 +613,7 @@ public class PeopleSpaceUtils { if (DEBUG) Log.d(TAG, storedTile.getUserName() + "'s birthday today!"); updateAppWidgetOptionsAndView(appWidgetManager, context, appWidgetId, storedTile.toBuilder() - .setStatusText(context.getString(R.string.birthday_status)) + .setBirthdayText(context.getString(R.string.birthday_status)) .build()); return; } diff --git a/packages/SystemUI/src/com/android/systemui/people/widget/PeopleSpaceWidgetRemoteViewsFactory.java b/packages/SystemUI/src/com/android/systemui/people/widget/PeopleSpaceWidgetRemoteViewsFactory.java index cd0a5df2025a..fb33affcbac5 100644 --- a/packages/SystemUI/src/com/android/systemui/people/widget/PeopleSpaceWidgetRemoteViewsFactory.java +++ b/packages/SystemUI/src/com/android/systemui/people/widget/PeopleSpaceWidgetRemoteViewsFactory.java @@ -18,7 +18,7 @@ package com.android.systemui.people.widget; import android.app.INotificationManager; import android.app.people.IPeopleManager; -import com.android.systemui.people.PeopleSpaceTile; +import android.app.people.PeopleSpaceTile; import android.content.Context; import android.content.Intent; import android.content.pm.LauncherApps; diff --git a/packages/SystemUI/tests/src/com/android/systemui/people/PeopleSpaceUtilsTest.java b/packages/SystemUI/tests/src/com/android/systemui/people/PeopleSpaceUtilsTest.java index 64b96765106a..b7d1bc6c4c63 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/people/PeopleSpaceUtilsTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/people/PeopleSpaceUtilsTest.java @@ -39,6 +39,7 @@ import android.app.NotificationManager; import android.app.Person; import android.app.people.ConversationChannel; import android.app.people.IPeopleManager; +import android.app.people.PeopleSpaceTile; import android.appwidget.AppWidgetManager; import android.content.ContentResolver; import android.content.Context; @@ -55,10 +56,9 @@ import android.provider.ContactsContract; import android.provider.Settings; import android.service.notification.ConversationChannelWrapper; import android.service.notification.StatusBarNotification; +import android.test.suitebuilder.annotation.SmallTest; import android.testing.AndroidTestingRunner; -import androidx.test.filters.SmallTest; - import com.android.internal.appwidget.IAppWidgetService; import com.android.systemui.R; import com.android.systemui.SysuiTestCase; @@ -419,7 +419,7 @@ public class PeopleSpaceUtilsTest extends SysuiTestCase { // Existing tile has a birthday status. Map<Integer, PeopleSpaceTile> widgetIdToTile = Map.of(WIDGET_ID_WITH_SHORTCUT, new PeopleSpaceTile.Builder(mShortcutInfoWithoutPerson, - mContext.getSystemService(LauncherApps.class)).setStatusText( + mContext.getSystemService(LauncherApps.class)).setBirthdayText( mContext.getString(R.string.birthday_status)).build()); PeopleSpaceUtils.getBirthdays(mMockContext, mAppWidgetManager, widgetIdToTile, widgetIdsArray); @@ -454,7 +454,7 @@ public class PeopleSpaceUtilsTest extends SysuiTestCase { // Existing tile has a birthday status. Map<Integer, PeopleSpaceTile> widgetIdToTile = Map.of(WIDGET_ID_WITH_SHORTCUT, new PeopleSpaceTile.Builder(mShortcutInfo, - mContext.getSystemService(LauncherApps.class)).setStatusText( + mContext.getSystemService(LauncherApps.class)).setBirthdayText( mContext.getString(R.string.birthday_status)).build()); PeopleSpaceUtils.getBirthdays(mMockContext, mAppWidgetManager, widgetIdToTile, widgetIdsArray); @@ -474,7 +474,7 @@ public class PeopleSpaceUtilsTest extends SysuiTestCase { // Existing tile has a birthday status. Map<Integer, PeopleSpaceTile> widgetIdToTile = Map.of(WIDGET_ID_WITH_SHORTCUT, new PeopleSpaceTile.Builder(mShortcutInfo, - mContext.getSystemService(LauncherApps.class)).setStatusText( + mContext.getSystemService(LauncherApps.class)).setBirthdayText( mContext.getString(R.string.birthday_status)).build()); PeopleSpaceUtils.getBirthdays(mMockContext, mAppWidgetManager, widgetIdToTile, widgetIdsArray); diff --git a/packages/SystemUI/tests/src/com/android/systemui/people/widget/PeopleSpaceWidgetManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/people/widget/PeopleSpaceWidgetManagerTest.java index e7363f3ce4f7..8c0afb89b361 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/people/widget/PeopleSpaceWidgetManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/people/widget/PeopleSpaceWidgetManagerTest.java @@ -35,6 +35,7 @@ import android.app.INotificationManager; import android.app.Notification; import android.app.NotificationChannel; import android.app.Person; +import android.app.people.PeopleSpaceTile; import android.appwidget.AppWidgetManager; import android.content.Intent; import android.content.SharedPreferences; @@ -57,7 +58,6 @@ import androidx.test.filters.SmallTest; import com.android.internal.appwidget.IAppWidgetService; import com.android.systemui.R; import com.android.systemui.SysuiTestCase; -import com.android.systemui.people.PeopleSpaceTile; import com.android.systemui.statusbar.NotificationListener; import com.android.systemui.statusbar.NotificationListener.NotificationHandler; import com.android.systemui.statusbar.SbnBuilder; |