Java源码示例:com.taobao.weex.ui.component.WXComponent

示例1
@Override
public void onPause() {
    super.onPause();
    WXComponent comp = mInstance.getRootComponent();
    if (comp != null) {
        WXEvent events = comp.getDomObject().getEvents();
        boolean hasDeactived = events.contains(UConstants.Event.DEACTIVED);
        if (hasDeactived) {
            WXBridgeManager.getInstance().fireEvent(mInstance.getInstanceId(), comp.getRef(), UConstants.Event.DEACTIVED, null, null);
        }
    }
    if (mIsShakeDetectorStarted && mShakeDetector != null) {
        mShakeDetector.stop();
        mIsShakeDetectorStarted = false;
    }
}
 
示例2
WXComponent createBodyOnDomThread(WXDomObject dom) {
  if (mWXSDKInstance == null) {
    return null;
  }
  WXDomObject domObject = new WXDomObject();
  domObject.type = WXBasicComponentType.DIV;
  domObject.ref = "god";
  mGodComponent = (WXVContainer) WXComponentFactory.newInstance(mWXSDKInstance, domObject, null);
  mGodComponent.createView(null, -1);
  if (mGodComponent == null) {
    if (WXEnvironment.isApkDebugable()) {
      WXLogUtils.e("rootView failed!");
    }
    //TODO error callback
    return null;
  }
  FrameLayout frameLayout = (FrameLayout) mGodComponent.getView();
  ViewGroup.LayoutParams layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
  frameLayout.setLayoutParams(layoutParams);
  frameLayout.setBackgroundColor(Color.TRANSPARENT);

  WXComponent component = generateComponentTree(dom, mGodComponent);
  mGodComponent.addChild(component);
  mRegistry.put(component.getRef(), component);
  return component;
}
 
示例3
private void setAppearanceWatch(WXComponent component, int event, boolean enable) {
  AppearanceHelper item = mAppearComponents.get(component.getRef());
  if (item != null) {
    item.setWatchEvent(event, enable);
  } else if (!enable) {
    //Do nothing if disable target not exist.
  } else {
    WXComponent dChild = findDirectListChild(component);
    int index = mChildren.indexOf(dChild);
    if (index != -1) {
      item = new AppearanceHelper(component, index);
      item.setWatchEvent(event, true);
      mAppearComponents.put(component.getRef(), item);
    }
  }
}
 
示例4
/**
 * @param child the inserted child
 * @param index the index of the child to be inserted.
 * @see #addChild(WXComponent)
 */
@Override
public void addChild(WXComponent child, int index) {
  super.addChild(child, index);

  if (child == null || index < -1) {
    return;
  }
  int count = mChildren.size();
  index = index >= count ? -1 : index;
  bindViewType(child);

  int adapterPosition = index == -1 ? mChildren.size() - 1 : index;
  T view = getHostView();
  if (view != null) {
    view.getRecyclerViewBaseAdapter().notifyItemInserted(adapterPosition);
  }
  relocateAppearanceHelper();
}
 
示例5
private void loadConstructor(){
  Class<? extends WXComponent> c = mCompClz;
  Constructor<? extends WXComponent> constructor;
  try {
    constructor = c.getConstructor(WXSDKInstance.class, WXDomObject.class, WXVContainer.class);
  } catch (NoSuchMethodException e) {
    WXLogUtils.d("ClazzComponentCreator","Use deprecated component constructor");
    try {
      //compatible deprecated constructor with 4 args
      constructor = c.getConstructor(WXSDKInstance.class, WXDomObject.class, WXVContainer.class, boolean.class);
    } catch (NoSuchMethodException e1) {
      try {
        //compatible deprecated constructor with 5 args
        constructor = c.getConstructor(WXSDKInstance.class, WXDomObject.class, WXVContainer.class,String.class, boolean.class);
      } catch (NoSuchMethodException e2) {
        throw new WXRuntimeException("Can't find constructor of component.");
      }
    }
  }
  mConstructor = constructor;
}
 
