fix(mobile): Fixed issue where pressing the back button on editor screen wouldn't switch back to the items list on Android
This commit is contained in:
@@ -3,6 +3,11 @@ type RemoveListener = () => void
|
||||
|
||||
export class AndroidBackHandler {
|
||||
private listeners = new Set<Listener>()
|
||||
private fallbackListener: Listener | undefined
|
||||
|
||||
setFallbackListener(listener: Listener) {
|
||||
this.fallbackListener = listener
|
||||
}
|
||||
|
||||
addEventListener(listener: Listener): RemoveListener {
|
||||
this.listeners.add(listener)
|
||||
@@ -13,10 +18,17 @@ export class AndroidBackHandler {
|
||||
}
|
||||
|
||||
notifyEvent() {
|
||||
let handled = false
|
||||
for (const listener of Array.from(this.listeners).reverse()) {
|
||||
if (listener()) {
|
||||
handled = true
|
||||
return
|
||||
} else {
|
||||
handled = false
|
||||
}
|
||||
}
|
||||
if (!handled && this.fallbackListener) {
|
||||
this.fallbackListener()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,19 +34,14 @@ const AndroidBackHandlerProvider = ({ application, children }: ProviderProps) =>
|
||||
)
|
||||
|
||||
useEffect(() => {
|
||||
const removeListener = addAndroidBackHandler(() => {
|
||||
application.setAndroidBackHandlerFallbackListener(() => {
|
||||
const shouldConfirm = (application.getValue(AndroidConfirmBeforeExitKey) as boolean) ?? true
|
||||
|
||||
application.mobileDevice().exitApp(shouldConfirm)
|
||||
|
||||
return true
|
||||
})
|
||||
return () => {
|
||||
if (removeListener) {
|
||||
removeListener()
|
||||
}
|
||||
}
|
||||
}, [addAndroidBackHandler, application])
|
||||
}, [application])
|
||||
|
||||
return (
|
||||
<BackHandlerContext.Provider value={addAndroidBackHandler}>
|
||||
|
||||
Reference in New Issue
Block a user