Skip to content

Commit

Permalink
run on a background thread
Browse files Browse the repository at this point in the history
  • Loading branch information
Okuro3499 committed Oct 15, 2024
1 parent 8799685 commit 5ed05a2
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 38 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package org.ole.planet.myplanet.service
import android.content.Context
import android.content.SharedPreferences
import io.realm.Realm
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import org.ole.planet.myplanet.datamanager.DatabaseService
import org.ole.planet.myplanet.model.RealmMyLibrary
import org.ole.planet.myplanet.model.RealmOfflineActivity
Expand All @@ -15,6 +17,7 @@ import java.text.SimpleDateFormat
import java.util.Date
import java.util.Locale
import java.util.UUID

class UserProfileDbHandler(context: Context) {
private val settings: SharedPreferences
var mRealm: Realm
Expand Down Expand Up @@ -56,13 +59,18 @@ class UserProfileDbHandler(context: Context) {
mRealm.commitTransaction()
}

fun onLogout() {
if (!mRealm.isInTransaction) {
mRealm.beginTransaction()
suspend fun onLogout() {
withContext(Dispatchers.IO) {
val realm = realmService.realmInstance
try {
realm.executeTransaction {
val offlineActivities = getRecentLogin(it)
offlineActivities?.logoutTime = Date().time
}
} finally {
realm.close()
}
}
val offlineActivities = getRecentLogin(mRealm) ?: return
offlineActivities.logoutTime = Date().time
mRealm.commitTransaction()
}

fun onDestroy() {
Expand Down Expand Up @@ -93,6 +101,7 @@ class UserProfileDbHandler(context: Context) {
0
}
}

fun getLastVisit(m: RealmUserModel): String {
val realm = Realm.getDefaultInstance()
realm.beginTransaction()
Expand All @@ -107,6 +116,7 @@ class UserProfileDbHandler(context: Context) {
"No logout record found"
}
}

fun setResourceOpenCount(item: RealmMyLibrary) {
setResourceOpenCount(item, KEY_RESOURCE_OPEN)
}
Expand All @@ -126,9 +136,7 @@ class UserProfileDbHandler(context: Context) {
}

private fun createResourceUser(model: RealmUserModel?): RealmResourceActivity {
val offlineActivities = mRealm.createObject(
RealmResourceActivity::class.java, UUID.randomUUID().toString()
)
val offlineActivities = mRealm.createObject(RealmResourceActivity::class.java, "${UUID.randomUUID()}")
offlineActivities.user = model?.name
offlineActivities.parentCode = model?.parentCode
offlineActivities.createdOn = model?.planetCode
Expand All @@ -141,19 +149,20 @@ class UserProfileDbHandler(context: Context) {
.equalTo("type", KEY_RESOURCE_OPEN).count()
return if (count == 0L) "" else "Resource opened $count times."
}

val maxOpenedResource: String
get() {
val result = mRealm.where(
RealmResourceActivity::class.java
).equalTo("user", fullName).equalTo("type", KEY_RESOURCE_OPEN).findAll().where()
.distinct("resourceId").findAll()
val result = mRealm.where(RealmResourceActivity::class.java)
.equalTo("user", fullName).equalTo("type", KEY_RESOURCE_OPEN)
.findAll().where().distinct("resourceId").findAll()
var maxCount = 0L
var maxOpenedResource = ""
for (realmResourceActivities in result) {
val count =
mRealm.where(RealmResourceActivity::class.java).equalTo("user", fullName)
.equalTo("type", KEY_RESOURCE_OPEN)
.equalTo("resourceId", realmResourceActivities.resourceId).count()
val count = mRealm.where(RealmResourceActivity::class.java)
.equalTo("user", fullName)
.equalTo("type", KEY_RESOURCE_OPEN)
.equalTo("resourceId", realmResourceActivities.resourceId).count()

if (count > maxCount) {
maxCount = count
maxOpenedResource = "${realmResourceActivities.title}"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import com.google.android.material.bottomnavigation.BottomNavigationView
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.ole.planet.myplanet.R
import org.ole.planet.myplanet.callback.OnRatingChangeListener
import org.ole.planet.myplanet.service.UserProfileDbHandler
Expand Down Expand Up @@ -89,7 +92,7 @@ abstract class DashboardElementActivity : SyncActivity(), FragmentManager.OnBack
}

override fun onPrepareOptionsMenu(menu: Menu): Boolean {
goOnline.setVisible(showBetaFeature(Constants.KEY_SYNC, this))
goOnline.isVisible = showBetaFeature(Constants.KEY_SYNC, this)
return super.onPrepareOptionsMenu(menu)
}

Expand Down Expand Up @@ -130,7 +133,7 @@ abstract class DashboardElementActivity : SyncActivity(), FragmentManager.OnBack
DrawableCompat.setTintMode(resIcon.mutate(), PorterDuff.Mode.SRC_ATOP)
DrawableCompat.setTint(resIcon, ContextCompat.getColor(this, R.color.green))
}
goOnline.setIcon(resIcon)
goOnline.icon = resIcon
Toast.makeText(this, getString(R.string.wifi_is_turned_off_saving_battery_power), Toast.LENGTH_LONG).show()
} else {
wifi.setWifiEnabled(true)
Expand All @@ -140,7 +143,7 @@ abstract class DashboardElementActivity : SyncActivity(), FragmentManager.OnBack
DrawableCompat.setTintMode(resIcon.mutate(), PorterDuff.Mode.SRC_ATOP)
DrawableCompat.setTint(resIcon, ContextCompat.getColor(this, R.color.accent))
}
goOnline.setIcon(resIcon)
goOnline.icon = resIcon
}
}

Expand All @@ -160,14 +163,16 @@ abstract class DashboardElementActivity : SyncActivity(), FragmentManager.OnBack
}

fun logout() {
profileDbHandler.onLogout()
settings.edit().putBoolean(Constants.KEY_LOGIN, false).apply()
settings.edit().putBoolean(Constants.KEY_NOTIFICATION_SHOWN, false).apply()
val loginScreen = Intent(this, LoginActivity::class.java)
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(loginScreen)
doubleBackToExitPressedOnce = true
finish()
CoroutineScope(Dispatchers.Main).launch {
profileDbHandler.onLogout()
settings.edit().putBoolean(Constants.KEY_LOGIN, false).apply()
settings.edit().putBoolean(Constants.KEY_NOTIFICATION_SHOWN, false).apply()
val loginScreen = Intent(this@DashboardElementActivity, LoginActivity::class.java)
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(loginScreen)
doubleBackToExitPressedOnce = true
finish()
}
}

override fun finish() {
Expand All @@ -176,9 +181,7 @@ abstract class DashboardElementActivity : SyncActivity(), FragmentManager.OnBack
} else {
doubleBackToExitPressedOnce = true
Toast.makeText(this, getString(R.string.press_back_again_to_exit), Toast.LENGTH_SHORT).show()
Handler(Looper.getMainLooper()).postDelayed({
doubleBackToExitPressedOnce = false
}, 2000)
Handler(Looper.getMainLooper()).postDelayed({ doubleBackToExitPressedOnce = false }, 2000)
}
}

