Daily streak not updated

62 Views Asked by At

we are developing a water tracking app in Kotlin / Android Studio. Unfortunately, the achievements (reaching a daily water intake goal for x days in a row) are not being crossed off, I think? Could you help me? Thanks a lot!

Respective functions from AchievementsFragment.kt

    override fun onCreateView(
    inflater: LayoutInflater,
    container: ViewGroup?,
    savedInstanceState: Bundle?
): View {
    _binding = FragmentAchievementsBinding.inflate(inflater, container, false)

    // SharedPreferences
    sharedPreferences = requireActivity().getSharedPreferences("app_preferences", Context.MODE_PRIVATE)

    return binding.root
}

// Setting up database operations and listeners in onViewCreated
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)

    val database = AppDatabase.getDatabase(requireContext())
    val waterDao = database.waterDao()

    // Getting the daily water goal
    val dailyWaterGoal = sharedPreferences.getInt("dailyGoal", 2000)

    binding.infoButton.setOnClickListener {
        showInfoDialog()
    }

    // Fetching goal days and updating achievements
    viewLifecycleOwner.lifecycleScope.launch {
        val lastDayIntake = waterDao.getLastDayData()
        var streak = sharedPreferences.getInt("currentStreak", 0)

        if (lastDayIntake?.amount ?: 0 >= dailyWaterGoal) {
            streak++
            sharedPreferences.edit().putInt("currentStreak", streak).apply()
        } else {
            streak = 0
            sharedPreferences.edit().putInt("currentStreak", 0).apply()
        }
        updateAchievements(streak)
    }
}

// Method to update achievements based on number of days
private fun updateAchievements(numDays: Int) {
    updateAchievement(numDays, 3, binding.textAchievement1)
    updateAchievement(numDays, 5, binding.textAchievement2)
    updateAchievement(numDays, 10, binding.textAchievement3)
    updateAchievement(numDays, 30, binding.textAchievement4)
    updateAchievement(numDays, 180, binding.textAchievement5)
}

// Method to update achievements
private fun updateAchievement(numDays: Int, requiredDays: Int, textView: TextView) {
    if (numDays >= requiredDays) {
        textView.paintFlags = textView.paintFlags or Paint.STRIKE_THRU_TEXT_FLAG
    } else {
        textView.paintFlags = textView.paintFlags and Paint.STRIKE_THRU_TEXT_FLAG.inv()
    }
}

WaterDao.kt

interface WaterDao {

@Query("SELECT * FROM WaterIntake ORDER BY day, month, year DESC LIMIT 1")
suspend fun getLastDayData(): WaterIntake?

}

data class AmountSum( val date: Int, val totalAmount: Int )

0

There are 0 best solutions below