Merge "Protect all calls to mShortcutHelper with null check" into rvc-dev am: 754636846c am: 1c0cc0feae am: f7d1a4bafc am: ee450da878
Change-Id: I034175a4f18992d3dd5e628f0793987a0a417935
This commit is contained in:
@@ -110,7 +110,6 @@ import android.annotation.CallbackExecutor;
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
import android.annotation.RequiresPermission;
|
||||
import android.annotation.UserIdInt;
|
||||
import android.annotation.WorkerThread;
|
||||
import android.app.ActivityManager;
|
||||
import android.app.ActivityManagerInternal;
|
||||
@@ -158,6 +157,7 @@ import android.content.pm.PackageManager;
|
||||
import android.content.pm.PackageManager.NameNotFoundException;
|
||||
import android.content.pm.PackageManagerInternal;
|
||||
import android.content.pm.ParceledListSlice;
|
||||
import android.content.pm.ShortcutInfo;
|
||||
import android.content.pm.UserInfo;
|
||||
import android.content.res.Resources;
|
||||
import android.database.ContentObserver;
|
||||
@@ -1732,6 +1732,11 @@ public class NotificationManagerService extends SystemService {
|
||||
return mShortcutHelper;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
void setShortcutHelper(ShortcutHelper helper) {
|
||||
mShortcutHelper = helper;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
void setHints(int hints) {
|
||||
mListenerHints = hints;
|
||||
@@ -3462,10 +3467,14 @@ public class NotificationManagerService extends SystemService {
|
||||
ArrayList<ConversationChannelWrapper> conversations =
|
||||
mPreferencesHelper.getConversations(onlyImportant);
|
||||
for (ConversationChannelWrapper conversation : conversations) {
|
||||
conversation.setShortcutInfo(mShortcutHelper.getValidShortcutInfo(
|
||||
conversation.getNotificationChannel().getConversationId(),
|
||||
conversation.getPkg(),
|
||||
UserHandle.of(UserHandle.getUserId(conversation.getUid()))));
|
||||
if (mShortcutHelper == null) {
|
||||
conversation.setShortcutInfo(null);
|
||||
} else {
|
||||
conversation.setShortcutInfo(mShortcutHelper.getValidShortcutInfo(
|
||||
conversation.getNotificationChannel().getConversationId(),
|
||||
conversation.getPkg(),
|
||||
UserHandle.of(UserHandle.getUserId(conversation.getUid()))));
|
||||
}
|
||||
}
|
||||
return new ParceledListSlice<>(conversations);
|
||||
}
|
||||
@@ -3485,10 +3494,14 @@ public class NotificationManagerService extends SystemService {
|
||||
ArrayList<ConversationChannelWrapper> conversations =
|
||||
mPreferencesHelper.getConversations(pkg, uid);
|
||||
for (ConversationChannelWrapper conversation : conversations) {
|
||||
conversation.setShortcutInfo(mShortcutHelper.getValidShortcutInfo(
|
||||
conversation.getNotificationChannel().getConversationId(),
|
||||
pkg,
|
||||
UserHandle.of(UserHandle.getUserId(uid))));
|
||||
if (mShortcutHelper == null) {
|
||||
conversation.setShortcutInfo(null);
|
||||
} else {
|
||||
conversation.setShortcutInfo(mShortcutHelper.getValidShortcutInfo(
|
||||
conversation.getNotificationChannel().getConversationId(),
|
||||
pkg,
|
||||
UserHandle.of(UserHandle.getUserId(uid))));
|
||||
}
|
||||
}
|
||||
return new ParceledListSlice<>(conversations);
|
||||
}
|
||||
@@ -5683,8 +5696,10 @@ public class NotificationManagerService extends SystemService {
|
||||
}
|
||||
}
|
||||
|
||||
r.setShortcutInfo(mShortcutHelper.getValidShortcutInfo(
|
||||
notification.getShortcutId(), pkg, user));
|
||||
ShortcutInfo info = mShortcutHelper != null
|
||||
? mShortcutHelper.getValidShortcutInfo(notification.getShortcutId(), pkg, user)
|
||||
: null;
|
||||
r.setShortcutInfo(info);
|
||||
|
||||
if (!checkDisqualifyingFeatures(userId, notificationUid, id, tag, r,
|
||||
r.getSbn().getOverrideGroupKey() != null)) {
|
||||
@@ -6217,8 +6232,11 @@ public class NotificationManagerService extends SystemService {
|
||||
cancelGroupChildrenLocked(r, mCallingUid, mCallingPid, listenerName,
|
||||
mSendDelete, childrenFlagChecker);
|
||||
updateLightsLocked();
|
||||
mShortcutHelper.maybeListenForShortcutChangesForBubbles(r, true /* isRemoved */,
|
||||
mHandler);
|
||||
if (mShortcutHelper != null) {
|
||||
mShortcutHelper.maybeListenForShortcutChangesForBubbles(r,
|
||||
true /* isRemoved */,
|
||||
mHandler);
|
||||
}
|
||||
} else {
|
||||
// No notification was found, assume that it is snoozed and cancel it.
|
||||
if (mReason != REASON_SNOOZED) {
|
||||
@@ -6456,9 +6474,11 @@ public class NotificationManagerService extends SystemService {
|
||||
+ n.getPackageName());
|
||||
}
|
||||
|
||||
mShortcutHelper.maybeListenForShortcutChangesForBubbles(r,
|
||||
false /* isRemoved */,
|
||||
mHandler);
|
||||
if (mShortcutHelper != null) {
|
||||
mShortcutHelper.maybeListenForShortcutChangesForBubbles(r,
|
||||
false /* isRemoved */,
|
||||
mHandler);
|
||||
}
|
||||
|
||||
maybeRecordInterruptionLocked(r);
|
||||
|
||||
|
||||
@@ -6504,4 +6504,19 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
|
||||
assertNull(conversations.get(0).getShortcutInfo());
|
||||
assertNull(conversations.get(1).getShortcutInfo());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testShortcutHelperNull_doesntCrashEnqueue() throws RemoteException {
|
||||
mService.setShortcutHelper(null);
|
||||
NotificationRecord nr =
|
||||
generateMessageBubbleNotifRecord(mTestNotificationChannel,
|
||||
"testShortcutHelperNull_doesntCrashEnqueue");
|
||||
try {
|
||||
mBinderService.enqueueNotificationWithTag(PKG, PKG, nr.getSbn().getTag(),
|
||||
nr.getSbn().getId(), nr.getSbn().getNotification(), nr.getSbn().getUserId());
|
||||
waitForIdle();
|
||||
} catch (Exception e) {
|
||||
fail(e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user