Skip to content

Commit 54e81b5

Browse files
authored
all: smoother notifications realm querying (fixes #8995) (#8957)
1 parent dcb6642 commit 54e81b5

File tree

3 files changed

+82
-60
lines changed

3 files changed

+82
-60
lines changed

app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ android {
99
applicationId "org.ole.planet.myplanet"
1010
minSdk = 26
1111
targetSdk = 36
12-
versionCode = 3711
13-
versionName = "0.37.11"
12+
versionCode = 3712
13+
versionName = "0.37.12"
1414
ndkVersion = '26.3.11579264'
1515
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
1616
vectorDrawables.useSupportLibrary = true

app/src/main/java/org/ole/planet/myplanet/MainApplication.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,15 @@ class MainApplication : Application(), Application.ActivityLifecycleCallbacks {
223223
}
224224

225225
private fun setupStrictMode() {
226+
if (BuildConfig.DEBUG) {
227+
val threadPolicy = StrictMode.ThreadPolicy.Builder()
228+
.detectDiskReads()
229+
.detectDiskWrites()
230+
.detectNetwork()
231+
.penaltyLog()
232+
.build()
233+
StrictMode.setThreadPolicy(threadPolicy)
234+
}
226235
val builder = VmPolicy.Builder()
227236
StrictMode.setVmPolicy(builder.build())
228237
builder.detectFileUriExposure()

app/src/main/java/org/ole/planet/myplanet/ui/dashboard/notification/NotificationsFragment.kt

Lines changed: 71 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -102,86 +102,99 @@ class NotificationsFragment : Fragment() {
102102
}
103103

104104
private fun handleNotificationClick(notification: RealmNotification) {
105-
when (notification.type) {
106-
"storage" -> {
107-
val intent = Intent(ACTION_INTERNAL_STORAGE_SETTINGS)
108-
startActivity(intent)
109-
}
110-
"survey" -> {
111-
databaseService.withRealm { realm ->
112-
val currentStepExam = realm.where(RealmStepExam::class.java)
113-
.equalTo("name", notification.relatedId)
114-
.findFirst()
115-
if (currentStepExam != null && activity is OnHomeItemClickListener) {
105+
viewLifecycleOwner.lifecycleScope.launch {
106+
when (notification.type) {
107+
"storage" -> {
108+
val intent = Intent(ACTION_INTERNAL_STORAGE_SETTINGS)
109+
startActivity(intent)
110+
}
111+
"survey" -> {
112+
val examId = withContext(Dispatchers.IO) {
113+
databaseService.withRealm { realm ->
114+
realm.where(RealmStepExam::class.java)
115+
.equalTo("name", notification.relatedId)
116+
.findFirst()?.id
117+
}
118+
}
119+
if (examId != null && activity is OnHomeItemClickListener) {
116120
AdapterMySubmission.openSurvey(
117121
activity as OnHomeItemClickListener,
118-
currentStepExam.id,
122+
examId,
119123
false,
120124
false,
121125
"",
122126
)
123127
}
124128
}
125-
}
126-
"task" -> {
127-
databaseService.withRealm { realm ->
128-
val taskId = notification.relatedId
129-
val task = realm.where(RealmTeamTask::class.java)
130-
.equalTo("id", taskId)
131-
.findFirst()
132-
133-
val linkJson = JSONObject(task?.link ?: "{}")
134-
val teamId = linkJson.optString("teams")
135-
if (teamId.isNotEmpty() && activity is OnHomeItemClickListener) {
136-
val teamObject = realm.where(RealmMyTeam::class.java)
137-
.equalTo("_id", teamId)
138-
.findFirst()
129+
"task" -> {
130+
val teamDetails = withContext(Dispatchers.IO) {
131+
databaseService.withRealm { realm ->
132+
val taskId = notification.relatedId
133+
val task = realm.where(RealmTeamTask::class.java)
134+
.equalTo("id", taskId)
135+
.findFirst()
136+
val linkJson = JSONObject(task?.link ?: "{}")
137+
val teamId = linkJson.optString("teams")
138+
if (teamId.isNotEmpty()) {
139+
val teamObject = realm.where(RealmMyTeam::class.java)
140+
.equalTo("_id", teamId)
141+
.findFirst()
142+
Triple(teamId, teamObject?.name, teamObject?.type)
143+
} else {
144+
null
145+
}
146+
}
147+
}
148+
if (teamDetails != null && activity is OnHomeItemClickListener) {
149+
val (teamId, teamName, teamType) = teamDetails
139150
val f = TeamDetailFragment.newInstance(
140151
teamId = teamId,
141-
teamName = teamObject?.name ?: "",
142-
teamType = teamObject?.type ?: "",
152+
teamName = teamName ?: "",
153+
teamType = teamType ?: "",
143154
isMyTeam = true,
144155
navigateToPage = TasksPage,
145156
)
146-
147157
(activity as OnHomeItemClickListener).openCallFragment(f)
148158
}
149159
}
150-
}
151-
"join_request" -> {
152-
val joinRequestId = notification.relatedId
153-
if (joinRequestId?.isNotEmpty() == true && activity is OnHomeItemClickListener) {
154-
val actualJoinRequestId = if (joinRequestId.startsWith("join_request_")) {
155-
joinRequestId.removePrefix("join_request_")
156-
} else {
157-
joinRequestId
160+
"join_request" -> {
161+
val teamId = withContext(Dispatchers.IO) {
162+
val joinRequestId = notification.relatedId
163+
if (joinRequestId?.isNotEmpty() == true) {
164+
val actualJoinRequestId = if (joinRequestId.startsWith("join_request_")) {
165+
joinRequestId.removePrefix("join_request_")
166+
} else {
167+
joinRequestId
168+
}
169+
databaseService.withRealm { realm ->
170+
realm.where(RealmMyTeam::class.java)
171+
.equalTo("_id", actualJoinRequestId)
172+
.equalTo("docType", "request")
173+
.findFirst()?.teamId
174+
}
175+
} else {
176+
null
177+
}
158178
}
159-
databaseService.withRealm { realm ->
160-
val joinRequest = realm.where(RealmMyTeam::class.java)
161-
.equalTo("_id", actualJoinRequestId)
162-
.equalTo("docType", "request")
163-
.findFirst()
164179

165-
val teamId = joinRequest?.teamId
166-
if (teamId?.isNotEmpty() == true) {
167-
val f = TeamDetailFragment()
168-
val b = Bundle()
169-
b.putString("id", teamId)
170-
b.putBoolean("isMyTeam", true)
171-
b.putString("navigateToPage", JoinRequestsPage.id)
172-
f.arguments = b
173-
(activity as OnHomeItemClickListener).openCallFragment(f)
174-
}
180+
if (teamId?.isNotEmpty() == true && activity is OnHomeItemClickListener) {
181+
val f = TeamDetailFragment()
182+
val b = Bundle()
183+
b.putString("id", teamId)
184+
b.putBoolean("isMyTeam", true)
185+
b.putString("navigateToPage", JoinRequestsPage.id)
186+
f.arguments = b
187+
(activity as OnHomeItemClickListener).openCallFragment(f)
175188
}
176189
}
190+
"resource" -> {
191+
dashboardActivity.openMyFragment(ResourcesFragment())
192+
}
177193
}
178-
"resource" -> {
179-
dashboardActivity.openMyFragment(ResourcesFragment())
180-
}
181-
}
182194

183-
if (!notification.isRead) {
184-
markAsReadById(notification.id)
195+
if (!notification.isRead) {
196+
markAsReadById(notification.id)
197+
}
185198
}
186199
}
187200

0 commit comments

Comments
 (0)