| 123456789101112131415161718192021222324252627282930313233343536 | // @flow
import { BackHandler } from 'react-native';
import { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from '../../base/app';
import { MiddlewareRegistry } from '../../base/redux';
import BackButtonRegistry from './BackButtonRegistry';
// Binding function to the proper instance, so then the event emitter won't replace the
// underlying instance.
BackButtonRegistry.onHardwareBackPress = BackButtonRegistry.onHardwareBackPress.bind(BackButtonRegistry);
/**
 * Middleware that captures App lifetime actions and subscribes to application
 * state changes. When the application state changes it will fire the action
 * required to mute or unmute the local video in case the application goes to
 * the background or comes back from it.
 *
 * @param {Store} store - The redux store.
 * @returns {Function}
 * @see {@link https://facebook.github.io/react-native/docs/appstate.html}
 */
MiddlewareRegistry.register(() => next => action => {
    switch (action.type) {
    case APP_WILL_MOUNT:
        BackHandler.addEventListener('hardwareBackPress', BackButtonRegistry.onHardwareBackPress);
        break;
    case APP_WILL_UNMOUNT:
        BackHandler.removeEventListener('hardwareBackPress', BackButtonRegistry.onHardwareBackPress);
        break;
    }
    return next(action);
});
 |