index.uts 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import { display } from '@kit.ArkUI';
  2. import { window } from '@kit.ArkUI';
  3. import { Callback, BusinessError } from '@kit.BasicServicesKit';
  4. import { getAbilityContext } from '@dcloudio/uni-runtime';
  5. import {
  6. OnUserCaptureScreen, UserCaptureScreenCallback,
  7. OffUserCaptureScreen,
  8. SetUserCaptureScreen, SetUserCaptureScreenOptions, SetUserCaptureScreenSuccess
  9. } from '../interface.uts';
  10. const onUserCaptureScreenCallbacks: Function[] = []
  11. const harmonyCaptureStatusChange: Callback<boolean> = (captureStatus: boolean) => {
  12. if (captureStatus) {
  13. onUserCaptureScreenCallbacks.forEach(cb => {
  14. typeof cb === 'function' && cb()
  15. })
  16. }
  17. }
  18. display.on('captureStatusChange', harmonyCaptureStatusChange)
  19. export const onUserCaptureScreen: OnUserCaptureScreen = function (callback: UserCaptureScreenCallback | null) {
  20. if (callback) {
  21. onUserCaptureScreenCallbacks.push(callback)
  22. }
  23. }
  24. export const offUserCaptureScreen: OffUserCaptureScreen = function (callback: UserCaptureScreenCallback | null) {
  25. if (callback) {
  26. const index = onUserCaptureScreenCallbacks.indexOf(callback)
  27. if (index > -1) {
  28. onUserCaptureScreenCallbacks.splice(index, 1)
  29. }
  30. }
  31. }
  32. export const setUserCaptureScreen: SetUserCaptureScreen = function (options: SetUserCaptureScreenOptions) {
  33. const errSubject = 'uni-usercapturescreen'
  34. const setUserCaptureScreenSuccess: SetUserCaptureScreenSuccess = {}
  35. window.getLastWindow(getAbilityContext()!, (err, window) => {
  36. const errCode: number = err.code;
  37. if (errCode) {
  38. options.fail?.({
  39. errCode: (err as BusinessError).code,
  40. errSubject,
  41. errMsg: `setUserCaptureScreen:fail ${(err as BusinessError).message}`
  42. } as IUniError)
  43. options.complete?.(setUserCaptureScreenSuccess);
  44. return;
  45. } else {
  46. try {
  47. UTSHarmony.requestSystemPermission(['ohos.permission.PRIVACY_WINDOW'], (allRight: boolean, _grantedList: string[]) => {
  48. if (allRight) {
  49. window.setWindowPrivacyMode(!options.enable, (err: BusinessError) => {
  50. const errCode: number = err.code;
  51. if (errCode) {
  52. options.fail?.({
  53. errCode: err.code,
  54. errSubject,
  55. errMsg: `setUserCaptureScreen:fail ${err.message}`
  56. } as IUniError)
  57. options.complete?.(setUserCaptureScreenSuccess);
  58. return;
  59. }
  60. options.success?.(setUserCaptureScreenSuccess);
  61. options.complete?.(setUserCaptureScreenSuccess);
  62. });
  63. } else {
  64. throw new Error('permission denied')
  65. }
  66. }, (_doNotAskAgain: boolean, _grantedList: string[]) => {
  67. throw new Error('permission denied');
  68. })
  69. } catch (err) {
  70. options.fail?.({
  71. errCode: (err as BusinessError).code,
  72. errSubject,
  73. errMsg: `setUserCaptureScreen:fail ${(err as BusinessError).message}`
  74. } as IUniError)
  75. options.complete?.(setUserCaptureScreenSuccess);
  76. }
  77. }
  78. })
  79. }