| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- package im.angry.openeuicc.ui
- import android.icu.text.SimpleDateFormat
- import android.os.Build
- import android.os.Bundle
- import android.view.Menu
- import android.view.MenuItem
- import android.view.View
- import android.widget.ScrollView
- import android.widget.TextView
- import androidx.activity.enableEdgeToEdge
- import androidx.appcompat.app.AppCompatActivity
- import androidx.lifecycle.lifecycleScope
- import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
- import im.angry.openeuicc.common.R
- import im.angry.openeuicc.util.*
- import kotlinx.coroutines.Dispatchers
- import kotlinx.coroutines.launch
- import kotlinx.coroutines.withContext
- import java.util.Date
- class LogsActivity : AppCompatActivity() {
- private lateinit var swipeRefresh: SwipeRefreshLayout
- private lateinit var scrollView: ScrollView
- private lateinit var logText: TextView
- private lateinit var logStr: String
- private val saveLogs =
- setupLogSaving(
- getLogFileName = {
- getString(
- R.string.logs_filename_template,
- SimpleDateFormat.getDateTimeInstance().format(Date())
- )
- },
- getLogText = ::buildLogText
- )
- private fun buildLogText() = buildString {
- appendLine("Manufacturer: ${Build.MANUFACTURER}")
- appendLine("Brand: ${Build.BRAND}")
- appendLine("Model: ${Build.MODEL}")
- appendLine("SDK Version: ${Build.VERSION.SDK_INT}")
- appendLine("App Version: $selfAppVersion")
- appendLine("-".repeat(10))
- appendLine(logStr)
- }
- override fun onCreate(savedInstanceState: Bundle?) {
- enableEdgeToEdge()
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_logs)
- setSupportActionBar(requireViewById(R.id.toolbar))
- supportActionBar!!.setDisplayHomeAsUpEnabled(true)
- swipeRefresh = requireViewById(R.id.swipe_refresh)
- scrollView = requireViewById(R.id.scroll_view)
- logText = requireViewById(R.id.log_text)
- setupRootViewSystemBarInsets(
- window.decorView.rootView, arrayOf(
- this::activityToolbarInsetHandler,
- mainViewPaddingInsetHandler(scrollView)
- )
- )
- swipeRefresh.setOnRefreshListener {
- lifecycleScope.launch {
- reload()
- }
- }
- }
- override fun onStart() {
- super.onStart()
- lifecycleScope.launch {
- reload()
- }
- }
- override fun onCreateOptionsMenu(menu: Menu?): Boolean {
- menuInflater.inflate(R.menu.activity_logs, menu)
- return true
- }
- override fun onOptionsItemSelected(item: MenuItem): Boolean = when (item.itemId) {
- android.R.id.home -> {
- finish()
- true
- }
- R.id.save -> {
- saveLogs()
- true
- }
- else -> super.onOptionsItemSelected(item)
- }
- private suspend fun reload() = withContext(Dispatchers.Main) {
- swipeRefresh.isRefreshing = true
- logStr = intent.extras?.getString("log") ?: readSelfLog()
- logText.text = withContext(Dispatchers.IO) {
- // Limit the UI to display only 256 lines
- logStr.lines().takeLast(256).joinToString("\n")
- }
- swipeRefresh.isRefreshing = false
- scrollView.post {
- scrollView.fullScroll(View.FOCUS_DOWN)
- }
- }
- }
|