Skip to content

Commit

Permalink
Method getViewModelClass replaces with createViewModel on ViewModelBa…
Browse files Browse the repository at this point in the history
…seActivity and ViewModelBaseFragment.
  • Loading branch information
Dolezal Zdenek authored and Dolezal Zdenek committed Jul 11, 2016
1 parent 2167582 commit 827b494
Show file tree
Hide file tree
Showing 8 changed files with 41 additions and 19 deletions.
10 changes: 6 additions & 4 deletions library/src/main/java/eu/inloop/viewmodel/ViewModelHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@

import java.util.UUID;

import eu.inloop.viewmodel.base.CreateViewModelCallback;

public class ViewModelHelper<T extends IView, R extends AbstractViewModel<T>> {

@Nullable
Expand All @@ -25,16 +27,16 @@ public class ViewModelHelper<T extends IView, R extends AbstractViewModel<T>> {
* @param activity parent activity
* @param savedInstanceState savedInstance state from {@link Activity#onCreate(Bundle)} or
* {@link Fragment#onCreate(Bundle)}
* @param viewModelClass the {@link Class} of your ViewModel
* @param createViewModelCallback callback for creating viewmodel
* @param arguments pass {@link Fragment#getArguments()} or
* {@link Activity#getIntent()}.{@link Intent#getExtras() getExtras()}
*/
public void onCreate(@NonNull Activity activity,
@Nullable Bundle savedInstanceState,
@Nullable Class<? extends AbstractViewModel<T>> viewModelClass,
@Nullable CreateViewModelCallback createViewModelCallback,
@Nullable Bundle arguments) {
// no viewmodel for this fragment
if (viewModelClass == null) {
if (createViewModelCallback == null) {
mViewModel = null;
return;
}
Expand All @@ -48,7 +50,7 @@ public void onCreate(@NonNull Activity activity,
}

// get model instance for this screen
final ViewModelProvider.ViewModelWrapper<T> viewModelWrapper = getViewModelProvider(activity).getViewModelProvider().getViewModel(mScreenId, viewModelClass);
final ViewModelProvider.ViewModelWrapper<T> viewModelWrapper = getViewModelProvider(activity).getViewModelProvider().getViewModel(mScreenId, createViewModelCallback);
//noinspection unchecked
mViewModel = (R) viewModelWrapper.viewModel;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@

import java.util.HashMap;

import eu.inloop.viewmodel.base.CreateViewModelCallback;

/**
* Create and keep this class inside your Activity. Store it
* in {@link android.support.v4.app.FragmentActivity#onRetainCustomNonConfigurationInstance()
Expand Down Expand Up @@ -48,14 +50,14 @@ public synchronized void removeAllViewModels() {
@SuppressWarnings("unchecked")
@NonNull
public synchronized <T extends IView> ViewModelWrapper<T> getViewModel(final String modelIdentifier,
final @NonNull Class<? extends AbstractViewModel<T>> viewModelClass) {
@NonNull final CreateViewModelCallback createViewModelCallback) {
AbstractViewModel<T> instance = (AbstractViewModel<T>) mViewModelCache.get(modelIdentifier);
if (instance != null) {
return new ViewModelWrapper<>(instance, false);
}

try {
instance = viewModelClass.newInstance();
instance = createViewModelCallback.onViewModelRequested();
instance.setUniqueIdentifier(modelIdentifier);
mViewModelCache.put(modelIdentifier, instance);
return new ViewModelWrapper<>(instance, true);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package eu.inloop.viewmodel.base;

import eu.inloop.viewmodel.AbstractViewModel;
import eu.inloop.viewmodel.IView;

public interface CreateViewModelCallback<T extends IView, R extends AbstractViewModel<T>> {
R onViewModelRequested();
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,12 @@ public abstract class ViewModelBaseActivity<T extends IView, R extends AbstractV
@Override
protected void onCreate(@Nullable final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mViewModeHelper.onCreate(this, savedInstanceState, getViewModelClass(), getIntent().getExtras());
mViewModeHelper.onCreate(this, savedInstanceState, new CreateViewModelCallback() {
@Override
public AbstractViewModel onViewModelRequested() {
return createViewModel();
}
}, getIntent().getExtras());
}

/**
Expand All @@ -27,7 +32,7 @@ public void setModelView(@NonNull final T view) {
mViewModeHelper.setView(view);
}

public abstract Class<R> getViewModelClass();
public abstract R createViewModel();

@Override
public void onSaveInstanceState(@NonNull final Bundle outState) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,16 @@ public abstract class ViewModelBaseFragment<T extends IView, R extends AbstractV
@Override
public void onCreate(@Nullable final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mViewModeHelper.onCreate(getActivity(), savedInstanceState, getViewModelClass(), getArguments());
mViewModeHelper.onCreate(getActivity(), savedInstanceState, new CreateViewModelCallback() {
@Override
public AbstractViewModel onViewModelRequested() {
return createViewModel();
}
}, getArguments());
}

@Nullable
public abstract Class<R> getViewModelClass();
public abstract R createViewModel();

/**
* Call this after your view is ready - usually on the end of {@link Fragment#onViewCreated(View, Bundle)}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
Expand Down Expand Up @@ -38,9 +37,10 @@ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
((TextView)view.findViewById(R.id.text)).setText(Integer.toString(getArguments().getInt("position")));
}

@Nullable
@Override
public Class<PageModel> getViewModelClass() {
return PageModel.class;
public PageModel createViewModel() {
return new PageModel();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
Expand Down Expand Up @@ -37,8 +36,9 @@ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
setModelView(this);
}

@Nullable
@Override
public Class<SampleArgumentViewModel> getViewModelClass() {
return SampleArgumentViewModel.class;
public SampleArgumentViewModel createViewModel() {
return new SampleArgumentViewModel();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,12 @@ public void onCreate(Bundle savedInstanceState) {
mAdapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, android.R.id.text1, new ArrayList<String>());
}

@Nullable
@Override
public Class<UserListViewModel> getViewModelClass() {
return UserListViewModel.class;
public UserListViewModel createViewModel() {
return new UserListViewModel();
}


@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.fragment_userlist, container, false);
Expand Down

0 comments on commit 827b494

Please sign in to comment.