Migrate AndroidProgressBarComponent to Fabric

Summary:
This diff migrates AndroidProgressBar component to Fabric

changeLog: [internal] internal

Reviewed By: sammy-SC

Differential Revision: D23227857

fbshipit-source-id: c5cbbdcc36e63226286cd714d601f0d4690496b2
This commit is contained in:
David Vacca
2020-08-22 01:46:03 -07:00
committed by Facebook GitHub Bot
parent 6aa63272dc
commit 62de5c001c
13 changed files with 441 additions and 18 deletions
@@ -20,7 +20,6 @@ using ActivityIndicatorViewComponentDescriptor = ConcreteComponentDescriptor<Act
using DatePickerComponentDescriptor = ConcreteComponentDescriptor<DatePickerShadowNode>;
using AndroidDrawerLayoutComponentDescriptor = ConcreteComponentDescriptor<AndroidDrawerLayoutShadowNode>;
using RCTMaskedViewComponentDescriptor = ConcreteComponentDescriptor<RCTMaskedViewShadowNode>;
using AndroidProgressBarComponentDescriptor = ConcreteComponentDescriptor<AndroidProgressBarShadowNode>;
using RCTProgressViewComponentDescriptor = ConcreteComponentDescriptor<RCTProgressViewShadowNode>;
using AndroidSwipeRefreshLayoutComponentDescriptor = ConcreteComponentDescriptor<AndroidSwipeRefreshLayoutShadowNode>;
using PullToRefreshViewComponentDescriptor = ConcreteComponentDescriptor<PullToRefreshViewShadowNode>;
@@ -17,7 +17,6 @@ extern const char ActivityIndicatorViewComponentName[] = "ActivityIndicatorView"
extern const char DatePickerComponentName[] = "DatePicker";
extern const char AndroidDrawerLayoutComponentName[] = "AndroidDrawerLayout";
extern const char RCTMaskedViewComponentName[] = "RCTMaskedView";
extern const char AndroidProgressBarComponentName[] = "AndroidProgressBar";
extern const char RCTProgressViewComponentName[] = "RCTProgressView";
extern const char AndroidSwipeRefreshLayoutComponentName[] = "AndroidSwipeRefreshLayout";
extern const char PullToRefreshViewComponentName[] = "PullToRefreshView";
@@ -55,15 +55,6 @@ using RCTMaskedViewShadowNode = ConcreteViewShadowNode<
RCTMaskedViewComponentName,
RCTMaskedViewProps>;
extern const char AndroidProgressBarComponentName[];
/*
* `ShadowNode` for <AndroidProgressBar> component.
*/
using AndroidProgressBarShadowNode = ConcreteViewShadowNode<
AndroidProgressBarComponentName,
AndroidProgressBarProps>;
extern const char RCTProgressViewComponentName[];
/*
@@ -8,17 +8,25 @@
package com.facebook.react.views.progressbar;
import android.content.Context;
import android.util.Pair;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ProgressBar;
import androidx.annotation.Nullable;
import com.facebook.react.bridge.JSApplicationIllegalArgumentException;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.module.annotations.ReactModule;
import com.facebook.react.uimanager.BaseViewManager;
import com.facebook.react.uimanager.PixelUtil;
import com.facebook.react.uimanager.ThemedReactContext;
import com.facebook.react.uimanager.ViewManagerDelegate;
import com.facebook.react.uimanager.ViewProps;
import com.facebook.react.uimanager.annotations.ReactProp;
import com.facebook.react.viewmanagers.AndroidProgressBarManagerDelegate;
import com.facebook.react.viewmanagers.AndroidProgressBarManagerInterface;
import com.facebook.yoga.YogaMeasureMode;
import com.facebook.yoga.YogaMeasureOutput;
import java.util.WeakHashMap;
/**
* Manages instances of ProgressBar. ProgressBar is wrapped in a ProgressBarContainerView because
@@ -33,6 +41,8 @@ public class ReactProgressBarViewManager
public static final String REACT_CLASS = "AndroidProgressBar";
private final WeakHashMap<Integer, Pair<Integer, Integer>> mMeasuredStyles = new WeakHashMap<>();
/* package */ static final String PROP_STYLE = "styleAttr";
/* package */ static final String PROP_INDETERMINATE = "indeterminate";
/* package */ static final String PROP_PROGRESS = "progress";
@@ -154,4 +164,34 @@ public class ReactProgressBarViewManager
throw new JSApplicationIllegalArgumentException("Unknown ProgressBar style: " + styleStr);
}
}
@Override
public long measure(
Context context,
ReadableMap localData,
ReadableMap props,
ReadableMap state,
float width,
YogaMeasureMode widthMode,
float height,
YogaMeasureMode heightMode,
@Nullable float[] attachmentsPositions) {
final Integer style =
ReactProgressBarViewManager.getStyleFromString(props.getString(PROP_STYLE));
Pair<Integer, Integer> value = mMeasuredStyles.get(style);
if (value == null) {
ProgressBar progressBar = ReactProgressBarViewManager.createProgressBar(context, style);
final int spec =
View.MeasureSpec.makeMeasureSpec(
ViewGroup.LayoutParams.WRAP_CONTENT, View.MeasureSpec.UNSPECIFIED);
progressBar.measure(spec, spec);
value = Pair.create(progressBar.getMeasuredWidth(), progressBar.getMeasuredHeight());
mMeasuredStyles.put(style, value);
}
return YogaMeasureOutput.make(
PixelUtil.toDIPFromPixel(value.first), PixelUtil.toDIPFromPixel(value.second));
}
}