Merge "Update PeopleTile & ConversationChannel"
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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. */
|
||||
@@ -114,13 +117,6 @@ public class PeopleSpaceTile implements Parcelable {
|
||||
return mIsImportantConversation;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
@@ -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();
|
||||
assertTrue(tile.isHiddenConversation());
|
||||
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();
|
||||
|
||||
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"));
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user