proguard 5.10.3

Basic proguard mapping file handling for Rust
Documentation
package io.sentry.samples.instrumentation.ui

import android.os.Bundle
import android.widget.EditText
import android.widget.Toast
import androidx.activity.ComponentActivity
import androidx.appcompat.widget.Toolbar
import io.sentry.Sentry
import io.sentry.SpanStatus
import io.sentry.samples.instrumentation.R
import io.sentry.samples.instrumentation.SampleApp
import io.sentry.samples.instrumentation.data.Track
import kotlinx.coroutines.runBlocking

class EditActivity : ComponentActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_edit)

        val nameInput = findViewById<EditText>(R.id.track_name)
        val composerInput = findViewById<EditText>(R.id.track_composer)
        val durationInput = findViewById<EditText>(R.id.track_duration)
        val unitPriceInput = findViewById<EditText>(R.id.track_unit_price)

        val originalTrack: Track? = intent.getSerializableExtra(TRACK_EXTRA_KEY) as? Track
        originalTrack?.run {
            nameInput.setText(name)
            composerInput.setText(composer)
            durationInput.setText(millis.toString())
            unitPriceInput.setText(price.toString())
        }

        findViewById<Toolbar>(R.id.toolbar).setOnMenuItemClickListener {
            if (it.itemId == R.id.action_save) {
                try {
                    throw RuntimeException("thrown on purpose to test source context line number mismatch")
                } catch (t: Throwable) {
                    Sentry.captureException(t);
                }
                val transaction = Sentry.startTransaction(
                    "Track Interaction",
                    if (originalTrack == null) "ui.action.add" else "ui.action.edit",
                    true
                )

                val name = nameInput.text.toString()
                val composer = composerInput.text.toString()
                val duration = durationInput.text.toString()
                val unitPrice = unitPriceInput.text.toString()
                if (name.isEmpty() || composer.isEmpty() ||
                    duration.isEmpty() || duration.toLongOrNull() == null ||
                    unitPrice.isEmpty() || unitPrice.toFloatOrNull() == null
                ) {
                    Toast.makeText(
                        this,
                        "Some of the inputs are empty or have wrong format " +
                                "(duration/unitprice not a number)",
                        Toast.LENGTH_LONG
                    ).show()
                } else {
                    if (originalTrack == null) {
                        addNewTrack(name, composer, duration.toLong(), unitPrice.toFloat())

                        val createCount = SampleApp.analytics.getInt("create_count", 0) + 1
                        SampleApp.analytics.edit().putInt("create_count", createCount).apply()
                    } else {
                        originalTrack.update(name, composer, duration.toLong(), unitPrice.toFloat())

                        val editCount = SampleApp.analytics.getInt("edit_count", 0) + 1
                        SampleApp.analytics.edit().putInt("edit_count", editCount).apply()
                    }
                    transaction.finish(SpanStatus.OK)
                    finish()
                }
                return@setOnMenuItemClickListener true
            }
            return@setOnMenuItemClickListener false
        }
    }

    private fun addNewTrack(name: String, composer: String, duration: Long, unitPrice: Float) {
        val newTrack = Track(
            name = name,
            albumId = null,
            composer = composer,
            mediaTypeId = null,
            genreId = null,
            millis = duration,
            bytes = null,
            price = unitPrice
        )
        runBlocking {
            SampleApp.database.tracksDao().insert(newTrack)
        }
    }

    private fun Track.update(name: String, composer: String, duration: Long, unitPrice: Float) {
        val updatedTrack = copy(
            name = name,
            composer = composer,
            millis = duration,
            price = unitPrice
        )
        runBlocking {
            SampleApp.database.tracksDao().update(updatedTrack)
        }
    }

    companion object {
        const val TRACK_EXTRA_KEY = "EditActivity.Track"
    }
}