fix: resolve conflicting companion objects and method definitions in CameraActivity

This commit is contained in:
xiajiid
2026-02-11 19:16:43 +08:00
parent e75c9f5c45
commit 8344f55c4c

View File

@@ -35,16 +35,19 @@ import java.util.concurrent.Executors
class CameraActivity : AppCompatActivity() {
companion object {
companion object {
private const val TAG = "LogCam"
private const val REQUEST_CODE_PERMISSIONS = 10
private val REQUIRED_PERMISSIONS = arrayOf(
Manifest.permission.CAMERA
)
// 拍照模式常量定义
private const val MODE_PHOTO = 0 // 普通拍照
private const val MODE_WATERMARK = 1 // 水印模式
private const val MODE_COMPOSE = 2 // 合成模式
}
private lateinit var viewFinder: PreviewView
private lateinit var captureButton: ImageButton
private lateinit var settingsButton: ImageButton
@@ -56,12 +59,6 @@ companion object {
private var captureMode = MODE_PHOTO // 默认为普通拍照模式
private var watermarkEnabled = true // 是否启用时间戳水印
// 常量定义
companion object {
private const val MODE_PHOTO = 0 // 普通拍照
private const val MODE_WATERMARK = 1 // 水印模式
private const val MODE_COMPOSE = 2 // 合成模式
}
private lateinit var cameraExecutor: ExecutorService
@@ -101,6 +98,8 @@ companion object {
// 设置点击监听器
captureButton.setOnClickListener { takePhoto() }
settingsButton.setOnClickListener { openSettings() }
}
private fun showModeSelectionDialog() {
val popupMenu = PopupMenu(this, modeButton)
popupMenu.menu.apply {
@@ -210,44 +209,32 @@ companion object {
val msg = "照片已保存: ${savedUri.lastPathSegment}"
Log.d(TAG, msg)
// 验证文件是否真的存在
try {
val cursor = contentResolver.query(savedUri, null, null, null, null)
if (cursor != null && cursor.moveToFirst()) {
Log.d(TAG, "文件验证成功: ${savedUri}")
// 添加到列表并显示预览
capturedImageUris.add(savedUri)
showPhotoPreview(savedUri)
// 如果已经有4张照片显示合成按钮
if (capturedImageUris.size >= 4) {
showComposeButton()
}
// 根据当前模式决定后续处理
when (captureMode) {
MODE_PHOTO -> {
// 普通模式:直接添加到预览
runOnUiThread {
Toast.makeText(baseContext, "照片已保存", Toast.LENGTH_SHORT).show()
showPhotoPreview(savedUri)
}
} else {
Log.w(TAG, "文件验证失败但onImageSaved被调用: ${savedUri}")
}
MODE_WATERMARK -> {
// 水印模式:添加水印后再显示
addWatermarkAndSave(savedUri)
}
MODE_COMPOSE -> {
// 合成模式:添加到合成列表
runOnUiThread {
Toast.makeText(baseContext, "照片可能未保存", Toast.LENGTH_SHORT).show()
Toast.makeText(baseContext, "图片已添加到合成列表", Toast.LENGTH_SHORT).show()
showPhotoPreview(savedUri)
capturedImageUris.add(savedUri)
// 如果已经有4张照片显示合成按钮
if (capturedImageUris.size >= 4) {
showComposeButton()
}
}
}
cursor?.close()
} catch (e: Exception) {
Log.e(TAG, "文件验证异常: ${e.message}")
// 即使验证失败,也尝试添加到列表
capturedImageUris.add(savedUri)
showPhotoPreview(savedUri)
// 如果已经有4张照片显示合成按钮
if (capturedImageUris.size >= 4) {
showComposeButton()
}
runOnUiThread {
Toast.makeText(baseContext, "照片已保存", Toast.LENGTH_SHORT).show()
}
}
} else {
Log.w(TAG, "onImageSaved被调用但savedUri为null")
@@ -298,18 +285,6 @@ companion object {
if (cursor != null && cursor.moveToFirst()) {
val displayName = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DISPLAY_NAME))
Log.d(TAG, "图片捕获失败但文件已存在: $displayName")
// 获取最新保存的文件URI
val latestUri = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media._ID))
val latestUriObj = Uri.parse("${MediaStore.Images.Media.EXTERNAL_CONTENT_URI}/$latestUri")
// 添加到列表并显示预览
capturedImageUris.add(latestUriObj)
showPhotoPreview(latestUriObj)
// 如果已经有4张照片显示合成按钮
if (capturedImageUris.size >= 4) {
showComposeButton()
}
runOnUiThread {
Toast.makeText(baseContext, "图片已保存: $displayName", Toast.LENGTH_LONG).show()
}
@@ -349,18 +324,6 @@ companion object {
// 检查是否在最近几秒内保存了文件
if (Math.abs(currentTime - dateAdded) <= 5) {
Log.d(TAG, "processing错误但图片已保存: $displayName")
// 获取最新保存的文件URI
val latestUri = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media._ID))
val latestUriObj = Uri.parse("${MediaStore.Images.Media.EXTERNAL_CONTENT_URI}/$latestUri")
// 添加到列表并显示预览
capturedImageUris.add(latestUriObj)
showPhotoPreview(latestUriObj)
// 如果已经有4张照片显示合成按钮
if (capturedImageUris.size >= 4) {
showComposeButton()
}
runOnUiThread {
Toast.makeText(baseContext, "图片已保存: $displayName", Toast.LENGTH_LONG).show()
}
@@ -397,6 +360,8 @@ companion object {
}
}
)
}
private fun addWatermarkAndSave(originalUri: Uri) {
try {
// 读取原始图片
@@ -500,8 +465,6 @@ companion object {
return mutableBitmap
}
}
private fun createOutputFileOptions(): ImageCapture.OutputFileOptions {
val timestamp = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(Date())
@@ -622,30 +585,6 @@ companion object {
}
}
private fun addWatermarkToBitmap(originalBitmap: Bitmap): Bitmap {
val timestamp = SimpleDateFormat("yyyy年-MM月-dd日 HH:mm:ss", Locale.getDefault()).format(Date())
val mutableBitmap = originalBitmap.copy(Bitmap.Config.ARGB_8888, true)
val canvas = Canvas(mutableBitmap)
val paint = Paint().apply {
color = Color.WHITE
textSize = 32f
typeface = Typeface.DEFAULT_BOLD
setShadowLayer(5f, 0f, 0f, Color.BLACK)
}
val textWidth = paint.measureText(timestamp)
val textHeight = paint.descent() - paint.ascent()
val x = 20f
val y = mutableBitmap.height - textHeight - 20f
canvas.drawText(timestamp, x, y, paint)
return mutableBitmap
}
private fun openSettings() {
// 打开设置页面
val settingsFragment = SettingsFragment()