11package com.simplemobiletools.draw.dialogs
22
3- import android.graphics.Bitmap
43import android.support.v7.app.AlertDialog
54import android.view.WindowManager
65import com.simplemobiletools.commons.dialogs.FilePickerDialog
@@ -9,9 +8,11 @@ import com.simplemobiletools.draw.MyCanvas
98import com.simplemobiletools.draw.R
109import com.simplemobiletools.draw.Svg
1110import com.simplemobiletools.draw.activities.SimpleActivity
11+ import com.simplemobiletools.draw.extensions.config
1212import kotlinx.android.synthetic.main.dialog_save_image.view.*
1313import java.io.File
1414import java.io.FileOutputStream
15+ import java.io.OutputStream
1516
1617class 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(" ." ))
0 commit comments