app/src/main/java/com/example/firstapp/ui/profile/EditProfileActivity.kt
@@ -18,8 +18,11 @@
import androidx.core.content.ContextCompat
import androidx.lifecycle.lifecycleScope
import com.bumptech.glide.Glide
import com.example.firstapp.database.response.UserInfo
import com.example.firstapp.databinding.ActivityEditProfileBinding
import com.example.firstapp.database.service.ApiService
import com.example.firstapp.database.service.RetrofitClient
import com.example.firstapp.utils.PreferencesManager
import kotlinx.coroutines.launch
import java.io.File
import okhttp3.MediaType.Companion.toMediaType
@@ -31,18 +34,43 @@
class EditProfileActivity : AppCompatActivity() {
    private lateinit var binding: ActivityEditProfileBinding
    private var selectedImageUri: Uri? = null
    private lateinit var apiService: ApiService
    private var loadingDialog: AlertDialog? = null
    private val pickImage = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
        if (result.resultCode == Activity.RESULT_OK) {
            result.data?.data?.let { uri ->
                selectedImageUri = uri
                Glide.with(this)
                    .load(uri)
                    .circleCrop()
                    .into(binding.ivAvatar)
            }
//    private val pickImage = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
//        if (result.resultCode == Activity.RESULT_OK) {
//            result.data?.data?.let { uri ->
//                selectedImageUri = uri
//                Glide.with(this)
//                    .load(uri)
//                    .circleCrop()
//                    .into(binding.ivAvatar)
//            }
//        }
//    }
    private val pickImageLauncher = registerForActivityResult(
        ActivityResultContracts.GetContent()
    ) { uri: Uri? ->
        uri?.let {
            selectedImageUri = uri
            // 这里直接处理选中的头像
            Glide.with(this)
                .load(it)
                .into(binding.ivAvatar) // 替换成你的 ImageView id
            // 如果需要上传可以用 contentResolver.openInputStream(uri)
        }
    }
    // 👇 就放在这里
    private val permissionLauncher = registerForActivityResult(
        ActivityResultContracts.RequestPermission()
    ) { isGranted: Boolean ->
        if (isGranted) {
            openGallery()
        } else {
            Toast.makeText(this, "需要权限才能选择头像", Toast.LENGTH_SHORT).show()
        }
    }
@@ -76,13 +104,29 @@
        }
        binding.ivAvatar.setOnClickListener {
            checkAndRequestPermission()
//            checkAndRequestPermission()
            checkStoragePermission()
        }
        binding.btnSaveBottom.setOnClickListener {
            saveAndFinish()
        }
    }
    fun checkStoragePermission() {
        val permission = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
            Manifest.permission.READ_MEDIA_IMAGES
        } else {
            Manifest.permission.READ_EXTERNAL_STORAGE
        }
        if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
            permissionLauncher.launch(permission)
        } else {
            openGallery()
        }
    }
    private fun saveAndFinish() {
        lifecycleScope.launch {
@@ -114,12 +158,38 @@
                }
                // 调用更新接口
                apiService.updateProfile(
                RetrofitClient.apiService.updateProfile(
                    nickname = nicknameBody,
                    avatar = avatarPart
                )
                Toast.makeText(this@EditProfileActivity, "保存成功", Toast.LENGTH_SHORT).show()
                // 更新用户信息
                // 从本地获取保存的手机号
                val savedPhone = PreferencesManager.getPhone()
                if (savedPhone.isNullOrEmpty()) {
                    Toast.makeText(this@EditProfileActivity, "用户未登录", Toast.LENGTH_SHORT).show()
                    return@launch
                }
                val response = RetrofitClient.apiService.getUserInfo(savedPhone)
                if (response.code == "0" && response.data != null) {
                    // 保存用户信息
                    val userInfo:UserInfo = response.data
                    // 获取传入的数据
                    val currentNickname = userInfo.name
                    val currentAvatarUrl = userInfo.cover
                    // 设置当前数据
                    binding.etNickname.setText(currentNickname)
                    if (!currentAvatarUrl.isNullOrEmpty()) {
                        Glide.with(this@EditProfileActivity)
                            .load(currentAvatarUrl)
                            .circleCrop()
                            .into(binding.ivAvatar)
                    }
                }
                finish()
            } catch (e: Exception) {
@@ -166,9 +236,16 @@
        }
    }
    private fun openGallery() {
    private fun openGallery_bak() {
        val intent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
        pickImage.launch(intent)
//        pickImage.launch(intent)
    }
    private fun openGallery() {
        pickImageLauncher.launch("image/*")
//        val intent = Intent(Intent.ACTION_PICK)
//        intent.type = "image/*"
//        startActivityForResult(intent, 1001)
    }
    private fun showLoading() {