/* * Copyright 2015 Rayco AraƱa * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.raycoarana.baindo; import com.raycoarana.baindo.binding.BindToTarget; import com.raycoarana.baindo.binding.FinalBindTarget; import com.raycoarana.baindo.binding.UIAction; import com.raycoarana.baindo.binding.ViewToBindSelector; import com.raycoarana.baindo.events.OnDestroyEventBind; import com.raycoarana.baindo.events.OnPauseEventBind; import com.raycoarana.baindo.events.OnResumeEventBind; import com.raycoarana.baindo.events.OnStartEventBind; import com.raycoarana.baindo.events.OnStopEventBind; import com.raycoarana.baindo.intent.IntentActionBind; import com.raycoarana.baindo.intent.IntentDataBind; import com.raycoarana.baindo.intent.IntentExtraBind; import com.raycoarana.baindo.intent.IntentTypeBind; import com.raycoarana.baindo.observables.AbstractCollectionProperty; import com.raycoarana.baindo.observables.AbstractProperty; import com.raycoarana.baindo.properties.CheckedBind; import com.raycoarana.baindo.properties.ClickToCommandBind; import com.raycoarana.baindo.properties.EnabledBind; import com.raycoarana.baindo.properties.InvisibilityBind; import com.raycoarana.baindo.properties.LongClickToCommandBind; import com.raycoarana.baindo.events.OnCreateEventBind; import com.raycoarana.baindo.properties.ProgressBind; import com.raycoarana.baindo.properties.SelectedIndexBind; import com.raycoarana.baindo.properties.TextBind; import com.raycoarana.baindo.properties.UIActionBind; import com.raycoarana.baindo.properties.VisibilityBind; import com.raycoarana.baindo.renderer.AdapterBind; import com.raycoarana.baindo.renderer.AdapterFactory; import com.raycoarana.baindo.state.StateBind; import com.raycoarana.baindo.viewmodel.Command; /** * Creates binders */ class BaindoBinder implements Binder { private final WorkDispatcher mWorkDispatcher; private final UnbindableCollectorProvider mUnbindableCollectorProvider; private final UnbindableCollector mParentUnbindableCollector; private final LifecycleBinderCollector mLifecycleBinderCollector; private BindableSource mBindableSource; private BinderDelegate mBinderDelegate; public BaindoBinder(BindableSource bindableSource, WorkDispatcher workDispatcher, BinderDelegate binderDelegate, UnbindableCollector parentUnbindableCollector, UnbindableCollectorProvider unbindableCollectorProvider, LifecycleBinderCollector lifecycleBinderCollector) { mBindableSource = bindableSource; mWorkDispatcher = workDispatcher; mBinderDelegate = binderDelegate; mUnbindableCollectorProvider = unbindableCollectorProvider; mParentUnbindableCollector = parentUnbindableCollector; mLifecycleBinderCollector = lifecycleBinderCollector; } /** * @see com.raycoarana.baindo.Binder#isChecked() */ @Override public ViewToBindSelector<Boolean, AbstractProperty<Boolean>> isChecked() { return mParentUnbindableCollector.collect(new CheckedBind(mBindableSource, mWorkDispatcher)); } /** * @see com.raycoarana.baindo.Binder#enabled() */ @Override public ViewToBindSelector<Boolean, AbstractProperty<Boolean>> enabled() { return mParentUnbindableCollector.collect(new EnabledBind(mBindableSource, mWorkDispatcher)); } /** * @see com.raycoarana.baindo.Binder#visibility() */ @Override public ViewToBindSelector<Boolean, AbstractProperty<Boolean>> visibility() { return mParentUnbindableCollector.collect(new VisibilityBind(mBindableSource, mWorkDispatcher)); } /** * @see com.raycoarana.baindo.Binder#invisibility() */ @Override public ViewToBindSelector<Boolean, AbstractProperty<Boolean>> invisibility() { return mParentUnbindableCollector.collect(new InvisibilityBind(mBindableSource, mWorkDispatcher)); } /** * @see com.raycoarana.baindo.Binder#click() */ @Override public ViewToBindSelector<Void, Command> click() { return mParentUnbindableCollector.collect(new ClickToCommandBind(mBindableSource, mWorkDispatcher)); } /** * @see com.raycoarana.baindo.Binder#longClick() */ @Override public ViewToBindSelector<Void, Command> longClick() { return mParentUnbindableCollector.collect(new LongClickToCommandBind(mBindableSource, mWorkDispatcher)); } /** * @see com.raycoarana.baindo.Binder#progress() */ @Override public ViewToBindSelector<Integer, AbstractProperty<Integer>> progress() { return mParentUnbindableCollector.collect(new ProgressBind(mBindableSource, mWorkDispatcher)); } /** * @see com.raycoarana.baindo.Binder#text() */ @Override public <T extends CharSequence> ViewToBindSelector<CharSequence, AbstractProperty<T>> text() { return mParentUnbindableCollector.collect(new TextBind<T>(mBindableSource, mWorkDispatcher)); } /** * @see com.raycoarana.baindo.Binder#uiAction(com.raycoarana.baindo.binding.UIAction) */ @Override public <T extends U, U> BindToTarget<U, AbstractProperty<T>> uiAction(UIAction<T> uiAction) { UIActionBind<T, U> uiActionBind = new UIActionBind<>(uiAction, mWorkDispatcher); return mParentUnbindableCollector.collect(uiActionBind); } /** * @see com.raycoarana.baindo.Binder#adapterWithFactory(com.raycoarana.baindo.renderer.AdapterFactory) */ @Override public <T> ViewToBindSelector<T, AbstractCollectionProperty<T>> adapterWithFactory(AdapterFactory<T> adapterFactory) { return mParentUnbindableCollector.collect(new AdapterBind<>(mBindableSource, mWorkDispatcher, mBinderDelegate, adapterFactory, mUnbindableCollectorProvider)); } /** * @see com.raycoarana.baindo.Binder#selectedIndex() */ @Override public ViewToBindSelector<Integer, AbstractProperty<Integer>> selectedIndex() { return mParentUnbindableCollector.collect(new SelectedIndexBind(mBindableSource, mWorkDispatcher)); } /** * @see com.raycoarana.baindo.Binder#intentAction() */ @Override public FinalBindTarget<AbstractProperty<String>> intentAction() { return mLifecycleBinderCollector.collect(new IntentActionBind(mWorkDispatcher)); } /** * @see com.raycoarana.baindo.Binder#intentData() */ @Override public FinalBindTarget<AbstractProperty<String>> intentData() { return mLifecycleBinderCollector.collect(new IntentDataBind(mWorkDispatcher)); } /** * @see com.raycoarana.baindo.Binder#intentType() */ @Override public FinalBindTarget<AbstractProperty<String>> intentType() { return mLifecycleBinderCollector.collect(new IntentTypeBind(mWorkDispatcher)); } /** * @see com.raycoarana.baindo.Binder#intentExtraWithKey(String) */ @Override public <T> FinalBindTarget<AbstractProperty<T>> intentExtraWithKey(String key) { return mLifecycleBinderCollector.collect(new IntentExtraBind<T>(mWorkDispatcher, key)); } /** * @see com.raycoarana.baindo.Binder#stateWithKey(String) */ @Override public <T> FinalBindTarget<AbstractProperty<T>> stateWithKey(String key) { return mLifecycleBinderCollector.collect(new StateBind<T>(mWorkDispatcher, key)); } /** * @see com.raycoarana.baindo.Binder#onCreate() */ @Override public FinalBindTarget<Command> onCreate() { return mLifecycleBinderCollector.collect(new OnCreateEventBind(mWorkDispatcher)); } /** * @see com.raycoarana.baindo.Binder#onDestroy() */ @Override public FinalBindTarget<Command> onDestroy() { return mLifecycleBinderCollector.collect(new OnDestroyEventBind(mWorkDispatcher)); } /** * @see com.raycoarana.baindo.Binder#onStart() */ @Override public FinalBindTarget<Command> onStart() { return mLifecycleBinderCollector.collect(new OnStartEventBind(mWorkDispatcher)); } /** * @see com.raycoarana.baindo.Binder#onStop() */ @Override public FinalBindTarget<Command> onStop() { return mLifecycleBinderCollector.collect(new OnStopEventBind(mWorkDispatcher)); } /** * @see com.raycoarana.baindo.Binder#onResume() */ @Override public FinalBindTarget<Command> onResume() { return mLifecycleBinderCollector.collect(new OnResumeEventBind(mWorkDispatcher)); } /** * @see com.raycoarana.baindo.Binder#onPause() */ @Override public FinalBindTarget<Command> onPause() { return mLifecycleBinderCollector.collect(new OnPauseEventBind(mWorkDispatcher)); } }