diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/wizard/DownloadWizardDiagnosticsFragment.kt b/app-common/src/main/java/im/angry/openeuicc/ui/wizard/DownloadWizardDiagnosticsFragment.kt index 3841868..e282196 100644 --- a/app-common/src/main/java/im/angry/openeuicc/ui/wizard/DownloadWizardDiagnosticsFragment.kt +++ b/app-common/src/main/java/im/angry/openeuicc/ui/wizard/DownloadWizardDiagnosticsFragment.kt @@ -8,7 +8,6 @@ import android.view.ViewGroup import android.widget.TextView import im.angry.openeuicc.common.R import im.angry.openeuicc.util.* -import org.json.JSONObject import java.util.Date class DownloadWizardDiagnosticsFragment : DownloadWizardActivity.DownloadWizardStepFragment() { @@ -87,10 +86,9 @@ class DownloadWizardDiagnosticsFragment : DownloadWizardActivity.DownloadWizardS ret.appendLine() val str = resp.data.decodeToString(throwOnInvalidSequence = false) - ret.appendLine( if (str.startsWith('{')) { - JSONObject(str).toString(2) + str.prettyPrintJson() } else { str } diff --git a/app-common/src/main/java/im/angry/openeuicc/util/StringUtils.kt b/app-common/src/main/java/im/angry/openeuicc/util/StringUtils.kt index 57d150b..079853e 100644 --- a/app-common/src/main/java/im/angry/openeuicc/util/StringUtils.kt +++ b/app-common/src/main/java/im/angry/openeuicc/util/StringUtils.kt @@ -41,3 +41,73 @@ fun parseIsdrAidList(s: String): List = .filter(String::isNotEmpty) .mapNotNull { runCatching(it::decodeHex).getOrNull() } .ifEmpty { listOf(EUICC_DEFAULT_ISDR_AID.decodeHex()) } + +fun String.prettyPrintJson(): String { + val ret = StringBuilder() + var inQuotes = false + var escaped = false + val indentSymbolStack = ArrayDeque() + + val addNewLine = { + ret.append('\n') + repeat(indentSymbolStack.size) { + ret.append('\t') + } + } + + var lastChar = ' ' + + for (c in this) { + when { + !inQuotes && (c == '{' || c == '[') -> { + ret.append(c) + indentSymbolStack.addLast(c) + addNewLine() + } + + !inQuotes && (c == '}' || c == ']') -> { + indentSymbolStack.removeLast() + if (lastChar != ',') { + addNewLine() + } + ret.append(c) + } + + !inQuotes && c == ',' -> { + ret.append(c) + addNewLine() + } + + !inQuotes && c == ':' -> { + ret.append(c) + ret.append(' ') + } + + inQuotes && c == '\\' -> { + ret.append(c) + escaped = true + continue + } + + !escaped && c == '"' -> { + ret.append(c) + inQuotes = !inQuotes + } + + !inQuotes && c == ' ' -> { + // Do nothing -- we ignore spaces outside of quotes by default + // This is to ensure predictable formatting + } + + else -> ret.append(c) + } + + if (escaped) { + escaped = false + } + + lastChar = c + } + + return ret.toString() +} \ No newline at end of file