// Path: library/src/main/java/eu/inloop/viewmodel/base/ViewModelBaseFragment.java
// public abstract class ViewModelBaseFragment<T extends IView, R extends AbstractViewModel<T>> extends Fragment implements IView {
// 
//     @NonNull
//     private final ViewModelHelper<T, R> mViewModelHelper = new ViewModelHelper<>();
// 
//     @CallSuper
//     @Override
//     public void onCreate(@Nullable final Bundle savedInstanceState) {
//         super.onCreate(savedInstanceState);
// 
//         Class<? extends AbstractViewModel<T>> viewModelClass = getViewModelClass();
//         // try to extract the ViewModel class from the implementation
//         if (viewModelClass == null) {
//             //noinspection unchecked
//             viewModelClass = (Class<? extends AbstractViewModel<T>>) ProxyViewHelper.getGenericType(getClass(), AbstractViewModel.class);
//         }
//         getViewModelHelper().onCreate(requireActivity(), savedInstanceState, viewModelClass, getArguments());
//     }
// 
//     @CallSuper
//     @Override
//     public void onSaveInstanceState(@NonNull final Bundle outState) {
//         super.onSaveInstanceState(outState);
//         getViewModelHelper().onSaveInstanceState(outState);
//     }
// 
//     @CallSuper
//     @Override
//     public void onStart() {
//         super.onStart();
//         getViewModelHelper().onStart();
//     }
// 
//     @CallSuper
//     @Override
//     public void onStop() {
//         super.onStop();
//         getViewModelHelper().onStop();
//     }
// 
//     @CallSuper
//     @Override
//     public void onDestroyView() {
//         getViewModelHelper().onDestroyView(this);
//         super.onDestroyView();
//     }
// 
//     @CallSuper
//     @Override
//     public void onDestroy() {
//         getViewModelHelper().onDestroy(this);
//         super.onDestroy();
//     }
// 
//     @Nullable
//     public Class<R> getViewModelClass() {
//         return null;
//     }
// 
//     /**
//      * @see ViewModelHelper#getViewModel()
//      */
//     @NonNull
//     @SuppressWarnings("unused")
//     public R getViewModel() {
//         return getViewModelHelper().getViewModel();
//     }
// 
//     @Nullable
//     @Override
//     public ViewModelBindingConfig getViewModelBindingConfig() {
//         return null;
//     }
// 
//     @NonNull
//     public ViewModelHelper<T, R> getViewModelHelper() {
//         return mViewModelHelper;
//     }
// 
//     @Override
//     public void removeViewModel() {
//         mViewModelHelper.removeViewModel(requireActivity());
//     }
// 
//     /**
//      * Call this after your view is ready - usually on the end of {@link
//      * Fragment#onViewCreated(View, Bundle)}
//      *
//      * @param view view
//      */
//     protected void setModelView(@NonNull final T view) {
//         getViewModelHelper().setView(view);
//     }
// }
// 
// Path: library/src/androidTest/java/eu/inloop/viewmodel/fixture/activity/VMTestActivity.java
// public class VMTestActivity extends ViewModelBaseActivity<IVMTestActivityView, VMTestActivityViewModel> implements IVMTestActivityView {
// 
//     public static final int RESULT_CODE_OK = 1;
//     public static final String EXTRA_CALL_ON_BIND = "EXTRA_CALL_ON_BIND";
// 
//     @NonNull
//     public static Intent makeIntent(@NonNull Context context, boolean callOnBindModel) {
//         Intent intent = new Intent(context, VMTestActivity.class);
//         intent.putExtra(EXTRA_CALL_ON_BIND, callOnBindModel);
// 
//         return intent;
//     }
// 
//     @Override
//     protected void onCreate(@Nullable Bundle savedInstanceState) {
//         super.onCreate(savedInstanceState);
// 
//         LinearLayout view = new LinearLayout(this);
//         view.setId(android.R.id.content);
//         setContentView(view);
// 
//         if (savedInstanceState == null) {
//             addTestFragment();
//         }
// 
//         setModelView(this);
//     }
// 
//     public void addTestFragment() {
//         getSupportFragmentManager()
//                 .beginTransaction()
//                 .add(android.R.id.content, new VMTestFragment())
//                 .commitNow();
//     }
// 
//     public void removeTestFragment() {
//         getSupportFragmentManager()
//                 .beginTransaction()
//                 .remove(getTestFragment())
//                 .commitNow();
//     }
// 
//     @NonNull
//     public VMTestFragment getTestFragment() {
//         for (Fragment fragment : getSupportFragmentManager().getFragments()) {
//             if (fragment instanceof VMTestFragment) {
//                 return (VMTestFragment) fragment;
//             }
//         }
//         throw new AssertionError("Fragment not found");
//     }
// 
//     @Override
//     public void onLoadData(boolean loaded) {
//         setResult(RESULT_CODE_OK);
//         finish();
//     }
// 
// }


import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import eu.inloop.viewmodel.base.ViewModelBaseFragment;
import eu.inloop.viewmodel.fixture.activity.VMTestActivity;
package eu.inloop.viewmodel.fixture.fragment;



