1/* 2 * Copyright (c) 2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15import Notification from '@ohos.notification'; 16import { NotificationSubscriber } from 'notification/notificationSubscriber'; 17import { Log, AppModel, BadgeManager } from '@ohos/common'; 18 19const TAG = 'NumBadgeManager'; 20 21export class NumBadgeManager { 22 private readonly mRegisterNumBadgeCallback; 23 private readonly mUnRegisterNumBadgeCallback; 24 private readonly mBadgeManager; 25 private mSubscriber: NotificationSubscriber = { 26 onConsume: this.onConsumeCallback.bind(this), 27 onCancel: this.onCancelCallback.bind(this), 28 onUpdate: this.onUpdateCallback.bind(this), 29 onConnect: this.onConnectCallback.bind(this), 30 onDisconnect: this.onDisconnectCallback.bind(this), 31 onDestroy: this.onDestroyCallback.bind(this) 32 } 33 34 private constructor() { 35 this.mRegisterNumBadgeCallback = this.registerNumBadgeCallback.bind(this); 36 this.mUnRegisterNumBadgeCallback = this.unRegisterNumBadgeCallback.bind(this); 37 this.mBadgeManager = BadgeManager.getInstance(); 38 } 39 40 private onConsumeCallback(data) { 41 Log.showInfo(TAG, 'onConsumeCallback called !!'); 42 this.handleSubscribeCallbackData(data, true); 43 } 44 45 private onCancelCallback(data) { 46 Log.showInfo(TAG, 'onCancelCallback called !!'); 47 this.handleSubscribeCallbackData(data, false); 48 } 49 50 private onUpdateCallback() { 51 Log.showInfo(TAG, 'onUpdateCallback called !!'); 52 } 53 54 private onConnectCallback() { 55 Log.showInfo(TAG, 'onConnectCallback called !!'); 56 } 57 58 private onDisconnectCallback() { 59 Log.showInfo(TAG, 'onDisconnectCallback called !!'); 60 } 61 62 private onDestroyCallback() { 63 Log.showInfo(TAG, 'onDestroyCallback called !!'); 64 } 65 66 private async handleSubscribeCallbackData(data, needAdd: boolean) { 67 Log.showInfo(TAG, 'handleSubscribeCallbackData start !!'); 68 69 let creatorUserId: number = data?.request?.creatorUserId; 70 let creatorBundleName: string = data?.request?.creatorBundleName; 71 let badgeNumber: number = data?.request?.badgeNumber; 72 Log.showDebug(TAG, `handleSubscribeCallbackData creatorUserId is ${creatorUserId} creatorBundleName is ${creatorBundleName} badgeNumber is ${badgeNumber}`); 73 74 let userId: number = AppModel.getInstance().getUserId(); 75 if (userId != creatorUserId) { 76 Log.showError(TAG, `handleSubscribeCallbackData userid is diff ${userId}`); 77 return; 78 } 79 80 let lastBadgeNumber = await this.mBadgeManager.getBadgeByBundleSync(creatorBundleName); 81 let newBadgeNumber: number = 0; 82 if (needAdd) { 83 newBadgeNumber = badgeNumber + lastBadgeNumber; 84 } else { 85 newBadgeNumber = lastBadgeNumber - badgeNumber; 86 if (newBadgeNumber < 0) { 87 newBadgeNumber = 0; 88 } 89 } 90 this.mBadgeManager.updateBadgeNumber(creatorBundleName, newBadgeNumber) 91 .then((result) => { 92 Log.showInfo(TAG, `updateBadgeByBundle result is ${result}`); 93 }) 94 .catch(error => { 95 Log.showError(TAG, `updateBadgeByBundle error is ${error.message}`); 96 }); 97 98 } 99 100 private insertBadgeItem() { 101 102 } 103 104 private registerNumBadgeCallback(err, data) { 105 if (err.code) { 106 Log.showInfo(TAG, 'registerNumBadgeCallback faided ' + JSON.stringify(err)); 107 } else { 108 Log.showInfo(TAG, 'registerNumBadgeCallback success '); 109 } 110 } 111 112 private unRegisterNumBadgeCallback(err, data) { 113 if (err.code) { 114 Log.showInfo(TAG, 'unRegisterNumBadgeCallback faided ' + JSON.stringify(err)); 115 } else { 116 Log.showInfo(TAG, 'unRegisterNumBadgeCallback success '); 117 } 118 } 119 120 static getInstance(): NumBadgeManager { 121 if (globalThis.sNumBadgeManager == null) { 122 globalThis.sNumBadgeManager = new NumBadgeManager(); 123 } 124 return globalThis.sNumBadgeManager; 125 } 126 127 registerNumBadge() { 128 Log.showInfo(TAG, 'registerNumBadge called '); 129 Notification.subscribe(this.mSubscriber, this.mRegisterNumBadgeCallback); 130 } 131 132 unRegisterNumBadge() { 133 Log.showInfo(TAG, 'unRegisterNumBadge called '); 134 Notification.unsubscribe(this.mSubscriber, this.mUnRegisterNumBadgeCallback); 135 } 136}