1 /* 2 * Copyright (C) 2017 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License 15 */ 16 17 package com.android.systemui.statusbar; 18 19 import static com.android.systemui.statusbar.notification.ActivityLaunchAnimator.ExpandAnimationParameters; 20 21 import android.view.View; 22 import android.view.ViewGroup; 23 24 import com.android.systemui.plugins.statusbar.NotificationSwipeActionHelper; 25 26 /** 27 * Interface representing the entity that contains notifications. It can have 28 * notification views added and removed from it, and will manage displaying them to the user. 29 */ 30 public interface NotificationListContainer { 31 32 /** 33 * Called when a child is being transferred. 34 * 35 * @param childTransferInProgress whether child transfer is in progress 36 */ setChildTransferInProgress(boolean childTransferInProgress)37 void setChildTransferInProgress(boolean childTransferInProgress); 38 39 /** 40 * Change the position of child to a new location 41 * 42 * @param child the view to change the position for 43 * @param newIndex the new index 44 */ changeViewPosition(View child, int newIndex)45 void changeViewPosition(View child, int newIndex); 46 47 /** 48 * Called when a child was added to a group. 49 * 50 * @param row row of the group child that was added 51 */ notifyGroupChildAdded(View row)52 void notifyGroupChildAdded(View row); 53 54 /** 55 * Called when a child was removed from a group. 56 * 57 * @param row row of the child that was removed 58 * @param childrenContainer ViewGroup of the group that the child was removed from 59 */ notifyGroupChildRemoved(View row, ViewGroup childrenContainer)60 void notifyGroupChildRemoved(View row, ViewGroup childrenContainer); 61 62 /** 63 * Generate an animation for an added child view. 64 * 65 * @param child The view to be added. 66 * @param fromMoreCard Whether this add is coming from the "more" card on lockscreen. 67 */ generateAddAnimation(View child, boolean fromMoreCard)68 void generateAddAnimation(View child, boolean fromMoreCard); 69 70 /** 71 * Generate a child order changed event. 72 */ generateChildOrderChangedEvent()73 void generateChildOrderChangedEvent(); 74 75 /** 76 * Returns the number of children in the NotificationListContainer. 77 * 78 * @return the number of children in the NotificationListContainer 79 */ getContainerChildCount()80 int getContainerChildCount(); 81 82 /** 83 * Gets the ith child in the NotificationListContainer. 84 * 85 * @param i ith child to get 86 * @return the ith child in the list container 87 */ getContainerChildAt(int i)88 View getContainerChildAt(int i); 89 90 /** 91 * Remove a view from the container 92 * 93 * @param v view to remove 94 */ removeContainerView(View v)95 void removeContainerView(View v); 96 97 /** 98 * Add a view to the container 99 * 100 * @param v view to add 101 */ addContainerView(View v)102 void addContainerView(View v); 103 104 /** 105 * Sets the maximum number of notifications to display. 106 * 107 * @param maxNotifications max number of notifications to display 108 */ setMaxDisplayedNotifications(int maxNotifications)109 void setMaxDisplayedNotifications(int maxNotifications); 110 111 /** 112 * Handle snapping a non-dismissable row back if the user tried to dismiss it. 113 * 114 * @param row row to snap back 115 */ snapViewIfNeeded(ExpandableNotificationRow row)116 void snapViewIfNeeded(ExpandableNotificationRow row); 117 118 /** 119 * Get the view parent for a notification entry. For example, NotificationStackScrollLayout. 120 * 121 * @param entry entry to get the view parent for 122 * @return the view parent for entry 123 */ getViewParentForNotification(NotificationData.Entry entry)124 ViewGroup getViewParentForNotification(NotificationData.Entry entry); 125 126 /** 127 * Called when the height of an expandable view changes. 128 * 129 * @param view view whose height changed 130 * @param animate whether this change should be animated 131 */ onHeightChanged(ExpandableView view, boolean animate)132 void onHeightChanged(ExpandableView view, boolean animate); 133 134 /** 135 * Resets the currently exposed menu view. 136 * 137 * @param animate whether to animate the closing/change of menu view 138 * @param force reset the menu view even if it looks like it is already reset 139 */ resetExposedMenuView(boolean animate, boolean force)140 void resetExposedMenuView(boolean animate, boolean force); 141 142 /** 143 * Returns the NotificationSwipeActionHelper for the NotificationListContainer. 144 * 145 * @return swipe action helper for the list container 146 */ getSwipeActionHelper()147 NotificationSwipeActionHelper getSwipeActionHelper(); 148 149 /** 150 * Called when a notification is removed from the shade. This cleans up the state for a 151 * given view. 152 * 153 * @param view view to clean up view state for 154 */ cleanUpViewState(View view)155 void cleanUpViewState(View view); 156 157 /** 158 * Returns whether an ExpandableNotificationRow is in a visible location or not. 159 * 160 * @param row 161 * @return true if row is in a visible location 162 */ isInVisibleLocation(ExpandableNotificationRow row)163 boolean isInVisibleLocation(ExpandableNotificationRow row); 164 165 /** 166 * Sets a listener to listen for changes in notification locations. 167 * 168 * @param listener listener to set 169 */ setChildLocationsChangedListener( NotificationLogger.OnChildLocationsChangedListener listener)170 void setChildLocationsChangedListener( 171 NotificationLogger.OnChildLocationsChangedListener listener); 172 173 /** 174 * Called when an update to the notification view hierarchy is completed. 175 */ onNotificationViewUpdateFinished()176 default void onNotificationViewUpdateFinished() {} 177 178 /** 179 * Returns true if there are pulsing notifications. 180 * 181 * @return true if has pulsing notifications 182 */ hasPulsingNotifications()183 boolean hasPulsingNotifications(); 184 185 /** 186 * Apply parameters of the expand animation to the layout 187 */ applyExpandAnimationParams(ExpandAnimationParameters params)188 default void applyExpandAnimationParams(ExpandAnimationParameters params) {} 189 setExpandingNotification(ExpandableNotificationRow row)190 default void setExpandingNotification(ExpandableNotificationRow row) {} 191 192 /** 193 * Bind a newly created row. 194 * 195 * @param row The notification to bind. 196 */ bindRow(ExpandableNotificationRow row)197 default void bindRow(ExpandableNotificationRow row) {} 198 } 199