23
23
24
24
import java .util .ArrayList ;
25
25
import java .util .HashMap ;
26
- import java .util .HashSet ;
27
- import java .util .List ;
28
26
import java .util .Map ;
29
- import java .util .Set ;
30
27
31
28
class FirebaseIndexArray extends FirebaseArray {
32
29
private static final String TAG = FirebaseIndexArray .class .getSimpleName ();
33
30
34
- private Query mQuery ;
31
+ private final Query mQuery ;
32
+ private final HashMap <Query , ValueEventListener > mRefs = new HashMap <>();
33
+ private final ArrayList <DataSnapshot > mDataSnapshots = new ArrayList <>();
35
34
private OnChangedListener mListener ;
36
- private Map <Query , ValueEventListener > mRefs = new HashMap <>();
37
- private List <DataSnapshot > mDataSnapshots = new ArrayList <>();
38
35
39
36
public FirebaseIndexArray (Query keyRef , Query dataRef ) {
40
37
super (keyRef );
@@ -44,9 +41,8 @@ public FirebaseIndexArray(Query keyRef, Query dataRef) {
44
41
@ Override
45
42
public void cleanup () {
46
43
super .cleanup ();
47
- Set <Query > refs = new HashSet <>(mRefs .keySet ());
48
- for (Query ref : refs ) {
49
- ref .removeEventListener (mRefs .remove (ref ));
44
+ for (Map .Entry <Query , ValueEventListener > entry : mRefs .entrySet ()) {
45
+ entry .getKey ().removeEventListener (entry .getValue ());
50
46
}
51
47
}
52
48
@@ -60,21 +56,7 @@ public DataSnapshot getItem(int index) {
60
56
return mDataSnapshots .get (index );
61
57
}
62
58
63
- private int getIndexForKey (String key ) {
64
- int dataCount = getCount ();
65
- int index = 0 ;
66
- for (int keyIndex = 0 ; index < dataCount ; keyIndex ++) {
67
- String superKey = super .getItem (keyIndex ).getKey ();
68
- if (key .equals (superKey )) {
69
- break ;
70
- } else if (mDataSnapshots .get (index ).getKey ().equals (superKey )) {
71
- index ++;
72
- }
73
- }
74
- return index ;
75
- }
76
-
77
- private boolean isMatch (int index , String key ) {
59
+ private boolean isKeyAtIndex (int index , String key ) {
78
60
return index >= 0 && index < getCount () && mDataSnapshots .get (index ).getKey ().equals (key );
79
61
}
80
62
@@ -105,7 +87,7 @@ public void onChildRemoved(DataSnapshot keySnapshot) {
105
87
super .onChildRemoved (keySnapshot );
106
88
super .setOnChangedListener (mListener );
107
89
108
- if (isMatch (index , key )) {
90
+ if (isKeyAtIndex (index , key )) {
109
91
mDataSnapshots .remove (index );
110
92
notifyChangedListeners (OnChangedListener .EventType .REMOVED , index );
111
93
}
@@ -120,7 +102,7 @@ public void onChildMoved(DataSnapshot keySnapshot, String previousChildKey) {
120
102
super .onChildMoved (keySnapshot , previousChildKey );
121
103
super .setOnChangedListener (mListener );
122
104
123
- if (isMatch (oldIndex , key )) {
105
+ if (isKeyAtIndex (oldIndex , key )) {
124
106
DataSnapshot snapshot = mDataSnapshots .remove (oldIndex );
125
107
int newIndex = getIndexForKey (key );
126
108
mDataSnapshots .add (newIndex , snapshot );
@@ -147,15 +129,15 @@ public void onDataChange(DataSnapshot snapshot) {
147
129
int index = getIndexForKey (key );
148
130
149
131
if (snapshot .getValue () != null ) {
150
- if (!isMatch (index , key )) {
132
+ if (!isKeyAtIndex (index , key )) {
151
133
mDataSnapshots .add (index , snapshot );
152
134
notifyChangedListeners (OnChangedListener .EventType .ADDED , index );
153
135
} else {
154
136
mDataSnapshots .set (index , snapshot );
155
137
notifyChangedListeners (OnChangedListener .EventType .CHANGED , index );
156
138
}
157
139
} else {
158
- if (isMatch (index , key )) {
140
+ if (isKeyAtIndex (index , key )) {
159
141
mDataSnapshots .remove (index );
160
142
notifyChangedListeners (OnChangedListener .EventType .REMOVED , index );
161
143
} else {
0 commit comments