Skip to content

Commit

Permalink
Merge branch 'master' into 4596-dashboard-logo-intersects-with-notifi…
Browse files Browse the repository at this point in the history
…cation-bar
  • Loading branch information
dogi authored Oct 15, 2024
2 parents 27c43f3 + 42c04db commit 447d797
Show file tree
Hide file tree
Showing 12 changed files with 170 additions and 107 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
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 @@ -8,7 +8,6 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import io.realm.Case
import io.realm.Realm
import org.ole.planet.myplanet.MainApplication
import org.ole.planet.myplanet.R
Expand Down Expand Up @@ -127,40 +126,34 @@ class CourseStepFragment : BaseContainerFragment(), ImageCaptureCallback {
fragmentCourseStepBinding.btnTakeSurvey.visibility = View.GONE
if (stepExams.isNotEmpty()) {
val firstStepId = stepExams[0].id
val questions = cRealm.where(RealmExamQuestion::class.java).equalTo("examId", firstStepId).findAll()
val submissionsCount = step.courseId?.let {
cRealm.where(RealmSubmission::class.java).equalTo("userId",user?.id).contains("parentId", it)
.notEqualTo("status", "pending", Case.INSENSITIVE).count()
}
if (questions != null && questions.size > 0) {
val examId=questions[0]?.examId

val isSubmitted = step.courseId?.let { courseId ->
val parentId = "$examId@$courseId"
cRealm.where(RealmSubmission::class.java)
.equalTo("userId",user?.id)
.equalTo("parentId", parentId)
.equalTo("type", "exam")
.findFirst() != null
} ?: false
fragmentCourseStepBinding.btnTakeTest.text = if (isSubmitted) { getString(R.string.retake_test, stepExams.size) } else { getString(R.string.take_test, stepExams.size) }
fragmentCourseStepBinding.btnTakeTest.visibility = View.VISIBLE
}
val isTestPersent = existsSubmission(firstStepId, "exam")
fragmentCourseStepBinding.btnTakeTest.text = if (isTestPersent) { getString(R.string.retake_test, stepExams.size) } else { getString(R.string.take_test, stepExams.size) }
fragmentCourseStepBinding.btnTakeTest.visibility = View.VISIBLE
}
if (stepSurvey.isNotEmpty()) {
val firstStepId = stepSurvey[0].id
val questions = cRealm.where(RealmExamQuestion::class.java).equalTo("examId", firstStepId).findAll()
val submissionsCount = step.courseId?.let {
cRealm.where(RealmSubmission::class.java).contains("parentId", it)
.notEqualTo("status", "pending", Case.INSENSITIVE).count()
}
if (questions != null && questions.size > 0) {
if (submissionsCount != null) {
fragmentCourseStepBinding.btnTakeSurvey.text = if (submissionsCount > 0) { "redo survey" } else { "record survey" }
}
fragmentCourseStepBinding.btnTakeSurvey.visibility = View.VISIBLE
val isSurveyPresent = existsSubmission(firstStepId, "survey")
fragmentCourseStepBinding.btnTakeSurvey.text = if (isSurveyPresent) { "redo survey" } else { "record survey" }
fragmentCourseStepBinding.btnTakeSurvey.visibility = View.VISIBLE
}
}

private fun existsSubmission(firstStepId:String? , submissionType: String): Boolean{
val questions = cRealm.where(RealmExamQuestion::class.java).equalTo("examId", firstStepId).findAll()
var isPresent=false
if (questions != null && questions.size > 0) {
val examId=questions[0]?.examId
val isSubmitted = step.courseId?.let { courseId ->
val parentId = "$examId@$courseId"
cRealm.where(RealmSubmission::class.java)
.equalTo("userId",user?.id)
.equalTo("parentId", parentId)
.equalTo("type", submissionType)
.findFirst() != null
} ?: false
isPresent= isSubmitted
}
return isPresent
}

override fun setMenuVisibility(visible: Boolean) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,8 @@ class NotificationsFragment : Fragment() {

override fun onDestroy() {
super.onDestroy()
mRealm.close()
if (::mRealm.isInitialized) {
mRealm.close()
}
}
}
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
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
Loading

0 comments on commit 447d797

Please sign in to comment.