Substitute ShortcutInfo for PeopleSpaceTile.
Change-Id: I35570d8ef47822598450e958c1bcbd0d298a1371 Test: Build and run.
This commit is contained in:
@@ -18,7 +18,12 @@ package android.app.people;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.LauncherApps;
|
||||
import android.content.pm.ShortcutInfo;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.drawable.BitmapDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.graphics.drawable.Icon;
|
||||
import android.net.Uri;
|
||||
import android.os.Parcel;
|
||||
@@ -147,10 +152,10 @@ public class PeopleSpaceTile implements Parcelable {
|
||||
mPackageName = intent == null ? null : intent.getPackage();
|
||||
}
|
||||
|
||||
public Builder(ShortcutInfo info) {
|
||||
public Builder(ShortcutInfo info, LauncherApps launcherApps) {
|
||||
mId = info.getId();
|
||||
mUserName = info.getLabel();
|
||||
mUserIcon = info.getIcon();
|
||||
mUserIcon = convertDrawableToIcon(launcherApps.getShortcutIconDrawable(info, 0));
|
||||
mUid = info.getUserId();
|
||||
mPackageName = info.getPackage();
|
||||
}
|
||||
@@ -270,4 +275,32 @@ public class PeopleSpaceTile implements Parcelable {
|
||||
return new PeopleSpaceTile[size];
|
||||
}
|
||||
};
|
||||
|
||||
/** Converts {@code drawable} to a {@link Icon}. */
|
||||
public static Icon convertDrawableToIcon(Drawable drawable) {
|
||||
if (drawable == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (drawable instanceof BitmapDrawable) {
|
||||
BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
|
||||
if (bitmapDrawable.getBitmap() != null) {
|
||||
return Icon.createWithBitmap(bitmapDrawable.getBitmap());
|
||||
}
|
||||
}
|
||||
|
||||
Bitmap bitmap;
|
||||
if (drawable.getIntrinsicWidth() <= 0 || drawable.getIntrinsicHeight() <= 0) {
|
||||
bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888);
|
||||
// Single color bitmap will be created of 1x1 pixel
|
||||
} else {
|
||||
bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(),
|
||||
drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
|
||||
}
|
||||
|
||||
Canvas canvas = new Canvas(bitmap);
|
||||
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
|
||||
drawable.draw(canvas);
|
||||
return Icon.createWithBitmap(bitmap);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,11 +21,18 @@ import static com.google.common.truth.Truth.assertThat;
|
||||
import static junit.framework.Assert.assertFalse;
|
||||
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.app.Notification;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.LauncherApps;
|
||||
import android.content.pm.ShortcutInfo;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.graphics.drawable.Icon;
|
||||
import android.net.Uri;
|
||||
import android.os.UserHandle;
|
||||
@@ -38,26 +45,37 @@ import androidx.test.runner.AndroidJUnit4;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
@SmallTest
|
||||
public class PeopleSpaceTileTest {
|
||||
|
||||
private Context mContext;
|
||||
private final Drawable mDrawable = new ColorDrawable(Color.BLUE);
|
||||
private final Icon mIcon = PeopleSpaceTile.convertDrawableToIcon(mDrawable);
|
||||
|
||||
@Mock
|
||||
private LauncherApps mLauncherApps;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
mContext = InstrumentationRegistry.getContext();
|
||||
MockitoAnnotations.initMocks(this);
|
||||
when(mLauncherApps.getShortcutIconDrawable(any(), eq(0))).thenReturn(mDrawable);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testId() {
|
||||
PeopleSpaceTile tile = new PeopleSpaceTile.Builder(
|
||||
new ShortcutInfo.Builder(mContext, "123").build()).build();
|
||||
new ShortcutInfo.Builder(mContext, "123").build(), mLauncherApps).build();
|
||||
assertThat(tile.getId()).isEqualTo("123");
|
||||
|
||||
tile = new PeopleSpaceTile.Builder(new ShortcutInfo.Builder(mContext, "123").build()).setId(
|
||||
"5").build();
|
||||
tile = new PeopleSpaceTile
|
||||
.Builder(new ShortcutInfo.Builder(mContext, "123").build(), mLauncherApps)
|
||||
.setId("5")
|
||||
.build();
|
||||
assertThat(tile.getId()).isEqualTo("5");
|
||||
|
||||
tile = new PeopleSpaceTile.Builder("12", null, null, null).build();
|
||||
@@ -67,11 +85,13 @@ public class PeopleSpaceTileTest {
|
||||
@Test
|
||||
public void testUserName() {
|
||||
PeopleSpaceTile tile = new PeopleSpaceTile.Builder(
|
||||
new ShortcutInfo.Builder(mContext, "123").build()).build();
|
||||
new ShortcutInfo.Builder(mContext, "123").build(), mLauncherApps).build();
|
||||
assertThat(tile.getUserName()).isNull();
|
||||
|
||||
tile = new PeopleSpaceTile.Builder(
|
||||
new ShortcutInfo.Builder(mContext, "123").build()).setUserName("Name 1").build();
|
||||
tile = new PeopleSpaceTile
|
||||
.Builder(new ShortcutInfo.Builder(mContext, "123").build(), mLauncherApps)
|
||||
.setUserName("Name 1")
|
||||
.build();
|
||||
assertThat(tile.getUserName()).isEqualTo("Name 1");
|
||||
|
||||
tile = new PeopleSpaceTile.Builder(null, "Name 2", null, null).build();
|
||||
@@ -81,21 +101,19 @@ public class PeopleSpaceTileTest {
|
||||
@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());
|
||||
new ShortcutInfo.Builder(mContext, "123").build(), mLauncherApps).setUserIcon(
|
||||
mIcon).build();
|
||||
assertThat(tile.getUserIcon().toString()).isEqualTo(mIcon.toString());
|
||||
|
||||
tile = new PeopleSpaceTile.Builder("12", null, Icon.createWithResource(mContext, 2),
|
||||
tile = new PeopleSpaceTile.Builder("12", null, mIcon,
|
||||
null).build();
|
||||
assertThat(tile.getUserIcon().toString()).isEqualTo(
|
||||
Icon.createWithResource(mContext, 2).toString());
|
||||
assertThat(tile.getUserIcon().toString()).isEqualTo(mIcon.toString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testContactUri() {
|
||||
PeopleSpaceTile tile = new PeopleSpaceTile.Builder(
|
||||
new ShortcutInfo.Builder(mContext, "123").build()).setContactUri(
|
||||
new ShortcutInfo.Builder(mContext, "123").build(), mLauncherApps).setContactUri(
|
||||
Uri.parse("test")).build();
|
||||
|
||||
assertThat(tile.getContactUri()).isEqualTo(Uri.parse("test"));
|
||||
@@ -103,8 +121,10 @@ public class PeopleSpaceTileTest {
|
||||
|
||||
@Test
|
||||
public void testUid() {
|
||||
PeopleSpaceTile tile = new PeopleSpaceTile.Builder(
|
||||
new ShortcutInfo.Builder(mContext, "123").build()).setUid(42).build();
|
||||
PeopleSpaceTile tile = new PeopleSpaceTile
|
||||
.Builder(new ShortcutInfo.Builder(mContext, "123").build(), mLauncherApps)
|
||||
.setUid(42)
|
||||
.build();
|
||||
|
||||
assertThat(tile.getUid()).isEqualTo(42);
|
||||
}
|
||||
@@ -112,12 +132,12 @@ public class PeopleSpaceTileTest {
|
||||
@Test
|
||||
public void testPackageName() {
|
||||
PeopleSpaceTile tile = new PeopleSpaceTile.Builder(
|
||||
new ShortcutInfo.Builder(mContext, "123").build()).build();
|
||||
new ShortcutInfo.Builder(mContext, "123").build(), mLauncherApps).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(
|
||||
new ShortcutInfo.Builder(mContext, "123").build(), mLauncherApps).setPackageName(
|
||||
"package.name").build();
|
||||
assertThat(tile.getPackageName()).isEqualTo("package.name");
|
||||
|
||||
@@ -129,36 +149,39 @@ public class PeopleSpaceTileTest {
|
||||
@Test
|
||||
public void testLastInteractionTimestamp() {
|
||||
PeopleSpaceTile tile = new PeopleSpaceTile.Builder(
|
||||
new ShortcutInfo.Builder(mContext, "123").build()).build();
|
||||
new ShortcutInfo.Builder(mContext, "123").build(), mLauncherApps).build();
|
||||
assertThat(tile.getLastInteractionTimestamp()).isEqualTo(0L);
|
||||
|
||||
tile = new PeopleSpaceTile.Builder(
|
||||
new ShortcutInfo.Builder(mContext, "123").build()).setLastInteractionTimestamp(
|
||||
7L).build();
|
||||
tile = new PeopleSpaceTile
|
||||
.Builder(new ShortcutInfo.Builder(mContext, "123").build(), mLauncherApps)
|
||||
.setLastInteractionTimestamp(7L)
|
||||
.build();
|
||||
assertThat(tile.getLastInteractionTimestamp()).isEqualTo(7L);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testImportantConversation() {
|
||||
PeopleSpaceTile tile = new PeopleSpaceTile.Builder(
|
||||
new ShortcutInfo.Builder(mContext, "123").build()).build();
|
||||
new ShortcutInfo.Builder(mContext, "123").build(), mLauncherApps).build();
|
||||
assertFalse(tile.isImportantConversation());
|
||||
|
||||
tile = new PeopleSpaceTile.Builder(
|
||||
new ShortcutInfo.Builder(mContext, "123").build()).setIsImportantConversation(
|
||||
true).build();
|
||||
tile = new PeopleSpaceTile
|
||||
.Builder(new ShortcutInfo.Builder(mContext, "123").build(), mLauncherApps)
|
||||
.setIsImportantConversation(true)
|
||||
.build();
|
||||
assertTrue(tile.isImportantConversation());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHiddenConversation() {
|
||||
PeopleSpaceTile tile = new PeopleSpaceTile.Builder(
|
||||
new ShortcutInfo.Builder(mContext, "123").build()).build();
|
||||
new ShortcutInfo.Builder(mContext, "123").build(), mLauncherApps).build();
|
||||
assertFalse(tile.isHiddenConversation());
|
||||
|
||||
tile = new PeopleSpaceTile.Builder(
|
||||
new ShortcutInfo.Builder(mContext, "123").build()).setIsHiddenConversation(
|
||||
true).build();
|
||||
tile = new PeopleSpaceTile
|
||||
.Builder(new ShortcutInfo.Builder(mContext, "123").build(), mLauncherApps)
|
||||
.setIsHiddenConversation(true)
|
||||
.build();
|
||||
assertTrue(tile.isHiddenConversation());
|
||||
}
|
||||
|
||||
@@ -168,8 +191,10 @@ public class PeopleSpaceTileTest {
|
||||
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();
|
||||
PeopleSpaceTile tile = new PeopleSpaceTile
|
||||
.Builder(new ShortcutInfo.Builder(mContext, "123").build(), mLauncherApps)
|
||||
.setNotification(sbn)
|
||||
.build();
|
||||
|
||||
assertThat(tile.getNotification()).isEqualTo(sbn);
|
||||
}
|
||||
@@ -177,11 +202,13 @@ public class PeopleSpaceTileTest {
|
||||
@Test
|
||||
public void testIntent() {
|
||||
PeopleSpaceTile tile = new PeopleSpaceTile.Builder(
|
||||
new ShortcutInfo.Builder(mContext, "123").build()).build();
|
||||
new ShortcutInfo.Builder(mContext, "123").build(), mLauncherApps).build();
|
||||
assertThat(tile.getIntent()).isNull();
|
||||
|
||||
tile = new PeopleSpaceTile.Builder(
|
||||
new ShortcutInfo.Builder(mContext, "123").build()).setIntent(new Intent()).build();
|
||||
tile = new PeopleSpaceTile
|
||||
.Builder(new ShortcutInfo.Builder(mContext, "123").build(), mLauncherApps)
|
||||
.setIntent(new Intent())
|
||||
.build();
|
||||
assertThat(tile.getIntent().toString()).isEqualTo(new Intent().toString());
|
||||
|
||||
tile = new PeopleSpaceTile.Builder("12", null, null, new Intent()).build();
|
||||
|
||||
@@ -19,10 +19,10 @@ package com.android.systemui.people;
|
||||
import android.app.Activity;
|
||||
import android.app.INotificationManager;
|
||||
import android.app.people.IPeopleManager;
|
||||
import android.app.people.PeopleSpaceTile;
|
||||
import android.content.Context;
|
||||
import android.content.pm.LauncherApps;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.ShortcutInfo;
|
||||
import android.os.Bundle;
|
||||
import android.os.ServiceManager;
|
||||
import android.util.Log;
|
||||
@@ -68,13 +68,13 @@ public class PeopleSpaceActivity extends Activity {
|
||||
*/
|
||||
private void setTileViewsWithPriorityConversations() {
|
||||
try {
|
||||
List<Map.Entry<Long, ShortcutInfo>> shortcutInfos = PeopleSpaceUtils.getShortcutInfos(
|
||||
mContext, mNotificationManager, mPeopleManager);
|
||||
for (Map.Entry<Long, ShortcutInfo> entry : shortcutInfos) {
|
||||
ShortcutInfo shortcutInfo = entry.getValue();
|
||||
List<Map.Entry<Long, PeopleSpaceTile>> tiles = PeopleSpaceUtils.getTiles(
|
||||
mContext, mNotificationManager, mPeopleManager, mLauncherApps);
|
||||
for (Map.Entry<Long, PeopleSpaceTile> entry : tiles) {
|
||||
PeopleSpaceTile tile = entry.getValue();
|
||||
PeopleSpaceTileView tileView = new PeopleSpaceTileView(mContext, mPeopleSpaceLayout,
|
||||
shortcutInfo.getId());
|
||||
setTileView(tileView, shortcutInfo, entry.getKey());
|
||||
tile.getId());
|
||||
setTileView(tileView, tile, entry.getKey());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "Couldn't retrieve conversations", e);
|
||||
@@ -82,18 +82,18 @@ public class PeopleSpaceActivity extends Activity {
|
||||
}
|
||||
|
||||
/** Sets {@code tileView} with the data in {@code conversation}. */
|
||||
private void setTileView(PeopleSpaceTileView tileView, ShortcutInfo shortcutInfo,
|
||||
private void setTileView(PeopleSpaceTileView tileView, PeopleSpaceTile tile,
|
||||
long lastInteraction) {
|
||||
try {
|
||||
String pkg = shortcutInfo.getPackage();
|
||||
String pkg = tile.getPackageName();
|
||||
String status =
|
||||
PeopleSpaceUtils.getLastInteractionString(mContext, lastInteraction);
|
||||
tileView.setStatus(status);
|
||||
|
||||
tileView.setName(shortcutInfo.getLabel().toString());
|
||||
tileView.setName(tile.getUserName().toString());
|
||||
tileView.setPackageIcon(mPackageManager.getApplicationIcon(pkg));
|
||||
tileView.setPersonIcon(mLauncherApps.getShortcutIconDrawable(shortcutInfo, 0));
|
||||
tileView.setOnClickListener(mLauncherApps, shortcutInfo);
|
||||
tileView.setPersonIcon(tile.getUserIcon());
|
||||
tileView.setOnClickListener(mLauncherApps, tile);
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "Couldn't retrieve shortcut information", e);
|
||||
}
|
||||
|
||||
@@ -16,10 +16,12 @@
|
||||
|
||||
package com.android.systemui.people;
|
||||
|
||||
import android.app.people.PeopleSpaceTile;
|
||||
import android.content.Context;
|
||||
import android.content.pm.LauncherApps;
|
||||
import android.content.pm.ShortcutInfo;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.graphics.drawable.Icon;
|
||||
import android.os.UserHandle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
@@ -71,13 +73,15 @@ public class PeopleSpaceTileView extends LinearLayout {
|
||||
mPackageIconView.setImageDrawable(drawable);
|
||||
}
|
||||
|
||||
/** Sets the person drawable on the tile. */
|
||||
public void setPersonIcon(Drawable drawable) {
|
||||
mPersonIconView.setImageDrawable(drawable);
|
||||
/** Sets the person bitmap on the tile. */
|
||||
public void setPersonIcon(Icon icon) {
|
||||
mPersonIconView.setImageIcon(icon);
|
||||
}
|
||||
|
||||
/** Sets the click listener of the tile. */
|
||||
public void setOnClickListener(LauncherApps launcherApps, ShortcutInfo shortcutInfo) {
|
||||
mTileView.setOnClickListener(v -> launcherApps.startShortcut(shortcutInfo, null, null));
|
||||
public void setOnClickListener(LauncherApps launcherApps, PeopleSpaceTile tile) {
|
||||
mTileView.setOnClickListener(v ->
|
||||
launcherApps.startShortcut(tile.getPackageName(), tile.getId(), null, null,
|
||||
UserHandle.getUserHandleForUid(tile.getUid())));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,8 +19,9 @@ package com.android.systemui.people;
|
||||
import android.app.INotificationManager;
|
||||
import android.app.people.ConversationChannel;
|
||||
import android.app.people.IPeopleManager;
|
||||
import android.app.people.PeopleSpaceTile;
|
||||
import android.content.Context;
|
||||
import android.content.pm.ShortcutInfo;
|
||||
import android.content.pm.LauncherApps;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.drawable.BitmapDrawable;
|
||||
@@ -51,30 +52,34 @@ public class PeopleSpaceUtils {
|
||||
private static final int MIN_HOUR = 1;
|
||||
private static final int ONE_DAY = 1;
|
||||
|
||||
|
||||
/** Returns a list of map entries corresponding to user's conversations. */
|
||||
public static List<Map.Entry<Long, ShortcutInfo>> getShortcutInfos(Context context,
|
||||
INotificationManager notificationManager, IPeopleManager peopleManager)
|
||||
public static List<Map.Entry<Long, PeopleSpaceTile>> getTiles(
|
||||
Context context, INotificationManager notificationManager, IPeopleManager peopleManager,
|
||||
LauncherApps launcherApps)
|
||||
throws Exception {
|
||||
boolean showAllConversations = Settings.Global.getInt(context.getContentResolver(),
|
||||
Settings.Global.PEOPLE_SPACE_CONVERSATION_TYPE, 0) == 0;
|
||||
List<ConversationChannelWrapper> conversations = notificationManager.getConversations(
|
||||
true).getList();
|
||||
List<Map.Entry<Long, ShortcutInfo>> shortcutInfos = getSortedShortcutInfos(peopleManager,
|
||||
conversations.stream().map(c -> c.getShortcutInfo()));
|
||||
List<Map.Entry<Long, PeopleSpaceTile>> tiles = getSortedTiles(peopleManager,
|
||||
conversations.stream().map(c ->
|
||||
new PeopleSpaceTile.Builder(c.getShortcutInfo(), launcherApps).build()));
|
||||
if (showAllConversations) {
|
||||
List<ConversationChannel> recentConversations =
|
||||
peopleManager.getRecentConversations().getList();
|
||||
List<Map.Entry<Long, ShortcutInfo>> recentShortcutInfos = getSortedShortcutInfos(
|
||||
peopleManager, recentConversations.stream().map(c -> c.getShortcutInfo()));
|
||||
shortcutInfos.addAll(recentShortcutInfos);
|
||||
List<Map.Entry<Long, PeopleSpaceTile>> recentTiles =
|
||||
getSortedTiles(peopleManager, recentConversations.stream().map(c ->
|
||||
new PeopleSpaceTile
|
||||
.Builder(c.getShortcutInfo(), launcherApps)
|
||||
.build()));
|
||||
tiles.addAll(recentTiles);
|
||||
}
|
||||
return shortcutInfos;
|
||||
return tiles;
|
||||
}
|
||||
|
||||
/** Returns a list sorted by ascending last interaction time from {@code stream}. */
|
||||
private static List<Map.Entry<Long, ShortcutInfo>> getSortedShortcutInfos(
|
||||
IPeopleManager peopleManager, Stream<ShortcutInfo> stream) {
|
||||
private static List<Map.Entry<Long, PeopleSpaceTile>> getSortedTiles(
|
||||
IPeopleManager peopleManager, Stream<PeopleSpaceTile> stream) {
|
||||
return stream
|
||||
.filter(c -> shouldKeepConversation(c))
|
||||
.map(c -> Map.entry(getLastInteraction(peopleManager, c), c))
|
||||
@@ -82,13 +87,13 @@ public class PeopleSpaceUtils {
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/** Returns the last interaction time with the user specified by {@code shortcutInfo}. */
|
||||
/** Returns the last interaction time with the user specified by {@code PeopleSpaceTile}. */
|
||||
private static Long getLastInteraction(IPeopleManager peopleManager,
|
||||
ShortcutInfo shortcutInfo) {
|
||||
PeopleSpaceTile tile) {
|
||||
try {
|
||||
int userId = UserHandle.getUserHandleForUid(shortcutInfo.getUserId()).getIdentifier();
|
||||
String pkg = shortcutInfo.getPackage();
|
||||
return peopleManager.getLastInteraction(pkg, userId, shortcutInfo.getId());
|
||||
int userId = UserHandle.getUserHandleForUid(tile.getUid()).getIdentifier();
|
||||
String pkg = tile.getPackageName();
|
||||
return peopleManager.getLastInteraction(pkg, userId, tile.getId());
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "Couldn't retrieve last interaction time", e);
|
||||
return 0L;
|
||||
@@ -157,13 +162,13 @@ public class PeopleSpaceUtils {
|
||||
*
|
||||
* <p>A valid {@code conversation} must:
|
||||
* <ul>
|
||||
* <li>Have a non-null {@link ShortcutInfo}
|
||||
* <li>Have an associated label in the {@link ShortcutInfo}
|
||||
* <li>Have a non-null {@link PeopleSpaceTile}
|
||||
* <li>Have an associated label in the {@link PeopleSpaceTile}
|
||||
* </ul>
|
||||
* </li>
|
||||
*/
|
||||
public static boolean shouldKeepConversation(ShortcutInfo shortcutInfo) {
|
||||
return shortcutInfo != null && shortcutInfo.getLabel().length() != 0;
|
||||
public static boolean shouldKeepConversation(PeopleSpaceTile tile) {
|
||||
return tile != null && tile.getUserName().length() != 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -19,8 +19,8 @@ package com.android.systemui.people.widget;
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.LauncherApps;
|
||||
import android.content.pm.ShortcutInfo;
|
||||
import android.os.Bundle;
|
||||
import android.os.UserHandle;
|
||||
import android.util.Log;
|
||||
|
||||
import com.android.systemui.people.PeopleSpaceUtils;
|
||||
@@ -36,18 +36,19 @@ public class LaunchConversationActivity extends Activity {
|
||||
if (DEBUG) Log.d(TAG, "onCreate called");
|
||||
|
||||
Intent intent = getIntent();
|
||||
ShortcutInfo shortcutInfo = (ShortcutInfo) intent.getParcelableExtra(
|
||||
PeopleSpaceWidgetProvider.EXTRA_SHORTCUT_INFO
|
||||
);
|
||||
if (shortcutInfo != null) {
|
||||
String tileId = intent.getStringExtra(PeopleSpaceWidgetProvider.EXTRA_TILE_ID);
|
||||
String packageName = intent.getStringExtra(PeopleSpaceWidgetProvider.EXTRA_PACKAGE_NAME);
|
||||
int uid = intent.getIntExtra(PeopleSpaceWidgetProvider.EXTRA_UID, 0);
|
||||
|
||||
if (tileId != null && !tileId.isEmpty()) {
|
||||
if (DEBUG) {
|
||||
Log.d(TAG, "Launching conversation with shortcutInfo id " + shortcutInfo.getId());
|
||||
Log.d(TAG, "Launching conversation with shortcutInfo id " + tileId);
|
||||
}
|
||||
try {
|
||||
LauncherApps launcherApps =
|
||||
getApplicationContext().getSystemService(LauncherApps.class);
|
||||
launcherApps.startShortcut(
|
||||
shortcutInfo, null, null);
|
||||
packageName, tileId, null, null, UserHandle.getUserHandleForUid(uid));
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "Exception starting shortcut:" + e);
|
||||
}
|
||||
|
||||
@@ -32,7 +32,9 @@ public class PeopleSpaceWidgetProvider extends AppWidgetProvider {
|
||||
private static final String TAG = "PeopleSpaceWidgetPvd";
|
||||
private static final boolean DEBUG = PeopleSpaceUtils.DEBUG;
|
||||
|
||||
public static final String EXTRA_SHORTCUT_INFO = "extra_shortcut_info";
|
||||
public static final String EXTRA_TILE_ID = "extra_tile_id";
|
||||
public static final String EXTRA_PACKAGE_NAME = "extra_package_name";
|
||||
public static final String EXTRA_UID = "extra_uid";
|
||||
|
||||
/** Called when widget updates. */
|
||||
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
|
||||
|
||||
@@ -18,11 +18,11 @@ package com.android.systemui.people.widget;
|
||||
|
||||
import android.app.INotificationManager;
|
||||
import android.app.people.IPeopleManager;
|
||||
import android.app.people.PeopleSpaceTile;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.LauncherApps;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.ShortcutInfo;
|
||||
import android.os.ServiceManager;
|
||||
import android.util.Log;
|
||||
import android.widget.RemoteViews;
|
||||
@@ -45,7 +45,7 @@ public class PeopleSpaceWidgetRemoteViewsFactory implements RemoteViewsService.R
|
||||
private INotificationManager mNotificationManager;
|
||||
private PackageManager mPackageManager;
|
||||
private LauncherApps mLauncherApps;
|
||||
private List<Map.Entry<Long, ShortcutInfo>> mShortcutInfos = new ArrayList<>();
|
||||
private List<Map.Entry<Long, PeopleSpaceTile>> mTiles = new ArrayList<>();
|
||||
private Context mContext;
|
||||
|
||||
public PeopleSpaceWidgetRemoteViewsFactory(Context context, Intent intent) {
|
||||
@@ -70,8 +70,8 @@ public class PeopleSpaceWidgetRemoteViewsFactory implements RemoteViewsService.R
|
||||
*/
|
||||
private void setTileViewsWithPriorityConversations() {
|
||||
try {
|
||||
mShortcutInfos = PeopleSpaceUtils.getShortcutInfos(mContext, mNotificationManager,
|
||||
mPeopleManager);
|
||||
mTiles = PeopleSpaceUtils.getTiles(mContext, mNotificationManager,
|
||||
mPeopleManager, mLauncherApps);
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "Couldn't retrieve conversations", e);
|
||||
}
|
||||
@@ -85,12 +85,12 @@ public class PeopleSpaceWidgetRemoteViewsFactory implements RemoteViewsService.R
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
mShortcutInfos.clear();
|
||||
mTiles.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return mShortcutInfos.size();
|
||||
return mTiles.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -100,30 +100,28 @@ public class PeopleSpaceWidgetRemoteViewsFactory implements RemoteViewsService.R
|
||||
RemoteViews personView = new RemoteViews(mContext.getPackageName(),
|
||||
R.layout.people_space_widget_item);
|
||||
try {
|
||||
Map.Entry<Long, ShortcutInfo> entry = mShortcutInfos.get(i);
|
||||
ShortcutInfo shortcutInfo = entry.getValue();
|
||||
Map.Entry<Long, PeopleSpaceTile> entry = mTiles.get(i);
|
||||
PeopleSpaceTile tile = entry.getValue();
|
||||
long lastInteraction = entry.getKey();
|
||||
|
||||
String status = PeopleSpaceUtils.getLastInteractionString(mContext, lastInteraction);
|
||||
|
||||
personView.setTextViewText(R.id.status, status);
|
||||
personView.setTextViewText(R.id.name, shortcutInfo.getLabel().toString());
|
||||
personView.setTextViewText(R.id.name, tile.getUserName().toString());
|
||||
|
||||
personView.setImageViewBitmap(
|
||||
R.id.package_icon,
|
||||
PeopleSpaceUtils.convertDrawableToBitmap(
|
||||
mPackageManager.getApplicationIcon(shortcutInfo.getPackage())
|
||||
)
|
||||
);
|
||||
personView.setImageViewBitmap(
|
||||
R.id.person_icon,
|
||||
PeopleSpaceUtils.convertDrawableToBitmap(
|
||||
mLauncherApps.getShortcutIconDrawable(shortcutInfo, 0)
|
||||
mPackageManager.getApplicationIcon(tile.getPackageName())
|
||||
)
|
||||
);
|
||||
personView.setImageViewIcon(R.id.person_icon, tile.getUserIcon());
|
||||
|
||||
Intent fillInIntent = new Intent();
|
||||
fillInIntent.putExtra(PeopleSpaceWidgetProvider.EXTRA_SHORTCUT_INFO, shortcutInfo);
|
||||
fillInIntent.putExtra(PeopleSpaceWidgetProvider.EXTRA_TILE_ID, tile.getId());
|
||||
fillInIntent.putExtra(
|
||||
PeopleSpaceWidgetProvider.EXTRA_PACKAGE_NAME, tile.getPackageName());
|
||||
fillInIntent.putExtra(PeopleSpaceWidgetProvider.EXTRA_UID, tile.getUid());
|
||||
personView.setOnClickFillInIntent(R.id.item, fillInIntent);
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "Couldn't retrieve shortcut information", e);
|
||||
|
||||
Reference in New Issue
Block a user