@@ -10,8 +10,8 @@ import android.graphics.Paint
1010import android.graphics.Rect
1111import android.net.Uri
1212import android.os.Build
13+ import android.os.Environment
1314import android.provider.MediaStore
14- import android.util.Log
1515import android.widget.Toast
1616import androidx.core.app.ActivityCompat
1717import androidx.core.content.ContextCompat
@@ -22,6 +22,7 @@ import kotlinx.coroutines.Dispatchers
2222import kotlinx.coroutines.Job
2323import kotlinx.coroutines.launch
2424import kotlinx.coroutines.withContext
25+ import me.rosuh.easywatermark.BuildConfig
2526import me.rosuh.easywatermark.R
2627import me.rosuh.easywatermark.ktx.applyConfig
2728import me.rosuh.easywatermark.ktx.formatDate
@@ -99,7 +100,7 @@ class MainViewModel : ViewModel() {
99100 _saveState .postValue(State .Saving )
100101 try {
101102 val outputUri =
102- generateImage(activity.contentResolver , config.value?.uri ? : Uri .parse(" " ))
103+ generateImage(activity, config.value?.uri ? : Uri .parse(" " ))
103104 if (outputUri?.toString().isNullOrEmpty()) {
104105 throw FileNotFoundException ()
105106 }
@@ -141,7 +142,7 @@ class MainViewModel : ViewModel() {
141142 try {
142143 _saveState .postValue(State .Sharing )
143144 val outputUri =
144- generateImage(activity.contentResolver , config.value?.uri ? : Uri .parse(" " ))
145+ generateImage(activity, config.value?.uri ? : Uri .parse(" " ))
145146 if (outputUri?.toString().isNullOrEmpty()) {
146147 _saveState .postValue(State .Error .apply {
147148 msg = activity.getString(R .string.error_file_not_found)
@@ -171,8 +172,9 @@ class MainViewModel : ViewModel() {
171172 }
172173
173174 @Throws(FileNotFoundException ::class , OutOfMemoryError ::class )
174- private suspend fun generateImage (resolver : ContentResolver , uri : Uri ): Uri ? =
175+ private suspend fun generateImage (activity : Activity , uri : Uri ): Uri ? =
175176 withContext(Dispatchers .IO ) {
177+ val resolver = activity.contentResolver
176178 val mutableBitmap =
177179 decodeBitmapFromUri(resolver, uri)?.copy(Bitmap .Config .ARGB_8888 , true )
178180 ? : return @withContext null
@@ -247,13 +249,33 @@ class MainViewModel : ViewModel() {
247249 imageContentUri
248250 } else {
249251 // need request write_storage permission
250- val u = MediaStore .Images .Media .insertImage(
251- resolver,
252- mutableBitmap,
253- " Easy_water_mark_${System .currentTimeMillis()} .jpg" ,
254- " "
252+ // should check Pictures folder exist
253+ val picturesFile: File = Environment .getExternalStoragePublicDirectory(Environment .DIRECTORY_PICTURES )
254+ ? : return @withContext null
255+ if (! picturesFile.exists()) {
256+ picturesFile.mkdir()
257+ }
258+ val mediaDir = File (picturesFile, " EasyWaterMark" )
259+
260+ if (! mediaDir.exists()) {
261+ mediaDir.mkdirs()
262+ }
263+ val outputFile = File (mediaDir, " ewm_${System .currentTimeMillis()} .jpg" )
264+ outputFile.outputStream().use { fileOutputStream ->
265+ mutableBitmap.compress(Bitmap .CompressFormat .JPEG , 100 , fileOutputStream)
266+ }
267+ val outputUri = FileProvider .getUriForFile(
268+ activity,
269+ " ${BuildConfig .APPLICATION_ID } .fileprovider" ,
270+ outputFile
255271 )
256- Uri .parse(u)
272+ activity.sendBroadcast(
273+ Intent (
274+ Intent .ACTION_MEDIA_SCANNER_SCAN_FILE ,
275+ Uri .fromFile(outputFile)
276+ )
277+ )
278+ outputUri
257279 }
258280 }
259281
@@ -352,23 +374,15 @@ class MainViewModel : ViewModel() {
352374 input?.copyTo(output)
353375 }
354376 }
355- Log .i(
356- " compressImg" ,
357- " Before compress: file ${tmpFile.absolutePath} , length = ${tmpFile.length()} "
358- )
359377 val compressedFile = Compressor .compress(activity, tmpFile)
360378 // clear tmp files
361379 if (tmpFile.exists()) {
362380 tmpFile.delete()
363381 }
364- Log .i(
365- " compressImg" ,
366- " After compress: compressedFile ${compressedFile.absolutePath} , length = ${compressedFile.length()} "
367- )
368382 try {
369383 val compressedFileUri = FileProvider .getUriForFile(
370384 activity,
371- " me.rosuh.easywatermark .fileprovider" ,
385+ " ${ BuildConfig . APPLICATION_ID } .fileprovider" ,
372386 compressedFile
373387 )
374388 updateUri(compressedFileUri)
@@ -392,7 +406,12 @@ class MainViewModel : ViewModel() {
392406
393407 $crashInfo
394408 =====================
395- ${System .getProperty(" os.version" )} , ${Build .VERSION .SDK_INT } , ${Build .DEVICE } , ${Build .MODEL } , ${Build .PRODUCT }
409+ APP:
410+ ${BuildConfig .VERSION_CODE } , ${BuildConfig .VERSION_NAME } , ${BuildConfig .FLAVOR }
411+ Devices:
412+ ${Build .VERSION .RELEASE } , ${Build .VERSION .SDK_INT } , ${Build .DEVICE } , ${Build .MODEL } , ${Build .PRODUCT } , ${Build .MANUFACTURER }
413+ =====================
414+ ${activity.getString(R .string.contributor_info)}
396415 =====================
397416 ${System .currentTimeMillis().formatDate(" yyy-MM-dd" )}
398417 """ .trimIndent()
0 commit comments