Skip to content

Commit e5fbab8

Browse files
SUPERCILEXsamtstern
authored andcommitted
Lockdown firebase arrays and improve index add performance (#898)
1 parent d871c7a commit e5fbab8

File tree

2 files changed

+14
-8
lines changed

2 files changed

+14
-8
lines changed

database/src/main/java/com/firebase/ui/database/FirebaseArray.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@
2626
/**
2727
* This class implements a collection on top of a Firebase location.
2828
*/
29-
public class FirebaseArray<T> extends CachingObservableSnapshotArray<T> implements ChildEventListener, ValueEventListener {
29+
public class FirebaseArray<T> extends CachingObservableSnapshotArray<T>
30+
implements ChildEventListener, ValueEventListener {
3031
private Query mQuery;
3132
private List<DataSnapshot> mSnapshots = new ArrayList<>();
3233

database/src/main/java/com/firebase/ui/database/FirebaseIndexArray.java

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@
2828
import java.util.List;
2929
import java.util.Map;
3030

31-
public class FirebaseIndexArray<T> extends CachingObservableSnapshotArray<T> implements ChangeEventListener {
31+
public class FirebaseIndexArray<T> extends CachingObservableSnapshotArray<T>
32+
implements ChangeEventListener {
3233
private static final String TAG = "FirebaseIndexArray";
3334

3435
private DatabaseReference mDataRef;
@@ -107,7 +108,7 @@ protected void onDestroy() {
107108
public void onChildChanged(EventType type, DataSnapshot snapshot, int index, int oldIndex) {
108109
switch (type) {
109110
case ADDED:
110-
onKeyAdded(snapshot);
111+
onKeyAdded(snapshot, index);
111112
break;
112113
case MOVED:
113114
onKeyMoved(snapshot, index, oldIndex);
@@ -175,16 +176,16 @@ private boolean isKeyAtIndex(String key, int index) {
175176
return index >= 0 && index < size() && mDataSnapshots.get(index).getKey().equals(key);
176177
}
177178

178-
protected void onKeyAdded(DataSnapshot data) {
179+
private void onKeyAdded(DataSnapshot data, int newIndex) {
179180
String key = data.getKey();
180181
DatabaseReference ref = mDataRef.child(key);
181182

182183
mKeysWithPendingUpdate.add(key);
183184
// Start listening
184-
mRefs.put(ref, ref.addValueEventListener(new DataRefListener()));
185+
mRefs.put(ref, ref.addValueEventListener(new DataRefListener(newIndex)));
185186
}
186187

187-
protected void onKeyMoved(DataSnapshot data, int index, int oldIndex) {
188+
private void onKeyMoved(DataSnapshot data, int index, int oldIndex) {
188189
String key = data.getKey();
189190

190191
// We can't use `returnOrFindIndexForKey(...)` for `oldIndex` or it might find the updated
@@ -199,7 +200,7 @@ protected void onKeyMoved(DataSnapshot data, int index, int oldIndex) {
199200
}
200201
}
201202

202-
protected void onKeyRemoved(DataSnapshot data, int index) {
203+
private void onKeyRemoved(DataSnapshot data, int index) {
203204
String key = data.getKey();
204205
ValueEventListener listener = mRefs.remove(mDataRef.getRef().child(key));
205206
if (listener != null) mDataRef.child(key).removeEventListener(listener);
@@ -243,10 +244,14 @@ public String toString() {
243244
/**
244245
* A ValueEventListener attached to the joined child data.
245246
*/
246-
protected class DataRefListener implements ValueEventListener {
247+
private final class DataRefListener implements ValueEventListener {
247248
/** Cached index to skip searching for the current index on each update */
248249
private int currentIndex;
249250

251+
public DataRefListener(int index) {
252+
currentIndex = index;
253+
}
254+
250255
@Override
251256
public void onDataChange(DataSnapshot snapshot) {
252257
String key = snapshot.getKey();

0 commit comments

Comments
 (0)