package com.android.systemui.statusbar;
|
|
import androidx.annotation.NonNull;
|
|
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
|
|
/**
|
* Interface for anything that may need to keep notifications managed even after
|
* {@link NotificationListener} removes it. The lifetime extender is in charge of performing the
|
* callback when the notification is then safe to remove.
|
*/
|
public interface NotificationLifetimeExtender {
|
|
/**
|
* Set the handler to callback to when the notification is safe to remove.
|
*
|
* @param callback the handler to callback
|
*/
|
void setCallback(@NonNull NotificationSafeToRemoveCallback callback);
|
|
/**
|
* Determines whether or not the extender needs the notification kept after removal.
|
*
|
* @param entry the entry containing the notification to check
|
* @return true if the notification lifetime should be extended
|
*/
|
boolean shouldExtendLifetime(@NonNull NotificationEntry entry);
|
|
/**
|
* It's possible that a notification was canceled before it ever became visible. This callback
|
* gives lifetime extenders a chance to make sure it shows up. For example if a foreground
|
* service is canceled too quickly but we still want to make sure a FGS notification shows.
|
* @param pendingEntry the canceled (but pending) entry
|
* @return true if the notification lifetime should be extended
|
*/
|
default boolean shouldExtendLifetimeForPendingNotification(
|
@NonNull NotificationEntry pendingEntry) {
|
return false;
|
}
|
|
/**
|
* Sets whether or not the lifetime should be managed by the extender. In practice, if
|
* shouldManage is true, this is where the extender starts managing the entry internally and is
|
* now responsible for calling {@link NotificationSafeToRemoveCallback#onSafeToRemove(String)}
|
* when the entry is safe to remove. If shouldManage is false, the extender no longer needs to
|
* worry about it (either because we will be removing it anyway or the entry is no longer
|
* removed due to an update).
|
*
|
* @param entry the entry that needs an extended lifetime
|
* @param shouldManage true if the extender should manage the entry now, false otherwise
|
*/
|
void setShouldManageLifetime(@NonNull NotificationEntry entry, boolean shouldManage);
|
|
/**
|
* The callback for when the notification is now safe to remove (i.e. its lifetime has ended).
|
*/
|
interface NotificationSafeToRemoveCallback {
|
/**
|
* Called when the lifetime extender determines it's safe to remove.
|
*
|
* @param key key of the entry that is now safe to remove
|
*/
|
void onSafeToRemove(String key);
|
}
|
}
|