package com.smsgateway.app import android.Manifest import android.content.Intent import android.content.pm.PackageManager import android.os.Build import android.os.Bundle import android.widget.Toast import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AppCompatActivity import androidx.core.content.ContextCompat import com.smsgateway.app.databinding.ActivityMainBinding import com.smsgateway.app.util.Prefs class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding private lateinit var prefs: Prefs private val permissionLauncher = registerForActivityResult( ActivityResultContracts.RequestMultiplePermissions() ) { results -> val allGranted = results.values.all { it } val msg = if (allGranted) "تم منح كل الأذونات المطلوبة" else "بعض الأذونات لم تُمنح - التطبيق قد لا يعمل بشكل صحيح" Toast.makeText(this, msg, Toast.LENGTH_LONG).show() } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) prefs = Prefs(this) loadPrefsIntoUi() refreshStatus() binding.btnSave.setOnClickListener { saveUiIntoPrefs() Toast.makeText(this, "تم حفظ الإعدادات", Toast.LENGTH_SHORT).show() } binding.btnRequestPermissions.setOnClickListener { requestNeededPermissions() } binding.btnStart.setOnClickListener { saveUiIntoPrefs() if (!prefs.isConfigured()) { Toast.makeText(this, "أدخل رابط السيرفر ومفتاح Gateway أولًا", Toast.LENGTH_LONG).show() return@setOnClickListener } if (!hasRequiredPermissions()) { Toast.makeText(this, "لازم تمنح الأذونات المطلوبة أولًا", Toast.LENGTH_LONG).show() requestNeededPermissions() return@setOnClickListener } startGatewayService() Toast.makeText(this, "تم تشغيل الـ Gateway", Toast.LENGTH_SHORT).show() refreshStatus() } binding.btnStop.setOnClickListener { stopService(Intent(this, GatewayService::class.java)) prefs.serviceRunning = false Toast.makeText(this, "تم إيقاف الـ Gateway", Toast.LENGTH_SHORT).show() refreshStatus() } } override fun onResume() { super.onResume() refreshStatus() } private fun loadPrefsIntoUi() = with(binding) { etServerUrl.setText(prefs.serverUrl) etGatewayKey.setText(prefs.gatewayKey) etPollInterval.setText(prefs.pollIntervalSeconds.toString()) etSmtpHost.setText(prefs.smtpHost) etSmtpPort.setText(prefs.smtpPort.toString()) etSmtpUsername.setText(prefs.smtpUsername) etSmtpPassword.setText(prefs.smtpPassword) etSmtpFrom.setText(prefs.smtpFrom) cbSmtpSsl.isChecked = prefs.smtpUseSsl } private fun saveUiIntoPrefs() = with(binding) { prefs.serverUrl = etServerUrl.text.toString().trim() prefs.gatewayKey = etGatewayKey.text.toString().trim() prefs.pollIntervalSeconds = etPollInterval.text.toString().toIntOrNull() ?: 15 prefs.smtpHost = etSmtpHost.text.toString().trim() prefs.smtpPort = etSmtpPort.text.toString().toIntOrNull() ?: 587 prefs.smtpUsername = etSmtpUsername.text.toString().trim() prefs.smtpPassword = etSmtpPassword.text.toString() prefs.smtpFrom = etSmtpFrom.text.toString().trim() prefs.smtpUseSsl = cbSmtpSsl.isChecked } private fun refreshStatus() { val status = if (prefs.serviceRunning) "يعمل ✅" else "متوقف ⏸" val errorPart = if (prefs.lastError.isNotBlank()) "\nآخر خطأ: ${prefs.lastError}" else "" binding.tvStatus.text = "الحالة: $status\nآخر فحص: ${prefs.lastPollTime}$errorPart" } private fun startGatewayService() { val intent = Intent(this, GatewayService::class.java) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { startForegroundService(intent) } else { startService(intent) } } private fun requiredPermissions(): Array { val perms = mutableListOf(Manifest.permission.SEND_SMS) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { perms.add(Manifest.permission.POST_NOTIFICATIONS) } return perms.toTypedArray() } private fun hasRequiredPermissions(): Boolean = requiredPermissions().all { ContextCompat.checkSelfPermission(this, it) == PackageManager.PERMISSION_GRANTED } private fun requestNeededPermissions() { permissionLauncher.launch(requiredPermissions()) } }