@@ -24,6 +24,7 @@ import android.os.StatFs
24
24
import android.provider.CalendarContract
25
25
import android.provider.ContactsContract
26
26
import android.text.format.DateUtils
27
+ import android.text.format.Formatter
27
28
import androidx.compose.runtime.getValue
28
29
import androidx.compose.runtime.mutableStateOf
29
30
import androidx.compose.runtime.setValue
@@ -48,20 +49,18 @@ import at.bitfire.davdroid.settings.SettingsManager
48
49
import at.bitfire.davdroid.sync.worker.BaseSyncWorker
49
50
import at.bitfire.ical4android.TaskProvider
50
51
import at.techbee.jtx.JtxContract
52
+ import com.google.common.io.ByteStreams
53
+ import com.google.common.io.Files
51
54
import dagger.assisted.Assisted
52
55
import dagger.assisted.AssistedFactory
53
56
import dagger.assisted.AssistedInject
54
57
import dagger.hilt.android.lifecycle.HiltViewModel
55
58
import kotlinx.coroutines.Dispatchers
56
59
import kotlinx.coroutines.launch
57
- import org.apache.commons.io.ByteOrderMark
58
- import org.apache.commons.io.FileUtils
59
- import org.apache.commons.io.IOUtils
60
60
import org.apache.commons.lang3.exception.ExceptionUtils
61
61
import org.dmfs.tasks.contract.TaskContract
62
62
import java.io.File
63
63
import java.io.IOException
64
- import java.io.StringReader
65
64
import java.io.Writer
66
65
import java.util.TimeZone
67
66
import java.util.logging.Level
@@ -129,8 +128,8 @@ class DebugInfoModel @AssistedInject constructor(
129
128
if (details.logs != null ) {
130
129
val file = File (debugDir, FILE_LOGS )
131
130
if (! file.exists() || file.canWrite()) {
132
- file.writer().buffered ().use { writer ->
133
- IOUtils .copy( StringReader ( details.logs), writer )
131
+ file.printWriter ().use { writer ->
132
+ writer.write( details.logs)
134
133
}
135
134
uiState = uiState.copy(logFile = file)
136
135
} else
@@ -164,7 +163,6 @@ class DebugInfoModel @AssistedInject constructor(
164
163
private fun generateDebugInfo (syncAccount : Account ? , syncAuthority : String? , cause : Throwable ? , localResource : String? , remoteResource : String? ) {
165
164
val debugInfoFile = File (Logger .debugDir(), FILE_DEBUG_INFO )
166
165
debugInfoFile.writer().buffered().use { writer ->
167
- writer.append(ByteOrderMark .UTF_BOM )
168
166
writer.append(" --- BEGIN DEBUG INFO ---\n\n " )
169
167
170
168
// begin with most specific information
@@ -262,9 +260,9 @@ class DebugInfoModel @AssistedInject constructor(
262
260
val filesPath = Environment .getDataDirectory()
263
261
val statFs = StatFs (filesPath.path)
264
262
writer.append(" Internal memory ($filesPath ): " )
265
- .append(FileUtils .byteCountToDisplaySize( statFs.availableBytes))
263
+ .append(Formatter .formatFileSize(context, statFs.availableBytes))
266
264
.append(" free of " )
267
- .append(FileUtils .byteCountToDisplaySize( statFs.totalBytes))
265
+ .append(Formatter .formatFileSize(context, statFs.totalBytes))
268
266
.append(" \n\n " )
269
267
270
268
// power saving
@@ -431,26 +429,22 @@ class DebugInfoModel @AssistedInject constructor(
431
429
zip.setLevel(9 )
432
430
uiState.debugInfo?.let { debugInfo ->
433
431
zip.putNextEntry(ZipEntry (" debug-info.txt" ))
434
- debugInfo.inputStream().use {
435
- IOUtils .copy(it, zip)
436
- }
432
+ Files .copy(debugInfo, zip)
437
433
zip.closeEntry()
438
434
}
439
435
440
436
val logs = uiState.logFile
441
437
if (logs != null ) {
442
438
// verbose logs available
443
439
zip.putNextEntry(ZipEntry (logs.name))
444
- logs.inputStream().use {
445
- IOUtils .copy(it, zip)
446
- }
440
+ Files .copy(logs, zip)
447
441
zip.closeEntry()
448
442
} else {
449
443
// logcat (short logs)
450
444
try {
451
445
Runtime .getRuntime().exec(" logcat -d" ).also { logcat ->
452
446
zip.putNextEntry(ZipEntry (" logcat.txt" ))
453
- IOUtils .copy(logcat.inputStream, zip)
447
+ ByteStreams .copy(logcat.inputStream, zip)
454
448
}
455
449
} catch (e: Exception ) {
456
450
Logger .log.log(Level .SEVERE , " Couldn't attach logcat" , e)
0 commit comments