Merge "Add PeopleSpaceTile object for UI functionality"
This commit is contained in:
committed by
Android (Google) Code Review
commit
4e3d12dd50
273
core/java/android/app/people/PeopleSpaceTile.java
Normal file
273
core/java/android/app/people/PeopleSpaceTile.java
Normal file
@@ -0,0 +1,273 @@
|
||||
/*
|
||||
* Copyright (C) 2020 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.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.app.people;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.ShortcutInfo;
|
||||
import android.graphics.drawable.Icon;
|
||||
import android.net.Uri;
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
import android.service.notification.StatusBarNotification;
|
||||
|
||||
/**
|
||||
* 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
|
||||
* interaction time.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public class PeopleSpaceTile implements Parcelable {
|
||||
|
||||
private String mId;
|
||||
private CharSequence mUserName;
|
||||
private Icon mUserIcon;
|
||||
private int mUid;
|
||||
private Uri mContactUri;
|
||||
private String mPackageName;
|
||||
private long mLastInteractionTimestamp;
|
||||
private boolean mIsImportantConversation;
|
||||
private boolean mIsHiddenConversation;
|
||||
private StatusBarNotification mNotification;
|
||||
private Intent mIntent;
|
||||
// TODO: add a List of the Status objects once created
|
||||
|
||||
private PeopleSpaceTile(Builder b) {
|
||||
mId = b.mId;
|
||||
mUserName = b.mUserName;
|
||||
mUserIcon = b.mUserIcon;
|
||||
mContactUri = b.mContactUri;
|
||||
mUid = b.mUid;
|
||||
mPackageName = b.mPackageName;
|
||||
mLastInteractionTimestamp = b.mLastInteractionTimestamp;
|
||||
mIsImportantConversation = b.mIsImportantConversation;
|
||||
mIsHiddenConversation = b.mIsHiddenConversation;
|
||||
mNotification = b.mNotification;
|
||||
mIntent = b.mIntent;
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
return mId;
|
||||
}
|
||||
|
||||
public CharSequence getUserName() {
|
||||
return mUserName;
|
||||
}
|
||||
|
||||
public Icon getUserIcon() {
|
||||
return mUserIcon;
|
||||
}
|
||||
|
||||
/** Returns the Uri associated with the user in Android Contacts database. */
|
||||
public Uri getContactUri() {
|
||||
return mContactUri;
|
||||
}
|
||||
|
||||
public int getUid() {
|
||||
return mUid;
|
||||
}
|
||||
|
||||
public String getPackageName() {
|
||||
return mPackageName;
|
||||
}
|
||||
|
||||
/** Returns the timestamp of the last interaction. */
|
||||
public long getLastInteractionTimestamp() {
|
||||
return mLastInteractionTimestamp;
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether the conversation is important.
|
||||
*/
|
||||
public boolean isImportantConversation() {
|
||||
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
|
||||
* {@link StatusBarNotification} associated.
|
||||
*/
|
||||
public StatusBarNotification getNotification() {
|
||||
return mNotification;
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides an intent to launch. If present, we should manually launch the intent on tile
|
||||
* click, rather than calling {@link android.content.pm.LauncherApps} to launch the shortcut ID.
|
||||
*
|
||||
* <p>This field should only be used if manually constructing a tile without an associated
|
||||
* shortcut to launch (i.e. birthday tiles).
|
||||
*/
|
||||
public Intent getIntent() {
|
||||
return mIntent;
|
||||
}
|
||||
|
||||
/** Builder to create a {@link PeopleSpaceTile}. */
|
||||
public static class Builder {
|
||||
private String mId;
|
||||
private CharSequence mUserName;
|
||||
private Icon mUserIcon;
|
||||
private Uri mContactUri;
|
||||
private int mUid;
|
||||
private String mPackageName;
|
||||
private long mLastInteractionTimestamp;
|
||||
private boolean mIsImportantConversation;
|
||||
private boolean mIsHiddenConversation;
|
||||
private StatusBarNotification mNotification;
|
||||
private Intent mIntent;
|
||||
|
||||
/** Builder for use only if a shortcut is not available for the tile. */
|
||||
public Builder(String id, String userName, Icon userIcon, Intent intent) {
|
||||
mId = id;
|
||||
mUserName = userName;
|
||||
mUserIcon = userIcon;
|
||||
mIntent = intent;
|
||||
mPackageName = intent == null ? null : intent.getPackage();
|
||||
}
|
||||
|
||||
public Builder(ShortcutInfo info) {
|
||||
mId = info.getId();
|
||||
mUserName = info.getLabel();
|
||||
mUserIcon = info.getIcon();
|
||||
mUid = info.getUserId();
|
||||
mPackageName = info.getPackage();
|
||||
}
|
||||
|
||||
/** Sets the ID for the tile. */
|
||||
public Builder setId(String id) {
|
||||
mId = id;
|
||||
return this;
|
||||
}
|
||||
|
||||
/** Sets the user name. */
|
||||
public Builder setUserName(CharSequence userName) {
|
||||
mUserName = userName;
|
||||
return this;
|
||||
}
|
||||
|
||||
/** Sets the icon shown for the user. */
|
||||
public Builder setUserIcon(Icon userIcon) {
|
||||
mUserIcon = userIcon;
|
||||
return this;
|
||||
}
|
||||
|
||||
/** Sets the Uri associated with the user in Android Contacts database. */
|
||||
public Builder setContactUri(Uri uri) {
|
||||
mContactUri = uri;
|
||||
return this;
|
||||
}
|
||||
|
||||
/** Sets the associated uid. */
|
||||
public Builder setUid(int uid) {
|
||||
mUid = uid;
|
||||
return this;
|
||||
}
|
||||
|
||||
/** Sets the package shown that provided the information. */
|
||||
public Builder setPackageName(String packageName) {
|
||||
mPackageName = packageName;
|
||||
return this;
|
||||
}
|
||||
|
||||
/** Sets the last interaction timestamp. */
|
||||
public Builder setLastInteractionTimestamp(long lastInteractionTimestamp) {
|
||||
mLastInteractionTimestamp = lastInteractionTimestamp;
|
||||
return this;
|
||||
}
|
||||
|
||||
/** Sets whether the conversation is important. */
|
||||
public Builder setIsImportantConversation(boolean isImportantConversation) {
|
||||
mIsImportantConversation = isImportantConversation;
|
||||
return this;
|
||||
}
|
||||
|
||||
/** Sets whether the conversation is hidden. */
|
||||
public Builder setIsHiddenConversation(boolean isHiddenConversation) {
|
||||
mIsHiddenConversation = isHiddenConversation;
|
||||
return this;
|
||||
}
|
||||
|
||||
/** Sets the associated notification. */
|
||||
public Builder setNotification(StatusBarNotification notification) {
|
||||
mNotification = notification;
|
||||
return this;
|
||||
}
|
||||
|
||||
/** Sets an intent to launch on click. */
|
||||
public Builder setIntent(Intent intent) {
|
||||
mIntent = intent;
|
||||
return this;
|
||||
}
|
||||
|
||||
/** Builds a {@link PeopleSpaceTile}. */
|
||||
@NonNull
|
||||
public PeopleSpaceTile build() {
|
||||
return new PeopleSpaceTile(this);
|
||||
}
|
||||
}
|
||||
|
||||
private PeopleSpaceTile(Parcel in) {
|
||||
mId = in.readString();
|
||||
mUserName = in.readCharSequence();
|
||||
mUserIcon = in.readParcelable(Icon.class.getClassLoader());
|
||||
mUid = in.readInt();
|
||||
mPackageName = in.readString();
|
||||
mLastInteractionTimestamp = in.readLong();
|
||||
mIsImportantConversation = in.readBoolean();
|
||||
mIsHiddenConversation = in.readBoolean();
|
||||
mNotification = in.readParcelable(StatusBarNotification.class.getClassLoader());
|
||||
mIntent = in.readParcelable(Intent.class.getClassLoader());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToParcel(Parcel dest, int flags) {
|
||||
dest.writeString(mId);
|
||||
dest.writeCharSequence(mUserName);
|
||||
dest.writeParcelable(mUserIcon, flags);
|
||||
dest.writeInt(mUid);
|
||||
dest.writeString(mPackageName);
|
||||
dest.writeLong(mLastInteractionTimestamp);
|
||||
dest.writeParcelable(mNotification, flags);
|
||||
dest.writeBoolean(mIsImportantConversation);
|
||||
dest.writeBoolean(mIsHiddenConversation);
|
||||
dest.writeParcelable(mIntent, flags);
|
||||
}
|
||||
|
||||
public static final @android.annotation.NonNull
|
||||
Creator<PeopleSpaceTile> CREATOR = new Creator<PeopleSpaceTile>() {
|
||||
public PeopleSpaceTile createFromParcel(Parcel source) {
|
||||
return new PeopleSpaceTile(source);
|
||||
}
|
||||
|
||||
public PeopleSpaceTile[] newArray(int size) {
|
||||
return new PeopleSpaceTile[size];
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,191 @@
|
||||
/*
|
||||
* Copyright (C) 2020 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.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.app.people;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static junit.framework.Assert.assertFalse;
|
||||
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import android.app.Notification;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.ShortcutInfo;
|
||||
import android.graphics.drawable.Icon;
|
||||
import android.net.Uri;
|
||||
import android.os.UserHandle;
|
||||
import android.service.notification.StatusBarNotification;
|
||||
|
||||
import androidx.test.InstrumentationRegistry;
|
||||
import androidx.test.filters.SmallTest;
|
||||
import androidx.test.runner.AndroidJUnit4;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
@SmallTest
|
||||
public class PeopleSpaceTileTest {
|
||||
|
||||
private Context mContext;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
mContext = InstrumentationRegistry.getContext();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testId() {
|
||||
PeopleSpaceTile tile = new PeopleSpaceTile.Builder(
|
||||
new ShortcutInfo.Builder(mContext, "123").build()).build();
|
||||
assertThat(tile.getId()).isEqualTo("123");
|
||||
|
||||
tile = new PeopleSpaceTile.Builder(new ShortcutInfo.Builder(mContext, "123").build()).setId(
|
||||
"5").build();
|
||||
assertThat(tile.getId()).isEqualTo("5");
|
||||
|
||||
tile = new PeopleSpaceTile.Builder("12", null, null, null).build();
|
||||
assertThat(tile.getId()).isEqualTo("12");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUserName() {
|
||||
PeopleSpaceTile tile = new PeopleSpaceTile.Builder(
|
||||
new ShortcutInfo.Builder(mContext, "123").build()).build();
|
||||
assertThat(tile.getUserName()).isNull();
|
||||
|
||||
tile = new PeopleSpaceTile.Builder(
|
||||
new ShortcutInfo.Builder(mContext, "123").build()).setUserName("Name 1").build();
|
||||
assertThat(tile.getUserName()).isEqualTo("Name 1");
|
||||
|
||||
tile = new PeopleSpaceTile.Builder(null, "Name 2", null, null).build();
|
||||
assertThat(tile.getUserName()).isEqualTo("Name 2");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUserIcon() {
|
||||
PeopleSpaceTile tile = new PeopleSpaceTile.Builder(
|
||||
new ShortcutInfo.Builder(mContext, "123").build()).setUserIcon(
|
||||
Icon.createWithResource(mContext, 1)).build();
|
||||
assertThat(tile.getUserIcon().toString()).isEqualTo(
|
||||
Icon.createWithResource(mContext, 1).toString());
|
||||
|
||||
tile = new PeopleSpaceTile.Builder("12", null, Icon.createWithResource(mContext, 2),
|
||||
null).build();
|
||||
assertThat(tile.getUserIcon().toString()).isEqualTo(
|
||||
Icon.createWithResource(mContext, 2).toString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testContactUri() {
|
||||
PeopleSpaceTile tile = new PeopleSpaceTile.Builder(
|
||||
new ShortcutInfo.Builder(mContext, "123").build()).setContactUri(
|
||||
Uri.parse("test")).build();
|
||||
|
||||
assertThat(tile.getContactUri()).isEqualTo(Uri.parse("test"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUid() {
|
||||
PeopleSpaceTile tile = new PeopleSpaceTile.Builder(
|
||||
new ShortcutInfo.Builder(mContext, "123").build()).setUid(42).build();
|
||||
|
||||
assertThat(tile.getUid()).isEqualTo(42);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPackageName() {
|
||||
PeopleSpaceTile tile = new PeopleSpaceTile.Builder(
|
||||
new ShortcutInfo.Builder(mContext, "123").build()).build();
|
||||
// Automatically added by creating a ShortcutInfo.
|
||||
assertThat(tile.getPackageName()).isEqualTo("com.android.frameworks.coretests");
|
||||
|
||||
tile = new PeopleSpaceTile.Builder(
|
||||
new ShortcutInfo.Builder(mContext, "123").build()).setPackageName(
|
||||
"package.name").build();
|
||||
assertThat(tile.getPackageName()).isEqualTo("package.name");
|
||||
|
||||
tile = new PeopleSpaceTile.Builder("12", null, null,
|
||||
new Intent().setPackage("intent.package")).build();
|
||||
assertThat(tile.getPackageName()).isEqualTo("intent.package");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLastInteractionTimestamp() {
|
||||
PeopleSpaceTile tile = new PeopleSpaceTile.Builder(
|
||||
new ShortcutInfo.Builder(mContext, "123").build()).build();
|
||||
assertThat(tile.getLastInteractionTimestamp()).isEqualTo(0L);
|
||||
|
||||
tile = new PeopleSpaceTile.Builder(
|
||||
new ShortcutInfo.Builder(mContext, "123").build()).setLastInteractionTimestamp(
|
||||
7L).build();
|
||||
assertThat(tile.getLastInteractionTimestamp()).isEqualTo(7L);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testImportantConversation() {
|
||||
PeopleSpaceTile tile = new PeopleSpaceTile.Builder(
|
||||
new ShortcutInfo.Builder(mContext, "123").build()).build();
|
||||
assertFalse(tile.isImportantConversation());
|
||||
|
||||
tile = new PeopleSpaceTile.Builder(
|
||||
new ShortcutInfo.Builder(mContext, "123").build()).setIsImportantConversation(
|
||||
true).build();
|
||||
assertTrue(tile.isImportantConversation());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHiddenConversation() {
|
||||
PeopleSpaceTile tile = new PeopleSpaceTile.Builder(
|
||||
new ShortcutInfo.Builder(mContext, "123").build()).build();
|
||||
assertFalse(tile.isHiddenConversation());
|
||||
|
||||
tile = new PeopleSpaceTile.Builder(
|
||||
new ShortcutInfo.Builder(mContext, "123").build()).setIsHiddenConversation(
|
||||
true).build();
|
||||
assertTrue(tile.isHiddenConversation());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNotification() {
|
||||
Notification notification = new Notification.Builder(mContext, "test").build();
|
||||
StatusBarNotification sbn = new StatusBarNotification("pkg" /* pkg */, "pkg" /* opPkg */,
|
||||
1 /* id */, "" /* tag */, 0 /* uid */, 0 /* initialPid */, 0 /* score */,
|
||||
notification, UserHandle.CURRENT, 0 /* postTime */);
|
||||
PeopleSpaceTile tile = new PeopleSpaceTile.Builder(
|
||||
new ShortcutInfo.Builder(mContext, "123").build()).setNotification(sbn).build();
|
||||
|
||||
assertThat(tile.getNotification()).isEqualTo(sbn);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIntent() {
|
||||
PeopleSpaceTile tile = new PeopleSpaceTile.Builder(
|
||||
new ShortcutInfo.Builder(mContext, "123").build()).build();
|
||||
assertThat(tile.getIntent()).isNull();
|
||||
|
||||
tile = new PeopleSpaceTile.Builder(
|
||||
new ShortcutInfo.Builder(mContext, "123").build()).setIntent(new Intent()).build();
|
||||
assertThat(tile.getIntent().toString()).isEqualTo(new Intent().toString());
|
||||
|
||||
tile = new PeopleSpaceTile.Builder("12", null, null, new Intent()).build();
|
||||
assertThat(tile.getIntent().toString()).isEqualTo(new Intent().toString());
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user