Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 68b75d0c authored by jeffnainap's avatar jeffnainap Committed by Jeff Nainaparampil
Browse files

[People Service] Re-order clean-up to only occur once per shortcuts

update

This is a partial roll-forward of the functionality added in ag/21546169.
We remove the 500ms debounce as this conflicts with direct boot aware
services, and we see an uptick of crashes caused by querying shortcut
manager when the user is locked. However, we keep the efficiency of only
cleaning up shortcuts once per update -- prior to this change we had
performed cleanup multiple times per update which created multiple heaps
in a single update operation.

Test: unit tests and manually via load test apk
Bug: 269420266
Change-Id: I9a445dd88e694c36f0c66491255481df9e4856f3
parent ae6c0cf5
Loading
Loading
Loading
Loading
+8 −5
Original line number Diff line number Diff line
@@ -129,7 +129,6 @@ public class DataManager {
    private final List<PeopleService.ConversationsListener> mConversationsListeners =
            new ArrayList<>(1);
    private final Handler mHandler;

    private ContentObserver mCallLogContentObserver;
    private ContentObserver mMmsSmsContentObserver;

@@ -1106,6 +1105,7 @@ public class DataManager {
                @NonNull List<ShortcutInfo> shortcuts, @NonNull UserHandle user) {
            mInjector.getBackgroundExecutor().execute(() -> {
                PackageData packageData = getPackage(packageName, user.getIdentifier());
                boolean hasCachedShortcut = false;
                for (ShortcutInfo shortcut : shortcuts) {
                    if (ShortcutHelper.isConversationShortcut(
                            shortcut, mShortcutServiceInternal, user.getIdentifier())) {
@@ -1114,15 +1114,18 @@ public class DataManager {
                                    ? packageData.getConversationInfo(shortcut.getId()) : null;
                            if (conversationInfo == null
                                    || !conversationInfo.isShortcutCachedForNotification()) {
                                // This is a newly cached shortcut. Clean up the existing cached
                                // shortcuts to ensure the cache size is under the limit.
                                cleanupCachedShortcuts(user.getIdentifier(),
                                        MAX_CACHED_RECENT_SHORTCUTS - 1);
                                hasCachedShortcut = true;
                            }
                        }
                        addOrUpdateConversationInfo(shortcut);
                    }
                }
                // Added at least one new conversation. Uncache older existing cached
                // shortcuts to ensure the cache size is under the limit.
                if (hasCachedShortcut) {
                    cleanupCachedShortcuts(user.getIdentifier(),
                            MAX_CACHED_RECENT_SHORTCUTS);
                }
            });
        }