示例6
private WXComponent generateComponentTree(WXDomObject dom, WXVContainer parent) {
  if (dom == null || parent == null) {
    return null;
  }
  WXComponent component = WXComponentFactory.newInstance(mWXSDKInstance, dom,
                                                         parent, parent.isLazy());

  mRegistry.put(dom.ref, component);
  if (component instanceof WXVContainer) {
    WXVContainer parentC = (WXVContainer) component;
    int count = dom.childCount();
    WXDomObject child = null;
    for (int i = 0; i < count; ++i) {
      child = dom.getChild(i);
      if (child != null) {
        parentC.addChild(generateComponentTree(child, parentC));
      }
    }
  }

  return component;
}
 
示例7
/**
 * Update the specified component's dom and mark it as old.
 * @param component the component to be updated
 */
private void updateDomObj(WXComponent component) {
  if (component == null) {
    return;
  }
  WXDomObject domObject = mRegistry.get(component.getRef());
  if (domObject == null) {
    return;
  }
  domObject.old();
  component.updateDom(domObject.clone());
  if (component instanceof WXVContainer) {
    WXVContainer container = (WXVContainer) component;
    int count = container.childCount();
    for (int i = 0; i < count; ++i) {
      updateDomObj(container.getChild(i));
    }
  }
}
 
示例8
/**
 * create RootView ,every weex Instance View has a rootView;
 * @see com.taobao.weex.dom.WXDomStatement#createBody(JSONObject)
 */
void createBody(WXComponent component) {
  long start = System.currentTimeMillis();
  component.createView(mGodComponent, -1);
  if (WXEnvironment.isApkDebugable()) {
    WXLogUtils.renderPerformanceLog("createView", (System.currentTimeMillis() - start));
  }
  start = System.currentTimeMillis();
  component.applyLayoutAndEvent(component);
  component.bindData(component);

  if (WXEnvironment.isApkDebugable()) {
    WXLogUtils.renderPerformanceLog("bind", (System.currentTimeMillis() - start));
  }

  if (component instanceof WXScroller) {
    WXScroller scroller = (WXScroller) component;
    if (scroller.getView() instanceof ScrollView) {
      mWXSDKInstance.setRootScrollView((ScrollView) scroller.getView());
    }
  }
  mWXSDKInstance.setRootView(mGodComponent.getRealView());
  if (mWXSDKInstance.getRenderStrategy() != WXRenderStrategy.APPEND_ONCE) {
    mWXSDKInstance.onViewCreated(mGodComponent);
  }
}
 
示例9
private void loadConstructor(){
  Class<? extends WXComponent> c = mCompClz;
  Constructor<? extends WXComponent> constructor;
  try {
    constructor = c.getConstructor(WXSDKInstance.class, WXDomObject.class, WXVContainer.class);
  } catch (NoSuchMethodException e) {
    WXLogUtils.d("ClazzComponentCreator","Use deprecated component constructor");
    try {
      //compatible deprecated constructor with 4 args
      constructor = c.getConstructor(WXSDKInstance.class, WXDomObject.class, WXVContainer.class, boolean.class);
    } catch (NoSuchMethodException e1) {
      try {
        //compatible deprecated constructor with 5 args
        constructor = c.getConstructor(WXSDKInstance.class, WXDomObject.class, WXVContainer.class,String.class, boolean.class);
      } catch (NoSuchMethodException e2) {
        throw new WXRuntimeException("Can't find constructor of component.");
      }
    }
  }
  mConstructor = constructor;
}
 
示例10
/**
 *
 * @param loading should be {@link WXRefreshView}
 */
