Fix people widget crash

The widgets manager is not direct boot aware, but notifications are.
This code already updates all widgets when the user is unlocked, so
updates will not be lost.

Test: PeopleSpaceWidgetManagerTest
Fixes: 237848569
Change-Id: I6a9a24dc8cef770b7bfefed78e0894a24d88a89a
This commit is contained in:
Julia Reynolds
2023-06-05 16:21:03 -04:00
parent fcfe2ce3fc
commit 4417aa08ed
2 changed files with 28 additions and 5 deletions

View File

@@ -775,9 +775,13 @@ public class PeopleSpaceWidgetManager {
NotificationChannel channel,
int modificationType) {
if (channel.isConversation()) {
updateWidgets(mAppWidgetManager.getAppWidgetIds(
new ComponentName(mContext, PeopleSpaceWidgetProvider.class)
));
mBgExecutor.execute(() -> {
if (mUserManager.isUserUnlocked(user)) {
updateWidgets(mAppWidgetManager.getAppWidgetIds(
new ComponentName(mContext, PeopleSpaceWidgetProvider.class)
));
}
});
}
}
};

View File

@@ -481,6 +481,8 @@ public class PeopleSpaceWidgetManagerTest extends SysuiTestCase {
int[] widgetIdsArray = {1};
when(mAppWidgetManager.getAppWidgetIds(any())).thenReturn(widgetIdsArray);
when(mUserManager.isUserUnlocked(any())).thenReturn(true);
NotificationChannel channel =
new NotificationChannel(TEST_CHANNEL_ID, TEST_CHANNEL_NAME, IMPORTANCE_DEFAULT);
channel.setConversationId(TEST_PARENT_CHANNEL_ID, TEST_CONVERSATION_ID);
@@ -489,8 +491,25 @@ public class PeopleSpaceWidgetManagerTest extends SysuiTestCase {
UserHandle.getUserHandleForUid(0), channel, IMPORTANCE_HIGH);
mClock.advanceTime(MIN_LINGER_DURATION);
verify(mAppWidgetManager, times(1)).updateAppWidget(anyInt(),
any());
verify(mAppWidgetManager, times(1)).updateAppWidget(anyInt(), any());
}
@Test
public void testOnNotificationChannelModified_userLocked() {
int[] widgetIdsArray = {1};
when(mAppWidgetManager.getAppWidgetIds(any())).thenReturn(widgetIdsArray);
when(mUserManager.isUserUnlocked(any())).thenReturn(false);
NotificationChannel channel =
new NotificationChannel(TEST_CHANNEL_ID, TEST_CHANNEL_NAME, IMPORTANCE_DEFAULT);
channel.setConversationId(TEST_PARENT_CHANNEL_ID, TEST_CONVERSATION_ID);
mNoMan.issueChannelModification(TEST_PACKAGE_A,
UserHandle.getUserHandleForUid(0), channel, IMPORTANCE_HIGH);
mClock.advanceTime(MIN_LINGER_DURATION);
verify(mAppWidgetManager, never()).updateAppWidget(anyInt(), any());
}
@Test