1/* 2 * Copyright (C) 2024 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 17import {SnackBarOpener} from 'app/components/snack_bar_opener'; 18import {Analytics} from 'logging/analytics'; 19import {UserNotification} from 'messaging/user_notification'; 20 21export class UserNotifier { 22 static setSnackBarOpener(snackBarOpener: SnackBarOpener) { 23 UserNotifier.snackBarOpener = snackBarOpener; 24 } 25 26 static add(notification: UserNotification): typeof UserNotifier { 27 UserNotifier.notifications.push(notification); 28 return UserNotifier; 29 } 30 31 static notify() { 32 if (UserNotifier.notifications.length === 0) return; 33 UserNotifier.notifications.forEach((notif) => { 34 Analytics.UserNotification.logUserWarning( 35 notif.getDescriptor(), 36 notif.getMessage(), 37 ); 38 }); 39 UserNotifier.snackBarOpener?.onNotifications(UserNotifier.notifications); 40 UserNotifier.notifications = []; 41 } 42 43 private static notifications: UserNotification[] = []; 44 private static snackBarOpener: SnackBarOpener | undefined; 45} 46