1 package jp.osdn.gokigen.gokigenassets.utils.imagefile
3 import android.content.ContentValues
4 import android.os.Environment
5 import android.provider.MediaStore
6 import android.util.Log
7 import android.widget.Toast
8 import androidx.camera.core.ImageCapture
9 import androidx.camera.core.ImageCaptureException
10 import androidx.core.content.ContextCompat
11 import androidx.fragment.app.FragmentActivity
12 import jp.osdn.gokigen.gokigenassets.constants.IStringResourceConstantConvert.Companion.ID_LABEL_APP_LOCATION
13 import jp.osdn.gokigen.gokigenassets.constants.IStringResourceConstantConvert.Companion.ID_MESSAGE_LABEL_CAPTURE_SUCCESS
15 import java.text.SimpleDateFormat
18 class ImageStoreExternalLegacy(private val context: FragmentActivity) : IImageStore
20 private fun getExternalOutputDirectory(): File
22 @Suppress("DEPRECATION") val directoryPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).path + "/" + context.getString(ID_LABEL_APP_LOCATION) + "/"
23 val target = File(directoryPath)
32 Log.v(TAG, " ----- RECORD Directory PATH : $directoryPath -----")
36 override fun takePhoto(id : Int, imageCapture : ImageCapture?) : Boolean
38 if ((!isExternalStorageWritable())||(imageCapture == null))
40 Log.v(TAG, " takePhotoExternal() : cannot write image to external.")
44 Log.v(TAG, " takePhotoExternal()")
47 val outputDir = getExternalOutputDirectory()
49 val mimeType = "image/jpeg"
50 val photoFile = "P" + SimpleDateFormat(FILENAME_FORMAT, Locale.US).format(System.currentTimeMillis()) + "_" + id + ".jpg"
52 val extStorageUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI
54 val values = ContentValues()
55 values.put(MediaStore.Images.Media.TITLE, photoFile)
56 values.put(MediaStore.Images.Media.DISPLAY_NAME, photoFile)
57 values.put(MediaStore.Images.Media.MIME_TYPE, mimeType)
58 @Suppress("DEPRECATION")
59 values.put(MediaStore.Images.Media.DATA, outputDir.absolutePath + File.separator + photoFile)
61 val resolver = context.contentResolver
62 val imageUri = resolver.insert(extStorageUri, values)?: return (false)
63 resolver.update(imageUri, values, null, null)
65 /////////////////////////////
66 //val cursor = resolver.query(imageUri, null, null, null, null)
67 //DatabaseUtils.dumpCursor(cursor)
69 /////////////////////////////
71 val openStream = resolver.openOutputStream(imageUri) ?: return (false)
72 val outputOptions = ImageCapture.OutputFileOptions.Builder(openStream).build()
74 imageCapture.takePicture(
76 ContextCompat.getMainExecutor(context),
77 object : ImageCapture.OnImageSavedCallback
79 override fun onError(e: ImageCaptureException)
81 Log.e(TAG, "Photo capture failed: ${e.message} ", e)
85 override fun onImageSaved(output: ImageCapture.OutputFileResults)
87 val msg = context.getString(ID_MESSAGE_LABEL_CAPTURE_SUCCESS) + " ${outputDir.canonicalPath}/$photoFile"
88 Toast.makeText(context.baseContext, msg, Toast.LENGTH_SHORT).show()
101 private fun isExternalStorageWritable(): Boolean
103 return (Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED)
108 private val TAG = ImageStoreExternalLegacy::class.java.simpleName
109 private const val FILENAME_FORMAT = "yyyyMMdd_HHmmss"