package com.lettemin import android.content.Intent import android.net.Uri import android.os.Bundle import android.os.Handler import android.os.Looper import android.widget.ArrayAdapter import android.widget.Button import android.widget.EditText import android.view.View import android.widget.AdapterView import android.widget.CheckBox import android.widget.LinearLayout import android.widget.SeekBar import android.widget.Spinner import android.widget.TextView import android.widget.Toast import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatActivity class ProfileEditActivity : AppCompatActivity() { companion object { const val EXTRA_ID = "id" } private val behaviors = Behavior.values().toList() private var profile: Profile = Profile( id = ProfileRepo.newId(), name = "", behavior = Behavior.AUDIO_AND_DTMF, audioFile = null, contactKeys = emptySet() ) private lateinit var nameInput: EditText private lateinit var behaviorSpinner: Spinner private lateinit var dtmfSpinner: Spinner private lateinit var dtmfLabel: TextView private lateinit var volumeBar: SeekBar private lateinit var volumeLabel: TextView private lateinit var audioLabel: TextView private lateinit var audioSection: LinearLayout private lateinit var contactsLabel: TextView private lateinit var chkNotifyPickup: CheckBox private lateinit var notifyPickupText: EditText private lateinit var chkNotifyAfter: CheckBox private lateinit var notifyAfterText: EditText private lateinit var chkHangup: CheckBox private var teensy: TeensyBridge? = null private val pickAudioLauncher = registerForActivityResult( ActivityResultContracts.OpenDocument() ) { uri: Uri? -> if (uri != null) handleAudioPicked(uri) } private val pickContactsLauncher = registerForActivityResult( ActivityResultContracts.StartActivityForResult() ) { result -> if (result.resultCode == RESULT_OK) { val arr = result.data?.getStringArrayExtra(ContactPickerActivity.EXTRA_SELECTED) ?: return@registerForActivityResult profile = profile.copy(contactKeys = arr.toSet()) renderContacts() } } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_profile_edit) nameInput = findViewById(R.id.nameInput) behaviorSpinner = findViewById(R.id.behaviorSpinner) dtmfSpinner = findViewById(R.id.dtmfSpinner) dtmfLabel = findViewById(R.id.dtmfLabel) volumeBar = findViewById(R.id.volumeBar) volumeLabel = findViewById(R.id.volumeLabel) audioLabel = findViewById(R.id.audioLabel) audioSection = findViewById(R.id.audioSection) contactsLabel = findViewById(R.id.contactsLabel) chkNotifyPickup = findViewById(R.id.chkNotifyPickup) notifyPickupText = findViewById(R.id.notifyPickupText) chkNotifyAfter = findViewById(R.id.chkNotifyAfter) notifyAfterText = findViewById(R.id.notifyAfterText) chkHangup = findViewById(R.id.chkHangup) behaviorSpinner.adapter = ArrayAdapter( this, android.R.layout.simple_spinner_dropdown_item, behaviors.map { it.label } ) dtmfSpinner.adapter = ArrayAdapter( this, android.R.layout.simple_spinner_dropdown_item, Profile.DTMF_DIGITS ) intent.getStringExtra(EXTRA_ID)?.let { id -> ProfileRepo.load(this).firstOrNull { it.id == id }?.let { profile = it } } nameInput.setText(profile.name) behaviorSpinner.setSelection(behaviors.indexOf(profile.behavior).coerceAtLeast(0)) dtmfSpinner.setSelection(Profile.DTMF_DIGITS.indexOf(profile.dtmf).coerceAtLeast(0)) volumeBar.progress = (profile.volume * 100).toInt().coerceIn(0, 100) renderVolume(volumeBar.progress) chkNotifyPickup.isChecked = profile.notifyOnPickup notifyPickupText.setText(profile.notifyOnPickupText) chkNotifyAfter.isChecked = profile.notifyAfterAudio notifyAfterText.setText(profile.notifyAfterAudioText) chkHangup.isChecked = profile.hangUpWhenDone updateDtmfVisibility(profile.behavior) updateAudioVisibility(profile.behavior) updateAfterAudioVisibility(profile.behavior) renderAudio() renderContacts() volumeBar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener { override fun onProgressChanged(sb: SeekBar?, p: Int, fromUser: Boolean) = renderVolume(p) override fun onStartTrackingTouch(sb: SeekBar?) {} override fun onStopTrackingTouch(sb: SeekBar?) {} }) behaviorSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { override fun onItemSelected(p: AdapterView<*>?, v: View?, pos: Int, id: Long) { updateDtmfVisibility(behaviors[pos]) updateAudioVisibility(behaviors[pos]) updateAfterAudioVisibility(behaviors[pos]) } override fun onNothingSelected(p: AdapterView<*>?) {} } findViewById