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

Commit a6d8cf29 authored by Eliot Courtney's avatar Eliot Courtney
Browse files

Split NotificationEntryManager out of StatusBar.

NotificationEntryManager is responsible for the adding, removing, and
updating of notifications among other things, such as their inflation
and their interaction with other Notification*Manager objects.

Bug: 63874929
Bug: 62602530
Test: runtest systemui
Test: Compile and run
Change-Id: I56f8c524875900112cdf9f6120407b61e201172f
parent 9f5ceae6
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -23,16 +23,19 @@ import android.util.Log;
import android.view.View;
import android.view.ViewGroup;

import com.android.internal.logging.MetricsLogger;
import com.android.internal.widget.LockPatternUtils;
import com.android.keyguard.ViewMediatorCallback;
import com.android.systemui.Dependency.DependencyProvider;
import com.android.systemui.keyguard.DismissCallbackRegistry;
import com.android.systemui.qs.QSTileHost;
import com.android.systemui.statusbar.KeyguardIndicationController;
import com.android.systemui.statusbar.NotificationEntryManager;
import com.android.systemui.statusbar.NotificationGutsManager;
import com.android.systemui.statusbar.NotificationLockscreenUserManager;
import com.android.systemui.statusbar.NotificationListener;
import com.android.systemui.statusbar.NotificationLogger;
import com.android.systemui.statusbar.NotificationMediaManager;
import com.android.systemui.statusbar.NotificationRemoteInputManager;
import com.android.systemui.statusbar.ScrimView;
import com.android.systemui.statusbar.phone.DozeParameters;
@@ -46,6 +49,7 @@ import com.android.systemui.statusbar.phone.ScrimController;
import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.phone.StatusBarIconController;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;

import java.util.function.Consumer;

