Skip to content

Commit

Permalink
Merge branch 'master' into 4640-takecourse-anr
Browse files Browse the repository at this point in the history
  • Loading branch information
dogi authored Oct 15, 2024
2 parents c098310 + b45cea6 commit 832dbaf
Show file tree
Hide file tree
Showing 15 changed files with 221 additions and 122 deletions.
2 changes: 1 addition & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,7 @@ dependencies {
implementation 'de.hdodenhof:circleimageview:3.1.0'
implementation 'de.rtner:PBKDF2:1.1.4'
implementation 'org.osmdroid:osmdroid-android:6.1.20'
implementation 'org.jetbrains:annotations:26.0.0'
implementation 'org.jetbrains:annotations:26.0.1'
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3"
implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.29'
Expand Down
90 changes: 55 additions & 35 deletions app/src/main/java/org/ole/planet/myplanet/MainApplication.kt
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ import java.net.URL
import java.util.Date
import java.util.UUID
import java.util.concurrent.TimeUnit
import kotlinx.coroutines.runBlocking

class MainApplication : Application(), Application.ActivityLifecycleCallbacks {
companion object {
Expand Down Expand Up @@ -76,23 +77,30 @@ class MainApplication : Application(), Application.ActivityLifecycleCallbacks {
lateinit var defaultPref: SharedPreferences

fun createLog(type: String) {
service = DatabaseService(context)
val mRealm = service.realmInstance
if (!mRealm.isInTransaction) {
mRealm.beginTransaction()
}
val log = mRealm.createObject(RealmApkLog::class.java, "${UUID.randomUUID()}")
val model = UserProfileDbHandler(context).userModel
if (model != null) {
log.parentCode = model.parentCode
log.createdOn = model.planetCode
log.userId = model.id
runBlocking {
withContext(Dispatchers.IO) {
val realm = Realm.getDefaultInstance()
try {
realm.executeTransaction { r ->
val log = r.createObject(RealmApkLog::class.java, "${UUID.randomUUID()}")
val model = UserProfileDbHandler(context).userModel
if (model != null) {
log.parentCode = model.parentCode
log.createdOn = model.planetCode
log.userId = model.id
}
log.time = "${Date().time}"
log.page = ""
log.version = getVersionName(context)
log.type = type
}
} catch (e: Exception) {
e.printStackTrace()
} finally {
realm.close()
}
}
}
log.time = "${Date().time}"
log.page = ""
log.version = getVersionName(context)
log.type = type
mRealm.commitTransaction()
}

private fun applyThemeMode(themeMode: String?) {
Expand Down Expand Up @@ -129,6 +137,7 @@ class MainApplication : Application(), Application.ActivityLifecycleCallbacks {
responseCode in 200..299

} catch (e: Exception) {
e.printStackTrace()
false
}
}
Expand Down Expand Up @@ -266,38 +275,49 @@ class MainApplication : Application(), Application.ActivityLifecycleCallbacks {
if (isFirstLaunch) {
isFirstLaunch = false
} else {
val fromForeground = "foreground"
createLog(fromForeground)
applicationScope.launch {
createLog("foreground")
}
}
}

private fun onAppBackgrounded() {}

private fun onAppStarted() {
val newStart = "new login"
createLog(newStart)
applicationScope.launch {
createLog("new login")
}
}

private fun onAppClosed() {}

private fun handleUncaughtException(e: Throwable) {
e.printStackTrace()
if (!mRealm.isInTransaction) {
mRealm.beginTransaction()
}
val log = mRealm.createObject(RealmApkLog::class.java, "${UUID.randomUUID()}")
val model = UserProfileDbHandler(this).userModel
if (model != null) {
log.parentCode = model.parentCode
log.createdOn = model.planetCode
log.userId = model.id
runBlocking {
launch(Dispatchers.IO) {
try {
val realm = Realm.getDefaultInstance()
realm.executeTransaction { r ->
val log = r.createObject(RealmApkLog::class.java, "${UUID.randomUUID()}")
val model = UserProfileDbHandler(this@MainApplication).userModel
if (model != null) {
log.parentCode = model.parentCode
log.createdOn = model.planetCode
log.userId = model.id
}
log.time = "${Date().time}"
log.page = ""
log.version = getVersionName(this@MainApplication)
log.type = RealmApkLog.ERROR_TYPE_CRASH
log.setError(e)
}
realm.close()
} catch (ex: Exception) {
ex.printStackTrace()
}
}
}
log.time = "${Date().time}"
log.page = ""
log.version = getVersionName(this)
log.type = RealmApkLog.ERROR_TYPE_CRASH
log.setError(e)
mRealm.commitTransaction()

val homeIntent = Intent(Intent.ACTION_MAIN)
homeIntent.addCategory(Intent.CATEGORY_HOME)
homeIntent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import io.realm.Realm
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import okhttp3.ResponseBody
import org.ole.planet.myplanet.model.Download
import org.ole.planet.myplanet.model.RealmMyLibrary
Expand Down Expand Up @@ -207,14 +208,16 @@ class MyDownloadService : Service() {
private fun changeOfflineStatus() {
CoroutineScope(Dispatchers.IO).launch {
val currentFileName = getFileNameFromUrl(urls[currentIndex])
mRealm.executeTransaction { realm ->
realm.where(RealmMyLibrary::class.java)
.equalTo("resourceLocalAddress", currentFileName)
.findAll()
?.forEach {
it.resourceOffline = true
it.downloadedRev = it._rev
}
withContext(Dispatchers.Main) { // Switch to the main thread
mRealm.executeTransaction { realm ->
realm.where(RealmMyLibrary::class.java)
.equalTo("resourceLocalAddress", currentFileName)
.findAll()
?.forEach {
it.resourceOffline = true
it.downloadedRev = it._rev
}
}
}
}
}
Expand Down
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 @@ -77,6 +77,7 @@ import org.ole.planet.myplanet.utilities.Utilities
import org.ole.planet.myplanet.utilities.Utilities.toast
import java.util.Date
import java.util.UUID
import kotlin.math.ceil

class DashboardActivity : DashboardElementActivity(), OnHomeItemClickListener, NavigationBarView.OnItemSelectedListener, NotificationListener {
private lateinit var activityDashboardBinding: ActivityDashboardBinding
Expand Down Expand Up @@ -526,7 +527,8 @@ class DashboardActivity : DashboardElementActivity(), OnHomeItemClickListener, N
}

private fun createDrawer() {
val dimenHolder = DimenHolder.fromDp(160)
val statusBarHeight = ceil(25 * context.resources.displayMetrics.density).toInt()
val dimenHolder = DimenHolder.fromDp(160 + statusBarHeight)
result = headerResult?.let {
DrawerBuilder().withActivity(this).withFullscreen(true)
.withSliderBackgroundColor(ContextCompat.getColor(this, R.color.colorPrimary))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ import org.ole.planet.myplanet.utilities.Utilities
import org.ole.planet.myplanet.utilities.Utilities.toast
import java.util.Date
import java.util.UUID
import kotlin.math.ceil

class DashboardActivity : DashboardElementActivity(), OnHomeItemClickListener, NavigationBarView.OnItemSelectedListener, NotificationListener {
private lateinit var activityDashboardBinding: ActivityDashboardBinding
Expand Down Expand Up @@ -526,7 +527,8 @@ class DashboardActivity : DashboardElementActivity(), OnHomeItemClickListener, N
}

private fun createDrawer() {
val dimenHolder = DimenHolder.fromDp(160)
val statusBarHeight = ceil(25 * context.resources.displayMetrics.density).toInt()
val dimenHolder = DimenHolder.fromDp(160 + statusBarHeight)
result = headerResult?.let {
DrawerBuilder().withActivity(this).withFullscreen(true)
.withSliderBackgroundColor(ContextCompat.getColor(this, R.color.colorPrimary))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import org.ole.planet.myplanet.model.FeedbackReply
import org.ole.planet.myplanet.model.RealmFeedback
import org.ole.planet.myplanet.ui.dashboard.DashboardActivity
import org.ole.planet.myplanet.ui.feedback.FeedbackDetailActivity.RvFeedbackAdapter.ReplyViewHolder
import org.ole.planet.myplanet.utilities.LocaleHelper
import org.ole.planet.myplanet.utilities.TimeUtils.getFormatedDateWithTime
import java.util.Date

Expand All @@ -33,6 +34,10 @@ class FeedbackDetailActivity : AppCompatActivity() {
lateinit var realm: Realm
private lateinit var rowFeedbackReplyBinding: RowFeedbackReplyBinding

override fun attachBaseContext(base: Context) {
super.attachBaseContext(LocaleHelper.onAttach(base))
}

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
activityFeedbackDetailBinding = ActivityFeedbackDetailBinding.inflate(layoutInflater)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@ import android.os.Bundle
import android.text.TextUtils
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import android.widget.Spinner
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import com.google.gson.Gson
import io.realm.Realm
Expand All @@ -19,6 +23,7 @@ import org.ole.planet.myplanet.utilities.AndroidDecrypter.Companion.encrypt
import org.ole.planet.myplanet.utilities.AndroidDecrypter.Companion.generateKey
import org.ole.planet.myplanet.utilities.Utilities


class AddMyHealthActivity : AppCompatActivity() {
private lateinit var activityAddMyHealthBinding: ActivityAddMyHealthBinding
lateinit var realm: Realm
Expand Down Expand Up @@ -47,6 +52,24 @@ class AddMyHealthActivity : AppCompatActivity() {
createMyHealth()
Utilities.toast(this@AddMyHealthActivity, getString(R.string.my_health_saved_successfully))
}
val spinner: Spinner = findViewById(R.id.spn_contact_type)

val adapter = object : ArrayAdapter<String>(
this, R.layout.spinner_item, resources.getStringArray(R.array.contact_type)
) {
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
val view = super.getView(position, convertView, parent) as TextView
return view
}

override fun getDropDownView(position: Int, convertView: View?, parent: ViewGroup): View {
val view = super.getDropDownView(position, convertView, parent) as TextView
return view
}
}

spinner.adapter = adapter

initViews()
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,12 +85,11 @@ class AdapterResource(private val context: Context, private var libraryList: Lis
displayTagCloud(holder.rowLibraryBinding.flexboxDrawable, position)
holder.itemView.setOnClickListener { openLibrary(libraryList[position]) }
userModel = UserProfileDbHandler(context).userModel
holder.rowLibraryBinding.ivDownloaded.setImageResource(
if (libraryList[position]?.isResourceOffline() == true) {
R.drawable.ic_eye
} else {
R.drawable.ic_download
})
if (libraryList[position]?.isResourceOffline() == true) {
holder.rowLibraryBinding.ivDownloaded.visibility = View.INVISIBLE
} else {
holder.rowLibraryBinding.ivDownloaded.visibility = View.VISIBLE
}
holder.rowLibraryBinding.ivDownloaded.contentDescription =
if (libraryList[position]?.isResourceOffline() == true) {
context.getString(R.string.view)
Expand Down
Loading

0 comments on commit 832dbaf

Please sign in to comment.