public void setFooterView(WXComponent loading) {
    setLoadmoreEnable(true);
    if (swipeLayout != null) {
        if (swipeLayout.getFooterView() != null) {
            swipeLayout.setLoadingHeight((int) loading.getDomObject().getLayoutHeight());

            String colorStr = (String) loading.getDomObject().getStyles().get(Constants.Name.BACKGROUND_COLOR);
            String bgColor = WXUtils.getString(colorStr, null);

            if (bgColor != null) {
                if (!TextUtils.isEmpty(bgColor)) {
                    int colorInt = WXResourceUtils.getColor(bgColor);
                    if (!(colorInt == Color.TRANSPARENT)) {
                        swipeLayout.setLoadingBgColor(colorInt);
                    }
                }
            }
            swipeLayout.getFooterView().setRefreshView(loading.getHostView());
        }
    }
}
 
示例11
@Override
public void onTrackNode(@NonNull WXComponent component, int layer) {
    if(layer < MAX_VDOM_LAYER) {
        return;
    }
    View hostView = component.getHostView();
    if(hostView == null) {
        return;
    }

    if(mViewHighlighter != null) {
        mViewHighlighter.addHighlightedView(hostView);
    }
}
 
示例12
private void removeFooterOrHeader(WXComponent child) {
  if (child instanceof WXLoading) {
    getHostView().removeFooterView(child);
  } else if (child instanceof WXRefresh) {
    getHostView().removeHeaderView(child);
  }
}
 
示例13
@Nullable
private WXComponent findBoundComponentBy(@NonNull View targetView,@NonNull WXComponent rootComponent) {
    Deque<WXComponent> deque = new ArrayDeque<>();
    deque.add(rootComponent);
    WXComponent targetComponent = null;

    while (!deque.isEmpty()) {
        WXComponent component = deque.removeFirst();

        View view = component.getHostView();
        if(view != null && view.equals(targetView)) {
            targetComponent = component;
        }

        //we should take embed into account
        if(component instanceof WXEmbed) {
            WXComponent nestedRootComponent = ViewUtils.getNestedRootComponent((WXEmbed) component);
            if(nestedRootComponent != null) {
                deque.add(nestedRootComponent);
            }
        } else if(component instanceof WXVContainer) {
            WXVContainer container = (WXVContainer) component;
            for(int i = 0,len = container.getChildCount(); i < len; i++) {
                WXComponent c = container.getChild(i);
                deque.add(c);
            }
        }
    }

    return targetComponent;
}
 
示例14
public void onBackPressed() {
    WXComponent comp = mInstance.getRootComponent();
    if (comp != null) {
        WXEvent events = comp.getDomObject().getEvents();
        boolean hasBack = events.contains(UConstants.Event.ONANDROIDBACK);
        if (hasBack) {
            WXBridgeManager.getInstance().fireEvent(mInstance.getInstanceId(), comp.getRef(), UConstants.Event.ONANDROIDBACK, null, null);
            return;
        } else {
            super.onBackPressed();
        }
    }
    super.onBackPressed();
}
 
示例15
@Test
public void testScrollTo() throws Exception {
  WXComponent child = WXDivTest.create(component);
  ComponentTest.create(child);
  component.addChild(child);

  child = WXHeaderTest.create(component);
  ComponentTest.create(child);
  component.addChild(child);

  Map<String, Object> options = new HashMap<>(2);
  options.put("offset", 10);
  options.put("animated", false);
  component.scrollTo(child,options);
}
 
示例16
public static boolean registerComponent(String type, Class<? extends WXComponent> clazz, boolean appendTree) throws WXException {
  if (clazz == null || TextUtils.isEmpty(type)) {
    return false;
  }

  Map<String, String> componentInfo = new HashMap<>();
  componentInfo.put("type", type);
  if (appendTree) {
    componentInfo.put("append", "tree");
  }
  registerInternal(type,clazz,componentInfo);
  return true;
}
 
示例17
/**
 * To determine whether an animation is needed
 * @param child
 * @return
 */
private boolean isAddAnimation(WXComponent child) {
  ImmutableDomObject domObject = child.getDomObject();
  if (domObject != null) {
    Object attr = domObject.getAttrs().get(Constants.Name.INSERT_CELL_ANIMATION);
    if (Constants.Value.DEFAULT.equals(attr)) {
      return true;
    }
  }
  return false;
}
 
