@Nullable @Override public View findViewById(@NonNull String id) { return view.findViewById(context.getInflater().getUniqueViewId(id)); }
public ProteusContext build() { ProteusResources resources = new ProteusResources(parsers, layoutManager, functionManager, styleManager); return new ProteusContext(base, resources, loader, callback); }
public ProteusContextWrapper(ProteusContext context) { super(context, context.getProteusResources(), context.getLoader(), context.getCallback()); } }
@Override public void setString(V view, String value) { ProteusView.Manager viewManager = ((ProteusView) view).getViewManager(); ProteusContext context = viewManager.getContext(); Layout layout = viewManager.getLayout(); ViewTypeParser handler = context.getInflater().getParser(layout.type); String[] styleSet = value.split(ProteusConstants.STYLE_DELIMITER); for (String styleName : styleSet) { Map<String, Value> style = context.getStyle(styleName); if (null != style) { process(context.getStyle(styleName), (ProteusView) view, (handler != null ? handler : ViewParser.this)); } } }
@Override public void handleValue(final V view, Value value) { if (value.isColor()) { apply(view, value.getAsColor()); } else { process(view, precompile(value, view.getContext(), ((ProteusContext) view.getContext()).getFunctionManager())); } }
@NonNull @Override public ProteusView createView(@NonNull ProteusContext context, @NonNull Layout include, @NonNull ObjectValue data, @Nullable ViewGroup parent, int dataIndex) { if (include.extras == null) { throw new IllegalArgumentException("required attribute 'layout' missing."); } Value type = include.extras.get(ProteusConstants.LAYOUT); if (null == type || !type.isPrimitive()) { throw new ProteusInflateException("required attribute 'layout' missing or is not a string"); } Layout layout = context.getLayout(type.getAsString()); if (null == layout) { throw new ProteusInflateException("Layout '" + type + "' not found"); } return context.getInflater().inflate(layout.merge(include), data, parent, dataIndex); }
@Override public void handleValue(final V view, Value value) { if (value.isDrawable()) { DrawableValue d = value.getAsDrawable(); if (null != d) { ProteusLayoutInflater.ImageLoader loader = ((ProteusView) view).getViewManager().getContext().getLoader(); d.apply((ProteusView) view, view.getContext(), loader, new DrawableValue.Callback() { @Override public void apply(Drawable drawable) { if (null != drawable) { setDrawable(view, drawable); } } }); } } else { process(view, precompile(value, view.getContext(), ((ProteusContext) view.getContext()).getFunctionManager())); } }
@NonNull protected ProteusView onUnknownViewEncountered(String type, Layout layout, ObjectValue data, int dataIndex) { if (ProteusConstants.isLoggingEnabled()) { Log.d(TAG, "No ViewTypeParser for: " + type); } if (context.getCallback() != null) { ProteusView view = context.getCallback().onUnknownViewType(context, type, layout, data, dataIndex); //noinspection ConstantConditions because we need to throw a ProteusInflateException specifically if (view == null) { throw new ProteusInflateException("inflater Callback#onUnknownViewType() must not return null"); } } throw new ProteusInflateException("Layout contains type: 'include' but inflater callback is null"); }
@Override @Nullable public ViewTypeParser getParser(@NonNull String type) { return context.getParser(type); }
@NonNull @Override public ProteusView inflate(@NonNull String name, @NonNull ObjectValue data, @Nullable ViewGroup parent, int dataIndex) { Layout layout = context.getLayout(name); if (null == layout) { throw new ProteusInflateException("layout : '" + name + "' not found"); } return inflate(layout, data, parent, dataIndex); }
@Override public void handleValue(V view, Value value) { if (value.isPrimitive() && value.getAsPrimitive().isNumber()) { // noinspection ResourceType view.setVisibility(value.getAsInt()); } else { process(view, precompile(value, view.getContext(), ((ProteusContext) view.getContext()).getFunctionManager())); } }
/** * @param event * @param value * @param view */ public void trigger(String event, Value value, ProteusView view) { ProteusLayoutInflater.Callback callback = view.getViewManager().getContext().getCallback(); if (null != callback) { callback.onEvent(event, value, view); } } }
@NonNull public ProteusLayoutInflater getInflater() { return getInflater(new SimpleIdGenerator()); }
@Override public final void handleValue(T view, Value value) { if (value.isDimension()) { setDimension(view, value.getAsDimension().apply(view.getContext())); } else if (value.isPrimitive()) { process(view, precompile(value, view.getContext(), ((ProteusContext) view.getContext()).getFunctionManager())); } }
@Override public void setString(V view, String value) { if (view instanceof ProteusView) { int id = ((ProteusView) view).getViewManager().getContext().getInflater().getUniqueViewId(value); ParseHelper.addRelativeLayoutRule(view, rule, id); } } };
@Override public void handleValue(V view, Value value) { if (value.isPrimitive() && value.getAsPrimitive().isBoolean()) { setBoolean(view, value.getAsPrimitive().getAsBoolean()); } else { process(view, precompile(value, view.getContext(), ((ProteusContext) view.getContext()).getFunctionManager())); } }
@NonNull @Override public SimpleListAdapter create(@NonNull ProteusRecyclerView view, @NonNull ObjectValue config) { Layout layout = config.getAsObject().getAsLayout(ATTRIBUTE_ITEM_LAYOUT); Integer count = config.getAsObject().getAsInteger(ATTRIBUTE_ITEM_COUNT); ObjectValue data = view.getViewManager().getDataContext().getData(); ProteusContext context = (ProteusContext) view.getContext(); return new SimpleListAdapter(context.getInflater(), data, layout, count != null ? count : 0); } };
@Test public void to_string_2() throws Exception { ProteusContext context = context(); String string = "@{fn:add('1','1')}"; Binding binding = Binding.valueOf(string, context, context.getFunctionManager()); assertThat(binding.toString(), is(string)); }
@Override public void setString(final V view, String value) { if (view instanceof ProteusView) { view.setId(((ProteusView) view).getViewManager().getContext().getInflater().getUniqueViewId(value));
@Test public void evaluate_function() throws Exception { ProteusContext context = context(); Binding binding = Binding.valueOf("@{fn:add(1,1)}", context, context.getFunctionManager()); Value value = binding.evaluate(null, data(), 0); assertThat(value.getAsString(), is("2.0")); }