JS changes
This commit is contained in:
@@ -1,2 +1,4 @@
|
|||||||
import {BackgroundNotificationHandler} from './src/ExpoBackgroundNotificationHandlerModule'
|
import {BackgroundNotificationPreferencesProvider} from './src/BackgroundNotificationHandlerProvider'
|
||||||
export default BackgroundNotificationHandler
|
import * as BackgroundNotifications from './src/index'
|
||||||
|
|
||||||
|
export {BackgroundNotificationPreferencesProvider, BackgroundNotifications}
|
||||||
|
|||||||
+3
-3
@@ -37,11 +37,11 @@ public class ExpoBackgroundNotificationHandlerModule: Module {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AsyncFunction("resetGenericCount") {
|
AsyncFunction("resetGenericCountAsync") {
|
||||||
SharedPrefs.shared.setValue(BadgeType.generic.toKeyName(), 0)
|
SharedPrefs.shared.setValue(BadgeType.generic.toKeyName(), 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
AsyncFunction("incrementMessagesCount") { (convoId: String) in
|
AsyncFunction("incrementMessagesCountAsync") { (convoId: String) in
|
||||||
guard !SharedPrefs.shared.setContains(INCREMENTED_FOR_KEY, convoId) else {
|
guard !SharedPrefs.shared.setContains(INCREMENTED_FOR_KEY, convoId) else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -53,7 +53,7 @@ public class ExpoBackgroundNotificationHandlerModule: Module {
|
|||||||
SharedPrefs.shared.setValue(BadgeType.messages.toKeyName(), count)
|
SharedPrefs.shared.setValue(BadgeType.messages.toKeyName(), count)
|
||||||
}
|
}
|
||||||
|
|
||||||
AsyncFunction("decrementMessagesCount") { (convoId: String) in
|
AsyncFunction("decrementMessagesCountAsync") { (convoId: String) in
|
||||||
guard SharedPrefs.shared.setContains(INCREMENTED_FOR_KEY, convoId) else {
|
guard SharedPrefs.shared.setContains(INCREMENTED_FOR_KEY, convoId) else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-17
@@ -1,7 +1,8 @@
|
|||||||
import React from 'react'
|
import React from 'react'
|
||||||
|
|
||||||
import {BackgroundNotificationHandlerPreferences} from './ExpoBackgroundNotificationHandler.types'
|
import {SharedPrefs} from '../../expo-bluesky-swiss-army'
|
||||||
import {BackgroundNotificationHandler} from './ExpoBackgroundNotificationHandlerModule'
|
import {BackgroundNotifications} from '../index'
|
||||||
|
import {BackgroundNotificationHandlerPreferences} from './types'
|
||||||
|
|
||||||
interface BackgroundNotificationPreferencesContext {
|
interface BackgroundNotificationPreferencesContext {
|
||||||
preferences: BackgroundNotificationHandlerPreferences
|
preferences: BackgroundNotificationHandlerPreferences
|
||||||
@@ -29,7 +30,7 @@ export function BackgroundNotificationPreferencesProvider({
|
|||||||
|
|
||||||
React.useEffect(() => {
|
React.useEffect(() => {
|
||||||
;(async () => {
|
;(async () => {
|
||||||
const prefs = await BackgroundNotificationHandler.getAllPrefsAsync()
|
const prefs = await BackgroundNotifications.getPrefsAsync()
|
||||||
setPreferences(prefs)
|
setPreferences(prefs)
|
||||||
})()
|
})()
|
||||||
}, [])
|
}, [])
|
||||||
@@ -43,20 +44,7 @@ export function BackgroundNotificationPreferencesProvider({
|
|||||||
k: Key,
|
k: Key,
|
||||||
v: BackgroundNotificationHandlerPreferences[Key],
|
v: BackgroundNotificationHandlerPreferences[Key],
|
||||||
) => {
|
) => {
|
||||||
switch (typeof v) {
|
SharedPrefs.setValueAsync(k, v)
|
||||||
case 'boolean': {
|
|
||||||
await BackgroundNotificationHandler.setBoolAsync(k, v)
|
|
||||||
break
|
|
||||||
}
|
|
||||||
case 'string': {
|
|
||||||
await BackgroundNotificationHandler.setStringAsync(k, v)
|
|
||||||
break
|
|
||||||
}
|
|
||||||
default: {
|
|
||||||
throw new Error(`Invalid type for value: ${typeof v}`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
setPreferences(prev => ({
|
setPreferences(prev => ({
|
||||||
...prev,
|
...prev,
|
||||||
[k]: v,
|
[k]: v,
|
||||||
|
|||||||
-44
@@ -1,44 +0,0 @@
|
|||||||
export type ExpoBackgroundNotificationHandlerModule = {
|
|
||||||
getAllPrefsAsync: () => Promise<BackgroundNotificationHandlerPreferences>
|
|
||||||
getBoolAsync: (forKey: string) => Promise<boolean>
|
|
||||||
getStringAsync: (forKey: string) => Promise<string>
|
|
||||||
getStringArrayAsync: (forKey: string) => Promise<string[]>
|
|
||||||
setBoolAsync: (
|
|
||||||
forKey: keyof BackgroundNotificationHandlerPreferences,
|
|
||||||
value: boolean,
|
|
||||||
) => Promise<void>
|
|
||||||
setStringAsync: (
|
|
||||||
forKey: keyof BackgroundNotificationHandlerPreferences,
|
|
||||||
value: string,
|
|
||||||
) => Promise<void>
|
|
||||||
setStringArrayAsync: (
|
|
||||||
forKey: keyof BackgroundNotificationHandlerPreferences,
|
|
||||||
value: string[],
|
|
||||||
) => Promise<void>
|
|
||||||
addToStringArrayAsync: (
|
|
||||||
forKey: keyof BackgroundNotificationHandlerPreferences,
|
|
||||||
value: string,
|
|
||||||
) => Promise<void>
|
|
||||||
removeFromStringArrayAsync: (
|
|
||||||
forKey: keyof BackgroundNotificationHandlerPreferences,
|
|
||||||
value: string,
|
|
||||||
) => Promise<void>
|
|
||||||
addManyToStringArrayAsync: (
|
|
||||||
forKey: keyof BackgroundNotificationHandlerPreferences,
|
|
||||||
value: string[],
|
|
||||||
) => Promise<void>
|
|
||||||
removeManyFromStringArrayAsync: (
|
|
||||||
forKey: keyof BackgroundNotificationHandlerPreferences,
|
|
||||||
value: string[],
|
|
||||||
) => Promise<void>
|
|
||||||
setBadgeCountAsync: (
|
|
||||||
type: 'generic' | 'messages',
|
|
||||||
count: number,
|
|
||||||
) => Promise<void>
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO there are more preferences in the native code, however they have not been added here yet.
|
|
||||||
// Don't add them until the native logic also handles the notifications for those preference types.
|
|
||||||
export type BackgroundNotificationHandlerPreferences = {
|
|
||||||
playSoundChat: boolean
|
|
||||||
}
|
|
||||||
-8
@@ -1,8 +0,0 @@
|
|||||||
import {requireNativeModule} from 'expo-modules-core'
|
|
||||||
|
|
||||||
import {ExpoBackgroundNotificationHandlerModule} from './ExpoBackgroundNotificationHandler.types'
|
|
||||||
|
|
||||||
export const BackgroundNotificationHandler =
|
|
||||||
requireNativeModule<ExpoBackgroundNotificationHandlerModule>(
|
|
||||||
'ExpoBackgroundNotificationHandler',
|
|
||||||
)
|
|
||||||
-28
@@ -1,28 +0,0 @@
|
|||||||
import {
|
|
||||||
BackgroundNotificationHandlerPreferences,
|
|
||||||
ExpoBackgroundNotificationHandlerModule,
|
|
||||||
} from './ExpoBackgroundNotificationHandler.types'
|
|
||||||
|
|
||||||
// Stub for web
|
|
||||||
export const BackgroundNotificationHandler = {
|
|
||||||
getAllPrefsAsync: async () => {
|
|
||||||
return {} as BackgroundNotificationHandlerPreferences
|
|
||||||
},
|
|
||||||
getBoolAsync: async (_: string) => {
|
|
||||||
return false
|
|
||||||
},
|
|
||||||
getStringAsync: async (_: string) => {
|
|
||||||
return ''
|
|
||||||
},
|
|
||||||
getStringArrayAsync: async (_: string) => {
|
|
||||||
return []
|
|
||||||
},
|
|
||||||
setBoolAsync: async (_: string, __: boolean) => {},
|
|
||||||
setStringAsync: async (_: string, __: string) => {},
|
|
||||||
setStringArrayAsync: async (_: string, __: string[]) => {},
|
|
||||||
addToStringArrayAsync: async (_: string, __: string) => {},
|
|
||||||
removeFromStringArrayAsync: async (_: string, __: string) => {},
|
|
||||||
addManyToStringArrayAsync: async (_: string, __: string[]) => {},
|
|
||||||
removeManyFromStringArrayAsync: async (_: string, __: string[]) => {},
|
|
||||||
setBadgeCountAsync: async (_: 'generic' | 'messages', __: number) => {},
|
|
||||||
} as ExpoBackgroundNotificationHandlerModule
|
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
import {Platform} from 'react-native'
|
||||||
|
|
||||||
|
export class NotImplementedError extends Error {
|
||||||
|
constructor(params = {}) {
|
||||||
|
if (__DEV__) {
|
||||||
|
const caller = new Error().stack?.split('\n')[2]
|
||||||
|
super(
|
||||||
|
`Not implemented on ${Platform.OS}. Given params: ${JSON.stringify(
|
||||||
|
params,
|
||||||
|
)} ${caller}`,
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
super('Not implemented')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
import {requireNativeModule} from 'expo'
|
||||||
|
|
||||||
|
import {BackgroundNotificationHandlerPreferences} from './ExpoBackgroundNotificationHandler.types'
|
||||||
|
|
||||||
|
const NativeModule = requireNativeModule('ExpoBackgroundNotificationHandler')
|
||||||
|
|
||||||
|
export function resetGenericCountAsync(count: number): Promise<void> {
|
||||||
|
NativeModule.resetGenericCountAsync(count)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function incrementMessagesCountAsync(
|
||||||
|
count: number,
|
||||||
|
convoId: string,
|
||||||
|
): Promise<void> {
|
||||||
|
NativeModule.incrementMessagesCountAsync(count, convoId)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function decrementMessagesCountAsync(
|
||||||
|
count: number,
|
||||||
|
convoId: string,
|
||||||
|
): Promise<void> {
|
||||||
|
NativeModule.decrementMessagesCountAsync(count, convoId)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getPrefsAsync(): Promise<BackgroundNotificationHandlerPreferences> {
|
||||||
|
return NativeModule.getPrefsAsync()
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
import {NotImplementedError} from './NotImplemented'
|
||||||
|
import {BackgroundNotificationHandlerPreferences} from './types'
|
||||||
|
|
||||||
|
export function resetGenericCountAsync(count: number): Promise<void> {
|
||||||
|
throw new NotImplementedError({count})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function incrementMessagesCountAsync(
|
||||||
|
count: number,
|
||||||
|
convoId: string,
|
||||||
|
): Promise<void> {
|
||||||
|
throw new NotImplementedError({count, convoId})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function decrementMessagesCountAsync(
|
||||||
|
count: number,
|
||||||
|
convoId: string,
|
||||||
|
): Promise<void> {
|
||||||
|
throw new NotImplementedError({count, convoId})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getPrefsAsync(): Promise<BackgroundNotificationHandlerPreferences> {
|
||||||
|
throw new NotImplementedError()
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
export type BackgroundNotificationHandlerPreferences = {
|
||||||
|
playSoundChat: boolean
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user