From c01f5fa232c0b4acfe709fd7f13105bfdeff1859 Mon Sep 17 00:00:00 2001 From: Gideon Okuro Date: Wed, 6 Nov 2024 23:38:28 +0300 Subject: [PATCH] all: san pablo november challenge (fixes #4752) (#4684) Co-authored-by: dogi --- .gitignore | 3 - app/build.gradle | 32 ++-- .../assets/images/november_challenge.jpeg | Bin 0 -> 180932 bytes .../myplanet/base/BaseContainerFragment.kt | 56 +++++- .../base/BaseContainerFragment.kt.lite | 56 +++++- .../model/RealmUserChallengeActions.kt | 29 ++++ .../myplanet/service/UserProfileDbHandler.kt | 68 ++++---- .../myplanet/ui/chat/ChatDetailFragment.kt | 3 + .../ui/chat/ChatHistoryListAdapter.kt | 6 +- .../myplanet/ui/courses/AdapterMyProgress.kt | 6 +- .../myplanet/ui/courses/CoursesFragment.kt | 4 +- .../myplanet/ui/courses/MyProgressFragment.kt | 111 +++++++----- .../ui/dashboard/DashboardActivity.kt | 136 ++++++++++++++- .../ui/dashboard/DashboardActivity.kt.lite | 136 ++++++++++++++- .../planet/myplanet/ui/news/NewsFragment.kt | 6 +- .../ui/sync/DashboardElementActivity.kt | 18 +- .../planet/myplanet/ui/sync/LoginActivity.kt | 4 +- .../planet/myplanet/ui/sync/SyncActivity.kt | 162 +++++++++++++----- .../ole/planet/myplanet/utilities/Markdown.kt | 2 +- .../myplanet/utilities/MarkdownDialog.kt | 157 +++++++++++++++++ .../main/res/drawable/baseline_close_24.xml | 4 + .../res/layout/dialog_campaign_challenge.xml | 37 ++++ app/src/main/res/values-ar/strings.xml | 2 + app/src/main/res/values-es/strings.xml | 2 + app/src/main/res/values-fr/strings.xml | 2 + app/src/main/res/values-ne/strings.xml | 2 + app/src/main/res/values-so/strings.xml | 2 + app/src/main/res/values/strings.xml | 6 +- gradle.properties | 4 +- 29 files changed, 864 insertions(+), 192 deletions(-) create mode 100644 app/src/main/assets/images/november_challenge.jpeg create mode 100644 app/src/main/java/org/ole/planet/myplanet/model/RealmUserChallengeActions.kt create mode 100644 app/src/main/java/org/ole/planet/myplanet/utilities/MarkdownDialog.kt create mode 100644 app/src/main/res/drawable/baseline_close_24.xml create mode 100644 app/src/main/res/layout/dialog_campaign_challenge.xml diff --git a/.gitignore b/.gitignore index 72882161a7..f94cbdc52a 100644 --- a/.gitignore +++ b/.gitignore @@ -40,9 +40,6 @@ proguard # Log files *.log -# Raw folder -assets - # Android Studio Navigation editor temp folder .navigation diff --git a/app/build.gradle b/app/build.gradle index c6f95c554e..2d17cf3c37 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ android { applicationId "org.ole.planet.myplanet" minSdkVersion 26 targetSdkVersion 34 - versionCode 2085 - versionName "0.20.85" + versionCode 2086 + versionName "0.20.86" ndkVersion '21.3.6528147' testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables.useSupportLibrary = true @@ -85,8 +85,8 @@ android { def planetViPin = project.findProperty('PLANET_VI_PIN') ?: "" def planetXelaUrl = project.findProperty('PLANET_XELA_URL') ?: "" def planetXelaPin = project.findProperty('PLANET_XELA_PIN') ?: "" - //def planetUriurUrl = project.findProperty('PLANET_URIUR_URL') ?: "" - //def planetUriurPin = project.findProperty('PLANET_URIUR_PIN') ?: "" + def planetUriurUrl = project.findProperty('PLANET_URIUR_URL') ?: "" + def planetUriurPin = project.findProperty('PLANET_URIUR_PIN') ?: "" def planetRuiruUrl = project.findProperty('PLANET_RUIRU_URL') ?: "" def planetRuiruPin = project.findProperty('PLANET_RUIRU_PIN') ?: "" def planetEmbakasiUrl = project.findProperty('PLANET_EMBAKASI_URL') ?: "" @@ -114,18 +114,18 @@ android { it.buildConfigField 'String', 'PLANET_VI_PIN', "\"${planetViPin}\"" it.buildConfigField 'String', 'PLANET_XELA_URL', "\"${planetXelaUrl}\"" it.buildConfigField 'String', 'PLANET_XELA_PIN', "\"${planetXelaPin}\"" - //it.buildConfigField('String', 'PLANET_URIUR_URL', "\"${planetUriurUrl}\"") - //it.buildConfigField('String', 'PLANET_URIUR_PIN', "\"${planetUriurPin}\"") - it.buildConfigField('String', 'PLANET_RUIRU_URL', "\"${planetRuiruUrl}\"") - it.buildConfigField('String', 'PLANET_RUIRU_PIN', "\"${planetRuiruPin}\"") - it.buildConfigField('String', 'PLANET_EMBAKASI_URL', "\"${planetEmbakasiUrl}\"") - it.buildConfigField('String', 'PLANET_EMBAKASI_PIN', "\"${planetEmbakasiPin}\"") - it.buildConfigField('String', 'PLANET_CAMBRIDGE_URL', "\"${planetCambridgeUrl}\"") - it.buildConfigField('String', 'PLANET_CAMBRIDGE_PIN', "\"${planetCambridgePin}\"") - //it.buildConfigField('String', 'PLANET_EGDIRBMAC_URL', "\"${planetEgdirbmacUrl}\"") - //it.buildConfigField('String', 'PLANET_EGDIRBMAC_PIN', "\"${planetEgdirbmacPin}\"") - it.buildConfigField('String', 'PLANET_PALMBAY_URL', "\"${planetPalmBayUrl}\"") - it.buildConfigField('String', 'PLANET_PALMBAY_PIN', "\"${planetPalmBayPin}\"") + it.buildConfigField 'String', 'PLANET_URIUR_URL', "\"${planetUriurUrl}\"" + it.buildConfigField 'String', 'PLANET_URIUR_PIN', "\"${planetUriurPin}\"" + it.buildConfigField 'String', 'PLANET_RUIRU_URL', "\"${planetRuiruUrl}\"" + it.buildConfigField 'String', 'PLANET_RUIRU_PIN', "\"${planetRuiruPin}\"" + it.buildConfigField 'String', 'PLANET_EMBAKASI_URL', "\"${planetEmbakasiUrl}\"" + it.buildConfigField 'String', 'PLANET_EMBAKASI_PIN', "\"${planetEmbakasiPin}\"" + it.buildConfigField 'String', 'PLANET_CAMBRIDGE_URL', "\"${planetCambridgeUrl}\"" + it.buildConfigField 'String', 'PLANET_CAMBRIDGE_PIN', "\"${planetCambridgePin}\"" + //it.buildConfigField 'String', 'PLANET_EGDIRBMAC_URL', "\"${planetEgdirbmacUrl}\"" + //it.buildConfigField 'String', 'PLANET_EGDIRBMAC_PIN', "\"${planetEgdirbmacPin}\"" + it.buildConfigField 'String', 'PLANET_PALMBAY_URL', "\"${planetPalmBayUrl}\"" + it.buildConfigField 'String', 'PLANET_PALMBAY_PIN', "\"${planetPalmBayPin}\"" } } diff --git a/app/src/main/assets/images/november_challenge.jpeg b/app/src/main/assets/images/november_challenge.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..885e65f05649322b2086c835cfb32efaeb493af3 GIT binary patch literal 180932 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%0A`aHSf_$%5+gF>pc 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

8J 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 openIntent(items, TextFileViewerActivity::class.java) - "md" -> openIntent(items, MarkdownViewerActivity::class.java) - "csv" -> openIntent(items, CSVViewerActivity::class.java) - "apk" -> installApk(items) - else -> Toast.makeText( - activity, getString(R.string.this_file_type_is_currently_unsupported), Toast.LENGTH_LONG - ).show() + "txt" -> { + if (existingAction == null) { + createAction(mRealm, userId, items.resourceId, "resourceOpen") + } + openIntent(items, TextFileViewerActivity::class.java) + } + "md" -> { + if (existingAction == null) { + createAction(mRealm, userId, items.resourceId, "resourceOpen") + } + openIntent(items, MarkdownViewerActivity::class.java) + } + "csv" -> { + if (existingAction == null) { + createAction(mRealm, userId, items.resourceId, "resourceOpen") + } + openIntent(items, CSVViewerActivity::class.java) + } + "apk" -> { + if (existingAction == null) { + createAction(mRealm, userId, items.resourceId, "resourceOpen") + } + installApk(items) + } + else -> Toast.makeText(activity, getString(R.string.this_file_type_is_currently_unsupported), Toast.LENGTH_LONG).show() } } diff --git a/app/src/main/java/org/ole/planet/myplanet/base/BaseContainerFragment.kt.lite b/app/src/main/java/org/ole/planet/myplanet/base/BaseContainerFragment.kt.lite index 5d5c62b869..8a64f08109 100644 --- a/app/src/main/java/org/ole/planet/myplanet/base/BaseContainerFragment.kt.lite +++ b/app/src/main/java/org/ole/planet/myplanet/base/BaseContainerFragment.kt.lite @@ -29,6 +29,8 @@ import org.ole.planet.myplanet.R import org.ole.planet.myplanet.callback.OnHomeItemClickListener import org.ole.planet.myplanet.callback.OnRatingChangeListener import org.ole.planet.myplanet.model.RealmMyLibrary +import org.ole.planet.myplanet.model.RealmUserChallengeActions +import org.ole.planet.myplanet.model.RealmUserChallengeActions.Companion.createAction import org.ole.planet.myplanet.service.UserProfileDbHandler import org.ole.planet.myplanet.service.UserProfileDbHandler.Companion.KEY_RESOURCE_DOWNLOAD import org.ole.planet.myplanet.service.UserProfileDbHandler.Companion.KEY_RESOURCE_OPEN @@ -150,13 +152,29 @@ abstract class BaseContainerFragment : BaseResourceFragment() { val filenameArray = items.resourceLocalAddress?.split("\\.".toRegex())?.toTypedArray() val extension = filenameArray?.get(filenameArray.size - 1) val mimetype = Utilities.getMimeType(items.resourceLocalAddress) + val userId = "${model?.id}" + + val existingAction = mRealm.where(RealmUserChallengeActions::class.java) + .equalTo("userId", userId) + .equalTo("resourceId", items.resourceId) + .findFirst() + if (mimetype != null) { if (mimetype.contains("image")) { openIntent(items, ImageViewerActivity::class.java) + if (existingAction == null) { + createAction(mRealm, userId, items.resourceId, "resourceOpen") + } } else if (mimetype.contains("pdf")) { openPdf(items) + if (existingAction == null) { + createAction(mRealm, userId, items.resourceId, "resourceOpen") + } } else if (mimetype.contains("audio")) { openIntent(items, AudioPlayerActivity::class.java) + if (existingAction == null) { + createAction(mRealm, userId, items.resourceId, "resourceOpen") + } } else { checkMoreFileExtensions(extension, items) } @@ -164,14 +182,38 @@ abstract class BaseContainerFragment : BaseResourceFragment() { } private fun checkMoreFileExtensions(extension: String?, items: RealmMyLibrary) { + val userId = "${model?.id}" + val existingAction = mRealm.where(RealmUserChallengeActions::class.java) + .equalTo("userId", userId) + .equalTo("resourceId", items.resourceId) + .findFirst() + when (extension) { - "txt" -> openIntent(items, TextFileViewerActivity::class.java) - "md" -> openIntent(items, MarkdownViewerActivity::class.java) - "csv" -> openIntent(items, CSVViewerActivity::class.java) -// "apk" -> installApk(items) - else -> Toast.makeText( - activity, getString(R.string.this_file_type_is_currently_unsupported), Toast.LENGTH_LONG - ).show() + "txt" -> { + if (existingAction == null) { + createAction(mRealm, userId, items.resourceId, "resourceOpen") + } + openIntent(items, TextFileViewerActivity::class.java) + } + "md" -> { + if (existingAction == null) { + createAction(mRealm, userId, items.resourceId, "resourceOpen") + } + openIntent(items, MarkdownViewerActivity::class.java) + } + "csv" -> { + if (existingAction == null) { + createAction(mRealm, userId, items.resourceId, "resourceOpen") + } + openIntent(items, CSVViewerActivity::class.java) + } +// "apk" -> { +// if (existingAction == null) { +// createAction(mRealm, userId, items.resourceId, "resourceOpen") +// } +// installApk(items) +// } + else -> Toast.makeText(activity, getString(R.string.this_file_type_is_currently_unsupported), Toast.LENGTH_LONG).show() } } diff --git a/app/src/main/java/org/ole/planet/myplanet/model/RealmUserChallengeActions.kt b/app/src/main/java/org/ole/planet/myplanet/model/RealmUserChallengeActions.kt new file mode 100644 index 0000000000..7cadbbfc00 --- /dev/null +++ b/app/src/main/java/org/ole/planet/myplanet/model/RealmUserChallengeActions.kt @@ -0,0 +1,29 @@ +package org.ole.planet.myplanet.model + +import io.realm.Realm +import io.realm.RealmObject +import io.realm.annotations.PrimaryKey +import java.util.UUID + +open class RealmUserChallengeActions : RealmObject() { + @PrimaryKey + var id: String = UUID.randomUUID().toString() + var userId: String? = null + var actionType: String? = null + var resourceId: String? = null + var time: Long = 0 + + companion object { + fun createAction(realm: Realm, userId: String, resourceId: String?, actionType: String) { + realm.executeTransaction { transactionRealm -> + val action = transactionRealm.createObject( + RealmUserChallengeActions::class.java, UUID.randomUUID().toString() + ) + action.userId = userId + action.actionType = actionType + action.resourceId = resourceId + action.time = System.currentTimeMillis() + } + } + } +} diff --git a/app/src/main/java/org/ole/planet/myplanet/service/UserProfileDbHandler.kt b/app/src/main/java/org/ole/planet/myplanet/service/UserProfileDbHandler.kt index c1cf2115d0..71a46e768f 100644 --- a/app/src/main/java/org/ole/planet/myplanet/service/UserProfileDbHandler.kt +++ b/app/src/main/java/org/ole/planet/myplanet/service/UserProfileDbHandler.kt @@ -36,15 +36,14 @@ class UserProfileDbHandler(context: Context) { } } - val userModel: RealmUserModel? - get() { - if (mRealm.isClosed) { - mRealm = realmService.realmInstance - } - return mRealm.where(RealmUserModel::class.java) - .equalTo("id", settings.getString("userId", "")) - .findFirst() + val userModel: RealmUserModel? get() { + if (mRealm.isClosed) { + mRealm = realmService.realmInstance } + return mRealm.where(RealmUserModel::class.java) + .equalTo("id", settings.getString("userId", "")) + .findFirst() + } fun onLogin() { if (!mRealm.isInTransaction) { @@ -89,10 +88,8 @@ class UserProfileDbHandler(context: Context) { return offlineActivities } - val lastVisit: Long? - get() = mRealm.where(RealmOfflineActivity::class.java).max("loginTime") as Long? - val offlineVisits: Int - get() = getOfflineVisits(userModel) + val lastVisit: Long? get() = mRealm.where(RealmOfflineActivity::class.java).max("loginTime") as Long? + val offlineVisits: Int get() = getOfflineVisits(userModel) fun getOfflineVisits(m: RealmUserModel?): Int { val dbUsers = mRealm.where(RealmOfflineActivity::class.java).equalTo("userName", m?.name).equalTo("type", KEY_LOGIN).findAll() return if (!dbUsers.isEmpty()) { @@ -126,6 +123,7 @@ class UserProfileDbHandler(context: Context) { if (model?.id?.startsWith("guest") == true) { return } + if (!mRealm.isInTransaction) mRealm.beginTransaction() val offlineActivities = mRealm.copyToRealm(createResourceUser(model)) offlineActivities.type = type @@ -143,33 +141,31 @@ class UserProfileDbHandler(context: Context) { return offlineActivities } - val numberOfResourceOpen: String - get() { - val count = mRealm.where(RealmResourceActivity::class.java).equalTo("user", fullName) - .equalTo("type", KEY_RESOURCE_OPEN).count() - return if (count == 0L) "" else "Resource opened $count times." - } + val numberOfResourceOpen: String get() { + val count = mRealm.where(RealmResourceActivity::class.java).equalTo("user", fullName) + .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() - 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() - - if (count > maxCount) { - maxCount = count - maxOpenedResource = "${realmResourceActivities.title}" - } + val maxOpenedResource: String get() { + 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() + + if (count > maxCount) { + maxCount = count + maxOpenedResource = "${realmResourceActivities.title}" } - return if (maxCount == 0L) "" else "$maxOpenedResource opened $maxCount times" } + return if (maxCount == 0L) "" else "$maxOpenedResource opened $maxCount times" + } companion object { const val KEY_LOGIN = "login" diff --git a/app/src/main/java/org/ole/planet/myplanet/ui/chat/ChatDetailFragment.kt b/app/src/main/java/org/ole/planet/myplanet/ui/chat/ChatDetailFragment.kt index 98e5ba502d..a1b1696a1b 100644 --- a/app/src/main/java/org/ole/planet/myplanet/ui/chat/ChatDetailFragment.kt +++ b/app/src/main/java/org/ole/planet/myplanet/ui/chat/ChatDetailFragment.kt @@ -15,6 +15,7 @@ import org.ole.planet.myplanet.databinding.FragmentChatDetailBinding import org.ole.planet.myplanet.datamanager.* import org.ole.planet.myplanet.model.* import org.ole.planet.myplanet.model.RealmChatHistory.Companion.addConversationToChatHistory +import org.ole.planet.myplanet.model.RealmUserChallengeActions.Companion.createAction import org.ole.planet.myplanet.service.UserProfileDbHandler import org.ole.planet.myplanet.ui.dashboard.DashboardActivity import org.ole.planet.myplanet.utilities.Utilities @@ -341,6 +342,8 @@ class ChatDetailFragment : Fragment() { } (requireActivity() as? DashboardActivity)?.refreshChatHistoryList() } + + createAction(mRealm, "${user?.id}", "${response.body()?.couchDBResponse?.id}", "ai research") } else { fragmentChatDetailBinding.textGchatIndicator.visibility = View.VISIBLE fragmentChatDetailBinding.textGchatIndicator.text = if (response.message() == "null"){ diff --git a/app/src/main/java/org/ole/planet/myplanet/ui/chat/ChatHistoryListAdapter.kt b/app/src/main/java/org/ole/planet/myplanet/ui/chat/ChatHistoryListAdapter.kt index 776d36ec72..91e0646a3b 100644 --- a/app/src/main/java/org/ole/planet/myplanet/ui/chat/ChatHistoryListAdapter.kt +++ b/app/src/main/java/org/ole/planet/myplanet/ui/chat/ChatHistoryListAdapter.kt @@ -22,6 +22,7 @@ import org.ole.planet.myplanet.model.RealmChatHistory import org.ole.planet.myplanet.model.RealmMyTeam import org.ole.planet.myplanet.model.RealmNews import org.ole.planet.myplanet.model.RealmNews.Companion.createNews +import org.ole.planet.myplanet.model.RealmUserChallengeActions.Companion.createAction import org.ole.planet.myplanet.model.RealmUserModel import org.ole.planet.myplanet.service.UserProfileDbHandler import org.ole.planet.myplanet.ui.news.ExpandableListAdapter @@ -213,7 +214,10 @@ class ChatHistoryListAdapter(var context: Context, private var chatHistory: List map["chat"] = "true" map["news"] = Gson().toJson(serializedMap) - createNews(map, mRealm, user, null) + val n = user?.let { it1 -> createNews(map, mRealm, it1, null) } + if (section== "community") { + createAction(mRealm, "${n?.userId}", n?.id, "voice") + } fragment.refreshChatHistoryList() dialog.dismiss() } diff --git a/app/src/main/java/org/ole/planet/myplanet/ui/courses/AdapterMyProgress.kt b/app/src/main/java/org/ole/planet/myplanet/ui/courses/AdapterMyProgress.kt index bab4c137d1..61c50b93fe 100644 --- a/app/src/main/java/org/ole/planet/myplanet/ui/courses/AdapterMyProgress.kt +++ b/app/src/main/java/org/ole/planet/myplanet/ui/courses/AdapterMyProgress.kt @@ -42,7 +42,7 @@ class AdapterMyProgress(private val context: Context, private val list: JsonArra val stepMistake = list[position].asJsonObject["stepMistake"].asJsonObject rowMyProgressBinding.llProgress.removeAllViews() - if (stepMistake.keySet().size > 0) { + if (stepMistake.keySet().isNotEmpty()) { itemProgressBinding = ItemProgressBinding.inflate(LayoutInflater.from(context)) itemProgressBinding.step.text = HtmlCompat.fromHtml("Step", HtmlCompat.FROM_HTML_MODE_LEGACY) itemProgressBinding.mistake.text = HtmlCompat.fromHtml("Mistake", HtmlCompat.FROM_HTML_MODE_LEGACY) @@ -50,8 +50,8 @@ class AdapterMyProgress(private val context: Context, private val list: JsonArra stepMistake.keySet().forEach { rowMyProgressBinding.llProgress.removeAllViews() - itemProgressBinding.step.text = (it.toInt().plus(1).toString()) - itemProgressBinding.mistake.text = stepMistake[it].asInt.toString() + itemProgressBinding.step.text = "${it.toInt().plus(1)}" + itemProgressBinding.mistake.text = "${stepMistake[it].asInt}" rowMyProgressBinding.llProgress.addView(itemProgressBinding.root) } } diff --git a/app/src/main/java/org/ole/planet/myplanet/ui/courses/CoursesFragment.kt b/app/src/main/java/org/ole/planet/myplanet/ui/courses/CoursesFragment.kt index 6fd0317f3e..8d0cfebeb0 100644 --- a/app/src/main/java/org/ole/planet/myplanet/ui/courses/CoursesFragment.kt +++ b/app/src/main/java/org/ole/planet/myplanet/ui/courses/CoursesFragment.kt @@ -304,7 +304,7 @@ class CoursesFragment : BaseRecyclerFragment(), OnCourseItemSele if (userModel?.id?.startsWith("guest") == true) { DialogUtils.guestDialog(requireContext()) } else { - redirectToMyCourses(); + redirectToMyCourses() } } .setNegativeButton(R.string.ok) { dialog: DialogInterface, _: Int -> @@ -317,7 +317,7 @@ class CoursesFragment : BaseRecyclerFragment(), OnCourseItemSele } fun redirectToMyCourses() { - val fragment = CoursesFragment.newInstance(isMyCourseLib = true) + val fragment = newInstance(isMyCourseLib = true) parentFragmentManager.beginTransaction() .replace(R.id.fragment_container, fragment) diff --git a/app/src/main/java/org/ole/planet/myplanet/ui/courses/MyProgressFragment.kt b/app/src/main/java/org/ole/planet/myplanet/ui/courses/MyProgressFragment.kt index e5fcc403f7..83f0a3c3bd 100644 --- a/app/src/main/java/org/ole/planet/myplanet/ui/courses/MyProgressFragment.kt +++ b/app/src/main/java/org/ole/planet/myplanet/ui/courses/MyProgressFragment.kt @@ -37,58 +37,79 @@ class MyProgressFragment : Fragment() { private fun initializeData() { val realm = DatabaseService(requireActivity()).realmInstance val user = UserProfileDbHandler(requireActivity()).userModel - val mycourses = RealmMyCourse.getMyCourseByUserId( - user?.id, realm.where(RealmMyCourse::class.java).findAll() - ) - val arr = JsonArray() - val courseProgress = RealmCourseProgress.getCourseProgress(realm, user?.id) - mycourses.forEach { it -> - val obj = JsonObject() - obj.addProperty("courseName", it.courseTitle) - obj.addProperty("courseId", it.courseId) - obj.add("progress", courseProgress[it.id]) - val submissions = it.courseId?.let { it1 -> - realm.where(RealmSubmission::class.java) - .equalTo("userId", user?.id) - .contains("parentId", it1) - .equalTo("type", "exam") + val courseData = fetchCourseData(realm, user?.id) + fragmentMyProgressBinding.rvMyprogress.layoutManager = LinearLayoutManager(requireActivity()) + fragmentMyProgressBinding.rvMyprogress.adapter = AdapterMyProgress(requireActivity(), courseData) + } + + companion object { + fun fetchCourseData(realm: Realm, userId: String?): JsonArray { + val mycourses = RealmMyCourse.getMyCourseByUserId( + userId, + realm.where(RealmMyCourse::class.java).findAll() + ) + val arr = JsonArray() + val courseProgress = RealmCourseProgress.getCourseProgress(realm, userId) + + mycourses.forEach { course -> + val obj = JsonObject() + obj.addProperty("courseName", course.courseTitle) + obj.addProperty("courseId", course.courseId) + obj.add("progress", courseProgress[course.id]) + + val submissions = course.courseId?.let { courseId -> + realm.where(RealmSubmission::class.java) + .equalTo("userId", userId) + .contains("parentId", courseId) + .equalTo("type", "exam") + .findAll() + } + val exams = realm.where(RealmStepExam::class.java) + .equalTo("courseId", course.courseId) .findAll() + val examIds: List = exams.map { it.id as String } + + if (submissions != null) { + submissionMap(submissions, realm, examIds, obj) + } + arr.add(obj) } - val exams = realm.where(RealmStepExam::class.java) - .equalTo("courseId", it.courseId) - .findAll() - val examIds: List = exams.map { it.id as String } - if (submissions != null) { - submissionMap(submissions, realm, examIds, obj) - } - arr.add(obj) + return arr } - fragmentMyProgressBinding.rvMyprogress.layoutManager = LinearLayoutManager(requireActivity()) - fragmentMyProgressBinding.rvMyprogress.adapter = AdapterMyProgress(requireActivity(), arr) - } - private fun submissionMap(submissions: RealmResults, realm: Realm, examIds: List, obj: JsonObject) { - var totalMistakes = 0 - submissions.forEach { - val answers = realm.where(RealmAnswer::class.java) - .equalTo("submissionId", it.id) - .findAll() - val mistakesMap = HashMap() - answers.forEach { r -> - val question = realm.where(RealmExamQuestion::class.java) - .equalTo("id", r.questionId) - .findFirst() - if (examIds.contains(question?.examId)) { - totalMistakes += r.mistakes - if (mistakesMap.containsKey(question?.examId)) { - mistakesMap["${examIds.indexOf(question?.examId)}"] = mistakesMap[question?.examId]!!.plus(r.mistakes) - } else { - mistakesMap["${examIds.indexOf(question?.examId)}"] = r.mistakes + private fun submissionMap(submissions: RealmResults, realm: Realm, examIds: List, obj: JsonObject) { + var totalMistakes = 0 + submissions.forEach { + val answers = realm.where(RealmAnswer::class.java) + .equalTo("submissionId", it.id) + .findAll() + val mistakesMap = HashMap() + answers.forEach { r -> + val question = realm.where(RealmExamQuestion::class.java) + .equalTo("id", r.questionId) + .findFirst() + if (examIds.contains(question?.examId)) { + totalMistakes += r.mistakes + if (mistakesMap.containsKey(question?.examId)) { + mistakesMap["${examIds.indexOf(question?.examId)}"] = mistakesMap[question?.examId]!!.plus(r.mistakes) + } else { + mistakesMap["${examIds.indexOf(question?.examId)}"] = r.mistakes + } } } + obj.add("stepMistake", Gson().fromJson(Gson().toJson(mistakesMap), JsonObject::class.java)) + obj.addProperty("mistakes", totalMistakes) + } + } + + fun getCourseProgress(courseData: JsonArray, courseId: String): JsonObject? { + courseData.forEach { element -> + val course = element.asJsonObject + if (course.get("courseId").asString == courseId) { + return course.getAsJsonObject("progress") + } } - obj.add("stepMistake", Gson().fromJson(Gson().toJson(mistakesMap), JsonObject::class.java)) - obj.addProperty("mistakes", totalMistakes) + return null } } } diff --git a/app/src/main/java/org/ole/planet/myplanet/ui/dashboard/DashboardActivity.kt b/app/src/main/java/org/ole/planet/myplanet/ui/dashboard/DashboardActivity.kt index b295f33bd1..dbf8d03f87 100644 --- a/app/src/main/java/org/ole/planet/myplanet/ui/dashboard/DashboardActivity.kt +++ b/app/src/main/java/org/ole/planet/myplanet/ui/dashboard/DashboardActivity.kt @@ -22,6 +22,7 @@ import androidx.core.content.res.ResourcesCompat import androidx.core.view.MenuItemCompat import androidx.drawerlayout.widget.DrawerLayout import androidx.fragment.app.Fragment +import androidx.lifecycle.lifecycleScope import com.google.android.material.navigation.NavigationBarView import com.google.android.material.tabs.TabLayout import com.google.android.material.tabs.TabLayout.OnTabSelectedListener @@ -37,6 +38,9 @@ import io.realm.Case import io.realm.RealmChangeListener import io.realm.RealmObject import io.realm.RealmResults +import io.realm.Sort +import kotlinx.coroutines.launch +import org.ole.planet.myplanet.BuildConfig import org.ole.planet.myplanet.MainApplication.Companion.context import org.ole.planet.myplanet.R import org.ole.planet.myplanet.base.BaseContainerFragment @@ -44,17 +48,21 @@ import org.ole.planet.myplanet.base.BaseResourceFragment.Companion.getLibraryLis import org.ole.planet.myplanet.callback.OnHomeItemClickListener import org.ole.planet.myplanet.databinding.ActivityDashboardBinding import org.ole.planet.myplanet.databinding.CustomTabBinding +import org.ole.planet.myplanet.model.RealmMyCourse import org.ole.planet.myplanet.model.RealmMyLibrary import org.ole.planet.myplanet.model.RealmNotification import org.ole.planet.myplanet.model.RealmStepExam import org.ole.planet.myplanet.model.RealmSubmission import org.ole.planet.myplanet.model.RealmTeamTask +import org.ole.planet.myplanet.model.RealmUserChallengeActions import org.ole.planet.myplanet.model.RealmUserModel import org.ole.planet.myplanet.service.UserProfileDbHandler import org.ole.planet.myplanet.ui.SettingActivity import org.ole.planet.myplanet.ui.chat.ChatHistoryListFragment import org.ole.planet.myplanet.ui.community.CommunityTabFragment import org.ole.planet.myplanet.ui.courses.CoursesFragment +import org.ole.planet.myplanet.ui.courses.MyProgressFragment.Companion.fetchCourseData +import org.ole.planet.myplanet.ui.courses.MyProgressFragment.Companion.getCourseProgress import org.ole.planet.myplanet.ui.dashboard.notification.NotificationsFragment import org.ole.planet.myplanet.ui.dashboard.notification.NotificationListener import org.ole.planet.myplanet.ui.feedback.FeedbackListFragment @@ -72,9 +80,11 @@ import org.ole.planet.myplanet.utilities.DialogUtils.guestDialog import org.ole.planet.myplanet.utilities.FileUtils.totalAvailableMemoryRatio import org.ole.planet.myplanet.utilities.KeyboardUtils.setupUI import org.ole.planet.myplanet.utilities.LocaleHelper +import org.ole.planet.myplanet.utilities.MarkdownDialog import org.ole.planet.myplanet.utilities.TimeUtils.formatDate import org.ole.planet.myplanet.utilities.Utilities import org.ole.planet.myplanet.utilities.Utilities.toast +import java.time.LocalDate import java.util.Date import java.util.UUID import kotlin.math.ceil @@ -83,7 +93,7 @@ class DashboardActivity : DashboardElementActivity(), OnHomeItemClickListener, N private lateinit var activityDashboardBinding: ActivityDashboardBinding private var headerResult: AccountHeader? = null var user: RealmUserModel? = null - private var result: Drawer? = null + var result: Drawer? = null private var menul: TabLayout.Tab? = null private var menuh: TabLayout.Tab? = null private var menuc: TabLayout.Tab? = null @@ -164,8 +174,10 @@ class DashboardActivity : DashboardElementActivity(), OnHomeItemClickListener, N activityDashboardBinding.appBarBell.bellToolbar.visibility = View.VISIBLE } activityDashboardBinding.appBarBell.ivSync.setOnClickListener { - isServerReachable(Utilities.getUrl()) - startUpload("dashboard") + lifecycleScope.launch { + isServerReachable(Utilities.getUrl()) + startUpload("dashboard") + } } activityDashboardBinding.appBarBell.imgLogo.setOnClickListener { result?.openDrawer() } activityDashboardBinding.appBarBell.bellToolbar.setOnMenuItemClickListener { item -> @@ -179,8 +191,7 @@ class DashboardActivity : DashboardElementActivity(), OnHomeItemClickListener, N } R.id.menu_goOnline -> wifiStatusSwitch() R.id.action_sync -> { - isServerReachable(Utilities.getUrl()) - startUpload("dashboard") + logSyncInSharedPrefs() } R.id.action_feedback -> { if (user?.id?.startsWith("guest") == false) { @@ -230,6 +241,117 @@ class DashboardActivity : DashboardElementActivity(), OnHomeItemClickListener, N } } }) + + val loginCount = mRealm.where(RealmUserChallengeActions::class.java) + .equalTo("userId", user?.id) + .equalTo("actionType", "login") + .findAll().count() + + val resourceOpenCount = mRealm.where(RealmUserChallengeActions::class.java) + .equalTo("userId", user?.id) + .equalTo("actionType", "resourceOpen") + .findAll().count() + + val syncCount = mRealm.where(RealmUserChallengeActions::class.java) + .equalTo("userId", user?.id) + .equalTo("actionType", "sync") + .findAll().count() + + val voiceCount = mRealm.where(RealmUserChallengeActions::class.java) + .equalTo("userId", user?.id) + .equalTo("actionType", "voice") + .findAll().count() + + val aiResearchCount = mRealm.where(RealmUserChallengeActions::class.java) + .equalTo("userId", user?.id) + .equalTo("actionType", "ai research") + .findAll().count() + + val courseData = fetchCourseData(mRealm, user?.id) + + val courseId = "9517e3b45a5bb63e69bb8f269216974d" + val progress = getCourseProgress(courseData, courseId) + + val validUrls = listOf( + "https://${BuildConfig.PLANET_GUATEMALA_URL}", + "https://${BuildConfig.PLANET_XELA_URL}", + "https://${BuildConfig.PLANET_URIUR_URL}", + "https://${BuildConfig.PLANET_SANPABLO_URL}", + "https://${BuildConfig.PLANET_EMBAKASI_URL}", + "https://${BuildConfig.PLANET_VI_URL}" + ) + + val today = LocalDate.now() + if (user?.id?.startsWith("guest") == false) { + val endDate = LocalDate.of(today.year, 12, 1) + if (today.isBefore(endDate)) { + if (settings.getString("serverURL", "") in validUrls) { + val course = mRealm.where(RealmMyCourse::class.java) + .equalTo("courseId", courseId) + .findFirst() + val courseName = course?.courseTitle + + if (progress != null) { + val max = progress.get("max").asInt + val current = progress.get("current").asInt + val courseStatus = if (current == max) { + "$courseName terminado!" + } else { + "Ingresa al curso $courseName completalo ($current de $max hecho)" + } + challengeDialog(voiceCount, courseStatus) + } else { + challengeDialog(voiceCount, "$courseName no iniciado") + } + } + } + } + } + + fun challengeDialog(voiceCount: Int, courseStatus: String) { + val voiceTaskDone = if (voiceCount >= 1) "✅" else "[ ]" + val prereqsMet = courseStatus.contains("terminado", ignoreCase = true) && voiceCount >= 1 + val syncTaskDone = if (prereqsMet) { + val lastPrereqAction = mRealm.where(RealmUserChallengeActions::class.java) + .equalTo("userId", user?.id) + .`in`("actionType", arrayOf("voice", "courseComplete")) + .sort("time", Sort.DESCENDING) + .findFirst() + ?.time ?: 0 + + val hasValidSync = mRealm.where(RealmUserChallengeActions::class.java) + .equalTo("userId", user?.id) + .equalTo("actionType", "sync") + .greaterThan("time", lastPrereqAction) + .count() > 0 + + if (hasValidSync) "✅" else "[ ]" + } else "[ ]" + val courseTaskDone = if (courseStatus.contains("terminado", ignoreCase = true)) "✅ $courseStatus" else "[ ] $courseStatus" + + val isCompleted = syncTaskDone == "✅" && voiceTaskDone == "✅" && courseTaskDone.startsWith("✅") + val hasShownCongrats = settings.getBoolean("has_shown_congrats", false) + + if (isCompleted && hasShownCongrats) return + + if (isCompleted && !hasShownCongrats) { + editor.putBoolean("has_shown_congrats", true).apply() + val markdownContent = """ + ![issues challenge](file:///android_asset/images/november_challenge.jpeg)
+ ### ¡Felicidades Reto Completado! + """.trimIndent() + MarkdownDialog.newInstance(markdownContent, courseStatus, voiceCount) + .show(supportFragmentManager, "markdown_dialog") + } else { + val markdownContent = """ + ![issues challenge](file:///android_asset/images/november_challenge.jpeg)
+ ### $courseTaskDone
+ ### $voiceTaskDone Comparte tu opinión en Nuestras Voces.
+ ### $syncTaskDone Recuerda sincronizar la aplicacion movil. + """.trimIndent() + MarkdownDialog.newInstance(markdownContent, courseStatus, voiceCount) + .show(supportFragmentManager, "markdown_dialog") + } } private fun setupRealmListeners() { @@ -483,7 +605,7 @@ class DashboardActivity : DashboardElementActivity(), OnHomeItemClickListener, N override fun onPrepareOptionsMenu(menu: Menu): Boolean { if (user?.rolesList?.isEmpty() == true) { - menu.findItem(R.id.action_setting).setEnabled(false) + menu.findItem(R.id.action_setting).isEnabled = false } return super.onPrepareOptionsMenu(menu) } @@ -702,7 +824,7 @@ class DashboardActivity : DashboardElementActivity(), OnHomeItemClickListener, N override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.menu_bell_dashboard, menu) - menu.findItem(R.id.menu_goOnline).setVisible(showBetaFeature(Constants.KEY_SYNC, this)) + menu.findItem(R.id.menu_goOnline).isVisible = showBetaFeature(Constants.KEY_SYNC, this) return super.onCreateOptionsMenu(menu) } diff --git a/app/src/main/java/org/ole/planet/myplanet/ui/dashboard/DashboardActivity.kt.lite b/app/src/main/java/org/ole/planet/myplanet/ui/dashboard/DashboardActivity.kt.lite index 92a586ba7c..853cfda8c6 100644 --- a/app/src/main/java/org/ole/planet/myplanet/ui/dashboard/DashboardActivity.kt.lite +++ b/app/src/main/java/org/ole/planet/myplanet/ui/dashboard/DashboardActivity.kt.lite @@ -22,6 +22,7 @@ import androidx.core.content.res.ResourcesCompat import androidx.core.view.MenuItemCompat import androidx.drawerlayout.widget.DrawerLayout import androidx.fragment.app.Fragment +import androidx.lifecycle.lifecycleScope import com.google.android.material.navigation.NavigationBarView import com.google.android.material.tabs.TabLayout import com.google.android.material.tabs.TabLayout.OnTabSelectedListener @@ -37,6 +38,9 @@ import io.realm.Case import io.realm.RealmChangeListener import io.realm.RealmObject import io.realm.RealmResults +import io.realm.Sort +import kotlinx.coroutines.launch +import org.ole.planet.myplanet.BuildConfig import org.ole.planet.myplanet.MainApplication.Companion.context import org.ole.planet.myplanet.R //import org.ole.planet.myplanet.base.BaseContainerFragment @@ -44,17 +48,21 @@ import org.ole.planet.myplanet.base.BaseResourceFragment.Companion.getLibraryLis import org.ole.planet.myplanet.callback.OnHomeItemClickListener import org.ole.planet.myplanet.databinding.ActivityDashboardBinding import org.ole.planet.myplanet.databinding.CustomTabBinding +import org.ole.planet.myplanet.model.RealmMyCourse import org.ole.planet.myplanet.model.RealmMyLibrary import org.ole.planet.myplanet.model.RealmNotification import org.ole.planet.myplanet.model.RealmStepExam import org.ole.planet.myplanet.model.RealmSubmission import org.ole.planet.myplanet.model.RealmTeamTask +import org.ole.planet.myplanet.model.RealmUserChallengeActions import org.ole.planet.myplanet.model.RealmUserModel import org.ole.planet.myplanet.service.UserProfileDbHandler import org.ole.planet.myplanet.ui.SettingActivity import org.ole.planet.myplanet.ui.chat.ChatHistoryListFragment import org.ole.planet.myplanet.ui.community.CommunityTabFragment import org.ole.planet.myplanet.ui.courses.CoursesFragment +import org.ole.planet.myplanet.ui.courses.MyProgressFragment.Companion.fetchCourseData +import org.ole.planet.myplanet.ui.courses.MyProgressFragment.Companion.getCourseProgress import org.ole.planet.myplanet.ui.dashboard.notification.NotificationsFragment import org.ole.planet.myplanet.ui.dashboard.notification.NotificationListener import org.ole.planet.myplanet.ui.feedback.FeedbackListFragment @@ -72,9 +80,11 @@ import org.ole.planet.myplanet.utilities.DialogUtils.guestDialog import org.ole.planet.myplanet.utilities.FileUtils.totalAvailableMemoryRatio import org.ole.planet.myplanet.utilities.KeyboardUtils.setupUI import org.ole.planet.myplanet.utilities.LocaleHelper +import org.ole.planet.myplanet.utilities.MarkdownDialog import org.ole.planet.myplanet.utilities.TimeUtils.formatDate import org.ole.planet.myplanet.utilities.Utilities import org.ole.planet.myplanet.utilities.Utilities.toast +import java.time.LocalDate import java.util.Date import java.util.UUID import kotlin.math.ceil @@ -83,7 +93,7 @@ class DashboardActivity : DashboardElementActivity(), OnHomeItemClickListener, N private lateinit var activityDashboardBinding: ActivityDashboardBinding private var headerResult: AccountHeader? = null var user: RealmUserModel? = null - private var result: Drawer? = null + var result: Drawer? = null private var menul: TabLayout.Tab? = null private var menuh: TabLayout.Tab? = null private var menuc: TabLayout.Tab? = null @@ -164,8 +174,10 @@ class DashboardActivity : DashboardElementActivity(), OnHomeItemClickListener, N activityDashboardBinding.appBarBell.bellToolbar.visibility = View.VISIBLE } activityDashboardBinding.appBarBell.ivSync.setOnClickListener { - isServerReachable(Utilities.getUrl()) - startUpload("dashboard") + lifecycleScope.launch { + isServerReachable(Utilities.getUrl()) + startUpload("dashboard") + } } activityDashboardBinding.appBarBell.imgLogo.setOnClickListener { result?.openDrawer() } activityDashboardBinding.appBarBell.bellToolbar.setOnMenuItemClickListener { item -> @@ -179,8 +191,7 @@ class DashboardActivity : DashboardElementActivity(), OnHomeItemClickListener, N } R.id.menu_goOnline -> wifiStatusSwitch() R.id.action_sync -> { - isServerReachable(Utilities.getUrl()) - startUpload("dashboard") + logSyncInSharedPrefs() } R.id.action_feedback -> { if (user?.id?.startsWith("guest") == false) { @@ -230,6 +241,117 @@ class DashboardActivity : DashboardElementActivity(), OnHomeItemClickListener, N } } }) + + val loginCount = mRealm.where(RealmUserChallengeActions::class.java) + .equalTo("userId", user?.id) + .equalTo("actionType", "login") + .findAll().count() + + val resourceOpenCount = mRealm.where(RealmUserChallengeActions::class.java) + .equalTo("userId", user?.id) + .equalTo("actionType", "resourceOpen") + .findAll().count() + + val syncCount = mRealm.where(RealmUserChallengeActions::class.java) + .equalTo("userId", user?.id) + .equalTo("actionType", "sync") + .findAll().count() + + val voiceCount = mRealm.where(RealmUserChallengeActions::class.java) + .equalTo("userId", user?.id) + .equalTo("actionType", "voice") + .findAll().count() + + val aiResearchCount = mRealm.where(RealmUserChallengeActions::class.java) + .equalTo("userId", user?.id) + .equalTo("actionType", "ai research") + .findAll().count() + + val courseData = fetchCourseData(mRealm, user?.id) + + val courseId = "9517e3b45a5bb63e69bb8f269216974d" + val progress = getCourseProgress(courseData, courseId) + + val validUrls = listOf( + "https://${BuildConfig.PLANET_GUATEMALA_URL}", + "https://${BuildConfig.PLANET_XELA_URL}", + "https://${BuildConfig.PLANET_URIUR_URL}", + "https://${BuildConfig.PLANET_SANPABLO_URL}", + "https://${BuildConfig.PLANET_EMBAKASI_URL}", + "https://${BuildConfig.PLANET_VI_URL}" + ) + + val today = LocalDate.now() + if (user?.id?.startsWith("guest") == false) { + val endDate = LocalDate.of(today.year, 12, 1) + if (today.isBefore(endDate)) { + if (settings.getString("serverURL", "") in validUrls) { + val course = mRealm.where(RealmMyCourse::class.java) + .equalTo("courseId", courseId) + .findFirst() + val courseName = course?.courseTitle + + if (progress != null) { + val max = progress.get("max").asInt + val current = progress.get("current").asInt + val courseStatus = if (current == max) { + "$courseName terminado!" + } else { + "Ingresa al curso $courseName completalo ($current de $max hecho)" + } + challengeDialog(voiceCount, courseStatus) + } else { + challengeDialog(voiceCount, "$courseName no iniciado") + } + } + } + } + } + + fun challengeDialog(voiceCount: Int, courseStatus: String) { + val voiceTaskDone = if (voiceCount >= 1) "✅" else "[ ]" + val prereqsMet = courseStatus.contains("terminado", ignoreCase = true) && voiceCount >= 1 + val syncTaskDone = if (prereqsMet) { + val lastPrereqAction = mRealm.where(RealmUserChallengeActions::class.java) + .equalTo("userId", user?.id) + .`in`("actionType", arrayOf("voice", "courseComplete")) + .sort("time", Sort.DESCENDING) + .findFirst() + ?.time ?: 0 + + val hasValidSync = mRealm.where(RealmUserChallengeActions::class.java) + .equalTo("userId", user?.id) + .equalTo("actionType", "sync") + .greaterThan("time", lastPrereqAction) + .count() > 0 + + if (hasValidSync) "✅" else "[ ]" + } else "[ ]" + val courseTaskDone = if (courseStatus.contains("terminado", ignoreCase = true)) "✅ $courseStatus" else "[ ] $courseStatus" + + val isCompleted = syncTaskDone == "✅" && voiceTaskDone == "✅" && courseTaskDone.startsWith("✅") + val hasShownCongrats = settings.getBoolean("has_shown_congrats", false) + + if (isCompleted && hasShownCongrats) return + + if (isCompleted && !hasShownCongrats) { + editor.putBoolean("has_shown_congrats", true).apply() + val markdownContent = """ + ![issues challenge](file:///android_asset/images/november_challenge.jpeg)
+ ### ¡Felicidades Reto Completado! + """.trimIndent() + MarkdownDialog.newInstance(markdownContent, courseStatus, voiceCount) + .show(supportFragmentManager, "markdown_dialog") + } else { + val markdownContent = """ + ![issues challenge](file:///android_asset/images/november_challenge.jpeg)
+ ### $courseTaskDone
+ ### $voiceTaskDone Comparte tu opinión en Nuestras Voces.
+ ### $syncTaskDone Recuerda sincronizar la aplicacion movil. + """.trimIndent() + MarkdownDialog.newInstance(markdownContent, courseStatus, voiceCount) + .show(supportFragmentManager, "markdown_dialog") + } } private fun setupRealmListeners() { @@ -483,7 +605,7 @@ class DashboardActivity : DashboardElementActivity(), OnHomeItemClickListener, N override fun onPrepareOptionsMenu(menu: Menu): Boolean { if (user?.rolesList?.isEmpty() == true) { - menu.findItem(R.id.action_setting).setEnabled(false) + menu.findItem(R.id.action_setting).isEnabled = false } return super.onPrepareOptionsMenu(menu) } @@ -702,7 +824,7 @@ class DashboardActivity : DashboardElementActivity(), OnHomeItemClickListener, N override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.menu_bell_dashboard, menu) - menu.findItem(R.id.menu_goOnline).setVisible(showBetaFeature(Constants.KEY_SYNC, this)) + menu.findItem(R.id.menu_goOnline).isVisible = showBetaFeature(Constants.KEY_SYNC, this) return super.onCreateOptionsMenu(menu) } diff --git a/app/src/main/java/org/ole/planet/myplanet/ui/news/NewsFragment.kt b/app/src/main/java/org/ole/planet/myplanet/ui/news/NewsFragment.kt index c85b04d3be..51e4bb5567 100644 --- a/app/src/main/java/org/ole/planet/myplanet/ui/news/NewsFragment.kt +++ b/app/src/main/java/org/ole/planet/myplanet/ui/news/NewsFragment.kt @@ -1,13 +1,11 @@ package org.ole.planet.myplanet.ui.news import android.content.res.Configuration -import android.os.Build import android.os.Bundle import android.text.TextUtils import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import androidx.annotation.RequiresApi import androidx.recyclerview.widget.RecyclerView.AdapterDataObserver import com.google.gson.Gson import com.google.gson.JsonArray @@ -21,6 +19,7 @@ import org.ole.planet.myplanet.datamanager.DatabaseService import org.ole.planet.myplanet.model.RealmMyLibrary import org.ole.planet.myplanet.model.RealmNews import org.ole.planet.myplanet.model.RealmNews.Companion.createNews +import org.ole.planet.myplanet.model.RealmUserChallengeActions.Companion.createAction import org.ole.planet.myplanet.model.RealmUserModel import org.ole.planet.myplanet.service.UserProfileDbHandler import org.ole.planet.myplanet.ui.chat.ChatDetailFragment @@ -30,7 +29,6 @@ import org.ole.planet.myplanet.utilities.FileUtils.openOleFolder import org.ole.planet.myplanet.utilities.JsonUtils.getString import org.ole.planet.myplanet.utilities.KeyboardUtils.setupUI -@RequiresApi(api = Build.VERSION_CODES.O) class NewsFragment : BaseNewsFragment() { private lateinit var fragmentNewsBinding: FragmentNewsBinding var user: RealmUserModel? = null @@ -122,6 +120,8 @@ class NewsFragment : BaseNewsFragment() { llImage?.removeAllViews() adapterNews?.addItem(n) setData(newsList) + + createAction(mRealm, "${user?.id}", "${n?.id}", "voice") } fragmentNewsBinding.addNewsImage.setOnClickListener { diff --git a/app/src/main/java/org/ole/planet/myplanet/ui/sync/DashboardElementActivity.kt b/app/src/main/java/org/ole/planet/myplanet/ui/sync/DashboardElementActivity.kt index c111550f16..f4e213c23d 100644 --- a/app/src/main/java/org/ole/planet/myplanet/ui/sync/DashboardElementActivity.kt +++ b/app/src/main/java/org/ole/planet/myplanet/ui/sync/DashboardElementActivity.kt @@ -17,6 +17,7 @@ import androidx.core.content.ContextCompat import androidx.core.graphics.drawable.DrawableCompat import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentManager +import androidx.lifecycle.lifecycleScope import androidx.localbroadcastmanager.content.LocalBroadcastManager import com.google.android.material.bottomnavigation.BottomNavigationView import kotlinx.coroutines.CoroutineScope @@ -24,6 +25,7 @@ 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.model.RealmUserChallengeActions.Companion.createAction import org.ole.planet.myplanet.service.UserProfileDbHandler import org.ole.planet.myplanet.ui.SettingActivity import org.ole.planet.myplanet.ui.community.CommunityTabFragment @@ -112,13 +114,21 @@ abstract class DashboardElementActivity : SyncActivity(), FragmentManager.OnBack startActivity(Intent(this, SettingActivity::class.java)) } R.id.action_sync -> { - isServerReachable(Utilities.getUrl()) - startUpload("dashboard") + logSyncInSharedPrefs() } } return super.onOptionsItemSelected(item) } + fun logSyncInSharedPrefs() { + lifecycleScope.launch { + if (isServerReachable(Utilities.getUrl())) { + startUpload("dashboard") + createAction(mRealm, "${profileDbHandler.userModel?.id}", null, "sync") + } + } + } + @SuppressLint("RestrictedApi") fun wifiStatusSwitch() { val resIcon = ContextCompat.getDrawable(this, R.drawable.goonline) @@ -128,7 +138,7 @@ abstract class DashboardElementActivity : SyncActivity(), FragmentManager.OnBack val intent = Intent(Settings.ACTION_WIFI_SETTINGS) startActivity(intent) if (mWifi?.isConnected == true) { - wifi.setWifiEnabled(false) + wifi.isWifiEnabled = false if (resIcon != null) { DrawableCompat.setTintMode(resIcon.mutate(), PorterDuff.Mode.SRC_ATOP) DrawableCompat.setTint(resIcon, ContextCompat.getColor(this, R.color.green)) @@ -136,7 +146,7 @@ abstract class DashboardElementActivity : SyncActivity(), FragmentManager.OnBack goOnline.icon = resIcon Toast.makeText(this, getString(R.string.wifi_is_turned_off_saving_battery_power), Toast.LENGTH_LONG).show() } else { - wifi.setWifiEnabled(true) + wifi.isWifiEnabled = true Toast.makeText(this, getString(R.string.turning_on_wifi_please_wait), Toast.LENGTH_LONG).show() Handler(Looper.getMainLooper()).postDelayed({ connectToWifi() }, 5000) if (resIcon != null) { diff --git a/app/src/main/java/org/ole/planet/myplanet/ui/sync/LoginActivity.kt b/app/src/main/java/org/ole/planet/myplanet/ui/sync/LoginActivity.kt index 7a0aca264f..1432276248 100644 --- a/app/src/main/java/org/ole/planet/myplanet/ui/sync/LoginActivity.kt +++ b/app/src/main/java/org/ole/planet/myplanet/ui/sync/LoginActivity.kt @@ -131,9 +131,9 @@ class LoginActivity : SyncActivity(), TeamListAdapter.OnItemClickListener { submitForm(activityLoginBinding.inputName.text.toString(), activityLoginBinding.inputPassword.text.toString()) } else { val builder = AlertDialog.Builder(this) - builder.setMessage("member " + activityLoginBinding.inputName.text.toString() + " is archived") + builder.setMessage("member ${activityLoginBinding.inputName.text} is archived") builder.setCancelable(false) - builder.setPositiveButton("Ok") { dialog: DialogInterface, _: Int -> + builder.setPositiveButton("ok") { dialog: DialogInterface, _: Int -> dialog.dismiss() activityLoginBinding.inputName.setText(R.string.empty_text) activityLoginBinding.inputPassword.setText(R.string.empty_text) diff --git a/app/src/main/java/org/ole/planet/myplanet/ui/sync/SyncActivity.kt b/app/src/main/java/org/ole/planet/myplanet/ui/sync/SyncActivity.kt index f7265cda84..d8f7eace03 100644 --- a/app/src/main/java/org/ole/planet/myplanet/ui/sync/SyncActivity.kt +++ b/app/src/main/java/org/ole/planet/myplanet/ui/sync/SyncActivity.kt @@ -6,12 +6,14 @@ import android.graphics.drawable.AnimationDrawable import android.os.Build import android.os.Bundle import android.text.* +import android.util.Log import android.view.* import android.webkit.URLUtil import android.widget.* import androidx.annotation.RequiresApi import androidx.appcompat.app.AlertDialog import androidx.appcompat.widget.SwitchCompat +import androidx.lifecycle.lifecycleScope import androidx.localbroadcastmanager.content.LocalBroadcastManager import androidx.preference.PreferenceManager import androidx.recyclerview.widget.LinearLayoutManager @@ -37,6 +39,7 @@ import org.ole.planet.myplanet.datamanager.* import org.ole.planet.myplanet.datamanager.ApiClient.client import org.ole.planet.myplanet.datamanager.Service.* import org.ole.planet.myplanet.model.* +import org.ole.planet.myplanet.model.RealmUserChallengeActions.Companion.createAction import org.ole.planet.myplanet.service.* import org.ole.planet.myplanet.ui.dashboard.DashboardActivity import org.ole.planet.myplanet.ui.team.AdapterTeam.OnUserSelectedListener @@ -70,7 +73,7 @@ abstract class SyncActivity : ProcessUserDataActivity(), SyncListener, CheckVers private lateinit var syncSwitch: SwitchCompat private var connectionResult = false lateinit var mRealm: Realm - private lateinit var editor: SharedPreferences.Editor + lateinit var editor: SharedPreferences.Editor private var syncTimeInterval = intArrayOf(60 * 60, 3 * 60 * 60) lateinit var syncIcon: ImageView lateinit var syncIconDrawable: AnimationDrawable @@ -187,44 +190,98 @@ abstract class SyncActivity : ProcessUserDataActivity(), SyncListener, CheckVers } @Throws(Exception::class) - fun isServerReachable(processedUrl: String?): Boolean { - customProgressDialog?.setText(getString(R.string.connecting_to_server)) - customProgressDialog?.show() - val apiInterface = client?.create(ApiInterface::class.java) - apiInterface?.isPlanetAvailable("$processedUrl/_all_dbs")?.enqueue(object : Callback { - override fun onResponse(call: Call, response: Response) { - try { - customProgressDialog?.dismiss() - val ss = response.body()?.string() - val myList = ss?.split(",".toRegex())?.dropLastWhile { it.isEmpty() }?.let { listOf(*it.toTypedArray()) } +// fun isServerReachable(processedUrl: String?): Boolean { +// customProgressDialog?.setText(getString(R.string.connecting_to_server)) +// customProgressDialog?.show() +// val apiInterface = client?.create(ApiInterface::class.java) +// apiInterface?.isPlanetAvailable("$processedUrl/_all_dbs")?.enqueue(object : Callback { +// override fun onResponse(call: Call, response: Response) { +// try { +// customProgressDialog?.dismiss() +// val ss = response.body()?.string() +// val myList = ss?.split(",".toRegex())?.dropLastWhile { it.isEmpty() }?.let { listOf(*it.toTypedArray()) } +// if ((myList?.size ?: 0) < 8) { +// alertDialogOkay(getString(R.string.check_the_server_address_again_what_i_connected_to_wasn_t_the_planet_server)) +// } else { +// startSync() +// } +// } catch (e: Exception) { +// e.printStackTrace() +// syncFailed = true +// if (extractProtocol("$processedUrl") == context.getString(R.string.http_protocol)) { +// alertDialogOkay(getString(R.string.device_couldn_t_reach_local_server)) +// } else if (extractProtocol("$processedUrl") == context.getString(R.string.https_protocol)) { +// alertDialogOkay(getString(R.string.device_couldn_t_reach_nation_server)) +// } +// customProgressDialog?.dismiss() +// } +// } +// +// override fun onFailure(call: Call, t: Throwable) { +// syncFailed = true +// if (extractProtocol("$processedUrl") == context.getString(R.string.http_protocol)) { +// alertDialogOkay(getString(R.string.device_couldn_t_reach_local_server)) +// } else if (extractProtocol("$processedUrl") == context.getString(R.string.https_protocol)) { +// alertDialogOkay(getString(R.string.device_couldn_t_reach_nation_server)) +// } +// customProgressDialog?.dismiss() +// } +// }) +// return connectionResult +// } + + suspend fun isServerReachable(processedUrl: String?): Boolean = withContext(Dispatchers.IO) { + try { + withContext(Dispatchers.Main) { + customProgressDialog?.setText(getString(R.string.connecting_to_server)) + customProgressDialog?.show() + } + + val apiInterface = client?.create(ApiInterface::class.java) + val response = apiInterface?.isPlanetAvailable("$processedUrl/_all_dbs")?.execute() + + response?.let { + if (it.isSuccessful) { + val myList = it.body()?.string()?.split(",")?.dropLastWhile { it.isEmpty() } if ((myList?.size ?: 0) < 8) { - alertDialogOkay(getString(R.string.check_the_server_address_again_what_i_connected_to_wasn_t_the_planet_server)) + withContext(Dispatchers.Main) { + alertDialogOkay(getString(R.string.check_the_server_address_again_what_i_connected_to_wasn_t_the_planet_server)) + } + false } else { - startSync() - } - } catch (e: Exception) { - e.printStackTrace() - syncFailed = true - if (extractProtocol("$processedUrl") == context.getString(R.string.http_protocol)) { - alertDialogOkay(getString(R.string.device_couldn_t_reach_local_server)) - } else if (extractProtocol("$processedUrl") == context.getString(R.string.https_protocol)) { - alertDialogOkay(getString(R.string.device_couldn_t_reach_nation_server)) + withContext(Dispatchers.Main) { + startSync() + } + true } - customProgressDialog?.dismiss() + } else { + handleServerError() + false } + } ?: run { + handleServerError() + false + } + } catch (e: Exception) { + e.printStackTrace() + handleServerError() + false + } finally { + withContext(Dispatchers.Main) { + customProgressDialog?.dismiss() } + } + } - override fun onFailure(call: Call, t: Throwable) { - syncFailed = true - if (extractProtocol("$processedUrl") == context.getString(R.string.http_protocol)) { - alertDialogOkay(getString(R.string.device_couldn_t_reach_local_server)) - } else if (extractProtocol("$processedUrl") == context.getString(R.string.https_protocol)) { - alertDialogOkay(getString(R.string.device_couldn_t_reach_nation_server)) - } - customProgressDialog?.dismiss() - } - }) - return connectionResult + private suspend fun handleServerError() { + withContext(Dispatchers.Main) { + syncFailed = true + if (extractProtocol(processedUrl) == getString(R.string.http_protocol)) { + alertDialogOkay(getString(R.string.device_couldn_t_reach_local_server)) + } else if (extractProtocol(processedUrl) == getString(R.string.https_protocol)) { + alertDialogOkay(getString(R.string.device_couldn_t_reach_nation_server)) + } + } } private fun dateCheck(dialog: MaterialDialog) { @@ -397,11 +454,7 @@ abstract class SyncActivity : ProcessUserDataActivity(), SyncListener, CheckVers val daysDiff = TimeUnit.MILLISECONDS.toDays(msDiff) return if (daysDiff >= maxDays) { val alertDialogBuilder = AlertDialog.Builder(this, R.style.AlertDialogTheme) - alertDialogBuilder.setMessage( - getString(R.string.it_has_been_more_than) + (daysDiff - 1) + getString( - R.string.days_since_you_last_synced_this_device - ) + getString(R.string.connect_it_to_the_server_over_wifi_and_sync_it_to_reactivate_this_tablet) - ) + alertDialogBuilder.setMessage("${getString(R.string.it_has_been_more_than)}${(daysDiff - 1)}${getString(R.string.days_since_you_last_synced_this_device)}${getString(R.string.connect_it_to_the_server_over_wifi_and_sync_it_to_reactivate_this_tablet)}") alertDialogBuilder.setPositiveButton(R.string.okay) { _: DialogInterface?, _: Int -> Toast.makeText(applicationContext, getString(R.string.connect_to_the_server_over_wifi_and_sync_your_device_to_continue), Toast.LENGTH_LONG).show() } @@ -414,6 +467,25 @@ abstract class SyncActivity : ProcessUserDataActivity(), SyncListener, CheckVers fun onLogin() { val handler = UserProfileDbHandler(this) + + val userId = handler.userModel?.id + if (userId != null && userId.startsWith("guest") == false) { + Log.d("okuro", "called") + val latestAction = mRealm.where(RealmUserChallengeActions::class.java) + .equalTo("userId", userId).sort("time", Sort.DESCENDING).findFirst() + + val currentTime = System.currentTimeMillis() + val thresholdTime = 24 * 60 * 60 * 1000 + + if (latestAction == null) { + createAction(mRealm, userId, null, "login") + } else { + if (currentTime - latestAction.time >= thresholdTime) { + createAction(mRealm, userId, null, "login") + } + } + } + handler.onLogin() handler.onDestroy() editor.putBoolean(Constants.KEY_LOGIN, true).commit() @@ -590,7 +662,7 @@ abstract class SyncActivity : ProcessUserDataActivity(), SyncListener, CheckVers editor.putString("serverProtocol", protocol).apply() if (serverCheck) { performSync(dialog) - } }, { _, _ -> + }}, { _, _ -> clearDataDialog(getString(R.string.you_want_to_connect_to_a_different_server), false) { serverAddressAdapter?.revertSelection() } @@ -797,11 +869,13 @@ abstract class SyncActivity : ProcessUserDataActivity(), SyncListener, CheckVers private fun continueSyncProcess() { try { - if (isSync) { - isServerReachable(processedUrl) - } else if (forceSync) { - isServerReachable(processedUrl) - startUpload("login") + lifecycleScope.launch { + if (isSync) { + isServerReachable(processedUrl) + } else if (forceSync) { + isServerReachable(processedUrl) + startUpload("login") + } } } catch (e: Exception) { e.printStackTrace() diff --git a/app/src/main/java/org/ole/planet/myplanet/utilities/Markdown.kt b/app/src/main/java/org/ole/planet/myplanet/utilities/Markdown.kt index ff9e1a60d9..d250657cb9 100644 --- a/app/src/main/java/org/ole/planet/myplanet/utilities/Markdown.kt +++ b/app/src/main/java/org/ole/planet/myplanet/utilities/Markdown.kt @@ -48,7 +48,7 @@ object Markdown { .usePlugin(object : AbstractMarkwonPlugin() { override fun configure(registry: MarkwonPlugin.Registry) { registry.require(ImagesPlugin::class.java) { imagesPlugin -> - imagesPlugin.addSchemeHandler(FileSchemeHandler.create()) + imagesPlugin.addSchemeHandler(FileSchemeHandler.createWithAssets(context.assets)) imagesPlugin.addSchemeHandler(NetworkSchemeHandler.create()) imagesPlugin.addSchemeHandler(OkHttpNetworkSchemeHandler.create()) } diff --git a/app/src/main/java/org/ole/planet/myplanet/utilities/MarkdownDialog.kt b/app/src/main/java/org/ole/planet/myplanet/utilities/MarkdownDialog.kt new file mode 100644 index 0000000000..b10b87fc9b --- /dev/null +++ b/app/src/main/java/org/ole/planet/myplanet/utilities/MarkdownDialog.kt @@ -0,0 +1,157 @@ +package org.ole.planet.myplanet.utilities + +import android.os.Bundle +import android.text.Spannable +import android.text.method.LinkMovementMethod +import android.text.style.URLSpan +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.DialogFragment +import com.mikepenz.materialdrawer.Drawer +import io.realm.Sort +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import org.ole.planet.myplanet.R +import org.ole.planet.myplanet.callback.OnHomeItemClickListener +import org.ole.planet.myplanet.databinding.DialogCampaignChallengeBinding +import org.ole.planet.myplanet.model.RealmUserChallengeActions +import org.ole.planet.myplanet.ui.community.CommunityTabFragment +import org.ole.planet.myplanet.ui.courses.TakeCourseFragment +import org.ole.planet.myplanet.ui.dashboard.DashboardActivity +import org.ole.planet.myplanet.ui.sync.DashboardElementActivity +import org.ole.planet.myplanet.utilities.Markdown.setMarkdownText + +class MarkdownDialog : DialogFragment() { + private lateinit var dialogCampaignChallengeBinding: DialogCampaignChallengeBinding + private var markdownContent: String = "" + private var courseStatus: String = "" + private var voiceCount: Int = 0 + + companion object { + private const val ARG_MARKDOWN_CONTENT = "markdown_content" + private const val ARG_COURSE_STATUS = "course_status" + private const val ARG_VOICE_COUNT = "voice_count" + + fun newInstance(markdownContent: String, courseStatus: String, voiceCount: Int): MarkdownDialog { + val fragment = MarkdownDialog() + val args = Bundle().apply { + putString(ARG_MARKDOWN_CONTENT, markdownContent) + putString(ARG_COURSE_STATUS, courseStatus) + putInt(ARG_VOICE_COUNT, voiceCount) + } + fragment.arguments = args + return fragment + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + markdownContent = arguments?.getString(ARG_MARKDOWN_CONTENT) ?: "" + courseStatus = arguments?.getString(ARG_COURSE_STATUS) ?: "" + voiceCount = arguments?.getInt(ARG_VOICE_COUNT, 0) ?: 0 + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + dialogCampaignChallengeBinding = DialogCampaignChallengeBinding.inflate(inflater, container, false) + return dialogCampaignChallengeBinding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + setupMarkdown() + setupCourseButton((activity as DashboardActivity).result) + dialogCampaignChallengeBinding.markdownTextView.movementMethod = LinkMovementMethod.getInstance() + val textWithSpans = dialogCampaignChallengeBinding.markdownTextView.text + if (textWithSpans is Spannable) { + val urlSpans = textWithSpans.getSpans(0, textWithSpans.length, URLSpan::class.java) + for (urlSpan in urlSpans) { + val start = textWithSpans.getSpanStart(urlSpan) + val end = textWithSpans.getSpanEnd(urlSpan) + val dynamicTitle = textWithSpans.subSequence(start, end).toString() + textWithSpans.setSpan(CustomClickableSpan(urlSpan.url, dynamicTitle, requireActivity()), start, end, textWithSpans.getSpanFlags(urlSpan)) + textWithSpans.removeSpan(urlSpan) + } + } + setupCloseButton() + } + + override fun onStart() { + super.onStart() + val dialog = dialog ?: return + + dialog.window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) + } + + private fun setupMarkdown() { + setMarkdownText(dialogCampaignChallengeBinding.markdownTextView, markdownContent) + } + + private fun setupCourseButton(drawer: Drawer?) { + dialogCampaignChallengeBinding.btnStart.apply { + val isCompleted = courseStatus.contains("terminado") && + voiceCount >= 1 && + (activity as? DashboardActivity)?.mRealm?.let { realm -> + val lastPrereqAction = realm.where(RealmUserChallengeActions::class.java) + .equalTo("userId", (activity as? DashboardActivity)?.user?.id) + .`in`("actionType", arrayOf("voice", "courseComplete")) + .sort("time", Sort.DESCENDING) + .findFirst() + ?.time ?: 0 + + realm.where(RealmUserChallengeActions::class.java) + .equalTo("userId", (activity as? DashboardActivity)?.user?.id) + .equalTo("actionType", "sync") + .greaterThan("time", lastPrereqAction) + .count() > 0 + } == true + + visibility = if (isCompleted) View.GONE else View.VISIBLE + + val buttonText = when { + courseStatus.contains("no iniciado") -> context.getString(R.string.start) + courseStatus.contains("terminado") && voiceCount < 1 -> context.getString(R.string.next) + courseStatus.contains("terminado") && voiceCount >= 1 -> context.getString(R.string.sync) + else -> context.getString(R.string.continuation) + } + + text = buttonText + setOnClickListener { + val courseId = "9517e3b45a5bb63e69bb8f269216974d" + when (buttonText) { + context.getString(R.string.start), context.getString(R.string.continuation) -> { + val fragment = TakeCourseFragment().apply { + arguments = Bundle().apply { + putString("id", courseId) + } + } + (activity as? OnHomeItemClickListener)?.openCallFragment(fragment) + } + context.getString(R.string.next) -> { + (activity as DashboardActivity).openCallFragment(CommunityTabFragment()) + } + context.getString(R.string.sync) -> { + CoroutineScope(Dispatchers.IO).launch { +// withContext(Dispatchers.Main) { + (activity as DashboardElementActivity).logSyncInSharedPrefs() +// } + } + } + } + if (drawer != null && drawer.isDrawerOpen) { + drawer.closeDrawer() + } + dismiss() + } + } + } + + private fun setupCloseButton() { + dialogCampaignChallengeBinding.closeButton.setOnClickListener { + dismiss() + } + } +} diff --git a/app/src/main/res/drawable/baseline_close_24.xml b/app/src/main/res/drawable/baseline_close_24.xml new file mode 100644 index 0000000000..56940e6fb8 --- /dev/null +++ b/app/src/main/res/drawable/baseline_close_24.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/layout/dialog_campaign_challenge.xml b/app/src/main/res/layout/dialog_campaign_challenge.xml new file mode 100644 index 0000000000..8dbd4a7e1a --- /dev/null +++ b/app/src/main/res/layout/dialog_campaign_challenge.xml @@ -0,0 +1,37 @@ + + + + + + + +