• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (c) 2022-2023 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 type { MediaObserverCallback } from './MediaObserverCallback';
16import { Log } from '../../../utils/Log';
17import { Constants } from '../../common/Constants';
18import type { ChangeData, UserFileManager } from '../../../access/UserFileManagerAccess';
19import { UserFileManagerAccess } from '../../../access/UserFileManagerAccess';
20
21const TAG: string = 'common_MediaObserver';
22
23export class MediaObserver {
24  callbacks: Set<MediaObserverCallback> = new Set<MediaObserverCallback>();
25
26  static getInstance(): MediaObserver {
27    if (AppStorage.Get(Constants.APP_KEY_MENU_USER_FILE_MANAGER_OBSERVER) == null) {
28      AppStorage.SetOrCreate(Constants.APP_KEY_MENU_USER_FILE_MANAGER_OBSERVER, new MediaObserver());
29    }
30    return AppStorage.Get(Constants.APP_KEY_MENU_USER_FILE_MANAGER_OBSERVER);
31  }
32
33  registerObserver(callback: MediaObserverCallback) {
34    Log.info(TAG, 'registerObserver');
35    if (!callback) {
36      Log.warn(TAG, 'registerObserver with empty callback');
37      return;
38    }
39
40    if (this.callbacks.has(callback)) {
41      Log.warn(TAG, 'registerObserver already exist');
42      return;
43    }
44    this.callbacks.add(callback);
45  }
46
47  unregisterObserver(callback: MediaObserverCallback) {
48    Log.info(TAG, 'unregisterObserver');
49    if (!callback) {
50      Log.warn(TAG, 'unregisterObserver with empty callback');
51      return;
52    }
53
54    if (this.callbacks.has(callback)) {
55      this.callbacks.delete(callback);
56    } else {
57      Log.warn(TAG, 'unregisterObserver not exist');
58    }
59  }
60
61  sendNotify(mediaType: string) {
62    Log.info(TAG, `sendNotify size: ${this.callbacks.size}`);
63    for (let callback of this.callbacks) {
64      callback.onChange(mediaType);
65    }
66  }
67
68  registerForAllPhotos() {
69    Log.info(TAG, 'registerForAllPhotos');
70    let userFileManager: UserFileManager = UserFileManagerAccess.getInstance().getMediaLibrary();
71    if (userFileManager) {
72      userFileManager.on(UserFileManagerAccess.REGISTER_TYPE_ALL_PHOTOS, true, (changeData: ChangeData) => {
73        Log.info(TAG, `userFileManager.on for REGISTER_TYPE_ALL_PHOTOS, ${JSON.stringify(changeData)}`);
74        this.sendNotify('image');
75      });
76    } else {
77      Log.error(TAG, 'register is null!');
78    }
79  }
80
81  unregisterForAllPhotos() {
82    Log.info(TAG, 'unregisterForAllPhotos');
83    let userFileManager: UserFileManager = UserFileManagerAccess.getInstance().getMediaLibrary();
84    if (userFileManager) {
85      userFileManager.off(UserFileManagerAccess.REGISTER_TYPE_ALL_PHOTOS);
86    } else {
87      Log.error(TAG, 'unregister is null!');
88    }
89  }
90
91  registerForAllAlbums() {
92    Log.info(TAG, 'registerForAllAlbums');
93    let userFileManager: UserFileManager = UserFileManagerAccess.getInstance().getMediaLibrary();
94    if (userFileManager) {
95      userFileManager.on(UserFileManagerAccess.REGISTER_TYPE_ALL_ALBUMS, true, (changeData: ChangeData) => {
96        Log.info(TAG, `userFileManager.on for REGISTER_TYPE_ALL_ALBUMS, ${JSON.stringify(changeData)}`);
97        this.sendNotify('image');
98      });
99    } else {
100      Log.error(TAG, 'register is null!');
101    }
102  }
103
104  unregisterForAllAlbums() {
105    Log.info(TAG, 'unregisterForAllAlbums');
106    let userFileManager: UserFileManager = UserFileManagerAccess.getInstance().getMediaLibrary();
107    if (userFileManager) {
108      userFileManager.off(UserFileManagerAccess.REGISTER_TYPE_ALL_ALBUMS);
109    } else {
110      Log.error(TAG, 'unregister is null!');
111    }
112  }
113
114  registerForAlbum(albumUri: string) {
115    Log.info(TAG, 'registerForAllAlbums');
116    let userFileManager: UserFileManager = UserFileManagerAccess.getInstance().getMediaLibrary();
117    if (userFileManager) {
118      userFileManager.on(albumUri, false, (changeData: ChangeData) => {
119        Log.info(TAG, 'userFileManager.on for REGISTER_TYPE_ALL_ALBUMS');
120        this.sendNotify('album');
121      });
122    } else {
123      Log.error(TAG, 'register is null!');
124    }
125  }
126
127  unregisterForAlbum(albumUri: string) {
128    Log.info(TAG, 'unregisterForAllAlbums');
129    let userFileManager: UserFileManager = UserFileManagerAccess.getInstance().getMediaLibrary();
130    if (userFileManager) {
131      userFileManager.off(albumUri);
132    } else {
133      Log.error(TAG, 'unregister is null!');
134    }
135  }
136}