Skip to content

Commit 767dd60

Browse files
committed
handle saving on sd card properly too
1 parent ecdbeab commit 767dd60

4 files changed

Lines changed: 30 additions & 17 deletions

File tree

app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ android {
3232
}
3333

3434
dependencies {
35-
compile 'com.simplemobiletools:commons:2.16.1'
35+
compile 'com.simplemobiletools:commons:2.16.2'
3636
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
3737
}
3838

app/src/main/kotlin/com/simplemobiletools/draw/Svg.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ import java.io.*
99
import java.util.*
1010

1111
object Svg {
12-
fun saveSvg(output: File, canvas: MyCanvas) {
12+
fun saveSvg(file: File, canvas: MyCanvas) {
1313
val backgroundColor = (canvas.background as ColorDrawable).color
1414

15-
val out = FileOutputStream(output)
15+
val out = FileOutputStream(file)
1616
val writer = BufferedWriter(OutputStreamWriter(out))
1717
writeSvg(writer, backgroundColor, canvas.mPaths, canvas.width, canvas.height)
1818
writer.close()

app/src/main/kotlin/com/simplemobiletools/draw/dialogs/SaveImageDialog.kt

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.simplemobiletools.draw.dialogs
22

3-
import android.graphics.Bitmap
43
import android.support.v7.app.AlertDialog
54
import android.view.WindowManager
65
import com.simplemobiletools.commons.dialogs.FilePickerDialog
@@ -9,9 +8,11 @@ import com.simplemobiletools.draw.MyCanvas
98
import com.simplemobiletools.draw.R
109
import com.simplemobiletools.draw.Svg
1110
import com.simplemobiletools.draw.activities.SimpleActivity
11+
import com.simplemobiletools.draw.extensions.config
1212
import kotlinx.android.synthetic.main.dialog_save_image.view.*
1313
import java.io.File
1414
import java.io.FileOutputStream
15+
import java.io.OutputStream
1516

1617
class SaveImageDialog(val activity: SimpleActivity, val curPath: String, val canvas: MyCanvas, callback: (path: String) -> Unit) {
1718
private val PNG = "png"
@@ -79,24 +80,34 @@ class SaveImageDialog(val activity: SimpleActivity, val curPath: String, val can
7980
}
8081

8182
when (file.extension) {
82-
PNG -> {
83-
var out: FileOutputStream? = null
84-
try {
85-
out = FileOutputStream(file)
86-
canvas.getBitmap().compress(Bitmap.CompressFormat.PNG, 100, out)
87-
} finally {
88-
out?.close()
89-
}
90-
}
91-
JPG -> {
92-
93-
}
9483
SVG -> Svg.saveSvg(file, canvas)
84+
else -> saveImageFile(file)
9585
}
9686
activity.scanFile(file) {}
9787
return true
9888
}
9989

90+
private fun saveImageFile(file: File) {
91+
if (activity.needsStupidWritePermissions(file.absolutePath)) {
92+
activity.handleSAFDialog(file) {
93+
var document = activity.getFileDocument(file.absolutePath, activity.config.treeUri) ?: return@handleSAFDialog
94+
if (!file.exists()) {
95+
document = document.createFile("", file.name)
96+
}
97+
val out = activity.contentResolver.openOutputStream(document.uri)
98+
writeToOutputStream(file, out)
99+
}
100+
} else {
101+
writeToOutputStream(file, FileOutputStream(file))
102+
}
103+
}
104+
105+
private fun writeToOutputStream(file: File, out: OutputStream) {
106+
out.use { out ->
107+
canvas.getBitmap().compress(file.getCompressionFormat(), 70, out)
108+
}
109+
}
110+
100111
private fun getInitialFilename(): String {
101112
val defaultFilename = "image_${System.currentTimeMillis() / 1000}"
102113
return if (curPath.isEmpty()) defaultFilename else curPath.getFilenameFromPath().substring(0, curPath.getFilenameFromPath().lastIndexOf("."))

app/src/main/res/layout/dialog_save_image.xml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
android:layout_width="match_parent"
66
android:layout_height="match_parent"
77
android:orientation="vertical"
8-
android:padding="@dimen/activity_margin">
8+
android:paddingLeft="@dimen/activity_margin"
9+
android:paddingRight="@dimen/activity_margin"
10+
android:paddingTop="@dimen/activity_margin">
911

1012
<com.simplemobiletools.commons.views.MyTextView
1113
android:id="@+id/save_image_path_label"

0 commit comments

Comments
 (0)