示例18
@Override
public void executeRender(RenderActionContext context) {
  WXComponent comp = context.getComponent(mRef);
  if(comp != null){
    //sync dom change to component
    comp.updateDom(mUpdatedDom);
    comp.addEvent(mEvent);
  }
}
 
示例19
public void onViewAppear(){
  WXComponent comp = getRootComponent();
  if(comp != null) {
    fireEvent( comp.getRef(), Constants.Event.VIEWAPPEAR,null, null);
    for(OnInstanceVisibleListener instance:mVisibleListeners){
      instance.onAppear();
    }
  }
}
 
示例20
@Override
public void executeRender(RenderActionContext context) {
  WXComponent component = context.getComponent(mRef);
  if (component == null) {
    return;
  }

  Scrollable scroller = component.getParentScroller();
  if (scroller == null) {
    return;
  }
  scroller.scrollTo(component,mOptions);
}
 
示例21
@Override
public void executeRender(RenderActionContext context) {
  WXComponent comp = context.getComponent(mRef);
  if (comp == null) {
    return;
  }

  comp.updateProperties(mData);
}
 
示例22
void invokeMethod(String ref, String method, JSONArray args){
  if(mDestroy){
    return;
  }
  WXComponent comp = mWXRenderManager.getWXComponent(mInstanceId, ref);
  if(comp == null){
    WXLogUtils.e("DomStatement","target component not found.");
    return;
  }
  comp.invoke(method,args);
}
 
示例23
public WXGesture(WXComponent wxComponent, Context context) {
  this.component = wxComponent;
  globalRect = new Rect();
  globalOffset = new Point();
  globalEventOffset = new Point();
  locEventOffset = new PointF();
  locLeftTop = new PointF();
  mGestureDetector = new GestureDetector(context, new GestureListener(), new GestureHandler());
}
 
示例24
/**
 * set padding style of View
 */
void setPadding(String ref, Spacing padding, Spacing border) {
  WXComponent component = mRegistry.get(ref);
  if (component == null) {
    return;
  }
  component.setPadding(padding, border);
}
 
示例25
@Override
public void executeDom(DOMActionContext context) {
  WXComponent comp = context.getCompByRef(mRef);
  if(comp == null){
    WXLogUtils.e("DOMAction","target component not found.");
    return;
  }
  comp.invoke(mMethod,mArgs);
}
 
示例26
public boolean onBackPressed() {
  WXComponent comp = getRootComponent();
  if(comp != null) {
    WXEvent events= comp.getDomObject().getEvents();
    boolean hasBackPressed = events.contains(Constants.Event.CLICKBACKITEM);
    if (hasBackPressed) {
      fireEvent(comp.getRef(), Constants.Event.CLICKBACKITEM,null, null);
    }
    return hasBackPressed;
  }
  return false;
}
 
示例27
/**
 * set layout information of View
 */
void setLayout(String ref, WXDomObject domObject) {
  WXComponent component = mRegistry.get(ref);
  if (component == null) {
    return;
  }
  component.setLayout(domObject);
}
 
示例28
/**
 * set extra information of View
 */
void setExtra(String ref, Object extra) {
  WXComponent component = mRegistry.get(ref);
  if (component == null) {
    return;
  }
  component.updateExtra(extra);
}
 
示例29
@Override
public void onTrackNode(@NonNull WXComponent component, int layer) {
    if(layer < MAX_VDOM_LAYER) {
        return;
    }
    View hostView = component.getHostView();
    if(hostView == null) {
        return;
    }

    if(mViewHighlighter != null) {
        mViewHighlighter.addHighlightedView(hostView);
    }
}
 
示例30
@Override
public void remove(WXComponent child, boolean destroy) {
    int index = mChildren.indexOf(child);
    if (destroy) {
        child.detachViewAndClearPreInfo();
    }
    getView().getAdapter().notifyItemRemoved(index);
    if (WXEnvironment.isApkDebugable()) {
        WXLogUtils.d(TAG, "removeChild child at " + index);
    }
    super.remove(child, destroy);
}