Skip to content

Commit 4e09c72

Browse files
SUPERCILEXsamtstern
authored andcommitted
Fix Firestore move events ignoring changes (#1045)
1 parent e7cb356 commit 4e09c72

File tree

4 files changed

+71
-3
lines changed

4 files changed

+71
-3
lines changed

app/src/main/java/com/firebase/uidemo/database/AbstractChat.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,10 @@ public abstract class AbstractChat {
1111

1212
public abstract String getUid();
1313

14+
@Override
15+
public abstract int hashCode();
16+
17+
@Override
18+
public abstract boolean equals(Object obj);
19+
1420
}

app/src/main/java/com/firebase/uidemo/database/firestore/Chat.java

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88

99
@IgnoreExtraProperties
1010
public class Chat extends AbstractChat {
11-
1211
private String mName;
1312
private String mMessage;
1413
private String mUid;
@@ -56,4 +55,36 @@ public Date getTimestamp() {
5655
public void setTimestamp(Date timestamp) {
5756
mTimestamp = timestamp;
5857
}
58+
59+
@Override
60+
public boolean equals(Object o) {
61+
if (this == o) return true;
62+
if (o == null || getClass() != o.getClass()) return false;
63+
64+
Chat chat = (Chat) o;
65+
66+
return mTimestamp.equals(chat.mTimestamp)
67+
&& mUid.equals(chat.mUid)
68+
&& (mName == null ? chat.mName == null : mName.equals(chat.mName))
69+
&& (mMessage == null ? chat.mMessage == null : mMessage.equals(chat.mMessage));
70+
}
71+
72+
@Override
73+
public int hashCode() {
74+
int result = mName == null ? 0 : mName.hashCode();
75+
result = 31 * result + (mMessage == null ? 0 : mMessage.hashCode());
76+
result = 31 * result + mUid.hashCode();
77+
result = 31 * result + mTimestamp.hashCode();
78+
return result;
79+
}
80+
81+
@Override
82+
public String toString() {
83+
return "Chat{" +
84+
"mName='" + mName + '\'' +
85+
", mMessage='" + mMessage + '\'' +
86+
", mUid='" + mUid + '\'' +
87+
", mTimestamp=" + mTimestamp +
88+
'}';
89+
}
5990
}

app/src/main/java/com/firebase/uidemo/database/realtime/Chat.java

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
@IgnoreExtraProperties
77
public class Chat extends AbstractChat {
8-
98
private String mName;
109
private String mMessage;
1110
private String mUid;
@@ -43,4 +42,33 @@ public String getUid() {
4342
public void setUid(String uid) {
4443
mUid = uid;
4544
}
45+
46+
@Override
47+
public boolean equals(Object o) {
48+
if (this == o) return true;
49+
if (o == null || getClass() != o.getClass()) return false;
50+
51+
Chat chat = (Chat) o;
52+
53+
return mUid.equals(chat.mUid)
54+
&& (mName == null ? chat.mName == null : mName.equals(chat.mName))
55+
&& (mMessage == null ? chat.mMessage == null : mMessage.equals(chat.mMessage));
56+
}
57+
58+
@Override
59+
public int hashCode() {
60+
int result = mName == null ? 0 : mName.hashCode();
61+
result = 31 * result + (mMessage == null ? 0 : mMessage.hashCode());
62+
result = 31 * result + mUid.hashCode();
63+
return result;
64+
}
65+
66+
@Override
67+
public String toString() {
68+
return "Chat{" +
69+
"mName='" + mName + '\'' +
70+
", mMessage='" + mMessage + '\'' +
71+
", mUid='" + mUid + '\'' +
72+
'}';
73+
}
4674
}

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,13 +110,16 @@ private void onDocumentModified(DocumentChange change) {
110110
// Document modified only
111111
mSnapshots.set(change.getNewIndex(), change.getDocument());
112112
notifyOnChildChanged(ChangeEventType.CHANGED, change.getDocument(),
113-
change.getNewIndex(), change.getOldIndex());
113+
change.getNewIndex(), change.getNewIndex());
114114
} else {
115115
// Document moved and possibly also modified
116116
mSnapshots.remove(change.getOldIndex());
117117
mSnapshots.add(change.getNewIndex(), change.getDocument());
118+
118119
notifyOnChildChanged(ChangeEventType.MOVED, change.getDocument(),
119120
change.getNewIndex(), change.getOldIndex());
121+
notifyOnChildChanged(ChangeEventType.CHANGED, change.getDocument(),
122+
change.getNewIndex(), change.getNewIndex());
120123
}
121124
}
122125
}

0 commit comments

Comments
 (0)