Merge "Don't defer FGS notification if it's already shown" into sc-dev

This commit is contained in:
Chris Tate
2021-05-05 15:33:00 +00:00
committed by Android (Google) Code Review
3 changed files with 22 additions and 0 deletions

View File

@@ -155,6 +155,7 @@ import com.android.server.AppStateTracker;
import com.android.server.LocalServices;
import com.android.server.SystemService;
import com.android.server.am.ActivityManagerService.ItemMatcher;
import com.android.server.notification.NotificationManagerInternal;
import com.android.server.uri.NeededUriGrants;
import com.android.server.wm.ActivityServiceConnectionsHolder;
@@ -1976,6 +1977,17 @@ public final class ActiveServices {
// DeviceConfig element has been set
showNow = isLegacyApp && mAm.mConstants.mFlagFgsNotificationDeferralApiGated;
}
if (!showNow) {
// did we already show it?
showNow = r.mFgsNotificationShown;
}
if (!showNow) {
// Is the notification already showing for any reason?
final NotificationManagerInternal nmi =
LocalServices.getService(NotificationManagerInternal.class);
showNow = nmi.isNotificationShown(r.appInfo.packageName, null,
r.foregroundId, UserHandle.getUserId(uid));
}
if (!showNow) {
// has the app forced deferral?
if (!r.foregroundNoti.isForegroundDisplayForceDeferred()) {

View File

@@ -30,6 +30,9 @@ public interface NotificationManagerInternal {
void cancelNotification(String pkg, String basePkg, int callingUid, int callingPid,
String tag, int id, int userId);
/** is the given notification currently showing? */
boolean isNotificationShown(String pkg, String tag, int notificationId, int userId);
void removeForegroundServiceFlagFromNotification(String pkg, int notificationId, int userId);
void onConversationRemoved(String pkg, int uid, Set<String> shortcuts);

View File

@@ -6047,6 +6047,13 @@ public class NotificationManagerService extends SystemService {
cancelNotificationInternal(pkg, opPkg, callingUid, callingPid, tag, id, userId);
}
@Override
public boolean isNotificationShown(String pkg, String tag, int notificationId, int userId) {
synchronized (mNotificationLock) {
return findNotificationLocked(pkg, tag, notificationId, userId) != null;
}
}
@Override
public void removeForegroundServiceFlagFromNotification(String pkg, int notificationId,
int userId) {