@@ -119,6 +123,7 @@ public class SystemUIFactory {
        providers.put(NotificationLockscreenUserManager.class,
                () -> new NotificationLockscreenUserManager(context));
        providers.put(NotificationGroupManager.class, NotificationGroupManager::new);
        providers.put(NotificationMediaManager.class, () -> new NotificationMediaManager(context));
        providers.put(NotificationGutsManager.class, () -> new NotificationGutsManager(
                Dependency.get(NotificationLockscreenUserManager.class), context));
        providers.put(NotificationRemoteInputManager.class,
@@ -129,5 +134,20 @@ public class SystemUIFactory {
        providers.put(NotificationLogger.class, () -> new NotificationLogger(
                Dependency.get(NotificationListener.class),
                Dependency.get(UiOffloadThread.class)));
        providers.put(NotificationEntryManager.class, () ->
                new NotificationEntryManager(
                        Dependency.get(NotificationLockscreenUserManager.class),
                        Dependency.get(NotificationGroupManager.class),
                        Dependency.get(NotificationGutsManager.class),
                        Dependency.get(NotificationRemoteInputManager.class),
                        Dependency.get(NotificationMediaManager.class),
                        Dependency.get(ForegroundServiceController.class),
                        Dependency.get(NotificationListener.class),
                        Dependency.get(MetricsLogger.class),
                        Dependency.get(DeviceProvisionedController.class),
                        Dependency.get(UiOffloadThread.class),
                        context));
        providers.put(NotificationListener.class, () -> new NotificationListener(
                Dependency.get(NotificationRemoteInputManager.class), context));
    }
}
+76 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2017 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License
 */
package com.android.systemui.car;

import android.content.Context;
import android.service.notification.StatusBarNotification;

import com.android.internal.logging.MetricsLogger;
import com.android.systemui.ForegroundServiceController;
import com.android.systemui.UiOffloadThread;
import com.android.systemui.statusbar.ExpandableNotificationRow;
import com.android.systemui.statusbar.NotificationData;
import com.android.systemui.statusbar.NotificationEntryManager;
import com.android.systemui.statusbar.NotificationGutsManager;
import com.android.systemui.statusbar.NotificationListener;
import com.android.systemui.statusbar.NotificationLockscreenUserManager;
import com.android.systemui.statusbar.NotificationMediaManager;
import com.android.systemui.statusbar.NotificationRemoteInputManager;
import com.android.systemui.statusbar.phone.NotificationGroupManager;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;

public class CarNotificationEntryManager extends NotificationEntryManager {
    public CarNotificationEntryManager(
            NotificationLockscreenUserManager lockscreenUserManager,
            NotificationGroupManager groupManager,
            NotificationGutsManager gutsManager,
            NotificationRemoteInputManager remoteInputManager,
            NotificationMediaManager mediaManager,
            ForegroundServiceController foregroundServiceController,
            NotificationListener notificationListener,
            MetricsLogger metricsLogger,
            DeviceProvisionedController deviceProvisionedController,
            UiOffloadThread uiOffloadThread, Context context) {
        super(lockscreenUserManager, groupManager, gutsManager, remoteInputManager, mediaManager,
                foregroundServiceController, notificationListener, metricsLogger,
                deviceProvisionedController, uiOffloadThread, context);
    }

    /**
     * Returns the
     * {@link com.android.systemui.statusbar.ExpandableNotificationRow.LongPressListener} that will
     * be triggered when a notification card is long-pressed.
     */
    @Override
    public ExpandableNotificationRow.LongPressListener getNotificationLongClicker() {
        // For the automative use case, we do not want to the user to be able to interact with
        // a notification other than a regular click. As a result, just return null for the
        // long click listener.
        return null;
    }

    @Override
    public boolean shouldPeek(NotificationData.Entry entry, StatusBarNotification sbn) {
        // Because space is usually constrained in the auto use-case, there should not be a
        // pinned notification when the shade has been expanded. Ensure this by not pinning any
        // notification if the shade is already opened.
        if (!mPresenter.isPresenterFullyCollapsed()) {
            return false;
        }

        return super.shouldPeek(entry, sbn);
    }
}
+24 −0
Original line number Diff line number Diff line
@@ -18,9 +18,21 @@ package com.android.systemui.car;
import android.content.Context;
import android.util.ArrayMap;

import com.android.internal.logging.MetricsLogger;
import com.android.systemui.Dependency;
import com.android.systemui.Dependency.DependencyProvider;
import com.android.systemui.ForegroundServiceController;
import com.android.systemui.SystemUIFactory;
import com.android.systemui.UiOffloadThread;
import com.android.systemui.plugins.VolumeDialogController;
import com.android.systemui.statusbar.NotificationEntryManager;
import com.android.systemui.statusbar.NotificationGutsManager;
import com.android.systemui.statusbar.NotificationListener;
import com.android.systemui.statusbar.NotificationLockscreenUserManager;
import com.android.systemui.statusbar.NotificationMediaManager;
import com.android.systemui.statusbar.NotificationRemoteInputManager;
import com.android.systemui.statusbar.phone.NotificationGroupManager;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
import com.android.systemui.volume.car.CarVolumeDialogController;

/**
@@ -32,5 +44,17 @@ public class CarSystemUIFactory extends SystemUIFactory {
            Context context) {
        super.injectDependencies(providers, context);
        providers.put(VolumeDialogController.class, () -> new CarVolumeDialogController(context));
        providers.put(NotificationEntryManager.class, () -> new CarNotificationEntryManager(
                Dependency.get(NotificationLockscreenUserManager.class),
                Dependency.get(NotificationGroupManager.class),
                Dependency.get(NotificationGutsManager.class),
                Dependency.get(NotificationRemoteInputManager.class),
                Dependency.get(NotificationMediaManager.class),
                Dependency.get(ForegroundServiceController.class),
                Dependency.get(NotificationListener.class),
                Dependency.get(MetricsLogger.class),
                Dependency.get(DeviceProvisionedController.class),
                Dependency.get(UiOffloadThread.class),
                context));
    }
}
+966 −0

File added.

Preview size limit exceeded, changes collapsed.

+2 −1
Original line number Diff line number Diff line
@@ -168,7 +168,8 @@ public class NotificationGutsManager implements Dumpable {
            String key = sbn.getKey();
            if (key.equals(mKeyToRemoveOnGutsClosed)) {
                mKeyToRemoveOnGutsClosed = null;
                mPresenter.removeNotification(key, mPresenter.getLatestRankingMap());
                mPresenter.getEntryManager().removeNotification(key,
                        mPresenter.getEntryManager().getLatestRankingMap());
            }
        });

Loading