Skip to content

Commit cecfd54

Browse files
author
Daniel Novak
committed
Change unique ID generation to UUID
1 parent a99f3d4 commit cecfd54

File tree

3 files changed

+18
-16
lines changed

3 files changed

+18
-16
lines changed

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@
1111

1212
public abstract class AbstractViewModel<T extends IView> {
1313

14-
private int mUniqueIdentifier;
14+
private String mUniqueIdentifier;
1515

1616
@Nullable
1717
private T mView;
1818

19-
void setUniqueIdentifier(int uniqueIdentifier) {
19+
void setUniqueIdentifier(String uniqueIdentifier) {
2020
mUniqueIdentifier = uniqueIdentifier;
2121
}
2222

@@ -25,7 +25,7 @@ void setUniqueIdentifier(int uniqueIdentifier) {
2525
* @return An app unique identifier for the current viewmodel instance (will be kept during orientation
2626
* change). This identifier will be reset in case the corresponding activity is killed.
2727
*/
28-
public int getUniqueIdentifier() {
28+
public String getUniqueIdentifier() {
2929
return mUniqueIdentifier;
3030
}
3131

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@
88
import android.support.v4.app.Fragment;
99
import android.util.Log;
1010

11+
import java.util.UUID;
1112
import java.util.concurrent.atomic.AtomicInteger;
1213

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

15-
private int mScreenId;
16+
private String mScreenId;
1617
private R mViewModel;
1718
private boolean mModelRemoved;
1819
private boolean mOnSaveInstanceCalled;
19-
private static final AtomicInteger sModelIndex = new AtomicInteger(0);
2020

2121
/**
2222
* Call from {@link android.app.Activity#onCreate(android.os.Bundle)} or
@@ -38,9 +38,9 @@ public void onCreate(@Nullable Bundle savedInstanceState,
3838

3939
// screen (activity/fragment) created for first time, attach unique ID
4040
if (savedInstanceState == null) {
41-
mScreenId = sModelIndex.incrementAndGet();
41+
mScreenId = UUID.randomUUID().toString();
4242
} else {
43-
mScreenId = savedInstanceState.getInt("identifier");
43+
mScreenId = savedInstanceState.getString("identifier");
4444
mOnSaveInstanceCalled = false;
4545
}
4646

@@ -161,7 +161,7 @@ public R getViewModel() {
161161
* @param bundle
162162
*/
163163
public void onSaveInstanceState(@NonNull Bundle bundle) {
164-
bundle.putInt("identifier", mScreenId);
164+
bundle.putString("identifier", mScreenId);
165165
if (mViewModel != null) {
166166
mViewModel.saveState(bundle);
167167
mOnSaveInstanceCalled = true;

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

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
import android.support.annotation.NonNull;
33
import android.util.SparseArray;
44

5+
import java.util.HashMap;
6+
57
/**
68
* Create and keep this class inside your Activity. Store it
79
* in {@link android.support.v4.app.FragmentActivity#onRetainCustomNonConfigurationInstance()
@@ -12,32 +14,32 @@ public class ViewModelProvider {
1214

1315
private static final ViewModelProvider sInstance = new ViewModelProvider();
1416

15-
private final SparseArray<AbstractViewModel<? extends IView>> mViewModelCache;
17+
private final HashMap<String, AbstractViewModel<? extends IView>> mViewModelCache;
1618

1719
private ViewModelProvider() {
18-
mViewModelCache = new SparseArray<>();
20+
mViewModelCache = new HashMap<>();
1921
}
2022

2123
public static ViewModelProvider getInstance() {
2224
return sInstance;
2325
}
2426

25-
public synchronized void remove(int modelIndex) {
26-
mViewModelCache.remove(modelIndex);
27+
public synchronized void remove(String modeIdentifier) {
28+
mViewModelCache.remove(modeIdentifier);
2729
}
2830

2931
@SuppressWarnings("unchecked")
3032
@NonNull
31-
public synchronized <T extends IView> ViewModelWrapper<T> getViewModel(int modelIndex, @NonNull Class<? extends AbstractViewModel<T>> viewModelClass) {
32-
AbstractViewModel<T> instance = (AbstractViewModel<T>) mViewModelCache.get(modelIndex);
33+
public synchronized <T extends IView> ViewModelWrapper<T> getViewModel(String modelIdentifier, @NonNull Class<? extends AbstractViewModel<T>> viewModelClass) {
34+
AbstractViewModel<T> instance = (AbstractViewModel<T>) mViewModelCache.get(modelIdentifier);
3335
if (instance != null) {
3436
return new ViewModelWrapper<>(instance, false);
3537
}
3638

3739
try {
3840
instance = viewModelClass.newInstance();
39-
instance.setUniqueIdentifier(modelIndex);
40-
mViewModelCache.put(modelIndex, instance);
41+
instance.setUniqueIdentifier(modelIdentifier);
42+
mViewModelCache.put(modelIdentifier, instance);
4143
return new ViewModelWrapper<>(instance, true);
4244
} catch (Exception ex) {
4345
throw new RuntimeException(ex);

0 commit comments

Comments
 (0)