Skip to content

Commit c227a43

Browse files
andreasdripglotov
authored andcommitted
Add drawerLockMode prop to DrawerLayoutAndroid
Summary:Closes facebook#5270. Closes facebook#5534 Differential Revision: D2970771 fb-gh-sync-id: 36a814032283df7d4c469964f803b8d20d1b0c93 shipit-source-id: 36a814032283df7d4c469964f803b8d20d1b0c93
1 parent 5a28e84 commit c227a43

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ var INNERVIEW_REF = 'innerView';
2828
var DrawerLayoutValidAttributes = {
2929
drawerWidth: true,
3030
drawerPosition: true,
31+
drawerLockMode: true
3132
};
3233

3334
var DRAWER_STATES = [
@@ -95,6 +96,18 @@ var DrawerLayoutAndroid = React.createClass({
9596
* from the edge of the window.
9697
*/
9798
drawerWidth: ReactPropTypes.number,
99+
/**
100+
* Specifies the lock mode of the drawer. The drawer can be locked in 3 states:
101+
* - unlocked (default), meaning that the drawer will respond (open/close) to touch gestures.
102+
* - locked closed, meaning that the drawer will stay closed and not respond to gestures.
103+
* - locked open, meaning that the drawer will stay opened and not respond to gestures.
104+
* The drawer may still be opened and closed programmatically (`openDrawer`/`closeDrawer`).
105+
*/
106+
drawerLockMode: ReactPropTypes.oneOf([
107+
'unlocked',
108+
'locked-closed',
109+
'locked-open'
110+
]),
98111
/**
99112
* Function called whenever there is an interaction with the navigation view.
100113
*/
@@ -142,6 +155,7 @@ var DrawerLayoutAndroid = React.createClass({
142155
ref={RK_DRAWER_REF}
143156
drawerWidth={this.props.drawerWidth}
144157
drawerPosition={this.props.drawerPosition}
158+
drawerLockMode={this.props.drawerLockMode}
145159
style={styles.base}
146160
onDrawerSlide={this._onDrawerSlide}
147161
onDrawerOpen={this._onDrawerOpen}

ReactAndroid/src/main/java/com/facebook/react/views/drawer/ReactDrawerLayoutManager.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,19 @@ public void getDrawerWidth(ReactDrawerLayout view, float width) {
7676
view.setDrawerWidth(widthInPx);
7777
}
7878

79+
@ReactProp(name = "drawerLockMode")
80+
public void setDrawerLockMode(ReactDrawerLayout view, @Nullable String drawerLockMode) {
81+
if (drawerLockMode == null || "unlocked".equals(drawerLockMode)) {
82+
view.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
83+
} else if ("locked-closed".equals(drawerLockMode)) {
84+
view.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
85+
} else if ("locked-open".equals(drawerLockMode)) {
86+
view.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_OPEN);
87+
} else {
88+
throw new JSApplicationIllegalArgumentException("Unknown drawerLockMode " + drawerLockMode);
89+
}
90+
}
91+
7992
@Override
8093
public boolean needsCustomLayoutForChildren() {
8194
// Return true, since DrawerLayout will lay out it's own children.

0 commit comments

Comments
 (0)