Expand All @@ -192,15 +195,19 @@ abstract class DashboardElementActivity : SyncActivity(), FragmentManager.OnBack
val f = supportFragmentManager.findFragmentById(R.id.fragment_container)
val fragmentTag = f?.tag
if (f is CoursesFragment) {
if ("shelf" == fragmentTag) navigationView.menu.findItem(R.id.menu_mycourses)
.setChecked(true) else navigationView.menu.findItem(R.id.menu_courses)
.setChecked(true)
if ("shelf" == fragmentTag) {
navigationView.menu.findItem(R.id.menu_mycourses).isChecked = true
} else {
navigationView.menu.findItem(R.id.menu_courses).isChecked = true
}
} else if (f is ResourcesFragment) {
if ("shelf" == fragmentTag) navigationView.menu.findItem(R.id.menu_mylibrary)
.setChecked(true) else navigationView.menu.findItem(R.id.menu_library)
.setChecked(true)
if ("shelf" == fragmentTag) {
navigationView.menu.findItem(R.id.menu_mylibrary).isChecked = true
} else {
navigationView.menu.findItem(R.id.menu_library).isChecked = true
}
} else if (f is DashboardFragment) {
navigationView.menu.findItem(R.id.menu_home).setChecked(true)
navigationView.menu.findItem(R.id.menu_home).isChecked = true
}
}

Expand Down

0 comments on commit 5ed05a2

Please sign in to comment.