Persists bubbles to disk (part 1)
Bubbles are now write-through an xml file on disk upon addition/update,
asynchronously.
Bug: 149713060
Test: manually verify when new bubble pops up it is write through xml
Change-Id: I5d9f58cd0858ca96d5ec05c72aad4ae3a18c0aa0
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java
index cafa060..ad8d57b 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java
@@ -153,6 +153,7 @@
private final NotificationGroupManager mNotificationGroupManager;
private final ShadeController mShadeController;
private final FloatingContentCoordinator mFloatingContentCoordinator;
+ private final BubbleDataRepository mDataRepository;
private BubbleData mBubbleData;
private ScrimView mBubbleScrim;
@@ -294,13 +295,14 @@
FeatureFlags featureFlags,
DumpManager dumpManager,
FloatingContentCoordinator floatingContentCoordinator,
+ BubbleDataRepository dataRepository,
SysUiState sysUiState,
INotificationManager notificationManager) {
this(context, notificationShadeWindowController, statusBarStateController, shadeController,
data, null /* synchronizer */, configurationController, interruptionStateProvider,
zenModeController, notifUserManager, groupManager, entryManager,
- notifPipeline, featureFlags, dumpManager, floatingContentCoordinator, sysUiState,
- notificationManager);
+ notifPipeline, featureFlags, dumpManager, floatingContentCoordinator,
+ dataRepository, sysUiState, notificationManager);
}
/**
@@ -322,6 +324,7 @@
FeatureFlags featureFlags,
DumpManager dumpManager,
FloatingContentCoordinator floatingContentCoordinator,
+ BubbleDataRepository dataRepository,
SysUiState sysUiState,
INotificationManager notificationManager) {
dumpManager.registerDumpable(TAG, this);
@@ -331,6 +334,7 @@
mNotifUserManager = notifUserManager;
mZenModeController = zenModeController;
mFloatingContentCoordinator = floatingContentCoordinator;
+ mDataRepository = dataRepository;
mINotificationManager = notificationManager;
mZenModeController.addCallback(new ZenModeController.Callback() {
@Override
@@ -1018,6 +1022,7 @@
// Do removals, if any.
ArrayList<Pair<Bubble, Integer>> removedBubbles =
new ArrayList<>(update.removedBubbles);
+ ArrayList<Bubble> bubblesToBeRemovedFromRepository = new ArrayList<>();
for (Pair<Bubble, Integer> removed : removedBubbles) {
final Bubble bubble = removed.first;
@DismissReason final int reason = removed.second;
@@ -1027,6 +1032,9 @@
if (reason == DISMISS_USER_CHANGED) {
continue;
}
+ if (reason == DISMISS_NOTIF_CANCEL) {
+ bubblesToBeRemovedFromRepository.add(bubble);
+ }
if (!mBubbleData.hasBubbleInStackWithKey(bubble.getKey())) {
if (!mBubbleData.hasOverflowBubbleWithKey(bubble.getKey())
&& (!bubble.showInShade()
@@ -1056,9 +1064,12 @@
}
}
}
+ mDataRepository.removeBubbles(mCurrentUserId, bubblesToBeRemovedFromRepository);
if (update.addedBubble != null) {
+ mDataRepository.addBubble(mCurrentUserId, update.addedBubble);
mStackView.addBubble(update.addedBubble);
+
}
if (update.updatedBubble != null) {
@@ -1068,6 +1079,7 @@
// At this point, the correct bubbles are inflated in the stack.
// Make sure the order in bubble data is reflected in bubble row.
if (update.orderChanged) {
+ mDataRepository.addBubbles(mCurrentUserId, update.bubbles);
mStackView.updateBubbleOrder(update.bubbles);
}