Skip to content

Commit fc5fee1

Browse files
committed
Add drawerLockMode prop to DrawerLayoutAndroid
Closes #5270.
1 parent f68281a commit fc5fee1

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js

Lines changed: 11 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,14 @@ 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.
102+
*/
103+
drawerLockMode: ReactPropTypes.oneOf([
104+
DrawerConsts.DrawerLockMode.Unlocked,
105+
DrawerConsts.DrawerLockMode.LockedClosed,
106+
DrawerConsts.DrawerLockMode.LockedOpen
107+
]),
98108
/**
99109
* Function called whenever there is an interaction with the navigation view.
100110
*/
@@ -142,6 +152,7 @@ var DrawerLayoutAndroid = React.createClass({
142152
ref={RK_DRAWER_REF}
143153
drawerWidth={this.props.drawerWidth}
144154
drawerPosition={this.props.drawerPosition}
155+
drawerLockMode={this.props.drawerLockMode}
145156
style={styles.base}
146157
onDrawerSlide={this._onDrawerSlide}
147158
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)