diff --git a/app/build.gradle b/app/build.gradle index f64ce719b..66009a4a8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -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' diff --git a/app/src/main/java/org/ole/planet/myplanet/MainApplication.kt b/app/src/main/java/org/ole/planet/myplanet/MainApplication.kt index 3b5a5971c..24f8b119b 100644 --- a/app/src/main/java/org/ole/planet/myplanet/MainApplication.kt +++ b/app/src/main/java/org/ole/planet/myplanet/MainApplication.kt @@ -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 { @@ -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?) { @@ -129,6 +137,7 @@ class MainApplication : Application(), Application.ActivityLifecycleCallbacks { responseCode in 200..299 } catch (e: Exception) { + e.printStackTrace() false } } @@ -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 diff --git a/app/src/main/java/org/ole/planet/myplanet/datamanager/MyDownloadService.kt b/app/src/main/java/org/ole/planet/myplanet/datamanager/MyDownloadService.kt index 4c047ecac..95dda24fb 100644 --- a/app/src/main/java/org/ole/planet/myplanet/datamanager/MyDownloadService.kt +++ b/app/src/main/java/org/ole/planet/myplanet/datamanager/MyDownloadService.kt @@ -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 @@ -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 + } + } } } } diff --git a/app/src/main/java/org/ole/planet/myplanet/model/RealmCourseActivity.kt b/app/src/main/java/org/ole/planet/myplanet/model/RealmCourseActivity.kt index ed3abb8d5..a2ed5916c 100644 --- a/app/src/main/java/org/ole/planet/myplanet/model/RealmCourseActivity.kt +++ b/app/src/main/java/org/ole/planet/myplanet/model/RealmCourseActivity.kt @@ -35,18 +35,17 @@ open class RealmCourseActivity : RealmObject() { @JvmStatic fun createActivity(realm: Realm, userModel: RealmUserModel?, course: RealmMyCourse?) { if (!realm.isInTransaction) { - realm.beginTransaction() + realm.executeTransaction { + val activity = it.createObject(RealmCourseActivity::class.java, UUID.randomUUID().toString()) + activity.type = "visit" + activity.title = course?.courseTitle + activity.courseId = course?.courseId + activity.time = Date().time + activity.parentCode = userModel?.parentCode + activity.createdOn = userModel?.planetCode + activity.user = userModel?.name + } } - val activity = realm.createObject(RealmCourseActivity::class.java, UUID.randomUUID().toString()) - activity.type = "visit" - activity.title = course?.courseTitle - activity.courseId = course?.courseId - activity.time = Date().time - activity.parentCode = userModel?.parentCode - activity.createdOn = userModel?.planetCode - activity.createdOn = userModel?.planetCode - activity.user = userModel?.name - realm.commitTransaction() } @JvmStatic @@ -64,4 +63,4 @@ open class RealmCourseActivity : RealmObject() { return ob } } -} \ No newline at end of file +} 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 621469a78..c1cf2115d 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 @@ -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 @@ -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 @@ -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() { @@ -93,6 +101,7 @@ class UserProfileDbHandler(context: Context) { 0 } } + fun getLastVisit(m: RealmUserModel): String { val realm = Realm.getDefaultInstance() realm.beginTransaction() @@ -107,6 +116,7 @@ class UserProfileDbHandler(context: Context) { "No logout record found" } } + fun setResourceOpenCount(item: RealmMyLibrary) { setResourceOpenCount(item, KEY_RESOURCE_OPEN) } @@ -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 @@ -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}" diff --git a/app/src/main/java/org/ole/planet/myplanet/ui/courses/TakeCourseFragment.kt b/app/src/main/java/org/ole/planet/myplanet/ui/courses/TakeCourseFragment.kt index 9fe0d1156..e0d42517f 100644 --- a/app/src/main/java/org/ole/planet/myplanet/ui/courses/TakeCourseFragment.kt +++ b/app/src/main/java/org/ole/planet/myplanet/ui/courses/TakeCourseFragment.kt @@ -141,7 +141,7 @@ class TakeCourseFragment : Fragment(), ViewPager.OnPageChangeListener, View.OnCl val i = getCurrentProgress(steps, mRealm, userModel?.id, courseId) if (i < steps.size) fragmentTakeCourseBinding.courseProgress.secondaryProgress = i + 1 fragmentTakeCourseBinding.courseProgress.progress = i - fragmentTakeCourseBinding.tvStep.text = String.format(Locale.getDefault(),getString(R.string.step) + " %d/%d", position, steps.size) + fragmentTakeCourseBinding.tvStep.text = String.format(Locale.getDefault(),"${getString(R.string.step)} %d/%d", position, steps.size) } private fun changeNextButtonState(position: Int) { @@ -157,7 +157,7 @@ class TakeCourseFragment : Fragment(), ViewPager.OnPageChangeListener, View.OnCl override fun onPageScrollStateChanged(state: Int) {} private fun onClickNext() { - fragmentTakeCourseBinding.tvStep.text = String.format(Locale.getDefault(),getString(R.string.step)+ " %d/%d", fragmentTakeCourseBinding.viewPager2.currentItem, currentCourse?.courseSteps?.size) + fragmentTakeCourseBinding.tvStep.text = String.format(Locale.getDefault(),"${getString(R.string.step)} %d/%d", fragmentTakeCourseBinding.viewPager2.currentItem, currentCourse?.courseSteps?.size) if (fragmentTakeCourseBinding.viewPager2.currentItem == currentCourse?.courseSteps?.size) { fragmentTakeCourseBinding.nextStep.setTextColor(ContextCompat.getColor(requireContext(), R.color.md_grey_500)) fragmentTakeCourseBinding.nextStep.visibility = View.GONE @@ -166,7 +166,7 @@ class TakeCourseFragment : Fragment(), ViewPager.OnPageChangeListener, View.OnCl } private fun onClickPrevious() { - fragmentTakeCourseBinding.tvStep.text = String.format(Locale.getDefault(),getString(R.string.step) + " %d/%d", fragmentTakeCourseBinding.viewPager2.currentItem - 1, currentCourse?.courseSteps?.size) + fragmentTakeCourseBinding.tvStep.text = String.format(Locale.getDefault(),"${getString(R.string.step)} %d/%d", fragmentTakeCourseBinding.viewPager2.currentItem - 1, currentCourse?.courseSteps?.size) if (fragmentTakeCourseBinding.viewPager2.currentItem - 1 == 0) { fragmentTakeCourseBinding.previousStep.visibility = View.GONE fragmentTakeCourseBinding.nextStep.visibility = View.VISIBLE @@ -217,7 +217,6 @@ class TakeCourseFragment : Fragment(), ViewPager.OnPageChangeListener, View.OnCl val realm = DatabaseService(requireActivity()).realmInstance val user = UserProfileDbHandler(requireActivity()).userModel val courseProgressMap = RealmCourseProgress.getCourseProgress(realm, user?.id) - // Extract the current progress for the specific courseId val courseProgress = courseProgressMap[courseId]?.asJsonObject?.get("current")?.asInt return courseProgress ?: 0 } 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 bab558e5d..635066c05 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 @@ -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 @@ -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)) 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 7b972d4a0..ae0cd4534 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 @@ -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 @@ -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)) diff --git a/app/src/main/java/org/ole/planet/myplanet/ui/feedback/FeedbackDetailActivity.kt b/app/src/main/java/org/ole/planet/myplanet/ui/feedback/FeedbackDetailActivity.kt index d13de41fe..0f29f8d60 100644 --- a/app/src/main/java/org/ole/planet/myplanet/ui/feedback/FeedbackDetailActivity.kt +++ b/app/src/main/java/org/ole/planet/myplanet/ui/feedback/FeedbackDetailActivity.kt @@ -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 @@ -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) diff --git a/app/src/main/java/org/ole/planet/myplanet/ui/myhealth/AddMyHealthActivity.kt b/app/src/main/java/org/ole/planet/myplanet/ui/myhealth/AddMyHealthActivity.kt index 75f277d10..a5fabaf09 100644 --- a/app/src/main/java/org/ole/planet/myplanet/ui/myhealth/AddMyHealthActivity.kt +++ b/app/src/main/java/org/ole/planet/myplanet/ui/myhealth/AddMyHealthActivity.kt @@ -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 @@ -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 @@ -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( + 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() } diff --git a/app/src/main/java/org/ole/planet/myplanet/ui/resources/AdapterResource.kt b/app/src/main/java/org/ole/planet/myplanet/ui/resources/AdapterResource.kt index 5640656e0..a259a71a4 100644 --- a/app/src/main/java/org/ole/planet/myplanet/ui/resources/AdapterResource.kt +++ b/app/src/main/java/org/ole/planet/myplanet/ui/resources/AdapterResource.kt @@ -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) 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 b1736eaa0..62a21a1a2 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 @@ -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 @@ -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) } @@ -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) @@ -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 } } @@ -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() { @@ -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) } } @@ -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 } } 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 a24d2b667..68f71992f 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 @@ -19,9 +19,11 @@ import androidx.recyclerview.widget.RecyclerView import com.afollestad.materialdialogs.* import com.google.android.material.textfield.TextInputLayout import io.realm.* +import kotlinx.coroutines.launch import kotlinx.serialization.json.Json import okhttp3.ResponseBody import org.ole.planet.myplanet.BuildConfig +import org.ole.planet.myplanet.MainApplication.Companion.applicationScope import org.ole.planet.myplanet.MainApplication.Companion.context import org.ole.planet.myplanet.MainApplication.Companion.createLog import org.ole.planet.myplanet.R @@ -343,7 +345,9 @@ abstract class SyncActivity : ProcessUserDataActivity(), SyncListener, CheckVers syncIconDrawable.stop() syncIconDrawable.selectDrawable(0) syncIcon.invalidateDrawable(syncIconDrawable) - createLog("synced successfully") + applicationScope.launch { + createLog("synced successfully") + } showSnack(findViewById(android.R.id.content), getString(R.string.sync_completed)) downloadAdditionalResources() if (defaultPref.getBoolean("beta_auto_download", false)) { diff --git a/app/src/main/res/layout/activity_add_my_health.xml b/app/src/main/res/layout/activity_add_my_health.xml index b43da97cc..d0d2d4649 100644 --- a/app/src/main/res/layout/activity_add_my_health.xml +++ b/app/src/main/res/layout/activity_add_my_health.xml @@ -5,16 +5,19 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:padding="@dimen/padding_large" - tools:context=".ui.myhealth.AddMyHealthActivity"> + tools:context=".ui.myhealth.AddMyHealthActivity" + android:background="@color/secondary_bg"> + android:layout_height="match_parent" + android:background="@color/secondary_bg"> + android:orientation="vertical" + android:background="@color/secondary_bg"> + android:layout_weight="1" + android:textColorHint="@color/hint_color"> + android:backgroundTint="@color/daynight_textColor" + android:textColor="@color/daynight_textColor" /> + android:layout_weight="1" + android:textColorHint="@color/hint_color"> + android:backgroundTint="@color/daynight_textColor" + android:textColor="@color/daynight_textColor" /> + android:layout_weight="1" + android:textColorHint="@color/hint_color"> + android:backgroundTint="@color/daynight_textColor" + android:textColor="@color/daynight_textColor" /> - + android:layout_weight="1" + android:textColorHint="@color/hint_color"> + android:backgroundTint="@color/daynight_textColor" + android:textColor="@color/daynight_textColor" /> + android:layout_weight="1" + android:textColorHint="@color/hint_color"> + android:backgroundTint="@color/daynight_textColor" + android:textColor="@color/daynight_textColor" /> @@ -107,28 +119,32 @@ android:id="@+id/et_birthplace" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_weight="1"> + android:layout_weight="1" + android:textColorHint="@color/hint_color"> + android:backgroundTint="@color/daynight_textColor" + android:textColor="@color/daynight_textColor" /> + android:layout_weight="1" + android:textColorHint="@color/hint_color"> + android:backgroundTint="@color/daynight_textColor" + android:textColor="@color/daynight_textColor" /> @@ -140,43 +156,48 @@ android:id="@+id/et_emergency" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_weight="1"> + android:layout_weight="1" + android:textColorHint="@color/hint_color"> + android:backgroundTint="@color/daynight_textColor" + android:textColor="@color/daynight_textColor" /> + android:padding="@dimen/padding_large" /> + android:layout_weight="1" + android:textColorHint="@color/hint_color"> + android:backgroundTint="@color/daynight_textColor" + android:textColor="@color/daynight_textColor" /> + android:layout_height="wrap_content" + android:textColorHint="@color/hint_color"> + android:backgroundTint="@color/daynight_textColor" + android:textColor="@color/daynight_textColor" /> + android:layout_height="wrap_content" + android:textColorHint="@color/hint_color"> + android:backgroundTint="@color/daynight_textColor" + android:textColor="@color/daynight_textColor" />