package `in`.caresoft.sahi import android.content.Intent import android.os.Bundle import android.provider.Settings import android.view.View import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.lifecycleScope import `in`.caresoft.sahi.databinding.ActivitySettingsBinding import kotlinx.coroutines.launch class SettingsActivity : AppCompatActivity() { private lateinit var ui: ActivitySettingsBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) ui = ActivitySettingsBinding.inflate(layoutInflater) setContentView(ui.root) ui.serverInput.setText(Prefs.server) ui.keyInput.setText(Prefs.accessKey) ui.saveButton.setOnClickListener { save() } ui.keyboardButton.setOnClickListener { // There is no way to enable an IME programmatically, by design. // Send them to the right settings screen instead of explaining it. startActivity(Intent(Settings.ACTION_INPUT_METHOD_SETTINGS)) } ui.forgetButton.setOnClickListener { androidx.appcompat.app.AlertDialog.Builder(this) .setTitle(R.string.forget_title) .setMessage(R.string.forget_body) .setPositiveButton(R.string.forget_confirm) { _, _ -> Prefs.clear() ui.serverInput.setText("") ui.keyInput.setText("") ui.status.text = getString(R.string.forgotten) } .setNegativeButton(android.R.string.cancel, null) .show() } } private fun save() { val server = ui.serverInput.text.toString().trim() val key = ui.keyInput.text.toString().trim() if (!server.startsWith("https://") && !server.startsWith("http://")) { ui.status.text = getString(R.string.address_needs_scheme) return } if (key.isEmpty()) { ui.status.text = getString(R.string.key_required) return } Prefs.server = server Prefs.accessKey = key ui.status.text = getString(R.string.checking) ui.progress.visibility = View.VISIBLE ui.saveButton.isEnabled = false lifecycleScope.launch { try { val org = SahiApi.ping() ui.status.text = getString(R.string.connected_to, org) } catch (e: Exception) { ui.status.text = e.message ?: getString(R.string.something_went_wrong) } finally { ui.progress.visibility = View.GONE ui.saveButton.isEnabled = true } } } }