diff --git a/core/java/android/app/people/PeopleSpaceTile.java b/core/java/android/app/people/PeopleSpaceTile.java index f5674e5cd0ceb..e870597bf6d1e 100644 --- a/core/java/android/app/people/PeopleSpaceTile.java +++ b/core/java/android/app/people/PeopleSpaceTile.java @@ -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); + } } diff --git a/core/tests/coretests/src/android/app/people/PeopleSpaceTileTest.java b/core/tests/coretests/src/android/app/people/PeopleSpaceTileTest.java index 27584a597cc8f..7552ec404c137 100644 --- a/core/tests/coretests/src/android/app/people/PeopleSpaceTileTest.java +++ b/core/tests/coretests/src/android/app/people/PeopleSpaceTileTest.java @@ -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(); diff --git a/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceActivity.java b/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceActivity.java index 3295595955eb1..5cd3b33a1b5fd 100644 --- a/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceActivity.java +++ b/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceActivity.java @@ -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> shortcutInfos = PeopleSpaceUtils.getShortcutInfos( - mContext, mNotificationManager, mPeopleManager); - for (Map.Entry entry : shortcutInfos) { - ShortcutInfo shortcutInfo = entry.getValue(); + List> tiles = PeopleSpaceUtils.getTiles( + mContext, mNotificationManager, mPeopleManager, mLauncherApps); + for (Map.Entry 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); } diff --git a/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceTileView.java b/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceTileView.java index d5ef190d5ff1a..4aea5b8d64468 100644 --- a/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceTileView.java +++ b/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceTileView.java @@ -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()))); } } diff --git a/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceUtils.java b/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceUtils.java index 35e445b968bab..fe262b446a3c9 100644 --- a/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceUtils.java +++ b/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceUtils.java @@ -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> getShortcutInfos(Context context, - INotificationManager notificationManager, IPeopleManager peopleManager) + public static List> 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 conversations = notificationManager.getConversations( true).getList(); - List> shortcutInfos = getSortedShortcutInfos(peopleManager, - conversations.stream().map(c -> c.getShortcutInfo())); + List> tiles = getSortedTiles(peopleManager, + conversations.stream().map(c -> + new PeopleSpaceTile.Builder(c.getShortcutInfo(), launcherApps).build())); if (showAllConversations) { List recentConversations = peopleManager.getRecentConversations().getList(); - List> recentShortcutInfos = getSortedShortcutInfos( - peopleManager, recentConversations.stream().map(c -> c.getShortcutInfo())); - shortcutInfos.addAll(recentShortcutInfos); + List> 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> getSortedShortcutInfos( - IPeopleManager peopleManager, Stream stream) { + private static List> getSortedTiles( + IPeopleManager peopleManager, Stream 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 { * *

A valid {@code conversation} must: *

    - *
  • Have a non-null {@link ShortcutInfo} - *
  • Have an associated label in the {@link ShortcutInfo} + *
  • Have a non-null {@link PeopleSpaceTile} + *
  • Have an associated label in the {@link PeopleSpaceTile} *
* */ - 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; } } diff --git a/packages/SystemUI/src/com/android/systemui/people/widget/LaunchConversationActivity.java b/packages/SystemUI/src/com/android/systemui/people/widget/LaunchConversationActivity.java index 44f173bc5175c..0b0308f7dcdad 100644 --- a/packages/SystemUI/src/com/android/systemui/people/widget/LaunchConversationActivity.java +++ b/packages/SystemUI/src/com/android/systemui/people/widget/LaunchConversationActivity.java @@ -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); } diff --git a/packages/SystemUI/src/com/android/systemui/people/widget/PeopleSpaceWidgetProvider.java b/packages/SystemUI/src/com/android/systemui/people/widget/PeopleSpaceWidgetProvider.java index aa98b61ff947d..9f84514f8c47d 100644 --- a/packages/SystemUI/src/com/android/systemui/people/widget/PeopleSpaceWidgetProvider.java +++ b/packages/SystemUI/src/com/android/systemui/people/widget/PeopleSpaceWidgetProvider.java @@ -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) { 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 a4527c3ef86f3..1e6c213db852a 100644 --- a/packages/SystemUI/src/com/android/systemui/people/widget/PeopleSpaceWidgetRemoteViewsFactory.java +++ b/packages/SystemUI/src/com/android/systemui/people/widget/PeopleSpaceWidgetRemoteViewsFactory.java @@ -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> mShortcutInfos = new ArrayList<>(); + private List> 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 entry = mShortcutInfos.get(i); - ShortcutInfo shortcutInfo = entry.getValue(); + Map.Entry 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);