Skip to content

Commit 1f061ba

Browse files
committed
Add drawerLockMode prop to DrawerLayoutAndroid
Closes #5270.
1 parent 96a3a8e commit 1f061ba

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js

Lines changed: 15 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 = [
@@ -70,6 +71,7 @@ var DRAWER_STATES = [
7071
var DrawerLayoutAndroid = React.createClass({
7172
statics: {
7273
positions: DrawerConsts.DrawerPosition,
74+
lockMode: DrawerConsts.DrawerLockMode
7375
},
7476

7577
propTypes: {
@@ -95,6 +97,18 @@ var DrawerLayoutAndroid = React.createClass({
9597
* from the edge of the window.
9698
*/
9799
drawerWidth: ReactPropTypes.number,
100+
/**
101+
* Specifies the lock mode of the drawer. The drawer can be locked in 3 states:
102+
* - unlocked (default), meaning that the drawer will respond (open/close) to touch gestures.
103+
* - locked closed, meaning that the drawer will stay closed and not respond to gestures.
104+
* - locked open, meaning that the drawer will stay opened and not respond to gestures.
105+
* The drawer may still be opened and closed programmatically (`openDrawer`/`closeDrawer`).
106+
*/
107+
drawerLockMode: ReactPropTypes.oneOf([
108+
DrawerConsts.DrawerLockMode.Unlocked,
109+
DrawerConsts.DrawerLockMode.LockedClosed,
110+
DrawerConsts.DrawerLockMode.LockedOpen
111+
]),
98112
/**
99113
* Function called whenever there is an interaction with the navigation view.
100114
*/
@@ -142,6 +156,7 @@ var DrawerLayoutAndroid = React.createClass({
142156
ref={RK_DRAWER_REF}
143157
drawerWidth={this.props.drawerWidth}
144158
drawerPosition={this.props.drawerPosition}
159+
drawerLockMode={this.props.drawerLockMode}
145160
style={styles.base}
146161
onDrawerSlide={this._onDrawerSlide}
147162
onDrawerOpen={this._onDrawerOpen}

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

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

79+
@ReactProp(name = "drawerLockMode", defaultInt = DrawerLayout.LOCK_MODE_UNLOCKED)
80+
public void setDrawerLockMode(ReactDrawerLayout view, int drawerLockMode) {
81+
if (DrawerLayout.LOCK_MODE_UNLOCKED == drawerLockMode ||
82+
DrawerLayout.LOCK_MODE_LOCKED_CLOSED == drawerLockMode ||
83+
DrawerLayout.LOCK_MODE_LOCKED_OPEN == drawerLockMode) {
84+
view.setDrawerLockMode(drawerLockMode);
85+
} else {
86+
throw new JSApplicationIllegalArgumentException("Unknown drawerLockMode " + drawerLockMode);
87+
}
88+
}
89+
7990
@Override
8091
public boolean needsCustomLayoutForChildren() {
8192
// Return true, since DrawerLayout will lay out it's own children.
@@ -106,7 +117,12 @@ public void receiveCommand(
106117
public @Nullable Map getExportedViewConstants() {
107118
return MapBuilder.of(
108119
"DrawerPosition",
109-
MapBuilder.of("Left", Gravity.START, "Right", Gravity.END));
120+
MapBuilder.of("Left", Gravity.START, "Right", Gravity.END),
121+
"DrawerLockMode",
122+
MapBuilder.of(
123+
"Unlocked", DrawerLayout.LOCK_MODE_UNLOCKED,
124+
"LockedClosed", DrawerLayout.LOCK_MODE_LOCKED_CLOSED,
125+
"LockedOpen", DrawerLayout.LOCK_MODE_LOCKED_OPEN));
110126
}
111127

112128
@Override

0 commit comments

Comments
 (0)