123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- // @flow
-
- /**
- * An registry that dispatches hardware back button events for subscribers with a custom logic.
- */
- class BackButtonRegistry {
- _listeners: Array<Function>;
-
- /**
- * Instantiates a new instance of the registry.
- */
- constructor() {
- this._listeners = [];
- }
-
- /**
- * Adds a listener to the registry.
- *
- * NOTE: Due to the different order of component mounts, we allow a component to register
- * its listener to the top of the list, so then that will be invoked before other, 'non-top'
- * listeners. For example a 'non-top' listener can be the one that puts the app into PiP mode,
- * while a 'top' listener is the one that closes a modal in a conference.
- *
- * @param {Function} listener - The listener function.
- * @param {boolean?} top - If true, the listener will be put on the top (eg for modal-like components).
- * @returns {void}
- */
- addListener(listener: Function, top: boolean = false) {
- if (top) {
- this._listeners.splice(0, 0, listener);
- } else {
- this._listeners.push(listener);
- }
- }
-
- /**
- * Removes a listener from the registry.
- *
- * @param {Function} listener - The listener to remove.
- * @returns {void}
- */
- removeListener(listener: Function) {
- this._listeners = this._listeners.filter(f => f !== listener);
- }
-
- onHardwareBackPress: () => boolean
-
- /**
- * Callback for the back button press event.
- *
- * @returns {boolean}
- */
- onHardwareBackPress() {
- for (const listener of this._listeners) {
- const result = listener();
-
- if (result === true) {
- return true;
- }
- }
-
- return false;
- }
- }
-
- export default new BackButtonRegistry();
|