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

Commit 70fcec4e authored by Ned Burns's avatar Ned Burns Committed by Android (Google) Code Review
Browse files

Merge "Add initial implementation of NotifCollection"

parents 017cbabd f098dbfc
Loading
Loading
Loading
Loading
+8 −3
Original line number Original line Diff line number Diff line
@@ -87,6 +87,7 @@ import com.android.systemui.plugins.qs.QS;
import com.android.systemui.qs.car.CarQSFragment;
import com.android.systemui.qs.car.CarQSFragment;
import com.android.systemui.shared.system.ActivityManagerWrapper;
import com.android.systemui.shared.system.ActivityManagerWrapper;
import com.android.systemui.shared.system.TaskStackChangeListener;
import com.android.systemui.shared.system.TaskStackChangeListener;
import com.android.systemui.statusbar.FeatureFlags;
import com.android.systemui.statusbar.FlingAnimationUtils;
import com.android.systemui.statusbar.FlingAnimationUtils;
import com.android.systemui.statusbar.NavigationBarController;
import com.android.systemui.statusbar.NavigationBarController;
import com.android.systemui.statusbar.NotificationListener;
import com.android.systemui.statusbar.NotificationListener;
@@ -102,7 +103,7 @@ import com.android.systemui.statusbar.car.hvac.HvacController;
import com.android.systemui.statusbar.car.hvac.TemperatureView;
import com.android.systemui.statusbar.car.hvac.TemperatureView;
import com.android.systemui.statusbar.notification.BypassHeadsUpNotifier;
import com.android.systemui.statusbar.notification.BypassHeadsUpNotifier;
import com.android.systemui.statusbar.notification.DynamicPrivacyController;
import com.android.systemui.statusbar.notification.DynamicPrivacyController;
import com.android.systemui.statusbar.notification.NotifPipelineInitializer;
import com.android.systemui.statusbar.notification.NewNotifPipeline;
import com.android.systemui.statusbar.notification.NotificationAlertingManager;
import com.android.systemui.statusbar.notification.NotificationAlertingManager;
import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.NotificationInterruptionStateProvider;
import com.android.systemui.statusbar.notification.NotificationInterruptionStateProvider;
@@ -140,6 +141,8 @@ import java.util.Map;
import javax.inject.Inject;
import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Named;


import dagger.Lazy;

/**
/**
 * A status bar (and navigation bar) tailored for the automotive use case.
 * A status bar (and navigation bar) tailored for the automotive use case.
 */
 */
