Skip to content

Commit

Permalink
add file save code in CaptureWithExternalCameraUseCase [#58]
Browse files Browse the repository at this point in the history
  • Loading branch information
DokySp committed Oct 9, 2024
1 parent dea58f1 commit 3f2c620
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 19 deletions.
Original file line number Diff line number Diff line change
@@ -1,20 +1,25 @@
package com.foke.together.domain.interactor

import android.content.Context
import com.foke.together.domain.output.ExternalCameraRepositoryInterface
import com.foke.together.util.AppLog
import com.foke.together.util.ImageFileUtil
import com.foke.together.util.TimeUtil
import dagger.hilt.android.qualifiers.ApplicationContext
import javax.inject.Inject

// TODO: CameraScreen에서 filepath를 TimeUtil.getCurrentTimeSec() 로 전달
// filepath를 ScameraScreen -> GenerateScreen -> ShareScreen 로 전달
// 추후에는 filepath를 presenter에서 관리하지 않도록 해야 할듯
class CaptureWithExternalCameraUseCase @Inject constructor(
@ApplicationContext private val context: Context,
private val externalCameraRepository: ExternalCameraRepositoryInterface
) {
suspend operator fun invoke(): Result<Unit> {
suspend operator fun invoke(filepath: String): Result<Unit> {
externalCameraRepository.capture()
.onSuccess {
// TODO: save Bitmap to internal storage
AppLog.i(TAG, "capture", "success: $it")

// TODO: implement file save code here ...

// TODO: create file module in phase4
ImageFileUtil.saveBitmap(context, it, filepath, TimeUtil.getCurrentTimeMillis())
return Result.success(Unit)
}
.onFailure {
Expand Down
20 changes: 11 additions & 9 deletions util/src/main/java/com/foke/together/util/ImageFileUtil.kt
Original file line number Diff line number Diff line change
Expand Up @@ -19,32 +19,34 @@ object ImageFileUtil {
suspend fun saveGraphicsLayer(
context: Context,
graphicsLayer: GraphicsLayer,
filepath: String,
fileName: String
): Uri {
var uri : Uri = Uri.EMPTY
val bitmap = graphicsLayer.toImageBitmap()
bitmap.asAndroidBitmap().saveToDisk(context, fileName)
bitmap.asAndroidBitmap().saveToInternalStorage(context, filepath, fileName)
return uri
}

suspend fun saveBitmap(
context: Context,
bitmap: Bitmap,
filepath: String,
fileName: String
): Uri {
var uri : Uri = Uri.EMPTY
bitmap.saveToDisk(context, fileName)
// TODO: implement to use uri
val uri : Uri = Uri.EMPTY
bitmap.saveToInternalStorage(context, filepath, fileName)
return uri
}

private suspend fun Bitmap.saveToDisk(context: Context, fileName: String): Uri {
val file = File(
context.filesDir,
fileName + ".jpg"
)
private suspend fun Bitmap.saveToInternalStorage(context: Context, filepath: String, filename: String): Uri {
val baseDir = context.filesDir.absoluteFile
val path = File("$baseDir$filepath")
if (!path.exists()) { path.mkdirs() }

val file = File(filepath, "$filename.jpeg")
file.writeBitmap(this, Bitmap.CompressFormat.JPEG, 100)

return scanFilePath(context, file.path) ?: throw Exception("File could not be saved")
}

Expand Down
31 changes: 27 additions & 4 deletions util/src/main/java/com/foke/together/util/TimeUtil.kt
Original file line number Diff line number Diff line change
@@ -1,9 +1,32 @@
package com.foke.together.util

import java.text.SimpleDateFormat
import java.util.Date

object TimeUtil {
fun getCurrentTime(): String {
// TODO. Implement this function
// - output format example: "2024.09.27"
return "2024.09.27"
fun getCurrentDisplayTime(): String {
val dateFormat = "yyyy.MM.dd"
val date = Date(System.currentTimeMillis())
val simpleDateFormat = SimpleDateFormat(dateFormat)
val simpleDate: String = simpleDateFormat.format(date)
return simpleDate
}

fun getCurrentTimeSec(): String {
val timeFormat = "yyyyMMddHHmmss"
// TODO: LocalDate로 변경
val time = Date(System.currentTimeMillis())
val simpleTimeFormat = SimpleDateFormat(timeFormat)
val simpleTime: String = simpleTimeFormat.format(time)
return simpleTime
}

fun getCurrentTimeMillis(): String {
val timeFormat = "yyyyMMddHHmmssSSS"
// TODO: LocalDate로 변경
val time = Date(System.currentTimeMillis())
val simpleTimeFormat = SimpleDateFormat(timeFormat)
val simpleTime: String = simpleTimeFormat.format(time)
return simpleTime
}
}

0 comments on commit 3f2c620

Please sign in to comment.