public class VMTestFragment extends ViewModelBaseFragment<IVMTestFragmentView, VMTestFragmentViewModel>
        implements IVMTestFragmentView {

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return new LinearLayout(getContext());
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        setModelView(this);
    }

    @Override
    public void onLoadData(boolean loaded) {
// Path: library/src/main/java/eu/inloop/viewmodel/base/ViewModelBaseFragment.java
// public abstract class ViewModelBaseFragment<T extends IView, R extends AbstractViewModel<T>> extends Fragment implements IView {
// 
//     @NonNull
//     private final ViewModelHelper<T, R> mViewModelHelper = new ViewModelHelper<>();
// 
//     @CallSuper
//     @Override
//     public void onCreate(@Nullable final Bundle savedInstanceState) {
//         super.onCreate(savedInstanceState);
// 
//         Class<? extends AbstractViewModel<T>> viewModelClass = getViewModelClass();
//         // try to extract the ViewModel class from the implementation
//         if (viewModelClass == null) {
//             //noinspection unchecked
//             viewModelClass = (Class<? extends AbstractViewModel<T>>) ProxyViewHelper.getGenericType(getClass(), AbstractViewModel.class);
//         }
//         getViewModelHelper().onCreate(requireActivity(), savedInstanceState, viewModelClass, getArguments());
//     }
// 
//     @CallSuper
//     @Override
//     public void onSaveInstanceState(@NonNull final Bundle outState) {
//         super.onSaveInstanceState(outState);
//         getViewModelHelper().onSaveInstanceState(outState);
//     }
// 
//     @CallSuper
//     @Override
//     public void onStart() {
//         super.onStart();
//         getViewModelHelper().onStart();
//     }
// 
//     @CallSuper
//     @Override
//     public void onStop() {
//         super.onStop();
//         getViewModelHelper().onStop();
//     }
// 
//     @CallSuper
//     @Override
//     public void onDestroyView() {
//         getViewModelHelper().onDestroyView(this);
//         super.onDestroyView();
//     }
// 
//     @CallSuper
//     @Override
//     public void onDestroy() {
//         getViewModelHelper().onDestroy(this);
//         super.onDestroy();
//     }
// 
//     @Nullable
//     public Class<R> getViewModelClass() {
//         return null;
//     }
// 
//     /**
//      * @see ViewModelHelper#getViewModel()
//      */
//     @NonNull
//     @SuppressWarnings("unused")
//     public R getViewModel() {
//         return getViewModelHelper().getViewModel();
//     }
// 
//     @Nullable
//     @Override
//     public ViewModelBindingConfig getViewModelBindingConfig() {
//         return null;
//     }
// 
//     @NonNull
//     public ViewModelHelper<T, R> getViewModelHelper() {
//         return mViewModelHelper;
//     }
// 
//     @Override
//     public void removeViewModel() {
//         mViewModelHelper.removeViewModel(requireActivity());
//     }
// 
//     /**
//      * Call this after your view is ready - usually on the end of {@link
//      * Fragment#onViewCreated(View, Bundle)}
//      *
//      * @param view view
//      */
//     protected void setModelView(@NonNull final T view) {
//         getViewModelHelper().setView(view);
//     }
// }
// 
// Path: library/src/androidTest/java/eu/inloop/viewmodel/fixture/activity/VMTestActivity.java
// public class VMTestActivity extends ViewModelBaseActivity<IVMTestActivityView, VMTestActivityViewModel> implements IVMTestActivityView {
// 
//     public static final int RESULT_CODE_OK = 1;
//     public static final String EXTRA_CALL_ON_BIND = "EXTRA_CALL_ON_BIND";
// 
//     @NonNull
//     public static Intent makeIntent(@NonNull Context context, boolean callOnBindModel) {
//         Intent intent = new Intent(context, VMTestActivity.class);
//         intent.putExtra(EXTRA_CALL_ON_BIND, callOnBindModel);
// 
//         return intent;
//     }
// 
//     @Override
//     protected void onCreate(@Nullable Bundle savedInstanceState) {
//         super.onCreate(savedInstanceState);
// 
//         LinearLayout view = new LinearLayout(this);
//         view.setId(android.R.id.content);
//         setContentView(view);
// 
//         if (savedInstanceState == null) {
//             addTestFragment();
//         }
// 
//         setModelView(this);
//     }
// 
//     public void addTestFragment() {
//         getSupportFragmentManager()
//                 .beginTransaction()
//                 .add(android.R.id.content, new VMTestFragment())
//                 .commitNow();
//     }
// 
//     public void removeTestFragment() {
//         getSupportFragmentManager()
//                 .beginTransaction()
//                 .remove(getTestFragment())
//                 .commitNow();
//     }
// 
//     @NonNull
//     public VMTestFragment getTestFragment() {
//         for (Fragment fragment : getSupportFragmentManager().getFragments()) {
//             if (fragment instanceof VMTestFragment) {
//                 return (VMTestFragment) fragment;
//             }
//         }
//         throw new AssertionError("Fragment not found");
//     }
// 
//     @Override
//     public void onLoadData(boolean loaded) {
//         setResult(RESULT_CODE_OK);
//         finish();
//     }
// 
// }


// Path: library/src/androidTest/java/eu/inloop/viewmodel/fixture/fragment/VMTestFragment.java
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import eu.inloop.viewmodel.base.ViewModelBaseFragment;
import eu.inloop.viewmodel.fixture.activity.VMTestActivity;

package eu.inloop.viewmodel.fixture.fragment;



public class VMTestFragment extends ViewModelBaseFragment<IVMTestFragmentView, VMTestFragmentViewModel>
        implements IVMTestFragmentView {

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return new LinearLayout(getContext());
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        setModelView(this);
    }

    @Override
    public void onLoadData(boolean loaded) {
        requireActivity().setResult(VMTestActivity.RESULT_CODE_OK);