@@ -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