Merge "NotificationEntry logging improvements" into tm-qpr-dev
This commit is contained in:
@@ -66,7 +66,7 @@ public abstract class AlertingNotificationManager implements NotificationLifetim
|
|||||||
* @param entry entry to show
|
* @param entry entry to show
|
||||||
*/
|
*/
|
||||||
public void showNotification(@NonNull NotificationEntry entry) {
|
public void showNotification(@NonNull NotificationEntry entry) {
|
||||||
mLogger.logShowNotification(entry.getKey());
|
mLogger.logShowNotification(entry);
|
||||||
addAlertEntry(entry);
|
addAlertEntry(entry);
|
||||||
updateNotification(entry.getKey(), true /* alert */);
|
updateNotification(entry.getKey(), true /* alert */);
|
||||||
entry.setInterruption();
|
entry.setInterruption();
|
||||||
@@ -320,7 +320,7 @@ public abstract class AlertingNotificationManager implements NotificationLifetim
|
|||||||
* @param updatePostTime whether or not to refresh the post time
|
* @param updatePostTime whether or not to refresh the post time
|
||||||
*/
|
*/
|
||||||
public void updateEntry(boolean updatePostTime) {
|
public void updateEntry(boolean updatePostTime) {
|
||||||
mLogger.logUpdateEntry(mEntry.getKey(), updatePostTime);
|
mLogger.logUpdateEntry(mEntry, updatePostTime);
|
||||||
|
|
||||||
long currentTime = mClock.currentTimeMillis();
|
long currentTime = mClock.currentTimeMillis();
|
||||||
mEarliestRemovaltime = currentTime + mMinimumDisplayTime;
|
mEarliestRemovaltime = currentTime + mMinimumDisplayTime;
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package com.android.systemui.statusbar.notification.collection;
|
package com.android.systemui.statusbar.notification.collection;
|
||||||
|
|
||||||
|
import static com.android.systemui.statusbar.notification.NotificationUtils.logKey;
|
||||||
import static com.android.systemui.statusbar.notification.collection.NotifCollection.REASON_NOT_CANCELED;
|
import static com.android.systemui.statusbar.notification.collection.NotifCollection.REASON_NOT_CANCELED;
|
||||||
import static com.android.systemui.statusbar.notification.collection.NotificationEntry.DismissState.NOT_DISMISSED;
|
import static com.android.systemui.statusbar.notification.collection.NotificationEntry.DismissState.NOT_DISMISSED;
|
||||||
|
|
||||||
@@ -52,7 +53,7 @@ public class ListDumper {
|
|||||||
sb,
|
sb,
|
||||||
true,
|
true,
|
||||||
includeRecordKeeping,
|
includeRecordKeeping,
|
||||||
interactionTracker.hasUserInteractedWith(entry.getKey()));
|
interactionTracker.hasUserInteractedWith(logKey(entry)));
|
||||||
if (entry instanceof GroupEntry) {
|
if (entry instanceof GroupEntry) {
|
||||||
GroupEntry ge = (GroupEntry) entry;
|
GroupEntry ge = (GroupEntry) entry;
|
||||||
NotificationEntry summary = ge.getSummary();
|
NotificationEntry summary = ge.getSummary();
|
||||||
@@ -63,7 +64,7 @@ public class ListDumper {
|
|||||||
sb,
|
sb,
|
||||||
true,
|
true,
|
||||||
includeRecordKeeping,
|
includeRecordKeeping,
|
||||||
interactionTracker.hasUserInteractedWith(summary.getKey()));
|
interactionTracker.hasUserInteractedWith(logKey(summary)));
|
||||||
}
|
}
|
||||||
List<NotificationEntry> children = ge.getChildren();
|
List<NotificationEntry> children = ge.getChildren();
|
||||||
for (int childIndex = 0; childIndex < children.size(); childIndex++) {
|
for (int childIndex = 0; childIndex < children.size(); childIndex++) {
|
||||||
@@ -74,7 +75,7 @@ public class ListDumper {
|
|||||||
sb,
|
sb,
|
||||||
true,
|
true,
|
||||||
includeRecordKeeping,
|
includeRecordKeeping,
|
||||||
interactionTracker.hasUserInteractedWith(child.getKey()));
|
interactionTracker.hasUserInteractedWith(logKey(child)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -116,11 +117,11 @@ public class ListDumper {
|
|||||||
sb.append(indent)
|
sb.append(indent)
|
||||||
.append("[").append(index).append("] ")
|
.append("[").append(index).append("] ")
|
||||||
.append(index.length() == 1 ? " " : "")
|
.append(index.length() == 1 ? " " : "")
|
||||||
.append(entry.getKey());
|
.append(logKey(entry));
|
||||||
|
|
||||||
if (includeParent) {
|
if (includeParent) {
|
||||||
sb.append(" (parent=")
|
sb.append(" (parent=")
|
||||||
.append(entry.getParent() != null ? entry.getParent().getKey() : null)
|
.append(logKey(entry.getParent()))
|
||||||
.append(")");
|
.append(")");
|
||||||
|
|
||||||
NotificationEntry notifEntry = entry.getRepresentativeEntry();
|
NotificationEntry notifEntry = entry.getRepresentativeEntry();
|
||||||
@@ -185,8 +186,8 @@ public class ListDumper {
|
|||||||
|
|
||||||
if (notifEntry.getAttachState().getSuppressedChanges().getParent() != null) {
|
if (notifEntry.getAttachState().getSuppressedChanges().getParent() != null) {
|
||||||
rksb.append("suppressedParent=")
|
rksb.append("suppressedParent=")
|
||||||
.append(notifEntry.getAttachState().getSuppressedChanges()
|
.append(logKey(notifEntry.getAttachState().getSuppressedChanges()
|
||||||
.getParent().getKey())
|
.getParent()))
|
||||||
.append(" ");
|
.append(" ");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -267,13 +267,14 @@ public class NotifCollection implements Dumpable {
|
|||||||
requireNonNull(stats);
|
requireNonNull(stats);
|
||||||
NotificationEntry storedEntry = mNotificationSet.get(entry.getKey());
|
NotificationEntry storedEntry = mNotificationSet.get(entry.getKey());
|
||||||
if (storedEntry == null) {
|
if (storedEntry == null) {
|
||||||
mLogger.logNonExistentNotifDismissed(entry.getKey());
|
mLogger.logNonExistentNotifDismissed(entry);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (entry != storedEntry) {
|
if (entry != storedEntry) {
|
||||||
throw mEulogizer.record(
|
throw mEulogizer.record(
|
||||||
new IllegalStateException("Invalid entry: "
|
new IllegalStateException("Invalid entry: "
|
||||||
+ "different stored and dismissed entries for " + entry.getKey()));
|
+ "different stored and dismissed entries for " + logKey(entry)
|
||||||
|
+ " stored=@" + Integer.toHexString(storedEntry.hashCode())));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entry.getDismissState() == DISMISSED) {
|
if (entry.getDismissState() == DISMISSED) {
|
||||||
@@ -282,7 +283,7 @@ public class NotifCollection implements Dumpable {
|
|||||||
|
|
||||||
updateDismissInterceptors(entry);
|
updateDismissInterceptors(entry);
|
||||||
if (isDismissIntercepted(entry)) {
|
if (isDismissIntercepted(entry)) {
|
||||||
mLogger.logNotifDismissedIntercepted(entry.getKey());
|
mLogger.logNotifDismissedIntercepted(entry);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -299,7 +300,7 @@ public class NotifCollection implements Dumpable {
|
|||||||
stats.notificationVisibility);
|
stats.notificationVisibility);
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
// system process is dead if we're here.
|
// system process is dead if we're here.
|
||||||
mLogger.logRemoteExceptionOnNotificationClear(entry.getKey(), e);
|
mLogger.logRemoteExceptionOnNotificationClear(entry, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -342,7 +343,7 @@ public class NotifCollection implements Dumpable {
|
|||||||
// interceptors the chance to filter the notification
|
// interceptors the chance to filter the notification
|
||||||
updateDismissInterceptors(entry);
|
updateDismissInterceptors(entry);
|
||||||
if (isDismissIntercepted(entry)) {
|
if (isDismissIntercepted(entry)) {
|
||||||
mLogger.logNotifClearAllDismissalIntercepted(entry.getKey());
|
mLogger.logNotifClearAllDismissalIntercepted(entry);
|
||||||
}
|
}
|
||||||
entries.remove(i);
|
entries.remove(i);
|
||||||
}
|
}
|
||||||
@@ -363,7 +364,7 @@ public class NotifCollection implements Dumpable {
|
|||||||
NotificationEntry entry = entries.get(i);
|
NotificationEntry entry = entries.get(i);
|
||||||
|
|
||||||
entry.setDismissState(DISMISSED);
|
entry.setDismissState(DISMISSED);
|
||||||
mLogger.logNotifDismissed(entry.getKey());
|
mLogger.logNotifDismissed(entry);
|
||||||
|
|
||||||
if (isCanceled(entry)) {
|
if (isCanceled(entry)) {
|
||||||
canceledEntries.add(entry);
|
canceledEntries.add(entry);
|
||||||
@@ -416,12 +417,12 @@ public class NotifCollection implements Dumpable {
|
|||||||
int reason) {
|
int reason) {
|
||||||
Assert.isMainThread();
|
Assert.isMainThread();
|
||||||
|
|
||||||
mLogger.logNotifRemoved(sbn.getKey(), reason);
|
mLogger.logNotifRemoved(sbn, reason);
|
||||||
|
|
||||||
final NotificationEntry entry = mNotificationSet.get(sbn.getKey());
|
final NotificationEntry entry = mNotificationSet.get(sbn.getKey());
|
||||||
if (entry == null) {
|
if (entry == null) {
|
||||||
// TODO (b/160008901): Throw an exception here
|
// TODO (b/160008901): Throw an exception here
|
||||||
mLogger.logNoNotificationToRemoveWithKey(sbn.getKey(), reason);
|
mLogger.logNoNotificationToRemoveWithKey(sbn, reason);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -464,7 +465,7 @@ public class NotifCollection implements Dumpable {
|
|||||||
mEventQueue.add(new BindEntryEvent(entry, sbn));
|
mEventQueue.add(new BindEntryEvent(entry, sbn));
|
||||||
mNotificationSet.put(sbn.getKey(), entry);
|
mNotificationSet.put(sbn.getKey(), entry);
|
||||||
|
|
||||||
mLogger.logNotifPosted(sbn.getKey());
|
mLogger.logNotifPosted(entry);
|
||||||
mEventQueue.add(new EntryAddedEvent(entry));
|
mEventQueue.add(new EntryAddedEvent(entry));
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@@ -483,7 +484,7 @@ public class NotifCollection implements Dumpable {
|
|||||||
entry.setSbn(sbn);
|
entry.setSbn(sbn);
|
||||||
mEventQueue.add(new BindEntryEvent(entry, sbn));
|
mEventQueue.add(new BindEntryEvent(entry, sbn));
|
||||||
|
|
||||||
mLogger.logNotifUpdated(sbn.getKey());
|
mLogger.logNotifUpdated(entry);
|
||||||
mEventQueue.add(new EntryUpdatedEvent(entry, true /* fromSystem */));
|
mEventQueue.add(new EntryUpdatedEvent(entry, true /* fromSystem */));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -498,12 +499,12 @@ public class NotifCollection implements Dumpable {
|
|||||||
if (mNotificationSet.get(entry.getKey()) != entry) {
|
if (mNotificationSet.get(entry.getKey()) != entry) {
|
||||||
throw mEulogizer.record(
|
throw mEulogizer.record(
|
||||||
new IllegalStateException("No notification to remove with key "
|
new IllegalStateException("No notification to remove with key "
|
||||||
+ entry.getKey()));
|
+ logKey(entry)));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isCanceled(entry)) {
|
if (!isCanceled(entry)) {
|
||||||
throw mEulogizer.record(
|
throw mEulogizer.record(
|
||||||
new IllegalStateException("Cannot remove notification " + entry.getKey()
|
new IllegalStateException("Cannot remove notification " + logKey(entry)
|
||||||
+ ": has not been marked for removal"));
|
+ ": has not been marked for removal"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -514,7 +515,7 @@ public class NotifCollection implements Dumpable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!isLifetimeExtended(entry)) {
|
if (!isLifetimeExtended(entry)) {
|
||||||
mLogger.logNotifReleased(entry.getKey());
|
mLogger.logNotifReleased(entry);
|
||||||
mNotificationSet.remove(entry.getKey());
|
mNotificationSet.remove(entry.getKey());
|
||||||
cancelDismissInterception(entry);
|
cancelDismissInterception(entry);
|
||||||
mEventQueue.add(new EntryRemovedEvent(entry, entry.mCancellationReason));
|
mEventQueue.add(new EntryRemovedEvent(entry, entry.mCancellationReason));
|
||||||
@@ -580,7 +581,7 @@ public class NotifCollection implements Dumpable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
mLogger.logRankingMissing(entry.getKey(), rankingMap);
|
mLogger.logRankingMissing(entry, rankingMap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -627,10 +628,7 @@ public class NotifCollection implements Dumpable {
|
|||||||
extender.getName(), logKey, collectionEntryIs)));
|
extender.getName(), logKey, collectionEntryIs)));
|
||||||
}
|
}
|
||||||
|
|
||||||
mLogger.logLifetimeExtensionEnded(
|
mLogger.logLifetimeExtensionEnded(entry, extender, entry.mLifetimeExtenders.size());
|
||||||
entry.getKey(),
|
|
||||||
extender,
|
|
||||||
entry.mLifetimeExtenders.size());
|
|
||||||
|
|
||||||
if (!isLifetimeExtended(entry)) {
|
if (!isLifetimeExtended(entry)) {
|
||||||
if (tryRemoveNotification(entry)) {
|
if (tryRemoveNotification(entry)) {
|
||||||
@@ -657,7 +655,7 @@ public class NotifCollection implements Dumpable {
|
|||||||
mAmDispatchingToOtherCode = true;
|
mAmDispatchingToOtherCode = true;
|
||||||
for (NotifLifetimeExtender extender : mLifetimeExtenders) {
|
for (NotifLifetimeExtender extender : mLifetimeExtenders) {
|
||||||
if (extender.maybeExtendLifetime(entry, entry.mCancellationReason)) {
|
if (extender.maybeExtendLifetime(entry, entry.mCancellationReason)) {
|
||||||
mLogger.logLifetimeExtended(entry.getKey(), extender);
|
mLogger.logLifetimeExtended(entry, extender);
|
||||||
entry.mLifetimeExtenders.add(extender);
|
entry.mLifetimeExtenders.add(extender);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -916,17 +914,17 @@ public class NotifCollection implements Dumpable {
|
|||||||
// Make sure we have the notification to update
|
// Make sure we have the notification to update
|
||||||
NotificationEntry entry = mNotificationSet.get(sbn.getKey());
|
NotificationEntry entry = mNotificationSet.get(sbn.getKey());
|
||||||
if (entry == null) {
|
if (entry == null) {
|
||||||
mLogger.logNotifInternalUpdateFailed(sbn.getKey(), name, reason);
|
mLogger.logNotifInternalUpdateFailed(sbn, name, reason);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mLogger.logNotifInternalUpdate(sbn.getKey(), name, reason);
|
mLogger.logNotifInternalUpdate(entry, name, reason);
|
||||||
|
|
||||||
// First do the pieces of postNotification which are not about assuming the notification
|
// First do the pieces of postNotification which are not about assuming the notification
|
||||||
// was sent by the app
|
// was sent by the app
|
||||||
entry.setSbn(sbn);
|
entry.setSbn(sbn);
|
||||||
mEventQueue.add(new BindEntryEvent(entry, sbn));
|
mEventQueue.add(new BindEntryEvent(entry, sbn));
|
||||||
|
|
||||||
mLogger.logNotifUpdated(sbn.getKey());
|
mLogger.logNotifUpdated(entry);
|
||||||
mEventQueue.add(new EntryUpdatedEvent(entry, false /* fromSystem */));
|
mEventQueue.add(new EntryUpdatedEvent(entry, false /* fromSystem */));
|
||||||
|
|
||||||
// Skip the applyRanking step and go straight to dispatching the events
|
// Skip the applyRanking step and go straight to dispatching the events
|
||||||
|
|||||||
@@ -579,11 +579,7 @@ public class ShadeListBuilder implements Dumpable {
|
|||||||
if (existingSummary == null) {
|
if (existingSummary == null) {
|
||||||
group.setSummary(entry);
|
group.setSummary(entry);
|
||||||
} else {
|
} else {
|
||||||
mLogger.logDuplicateSummary(
|
mLogger.logDuplicateSummary(mIterationCount, group, existingSummary, entry);
|
||||||
mIterationCount,
|
|
||||||
group.getKey(),
|
|
||||||
existingSummary.getKey(),
|
|
||||||
entry.getKey());
|
|
||||||
|
|
||||||
// Use whichever one was posted most recently
|
// Use whichever one was posted most recently
|
||||||
if (entry.getSbn().getPostTime()
|
if (entry.getSbn().getPostTime()
|
||||||
@@ -1070,7 +1066,7 @@ public class ShadeListBuilder implements Dumpable {
|
|||||||
if (!Objects.equals(curr, prev)) {
|
if (!Objects.equals(curr, prev)) {
|
||||||
mLogger.logEntryAttachStateChanged(
|
mLogger.logEntryAttachStateChanged(
|
||||||
mIterationCount,
|
mIterationCount,
|
||||||
entry.getKey(),
|
entry,
|
||||||
prev.getParent(),
|
prev.getParent(),
|
||||||
curr.getParent());
|
curr.getParent());
|
||||||
|
|
||||||
|
|||||||
@@ -360,13 +360,13 @@ public class PreparationCoordinator implements Coordinator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void abortInflation(NotificationEntry entry, String reason) {
|
private void abortInflation(NotificationEntry entry, String reason) {
|
||||||
mLogger.logInflationAborted(entry.getKey(), reason);
|
mLogger.logInflationAborted(entry, reason);
|
||||||
mNotifInflater.abortInflation(entry);
|
mNotifInflater.abortInflation(entry);
|
||||||
mInflatingNotifs.remove(entry);
|
mInflatingNotifs.remove(entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onInflationFinished(NotificationEntry entry, NotifViewController controller) {
|
private void onInflationFinished(NotificationEntry entry, NotifViewController controller) {
|
||||||
mLogger.logNotifInflated(entry.getKey());
|
mLogger.logNotifInflated(entry);
|
||||||
mInflatingNotifs.remove(entry);
|
mInflatingNotifs.remove(entry);
|
||||||
mViewBarn.registerViewForEntry(entry, controller);
|
mViewBarn.registerViewForEntry(entry, controller);
|
||||||
mInflationStates.put(entry, STATE_INFLATED);
|
mInflationStates.put(entry, STATE_INFLATED);
|
||||||
@@ -398,20 +398,20 @@ public class PreparationCoordinator implements Coordinator {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (isBeyondGroupInitializationWindow(group, now)) {
|
if (isBeyondGroupInitializationWindow(group, now)) {
|
||||||
mLogger.logGroupInflationTookTooLong(group.getKey());
|
mLogger.logGroupInflationTookTooLong(group);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (mInflatingNotifs.contains(group.getSummary())) {
|
if (mInflatingNotifs.contains(group.getSummary())) {
|
||||||
mLogger.logDelayingGroupRelease(group.getKey(), group.getSummary().getKey());
|
mLogger.logDelayingGroupRelease(group, group.getSummary());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
for (NotificationEntry child : group.getChildren()) {
|
for (NotificationEntry child : group.getChildren()) {
|
||||||
if (mInflatingNotifs.contains(child) && !child.wasAttachedInPreviousPass()) {
|
if (mInflatingNotifs.contains(child) && !child.wasAttachedInPreviousPass()) {
|
||||||
mLogger.logDelayingGroupRelease(group.getKey(), child.getKey());
|
mLogger.logDelayingGroupRelease(group, child);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mLogger.logDoneWaitingForGroupInflation(group.getKey());
|
mLogger.logDoneWaitingForGroupInflation(group);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,48 +19,51 @@ package com.android.systemui.statusbar.notification.collection.coordinator
|
|||||||
import com.android.systemui.log.LogBuffer
|
import com.android.systemui.log.LogBuffer
|
||||||
import com.android.systemui.log.LogLevel
|
import com.android.systemui.log.LogLevel
|
||||||
import com.android.systemui.log.dagger.NotificationLog
|
import com.android.systemui.log.dagger.NotificationLog
|
||||||
|
import com.android.systemui.statusbar.notification.collection.GroupEntry
|
||||||
|
import com.android.systemui.statusbar.notification.collection.NotificationEntry
|
||||||
|
import com.android.systemui.statusbar.notification.logKey
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
class PreparationCoordinatorLogger @Inject constructor(
|
class PreparationCoordinatorLogger @Inject constructor(
|
||||||
@NotificationLog private val buffer: LogBuffer
|
@NotificationLog private val buffer: LogBuffer
|
||||||
) {
|
) {
|
||||||
fun logNotifInflated(key: String) {
|
fun logNotifInflated(entry: NotificationEntry) {
|
||||||
buffer.log(TAG, LogLevel.DEBUG, {
|
buffer.log(TAG, LogLevel.DEBUG, {
|
||||||
str1 = key
|
str1 = entry.logKey
|
||||||
}, {
|
}, {
|
||||||
"NOTIF INFLATED $str1"
|
"NOTIF INFLATED $str1"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logInflationAborted(key: String, reason: String) {
|
fun logInflationAborted(entry: NotificationEntry, reason: String) {
|
||||||
buffer.log(TAG, LogLevel.DEBUG, {
|
buffer.log(TAG, LogLevel.DEBUG, {
|
||||||
str1 = key
|
str1 = entry.logKey
|
||||||
str2 = reason
|
str2 = reason
|
||||||
}, {
|
}, {
|
||||||
"NOTIF INFLATION ABORTED $str1 reason=$str2"
|
"NOTIF INFLATION ABORTED $str1 reason=$str2"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logDoneWaitingForGroupInflation(groupKey: String) {
|
fun logDoneWaitingForGroupInflation(group: GroupEntry) {
|
||||||
buffer.log(TAG, LogLevel.DEBUG, {
|
buffer.log(TAG, LogLevel.DEBUG, {
|
||||||
str1 = groupKey
|
str1 = group.logKey
|
||||||
}, {
|
}, {
|
||||||
"Finished inflating all members of group $str1, releasing group"
|
"Finished inflating all members of group $str1, releasing group"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logGroupInflationTookTooLong(groupKey: String) {
|
fun logGroupInflationTookTooLong(group: GroupEntry) {
|
||||||
buffer.log(TAG, LogLevel.WARNING, {
|
buffer.log(TAG, LogLevel.WARNING, {
|
||||||
str1 = groupKey
|
str1 = group.logKey
|
||||||
}, {
|
}, {
|
||||||
"Group inflation took too long for $str1, releasing children early"
|
"Group inflation took too long for $str1, releasing children early"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logDelayingGroupRelease(groupKey: String, childKey: String) {
|
fun logDelayingGroupRelease(group: GroupEntry, child: NotificationEntry) {
|
||||||
buffer.log(TAG, LogLevel.DEBUG, {
|
buffer.log(TAG, LogLevel.DEBUG, {
|
||||||
str1 = groupKey
|
str1 = group.logKey
|
||||||
str2 = childKey
|
str2 = child.logKey
|
||||||
}, {
|
}, {
|
||||||
"Delaying release of group $str1 because child $str2 is still inflating"
|
"Delaying release of group $str1 because child $str2 is still inflating"
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -23,8 +23,10 @@ import com.android.systemui.log.LogLevel.WARNING
|
|||||||
import com.android.systemui.log.dagger.NotificationLog
|
import com.android.systemui.log.dagger.NotificationLog
|
||||||
import com.android.systemui.statusbar.notification.collection.GroupEntry
|
import com.android.systemui.statusbar.notification.collection.GroupEntry
|
||||||
import com.android.systemui.statusbar.notification.collection.ListEntry
|
import com.android.systemui.statusbar.notification.collection.ListEntry
|
||||||
|
import com.android.systemui.statusbar.notification.collection.NotificationEntry
|
||||||
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter
|
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter
|
||||||
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifPromoter
|
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifPromoter
|
||||||
|
import com.android.systemui.statusbar.notification.logKey
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
class ShadeListBuilderLogger @Inject constructor(
|
class ShadeListBuilderLogger @Inject constructor(
|
||||||
@@ -110,12 +112,17 @@ class ShadeListBuilderLogger @Inject constructor(
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logDuplicateSummary(buildId: Int, groupKey: String, existingKey: String, newKey: String) {
|
fun logDuplicateSummary(
|
||||||
|
buildId: Int,
|
||||||
|
group: GroupEntry,
|
||||||
|
existingSummary: NotificationEntry,
|
||||||
|
newSummary: NotificationEntry
|
||||||
|
) {
|
||||||
buffer.log(TAG, WARNING, {
|
buffer.log(TAG, WARNING, {
|
||||||
long1 = buildId.toLong()
|
long1 = buildId.toLong()
|
||||||
str1 = groupKey
|
str1 = group.logKey
|
||||||
str2 = existingKey
|
str2 = existingSummary.logKey
|
||||||
str3 = newKey
|
str3 = newSummary.logKey
|
||||||
}, {
|
}, {
|
||||||
"""(Build $long1) Duplicate summary for group "$str1": "$str2" vs. "$str3""""
|
"""(Build $long1) Duplicate summary for group "$str1": "$str2" vs. "$str3""""
|
||||||
})
|
})
|
||||||
@@ -124,7 +131,7 @@ class ShadeListBuilderLogger @Inject constructor(
|
|||||||
fun logDuplicateTopLevelKey(buildId: Int, topLevelKey: String) {
|
fun logDuplicateTopLevelKey(buildId: Int, topLevelKey: String) {
|
||||||
buffer.log(TAG, WARNING, {
|
buffer.log(TAG, WARNING, {
|
||||||
long1 = buildId.toLong()
|
long1 = buildId.toLong()
|
||||||
str1 = topLevelKey
|
str1 = logKey(topLevelKey)
|
||||||
}, {
|
}, {
|
||||||
"(Build $long1) Duplicate top-level key: $str1"
|
"(Build $long1) Duplicate top-level key: $str1"
|
||||||
})
|
})
|
||||||
@@ -132,15 +139,15 @@ class ShadeListBuilderLogger @Inject constructor(
|
|||||||
|
|
||||||
fun logEntryAttachStateChanged(
|
fun logEntryAttachStateChanged(
|
||||||
buildId: Int,
|
buildId: Int,
|
||||||
key: String,
|
entry: ListEntry,
|
||||||
prevParent: GroupEntry?,
|
prevParent: GroupEntry?,
|
||||||
newParent: GroupEntry?
|
newParent: GroupEntry?
|
||||||
) {
|
) {
|
||||||
buffer.log(TAG, INFO, {
|
buffer.log(TAG, INFO, {
|
||||||
long1 = buildId.toLong()
|
long1 = buildId.toLong()
|
||||||
str1 = key
|
str1 = entry.logKey
|
||||||
str2 = prevParent?.key
|
str2 = prevParent?.logKey
|
||||||
str3 = newParent?.key
|
str3 = newParent?.logKey
|
||||||
}, {
|
}, {
|
||||||
|
|
||||||
val action = if (str2 == null && str3 != null) {
|
val action = if (str2 == null && str3 != null) {
|
||||||
@@ -160,8 +167,8 @@ class ShadeListBuilderLogger @Inject constructor(
|
|||||||
fun logParentChanged(buildId: Int, prevParent: GroupEntry?, newParent: GroupEntry?) {
|
fun logParentChanged(buildId: Int, prevParent: GroupEntry?, newParent: GroupEntry?) {
|
||||||
buffer.log(TAG, INFO, {
|
buffer.log(TAG, INFO, {
|
||||||
long1 = buildId.toLong()
|
long1 = buildId.toLong()
|
||||||
str1 = prevParent?.key
|
str1 = prevParent?.logKey
|
||||||
str2 = newParent?.key
|
str2 = newParent?.logKey
|
||||||
}, {
|
}, {
|
||||||
if (str1 == null && str2 != null) {
|
if (str1 == null && str2 != null) {
|
||||||
"(Build $long1) Parent is {$str2}"
|
"(Build $long1) Parent is {$str2}"
|
||||||
@@ -180,8 +187,8 @@ class ShadeListBuilderLogger @Inject constructor(
|
|||||||
) {
|
) {
|
||||||
buffer.log(TAG, INFO, {
|
buffer.log(TAG, INFO, {
|
||||||
long1 = buildId.toLong()
|
long1 = buildId.toLong()
|
||||||
str1 = suppressedParent?.key
|
str1 = suppressedParent?.logKey
|
||||||
str2 = keepingParent?.key
|
str2 = keepingParent?.logKey
|
||||||
}, {
|
}, {
|
||||||
"(Build $long1) Change of parent to '$str1' suppressed; keeping parent '$str2'"
|
"(Build $long1) Change of parent to '$str1' suppressed; keeping parent '$str2'"
|
||||||
})
|
})
|
||||||
@@ -193,7 +200,7 @@ class ShadeListBuilderLogger @Inject constructor(
|
|||||||
) {
|
) {
|
||||||
buffer.log(TAG, INFO, {
|
buffer.log(TAG, INFO, {
|
||||||
long1 = buildId.toLong()
|
long1 = buildId.toLong()
|
||||||
str1 = keepingParent?.key
|
str1 = keepingParent?.logKey
|
||||||
}, {
|
}, {
|
||||||
"(Build $long1) Group pruning suppressed; keeping parent '$str1'"
|
"(Build $long1) Group pruning suppressed; keeping parent '$str1'"
|
||||||
})
|
})
|
||||||
@@ -281,7 +288,7 @@ class ShadeListBuilderLogger @Inject constructor(
|
|||||||
val entry = entries[i]
|
val entry = entries[i]
|
||||||
buffer.log(TAG, DEBUG, {
|
buffer.log(TAG, DEBUG, {
|
||||||
int1 = i
|
int1 = i
|
||||||
str1 = entry.key
|
str1 = entry.logKey
|
||||||
}, {
|
}, {
|
||||||
"[$int1] $str1"
|
"[$int1] $str1"
|
||||||
})
|
})
|
||||||
@@ -289,7 +296,7 @@ class ShadeListBuilderLogger @Inject constructor(
|
|||||||
if (entry is GroupEntry) {
|
if (entry is GroupEntry) {
|
||||||
entry.summary?.let {
|
entry.summary?.let {
|
||||||
buffer.log(TAG, DEBUG, {
|
buffer.log(TAG, DEBUG, {
|
||||||
str1 = it.key
|
str1 = it.logKey
|
||||||
}, {
|
}, {
|
||||||
" [*] $str1 (summary)"
|
" [*] $str1 (summary)"
|
||||||
})
|
})
|
||||||
@@ -298,7 +305,7 @@ class ShadeListBuilderLogger @Inject constructor(
|
|||||||
val child = entry.children[j]
|
val child = entry.children[j]
|
||||||
buffer.log(TAG, DEBUG, {
|
buffer.log(TAG, DEBUG, {
|
||||||
int1 = j
|
int1 = j
|
||||||
str1 = child.key
|
str1 = child.logKey
|
||||||
}, {
|
}, {
|
||||||
" [$int1] $str1"
|
" [$int1] $str1"
|
||||||
})
|
})
|
||||||
@@ -308,7 +315,7 @@ class ShadeListBuilderLogger @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun logPipelineRunSuppressed() =
|
fun logPipelineRunSuppressed() =
|
||||||
buffer.log(TAG, INFO, {}) { "Suppressing pipeline run during animation." }
|
buffer.log(TAG, INFO, {}) { "Suppressing pipeline run during animation." }
|
||||||
}
|
}
|
||||||
|
|
||||||
private const val TAG = "ShadeListBuilder"
|
private const val TAG = "ShadeListBuilder"
|
||||||
@@ -19,6 +19,7 @@ package com.android.systemui.statusbar.notification.collection.notifcollection
|
|||||||
import android.os.RemoteException
|
import android.os.RemoteException
|
||||||
import android.service.notification.NotificationListenerService
|
import android.service.notification.NotificationListenerService
|
||||||
import android.service.notification.NotificationListenerService.RankingMap
|
import android.service.notification.NotificationListenerService.RankingMap
|
||||||
|
import android.service.notification.StatusBarNotification
|
||||||
import com.android.systemui.log.LogBuffer
|
import com.android.systemui.log.LogBuffer
|
||||||
import com.android.systemui.log.LogLevel.DEBUG
|
import com.android.systemui.log.LogLevel.DEBUG
|
||||||
import com.android.systemui.log.LogLevel.ERROR
|
import com.android.systemui.log.LogLevel.ERROR
|
||||||
@@ -65,9 +66,9 @@ fun cancellationReasonDebugString(@CancellationReason reason: Int) =
|
|||||||
class NotifCollectionLogger @Inject constructor(
|
class NotifCollectionLogger @Inject constructor(
|
||||||
@NotificationLog private val buffer: LogBuffer
|
@NotificationLog private val buffer: LogBuffer
|
||||||
) {
|
) {
|
||||||
fun logNotifPosted(key: String) {
|
fun logNotifPosted(entry: NotificationEntry) {
|
||||||
buffer.log(TAG, INFO, {
|
buffer.log(TAG, INFO, {
|
||||||
str1 = key
|
str1 = entry.logKey
|
||||||
}, {
|
}, {
|
||||||
"POSTED $str1"
|
"POSTED $str1"
|
||||||
})
|
})
|
||||||
@@ -75,49 +76,49 @@ class NotifCollectionLogger @Inject constructor(
|
|||||||
|
|
||||||
fun logNotifGroupPosted(groupKey: String, batchSize: Int) {
|
fun logNotifGroupPosted(groupKey: String, batchSize: Int) {
|
||||||
buffer.log(TAG, INFO, {
|
buffer.log(TAG, INFO, {
|
||||||
str1 = groupKey
|
str1 = logKey(groupKey)
|
||||||
int1 = batchSize
|
int1 = batchSize
|
||||||
}, {
|
}, {
|
||||||
"POSTED GROUP $str1 ($int1 events)"
|
"POSTED GROUP $str1 ($int1 events)"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logNotifUpdated(key: String) {
|
fun logNotifUpdated(entry: NotificationEntry) {
|
||||||
buffer.log(TAG, INFO, {
|
buffer.log(TAG, INFO, {
|
||||||
str1 = key
|
str1 = entry.logKey
|
||||||
}, {
|
}, {
|
||||||
"UPDATED $str1"
|
"UPDATED $str1"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logNotifRemoved(key: String, @CancellationReason reason: Int) {
|
fun logNotifRemoved(sbn: StatusBarNotification, @CancellationReason reason: Int) {
|
||||||
buffer.log(TAG, INFO, {
|
buffer.log(TAG, INFO, {
|
||||||
str1 = key
|
str1 = sbn.logKey
|
||||||
int1 = reason
|
int1 = reason
|
||||||
}, {
|
}, {
|
||||||
"REMOVED $str1 reason=${cancellationReasonDebugString(int1)}"
|
"REMOVED $str1 reason=${cancellationReasonDebugString(int1)}"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logNotifReleased(key: String) {
|
fun logNotifReleased(entry: NotificationEntry) {
|
||||||
buffer.log(TAG, INFO, {
|
buffer.log(TAG, INFO, {
|
||||||
str1 = key
|
str1 = entry.logKey
|
||||||
}, {
|
}, {
|
||||||
"RELEASED $str1"
|
"RELEASED $str1"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logNotifDismissed(key: String) {
|
fun logNotifDismissed(entry: NotificationEntry) {
|
||||||
buffer.log(TAG, INFO, {
|
buffer.log(TAG, INFO, {
|
||||||
str1 = key
|
str1 = entry.logKey
|
||||||
}, {
|
}, {
|
||||||
"DISMISSED $str1"
|
"DISMISSED $str1"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logNonExistentNotifDismissed(key: String) {
|
fun logNonExistentNotifDismissed(entry: NotificationEntry) {
|
||||||
buffer.log(TAG, INFO, {
|
buffer.log(TAG, INFO, {
|
||||||
str1 = key
|
str1 = entry.logKey
|
||||||
}, {
|
}, {
|
||||||
"DISMISSED Non Existent $str1"
|
"DISMISSED Non Existent $str1"
|
||||||
})
|
})
|
||||||
@@ -125,7 +126,7 @@ class NotifCollectionLogger @Inject constructor(
|
|||||||
|
|
||||||
fun logChildDismissed(entry: NotificationEntry) {
|
fun logChildDismissed(entry: NotificationEntry) {
|
||||||
buffer.log(TAG, DEBUG, {
|
buffer.log(TAG, DEBUG, {
|
||||||
str1 = entry.key
|
str1 = entry.logKey
|
||||||
}, {
|
}, {
|
||||||
"CHILD DISMISSED (inferred): $str1"
|
"CHILD DISMISSED (inferred): $str1"
|
||||||
})
|
})
|
||||||
@@ -141,31 +142,31 @@ class NotifCollectionLogger @Inject constructor(
|
|||||||
|
|
||||||
fun logDismissOnAlreadyCanceledEntry(entry: NotificationEntry) {
|
fun logDismissOnAlreadyCanceledEntry(entry: NotificationEntry) {
|
||||||
buffer.log(TAG, DEBUG, {
|
buffer.log(TAG, DEBUG, {
|
||||||
str1 = entry.key
|
str1 = entry.logKey
|
||||||
}, {
|
}, {
|
||||||
"Dismiss on $str1, which was already canceled. Trying to remove..."
|
"Dismiss on $str1, which was already canceled. Trying to remove..."
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logNotifDismissedIntercepted(key: String) {
|
fun logNotifDismissedIntercepted(entry: NotificationEntry) {
|
||||||
buffer.log(TAG, INFO, {
|
buffer.log(TAG, INFO, {
|
||||||
str1 = key
|
str1 = entry.logKey
|
||||||
}, {
|
}, {
|
||||||
"DISMISS INTERCEPTED $str1"
|
"DISMISS INTERCEPTED $str1"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logNotifClearAllDismissalIntercepted(key: String) {
|
fun logNotifClearAllDismissalIntercepted(entry: NotificationEntry) {
|
||||||
buffer.log(TAG, INFO, {
|
buffer.log(TAG, INFO, {
|
||||||
str1 = key
|
str1 = entry.logKey
|
||||||
}, {
|
}, {
|
||||||
"CLEAR ALL DISMISSAL INTERCEPTED $str1"
|
"CLEAR ALL DISMISSAL INTERCEPTED $str1"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logNotifInternalUpdate(key: String, name: String, reason: String) {
|
fun logNotifInternalUpdate(entry: NotificationEntry, name: String, reason: String) {
|
||||||
buffer.log(TAG, INFO, {
|
buffer.log(TAG, INFO, {
|
||||||
str1 = key
|
str1 = entry.logKey
|
||||||
str2 = name
|
str2 = name
|
||||||
str3 = reason
|
str3 = reason
|
||||||
}, {
|
}, {
|
||||||
@@ -173,9 +174,9 @@ class NotifCollectionLogger @Inject constructor(
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logNotifInternalUpdateFailed(key: String, name: String, reason: String) {
|
fun logNotifInternalUpdateFailed(sbn: StatusBarNotification, name: String, reason: String) {
|
||||||
buffer.log(TAG, INFO, {
|
buffer.log(TAG, INFO, {
|
||||||
str1 = key
|
str1 = sbn.logKey
|
||||||
str2 = name
|
str2 = name
|
||||||
str3 = reason
|
str3 = reason
|
||||||
}, {
|
}, {
|
||||||
@@ -183,26 +184,33 @@ class NotifCollectionLogger @Inject constructor(
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logNoNotificationToRemoveWithKey(key: String, @CancellationReason reason: Int) {
|
fun logNoNotificationToRemoveWithKey(
|
||||||
|
sbn: StatusBarNotification,
|
||||||
|
@CancellationReason reason: Int
|
||||||
|
) {
|
||||||
buffer.log(TAG, ERROR, {
|
buffer.log(TAG, ERROR, {
|
||||||
str1 = key
|
str1 = sbn.logKey
|
||||||
int1 = reason
|
int1 = reason
|
||||||
}, {
|
}, {
|
||||||
"No notification to remove with key $str1 reason=${cancellationReasonDebugString(int1)}"
|
"No notification to remove with key $str1 reason=${cancellationReasonDebugString(int1)}"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logRankingMissing(key: String, rankingMap: RankingMap) {
|
fun logRankingMissing(entry: NotificationEntry, rankingMap: RankingMap) {
|
||||||
buffer.log(TAG, WARNING, { str1 = key }, { "Ranking update is missing ranking for $str1" })
|
buffer.log(TAG, WARNING, {
|
||||||
|
str1 = entry.logKey
|
||||||
|
}, {
|
||||||
|
"Ranking update is missing ranking for $str1"
|
||||||
|
})
|
||||||
buffer.log(TAG, DEBUG, {}, { "Ranking map contents:" })
|
buffer.log(TAG, DEBUG, {}, { "Ranking map contents:" })
|
||||||
for (entry in rankingMap.orderedKeys) {
|
for (entry in rankingMap.orderedKeys) {
|
||||||
buffer.log(TAG, DEBUG, { str1 = entry }, { " $str1" })
|
buffer.log(TAG, DEBUG, { str1 = logKey(entry) }, { " $str1" })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logRemoteExceptionOnNotificationClear(key: String, e: RemoteException) {
|
fun logRemoteExceptionOnNotificationClear(entry: NotificationEntry, e: RemoteException) {
|
||||||
buffer.log(TAG, WTF, {
|
buffer.log(TAG, WTF, {
|
||||||
str1 = key
|
str1 = entry.logKey
|
||||||
str2 = e.toString()
|
str2 = e.toString()
|
||||||
}, {
|
}, {
|
||||||
"RemoteException while attempting to clear $str1:\n$str2"
|
"RemoteException while attempting to clear $str1:\n$str2"
|
||||||
@@ -217,9 +225,9 @@ class NotifCollectionLogger @Inject constructor(
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logLifetimeExtended(key: String, extender: NotifLifetimeExtender) {
|
fun logLifetimeExtended(entry: NotificationEntry, extender: NotifLifetimeExtender) {
|
||||||
buffer.log(TAG, INFO, {
|
buffer.log(TAG, INFO, {
|
||||||
str1 = key
|
str1 = entry.logKey
|
||||||
str2 = extender.name
|
str2 = extender.name
|
||||||
}, {
|
}, {
|
||||||
"LIFETIME EXTENDED: $str1 by $str2"
|
"LIFETIME EXTENDED: $str1 by $str2"
|
||||||
@@ -227,12 +235,12 @@ class NotifCollectionLogger @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun logLifetimeExtensionEnded(
|
fun logLifetimeExtensionEnded(
|
||||||
key: String,
|
entry: NotificationEntry,
|
||||||
extender: NotifLifetimeExtender,
|
extender: NotifLifetimeExtender,
|
||||||
totalExtenders: Int
|
totalExtenders: Int
|
||||||
) {
|
) {
|
||||||
buffer.log(TAG, INFO, {
|
buffer.log(TAG, INFO, {
|
||||||
str1 = key
|
str1 = entry.logKey
|
||||||
str2 = extender.name
|
str2 = extender.name
|
||||||
int1 = totalExtenders
|
int1 = totalExtenders
|
||||||
}, {
|
}, {
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ public class HeadsUpViewBinder {
|
|||||||
params.setUseIncreasedHeadsUpHeight(useIncreasedHeadsUp);
|
params.setUseIncreasedHeadsUpHeight(useIncreasedHeadsUp);
|
||||||
params.requireContentViews(FLAG_CONTENT_VIEW_HEADS_UP);
|
params.requireContentViews(FLAG_CONTENT_VIEW_HEADS_UP);
|
||||||
CancellationSignal signal = mStage.requestRebind(entry, en -> {
|
CancellationSignal signal = mStage.requestRebind(entry, en -> {
|
||||||
mLogger.entryBoundSuccessfully(entry.getKey());
|
mLogger.entryBoundSuccessfully(entry);
|
||||||
en.getRow().setUsesIncreasedHeadsUpHeight(params.useIncreasedHeadsUpHeight());
|
en.getRow().setUsesIncreasedHeadsUpHeight(params.useIncreasedHeadsUpHeight());
|
||||||
// requestRebing promises that if we called cancel before this callback would be
|
// requestRebing promises that if we called cancel before this callback would be
|
||||||
// invoked, then we will not enter this callback, and because we always cancel before
|
// invoked, then we will not enter this callback, and because we always cancel before
|
||||||
@@ -94,7 +94,7 @@ public class HeadsUpViewBinder {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
abortBindCallback(entry);
|
abortBindCallback(entry);
|
||||||
mLogger.startBindingHun(entry.getKey());
|
mLogger.startBindingHun(entry);
|
||||||
mOngoingBindCallbacks.put(entry, signal);
|
mOngoingBindCallbacks.put(entry, signal);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -105,7 +105,7 @@ public class HeadsUpViewBinder {
|
|||||||
public void abortBindCallback(NotificationEntry entry) {
|
public void abortBindCallback(NotificationEntry entry) {
|
||||||
CancellationSignal ongoingBindCallback = mOngoingBindCallbacks.remove(entry);
|
CancellationSignal ongoingBindCallback = mOngoingBindCallbacks.remove(entry);
|
||||||
if (ongoingBindCallback != null) {
|
if (ongoingBindCallback != null) {
|
||||||
mLogger.currentOngoingBindingAborted(entry.getKey());
|
mLogger.currentOngoingBindingAborted(entry);
|
||||||
ongoingBindCallback.cancel();
|
ongoingBindCallback.cancel();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -116,7 +116,7 @@ public class HeadsUpViewBinder {
|
|||||||
public void unbindHeadsUpView(NotificationEntry entry) {
|
public void unbindHeadsUpView(NotificationEntry entry) {
|
||||||
abortBindCallback(entry);
|
abortBindCallback(entry);
|
||||||
mStage.getStageParams(entry).markContentViewsFreeable(FLAG_CONTENT_VIEW_HEADS_UP);
|
mStage.getStageParams(entry).markContentViewsFreeable(FLAG_CONTENT_VIEW_HEADS_UP);
|
||||||
mLogger.entryContentViewMarkedFreeable(entry.getKey());
|
mLogger.entryContentViewMarkedFreeable(entry);
|
||||||
mStage.requestRebind(entry, e -> mLogger.entryUnbound(e.getKey()));
|
mStage.requestRebind(entry, e -> mLogger.entryUnbound(e));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,44 +3,46 @@ package com.android.systemui.statusbar.notification.interruption
|
|||||||
import com.android.systemui.log.LogBuffer
|
import com.android.systemui.log.LogBuffer
|
||||||
import com.android.systemui.log.LogLevel.INFO
|
import com.android.systemui.log.LogLevel.INFO
|
||||||
import com.android.systemui.log.dagger.NotificationHeadsUpLog
|
import com.android.systemui.log.dagger.NotificationHeadsUpLog
|
||||||
|
import com.android.systemui.statusbar.notification.collection.NotificationEntry
|
||||||
|
import com.android.systemui.statusbar.notification.logKey
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
class HeadsUpViewBinderLogger @Inject constructor(@NotificationHeadsUpLog val buffer: LogBuffer) {
|
class HeadsUpViewBinderLogger @Inject constructor(@NotificationHeadsUpLog val buffer: LogBuffer) {
|
||||||
fun startBindingHun(key: String) {
|
fun startBindingHun(entry: NotificationEntry) {
|
||||||
buffer.log(TAG, INFO, {
|
buffer.log(TAG, INFO, {
|
||||||
str1 = key
|
str1 = entry.logKey
|
||||||
}, {
|
}, {
|
||||||
"start binding heads up entry $str1 "
|
"start binding heads up entry $str1 "
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun currentOngoingBindingAborted(key: String) {
|
fun currentOngoingBindingAborted(entry: NotificationEntry) {
|
||||||
buffer.log(TAG, INFO, {
|
buffer.log(TAG, INFO, {
|
||||||
str1 = key
|
str1 = entry.logKey
|
||||||
}, {
|
}, {
|
||||||
"aborted potential ongoing heads up entry binding $str1 "
|
"aborted potential ongoing heads up entry binding $str1 "
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun entryBoundSuccessfully(key: String) {
|
fun entryBoundSuccessfully(entry: NotificationEntry) {
|
||||||
buffer.log(TAG, INFO, {
|
buffer.log(TAG, INFO, {
|
||||||
str1 = key
|
str1 = entry.logKey
|
||||||
}, {
|
}, {
|
||||||
"heads up entry bound successfully $str1 "
|
"heads up entry bound successfully $str1 "
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun entryUnbound(key: String) {
|
fun entryUnbound(entry: NotificationEntry) {
|
||||||
buffer.log(TAG, INFO, {
|
buffer.log(TAG, INFO, {
|
||||||
str1 = key
|
str1 = entry.logKey
|
||||||
}, {
|
}, {
|
||||||
"heads up entry unbound successfully $str1 "
|
"heads up entry unbound successfully $str1 "
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun entryContentViewMarkedFreeable(key: String) {
|
fun entryContentViewMarkedFreeable(entry: NotificationEntry) {
|
||||||
buffer.log(TAG, INFO, {
|
buffer.log(TAG, INFO, {
|
||||||
str1 = key
|
str1 = entry.logKey
|
||||||
}, {
|
}, {
|
||||||
"start unbinding heads up entry $str1 "
|
"start unbinding heads up entry $str1 "
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -16,11 +16,12 @@
|
|||||||
|
|
||||||
package com.android.systemui.statusbar.notification.interruption
|
package com.android.systemui.statusbar.notification.interruption
|
||||||
|
|
||||||
import android.service.notification.StatusBarNotification
|
|
||||||
import com.android.systemui.log.LogBuffer
|
import com.android.systemui.log.LogBuffer
|
||||||
import com.android.systemui.log.LogLevel.DEBUG
|
import com.android.systemui.log.LogLevel.DEBUG
|
||||||
import com.android.systemui.log.LogLevel.INFO
|
import com.android.systemui.log.LogLevel.INFO
|
||||||
import com.android.systemui.log.dagger.NotificationInterruptLog
|
import com.android.systemui.log.dagger.NotificationInterruptLog
|
||||||
|
import com.android.systemui.statusbar.notification.collection.NotificationEntry
|
||||||
|
import com.android.systemui.statusbar.notification.logKey
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
class NotificationInterruptLogger @Inject constructor(
|
class NotificationInterruptLogger @Inject constructor(
|
||||||
@@ -41,17 +42,17 @@ class NotificationInterruptLogger @Inject constructor(
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logNoBubbleNotAllowed(sbn: StatusBarNotification) {
|
fun logNoBubbleNotAllowed(entry: NotificationEntry) {
|
||||||
buffer.log(TAG, DEBUG, {
|
buffer.log(TAG, DEBUG, {
|
||||||
str1 = sbn.key
|
str1 = entry.logKey
|
||||||
}, {
|
}, {
|
||||||
"No bubble up: not allowed to bubble: $str1"
|
"No bubble up: not allowed to bubble: $str1"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logNoBubbleNoMetadata(sbn: StatusBarNotification) {
|
fun logNoBubbleNoMetadata(entry: NotificationEntry) {
|
||||||
buffer.log(TAG, DEBUG, {
|
buffer.log(TAG, DEBUG, {
|
||||||
str1 = sbn.key
|
str1 = entry.logKey
|
||||||
}, {
|
}, {
|
||||||
"No bubble up: notification: $str1 doesn't have valid metadata"
|
"No bubble up: notification: $str1 doesn't have valid metadata"
|
||||||
})
|
})
|
||||||
@@ -64,89 +65,89 @@ class NotificationInterruptLogger @Inject constructor(
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logNoHeadsUpPackageSnoozed(sbn: StatusBarNotification) {
|
fun logNoHeadsUpPackageSnoozed(entry: NotificationEntry) {
|
||||||
buffer.log(TAG, DEBUG, {
|
buffer.log(TAG, DEBUG, {
|
||||||
str1 = sbn.key
|
str1 = entry.logKey
|
||||||
}, {
|
}, {
|
||||||
"No alerting: snoozed package: $str1"
|
"No alerting: snoozed package: $str1"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logNoHeadsUpAlreadyBubbled(sbn: StatusBarNotification) {
|
fun logNoHeadsUpAlreadyBubbled(entry: NotificationEntry) {
|
||||||
buffer.log(TAG, DEBUG, {
|
buffer.log(TAG, DEBUG, {
|
||||||
str1 = sbn.key
|
str1 = entry.logKey
|
||||||
}, {
|
}, {
|
||||||
"No heads up: in unlocked shade where notification is shown as a bubble: $str1"
|
"No heads up: in unlocked shade where notification is shown as a bubble: $str1"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logNoHeadsUpSuppressedByDnd(sbn: StatusBarNotification) {
|
fun logNoHeadsUpSuppressedByDnd(entry: NotificationEntry) {
|
||||||
buffer.log(TAG, DEBUG, {
|
buffer.log(TAG, DEBUG, {
|
||||||
str1 = sbn.key
|
str1 = entry.logKey
|
||||||
}, {
|
}, {
|
||||||
"No heads up: suppressed by DND: $str1"
|
"No heads up: suppressed by DND: $str1"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logNoHeadsUpNotImportant(sbn: StatusBarNotification) {
|
fun logNoHeadsUpNotImportant(entry: NotificationEntry) {
|
||||||
buffer.log(TAG, DEBUG, {
|
buffer.log(TAG, DEBUG, {
|
||||||
str1 = sbn.key
|
str1 = entry.logKey
|
||||||
}, {
|
}, {
|
||||||
"No heads up: unimportant notification: $str1"
|
"No heads up: unimportant notification: $str1"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logNoHeadsUpNotInUse(sbn: StatusBarNotification) {
|
fun logNoHeadsUpNotInUse(entry: NotificationEntry) {
|
||||||
buffer.log(TAG, DEBUG, {
|
buffer.log(TAG, DEBUG, {
|
||||||
str1 = sbn.key
|
str1 = entry.logKey
|
||||||
}, {
|
}, {
|
||||||
"No heads up: not in use: $str1"
|
"No heads up: not in use: $str1"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logNoHeadsUpSuppressedBy(
|
fun logNoHeadsUpSuppressedBy(
|
||||||
sbn: StatusBarNotification,
|
entry: NotificationEntry,
|
||||||
suppressor: NotificationInterruptSuppressor
|
suppressor: NotificationInterruptSuppressor
|
||||||
) {
|
) {
|
||||||
buffer.log(TAG, DEBUG, {
|
buffer.log(TAG, DEBUG, {
|
||||||
str1 = sbn.key
|
str1 = entry.logKey
|
||||||
str2 = suppressor.name
|
str2 = suppressor.name
|
||||||
}, {
|
}, {
|
||||||
"No heads up: aborted by suppressor: $str2 sbnKey=$str1"
|
"No heads up: aborted by suppressor: $str2 sbnKey=$str1"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logHeadsUp(sbn: StatusBarNotification) {
|
fun logHeadsUp(entry: NotificationEntry) {
|
||||||
buffer.log(TAG, DEBUG, {
|
buffer.log(TAG, DEBUG, {
|
||||||
str1 = sbn.key
|
str1 = entry.logKey
|
||||||
}, {
|
}, {
|
||||||
"Heads up: $str1"
|
"Heads up: $str1"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logNoAlertingFilteredOut(sbn: StatusBarNotification) {
|
fun logNoAlertingFilteredOut(entry: NotificationEntry) {
|
||||||
buffer.log(TAG, DEBUG, {
|
buffer.log(TAG, DEBUG, {
|
||||||
str1 = sbn.key
|
str1 = entry.logKey
|
||||||
}, {
|
}, {
|
||||||
"No alerting: filtered notification: $str1"
|
"No alerting: filtered notification: $str1"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logNoAlertingGroupAlertBehavior(sbn: StatusBarNotification) {
|
fun logNoAlertingGroupAlertBehavior(entry: NotificationEntry) {
|
||||||
buffer.log(TAG, DEBUG, {
|
buffer.log(TAG, DEBUG, {
|
||||||
str1 = sbn.key
|
str1 = entry.logKey
|
||||||
}, {
|
}, {
|
||||||
"No alerting: suppressed due to group alert behavior: $str1"
|
"No alerting: suppressed due to group alert behavior: $str1"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logNoAlertingSuppressedBy(
|
fun logNoAlertingSuppressedBy(
|
||||||
sbn: StatusBarNotification,
|
entry: NotificationEntry,
|
||||||
suppressor: NotificationInterruptSuppressor,
|
suppressor: NotificationInterruptSuppressor,
|
||||||
awake: Boolean
|
awake: Boolean
|
||||||
) {
|
) {
|
||||||
buffer.log(TAG, DEBUG, {
|
buffer.log(TAG, DEBUG, {
|
||||||
str1 = sbn.key
|
str1 = entry.logKey
|
||||||
str2 = suppressor.name
|
str2 = suppressor.name
|
||||||
bool1 = awake
|
bool1 = awake
|
||||||
}, {
|
}, {
|
||||||
@@ -154,65 +155,65 @@ class NotificationInterruptLogger @Inject constructor(
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logNoAlertingRecentFullscreen(sbn: StatusBarNotification) {
|
fun logNoAlertingRecentFullscreen(entry: NotificationEntry) {
|
||||||
buffer.log(TAG, DEBUG, {
|
buffer.log(TAG, DEBUG, {
|
||||||
str1 = sbn.key
|
str1 = entry.logKey
|
||||||
}, {
|
}, {
|
||||||
"No alerting: recent fullscreen: $str1"
|
"No alerting: recent fullscreen: $str1"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logNoPulsingSettingDisabled(sbn: StatusBarNotification) {
|
fun logNoPulsingSettingDisabled(entry: NotificationEntry) {
|
||||||
buffer.log(TAG, DEBUG, {
|
buffer.log(TAG, DEBUG, {
|
||||||
str1 = sbn.key
|
str1 = entry.logKey
|
||||||
}, {
|
}, {
|
||||||
"No pulsing: disabled by setting: $str1"
|
"No pulsing: disabled by setting: $str1"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logNoPulsingBatteryDisabled(sbn: StatusBarNotification) {
|
fun logNoPulsingBatteryDisabled(entry: NotificationEntry) {
|
||||||
buffer.log(TAG, DEBUG, {
|
buffer.log(TAG, DEBUG, {
|
||||||
str1 = sbn.key
|
str1 = entry.logKey
|
||||||
}, {
|
}, {
|
||||||
"No pulsing: disabled by battery saver: $str1"
|
"No pulsing: disabled by battery saver: $str1"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logNoPulsingNoAlert(sbn: StatusBarNotification) {
|
fun logNoPulsingNoAlert(entry: NotificationEntry) {
|
||||||
buffer.log(TAG, DEBUG, {
|
buffer.log(TAG, DEBUG, {
|
||||||
str1 = sbn.key
|
str1 = entry.logKey
|
||||||
}, {
|
}, {
|
||||||
"No pulsing: notification shouldn't alert: $str1"
|
"No pulsing: notification shouldn't alert: $str1"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logNoPulsingNoAmbientEffect(sbn: StatusBarNotification) {
|
fun logNoPulsingNoAmbientEffect(entry: NotificationEntry) {
|
||||||
buffer.log(TAG, DEBUG, {
|
buffer.log(TAG, DEBUG, {
|
||||||
str1 = sbn.key
|
str1 = entry.logKey
|
||||||
}, {
|
}, {
|
||||||
"No pulsing: ambient effect suppressed: $str1"
|
"No pulsing: ambient effect suppressed: $str1"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logNoPulsingNotImportant(sbn: StatusBarNotification) {
|
fun logNoPulsingNotImportant(entry: NotificationEntry) {
|
||||||
buffer.log(TAG, DEBUG, {
|
buffer.log(TAG, DEBUG, {
|
||||||
str1 = sbn.key
|
str1 = entry.logKey
|
||||||
}, {
|
}, {
|
||||||
"No pulsing: not important enough: $str1"
|
"No pulsing: not important enough: $str1"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logPulsing(sbn: StatusBarNotification) {
|
fun logPulsing(entry: NotificationEntry) {
|
||||||
buffer.log(TAG, DEBUG, {
|
buffer.log(TAG, DEBUG, {
|
||||||
str1 = sbn.key
|
str1 = entry.logKey
|
||||||
}, {
|
}, {
|
||||||
"Pulsing: $str1"
|
"Pulsing: $str1"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun keyguardHideNotification(key: String) {
|
fun keyguardHideNotification(entry: NotificationEntry) {
|
||||||
buffer.log(TAG, DEBUG, {
|
buffer.log(TAG, DEBUG, {
|
||||||
str1 = key
|
str1 = entry.logKey
|
||||||
}, {
|
}, {
|
||||||
"Keyguard Hide Notification: $str1"
|
"Keyguard Hide Notification: $str1"
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -147,14 +147,14 @@ public class NotificationInterruptStateProviderImpl implements NotificationInter
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!entry.canBubble()) {
|
if (!entry.canBubble()) {
|
||||||
mLogger.logNoBubbleNotAllowed(sbn);
|
mLogger.logNoBubbleNotAllowed(entry);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entry.getBubbleMetadata() == null
|
if (entry.getBubbleMetadata() == null
|
||||||
|| (entry.getBubbleMetadata().getShortcutId() == null
|
|| (entry.getBubbleMetadata().getShortcutId() == null
|
||||||
&& entry.getBubbleMetadata().getIntent() == null)) {
|
&& entry.getBubbleMetadata().getIntent() == null)) {
|
||||||
mLogger.logNoBubbleNoMetadata(sbn);
|
mLogger.logNoBubbleNoMetadata(entry);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -203,23 +203,23 @@ public class NotificationInterruptStateProviderImpl implements NotificationInter
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (isSnoozedPackage(sbn)) {
|
if (isSnoozedPackage(sbn)) {
|
||||||
mLogger.logNoHeadsUpPackageSnoozed(sbn);
|
mLogger.logNoHeadsUpPackageSnoozed(entry);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean inShade = mStatusBarStateController.getState() == SHADE;
|
boolean inShade = mStatusBarStateController.getState() == SHADE;
|
||||||
if (entry.isBubble() && inShade) {
|
if (entry.isBubble() && inShade) {
|
||||||
mLogger.logNoHeadsUpAlreadyBubbled(sbn);
|
mLogger.logNoHeadsUpAlreadyBubbled(entry);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entry.shouldSuppressPeek()) {
|
if (entry.shouldSuppressPeek()) {
|
||||||
mLogger.logNoHeadsUpSuppressedByDnd(sbn);
|
mLogger.logNoHeadsUpSuppressedByDnd(entry);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entry.getImportance() < NotificationManager.IMPORTANCE_HIGH) {
|
if (entry.getImportance() < NotificationManager.IMPORTANCE_HIGH) {
|
||||||
mLogger.logNoHeadsUpNotImportant(sbn);
|
mLogger.logNoHeadsUpNotImportant(entry);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -232,17 +232,17 @@ public class NotificationInterruptStateProviderImpl implements NotificationInter
|
|||||||
boolean inUse = mPowerManager.isScreenOn() && !isDreaming;
|
boolean inUse = mPowerManager.isScreenOn() && !isDreaming;
|
||||||
|
|
||||||
if (!inUse) {
|
if (!inUse) {
|
||||||
mLogger.logNoHeadsUpNotInUse(sbn);
|
mLogger.logNoHeadsUpNotInUse(entry);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < mSuppressors.size(); i++) {
|
for (int i = 0; i < mSuppressors.size(); i++) {
|
||||||
if (mSuppressors.get(i).suppressAwakeHeadsUp(entry)) {
|
if (mSuppressors.get(i).suppressAwakeHeadsUp(entry)) {
|
||||||
mLogger.logNoHeadsUpSuppressedBy(sbn, mSuppressors.get(i));
|
mLogger.logNoHeadsUpSuppressedBy(entry, mSuppressors.get(i));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mLogger.logHeadsUp(sbn);
|
mLogger.logHeadsUp(entry);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -254,38 +254,36 @@ public class NotificationInterruptStateProviderImpl implements NotificationInter
|
|||||||
* @return true if the entry should ambient pulse, false otherwise
|
* @return true if the entry should ambient pulse, false otherwise
|
||||||
*/
|
*/
|
||||||
private boolean shouldHeadsUpWhenDozing(NotificationEntry entry) {
|
private boolean shouldHeadsUpWhenDozing(NotificationEntry entry) {
|
||||||
StatusBarNotification sbn = entry.getSbn();
|
|
||||||
|
|
||||||
if (!mAmbientDisplayConfiguration.pulseOnNotificationEnabled(UserHandle.USER_CURRENT)) {
|
if (!mAmbientDisplayConfiguration.pulseOnNotificationEnabled(UserHandle.USER_CURRENT)) {
|
||||||
mLogger.logNoPulsingSettingDisabled(sbn);
|
mLogger.logNoPulsingSettingDisabled(entry);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mBatteryController.isAodPowerSave()) {
|
if (mBatteryController.isAodPowerSave()) {
|
||||||
mLogger.logNoPulsingBatteryDisabled(sbn);
|
mLogger.logNoPulsingBatteryDisabled(entry);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!canAlertCommon(entry)) {
|
if (!canAlertCommon(entry)) {
|
||||||
mLogger.logNoPulsingNoAlert(sbn);
|
mLogger.logNoPulsingNoAlert(entry);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!canAlertHeadsUpCommon(entry)) {
|
if (!canAlertHeadsUpCommon(entry)) {
|
||||||
mLogger.logNoPulsingNoAlert(sbn);
|
mLogger.logNoPulsingNoAlert(entry);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entry.shouldSuppressAmbient()) {
|
if (entry.shouldSuppressAmbient()) {
|
||||||
mLogger.logNoPulsingNoAmbientEffect(sbn);
|
mLogger.logNoPulsingNoAmbientEffect(entry);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entry.getImportance() < NotificationManager.IMPORTANCE_DEFAULT) {
|
if (entry.getImportance() < NotificationManager.IMPORTANCE_DEFAULT) {
|
||||||
mLogger.logNoPulsingNotImportant(sbn);
|
mLogger.logNoPulsingNotImportant(entry);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
mLogger.logPulsing(sbn);
|
mLogger.logPulsing(entry);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -296,22 +294,20 @@ public class NotificationInterruptStateProviderImpl implements NotificationInter
|
|||||||
* @return true if these checks pass, false if the notification should not alert
|
* @return true if these checks pass, false if the notification should not alert
|
||||||
*/
|
*/
|
||||||
private boolean canAlertCommon(NotificationEntry entry) {
|
private boolean canAlertCommon(NotificationEntry entry) {
|
||||||
StatusBarNotification sbn = entry.getSbn();
|
|
||||||
|
|
||||||
if (!mFlags.isNewPipelineEnabled() && mNotificationFilter.shouldFilterOut(entry)) {
|
if (!mFlags.isNewPipelineEnabled() && mNotificationFilter.shouldFilterOut(entry)) {
|
||||||
mLogger.logNoAlertingFilteredOut(sbn);
|
mLogger.logNoAlertingFilteredOut(entry);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < mSuppressors.size(); i++) {
|
for (int i = 0; i < mSuppressors.size(); i++) {
|
||||||
if (mSuppressors.get(i).suppressInterruptions(entry)) {
|
if (mSuppressors.get(i).suppressInterruptions(entry)) {
|
||||||
mLogger.logNoAlertingSuppressedBy(sbn, mSuppressors.get(i), /* awake */ false);
|
mLogger.logNoAlertingSuppressedBy(entry, mSuppressors.get(i), /* awake */ false);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mKeyguardNotificationVisibilityProvider.shouldHideNotification(entry)) {
|
if (mKeyguardNotificationVisibilityProvider.shouldHideNotification(entry)) {
|
||||||
mLogger.keyguardHideNotification(entry.getKey());
|
mLogger.keyguardHideNotification(entry);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -329,12 +325,12 @@ public class NotificationInterruptStateProviderImpl implements NotificationInter
|
|||||||
|
|
||||||
// Don't alert notifications that are suppressed due to group alert behavior
|
// Don't alert notifications that are suppressed due to group alert behavior
|
||||||
if (sbn.isGroup() && sbn.getNotification().suppressAlertingDueToGrouping()) {
|
if (sbn.isGroup() && sbn.getNotification().suppressAlertingDueToGrouping()) {
|
||||||
mLogger.logNoAlertingGroupAlertBehavior(sbn);
|
mLogger.logNoAlertingGroupAlertBehavior(entry);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entry.hasJustLaunchedFullScreenIntent()) {
|
if (entry.hasJustLaunchedFullScreenIntent()) {
|
||||||
mLogger.logNoAlertingRecentFullscreen(sbn);
|
mLogger.logNoAlertingRecentFullscreen(entry);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -352,7 +348,7 @@ public class NotificationInterruptStateProviderImpl implements NotificationInter
|
|||||||
|
|
||||||
for (int i = 0; i < mSuppressors.size(); i++) {
|
for (int i = 0; i < mSuppressors.size(); i++) {
|
||||||
if (mSuppressors.get(i).suppressAwakeInterruptions(entry)) {
|
if (mSuppressors.get(i).suppressAwakeInterruptions(entry)) {
|
||||||
mLogger.logNoAlertingSuppressedBy(sbn, mSuppressors.get(i), /* awake */ true);
|
mLogger.logNoAlertingSuppressedBy(entry, mSuppressors.get(i), /* awake */ true);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ package com.android.systemui.statusbar.notification.row;
|
|||||||
import static com.android.systemui.Dependency.ALLOW_NOTIFICATION_LONG_PRESS_NAME;
|
import static com.android.systemui.Dependency.ALLOW_NOTIFICATION_LONG_PRESS_NAME;
|
||||||
import static com.android.systemui.statusbar.NotificationRemoteInputManager.ENABLE_REMOTE_INPUT;
|
import static com.android.systemui.statusbar.NotificationRemoteInputManager.ENABLE_REMOTE_INPUT;
|
||||||
import static com.android.systemui.statusbar.StatusBarState.KEYGUARD;
|
import static com.android.systemui.statusbar.StatusBarState.KEYGUARD;
|
||||||
|
import static com.android.systemui.statusbar.notification.NotificationUtils.logKey;
|
||||||
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
@@ -247,7 +248,7 @@ public class ExpandableNotificationRowController implements NotifViewController
|
|||||||
@Override
|
@Override
|
||||||
@NonNull
|
@NonNull
|
||||||
public String getNodeLabel() {
|
public String getNodeLabel() {
|
||||||
return mView.getEntry().getKey();
|
return logKey(mView.getEntry());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -112,7 +112,8 @@ public final class NotifBindPipeline {
|
|||||||
public void manageRow(
|
public void manageRow(
|
||||||
@NonNull NotificationEntry entry,
|
@NonNull NotificationEntry entry,
|
||||||
@NonNull ExpandableNotificationRow row) {
|
@NonNull ExpandableNotificationRow row) {
|
||||||
mLogger.logManagedRow(entry.getKey());
|
mLogger.logManagedRow(entry);
|
||||||
|
mLogger.logManagedRow(entry);
|
||||||
|
|
||||||
final BindEntry bindEntry = getBindEntry(entry);
|
final BindEntry bindEntry = getBindEntry(entry);
|
||||||
if (bindEntry == null) {
|
if (bindEntry == null) {
|
||||||
@@ -154,12 +155,12 @@ public final class NotifBindPipeline {
|
|||||||
* the real work once rather than repeatedly start and cancel it.
|
* the real work once rather than repeatedly start and cancel it.
|
||||||
*/
|
*/
|
||||||
private void requestPipelineRun(NotificationEntry entry) {
|
private void requestPipelineRun(NotificationEntry entry) {
|
||||||
mLogger.logRequestPipelineRun(entry.getKey());
|
mLogger.logRequestPipelineRun(entry);
|
||||||
|
|
||||||
final BindEntry bindEntry = getBindEntry(entry);
|
final BindEntry bindEntry = getBindEntry(entry);
|
||||||
if (bindEntry.row == null) {
|
if (bindEntry.row == null) {
|
||||||
// Row is not managed yet but may be soon. Stop for now.
|
// Row is not managed yet but may be soon. Stop for now.
|
||||||
mLogger.logRequestPipelineRowNotSet(entry.getKey());
|
mLogger.logRequestPipelineRowNotSet(entry);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -177,7 +178,7 @@ public final class NotifBindPipeline {
|
|||||||
* callbacks when the run finishes. If a run is already in progress, it is restarted.
|
* callbacks when the run finishes. If a run is already in progress, it is restarted.
|
||||||
*/
|
*/
|
||||||
private void startPipeline(NotificationEntry entry) {
|
private void startPipeline(NotificationEntry entry) {
|
||||||
mLogger.logStartPipeline(entry.getKey());
|
mLogger.logStartPipeline(entry);
|
||||||
|
|
||||||
if (mStage == null) {
|
if (mStage == null) {
|
||||||
throw new IllegalStateException("No stage was ever set on the pipeline");
|
throw new IllegalStateException("No stage was ever set on the pipeline");
|
||||||
@@ -193,7 +194,7 @@ public final class NotifBindPipeline {
|
|||||||
final BindEntry bindEntry = getBindEntry(entry);
|
final BindEntry bindEntry = getBindEntry(entry);
|
||||||
final Set<BindCallback> callbacks = bindEntry.callbacks;
|
final Set<BindCallback> callbacks = bindEntry.callbacks;
|
||||||
|
|
||||||
mLogger.logFinishedPipeline(entry.getKey(), callbacks.size());
|
mLogger.logFinishedPipeline(entry, callbacks.size());
|
||||||
|
|
||||||
bindEntry.invalidated = false;
|
bindEntry.invalidated = false;
|
||||||
// Move all callbacks to separate list as callbacks may themselves add/remove callbacks.
|
// Move all callbacks to separate list as callbacks may themselves add/remove callbacks.
|
||||||
|
|||||||
@@ -19,6 +19,8 @@ package com.android.systemui.statusbar.notification.row
|
|||||||
import com.android.systemui.log.LogBuffer
|
import com.android.systemui.log.LogBuffer
|
||||||
import com.android.systemui.log.LogLevel.INFO
|
import com.android.systemui.log.LogLevel.INFO
|
||||||
import com.android.systemui.log.dagger.NotificationLog
|
import com.android.systemui.log.dagger.NotificationLog
|
||||||
|
import com.android.systemui.statusbar.notification.collection.NotificationEntry
|
||||||
|
import com.android.systemui.statusbar.notification.logKey
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
class NotifBindPipelineLogger @Inject constructor(
|
class NotifBindPipelineLogger @Inject constructor(
|
||||||
@@ -32,41 +34,41 @@ class NotifBindPipelineLogger @Inject constructor(
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logManagedRow(notifKey: String) {
|
fun logManagedRow(entry: NotificationEntry) {
|
||||||
buffer.log(TAG, INFO, {
|
buffer.log(TAG, INFO, {
|
||||||
str1 = notifKey
|
str1 = entry.logKey
|
||||||
}, {
|
}, {
|
||||||
"Row set for notif: $str1"
|
"Row set for notif: $str1"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logRequestPipelineRun(notifKey: String) {
|
fun logRequestPipelineRun(entry: NotificationEntry) {
|
||||||
buffer.log(TAG, INFO, {
|
buffer.log(TAG, INFO, {
|
||||||
str1 = notifKey
|
str1 = entry.logKey
|
||||||
}, {
|
}, {
|
||||||
"Request pipeline run for notif: $str1"
|
"Request pipeline run for notif: $str1"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logRequestPipelineRowNotSet(notifKey: String) {
|
fun logRequestPipelineRowNotSet(entry: NotificationEntry) {
|
||||||
buffer.log(TAG, INFO, {
|
buffer.log(TAG, INFO, {
|
||||||
str1 = notifKey
|
str1 = entry.logKey
|
||||||
}, {
|
}, {
|
||||||
"Row is not set so pipeline will not run. notif = $str1"
|
"Row is not set so pipeline will not run. notif = $str1"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logStartPipeline(notifKey: String) {
|
fun logStartPipeline(entry: NotificationEntry) {
|
||||||
buffer.log(TAG, INFO, {
|
buffer.log(TAG, INFO, {
|
||||||
str1 = notifKey
|
str1 = entry.logKey
|
||||||
}, {
|
}, {
|
||||||
"Start pipeline for notif: $str1"
|
"Start pipeline for notif: $str1"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logFinishedPipeline(notifKey: String, numCallbacks: Int) {
|
fun logFinishedPipeline(entry: NotificationEntry, numCallbacks: Int) {
|
||||||
buffer.log(TAG, INFO, {
|
buffer.log(TAG, INFO, {
|
||||||
str1 = notifKey
|
str1 = entry.logKey
|
||||||
int1 = numCallbacks
|
int1 = numCallbacks
|
||||||
}, {
|
}, {
|
||||||
"Finished pipeline for notif $str1 with $int1 callbacks"
|
"Finished pipeline for notif $str1 with $int1 callbacks"
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ public class RowContentBindStage extends BindStage<RowContentBindParams> {
|
|||||||
@NonNull StageCallback callback) {
|
@NonNull StageCallback callback) {
|
||||||
RowContentBindParams params = getStageParams(entry);
|
RowContentBindParams params = getStageParams(entry);
|
||||||
|
|
||||||
mLogger.logStageParams(entry.getKey(), params.toString());
|
mLogger.logStageParams(entry, params);
|
||||||
|
|
||||||
// Resolve content to bind/unbind.
|
// Resolve content to bind/unbind.
|
||||||
@InflationFlag int inflationFlags = params.getContentViews();
|
@InflationFlag int inflationFlags = params.getContentViews();
|
||||||
|
|||||||
@@ -19,17 +19,19 @@ package com.android.systemui.statusbar.notification.row
|
|||||||
import com.android.systemui.log.LogBuffer
|
import com.android.systemui.log.LogBuffer
|
||||||
import com.android.systemui.log.LogLevel.INFO
|
import com.android.systemui.log.LogLevel.INFO
|
||||||
import com.android.systemui.log.dagger.NotificationLog
|
import com.android.systemui.log.dagger.NotificationLog
|
||||||
|
import com.android.systemui.statusbar.notification.collection.NotificationEntry
|
||||||
|
import com.android.systemui.statusbar.notification.logKey
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
class RowContentBindStageLogger @Inject constructor(
|
class RowContentBindStageLogger @Inject constructor(
|
||||||
@NotificationLog private val buffer: LogBuffer
|
@NotificationLog private val buffer: LogBuffer
|
||||||
) {
|
) {
|
||||||
fun logStageParams(notifKey: String, stageParams: String) {
|
fun logStageParams(entry: NotificationEntry, stageParams: RowContentBindParams) {
|
||||||
buffer.log(TAG, INFO, {
|
buffer.log(TAG, INFO, {
|
||||||
str1 = notifKey
|
str1 = entry.logKey
|
||||||
str2 = stageParams
|
str2 = stageParams.toString()
|
||||||
}, {
|
}, {
|
||||||
"Invalidated notif $str1 with params: \n$str2"
|
"Invalidated notif $str1 with params: $str2"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -748,19 +748,20 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void logHunSkippedForUnexpectedState(String key, boolean expected, boolean actual) {
|
private void logHunSkippedForUnexpectedState(ExpandableNotificationRow enr,
|
||||||
|
boolean expected, boolean actual) {
|
||||||
if (mLogger == null) return;
|
if (mLogger == null) return;
|
||||||
mLogger.hunSkippedForUnexpectedState(key, expected, actual);
|
mLogger.hunSkippedForUnexpectedState(enr.getEntry(), expected, actual);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void logHunAnimationSkipped(String key, String reason) {
|
private void logHunAnimationSkipped(ExpandableNotificationRow enr, String reason) {
|
||||||
if (mLogger == null) return;
|
if (mLogger == null) return;
|
||||||
mLogger.hunAnimationSkipped(key, reason);
|
mLogger.hunAnimationSkipped(enr.getEntry(), reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void logHunAnimationEventAdded(String key, int type) {
|
private void logHunAnimationEventAdded(ExpandableNotificationRow enr, int type) {
|
||||||
if (mLogger == null) return;
|
if (mLogger == null) return;
|
||||||
mLogger.hunAnimationEventAdded(key, type);
|
mLogger.hunAnimationEventAdded(enr.getEntry(), type);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onDrawDebug(Canvas canvas) {
|
private void onDrawDebug(Canvas canvas) {
|
||||||
@@ -3174,7 +3175,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
|
|||||||
if (isHeadsUp != row.isHeadsUp()) {
|
if (isHeadsUp != row.isHeadsUp()) {
|
||||||
// For cases where we have a heads up showing and appearing again we shouldn't
|
// For cases where we have a heads up showing and appearing again we shouldn't
|
||||||
// do the animations at all.
|
// do the animations at all.
|
||||||
logHunSkippedForUnexpectedState(key, isHeadsUp, row.isHeadsUp());
|
logHunSkippedForUnexpectedState(row, isHeadsUp, row.isHeadsUp());
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
int type = AnimationEvent.ANIMATION_TYPE_HEADS_UP_OTHER;
|
int type = AnimationEvent.ANIMATION_TYPE_HEADS_UP_OTHER;
|
||||||
@@ -3192,7 +3193,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
|
|||||||
if (row.isChildInGroup()) {
|
if (row.isChildInGroup()) {
|
||||||
// We can otherwise get stuck in there if it was just isolated
|
// We can otherwise get stuck in there if it was just isolated
|
||||||
row.setHeadsUpAnimatingAway(false);
|
row.setHeadsUpAnimatingAway(false);
|
||||||
logHunAnimationSkipped(key, "row is child in group");
|
logHunAnimationSkipped(row, "row is child in group");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -3200,7 +3201,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
|
|||||||
if (viewState == null) {
|
if (viewState == null) {
|
||||||
// A view state was never generated for this view, so we don't need to animate
|
// A view state was never generated for this view, so we don't need to animate
|
||||||
// this. This may happen with notification children.
|
// this. This may happen with notification children.
|
||||||
logHunAnimationSkipped(key, "row has no viewState");
|
logHunAnimationSkipped(row, "row has no viewState");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (isHeadsUp && (mAddedHeadsUpChildren.contains(row) || pinnedAndClosed)) {
|
if (isHeadsUp && (mAddedHeadsUpChildren.contains(row) || pinnedAndClosed)) {
|
||||||
@@ -3224,7 +3225,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
|
|||||||
+ " onBottom=" + onBottom
|
+ " onBottom=" + onBottom
|
||||||
+ " row=" + row.getEntry().getKey());
|
+ " row=" + row.getEntry().getKey());
|
||||||
}
|
}
|
||||||
logHunAnimationEventAdded(key, type);
|
logHunAnimationEventAdded(row, type);
|
||||||
}
|
}
|
||||||
mHeadsUpChangeAnimations.clear();
|
mHeadsUpChangeAnimations.clear();
|
||||||
mAddedHeadsUpChildren.clear();
|
mAddedHeadsUpChildren.clear();
|
||||||
@@ -4360,8 +4361,6 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Update colors of "dismiss" and "empty shade" views.
|
* Update colors of "dismiss" and "empty shade" views.
|
||||||
*
|
|
||||||
* @param lightTheme True if light theme should be used.
|
|
||||||
*/
|
*/
|
||||||
@ShadeViewRefactor(RefactorComponent.DECORATOR)
|
@ShadeViewRefactor(RefactorComponent.DECORATOR)
|
||||||
void updateDecorViews() {
|
void updateDecorViews() {
|
||||||
@@ -4777,8 +4776,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
|
|||||||
if (SPEW) {
|
if (SPEW) {
|
||||||
Log.v(TAG, "generateHeadsUpAnimation: previous hun appear animation cancelled");
|
Log.v(TAG, "generateHeadsUpAnimation: previous hun appear animation cancelled");
|
||||||
}
|
}
|
||||||
logHunAnimationSkipped(row.getEntry().getKey(),
|
logHunAnimationSkipped(row, "previous hun appear animation cancelled");
|
||||||
"previous hun appear animation cancelled");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mHeadsUpChangeAnimations.add(new Pair<>(row, isHeadsUp));
|
mHeadsUpChangeAnimations.add(new Pair<>(row, isHeadsUp));
|
||||||
|
|||||||
@@ -3,21 +3,27 @@ package com.android.systemui.statusbar.notification.stack
|
|||||||
import com.android.systemui.log.LogBuffer
|
import com.android.systemui.log.LogBuffer
|
||||||
import com.android.systemui.log.LogLevel.INFO
|
import com.android.systemui.log.LogLevel.INFO
|
||||||
import com.android.systemui.log.dagger.NotificationHeadsUpLog
|
import com.android.systemui.log.dagger.NotificationHeadsUpLog
|
||||||
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout.AnimationEvent.*
|
import com.android.systemui.statusbar.notification.collection.NotificationEntry
|
||||||
|
import com.android.systemui.statusbar.notification.logKey
|
||||||
|
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout.AnimationEvent.ANIMATION_TYPE_ADD
|
||||||
|
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout.AnimationEvent.ANIMATION_TYPE_HEADS_UP_APPEAR
|
||||||
|
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout.AnimationEvent.ANIMATION_TYPE_HEADS_UP_DISAPPEAR
|
||||||
|
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout.AnimationEvent.ANIMATION_TYPE_HEADS_UP_DISAPPEAR_CLICK
|
||||||
|
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout.AnimationEvent.ANIMATION_TYPE_HEADS_UP_OTHER
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
class NotificationStackScrollLogger @Inject constructor(
|
class NotificationStackScrollLogger @Inject constructor(
|
||||||
@NotificationHeadsUpLog private val buffer: LogBuffer
|
@NotificationHeadsUpLog private val buffer: LogBuffer
|
||||||
) {
|
) {
|
||||||
fun hunAnimationSkipped(key: String, reason: String) {
|
fun hunAnimationSkipped(entry: NotificationEntry, reason: String) {
|
||||||
buffer.log(TAG, INFO, {
|
buffer.log(TAG, INFO, {
|
||||||
str1 = key
|
str1 = entry.logKey
|
||||||
str2 = reason
|
str2 = reason
|
||||||
}, {
|
}, {
|
||||||
"heads up animation skipped: key: $str1 reason: $str2"
|
"heads up animation skipped: key: $str1 reason: $str2"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
fun hunAnimationEventAdded(key: String, type: Int) {
|
fun hunAnimationEventAdded(entry: NotificationEntry, type: Int) {
|
||||||
val reason: String
|
val reason: String
|
||||||
reason = if (type == ANIMATION_TYPE_HEADS_UP_DISAPPEAR) {
|
reason = if (type == ANIMATION_TYPE_HEADS_UP_DISAPPEAR) {
|
||||||
"HEADS_UP_DISAPPEAR"
|
"HEADS_UP_DISAPPEAR"
|
||||||
@@ -33,16 +39,16 @@ class NotificationStackScrollLogger @Inject constructor(
|
|||||||
type.toString()
|
type.toString()
|
||||||
}
|
}
|
||||||
buffer.log(TAG, INFO, {
|
buffer.log(TAG, INFO, {
|
||||||
str1 = key
|
str1 = entry.logKey
|
||||||
str2 = reason
|
str2 = reason
|
||||||
}, {
|
}, {
|
||||||
"heads up animation added: $str1 with type $str2"
|
"heads up animation added: $str1 with type $str2"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun hunSkippedForUnexpectedState(key: String, expected: Boolean, actual: Boolean) {
|
fun hunSkippedForUnexpectedState(entry: NotificationEntry, expected: Boolean, actual: Boolean) {
|
||||||
buffer.log(TAG, INFO, {
|
buffer.log(TAG, INFO, {
|
||||||
str1 = key
|
str1 = entry.logKey
|
||||||
bool1 = expected
|
bool1 = expected
|
||||||
bool2 = actual
|
bool2 = actual
|
||||||
}, {
|
}, {
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package com.android.systemui.statusbar.notification.stack
|
|||||||
import com.android.systemui.log.LogBuffer
|
import com.android.systemui.log.LogBuffer
|
||||||
import com.android.systemui.log.LogLevel
|
import com.android.systemui.log.LogLevel
|
||||||
import com.android.systemui.log.dagger.NotificationHeadsUpLog
|
import com.android.systemui.log.dagger.NotificationHeadsUpLog
|
||||||
|
import com.android.systemui.statusbar.notification.logKey
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
class StackStateLogger @Inject constructor(
|
class StackStateLogger @Inject constructor(
|
||||||
@@ -10,7 +11,7 @@ class StackStateLogger @Inject constructor(
|
|||||||
) {
|
) {
|
||||||
fun logHUNViewDisappearing(key: String) {
|
fun logHUNViewDisappearing(key: String) {
|
||||||
buffer.log(TAG, LogLevel.INFO, {
|
buffer.log(TAG, LogLevel.INFO, {
|
||||||
str1 = key
|
str1 = logKey(key)
|
||||||
}, {
|
}, {
|
||||||
"Heads up view disappearing $str1 "
|
"Heads up view disappearing $str1 "
|
||||||
})
|
})
|
||||||
@@ -18,7 +19,7 @@ class StackStateLogger @Inject constructor(
|
|||||||
|
|
||||||
fun logHUNViewAppearing(key: String) {
|
fun logHUNViewAppearing(key: String) {
|
||||||
buffer.log(TAG, LogLevel.INFO, {
|
buffer.log(TAG, LogLevel.INFO, {
|
||||||
str1 = key
|
str1 = logKey(key)
|
||||||
}, {
|
}, {
|
||||||
"Heads up notification view appearing $str1 "
|
"Heads up notification view appearing $str1 "
|
||||||
})
|
})
|
||||||
@@ -26,7 +27,7 @@ class StackStateLogger @Inject constructor(
|
|||||||
|
|
||||||
fun logHUNViewDisappearingWithRemoveEvent(key: String) {
|
fun logHUNViewDisappearingWithRemoveEvent(key: String) {
|
||||||
buffer.log(TAG, LogLevel.ERROR, {
|
buffer.log(TAG, LogLevel.ERROR, {
|
||||||
str1 = key
|
str1 = logKey(key)
|
||||||
}, {
|
}, {
|
||||||
"Heads up view disappearing $str1 for ANIMATION_TYPE_REMOVE"
|
"Heads up view disappearing $str1 for ANIMATION_TYPE_REMOVE"
|
||||||
})
|
})
|
||||||
@@ -34,7 +35,7 @@ class StackStateLogger @Inject constructor(
|
|||||||
|
|
||||||
fun logHUNViewAppearingWithAddEvent(key: String) {
|
fun logHUNViewAppearingWithAddEvent(key: String) {
|
||||||
buffer.log(TAG, LogLevel.ERROR, {
|
buffer.log(TAG, LogLevel.ERROR, {
|
||||||
str1 = key
|
str1 = logKey(key)
|
||||||
}, {
|
}, {
|
||||||
"Heads up view disappearing $str1 for ANIMATION_TYPE_ADD"
|
"Heads up view disappearing $str1 for ANIMATION_TYPE_ADD"
|
||||||
})
|
})
|
||||||
@@ -42,7 +43,7 @@ class StackStateLogger @Inject constructor(
|
|||||||
|
|
||||||
fun disappearAnimationEnded(key: String) {
|
fun disappearAnimationEnded(key: String) {
|
||||||
buffer.log(TAG, LogLevel.INFO, {
|
buffer.log(TAG, LogLevel.INFO, {
|
||||||
str1 = key
|
str1 = logKey(key)
|
||||||
}, {
|
}, {
|
||||||
"Heads up notification disappear animation ended $str1 "
|
"Heads up notification disappear animation ended $str1 "
|
||||||
})
|
})
|
||||||
@@ -50,7 +51,7 @@ class StackStateLogger @Inject constructor(
|
|||||||
|
|
||||||
fun appearAnimationEnded(key: String) {
|
fun appearAnimationEnded(key: String) {
|
||||||
buffer.log(TAG, LogLevel.INFO, {
|
buffer.log(TAG, LogLevel.INFO, {
|
||||||
str1 = key
|
str1 = logKey(key)
|
||||||
}, {
|
}, {
|
||||||
"Heads up notification appear animation ended $str1 "
|
"Heads up notification appear animation ended $str1 "
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -142,7 +142,7 @@ public abstract class HeadsUpManager extends AlertingNotificationManager {
|
|||||||
|
|
||||||
protected void setEntryPinned(
|
protected void setEntryPinned(
|
||||||
@NonNull HeadsUpManager.HeadsUpEntry headsUpEntry, boolean isPinned) {
|
@NonNull HeadsUpManager.HeadsUpEntry headsUpEntry, boolean isPinned) {
|
||||||
mLogger.logSetEntryPinned(headsUpEntry.mEntry.getKey(), isPinned);
|
mLogger.logSetEntryPinned(headsUpEntry.mEntry, isPinned);
|
||||||
NotificationEntry entry = headsUpEntry.mEntry;
|
NotificationEntry entry = headsUpEntry.mEntry;
|
||||||
if (entry.isRowPinned() != isPinned) {
|
if (entry.isRowPinned() != isPinned) {
|
||||||
entry.setRowPinned(isPinned);
|
entry.setRowPinned(isPinned);
|
||||||
@@ -183,7 +183,7 @@ public abstract class HeadsUpManager extends AlertingNotificationManager {
|
|||||||
entry.setHeadsUp(false);
|
entry.setHeadsUp(false);
|
||||||
setEntryPinned((HeadsUpEntry) alertEntry, false /* isPinned */);
|
setEntryPinned((HeadsUpEntry) alertEntry, false /* isPinned */);
|
||||||
EventLogTags.writeSysuiHeadsUpStatus(entry.getKey(), 0 /* visible */);
|
EventLogTags.writeSysuiHeadsUpStatus(entry.getKey(), 0 /* visible */);
|
||||||
mLogger.logNotificationActuallyRemoved(entry.getKey());
|
mLogger.logNotificationActuallyRemoved(entry);
|
||||||
for (OnHeadsUpChangedListener listener : mListeners) {
|
for (OnHeadsUpChangedListener listener : mListeners) {
|
||||||
listener.onHeadsUpStateChanged(entry, false);
|
listener.onHeadsUpStateChanged(entry, false);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,8 @@ import com.android.systemui.log.LogBuffer
|
|||||||
import com.android.systemui.log.LogLevel.INFO
|
import com.android.systemui.log.LogLevel.INFO
|
||||||
import com.android.systemui.log.LogLevel.VERBOSE
|
import com.android.systemui.log.LogLevel.VERBOSE
|
||||||
import com.android.systemui.log.dagger.NotificationHeadsUpLog
|
import com.android.systemui.log.dagger.NotificationHeadsUpLog
|
||||||
|
import com.android.systemui.statusbar.notification.collection.NotificationEntry
|
||||||
|
import com.android.systemui.statusbar.notification.logKey
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
/** Logger for [HeadsUpManager]. */
|
/** Logger for [HeadsUpManager]. */
|
||||||
@@ -56,9 +58,9 @@ class HeadsUpManagerLogger @Inject constructor(
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logShowNotification(key: String) {
|
fun logShowNotification(entry: NotificationEntry) {
|
||||||
buffer.log(TAG, INFO, {
|
buffer.log(TAG, INFO, {
|
||||||
str1 = key
|
str1 = entry.logKey
|
||||||
}, {
|
}, {
|
||||||
"show notification $str1"
|
"show notification $str1"
|
||||||
})
|
})
|
||||||
@@ -66,16 +68,16 @@ class HeadsUpManagerLogger @Inject constructor(
|
|||||||
|
|
||||||
fun logRemoveNotification(key: String, releaseImmediately: Boolean) {
|
fun logRemoveNotification(key: String, releaseImmediately: Boolean) {
|
||||||
buffer.log(TAG, INFO, {
|
buffer.log(TAG, INFO, {
|
||||||
str1 = key
|
str1 = logKey(key)
|
||||||
bool1 = releaseImmediately
|
bool1 = releaseImmediately
|
||||||
}, {
|
}, {
|
||||||
"remove notification $str1 releaseImmediately: $bool1"
|
"remove notification $str1 releaseImmediately: $bool1"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logNotificationActuallyRemoved(key: String) {
|
fun logNotificationActuallyRemoved(entry: NotificationEntry) {
|
||||||
buffer.log(TAG, INFO, {
|
buffer.log(TAG, INFO, {
|
||||||
str1 = key
|
str1 = entry.logKey
|
||||||
}, {
|
}, {
|
||||||
"notification removed $str1 "
|
"notification removed $str1 "
|
||||||
})
|
})
|
||||||
@@ -83,7 +85,7 @@ class HeadsUpManagerLogger @Inject constructor(
|
|||||||
|
|
||||||
fun logUpdateNotification(key: String, alert: Boolean, hasEntry: Boolean) {
|
fun logUpdateNotification(key: String, alert: Boolean, hasEntry: Boolean) {
|
||||||
buffer.log(TAG, INFO, {
|
buffer.log(TAG, INFO, {
|
||||||
str1 = key
|
str1 = logKey(key)
|
||||||
bool1 = alert
|
bool1 = alert
|
||||||
bool2 = hasEntry
|
bool2 = hasEntry
|
||||||
}, {
|
}, {
|
||||||
@@ -91,12 +93,12 @@ class HeadsUpManagerLogger @Inject constructor(
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logUpdateEntry(key: String, updatePostTime: Boolean) {
|
fun logUpdateEntry(entry: NotificationEntry, updatePostTime: Boolean) {
|
||||||
buffer.log(TAG, INFO, {
|
buffer.log(TAG, INFO, {
|
||||||
str1 = key
|
str1 = entry.logKey
|
||||||
bool1 = updatePostTime
|
bool1 = updatePostTime
|
||||||
}, {
|
}, {
|
||||||
"update entry $key updatePostTime: $bool1"
|
"update entry $str1 updatePostTime: $bool1"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -108,9 +110,9 @@ class HeadsUpManagerLogger @Inject constructor(
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun logSetEntryPinned(key: String, isPinned: Boolean) {
|
fun logSetEntryPinned(entry: NotificationEntry, isPinned: Boolean) {
|
||||||
buffer.log(TAG, VERBOSE, {
|
buffer.log(TAG, VERBOSE, {
|
||||||
str1 = key
|
str1 = entry.logKey
|
||||||
bool1 = isPinned
|
bool1 = isPinned
|
||||||
}, {
|
}, {
|
||||||
"set entry pinned $str1 pinned: $bool1"
|
"set entry pinned $str1 pinned: $bool1"
|
||||||
|
|||||||
@@ -72,32 +72,32 @@ public class HeadsUpViewBinderTest extends SysuiTestCase {
|
|||||||
});
|
});
|
||||||
|
|
||||||
mViewBinder.bindHeadsUpView(mEntry, null);
|
mViewBinder.bindHeadsUpView(mEntry, null);
|
||||||
verify(mLogger).startBindingHun(eq("key"));
|
verify(mLogger).startBindingHun(eq(mEntry));
|
||||||
verifyNoMoreInteractions(mLogger);
|
verifyNoMoreInteractions(mLogger);
|
||||||
clearInvocations(mLogger);
|
clearInvocations(mLogger);
|
||||||
|
|
||||||
callback.get().onBindFinished(mEntry);
|
callback.get().onBindFinished(mEntry);
|
||||||
verify(mLogger).entryBoundSuccessfully(eq("key"));
|
verify(mLogger).entryBoundSuccessfully(eq(mEntry));
|
||||||
verifyNoMoreInteractions(mLogger);
|
verifyNoMoreInteractions(mLogger);
|
||||||
clearInvocations(mLogger);
|
clearInvocations(mLogger);
|
||||||
|
|
||||||
mViewBinder.bindHeadsUpView(mEntry, null);
|
mViewBinder.bindHeadsUpView(mEntry, null);
|
||||||
verify(mLogger).startBindingHun(eq("key"));
|
verify(mLogger).startBindingHun(eq(mEntry));
|
||||||
verifyNoMoreInteractions(mLogger);
|
verifyNoMoreInteractions(mLogger);
|
||||||
clearInvocations(mLogger);
|
clearInvocations(mLogger);
|
||||||
|
|
||||||
callback.get().onBindFinished(mEntry);
|
callback.get().onBindFinished(mEntry);
|
||||||
verify(mLogger).entryBoundSuccessfully(eq("key"));
|
verify(mLogger).entryBoundSuccessfully(eq(mEntry));
|
||||||
verifyNoMoreInteractions(mLogger);
|
verifyNoMoreInteractions(mLogger);
|
||||||
clearInvocations(mLogger);
|
clearInvocations(mLogger);
|
||||||
|
|
||||||
mViewBinder.unbindHeadsUpView(mEntry);
|
mViewBinder.unbindHeadsUpView(mEntry);
|
||||||
verify(mLogger).entryContentViewMarkedFreeable(eq("key"));
|
verify(mLogger).entryContentViewMarkedFreeable(eq(mEntry));
|
||||||
verifyNoMoreInteractions(mLogger);
|
verifyNoMoreInteractions(mLogger);
|
||||||
clearInvocations(mLogger);
|
clearInvocations(mLogger);
|
||||||
|
|
||||||
callback.get().onBindFinished(mEntry);
|
callback.get().onBindFinished(mEntry);
|
||||||
verify(mLogger).entryUnbound(eq("key"));
|
verify(mLogger).entryUnbound(eq(mEntry));
|
||||||
verifyNoMoreInteractions(mLogger);
|
verifyNoMoreInteractions(mLogger);
|
||||||
clearInvocations(mLogger);
|
clearInvocations(mLogger);
|
||||||
}
|
}
|
||||||
@@ -111,12 +111,12 @@ public class HeadsUpViewBinderTest extends SysuiTestCase {
|
|||||||
});
|
});
|
||||||
|
|
||||||
mViewBinder.bindHeadsUpView(mEntry, null);
|
mViewBinder.bindHeadsUpView(mEntry, null);
|
||||||
verify(mLogger).startBindingHun(eq("key"));
|
verify(mLogger).startBindingHun(eq(mEntry));
|
||||||
verifyNoMoreInteractions(mLogger);
|
verifyNoMoreInteractions(mLogger);
|
||||||
clearInvocations(mLogger);
|
clearInvocations(mLogger);
|
||||||
|
|
||||||
mViewBinder.abortBindCallback(mEntry);
|
mViewBinder.abortBindCallback(mEntry);
|
||||||
verify(mLogger).currentOngoingBindingAborted(eq("key"));
|
verify(mLogger).currentOngoingBindingAborted(eq(mEntry));
|
||||||
verifyNoMoreInteractions(mLogger);
|
verifyNoMoreInteractions(mLogger);
|
||||||
clearInvocations(mLogger);
|
clearInvocations(mLogger);
|
||||||
|
|
||||||
@@ -135,18 +135,18 @@ public class HeadsUpViewBinderTest extends SysuiTestCase {
|
|||||||
});
|
});
|
||||||
|
|
||||||
mViewBinder.bindHeadsUpView(mEntry, null);
|
mViewBinder.bindHeadsUpView(mEntry, null);
|
||||||
verify(mLogger).startBindingHun(eq("key"));
|
verify(mLogger).startBindingHun(eq(mEntry));
|
||||||
verifyNoMoreInteractions(mLogger);
|
verifyNoMoreInteractions(mLogger);
|
||||||
clearInvocations(mLogger);
|
clearInvocations(mLogger);
|
||||||
|
|
||||||
mViewBinder.unbindHeadsUpView(mEntry);
|
mViewBinder.unbindHeadsUpView(mEntry);
|
||||||
verify(mLogger).currentOngoingBindingAborted(eq("key"));
|
verify(mLogger).currentOngoingBindingAborted(eq(mEntry));
|
||||||
verify(mLogger).entryContentViewMarkedFreeable(eq("key"));
|
verify(mLogger).entryContentViewMarkedFreeable(eq(mEntry));
|
||||||
verifyNoMoreInteractions(mLogger);
|
verifyNoMoreInteractions(mLogger);
|
||||||
clearInvocations(mLogger);
|
clearInvocations(mLogger);
|
||||||
|
|
||||||
callback.get().onBindFinished(mEntry);
|
callback.get().onBindFinished(mEntry);
|
||||||
verify(mLogger).entryUnbound(eq("key"));
|
verify(mLogger).entryUnbound(eq(mEntry));
|
||||||
verifyNoMoreInteractions(mLogger);
|
verifyNoMoreInteractions(mLogger);
|
||||||
clearInvocations(mLogger);
|
clearInvocations(mLogger);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ public class HeadsUpManagerTest extends AlertingNotificationManagerTest {
|
|||||||
public void testHunRemovedLogging() {
|
public void testHunRemovedLogging() {
|
||||||
mAlertEntry.mEntry = mEntry;
|
mAlertEntry.mEntry = mEntry;
|
||||||
mHeadsUpManager.onAlertEntryRemoved(mAlertEntry);
|
mHeadsUpManager.onAlertEntryRemoved(mAlertEntry);
|
||||||
verify(mLogger, times(1)).logNotificationActuallyRemoved(eq(mEntry.getKey()));
|
verify(mLogger, times(1)).logNotificationActuallyRemoved(eq(mEntry));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
Reference in New Issue
Block a user