diff --git a/app/build.gradle b/app/build.gradle
index 491a0659..ce6d09d5 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -96,7 +96,6 @@ dependencies {
// Coroutine
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3'
- implementation("io.coil-kt:coil:2.0.0-rc03")
// RoomDB
def room_version = '2.5.2'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3e861d28..6c87a994 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -66,17 +66,10 @@
-
-
-
-
-
diff --git a/app/src/main/java/com/example/cherry_pick_android/presentation/ui/mypage/ProfileActivity.kt b/app/src/main/java/com/example/cherry_pick_android/presentation/ui/mypage/ProfileActivity.kt
index 01195d41..26b397bf 100644
--- a/app/src/main/java/com/example/cherry_pick_android/presentation/ui/mypage/ProfileActivity.kt
+++ b/app/src/main/java/com/example/cherry_pick_android/presentation/ui/mypage/ProfileActivity.kt
@@ -1,9 +1,11 @@
package com.example.cherry_pick_android.presentation.ui.mypage
+import android.Manifest
import android.content.ContentValues
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
+import android.os.Build
import android.os.Bundle
import android.provider.MediaStore
import android.util.Log
@@ -13,6 +15,8 @@ import android.widget.Toast
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat
+import coil.load
+import com.bumptech.glide.Glide
import com.example.cherry_pick_android.R
import com.example.cherry_pick_android.databinding.ActivityProfileBinding
import com.example.cherry_pick_android.presentation.ui.jobGroup.JobGroupActivity
@@ -26,20 +30,25 @@ class ProfileActivity : AppCompatActivity(),CameraDialogInterface {
private lateinit var binding: ActivityProfileBinding
companion object {
- const val REQUEST_CODE_PERMISSIONS = 1001
- const val ALBUM_OK = 2002
- const val CAMERA_OK = 2003
- const val BASIC_OK = 2004
const val TAG = "ProfileActivity"
}
-
-
- private fun checkPermission(permissions: Array): Boolean {
- return permissions.all {
- ContextCompat.checkSelfPermission(this, it) == PackageManager.PERMISSION_GRANTED
+ // 요청하고자 하는 권한들
+ private val permissions = arrayOf(
+ Manifest.permission.CAMERA,
+ // Manifest.permission.WRITE_EXTERNAL_STORAGE,
+ // Manifest.permission.READ_EXTERNAL_STORAGE
+ )
+ // 권한 확인 응답
+ private val getPermissionResult = registerForActivityResult(
+ ActivityResultContracts.RequestMultiplePermissions()
+ ) {
+ if (it.all { permission -> permission.value == true }) {
+ } else {
+ Toast.makeText(this, "권한을 거부하였습니다.", Toast.LENGTH_SHORT).show()
}
}
+ // 촬영한 사진 불러오기
// 이미지 로드
private val readImage = registerForActivityResult(
ActivityResultContracts.GetContent()) {
@@ -48,18 +57,22 @@ class ProfileActivity : AppCompatActivity(),CameraDialogInterface {
// 카메라를 실행한 후 찍은 사진을 저장
var pictureUri: Uri? = null
- private val getTakePicture = registerForActivityResult(ActivityResultContracts.TakePicture()) {
- if(it) {
- pictureUri.let { binding.ivProfilePic.setImageURI(pictureUri) }
+ private val getTakePicture = registerForActivityResult(
+ ActivityResultContracts.TakePicture()) {
+ if(it) { pictureUri.let {
+ Glide.with(this).load(pictureUri).circleCrop().into(binding.ivProfilePic)
+ }
}
}
- // 파일 불러오기
- private val getContentImage = registerForActivityResult(
- ActivityResultContracts.GetContent()) {
- uri ->
- uri.let { binding.ivProfilePic.setImageURI(uri)
- }
+ // 앨범으로부터 이미지 불러오기
+ private val getResultImage = registerForActivityResult(
+ ActivityResultContracts.StartActivityForResult()) {
+ if (it.resultCode == RESULT_OK) {
+ var imageUrl = it.data?.data
+ Glide.with(this).load(imageUrl).circleCrop().into(binding.ivProfilePic)
+ }
}
+
// 직군선택 결과 받아오기
private val getResultText = registerForActivityResult(
ActivityResultContracts.StartActivityForResult()){
@@ -98,30 +111,25 @@ class ProfileActivity : AppCompatActivity(),CameraDialogInterface {
dialog.show(this.supportFragmentManager, "CameraDialog")
}
}
- override fun onCameraClick(cameraMenu: String) {
- val camera_menu = cameraMenu
-
- //readImage.launch()
- // 권한 확인
- //checkPermission.launch(permissionList)
- //if (!checkPermission(permissions)) {
- // requestPermissions(permissions, REQUEST_CODE_PERMISSIONS)
- //}
-
- if (camera_menu=="@string/profile_img_fromAlbum"){
- getContentImage.launch("image/*")
- }
- else if (camera_menu=="@string/profile_img_fromCamera"){
- pictureUri = createImageFile()
- getTakePicture.launch(pictureUri)
- }
- else if (camera_menu=="@string/profile_img_basic"){
- binding.ivProfilePic.setImageResource(R.drawable.ic_my_page_user)
- }
- else if (camera_menu=="@string/profile_img_cancel"){
- // 변화없음
- }
+ // 앨범 이미지 불러오기
+ override fun onAlbumClick(intent: Intent) {
+ checkPermission(permissions)
+ getResultImage.launch(intent)
+ }
+ // 카메라 촬영 후 이미지 불러오기
+ override fun onCameraClick(intent:Intent) {
+ checkPermission(permissions)
+ pictureUri = createImageFile()
+ getTakePicture.launch(pictureUri)
}
+ // 기본 이미지로 변경
+ override fun onBasicClick(intent: Intent) {
+ binding.ivProfilePic.setImageDrawable(getDrawable(R.drawable.ic_my_page_user))
+ }
+ // 이미지 변경 취소
+ override fun onCancelClick(intent: Intent) { }
+
+ // 고유 이름으로 이미지 파일 생성
private fun createImageFile(): Uri? {
val now = SimpleDateFormat("yyMMdd_HHmmss").format(System.currentTimeMillis())
val content = ContentValues().apply {
@@ -131,11 +139,10 @@ class ProfileActivity : AppCompatActivity(),CameraDialogInterface {
return contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, content)
}
+
// 직군정보 변경페이지로 이동
private fun ChangeJobInterest() {
binding.ibtnProfileJobChange.setOnClickListener {
- //val intent = Intent(this,JobGroupActivity::class.java)
- //startActivity(intent)
val intent = Intent(this, JobGroupActivity::class.java)
getResultText.launch(intent)
}
@@ -173,4 +180,18 @@ class ProfileActivity : AppCompatActivity(),CameraDialogInterface {
}
}
+ private fun checkPermission(permissions: Array){
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ // 권한 허용 여부 확인
+ if (permissions.all {
+ ContextCompat.checkSelfPermission(this, it) == PackageManager.PERMISSION_GRANTED
+ }) {
+ Toast.makeText(this, "카메라 권한이 허용되어 있습니다.", Toast.LENGTH_SHORT).show()
+ }
+ // 권한 요청
+ else {
+ getPermissionResult.launch(permissions)
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/cherry_pick_android/presentation/ui/mypage/dialog/CameraDialog.kt b/app/src/main/java/com/example/cherry_pick_android/presentation/ui/mypage/dialog/CameraDialog.kt
index f6dfd1d0..802b6fa0 100644
--- a/app/src/main/java/com/example/cherry_pick_android/presentation/ui/mypage/dialog/CameraDialog.kt
+++ b/app/src/main/java/com/example/cherry_pick_android/presentation/ui/mypage/dialog/CameraDialog.kt
@@ -15,6 +15,7 @@ import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.view.WindowManager
import android.widget.Toast
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
@@ -24,6 +25,8 @@ import androidx.core.app.ActivityCompat.startActivityForResult
import androidx.core.content.ContextCompat
import androidx.core.content.ContextCompat.getColor
import androidx.fragment.app.DialogFragment
+import androidx.fragment.app.setFragmentResult
+import coil.load
import com.example.cherry_pick_android.R
import com.example.cherry_pick_android.databinding.DialogCameraBinding
import com.example.cherry_pick_android.databinding.DialogGenderBinding
@@ -37,54 +40,69 @@ class CameraDialog (
): DialogFragment() {
companion object {
const val TAG = "CameraDialog"
+ const val PICK_IMAGE_FROM_ALBUM = 0
}
+
private var cameraDialogInterface: CameraDialogInterface? = null
private val binding: DialogCameraBinding by lazy {
DialogCameraBinding.inflate(layoutInflater)
}
+
init {
this.cameraDialogInterface = cameraDialogInterface
}
- // 요청하고자 하는 권한들
- private val permissions = arrayOf(
- Manifest.permission.CAMERA,
- Manifest.permission.WRITE_EXTERNAL_STORAGE,
- Manifest.permission.READ_EXTERNAL_STORAGE)
-
- //var hasCameraPerm = checkSelfPermission(android.Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED
- //var hasWritePerm = checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
- //var hasReadPerm = checkSelfPermission(android.Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
-
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
- dialog?.window?.setDimAmount(0.5F)
+ dialog?.window?.setDimAmount(0.7F)
dialog?.window?.setGravity(Gravity.BOTTOM)
+ dialog?.setCancelable(false)
+
binding.tvImgFromAlbum.setOnClickListener {
- //binding.tvImgFromAlbum.setTextColor(requireContext().getColor(R.color.main_pink))
- //context?.let { it1 -> binding.tvImgFromAlbum.setTextColor(it1.getColor(R.color.main_pink)) }
- this.cameraDialogInterface?.onCameraClick(binding.tvImgFromAlbum.toString())
+ Log.d(TAG, "앨범으로부터 이미지변경")
+ var photoPickerIntent = Intent(Intent.ACTION_PICK)
+ photoPickerIntent.type = "image/*"
+ this.cameraDialogInterface?.onAlbumClick(photoPickerIntent)
+
+ dismiss()
}
binding.tvImgFromCamera.setOnClickListener {
Log.d(TAG, "카메라로부터 이미지변경")
- this.cameraDialogInterface?.onCameraClick(binding.tvImgFromCamera.toString())
+ var photoCameraIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
+ this.cameraDialogInterface?.onCameraClick(photoCameraIntent)
+
+ dismiss()
}
binding.tvImgBasic.setOnClickListener {
- this.cameraDialogInterface?.onCameraClick(binding.tvImgBasic.toString())
+ Log.d(TAG, "기본 이미지로 변경")
+ activity?.let {
+ var photoBasicIntent = Intent(it, ProfileActivity::class.java)
+ this.cameraDialogInterface?.onBasicClick(photoBasicIntent)
+ }
+
+ dismiss()
}
binding.tvImgCancel.setOnClickListener {
- Log.d(TAG, "프로필이미지변경 취소")
- this.cameraDialogInterface?.onCameraClick(binding.tvImgCancel.toString())
+ Log.d(TAG, "프로필이미지 변경 취소")
+ activity?.let {
+ var photoCancelIntent = Intent(it, ProfileActivity::class.java)
+ this.cameraDialogInterface?.onCancelClick(photoCancelIntent)
+ }
dismiss()
}
return binding.root
}
+
+
+
+
+
}
diff --git a/app/src/main/java/com/example/cherry_pick_android/presentation/ui/mypage/dialog/CameraDialogInterface.kt b/app/src/main/java/com/example/cherry_pick_android/presentation/ui/mypage/dialog/CameraDialogInterface.kt
index 86aedde6..6f647796 100644
--- a/app/src/main/java/com/example/cherry_pick_android/presentation/ui/mypage/dialog/CameraDialogInterface.kt
+++ b/app/src/main/java/com/example/cherry_pick_android/presentation/ui/mypage/dialog/CameraDialogInterface.kt
@@ -1,5 +1,10 @@
package com.example.cherry_pick_android.presentation.ui.mypage.dialog
+import android.content.Intent
+
interface CameraDialogInterface {
- fun onCameraClick(cameraMenu: String)
+ fun onAlbumClick(intent : Intent)
+ fun onCameraClick(intent : Intent)
+ fun onBasicClick(intent: Intent)
+ fun onCancelClick(intent: Intent)
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_camera_dialog.xml b/app/src/main/res/drawable/bg_camera_dialog.xml
index 88b7fe84..450740b1 100644
--- a/app/src/main/res/drawable/bg_camera_dialog.xml
+++ b/app/src/main/res/drawable/bg_camera_dialog.xml
@@ -1,7 +1,7 @@
-
+