mirror of
				https://github.com/SimpleMobileTools/Simple-Draw.git
				synced 2025-06-05 21:59:17 +02:00 
			
		
		
		
	try handling a few more share intents
This commit is contained in:
		| @@ -40,6 +40,12 @@ | |||||||
|                 <category android:name="android.intent.category.DEFAULT"/> |                 <category android:name="android.intent.category.DEFAULT"/> | ||||||
|                 <data android:mimeType="image/*"/> |                 <data android:mimeType="image/*"/> | ||||||
|             </intent-filter> |             </intent-filter> | ||||||
|  |  | ||||||
|  |             <intent-filter> | ||||||
|  |                 <action android:name="android.intent.action.SEND_MULTIPLE"/> | ||||||
|  |                 <category android:name="android.intent.category.DEFAULT"/> | ||||||
|  |                 <data android:mimeType="image/*"/> | ||||||
|  |             </intent-filter> | ||||||
|         </activity> |         </activity> | ||||||
|  |  | ||||||
|         <activity |         <activity | ||||||
|   | |||||||
| @@ -2,6 +2,7 @@ package com.simplemobiletools.draw | |||||||
|  |  | ||||||
| import android.graphics.Color | import android.graphics.Color | ||||||
| import android.graphics.drawable.ColorDrawable | import android.graphics.drawable.ColorDrawable | ||||||
|  | import android.net.Uri | ||||||
| import android.sax.RootElement | import android.sax.RootElement | ||||||
| import android.util.Xml | import android.util.Xml | ||||||
| import com.simplemobiletools.commons.extensions.getFileOutputStream | import com.simplemobiletools.commons.extensions.getFileOutputStream | ||||||
| @@ -51,8 +52,8 @@ object Svg { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     fun loadSvg(activity: MainActivity, file: File, canvas: MyCanvas) { |     fun loadSvg(activity: MainActivity, fileOrUri: Any, canvas: MyCanvas) { | ||||||
|         val svg = parseSvg(file) |         val svg = parseSvg(activity, fileOrUri) | ||||||
|  |  | ||||||
|         canvas.clearCanvas() |         canvas.clearCanvas() | ||||||
|         activity.setBackgroundColor(svg.background!!.color) |         activity.setBackgroundColor(svg.background!!.color) | ||||||
| @@ -66,11 +67,15 @@ object Svg { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private fun parseSvg(file: File): SSvg { |     private fun parseSvg(activity: MainActivity, fileOrUri: Any): SSvg { | ||||||
|         var inputStream: InputStream? = null |         var inputStream: InputStream? = null | ||||||
|         val svg = SSvg() |         val svg = SSvg() | ||||||
|         try { |         try { | ||||||
|             inputStream = FileInputStream(file) |             inputStream = when (fileOrUri) { | ||||||
|  |                 is File -> FileInputStream(fileOrUri) | ||||||
|  |                 is Uri -> activity.contentResolver.openInputStream(fileOrUri) | ||||||
|  |                 else -> null | ||||||
|  |             } | ||||||
|  |  | ||||||
|             // Actual parsing (http://stackoverflow.com/a/4828765) |             // Actual parsing (http://stackoverflow.com/a/4828765) | ||||||
|             val ns = "http://www.w3.org/2000/svg" |             val ns = "http://www.w3.org/2000/svg" | ||||||
|   | |||||||
| @@ -31,7 +31,6 @@ import java.io.ByteArrayOutputStream | |||||||
| import java.io.File | import java.io.File | ||||||
| import java.io.FileOutputStream | import java.io.FileOutputStream | ||||||
|  |  | ||||||
|  |  | ||||||
| class MainActivity : SimpleActivity(), MyCanvas.PathsChangedListener { | class MainActivity : SimpleActivity(), MyCanvas.PathsChangedListener { | ||||||
|     private val FOLDER_NAME = "images" |     private val FOLDER_NAME = "images" | ||||||
|     private val FILE_NAME = "simple-draw.png" |     private val FILE_NAME = "simple-draw.png" | ||||||
| @@ -126,10 +125,21 @@ class MainActivity : SimpleActivity(), MyCanvas.PathsChangedListener { | |||||||
|             handlePermission(PERMISSION_WRITE_STORAGE) { |             handlePermission(PERMISSION_WRITE_STORAGE) { | ||||||
|                 if (it) { |                 if (it) { | ||||||
|                     val uri = intent.getParcelableExtra<Uri>(Intent.EXTRA_STREAM) |                     val uri = intent.getParcelableExtra<Uri>(Intent.EXTRA_STREAM) | ||||||
|                     if (uri.scheme == "file") { |                     tryOpenUri(uri) | ||||||
|                         openPath(uri.path) |                 } else { | ||||||
|                     } else if (uri.scheme == "content") { |                     toast(R.string.no_storage_permissions) | ||||||
|                         openUri(uri) |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         if (intent?.action == Intent.ACTION_SEND_MULTIPLE && intent.type.startsWith("image/")) { | ||||||
|  |             handlePermission(PERMISSION_WRITE_STORAGE) { | ||||||
|  |                 if (it) { | ||||||
|  |                     val imageUris = intent.getParcelableArrayListExtra<Uri>(Intent.EXTRA_STREAM) | ||||||
|  |                     for (uri in imageUris) { | ||||||
|  |                         if (tryOpenUri(uri)) { | ||||||
|  |                             break | ||||||
|  |                         } | ||||||
|                     } |                     } | ||||||
|                 } else { |                 } else { | ||||||
|                     toast(R.string.no_storage_permissions) |                     toast(R.string.no_storage_permissions) | ||||||
| @@ -149,30 +159,49 @@ class MainActivity : SimpleActivity(), MyCanvas.PathsChangedListener { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private fun openPath(path: String) { |     private fun tryOpenUri(uri: Uri) = when { | ||||||
|         when { |         uri.scheme == "file" -> openPath(uri.path) | ||||||
|  |         uri.scheme == "content" -> openUri(uri, intent) | ||||||
|  |         else -> false | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private fun openPath(path: String) = when { | ||||||
|         path.endsWith(".svg") -> { |         path.endsWith(".svg") -> { | ||||||
|             my_canvas.mBackgroundBitmap = null |             my_canvas.mBackgroundBitmap = null | ||||||
|             Svg.loadSvg(this, File(path), my_canvas) |             Svg.loadSvg(this, File(path), my_canvas) | ||||||
|             suggestedFileExtension = SVG |             suggestedFileExtension = SVG | ||||||
|  |             true | ||||||
|         } |         } | ||||||
|         File(path).isImageSlow() -> { |         File(path).isImageSlow() -> { | ||||||
|             my_canvas.drawBitmap(this, path) |             my_canvas.drawBitmap(this, path) | ||||||
|             suggestedFileExtension = JPG |             suggestedFileExtension = JPG | ||||||
|  |             true | ||||||
|         } |         } | ||||||
|             else -> toast(R.string.invalid_file_format) |         else -> { | ||||||
|  |             toast(R.string.invalid_file_format) | ||||||
|  |             false | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private fun openUri(uri: Uri) { |     private fun openUri(uri: Uri, intent: Intent): Boolean { | ||||||
|         val mime = MimeTypeMap.getSingleton() |         val mime = MimeTypeMap.getSingleton() | ||||||
|         val type = mime.getExtensionFromMimeType(contentResolver.getType(uri)) |         val type = mime.getExtensionFromMimeType(contentResolver.getType(uri)) ?: intent.type | ||||||
|         when (type) { |         return when (type) { | ||||||
|  |             "svg", "image/svg+xml" -> { | ||||||
|  |                 my_canvas.mBackgroundBitmap = null | ||||||
|  |                 Svg.loadSvg(this, uri, my_canvas) | ||||||
|  |                 suggestedFileExtension = SVG | ||||||
|  |                 true | ||||||
|  |             } | ||||||
|             "jpg", "jpeg", "png" -> { |             "jpg", "jpeg", "png" -> { | ||||||
|                 my_canvas.drawBitmap(this, uri) |                 my_canvas.drawBitmap(this, uri) | ||||||
|                 suggestedFileExtension = JPG |                 suggestedFileExtension = JPG | ||||||
|  |                 true | ||||||
|  |             } | ||||||
|  |             else -> { | ||||||
|  |                 toast(R.string.invalid_file_format) | ||||||
|  |                 false | ||||||
|             } |             } | ||||||
|             else -> toast(R.string.invalid_file_format) |  | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user