@@ -252,6 +255,7 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
    @Inject
    @Inject
    public CarStatusBar(
    public CarStatusBar(
            Context context,
            Context context,
            FeatureFlags featureFlags,
            LightBarController lightBarController,
            LightBarController lightBarController,
            AutoHideController autoHideController,
            AutoHideController autoHideController,
            KeyguardUpdateMonitor keyguardUpdateMonitor,
            KeyguardUpdateMonitor keyguardUpdateMonitor,
@@ -266,7 +270,7 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
            DynamicPrivacyController dynamicPrivacyController,
            DynamicPrivacyController dynamicPrivacyController,
            BypassHeadsUpNotifier bypassHeadsUpNotifier,
            BypassHeadsUpNotifier bypassHeadsUpNotifier,
            @Named(ALLOW_NOTIFICATION_LONG_PRESS_NAME) boolean allowNotificationLongPress,
            @Named(ALLOW_NOTIFICATION_LONG_PRESS_NAME) boolean allowNotificationLongPress,
            NotifPipelineInitializer notifPipelineInitializer,
            Lazy<NewNotifPipeline> newNotifPipeline,
            FalsingManager falsingManager,
            FalsingManager falsingManager,
            BroadcastDispatcher broadcastDispatcher,
            BroadcastDispatcher broadcastDispatcher,
            RemoteInputQuickSettingsDisabler remoteInputQuickSettingsDisabler,
            RemoteInputQuickSettingsDisabler remoteInputQuickSettingsDisabler,
@@ -309,6 +313,7 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
            DozeParameters dozeParameters) {
            DozeParameters dozeParameters) {
        super(
        super(
                context,
                context,
                featureFlags,
                lightBarController,
                lightBarController,
                autoHideController,
                autoHideController,
                keyguardUpdateMonitor,
                keyguardUpdateMonitor,
@@ -323,7 +328,7 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
                dynamicPrivacyController,
                dynamicPrivacyController,
                bypassHeadsUpNotifier,
                bypassHeadsUpNotifier,
                allowNotificationLongPress,
                allowNotificationLongPress,
                notifPipelineInitializer,
                newNotifPipeline,
                falsingManager,
                falsingManager,
                broadcastDispatcher,
                broadcastDispatcher,
                remoteInputQuickSettingsDisabler,
                remoteInputQuickSettingsDisabler,
+74 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2019 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.statusbar;

import android.annotation.NonNull;
import android.os.Handler;
import android.os.HandlerExecutor;
import android.os.Looper;
import android.provider.DeviceConfig;
import android.util.ArrayMap;

import java.util.Map;

import javax.inject.Inject;

/**
 * Class to manage simple DeviceConfig-based feature flags.
 *
 * To enable or disable a flag, run:
 *
 * {@code
 *  $ adb shell device_config put systemui <key> <true|false>
*  }
 *
 * You will probably need to @{$ adb reboot} afterwards in order for the code to pick up the change.
 */
public class FeatureFlags {
    private final Map<String, Boolean> mCachedDeviceConfigFlags = new ArrayMap<>();

    @Inject
    public FeatureFlags() {
        DeviceConfig.addOnPropertiesChangedListener(
                "systemui",
                new HandlerExecutor(new Handler(Looper.getMainLooper())),
                this::onPropertiesChanged);
    }

    public boolean isNewNotifPipelineEnabled() {
        return getDeviceConfigFlag("notification.newpipeline.enabled", false);
    }

    private void onPropertiesChanged(@NonNull DeviceConfig.Properties properties) {
        synchronized (mCachedDeviceConfigFlags) {
            for (String key : properties.getKeyset()) {
                mCachedDeviceConfigFlags.remove(key);
            }
        }
    }

    private boolean getDeviceConfigFlag(String key, boolean defaultValue) {
        synchronized (mCachedDeviceConfigFlags) {
            Boolean flag = mCachedDeviceConfigFlags.get(key);
            if (flag == null) {
                flag = DeviceConfig.getBoolean("systemui", key, defaultValue);
                mCachedDeviceConfigFlags.put(key, flag);
            }
            return flag;
        }
    }
}
+49 −0
Original line number Original line Diff line number Diff line
@@ -16,53 +16,34 @@


package com.android.systemui.statusbar.notification;
package com.android.systemui.statusbar.notification;


import android.service.notification.NotificationListenerService;
import android.service.notification.StatusBarNotification;
import android.util.Log;
import android.util.Log;


import com.android.systemui.statusbar.NotificationListener;
import com.android.systemui.statusbar.NotificationListener;
import com.android.systemui.statusbar.notification.collection.NotifCollection;


import javax.inject.Inject;
import javax.inject.Inject;
import javax.inject.Singleton;


/**
/**
 * Initialization code for the new notification pipeline.
 * Initialization code for the new notification pipeline.
 */
 */
public class NotifPipelineInitializer {
@Singleton
public class NewNotifPipeline {
    private final NotifCollection mNotifCollection;


    @Inject
    @Inject
    public NotifPipelineInitializer() {
    public NewNotifPipeline(
            NotifCollection notifCollection) {
        mNotifCollection = notifCollection;
    }
    }


    /** Hooks the new pipeline up to NotificationManager */
    public void initialize(
    public void initialize(
            NotificationListener notificationService) {
            NotificationListener notificationService) {
        mNotifCollection.attach(notificationService);


        // TODO Put real code here
        Log.d(TAG, "Notif pipeline initialized");
        notificationService.setDownstreamListener(new NotificationListener.NotifServiceListener() {
            @Override
            public void onNotificationPosted(StatusBarNotification sbn,
                    NotificationListenerService.RankingMap rankingMap) {
                Log.d(TAG, "onNotificationPosted " + sbn.getKey());
    }
    }


            @Override
    private static final String TAG = "NewNotifPipeline";
            public void onNotificationRemoved(StatusBarNotification sbn,
                    NotificationListenerService.RankingMap rankingMap) {
                Log.d(TAG, "onNotificationRemoved " + sbn.getKey());
            }

            @Override
            public void onNotificationRemoved(StatusBarNotification sbn,
                    NotificationListenerService.RankingMap rankingMap, int reason) {
                Log.d(TAG, "onNotificationRemoved " + sbn.getKey());
            }

            @Override
            public void onNotificationRankingUpdate(
                    NotificationListenerService.RankingMap rankingMap) {
                Log.d(TAG, "onNotificationRankingUpdate");
            }
        });
    }

    private static final String TAG = "NotifInitializer";
}
}
+38 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2019 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.statusbar.notification.collection;

import android.service.notification.NotificationStats.DismissalSentiment;
import android.service.notification.NotificationStats.DismissalSurface;

import com.android.internal.statusbar.NotificationVisibility;

/** Information that must be supplied when dismissing a notification on the behalf of the user. */
public class DismissedByUserStats {
    public final @DismissalSurface int dismissalSurface;
    public final @DismissalSentiment int dismissalSentiment;
    public final NotificationVisibility notificationVisibility;

    public DismissedByUserStats(
            @DismissalSurface int dismissalSurface,
            @DismissalSentiment int dismissalSentiment,
            NotificationVisibility notificationVisibility) {
        this.dismissalSurface = dismissalSurface;
        this.dismissalSentiment = dismissalSentiment;
        this.notificationVisibility = notificationVisibility;
    }
}
+426 −0

File added.

Preview size limit exceeded, changes collapsed.

Loading