vojo/src/app/plugins/notificationPolicy.ts

37 lines
1.3 KiB
TypeScript

import { registerPlugin } from '@capacitor/core';
import { isNativePlatform } from '../utils/capacitor';
// Bridge to the native NotificationPolicyPlugin (see
// android/app/src/main/java/chat/vojo/app/NotificationPolicyPlugin.java).
// "Do Not Disturb access" lets the incoming-call channel bypass DND / Bedtime so
// calls ring through. Web and iOS get the no-op fallback below — this only exists
// on Android.
export interface NotificationPolicyPlugin {
canBypassDnd(): Promise<{ value: boolean }>;
openSettings(): Promise<void>;
}
const NotificationPolicy = registerPlugin<NotificationPolicyPlugin>('NotificationPolicy', {
web: {
canBypassDnd: async () => ({ value: true }),
openSettings: async () => undefined,
},
});
export const canBypassDnd = async (): Promise<boolean> => {
if (!isNativePlatform()) return true;
try {
const { value } = await NotificationPolicy.canBypassDnd();
return value;
} catch {
// Plugin not yet available (older APK installed before it shipped). Fail
// "allowed" so we don't nag — without the grant calls just don't ring through
// DND, which the user can resolve from Settings themselves.
return true;
}
};
export const openNotificationPolicySettings = async (): Promise<void> => {
if (!isNativePlatform()) return;
await NotificationPolicy.openSettings();
};