package com.thebookkeepingduo.feedingtracker.fragments import android.app.AlertDialog import android.content.Context import android.os.Bundle import android.os.Handler import android.os.Looper import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.Button import android.widget.EditText import android.widget.TextView import android.widget.Toast import androidx.activity.OnBackPressedCallback import androidx.appcompat.app.AppCompatDelegate import androidx.navigation.fragment.findNavController import com.google.firebase.analytics.ktx.analytics import com.google.firebase.database.DatabaseReference import com.google.firebase.database.FirebaseDatabase import com.google.firebase.ktx.Firebase //import com.thebookkeepingduo.feedingtracker.database.FeedingTrackerDBHelper import com.thebookkeepingduo.feedingtracker.databinding.FragmentHomeBinding import com.thebookkeepingduo.feedingtracker.models.FeedingRecords import java.text.SimpleDateFormat import java.util.* class HomeFragment : Fragment() { private var _binding : FragmentHomeBinding? = null private val binding get() = _binding!! private lateinit var firebaseRef: DatabaseReference private lateinit var startButton: Button private lateinit var stopButton: Button private lateinit var saveButton: Button private lateinit var dismissButton: Button private lateinit var totalTimeTextView: TextView private lateinit var totalOuncesTextView: TextView private lateinit var inputAmount: EditText private var startTime: Long = 0 private var stopTime: Long = 0 private var elapsedTime: Long = 0 private var isRunning: Boolean = false private var isStartButtonVisible: Boolean = true private var isSaveButtonVisible: Boolean = true private var isDismissButtonVisible: Boolean = false private var isStopButtonVisible: Boolean = false private var isTotalTimeTextViewVisible: Boolean = false private val timerRunnable = object : Runnable { override fun run() { if (isRunning) { elapsedTime = Calendar.getInstance().timeInMillis - startTime val seconds = (elapsedTime / 1000) % 60 val minutes = (elapsedTime / (1000 * 60)) % 60 val hours = (elapsedTime / (1000 * 60 * 60)) % 24 val elapsedTimeString = String.format("%02d:%02d:%02d", hours, minutes, seconds) totalTimeTextView.text = elapsedTimeString timerHandler.postDelayed(this, 1000L) } } } private val timerHandler = Handler(Looper.getMainLooper()) override fun onPause() { super.onPause() timerHandler.removeCallbacks(timerRunnable) } override fun onResume() { super.onResume() if (isRunning) { timerHandler.post(timerRunnable) } } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val callback = object : OnBackPressedCallback(true) { override fun handleOnBackPressed() { // Navigate back to the previous screen findNavController().navigateUp() } } requireActivity().onBackPressedDispatcher.addCallback(this, callback) } override fun onAttach(context: Context) { super.onAttach(context) } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?, ): View { _binding = FragmentHomeBinding.inflate(inflater, container, false) firebaseRef = FirebaseDatabase.getInstance().getReference("FeedingRecords") startButton = binding.buttonStart stopButton = binding.buttonStop saveButton = binding.buttonSave dismissButton = binding.buttonDismiss totalTimeTextView = binding.textViewTotalTime totalOuncesTextView = binding.textViewTotalOunces inputAmount = binding.inputAmount binding.buttonStart.setOnClickListener { // Firebase.analytics.logEvent("log_startButton_click", null) startTimer() } binding.buttonStop.setOnClickListener { stopTimer() } binding.buttonSave.setOnClickListener { val amount = inputAmount.text.toString() // Toast.makeText(requireContext(), "${amount}", Toast.LENGTH_SHORT).show() val seconds = (elapsedTime / 1000) % 60 val minutes = (elapsedTime / (1000 * 60)) % 60 val hours = (elapsedTime / (1000 * 60 * 60)) % 24 val elapsedTimeString = String.format("%02d:%02d:%02d", hours, minutes, seconds) if ((amount.isEmpty() || amount == "0") && (elapsedTimeString == "00:00:00")) { val builder = AlertDialog.Builder(requireContext()) builder.setTitle("Error, not able to Save:") builder.setMessage("When there is Zero, or no value in amount, and no time has elapsed.") builder.setPositiveButton("OK") { dialog, _ -> dialog.dismiss() } val dialog: AlertDialog = builder.create() dialog.show() dismissTimer() }else{ saveToDB() } } binding.buttonDismiss.setOnClickListener { dismissTimer() } // | // requireActivity().recreate() val toggleNightModeButton: Button = binding.toggleNightModeButton toggleNightModeButton.setOnClickListener { toggleNightMode() } if (savedInstanceState != null) { isRunning = savedInstanceState.getBoolean("isRunning") elapsedTime = savedInstanceState.getLong("elapsedTime") startTime = savedInstanceState.getLong("startTime") // Assuming you have boolean variables for visibility isStartButtonVisible = savedInstanceState.getBoolean("isStartButtonVisible") isStopButtonVisible = savedInstanceState.getBoolean("isStopButtonVisible") isSaveButtonVisible = savedInstanceState.getBoolean("isSaveButtonVisible") isDismissButtonVisible = savedInstanceState.getBoolean("isDismissButtonVisible") isTotalTimeTextViewVisible = savedInstanceState.getBoolean("isTotalTimeTextViewVisible") startButton.visibility = if (isStartButtonVisible) View.VISIBLE else View.GONE dismissButton.visibility = if (isDismissButtonVisible) View.VISIBLE else View.GONE saveButton.visibility = if (isSaveButtonVisible) View.VISIBLE else View.GONE stopButton.visibility = if (isStopButtonVisible) View.VISIBLE else View.GONE totalTimeTextView.visibility = if (isTotalTimeTextViewVisible) View.VISIBLE else View.GONE if (isRunning) { timerHandler.post(timerRunnable) } } return binding.root } override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) outState.putBoolean("isRunning", isRunning) outState.putLong("elapsedTime", elapsedTime) outState.putBoolean("isTotalTimeTextViewVisible", isTotalTimeTextViewVisible) outState.putBoolean("isStartButtonVisible", isStartButtonVisible) outState.putBoolean("isSaveButtonVisible", isSaveButtonVisible) outState.putBoolean("isStopButtonVisible", isStopButtonVisible) outState.putBoolean("isDismissButtonVisible", isDismissButtonVisible) } private fun updateNightMode() { val sharedPreferences = requireActivity().getSharedPreferences("settings", Context.MODE_PRIVATE) val isNightModeEnabled = sharedPreferences.getBoolean("night_mode", false) if (isNightModeEnabled) { AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) } else { AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO) } } private fun toggleNightMode() { val sharedPreferences = requireActivity().getSharedPreferences("settings", Context.MODE_PRIVATE) val isNightModeEnabled = sharedPreferences.getBoolean("night_mode", false) val editor = sharedPreferences.edit() if (isNightModeEnabled) { editor.putBoolean("night_mode", false) } else { editor.putBoolean("night_mode", true) } editor.apply() // Update the night mode based on the new value in SharedPreferences updateNightMode() // You might need to recreate the activity to apply the new theme // requireActivity().recreate() } private fun saveToDB() { val calendar = Calendar.getInstance() val startDate = calendar.time val timestamp = startDate.time // Reference to your Firebase Realtime Database val amount = inputAmount.text if (amount.isNotEmpty()) { val ounces = inputAmount.text.toString() val feedingRecordId = firebaseRef.push().key!! val feedingRecords = FeedingRecords(feedingRecordId,startTime,timestamp,elapsedTime,ounces.toDouble()) // Toast.makeText(requireContext(), "Saved4!", Toast.LENGTH_SHORT).show() firebaseRef.child(feedingRecordId).setValue(feedingRecords) .addOnCompleteListener { Toast.makeText(context, "Saved3!", Toast.LENGTH_SHORT).show() } .addOnFailureListener { Toast.makeText(context, "error ${it.message}", Toast.LENGTH_SHORT).show() } } else { // Toast.makeText(requireContext(), "Saved5!", Toast.LENGTH_SHORT).show() val ounces: Double? = null val feedingRecordId = firebaseRef.push().key!! val feedingRecords = FeedingRecords(feedingRecordId,startTime,timestamp,elapsedTime,ounces) firebaseRef.child(feedingRecordId).setValue(feedingRecords) .addOnCompleteListener { Toast.makeText(context, "Saved2!", Toast.LENGTH_SHORT).show() } .addOnFailureListener { Toast.makeText(context, "error ${it.message}", Toast.LENGTH_SHORT).show() } } isRunning = false isSaveButtonVisible = false isStartButtonVisible = true isDismissButtonVisible = false isTotalTimeTextViewVisible = false startButton.visibility = View.VISIBLE dismissButton.visibility = View.GONE totalTimeTextView.visibility = View.GONE "00:00:00".also { totalTimeTextView.text = it } inputAmount.text.clear() startTime = 0L } private fun dismissTimer() { ... } ...