Skip to content

Commit 77e07d4

Browse files
committed
lets ignore photos at comparing if a contact details changed, to avoid redraws
1 parent 3d47089 commit 77e07d4

File tree

2 files changed

+47
-11
lines changed

2 files changed

+47
-11
lines changed

app/src/main/kotlin/com/simplemobiletools/contacts/pro/fragments/MyViewPagerFragment.kt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,9 +127,14 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
127127
}
128128
}
129129

130-
if (filtered.hashCode() != lastHashCode || skipHashComparing) {
130+
var currentHash = 0
131+
filtered.forEach {
132+
currentHash += it.getHashWithoutPrivatePhoto()
133+
}
134+
135+
if (currentHash != lastHashCode || skipHashComparing) {
131136
skipHashComparing = false
132-
lastHashCode = filtered.hashCode()
137+
lastHashCode = currentHash
133138
activity?.runOnUiThread {
134139
setupContacts(filtered)
135140
}

app/src/main/kotlin/com/simplemobiletools/contacts/pro/models/Contact.kt

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@ import com.simplemobiletools.commons.extensions.normalizeString
77
import com.simplemobiletools.commons.helpers.*
88
import com.simplemobiletools.contacts.pro.helpers.SMT_PRIVATE
99

10-
data class Contact(var id: Int, var prefix: String, var firstName: String, var middleName: String, var surname: String, var suffix: String, var nickname: String,
11-
var photoUri: String, var phoneNumbers: ArrayList<PhoneNumber>, var emails: ArrayList<Email>, var addresses: ArrayList<Address>,
12-
var events: ArrayList<Event>, var source: String, var starred: Int, var contactId: Int, var thumbnailUri: String, var photo: Bitmap?, var notes: String,
13-
var groups: ArrayList<Group>, var organization: Organization, var websites: ArrayList<String>, var IMs: ArrayList<IM>, var mimetype: String,
14-
var ringtone: String?) :
10+
data class Contact(
11+
var id: Int, var prefix: String, var firstName: String, var middleName: String, var surname: String, var suffix: String, var nickname: String,
12+
var photoUri: String, var phoneNumbers: ArrayList<PhoneNumber>, var emails: ArrayList<Email>, var addresses: ArrayList<Address>,
13+
var events: ArrayList<Event>, var source: String, var starred: Int, var contactId: Int, var thumbnailUri: String, var photo: Bitmap?, var notes: String,
14+
var groups: ArrayList<Group>, var organization: Organization, var websites: ArrayList<String>, var IMs: ArrayList<IM>, var mimetype: String,
15+
var ringtone: String?
16+
) :
1517
Comparable<Contact> {
1618
companion object {
1719
var sorting = 0
@@ -121,10 +123,38 @@ data class Contact(var id: Int, var prefix: String, var firstName: String, var m
121123
}
122124
}
123125

126+
// photos stored locally always have different hashcodes. Avoid constantly refreshing the contact lists as the app thinks something changed.
127+
fun getHashWithoutPrivatePhoto(): Int {
128+
val photoToUse = if (isPrivate()) null else photo
129+
return copy(photo = photoToUse).hashCode()
130+
}
131+
124132
fun getStringToCompare(): String {
125-
return copy(id = 0, prefix = "", firstName = getNameToDisplay().toLowerCase(), middleName = "", surname = "", suffix = "", nickname = "", photoUri = "",
126-
phoneNumbers = ArrayList(), emails = ArrayList(), events = ArrayList(), source = "", addresses = ArrayList(), starred = 0, contactId = 0,
127-
thumbnailUri = "", notes = "", groups = ArrayList(), websites = ArrayList(), organization = Organization("", ""), IMs = ArrayList(), ringtone = "").toString()
133+
return copy(
134+
id = 0,
135+
prefix = "",
136+
firstName = getNameToDisplay().toLowerCase(),
137+
middleName = "",
138+
surname = "",
139+
suffix = "",
140+
nickname = "",
141+
photoUri = "",
142+
phoneNumbers = ArrayList(),
143+
emails = ArrayList(),
144+
events = ArrayList(),
145+
source = "",
146+
addresses = ArrayList(),
147+
starred = 0,
148+
contactId = 0,
149+
thumbnailUri = "",
150+
photo = null,
151+
notes = "",
152+
groups = ArrayList(),
153+
websites = ArrayList(),
154+
organization = Organization("", ""),
155+
IMs = ArrayList(),
156+
ringtone = ""
157+
).toString()
128158
}
129159

130160
fun getHashToCompare() = getStringToCompare().hashCode()
@@ -135,7 +165,8 @@ data class Contact(var id: Int, var prefix: String, var firstName: String, var m
135165
return fullOrganization.trim().trimEnd(',')
136166
}
137167

138-
fun isABusinessContact() = prefix.isEmpty() && firstName.isEmpty() && middleName.isEmpty() && surname.isEmpty() && suffix.isEmpty() && organization.isNotEmpty()
168+
fun isABusinessContact() =
169+
prefix.isEmpty() && firstName.isEmpty() && middleName.isEmpty() && surname.isEmpty() && suffix.isEmpty() && organization.isNotEmpty()
139170

140171
fun doesContainPhoneNumber(text: String, convertLetters: Boolean): Boolean {
141172
return if (text.isNotEmpty()) {

0 commit comments

Comments
 (0)