package com.shukria.kiosklauncher.ui import android.content.Context import android.os.Bundle import android.text.TextUtils import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.EditText import android.widget.ImageButton import android.widget.Toast import androidx.appcompat.widget.SwitchCompat import androidx.fragment.app.Fragment import com.google.android.material.button.MaterialButton import com.shukria.kiosklauncher.R import com.shukria.kiosklauncher.service.MQTTService import com.shukria.kiosklauncher.util.WifiController class SettingsFragment : Fragment() { private val TAG = "SettingsFragment" private lateinit var btnBack: ImageButton private lateinit var editHeartbeatInterval: EditText private lateinit var switchWifiCheck: SwitchCompat private lateinit var btnSave: MaterialButton override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { val view = inflater.inflate(R.layout.fragment_settings, container, false) btnBack = view.findViewById(R.id.btn_back) editHeartbeatInterval = view.findViewById(R.id.edit_heartbeat_interval) switchWifiCheck = view.findViewById(R.id.switch_wifi_check) btnSave = view.findViewById(R.id.btn_save) // Load existing preferences val prefs = requireContext().getSharedPreferences("settings_prefs", Context.MODE_PRIVATE) val savedSeconds = prefs.getInt("heartbeat_interval_seconds", -1) if (savedSeconds != -1) { editHeartbeatInterval.setText(savedSeconds.toString()) } else { editHeartbeatInterval.setText("30") // Default to 30 seconds to prevent empty validation failure } val wifiCheckSaved = prefs.getBoolean("wifi_check_enabled", false) Log.i(TAG, "Loading Wi-Fi check preference: wifi_check_enabled=$wifiCheckSaved") switchWifiCheck.isChecked = wifiCheckSaved // Save Wi-Fi check preference IMMEDIATELY when toggled by user click switchWifiCheck.setOnClickListener { val isChecked = switchWifiCheck.isChecked Log.i(TAG, "Wi-Fi check toggle clicked by user. New state: $isChecked") prefs.edit().putBoolean("wifi_check_enabled", isChecked).commit() Log.i(TAG, "Wi-Fi check preference saved: $isChecked (commit)") if (isChecked) { Log.i(TAG, "Wi-Fi check enabled – calling WifiController.disableWifi()") WifiController.disableWifi(requireContext()) } else { Log.i(TAG, "Wi-Fi check disabled – calling WifiController.allowWifi()") WifiController.allowWifi(requireContext()) } } btnBack.setOnClickListener { parentFragmentManager.popBackStack() } btnSave.setOnClickListener { val intervalStr = editHeartbeatInterval.text.toString().trim() if (TextUtils.isEmpty(intervalStr)) { Toast.makeText(requireContext(), "Please enter a valid interval in seconds", Toast.LENGTH_SHORT).show() return@setOnClickListener } try { val seconds = intervalStr.toInt() if (seconds <= 0) { Toast.makeText(requireContext(), "Interval must be greater than 0", Toast.LENGTH_SHORT).show() return@setOnClickListener } // Save heartbeat interval (Wi-Fi check is already saved via toggle listener) prefs.edit() .putInt("heartbeat_interval_seconds", seconds) .apply() Log.i(TAG, "Heartbeat interval saved: ${seconds}s") // Trigger MQTT service update MQTTService.updateHeartbeatInterval(requireContext()) Toast.makeText(requireContext(), "Settings saved successfully", Toast.LENGTH_SHORT).show() parentFragmentManager.popBackStack() } catch (e: NumberFormatException) { Toast.makeText(requireContext(), "Invalid number format", Toast.LENGTH_SHORT).show() } } return view } }