Merge "Don't defer FGS notification if it's already shown" into sc-dev
This commit is contained in:
@@ -155,6 +155,7 @@ import com.android.server.AppStateTracker;
|
|||||||
import com.android.server.LocalServices;
|
import com.android.server.LocalServices;
|
||||||
import com.android.server.SystemService;
|
import com.android.server.SystemService;
|
||||||
import com.android.server.am.ActivityManagerService.ItemMatcher;
|
import com.android.server.am.ActivityManagerService.ItemMatcher;
|
||||||
|
import com.android.server.notification.NotificationManagerInternal;
|
||||||
import com.android.server.uri.NeededUriGrants;
|
import com.android.server.uri.NeededUriGrants;
|
||||||
import com.android.server.wm.ActivityServiceConnectionsHolder;
|
import com.android.server.wm.ActivityServiceConnectionsHolder;
|
||||||
|
|
||||||
@@ -1976,6 +1977,17 @@ public final class ActiveServices {
|
|||||||
// DeviceConfig element has been set
|
// DeviceConfig element has been set
|
||||||
showNow = isLegacyApp && mAm.mConstants.mFlagFgsNotificationDeferralApiGated;
|
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) {
|
if (!showNow) {
|
||||||
// has the app forced deferral?
|
// has the app forced deferral?
|
||||||
if (!r.foregroundNoti.isForegroundDisplayForceDeferred()) {
|
if (!r.foregroundNoti.isForegroundDisplayForceDeferred()) {
|
||||||
|
|||||||
@@ -30,6 +30,9 @@ public interface NotificationManagerInternal {
|
|||||||
void cancelNotification(String pkg, String basePkg, int callingUid, int callingPid,
|
void cancelNotification(String pkg, String basePkg, int callingUid, int callingPid,
|
||||||
String tag, int id, int userId);
|
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 removeForegroundServiceFlagFromNotification(String pkg, int notificationId, int userId);
|
||||||
|
|
||||||
void onConversationRemoved(String pkg, int uid, Set<String> shortcuts);
|
void onConversationRemoved(String pkg, int uid, Set<String> shortcuts);
|
||||||
|
|||||||
@@ -6047,6 +6047,13 @@ public class NotificationManagerService extends SystemService {
|
|||||||
cancelNotificationInternal(pkg, opPkg, callingUid, callingPid, tag, id, userId);
|
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
|
@Override
|
||||||
public void removeForegroundServiceFlagFromNotification(String pkg, int notificationId,
|
public void removeForegroundServiceFlagFromNotification(String pkg, int notificationId,
|
||||||
int userId) {
|
int userId) {
|
||||||
|
|||||||
Reference in New Issue
Block a user