Skip to content

Commit b8db413

Browse files
committed
Unify listener addition, fix hasDataChanged
Change-Id: Iaf07157fabd5e1a1c698be2832e11716e53812d1
1 parent d2fa47e commit b8db413

File tree

4 files changed

+40
-59
lines changed

4 files changed

+40
-59
lines changed

common/src/main/java/com/firebase/ui/common/BaseObservableSnapshotArray.java

Lines changed: 13 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ public abstract class BaseObservableSnapshotArray<S, L extends BaseChangeEventLi
2121
private final List<L> mListeners = new CopyOnWriteArrayList<>();
2222
private BaseSnapshotParser<S, E> mParser;
2323

24+
/**
25+
* True if there has been a "data changed" event since the array was created, false otherwise.
26+
*/
2427
private boolean mHasDataChanged = false;
2528

2629
/**
@@ -50,7 +53,16 @@ protected void onCreate() {}
5053
* state and fire backlogged events
5154
* @param listener the added listener.
5255
*/
53-
protected void onListenerAdded(L listener) {};
56+
@CallSuper
57+
protected void onListenerAdded(L listener) {
58+
for (int i = 0; i < size(); i++) {
59+
listener.onChildChanged(ChangeEventType.ADDED, get(i), i, -1);
60+
}
61+
62+
if (mHasDataChanged) {
63+
listener.onDataChanged();
64+
}
65+
};
5466

5567
/**
5668
* Called when the {@link BaseObservableSnapshotArray} is inactive and should stop listening to the
@@ -140,16 +152,6 @@ public E getObject(int index) {
140152
return mParser.parseSnapshot(get(index));
141153
}
142154

143-
@Override
144-
public S get(int index) {
145-
return getSnapshots().get(index);
146-
}
147-
148-
@Override
149-
public int size() {
150-
return getSnapshots().size();
151-
}
152-
153155
protected void notifyListenersOnChildChanged(ChangeEventType type,
154156
S snapshot,
155157
int newIndex,
@@ -167,18 +169,6 @@ protected void notifyListenersOnDataChanged() {
167169
}
168170
}
169171

170-
171-
// TODO(samstern): Do we need this?
172-
protected abstract List<S> getSnapshots();
173-
174-
protected boolean hasDataChanged() {
175-
return mHasDataChanged;
176-
}
177-
178-
protected void setHasDataChanged(boolean hasDataChanged) {
179-
mHasDataChanged = hasDataChanged;
180-
}
181-
182172
protected BaseSnapshotParser<S, E> getSnapshotParser() {
183173
return mParser;
184174
}

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

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,6 @@ private void init(Query query) {
6060
mQuery = query;
6161
}
6262

63-
@Override
64-
protected List<DataSnapshot> getSnapshots() {
65-
return mSnapshots;
66-
}
67-
6863
@Override
6964
protected void onCreate() {
7065
super.onCreate();
@@ -141,6 +136,21 @@ private int getIndexForKey(String key) {
141136
throw new IllegalArgumentException("Key not found");
142137
}
143138

139+
@Override
140+
public DataSnapshot get(int i) {
141+
return mSnapshots.get(i);
142+
}
143+
144+
@Override
145+
protected List<DataSnapshot> getSnapshots() {
146+
return mSnapshots;
147+
}
148+
149+
@Override
150+
public int size() {
151+
return mSnapshots.size();
152+
}
153+
144154
@Override
145155
public boolean equals(Object obj) {
146156
if (this == obj) return true;

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

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -56,18 +56,8 @@ public ChangeEventListener addChangeEventListener(@NonNull ChangeEventListener l
5656
return super.addChangeEventListener(listener);
5757
}
5858

59-
@Override
60-
protected void onListenerAdded(ChangeEventListener listener) {
61-
super.onListenerAdded(listener);
62-
63-
for (int i = 0; i < size(); i++) {
64-
listener.onChildChanged(ChangeEventType.ADDED, get(i), i, -1);
65-
}
66-
67-
if (hasDataChanged()) {
68-
listener.onDataChanged();
69-
}
70-
}
59+
// TODO(samstern): Can I remove this?
60+
protected abstract List<DataSnapshot> getSnapshots();
7161

7262
protected void notifyListenersOnCancelled(DatabaseError error) {
7363
for (ChangeEventListener listener : getListeners()) {

firestore/src/main/java/com/firebase/ui/firestore/FirestoreArray.java

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -65,20 +65,6 @@ protected void onDestroy() {
6565
mCache.clearData();
6666
}
6767

68-
@Override
69-
protected void onListenerAdded(ChangeEventListener listener) {
70-
super.onListenerAdded(listener);
71-
72-
for (int i = 0; i < size(); i++) {
73-
listener.onChildChanged(ChangeEventType.ADDED, get(i), i, -1);
74-
}
75-
76-
// TODO(samstern): track hasDataChanged()
77-
if (hasDataChanged()) {
78-
listener.onDataChanged();
79-
}
80-
}
81-
8268
@Override
8369
public void onEvent(QuerySnapshot snapshots, FirebaseFirestoreException e) {
8470
if (e != null) {
@@ -106,6 +92,16 @@ public void onEvent(QuerySnapshot snapshots, FirebaseFirestoreException e) {
10692
notifyListenersOnDataChanged();
10793
}
10894

95+
@Override
96+
public DocumentSnapshot get(int i) {
97+
return mSnapshots.get(i);
98+
}
99+
100+
@Override
101+
public int size() {
102+
return mSnapshots.size();
103+
}
104+
109105
private void onDocumentAdded(DocumentChange change) {
110106
Log.d(TAG, "Added: " + change.getNewIndex());
111107

@@ -148,11 +144,6 @@ private void onDocumentModified(DocumentChange change) {
148144
}
149145
}
150146

151-
@Override
152-
protected List<DocumentSnapshot> getSnapshots() {
153-
return mSnapshots;
154-
}
155-
156147
private void startListening() {
157148
if (mRegistration != null) {
158149
Log.d(TAG, "startListening: already listening.");

0 commit comments

Comments
 (0)