mirror of
				https://github.com/SimpleMobileTools/Simple-Draw.git
				synced 2025-06-05 21:59:17 +02:00 
			
		
		
		
	handle saving on sd card properly too
This commit is contained in:
		| @@ -32,7 +32,7 @@ android { | |||||||
| } | } | ||||||
|  |  | ||||||
| dependencies { | dependencies { | ||||||
|     compile 'com.simplemobiletools:commons:2.16.1' |     compile 'com.simplemobiletools:commons:2.16.2' | ||||||
|     compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" |     compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -9,10 +9,10 @@ import java.io.* | |||||||
| import java.util.* | import java.util.* | ||||||
|  |  | ||||||
| object Svg { | object Svg { | ||||||
|     fun saveSvg(output: File, canvas: MyCanvas) { |     fun saveSvg(file: File, canvas: MyCanvas) { | ||||||
|         val backgroundColor = (canvas.background as ColorDrawable).color |         val backgroundColor = (canvas.background as ColorDrawable).color | ||||||
|  |  | ||||||
|         val out = FileOutputStream(output) |         val out = FileOutputStream(file) | ||||||
|         val writer = BufferedWriter(OutputStreamWriter(out)) |         val writer = BufferedWriter(OutputStreamWriter(out)) | ||||||
|         writeSvg(writer, backgroundColor, canvas.mPaths, canvas.width, canvas.height) |         writeSvg(writer, backgroundColor, canvas.mPaths, canvas.width, canvas.height) | ||||||
|         writer.close() |         writer.close() | ||||||
|   | |||||||
| @@ -1,6 +1,5 @@ | |||||||
| package com.simplemobiletools.draw.dialogs | package com.simplemobiletools.draw.dialogs | ||||||
|  |  | ||||||
| import android.graphics.Bitmap |  | ||||||
| import android.support.v7.app.AlertDialog | import android.support.v7.app.AlertDialog | ||||||
| import android.view.WindowManager | import android.view.WindowManager | ||||||
| import com.simplemobiletools.commons.dialogs.FilePickerDialog | import com.simplemobiletools.commons.dialogs.FilePickerDialog | ||||||
| @@ -9,9 +8,11 @@ import com.simplemobiletools.draw.MyCanvas | |||||||
| import com.simplemobiletools.draw.R | import com.simplemobiletools.draw.R | ||||||
| import com.simplemobiletools.draw.Svg | import com.simplemobiletools.draw.Svg | ||||||
| import com.simplemobiletools.draw.activities.SimpleActivity | import com.simplemobiletools.draw.activities.SimpleActivity | ||||||
|  | import com.simplemobiletools.draw.extensions.config | ||||||
| import kotlinx.android.synthetic.main.dialog_save_image.view.* | import kotlinx.android.synthetic.main.dialog_save_image.view.* | ||||||
| import java.io.File | import java.io.File | ||||||
| import java.io.FileOutputStream | import java.io.FileOutputStream | ||||||
|  | import java.io.OutputStream | ||||||
|  |  | ||||||
| class SaveImageDialog(val activity: SimpleActivity, val curPath: String, val canvas: MyCanvas, callback: (path: String) -> Unit) { | class SaveImageDialog(val activity: SimpleActivity, val curPath: String, val canvas: MyCanvas, callback: (path: String) -> Unit) { | ||||||
|     private val PNG = "png" |     private val PNG = "png" | ||||||
| @@ -79,24 +80,34 @@ class SaveImageDialog(val activity: SimpleActivity, val curPath: String, val can | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         when (file.extension) { |         when (file.extension) { | ||||||
|             PNG -> { |  | ||||||
|                 var out: FileOutputStream? = null |  | ||||||
|                 try { |  | ||||||
|                     out = FileOutputStream(file) |  | ||||||
|                     canvas.getBitmap().compress(Bitmap.CompressFormat.PNG, 100, out) |  | ||||||
|                 } finally { |  | ||||||
|                     out?.close() |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|             JPG -> { |  | ||||||
|  |  | ||||||
|             } |  | ||||||
|             SVG -> Svg.saveSvg(file, canvas) |             SVG -> Svg.saveSvg(file, canvas) | ||||||
|  |             else -> saveImageFile(file) | ||||||
|         } |         } | ||||||
|         activity.scanFile(file) {} |         activity.scanFile(file) {} | ||||||
|         return true |         return true | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     private fun saveImageFile(file: File) { | ||||||
|  |         if (activity.needsStupidWritePermissions(file.absolutePath)) { | ||||||
|  |             activity.handleSAFDialog(file) { | ||||||
|  |                 var document = activity.getFileDocument(file.absolutePath, activity.config.treeUri) ?: return@handleSAFDialog | ||||||
|  |                 if (!file.exists()) { | ||||||
|  |                     document = document.createFile("", file.name) | ||||||
|  |                 } | ||||||
|  |                 val out = activity.contentResolver.openOutputStream(document.uri) | ||||||
|  |                 writeToOutputStream(file, out) | ||||||
|  |             } | ||||||
|  |         } else { | ||||||
|  |             writeToOutputStream(file, FileOutputStream(file)) | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private fun writeToOutputStream(file: File, out: OutputStream) { | ||||||
|  |         out.use { out -> | ||||||
|  |             canvas.getBitmap().compress(file.getCompressionFormat(), 70, out) | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|     private fun getInitialFilename(): String { |     private fun getInitialFilename(): String { | ||||||
|         val defaultFilename = "image_${System.currentTimeMillis() / 1000}" |         val defaultFilename = "image_${System.currentTimeMillis() / 1000}" | ||||||
|         return if (curPath.isEmpty()) defaultFilename else curPath.getFilenameFromPath().substring(0, curPath.getFilenameFromPath().lastIndexOf(".")) |         return if (curPath.isEmpty()) defaultFilename else curPath.getFilenameFromPath().substring(0, curPath.getFilenameFromPath().lastIndexOf(".")) | ||||||
|   | |||||||
| @@ -5,7 +5,9 @@ | |||||||
|     android:layout_width="match_parent" |     android:layout_width="match_parent" | ||||||
|     android:layout_height="match_parent" |     android:layout_height="match_parent" | ||||||
|     android:orientation="vertical" |     android:orientation="vertical" | ||||||
|     android:padding="@dimen/activity_margin"> |     android:paddingLeft="@dimen/activity_margin" | ||||||
|  |     android:paddingRight="@dimen/activity_margin" | ||||||
|  |     android:paddingTop="@dimen/activity_margin"> | ||||||
|  |  | ||||||
|     <com.simplemobiletools.commons.views.MyTextView |     <com.simplemobiletools.commons.views.MyTextView | ||||||
|         android:id="@+id/save_image_path_label" |         android:id="@+id/save_image_path_label" | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user