Skip to content

Commit 8d07534

Browse files
author
Juraj Novák
committed
Make getViewModelClass optional
1 parent c00ed9e commit 8d07534

File tree

3 files changed

+26
-6
lines changed

3 files changed

+26
-6
lines changed

library/src/main/java/eu/inloop/viewmodel/ProxyViewHelper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import java.lang.reflect.Proxy;
1111
import java.lang.reflect.Type;
1212

13-
class ProxyViewHelper {
13+
public class ProxyViewHelper {
1414

1515
private static final class ProxyDummyClass {
1616
}
@@ -29,7 +29,7 @@ static <T> T init(@NonNull Class<?> in) {
2929
}
3030

3131
@Nullable
32-
static Class<?> getGenericType(@NonNull Class<?> in, @NonNull Class<?> whichExtends) {
32+
public static Class<?> getGenericType(@NonNull Class<?> in, @NonNull Class<?> whichExtends) {
3333
final Type genericSuperclass = in.getGenericSuperclass();
3434
if (genericSuperclass instanceof ParameterizedType) {
3535
final Type[] typeArgs = ((ParameterizedType) genericSuperclass).getActualTypeArguments();

library/src/main/java/eu/inloop/viewmodel/base/ViewModelBaseActivity.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import eu.inloop.viewmodel.AbstractViewModel;
99
import eu.inloop.viewmodel.IView;
10+
import eu.inloop.viewmodel.ProxyViewHelper;
1011
import eu.inloop.viewmodel.ViewModelHelper;
1112
import eu.inloop.viewmodel.binding.ViewModelBindingConfig;
1213

@@ -19,7 +20,14 @@ public abstract class ViewModelBaseActivity<T extends IView, R extends AbstractV
1920
@Override
2021
protected void onCreate(@Nullable final Bundle savedInstanceState) {
2122
super.onCreate(savedInstanceState);
22-
mViewModeHelper.onCreate(this, savedInstanceState, getViewModelClass(), getIntent().getExtras());
23+
24+
Class<? extends AbstractViewModel<T>> viewModelClass = getViewModelClass();
25+
// try to extract the ViewModel class from the implementation
26+
if (viewModelClass == null) {
27+
//noinspection unchecked
28+
viewModelClass = (Class<? extends AbstractViewModel<T>>) ProxyViewHelper.getGenericType(getClass(), AbstractViewModel.class);
29+
}
30+
mViewModeHelper.onCreate(this, savedInstanceState, viewModelClass, getIntent().getExtras());
2331
}
2432

2533
/**
@@ -32,7 +40,9 @@ public void setModelView(@NonNull final T view) {
3240
}
3341

3442
@Nullable
35-
public abstract Class<R> getViewModelClass();
43+
public Class<R> getViewModelClass() {
44+
return null;
45+
}
3646

3747
@CallSuper
3848
@Override

library/src/main/java/eu/inloop/viewmodel/base/ViewModelBaseFragment.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
import eu.inloop.viewmodel.AbstractViewModel;
1111
import eu.inloop.viewmodel.IView;
12+
import eu.inloop.viewmodel.ProxyViewHelper;
1213
import eu.inloop.viewmodel.ViewModelHelper;
1314
import eu.inloop.viewmodel.binding.ViewModelBindingConfig;
1415

@@ -21,7 +22,14 @@ public abstract class ViewModelBaseFragment<T extends IView, R extends AbstractV
2122
@Override
2223
public void onCreate(@Nullable final Bundle savedInstanceState) {
2324
super.onCreate(savedInstanceState);
24-
getViewModelHelper().onCreate(getActivity(), savedInstanceState, getViewModelClass(), getArguments());
25+
26+
Class<? extends AbstractViewModel<T>> viewModelClass = getViewModelClass();
27+
// try to extract the ViewModel class from the implementation
28+
if (viewModelClass == null) {
29+
//noinspection unchecked
30+
viewModelClass = (Class<? extends AbstractViewModel<T>>) ProxyViewHelper.getGenericType(getClass(), AbstractViewModel.class);
31+
}
32+
getViewModelHelper().onCreate(getActivity(), savedInstanceState, viewModelClass, getArguments());
2533
}
2634

2735
@CallSuper
@@ -60,7 +68,9 @@ public void onDestroy() {
6068
}
6169

6270
@Nullable
63-
public abstract Class<R> getViewModelClass();
71+
public Class<R> getViewModelClass() {
72+
return null;
73+
}
6474

6575
/**
6676
* @see ViewModelHelper#getViewModel()

0 commit comments

Comments
 (0)