• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 */
15
16import notification from '@ohos.notification'
17import prompt from '@ohos.prompt'
18import reminderAgent from '@ohos.reminderAgentManager';
19import vibrator from '@ohos.vibrator'
20import AudioPlayer from './AudioPlayer'
21import Constant from '../common/Constant'
22import Logger from './Logger'
23import PreferencesDataManager from './PreferencesDataManager'
24import { Reminder } from '../common/Reminder'
25import TimeConversion from './TimeConversion'
26
27const TAG: string = 'CalendarReminder'
28
29class CalendarReminder {
30  public calendarReminders: Reminder[] = []
31
32  async setCalendar(date: DatePickerResult) {
33    let month = date.month < 9 ? `0${date.month + 1}` : `${date.month + 1}`
34    let day = date.day < 10 ? `0${date.day}` : date.day
35    let context: any = getContext(this)
36    let selectCalendar: string = `${date.year}-${month}-${day}`
37    let isExistName = this.calendarReminders.find(element => element.reminderName === selectCalendar) !== undefined
38    if (!isExistName) {
39      let reminder: Reminder = {
40        audioSrc: '',
41        audioTimeouts: 0,
42        isStart: false,
43        isVibrator: false,
44        reminderId: 0,
45        reminderName: '',
46        vibratorTimeouts: 0,
47        reminderRequestCalendar: undefined
48      }
49      await reminderAgent.addNotificationSlot({ type: notification.SlotType.SERVICE_INFORMATION })
50      reminder.reminderName = selectCalendar
51      let calendar: reminderAgent.ReminderRequestCalendar = {
52        reminderType: reminderAgent.ReminderType.REMINDER_TYPE_CALENDAR,
53        dateTime: {
54          year: date.year,
55          month: date.month + 1,
56          day: date.day,
57          hour: 0,
58          minute: 0,
59        },
60        actionButton:
61        [{
62          title: context.resourceManager.getStringSync($r('app.string.calendar_close').id),
63          type: reminderAgent.ActionButtonType.ACTION_BUTTON_TYPE_CLOSE
64        }],
65        wantAgent: { pkgName: 'ohos.samples.reminderagentmanager', abilityName: 'MainAbility' },
66        ringDuration: Constant.REMINDER_DURATION,
67        title: context.resourceManager.getStringSync($r('app.string.calendar').id),
68        content: context.resourceManager.getStringSync($r('app.string.calendar_reach').id),
69        slotType: notification.SlotType.CONTENT_INFORMATION
70      }
71      Logger.info(TAG, `setCalendar this calendar is ${JSON.stringify(calendar)}}`)
72      reminder.reminderRequestCalendar = calendar
73      reminder.isStart = false
74      this.calendarReminders.push(reminder)
75      Logger.info(TAG, `setCalendar this all calendar is ${JSON.stringify(this.calendarReminders)}`)
76      await PreferencesDataManager.putData('Calendar', this.calendarReminders)
77    } else {
78      prompt.showToast({
79        message: context.resourceManager.getStringSync($r('app.string.calendar_existence').id),
80        duration: Constant.PROMPT_DURATION
81      })
82    }
83  }
84
85  async setToggle(isOn: boolean, index: number) {
86    this.calendarReminders[index].isStart = isOn
87    if (isOn) {
88      await reminderAgent.addNotificationSlot({ type: notification.SlotType.SERVICE_INFORMATION });
89      let reminderId = await reminderAgent.publishReminder(this.calendarReminders[index].reminderRequestCalendar)
90      this.calendarReminders[index].reminderId = reminderId;
91      if (this.calendarReminders[index].audioSrc) {
92        let audioIndex: number = await AudioPlayer.getAudioID(
93        this.calendarReminders[index].audioSrc, TimeConversion.dateToMillisecond(
94        this.calendarReminders[index].reminderRequestCalendar.dateTime.year,
95        this.calendarReminders[index].reminderRequestCalendar.dateTime.month,
96        this.calendarReminders[index].reminderRequestCalendar.dateTime.day,
97        this.calendarReminders[index].reminderRequestCalendar.dateTime.hour,
98        this.calendarReminders[index].reminderRequestCalendar.dateTime.minute) * Constant.SECONDS_MILLISECONDS);
99        this.calendarReminders[index].audioTimeouts = audioIndex;
100      }
101      await PreferencesDataManager.putData('Calendar', this.calendarReminders)
102      if (this.calendarReminders[index].isVibrator) {
103        let vibratorId = setTimeout(function () {
104          vibrator.vibrate(Constant.VIBRATOR_DURATION, function (err) {
105            if (err) {
106              Logger.error(TAG, `setToggle this vibrator is failed err is ${JSON.stringify(err)}`)
107            } else {
108              Logger.info(TAG, `setToggle this vibrator is successed`)
109            }
110          })
111        }, TimeConversion.dateToMillisecond(this.calendarReminders[index].reminderRequestCalendar.dateTime.year,
112        this.calendarReminders[index].reminderRequestCalendar.dateTime.month,
113        this.calendarReminders[index].reminderRequestCalendar.dateTime.day,
114        this.calendarReminders[index].reminderRequestCalendar.dateTime.hour,
115        this.calendarReminders[index].reminderRequestCalendar.dateTime.minute) * Constant.SECONDS_MILLISECONDS)
116        this.calendarReminders[index].vibratorTimeouts = vibratorId
117        await PreferencesDataManager.putData('Calendar', this.calendarReminders)
118      } else {
119        clearTimeout(this.calendarReminders[index].vibratorTimeouts)
120        await vibrator.stop(vibrator.VibratorStopMode.VIBRATOR_STOP_MODE_TIME)
121      }
122    } else {
123      clearTimeout(this.calendarReminders[index].vibratorTimeouts)
124      clearTimeout(this.calendarReminders[index].audioTimeouts)
125      await PreferencesDataManager.putData('Calendar', this.calendarReminders);
126      await reminderAgent.cancelReminder(this.calendarReminders[index].reminderId)
127      await vibrator.stop(vibrator.VibratorStopMode.VIBRATOR_STOP_MODE_TIME)
128    }
129  }
130
131  async openDialog(dialog: CustomDialogController, index: number) {
132    try {
133      await reminderAgent.cancelReminder(this.calendarReminders[index].reminderId)
134    } catch (err) {
135      Logger.error(TAG, `openDialog this cancelReminder is not exist,err is ${JSON.stringify(err)}`)
136    }
137    dialog.open()
138  }
139
140  async deleteCalendar(index: number) {
141    try {
142      clearTimeout(this.calendarReminders[index].vibratorTimeouts)
143      clearTimeout(this.calendarReminders[index].audioTimeouts)
144      reminderAgent.cancelReminder(this.calendarReminders[index].reminderId).then(() => {
145        Logger.info(TAG, `deleteCalendar cancelReminder is succeed`)
146      })
147      vibrator.stop(vibrator.VibratorStopMode.VIBRATOR_STOP_MODE_TIME).then(() => {
148        Logger.info(TAG, `deleteCalendar stop vibrator is succeed`)
149      })
150      this.calendarReminders[index].isStart = false
151      this.calendarReminders[index].reminderName = ''
152      this.calendarReminders[index].vibratorTimeouts = 0
153      this.calendarReminders[index].reminderRequestCalendar = undefined
154    } catch (err) {
155      Logger.info(TAG, `deleteCalendar this cancel not exist err is ${JSON.stringify(err)}`)
156    }
157    this.calendarReminders.splice(index, 1)
158    Logger.info(TAG, `deleteCalendar this all calendar is ${JSON.stringify(this.calendarReminders)}`)
159    PreferencesDataManager.putData('Calendar', this.calendarReminders).then(() => {
160      Logger.info(TAG, `deleteCalendar this put data is successed`)
161    })
162  }
163}
164
165export default new CalendarReminder()