Skip to content

Commit ec9b6c7

Browse files
muhomorrthestinger
authored andcommitted
improve ImageSaver error dialog
- include OS version - include app package name and versionCode - use the standard stack trace format
1 parent b2e8dd4 commit ec9b6c7

File tree

3 files changed

+17
-31
lines changed

3 files changed

+17
-31
lines changed

app/src/main/java/app/grapheneos/camera/capturer/ImageCapturer.kt

+9-4
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ import android.app.NotificationManager
88
import android.content.ClipData
99
import android.content.ClipboardManager
1010
import android.graphics.Bitmap
11+
import android.os.Build
1112
import android.util.Log
1213
import android.view.View
1314
import android.view.animation.AlphaAnimation
1415
import android.view.animation.Animation
1516
import android.view.animation.LinearInterpolator
16-
import android.widget.FrameLayout
1717
import androidx.camera.core.CameraSelector
1818
import androidx.camera.core.ImageCapture
1919
import androidx.camera.core.ImageCaptureException
@@ -22,6 +22,7 @@ import app.grapheneos.camera.CapturedItem
2222
import app.grapheneos.camera.R
2323
import app.grapheneos.camera.ui.activities.MainActivity
2424
import app.grapheneos.camera.ui.activities.SecureMainActivity
25+
import app.grapheneos.camera.util.printStackTraceToString
2526

2627
private const val imageFileFormat = ".jpg"
2728
var isTakingPicture: Boolean = false
@@ -198,12 +199,16 @@ class ImageCapturer(val mActivity: MainActivity) {
198199
AlertDialog.Builder(ctx).apply {
199200
setMessage(message)
200201
setPositiveButton(R.string.show_details) { _, _ ->
201-
val list = exception.asStringList()
202+
val pkgName = ctx.packageName
203+
val pkgVersion = ctx.packageManager.getPackageInfo(pkgName, 0).longVersionCode
204+
val text = "osVersion: ${Build.FINGERPRINT}" +
205+
"\npackage: $pkgName:$pkgVersion" +
206+
"\n\n${exception.printStackTraceToString()}"
202207

203208
AlertDialog.Builder(ctx).apply {
204-
setItems(list.toTypedArray(), null)
209+
setItems(text.lines().toTypedArray(), null)
205210
setNeutralButton(R.string.copy_to_clipboard) { _, _ ->
206-
val clipData = ClipData.newPlainText(exception.javaClass.name, list.joinToString("\n"))
211+
val clipData = ClipData.newPlainText(exception.javaClass.name, text)
207212
val cm = mActivity.getSystemService(ClipboardManager::class.java)
208213
cm.setPrimaryClip(clipData)
209214
ctx.showMessage(R.string.copied_text_to_clipboard)

app/src/main/java/app/grapheneos/camera/capturer/ImageSaverException.kt

-27
Original file line numberDiff line numberDiff line change
@@ -10,30 +10,3 @@ class ImageSaverException(val place: Place, cause: Exception? = null) : Exceptio
1010
FILE_WRITE_COMPLETION,
1111
}
1212
}
13-
14-
fun Throwable.asStringList() : List<String> {
15-
val list = ArrayList<String>()
16-
17-
val chain = ArrayList<Throwable>()
18-
var tail: Throwable? = this
19-
do {
20-
chain.add(tail!!)
21-
tail = tail.cause
22-
} while (tail != null)
23-
24-
chain.reversed().forEachIndexed { index, entry ->
25-
if (chain.size != 1) {
26-
list.add("--- Exception ${index + 1} / ${chain.size}")
27-
}
28-
29-
list.add(entry.javaClass.name)
30-
entry.message?.let {
31-
list.add(it)
32-
}
33-
34-
entry.stackTrace.forEach {
35-
list.add("${it.methodName} :: ${it.className} :: ${it.lineNumber}")
36-
}
37-
}
38-
return list
39-
}

app/src/main/java/app/grapheneos/camera/util/Utils.kt

+8
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,18 @@ import app.grapheneos.camera.CamConfig
1111
import app.grapheneos.camera.R
1212
import app.grapheneos.camera.capturer.DEFAULT_MEDIA_STORE_CAPTURE_PATH
1313
import app.grapheneos.camera.capturer.SAF_URI_HOST_EXTERNAL_STORAGE
14+
import java.io.ByteArrayOutputStream
1415
import java.io.IOException
16+
import java.io.PrintStream
1517
import java.util.concurrent.ExecutorService
1618
import java.util.concurrent.RejectedExecutionException
1719

20+
fun Throwable.printStackTraceToString(): String {
21+
val baos = ByteArrayOutputStream(1000)
22+
this.printStackTrace(PrintStream(baos));
23+
return baos.toString()
24+
}
25+
1826
fun getTreeDocumentUri(treeUri: Uri): Uri {
1927
val treeId = DocumentsContract.getTreeDocumentId(treeUri)
2028
return DocumentsContract.buildDocumentUriUsingTree(treeUri, treeId)

0 commit comments

Comments
 (0)