Skip to content

Commit

Permalink
Use generated Java delegate for setting properties on ReactDrawerLayo…
Browse files Browse the repository at this point in the history
…utManager

Summary: This diff migrates `ReactDrawerLayoutManager` to use the generated `AndroidDrawerLayoutManagerDelegate` for setting its properties.

Reviewed By: mdvacca

Differential Revision: D17343383

fbshipit-source-id: 85cd7ee3531b152da2601048f5e458f5dad73ad6
  • Loading branch information
makovkastar authored and facebook-github-bot committed Sep 23, 2019
1 parent 92f3b4a commit 81f567d
Show file tree
Hide file tree
Showing 5 changed files with 73 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ type NativeProps = $ReadOnly<{|
* from the edge of the window.
*/

drawerWidth?: ?Float,
drawerWidth?: WithDefault<Float, null>,

/**
* Specifies the lock mode of the drawer. The drawer can be locked in 3 states:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public void setProperty(T view, String propName, @Nullable Object value) {
mViewManager.setDrawerPosition(view, (String) value);
break;
case "drawerWidth":
mViewManager.setDrawerWidth(view, value == null ? 0f : ((Double) value).floatValue());
mViewManager.setDrawerWidth(view, value == null ? null : ((Double) value).floatValue());
break;
case "drawerLockMode":
mViewManager.setDrawerLockMode(view, (String) value);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public interface AndroidDrawerLayoutManagerInterface<T extends View> {
void setKeyboardDismissMode(T view, @Nullable String value);
void setDrawerBackgroundColor(T view, @Nullable Integer value);
void setDrawerPosition(T view, @Nullable String value);
void setDrawerWidth(T view, float value);
void setDrawerWidth(T view, @Nullable Float value);
void setDrawerLockMode(T view, @Nullable String value);
void setStatusBarBackgroundColor(T view, @Nullable Integer value);
void openDrawer(T view);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,6 @@ rn_android_library(
react_native_target("java/com/facebook/react/uimanager:uimanager"),
react_native_target("java/com/facebook/react/uimanager/annotations:annotations"),
react_native_target("java/com/facebook/react/views/scroll:scroll"),
react_native_target("java/com/facebook/react/viewmanagers:viewmanagers"),
],
)
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@

import android.view.Gravity;
import android.view.View;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.drawerlayout.widget.DrawerLayout;
Expand All @@ -22,8 +21,11 @@
import com.facebook.react.uimanager.ThemedReactContext;
import com.facebook.react.uimanager.UIManagerModule;
import com.facebook.react.uimanager.ViewGroupManager;
import com.facebook.react.uimanager.ViewManagerDelegate;
import com.facebook.react.uimanager.annotations.ReactProp;
import com.facebook.react.uimanager.events.EventDispatcher;
import com.facebook.react.viewmanagers.AndroidDrawerLayoutManagerDelegate;
import com.facebook.react.viewmanagers.AndroidDrawerLayoutManagerInterface;
import com.facebook.react.views.drawer.events.DrawerClosedEvent;
import com.facebook.react.views.drawer.events.DrawerOpenedEvent;
import com.facebook.react.views.drawer.events.DrawerSlideEvent;
Expand All @@ -32,13 +34,20 @@

/** View Manager for {@link ReactDrawerLayout} components. */
@ReactModule(name = ReactDrawerLayoutManager.REACT_CLASS)
public class ReactDrawerLayoutManager extends ViewGroupManager<ReactDrawerLayout> {
public class ReactDrawerLayoutManager extends ViewGroupManager<ReactDrawerLayout>
implements AndroidDrawerLayoutManagerInterface<ReactDrawerLayout> {

public static final String REACT_CLASS = "AndroidDrawerLayout";

public static final int OPEN_DRAWER = 1;
public static final int CLOSE_DRAWER = 2;

private final ViewManagerDelegate<ReactDrawerLayout> mDelegate;

public ReactDrawerLayoutManager() {
mDelegate = new AndroidDrawerLayoutManagerDelegate<>(this);
}

@Override
public @NonNull String getName() {
return REACT_CLASS;
Expand All @@ -47,16 +56,24 @@ public class ReactDrawerLayoutManager extends ViewGroupManager<ReactDrawerLayout
@Override
protected void addEventEmitters(ThemedReactContext reactContext, ReactDrawerLayout view) {
view.addDrawerListener(
new DrawerEventEmitter(
view, reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher())
);
new DrawerEventEmitter(
view, reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher()));
}

@Override
protected @NonNull ReactDrawerLayout createViewInstance(@NonNull ThemedReactContext context) {
return new ReactDrawerLayout(context);
}

@Override
public void setDrawerPosition(ReactDrawerLayout view, @Nullable String value) {
if (value == null) {
view.setDrawerPosition(Gravity.START);
} else {
setDrawerPositionInternal(view, value);
}
}

@ReactProp(name = "drawerPosition")
public void setDrawerPosition(ReactDrawerLayout view, Dynamic drawerPosition) {
if (drawerPosition.isNull()) {
Expand All @@ -71,30 +88,42 @@ public void setDrawerPosition(ReactDrawerLayout view, Dynamic drawerPosition) {
"Unknown drawerPosition " + drawerPositionNum);
}
} else if (drawerPosition.getType() == ReadableType.String) {
final String drawerPositionStr = drawerPosition.asString();

if (drawerPositionStr.equals("left")) {
view.setDrawerPosition(Gravity.START);
} else if (drawerPositionStr.equals("right")) {
view.setDrawerPosition(Gravity.END);
} else {
throw new JSApplicationIllegalArgumentException(
"drawerPosition must be 'left' or 'right', received" + drawerPositionStr);
}
setDrawerPositionInternal(view, drawerPosition.asString());
} else {
throw new JSApplicationIllegalArgumentException("drawerPosition must be a string or int");
}
}

private void setDrawerPositionInternal(ReactDrawerLayout view, String drawerPosition) {
if (drawerPosition.equals("left")) {
view.setDrawerPosition(Gravity.START);
} else if (drawerPosition.equals("right")) {
view.setDrawerPosition(Gravity.END);
} else {
throw new JSApplicationIllegalArgumentException(
"drawerPosition must be 'left' or 'right', received" + drawerPosition);
}
}

@ReactProp(name = "drawerWidth", defaultFloat = Float.NaN)
public void getDrawerWidth(ReactDrawerLayout view, float width) {
public void setDrawerWidth(ReactDrawerLayout view, float width) {
int widthInPx =
Float.isNaN(width)
? ReactDrawerLayout.DEFAULT_DRAWER_WIDTH
: Math.round(PixelUtil.toPixelFromDIP(width));
view.setDrawerWidth(widthInPx);
}

@Override
public void setDrawerWidth(ReactDrawerLayout view, @Nullable Float width) {
int widthInPx =
width == null
? ReactDrawerLayout.DEFAULT_DRAWER_WIDTH
: Math.round(PixelUtil.toPixelFromDIP(width));
view.setDrawerWidth(widthInPx);
}

@Override
@ReactProp(name = "drawerLockMode")
public void setDrawerLockMode(ReactDrawerLayout view, @Nullable String drawerLockMode) {
if (drawerLockMode == null || "unlocked".equals(drawerLockMode)) {
Expand All @@ -108,6 +137,25 @@ public void setDrawerLockMode(ReactDrawerLayout view, @Nullable String drawerLoc
}
}

@Override
public void openDrawer(ReactDrawerLayout view) {
view.openDrawer();
}

@Override
public void closeDrawer(ReactDrawerLayout view) {
view.closeDrawer();
}

@Override
public void setKeyboardDismissMode(ReactDrawerLayout view, @Nullable String value) {}

@Override
public void setDrawerBackgroundColor(ReactDrawerLayout view, @Nullable Integer value) {}

@Override
public void setStatusBarBackgroundColor(ReactDrawerLayout view, @Nullable Integer value) {}

@Override
public void setElevation(@NonNull ReactDrawerLayout view, float elevation) {
view.setDrawerElevation(PixelUtil.toPixelFromDIP(elevation));
Expand Down Expand Up @@ -183,6 +231,11 @@ public void addView(ReactDrawerLayout parent, View child, int index) {
parent.setDrawerProperties();
}

@Override
public ViewManagerDelegate<ReactDrawerLayout> getDelegate() {
return mDelegate;
}

public static class DrawerEventEmitter implements DrawerLayout.DrawerListener {

private final DrawerLayout mDrawerLayout;
Expand Down

0 comments on commit 81f567d

Please sign in to comment.