diff --git a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt index eef3c467..f99777c8 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt @@ -90,6 +90,7 @@ class MainActivity : AppCompatActivity() { private lateinit var configRequest: ActivityResultLauncher private lateinit var backupRequest: ActivityResultLauncher private lateinit var restoreRequest: ActivityResultLauncher + private lateinit var logcatRequest: ActivityResultLauncher private lateinit var contactsRequest: ActivityResultLauncher private lateinit var callsRequest: ActivityResultLauncher private lateinit var comDevChangedListener: AudioManager.OnCommunicationDeviceChangedListener @@ -615,6 +616,24 @@ class MainActivity : AppCompatActivity() { } } + logcatRequest = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { + if (it.resultCode == Activity.RESULT_OK) + it.data?.data?.also { uri -> + try { + val out = contentResolver.openOutputStream(uri) + val process = Runtime.getRuntime().exec("logcat -d --pid=${Process.myPid()}") + val bufferedReader = process.inputStream.bufferedReader() + bufferedReader.forEachLine { line -> + out!!.write(line.toByteArray()) + out.write('\n'.code.toByte().toInt()) + } + out!!.close() + } catch (e: Exception) { + Log.e(TAG, "Failed to write logcat to file") + } + } + } + swipeRefresh.setOnTouchListener(object : OnSwipeTouchListener(this@MainActivity) { override fun onSwipeLeft() { @@ -1320,6 +1339,12 @@ class MainActivity : AppCompatActivity() { exitProcess(0) } + override fun onPrepareOptionsMenu(menu: Menu): Boolean { + if (Build.VERSION.SDK_INT >= 29) + menu.findItem(R.id.logcat).setVisible(true) + return super.onPrepareOptionsMenu(menu) + } + override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.main_menu, menu) @@ -1464,6 +1489,11 @@ class MainActivity : AppCompatActivity() { } } + R.id.logcat -> { + if (Build.VERSION.SDK_INT >= 29) + pickupFileFromDownloads("logcat") + } + R.id.about -> { startActivity(Intent(this, AboutActivity::class.java)) } @@ -1494,6 +1524,15 @@ class MainActivity : AppCompatActivity() { putExtra(DocumentsContract.EXTRA_INITIAL_URI, MediaStore.Downloads.EXTERNAL_CONTENT_URI) }) } + "logcat" -> { + logcatRequest.launch(Intent(Intent.ACTION_CREATE_DOCUMENT).apply { + addCategory(Intent.CATEGORY_OPENABLE) + type = "text/plain" + putExtra(Intent.EXTRA_TITLE, "baresip_logcat_" + + SimpleDateFormat("yyyy_MM_dd_HH_mm_ss", Locale.getDefault()).format(Date())) + putExtra(DocumentsContract.EXTRA_INITIAL_URI, MediaStore.Downloads.EXTERNAL_CONTENT_URI) + }) + } } } diff --git a/app/src/main/kotlin/com/tutpro/baresip/OnSwipeTouchListener.kt b/app/src/main/kotlin/com/tutpro/baresip/OnSwipeTouchListener.kt index d7bca55b..e8ddb2e0 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/OnSwipeTouchListener.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/OnSwipeTouchListener.kt @@ -62,7 +62,7 @@ open class OnSwipeTouchListener(ctx: Context) : View.OnTouchListener { } } catch (e: Exception) { Log.e(TAG, "onFling exception $e") - e.printStackTrace() + // e.printStackTrace() } return result } diff --git a/app/src/main/res/menu/main_menu.xml b/app/src/main/res/menu/main_menu.xml index d7f53e1c..1b618132 100644 --- a/app/src/main/res/menu/main_menu.xml +++ b/app/src/main/res/menu/main_menu.xml @@ -15,6 +15,10 @@ + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f61f702a..994a7a98 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -455,6 +455,7 @@ Backup Restore + Logcat About Restart Quit