Skip to content

Commit e32acce

Browse files
authored
Merge branch 'master' into refactor-user-profile-db-handler-scope
2 parents aa755f8 + ce2dc10 commit e32acce

File tree

7 files changed

+128
-95
lines changed

7 files changed

+128
-95
lines changed

app/src/main/java/org/ole/planet/myplanet/service/AutoSyncWorker.kt

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import androidx.work.Worker
99
import androidx.work.WorkerParameters
1010
import dagger.hilt.android.EntryPointAccessors
1111
import java.util.Date
12+
import java.util.concurrent.ExecutorService
13+
import java.util.concurrent.Executors
1214
import org.ole.planet.myplanet.MainApplication
1315
import org.ole.planet.myplanet.callback.SuccessListener
1416
import org.ole.planet.myplanet.callback.SyncListener
@@ -26,11 +28,11 @@ class AutoSyncWorker(
2628
private val context: Context,
2729
workerParams: WorkerParameters
2830
) : Worker(context, workerParams), SyncListener, CheckVersionCallback, SuccessListener {
29-
3031
private lateinit var preferences: SharedPreferences
3132
private lateinit var syncManager: SyncManager
3233
private lateinit var uploadManager: UploadManager
3334
private lateinit var uploadToShelfService: UploadToShelfService
35+
private val backgroundExecutor: ExecutorService = Executors.newSingleThreadExecutor()
3436

3537
override fun doWork(): Result {
3638
preferences = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
@@ -78,22 +80,24 @@ class AutoSyncWorker(
7880
}
7981
if (!MainApplication.isSyncRunning) {
8082
MainApplication.isSyncRunning = true
81-
uploadManager.uploadExamResult(this)
82-
uploadManager.uploadFeedback(this)
83-
uploadManager.uploadAchievement()
84-
uploadManager.uploadResourceActivities("")
85-
uploadManager.uploadUserActivities(this)
86-
uploadManager.uploadCourseActivities()
87-
uploadManager.uploadSearchActivity()
88-
uploadManager.uploadRating()
89-
uploadManager.uploadResource(this)
90-
uploadManager.uploadNews()
91-
uploadManager.uploadTeams()
92-
uploadManager.uploadTeamTask()
93-
uploadManager.uploadMeetups()
94-
uploadManager.uploadCrashLog()
95-
uploadManager.uploadSubmissions()
96-
uploadManager.uploadActivities { MainApplication.isSyncRunning = false }
83+
backgroundExecutor.execute {
84+
uploadManager.uploadExamResult(this@AutoSyncWorker)
85+
uploadManager.uploadFeedback(this@AutoSyncWorker)
86+
uploadManager.uploadAchievement()
87+
uploadManager.uploadResourceActivities("")
88+
uploadManager.uploadUserActivities(this@AutoSyncWorker)
89+
uploadManager.uploadCourseActivities()
90+
uploadManager.uploadSearchActivity()
91+
uploadManager.uploadRating()
92+
uploadManager.uploadResource(this@AutoSyncWorker)
93+
uploadManager.uploadNews()
94+
uploadManager.uploadTeams()
95+
uploadManager.uploadTeamTask()
96+
uploadManager.uploadMeetups()
97+
uploadManager.uploadCrashLog()
98+
uploadManager.uploadSubmissions()
99+
uploadManager.uploadActivities { MainApplication.isSyncRunning = false }
100+
}
97101
}
98102
}
99103
}
@@ -103,6 +107,11 @@ class AutoSyncWorker(
103107
settings.edit { putLong("lastUsageUploaded", Date().time) }
104108
}
105109

