Backed out changeset 13a4ea1d64ce

Reviewed By: ericvicenti

Differential Revision: D3093064

fb-gh-sync-id: c9b68c8c5ab8ddaf77570d2cf8024e36925e5e76
fbshipit-source-id: c9b68c8c5ab8ddaf77570d2cf8024e36925e5e76
This commit is contained in:
Andy Street 2016-03-29 03:41:23 -07:00 committed by Facebook Github Bot 1
parent a28e59bd97
commit ede99eeadd
3 changed files with 13 additions and 85 deletions

View File

@ -1,66 +0,0 @@
/**
* The examples provided by Facebook are for non-commercial testing and
* evaluation purposes only.
*
* Facebook reserves all rights not expressly granted.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL
* FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
*/
'use strict';
var React = require('react-native');
var {
Text,
View,
BackAndroid,
} = React;
var BackAndroidExample = React.createClass({
getInitialState: function() {
return {
defaultBackHandler: false
};
},
componentDidMount: function() {
BackAndroid.addEventListener('hardwareBackPress', this._handleBackButton);
},
componentWillUnmount: function() {
BackAndroid.removeEventListener('hardwareBackPress', this._handleBackButton);
},
_handleBackButton: function() {
if (!this.state.defaultBackHandler) {
this.setState({defaultBackHandler: true});
return true;
}
return false;
},
render: function() {
return (
<View>
<Text>{this.state.defaultBackHandler ? 'Ok, I\'ll quit.' : 'I won\'t quit.'}</Text>
</View>
);
},
});
exports.title = 'BackAndroid';
exports.description = 'Custom back button handler';
exports.examples = [
{
title: 'Custom back button handler',
render(): ReactElement { return <BackAndroidExample />; }
}
];

View File

@ -102,10 +102,6 @@ const APIExamples = [
key: 'AppStateExample',
module: require('./AppStateExample'),
},
{
key: 'BackAndroidExample',
module: require('./BackAndroidExample'),
},
{
key: 'BorderExample',
module: require('./BorderExample'),

View File

@ -20,19 +20,17 @@ type BackPressEventName = $Enum<{
backPress: string;
}>;
var _backPressSubscriptions = [];
var _backPressSubscriptions = new Set();
RCTDeviceEventEmitter.addListener(DEVICE_BACK_EVENT, function() {
var propagate = true;
for (var i = _backPressSubscriptions.length - 1; i >= 0; i--) {
var subscription = _backPressSubscriptions[i];
var backPressSubscriptions = new Set(_backPressSubscriptions);
var invokeDefault = true;
backPressSubscriptions.forEach((subscription) => {
if (subscription()) {
propagate = false;
break;
invokeDefault = false;
}
}
if (propagate) {
});
if (invokeDefault) {
BackAndroid.exitApp();
}
});
@ -62,18 +60,18 @@ var BackAndroid = {
addEventListener: function (
eventName: BackPressEventName,
handler: Function
): void {
_backPressSubscriptions.push(handler);
): {remove: () => void} {
_backPressSubscriptions.add(handler);
return {
remove: () => BackAndroid.removeEventListener(eventName, handler),
};
},
removeEventListener: function(
eventName: BackPressEventName,
handler: Function
): void {
var index = _backPressSubscriptions.indexOf(handler);
if (index !== -1) {
_backPressSubscriptions.splice(index, 1);
}
_backPressSubscriptions.delete(handler);
},
};