From 5ca5ec76889040c7c65b4a73bfe42f6e675eb0bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Oghin=C4=83?= Date: Wed, 30 Sep 2015 05:31:30 -0700 Subject: [PATCH] add remote image support to toolbar Differential Revision: D2493627 --- .../ToolbarAndroidExample.android.js | 8 + Examples/UIExplorer/bunny.png | Bin 0 -> 18738 bytes Examples/UIExplorer/hawk.png | Bin 0 -> 62468 bytes .../ToolbarAndroid/ToolbarAndroid.android.js | 26 +- .../toolbar/DrawableWithIntrinsicSize.java | 42 +++ .../react/views/toolbar/ReactToolbar.java | 250 ++++++++++++++++++ .../views/toolbar/ReactToolbarManager.java | 94 +++---- 7 files changed, 344 insertions(+), 76 deletions(-) create mode 100644 Examples/UIExplorer/bunny.png create mode 100644 Examples/UIExplorer/hawk.png create mode 100644 ReactAndroid/src/main/java/com/facebook/react/views/toolbar/DrawableWithIntrinsicSize.java create mode 100644 ReactAndroid/src/main/java/com/facebook/react/views/toolbar/ReactToolbar.java diff --git a/Examples/UIExplorer/ToolbarAndroidExample.android.js b/Examples/UIExplorer/ToolbarAndroidExample.android.js index 359ba087e..c621296d9 100644 --- a/Examples/UIExplorer/ToolbarAndroidExample.android.js +++ b/Examples/UIExplorer/ToolbarAndroidExample.android.js @@ -93,6 +93,14 @@ var ToolbarAndroidExample = React.createClass({ Touch the icon to reset the custom colors to the default (theme-provided) ones. + + + ); }, diff --git a/Examples/UIExplorer/bunny.png b/Examples/UIExplorer/bunny.png new file mode 100644 index 0000000000000000000000000000000000000000..0d94af660bcfc793372a84e0dad82e5641bfe375 GIT binary patch literal 18738 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 IM6N<$f=0}iFaQ7m literal 0 HcmV?d00001 diff --git a/Examples/UIExplorer/hawk.png b/Examples/UIExplorer/hawk.png new file mode 100644 index 0000000000000000000000000000000000000000..7205b1e47d08adf1bb7c2300a8dfcbe492cc0142 GIT binary patch literal 62468 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 mActionsHolder = + new MultiDraweeHolder<>(); + + private final ControllerListener mLogoControllerListener = + new BaseControllerListener() { + @Override + public void onFinalImageSet( + String id, + @Nullable final ImageInfo imageInfo, + @Nullable Animatable animatable) { + if (imageInfo != null) { + final DrawableWithIntrinsicSize logoDrawable = + new DrawableWithIntrinsicSize(mLogoHolder.getTopLevelDrawable(), imageInfo); + setLogo(logoDrawable); + } + } + }; + + private final ControllerListener mNavIconControllerListener = + new BaseControllerListener() { + @Override + public void onFinalImageSet( + String id, + @Nullable final ImageInfo imageInfo, + @Nullable Animatable animatable) { + if (imageInfo != null) { + final DrawableWithIntrinsicSize navIconDrawable = + new DrawableWithIntrinsicSize(mNavIconHolder.getTopLevelDrawable(), imageInfo); + setNavigationIcon(navIconDrawable); + } + } + }; + + private static class ActionIconControllerListener extends BaseControllerListener { + private final MenuItem mItem; + private final DraweeHolder mHolder; + + ActionIconControllerListener(MenuItem item, DraweeHolder holder) { + mItem = item; + mHolder = holder; + } + + @Override + public void onFinalImageSet( + String id, + @Nullable ImageInfo imageInfo, + @Nullable Animatable animatable) { + if (imageInfo != null) { + mItem.setIcon(new DrawableWithIntrinsicSize(mHolder.getTopLevelDrawable(), imageInfo)); + } + } + } + + public ReactToolbar(Context context) { + super(context); + + mLogoHolder = DraweeHolder.create(createDraweeHierarchy(), context); + mNavIconHolder = DraweeHolder.create(createDraweeHierarchy(), context); + } + + private final Runnable mLayoutRunnable = new Runnable() { + @Override + public void run() { + measure( + MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.EXACTLY), + MeasureSpec.makeMeasureSpec(getHeight(), MeasureSpec.EXACTLY)); + layout(getLeft(), getTop(), getRight(), getBottom()); + } + }; + + @Override + public void requestLayout() { + super.requestLayout(); + + // The toolbar relies on a measure + layout pass happening after it calls requestLayout(). + // Without this, certain calls (e.g. setLogo) only take effect after a second invalidation. + post(mLayoutRunnable); + } + + @Override + public void onDetachedFromWindow() { + super.onDetachedFromWindow(); + detachDraweeHolders(); + } + + @Override + public void onStartTemporaryDetach() { + super.onStartTemporaryDetach(); + detachDraweeHolders(); + } + + @Override + public void onAttachedToWindow() { + super.onAttachedToWindow(); + attachDraweeHolders(); + } + + @Override + public void onFinishTemporaryDetach() { + super.onFinishTemporaryDetach(); + mLogoHolder.onAttach(); + mNavIconHolder.onAttach(); + } + + private void detachDraweeHolders() { + mLogoHolder.onDetach(); + mNavIconHolder.onDetach(); + mActionsHolder.onDetach(); + } + + private void attachDraweeHolders() { + mLogoHolder.onAttach(); + mNavIconHolder.onAttach(); + mActionsHolder.onAttach(); + } + + /* package */ void setLogoSource(@Nullable ReadableMap source) { + String uri = source != null ? source.getString("uri") : null; + if (uri == null) { + setLogo(null); + } else if (uri.startsWith("http://") || uri.startsWith("https://")) { + DraweeController controller = Fresco.newDraweeControllerBuilder() + .setUri(Uri.parse(uri)) + .setControllerListener(mLogoControllerListener) + .setOldController(mLogoHolder.getController()) + .build(); + mLogoHolder.setController(controller); + } else { + setLogo(getDrawableResourceByName(uri)); + } + } + + /* package */ void setNavIconSource(@Nullable ReadableMap source) { + String uri = source != null ? source.getString("uri") : null; + if (uri == null) { + setNavigationIcon(null); + } else if (uri.startsWith("http://") || uri.startsWith("https://")) { + DraweeController controller = Fresco.newDraweeControllerBuilder() + .setUri(Uri.parse(uri)) + .setControllerListener(mNavIconControllerListener) + .setOldController(mNavIconHolder.getController()) + .build(); + mNavIconHolder.setController(controller); + } else { + setNavigationIcon(getDrawableResourceByName(uri)); + } + } + + /* package */ void setActions(@Nullable ReadableArray actions) { + Menu menu = getMenu(); + menu.clear(); + mActionsHolder.clear(); + if (actions != null) { + for (int i = 0; i < actions.size(); i++) { + ReadableMap action = actions.getMap(i); + MenuItem item = menu.add(Menu.NONE, Menu.NONE, i, action.getString(PROP_ACTION_TITLE)); + ReadableMap icon = action.hasKey(PROP_ACTION_ICON) ? action.getMap(PROP_ACTION_ICON) : null; + if (icon != null) { + String iconSource = icon.getString("uri"); + if (iconSource.startsWith("http://") || iconSource.startsWith("https://")) { + setMenuItemIcon(item, icon); + } else { + item.setIcon(getDrawableResourceByName(iconSource)); + } + } + int showAsAction = action.hasKey(PROP_ACTION_SHOW) + ? action.getInt(PROP_ACTION_SHOW) + : MenuItem.SHOW_AS_ACTION_NEVER; + if (action.hasKey(PROP_ACTION_SHOW_WITH_TEXT) && + action.getBoolean(PROP_ACTION_SHOW_WITH_TEXT)) { + showAsAction = showAsAction | MenuItem.SHOW_AS_ACTION_WITH_TEXT; + } + item.setShowAsAction(showAsAction); + } + } + } + + /** + * This is only used when the icon is remote (http/s). Creates & adds a new {@link DraweeHolder} + * to {@link #mActionsHolder} and attaches a {@link ActionIconControllerListener} that just sets + * the top level drawable when it's loaded. + */ + private void setMenuItemIcon(MenuItem item, ReadableMap icon) { + String iconSource = icon.getString("uri"); + + DraweeHolder holder = + DraweeHolder.create(createDraweeHierarchy(), getContext()); + DraweeController controller = Fresco.newDraweeControllerBuilder() + .setUri(Uri.parse(iconSource)) + .setControllerListener(new ActionIconControllerListener(item, holder)) + .setOldController(holder.getController()) + .build(); + holder.setController(controller); + + mActionsHolder.add(holder); + } + + private GenericDraweeHierarchy createDraweeHierarchy() { + return new GenericDraweeHierarchyBuilder(getResources()) + .setActualImageScaleType(ScalingUtils.ScaleType.FIT_CENTER) + .setFadeDuration(0) + .build(); + } + + private int getDrawableResourceByName(String name) { + return getResources().getIdentifier( + name, + "drawable", + getContext().getPackageName()); + } + +} diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/toolbar/ReactToolbarManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/toolbar/ReactToolbarManager.java index 6b9a988dd..93fe8a61d 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/toolbar/ReactToolbarManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/toolbar/ReactToolbarManager.java @@ -11,19 +11,20 @@ package com.facebook.react.views.toolbar; import javax.annotation.Nullable; +import java.util.Map; + import android.content.Context; import android.content.res.Resources; import android.content.res.TypedArray; import android.graphics.Color; import android.os.SystemClock; -import android.support.v7.widget.Toolbar; -import android.view.Menu; import android.view.MenuItem; import android.view.View; import com.facebook.react.R; import com.facebook.react.bridge.ReadableArray; import com.facebook.react.bridge.ReadableMap; +import com.facebook.react.common.MapBuilder; import com.facebook.react.uimanager.ReactProp; import com.facebook.react.uimanager.ThemedReactContext; import com.facebook.react.uimanager.UIManagerModule; @@ -32,52 +33,39 @@ import com.facebook.react.uimanager.events.EventDispatcher; import com.facebook.react.views.toolbar.events.ToolbarClickEvent; /** - * Manages instances of Toolbar. + * Manages instances of ReactToolbar. */ -public class ReactToolbarManager extends ViewGroupManager { +public class ReactToolbarManager extends ViewGroupManager { private static final String REACT_CLASS = "ToolbarAndroid"; - private static final String PROP_ACTION_ICON = "icon"; - private static final String PROP_ACTION_SHOW = "show"; - private static final String PROP_ACTION_SHOW_WITH_TEXT = "showWithText"; - private static final String PROP_ACTION_TITLE = "title"; - @Override public String getName() { return REACT_CLASS; } @Override - protected Toolbar createViewInstance(ThemedReactContext reactContext) { - return new Toolbar(reactContext); + protected ReactToolbar createViewInstance(ThemedReactContext reactContext) { + return new ReactToolbar(reactContext); } @ReactProp(name = "logo") - public void setLogo(Toolbar view, @Nullable String logo) { - if (logo != null) { - view.setLogo(getDrawableResourceByName(view.getContext(), logo)); - } else { - view.setLogo(null); - } + public void setLogo(ReactToolbar view, @Nullable ReadableMap logo) { + view.setLogoSource(logo); } @ReactProp(name = "navIcon") - public void setNavIcon(Toolbar view, @Nullable String navIcon) { - if (navIcon != null) { - view.setNavigationIcon(getDrawableResourceByName(view.getContext(), navIcon)); - } else { - view.setNavigationIcon(null); - } + public void setNavIcon(ReactToolbar view, @Nullable ReadableMap navIcon) { + view.setNavIconSource(navIcon); } @ReactProp(name = "subtitle") - public void setSubtitle(Toolbar view, @Nullable String subtitle) { + public void setSubtitle(ReactToolbar view, @Nullable String subtitle) { view.setSubtitle(subtitle); } @ReactProp(name = "subtitleColor", customType = "Color") - public void setSubtitleColor(Toolbar view, @Nullable Integer subtitleColor) { + public void setSubtitleColor(ReactToolbar view, @Nullable Integer subtitleColor) { int[] defaultColors = getDefaultColors(view.getContext()); if (subtitleColor != null) { view.setSubtitleTextColor(subtitleColor); @@ -87,12 +75,12 @@ public class ReactToolbarManager extends ViewGroupManager { } @ReactProp(name = "title") - public void setTitle(Toolbar view, @Nullable String title) { + public void setTitle(ReactToolbar view, @Nullable String title) { view.setTitle(title); } @ReactProp(name = "titleColor", customType = "Color") - public void setTitleColor(Toolbar view, @Nullable Integer titleColor) { + public void setTitleColor(ReactToolbar view, @Nullable Integer titleColor) { int[] defaultColors = getDefaultColors(view.getContext()); if (titleColor != null) { view.setTitleTextColor(titleColor); @@ -102,37 +90,12 @@ public class ReactToolbarManager extends ViewGroupManager { } @ReactProp(name = "actions") - public void setActions(Toolbar view, @Nullable ReadableArray actions) { - Menu menu = view.getMenu(); - menu.clear(); - if (actions != null) { - for (int i = 0; i < actions.size(); i++) { - ReadableMap action = actions.getMap(i); - MenuItem item = menu.add(Menu.NONE, Menu.NONE, i, action.getString(PROP_ACTION_TITLE)); - String icon = action.hasKey(PROP_ACTION_ICON) ? action.getString(PROP_ACTION_ICON) : null; - if (icon != null) { - item.setIcon(getDrawableResourceByName(view.getContext(), icon)); - } - String show = action.hasKey(PROP_ACTION_SHOW) ? action.getString(PROP_ACTION_SHOW) : null; - if (show != null) { - int showAsAction = MenuItem.SHOW_AS_ACTION_NEVER; - if ("always".equals(show)) { - showAsAction = MenuItem.SHOW_AS_ACTION_ALWAYS; - } else if ("ifRoom".equals(show)) { - showAsAction = MenuItem.SHOW_AS_ACTION_IF_ROOM; - } - if (action.hasKey(PROP_ACTION_SHOW_WITH_TEXT) && - action.getBoolean(PROP_ACTION_SHOW_WITH_TEXT)) { - showAsAction = showAsAction | MenuItem.SHOW_AS_ACTION_WITH_TEXT; - } - item.setShowAsAction(showAsAction); - } - } - } + public void setActions(ReactToolbar view, @Nullable ReadableArray actions) { + view.setActions(actions); } @Override - protected void addEventEmitters(final ThemedReactContext reactContext, final Toolbar view) { + protected void addEventEmitters(final ThemedReactContext reactContext, final ReactToolbar view) { final EventDispatcher mEventDispatcher = reactContext.getNativeModule(UIManagerModule.class) .getEventDispatcher(); view.setNavigationOnClickListener( @@ -145,7 +108,7 @@ public class ReactToolbarManager extends ViewGroupManager { }); view.setOnMenuItemClickListener( - new Toolbar.OnMenuItemClickListener() { + new ReactToolbar.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem menuItem) { mEventDispatcher.dispatchEvent( @@ -158,6 +121,17 @@ public class ReactToolbarManager extends ViewGroupManager { }); } + @Nullable + @Override + public Map getExportedViewConstants() { + return MapBuilder.of( + "ShowAsAction", + MapBuilder.of( + "never", MenuItem.SHOW_AS_ACTION_NEVER, + "always", MenuItem.SHOW_AS_ACTION_ALWAYS, + "ifRoom", MenuItem.SHOW_AS_ACTION_IF_ROOM)); + } + @Override public boolean needsCustomLayoutForChildren() { return true; @@ -205,12 +179,4 @@ public class ReactToolbarManager extends ViewGroupManager { } } - private static int getDrawableResourceByName(Context context, String name) { - name = name.toLowerCase().replace("-", "_"); - return context.getResources().getIdentifier( - name, - "drawable", - context.getPackageName()); - } - }