110+
override fun onStopped() {
111+
super.onStopped()
112+
backgroundExecutor.shutdown()
113+
}
114+
106115
private fun isAppInForeground(context: Context): Boolean {
107116
val activityManager = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
108117
val runningProcesses = activityManager.runningAppProcesses ?: return false

app/src/main/java/org/ole/planet/myplanet/service/UploadManager.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -187,9 +187,11 @@ class UploadManager @Inject constructor(
187187
submissionsToUpload.processInBatches { data ->
188188
try {
189189
val response: JsonObject? = if (TextUtils.isEmpty(data._id)) {
190-
apiInterface?.postDoc(UrlUtils.header, "application/json", "${UrlUtils.getUrl()}/submissions", data.serialized)?.execute()?.body()
190+
apiInterface.postDoc(UrlUtils.header, "application/json", "${UrlUtils.getUrl()}/submissions", data.serialized)
191+
.execute().body()
191192
} else {
192-
apiInterface?.putDoc(UrlUtils.header, "application/json", "${UrlUtils.getUrl()}/submissions/${data._id}", data.serialized)?.execute()?.body()
193+
apiInterface.putDoc(UrlUtils.header, "application/json", "${UrlUtils.getUrl()}/submissions/${data._id}", data.serialized)
194+
.execute().body()
193195
}
194196

195197
if (response != null && data.id != null) {

app/src/main/java/org/ole/planet/myplanet/service/UserProfileDbHandler.kt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ class UserProfileDbHandler @Inject constructor(
7474
val parentCode = model?.parentCode
7575
val planetCode = model?.planetCode
7676

77-
realmService.withRealmAsync { realm ->
77+
realmService.executeTransactionAsync { realm ->
7878
val offlineActivities = realm.createObject(RealmOfflineActivity::class.java, UUID.randomUUID().toString())
7979
offlineActivities.userId = userId
8080
offlineActivities.userName = userName
@@ -100,7 +100,7 @@ class UserProfileDbHandler @Inject constructor(
100100
fun logoutAsync() {
101101
applicationScope.launch {
102102
try {
103-
realmService.withRealmAsync { realm ->
103+
realmService.executeTransactionAsync { realm ->
104104
RealmOfflineActivity.getRecentLogin(realm)
105105
?.logoutTime = Date().time
106106
}
@@ -149,6 +149,9 @@ class UserProfileDbHandler @Inject constructor(
149149
}
150150

151151
fun setResourceOpenCount(item: RealmMyLibrary, type: String?) {
152+
val itemTitle = item.title
153+
val itemResourceId = item.resourceId
154+
152155
applicationScope.launch {
153156
try {
154157
val model = getUserModelCopy()
@@ -159,10 +162,8 @@ class UserProfileDbHandler @Inject constructor(
159162
val userName = model?.name
160163
val parentCode = model?.parentCode
161164
val planetCode = model?.planetCode
162-
val itemTitle = item.title
163-
val itemResourceId = item.resourceId
164165

165-
realmService.withRealmAsync { realm ->
166+
realmService.executeTransactionAsync { realm ->
166167
val offlineActivities = realm.createObject(RealmResourceActivity::class.java, "${UUID.randomUUID()}")
167168
offlineActivities.user = userName
168169
offlineActivities.parentCode = parentCode

app/src/main/java/org/ole/planet/myplanet/ui/sync/LoginActivity.kt

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,9 @@ class LoginActivity : SyncActivity(), TeamListAdapter.OnItemClickListener {
173173
binding.inputPassword.error = getString(R.string.err_msg_password)
174174
} else {
175175
val enterUserName = binding.inputName.text.toString().trimEnd()
176-
val user = mRealm.where(RealmUserModel::class.java).equalTo("name", enterUserName).findFirst()
176+
val user = databaseService.withRealm { realm ->
177+
realm.where(RealmUserModel::class.java).equalTo("name", enterUserName).findFirst()?.let { realm.copyFromRealm(it) }
178+
}
177179
if (user == null || !user.isArchived) {
178180
submitForm(enterUserName, binding.inputPassword.text.toString())
179181
} else {
@@ -287,8 +289,10 @@ class LoginActivity : SyncActivity(), TeamListAdapter.OnItemClickListener {
287289
}
288290

289291
fun updateTeamDropdown() {
290-
val teams: List<RealmMyTeam>? = mRealm.where(RealmMyTeam::class.java)
291-
?.isEmpty("teamId")?.equalTo("status", "active")?.findAll()
292+
val teams: List<RealmMyTeam>? = databaseService.withRealm { realm ->
293+
realm.where(RealmMyTeam::class.java)
294+
.isEmpty("teamId").equalTo("status", "active").findAll()?.let { realm.copyFromRealm(it) }
295+
}
292296

293297
if (!teams.isNullOrEmpty()) {
294298
binding.team.visibility = View.VISIBLE
@@ -407,7 +411,9 @@ class LoginActivity : SyncActivity(), TeamListAdapter.OnItemClickListener {
407411
fun getTeamMembers() {
408412
selectedTeamId = prefData.getSelectedTeamId().toString()
409413
if (selectedTeamId?.isNotEmpty() == true) {
410-
users = RealmMyTeam.getUsers(selectedTeamId, mRealm, "membership")
414+
users = databaseService.withRealm { realm ->
415+
RealmMyTeam.getUsers(selectedTeamId, realm, "membership").map { realm.copyFromRealm(it) }.toMutableList()
416+
}
411417
val userList = (users as? MutableList<RealmUserModel>)?.map {
412418
User(it.name ?: "", it.name ?: "", "", it.userImage ?: "", "team")
413419
} ?: emptyList()
@@ -444,7 +450,9 @@ class LoginActivity : SyncActivity(), TeamListAdapter.OnItemClickListener {
444450
binding.inputName.setText(user.name)
445451
} else {
446452
if (user.source == "guest"){
447-
val model = RealmUserModel.createGuestUser(user.name, mRealm, settings)?.let { mRealm.copyFromRealm(it) }
453+
val model = databaseService.withRealm { realm ->
454+
RealmUserModel.createGuestUser(user.name, realm, settings)?.let { realm.copyFromRealm(it) }
455+
}
448456
if (model == null) {
449457
toast(this, getString(R.string.unable_to_login))
450458
} else {
@@ -469,7 +477,9 @@ class LoginActivity : SyncActivity(), TeamListAdapter.OnItemClickListener {
469477
builder.setNegativeButton("cancel") { dialog: DialogInterface, _: Int -> dialog.dismiss() }
470478
builder.setPositiveButton("continue") { dialog: DialogInterface, _: Int ->
471479
dialog.dismiss()
472-
val model = RealmUserModel.createGuestUser(username, mRealm, settings)?.let { mRealm.copyFromRealm(it) }
480+
val model = databaseService.withRealm { realm ->
481+
RealmUserModel.createGuestUser(username, realm, settings)?.let { realm.copyFromRealm(it) }
482+
}
473483
if (model == null) {
474484
toast(this, getString(R.string.unable_to_login))
475485
} else {

app/src/main/java/org/ole/planet/myplanet/ui/sync/ProcessUserDataActivity.kt

Lines changed: 61 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@ abstract class ProcessUserDataActivity : PermissionActivity(), SuccessListener {
6767

6868
@Inject
6969
lateinit var userRepository: UserRepository
70-
7170
lateinit var settings: SharedPreferences
7271
val customProgressDialog: DialogUtils.CustomProgressDialog by lazy {
7372
DialogUtils.CustomProgressDialog(this)
@@ -198,78 +197,84 @@ abstract class ProcessUserDataActivity : PermissionActivity(), SuccessListener {
198197
})
199198
return
200199
} else if (source == "login") {
201-
uploadManager.uploadUserActivities(this@ProcessUserDataActivity)
200+
lifecycleScope.launch(Dispatchers.IO) {
201+
uploadManager.uploadUserActivities(this@ProcessUserDataActivity)
202+
}
202203
return
203204
}
204205
customProgressDialog.setText(this.getString(R.string.uploading_data_to_server_please_wait))
205206
customProgressDialog.show()
206207

207-
uploadManager.uploadAchievement()
208-
uploadManager.uploadNews()
209-
uploadManager.uploadResourceActivities("")
210-
uploadManager.uploadCourseActivities()
211-
uploadManager.uploadSearchActivity()
212-
uploadManager.uploadTeams()
213-
uploadManager.uploadRating()
214-
uploadManager.uploadTeamTask()
215-
uploadManager.uploadMeetups()
216-
uploadManager.uploadSubmissions()
217-
uploadManager.uploadCrashLog()
218-
219-
val asyncOperationsCounter = AtomicInteger(0)
220-
val totalAsyncOperations = 6
221-
222-
fun checkAllOperationsComplete() {
223-
if (asyncOperationsCounter.incrementAndGet() == totalAsyncOperations) {
224-
runOnUiThread {
225-
if (!isFinishing && !isDestroyed) {
226-
customProgressDialog.dismiss()
227-
Toast.makeText(this@ProcessUserDataActivity, "upload complete", Toast.LENGTH_SHORT).show()
208+
lifecycleScope.launch {
209+
val asyncOperationsCounter = AtomicInteger(0)
210+
val totalAsyncOperations = 6
211+
212+
fun checkAllOperationsComplete() {
213+
if (asyncOperationsCounter.incrementAndGet() == totalAsyncOperations) {
214+
runOnUiThread {
215+
if (!isFinishing && !isDestroyed) {
216+
customProgressDialog.dismiss()
217+
Toast.makeText(this@ProcessUserDataActivity, "upload complete", Toast.LENGTH_SHORT).show()
218+
}
228219
}
229220
}
230221
}
231-
}
232222

233-
uploadToShelfService.uploadUserData {
234-
uploadToShelfService.uploadHealth()
235-
checkAllOperationsComplete()
236-
}
237-
238-
uploadManager.uploadUserActivities(object : SuccessListener {
239-
override fun onSuccess(success: String?) {
223+
uploadManager.uploadAchievement()
224+
uploadManager.uploadNews()
225+
uploadManager.uploadResourceActivities("")
226+
uploadManager.uploadCourseActivities()
227+
uploadManager.uploadSearchActivity()
228+
uploadManager.uploadTeams()
229+
uploadManager.uploadRating()
230+
uploadManager.uploadTeamTask()
231+
uploadManager.uploadMeetups()
232+
uploadManager.uploadSubmissions()
233+
uploadManager.uploadCrashLog()
234+
235+
uploadToShelfService.uploadUserData {
236+
uploadToShelfService.uploadHealth()
240237
checkAllOperationsComplete()
241238
}
242-
})
243239

244-
uploadManager.uploadExamResult(object : SuccessListener {
245-
override fun onSuccess(success: String?) {
246-
checkAllOperationsComplete()
247-
}
248-
})
240+
uploadManager.uploadUserActivities(object : SuccessListener {
241+
override fun onSuccess(success: String?) {
242+
checkAllOperationsComplete()
243+
}
244+
})
249245

250-
uploadManager.uploadFeedback(object : SuccessListener {
251-
override fun onSuccess(success: String?) {
252-
checkAllOperationsComplete()
246+
launch(Dispatchers.IO) {
247+
uploadManager.uploadExamResult(object : SuccessListener {
248+
override fun onSuccess(success: String?) {
249+
checkAllOperationsComplete()
250+
}
251+
})
253252
}
254-
})
255253

256-
uploadManager.uploadResource(object : SuccessListener {
257-
override fun onSuccess(success: String?) {
258-
checkAllOperationsComplete()
259-
}
260-
})
254+
uploadManager.uploadFeedback(object : SuccessListener {
255+
override fun onSuccess(success: String?) {
256+
checkAllOperationsComplete()
257+
}
258+
})
261259

262-
uploadManager.uploadSubmitPhotos(object : SuccessListener {
263-
override fun onSuccess(success: String?) {
264-
checkAllOperationsComplete()
265-
}
266-
})
260+
uploadManager.uploadResource(object : SuccessListener {
261+
override fun onSuccess(success: String?) {
262+
checkAllOperationsComplete()
263+
}
264+
})
267265

268-
uploadManager.uploadActivities(object : SuccessListener {
269-
override fun onSuccess(success: String?) {
270-
checkAllOperationsComplete()
271-
}
272-
})
266+
uploadManager.uploadSubmitPhotos(object : SuccessListener {
267+
override fun onSuccess(success: String?) {
268+
checkAllOperationsComplete()
269+
}
270+
})
271+
272+
uploadManager.uploadActivities(object : SuccessListener {
273+
override fun onSuccess(success: String?) {
274+
checkAllOperationsComplete()
275+
}
276+
})
277+
}
273278
}
274279

275280
protected fun hideKeyboard(view: View?) {

app/src/main/java/org/ole/planet/myplanet/ui/sync/SyncActivity.kt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,8 @@ abstract class SyncActivity : ProcessUserDataActivity(), SyncListener, CheckVers
357357
if (settings != null) {
358358
this.settings = settings
359359
}
360-
if (mRealm.isEmpty) {
360+
val isEmpty = databaseService.withRealm { realm -> realm.isEmpty }
361+
if (isEmpty) {
361362
alertDialogOkay(getString(R.string.server_not_configured_properly_connect_this_device_with_planet_server))
362363
false
363364
} else {
@@ -371,7 +372,9 @@ abstract class SyncActivity : ProcessUserDataActivity(), SyncListener, CheckVers
371372

372373
private fun checkName(username: String?, password: String?, isManagerMode: Boolean): Boolean {
373374
try {
374-
val user = mRealm.where(RealmUserModel::class.java).equalTo("name", username).findFirst()
375+
val user = databaseService.withRealm { realm ->
376+
realm.where(RealmUserModel::class.java).equalTo("name", username).findFirst()?.let { realm.copyFromRealm(it) }
377+
}
375378
user?.let {
376379
if (it._id?.isEmpty() == true) {
377380
if (username == it.name && password == it.password) {
@@ -765,7 +768,9 @@ abstract class SyncActivity : ProcessUserDataActivity(), SyncListener, CheckVers
765768
continueSyncProcess()
766769
}
767770
} else {
768-
mRealm.executeTransactionAsync { realm: Realm -> realm.deleteAll() }
771+
lifecycleScope.launch(Dispatchers.IO) {
772+
databaseService.executeTransactionAsync { realm -> realm.deleteAll() }
773+
}
769774
}
770775
builder.setCancelable(cancelable)
771776
builder.show()

0 commit comments

Comments
 (0)