From 5c73f167603693d5e015193730bf16f3b6bb2bf5 Mon Sep 17 00:00:00 2001
From: cloudroam <cloudroam>
Date: 星期二, 25 三月 2025 13:47:54 +0800
Subject: [PATCH] fix 1111
---
/dev/null | 0
app/src/main/java/com/example/firstapp/ui/notifications/NotificationsFragment.kt | 14 +--
app/src/main/java/com/example/firstapp/ui/profile/EditProfileActivity.kt | 91 +++++++++++++++++++---
app/src/main/res/values/strings.xml | 2
app/src/main/res/layout/activity_edit_profile.xml | 4
app/src/main/java/com/example/firstapp/model/UpdateProfileRequest.kt | 1
app/src/main/java/com/example/firstapp/database/service/ApiService.kt | 11 ++
app/src/main/res/drawable/me_ai_assistant.xml | 21 +++++
app/src/main/res/layout/fragment_notifications.xml | 38 +++++++--
app/src/main/res/values/colors.xml | 2
app/build.gradle | 2
app/src/main/java/com/example/firstapp/database/response/UserInfo.kt | 1
12 files changed, 152 insertions(+), 35 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index 5dbd017..6ae6903 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -277,4 +277,6 @@
implementation 'com.github.bumptech.glide:glide:4.12.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
+ implementation 'com.squareup.okhttp3:okhttp:4.9.0'
+
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/firstapp/database/response/UserInfo.kt b/app/src/main/java/com/example/firstapp/database/response/UserInfo.kt
index a9c0cec..3e5c46c 100644
--- a/app/src/main/java/com/example/firstapp/database/response/UserInfo.kt
+++ b/app/src/main/java/com/example/firstapp/database/response/UserInfo.kt
@@ -7,5 +7,6 @@
val cover: String,
val contactTel: String,
val passTime: String,
+ val overTime: String,
val showed: Boolean
)
\ No newline at end of file
diff --git a/app/src/main/java/com/example/firstapp/database/service/ApiService.kt b/app/src/main/java/com/example/firstapp/database/service/ApiService.kt
index b563cd2..691f7ab 100644
--- a/app/src/main/java/com/example/firstapp/database/service/ApiService.kt
+++ b/app/src/main/java/com/example/firstapp/database/service/ApiService.kt
@@ -7,10 +7,14 @@
import com.example.firstapp.database.response.LoginResponse
import com.example.firstapp.database.response.SecurityResponse
import com.example.firstapp.database.response.UserInfo
+import okhttp3.MultipartBody
+import okhttp3.RequestBody
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import retrofit2.http.GET
+import retrofit2.http.Multipart
import retrofit2.http.POST
+import retrofit2.http.Part
import retrofit2.http.Path
import retrofit2.http.Query
@@ -39,6 +43,13 @@
@GET("flower/api/supplier/info/{phone}")
suspend fun getUserInfo(@Path("phone") phone: String): ApiResponse<UserInfo>
+
+ @Multipart
+ @POST("api/supplier/operation/update")
+ suspend fun updateProfile(
+ @Part("nickname") nickname: RequestBody,
+ @Part avatar: MultipartBody.Part?
+ ): ApiResponse<Unit>
}
// 创建Retrofit实例(单例)
diff --git a/app/src/main/java/com/example/firstapp/model/UpdateProfileRequest.kt b/app/src/main/java/com/example/firstapp/model/UpdateProfileRequest.kt
new file mode 100644
index 0000000..0519ecb
--- /dev/null
+++ b/app/src/main/java/com/example/firstapp/model/UpdateProfileRequest.kt
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/src/main/java/com/example/firstapp/ui/notifications/NotificationsFragment.kt b/app/src/main/java/com/example/firstapp/ui/notifications/NotificationsFragment.kt
index 4f3ba17..ea75a47 100644
--- a/app/src/main/java/com/example/firstapp/ui/notifications/NotificationsFragment.kt
+++ b/app/src/main/java/com/example/firstapp/ui/notifications/NotificationsFragment.kt
@@ -13,6 +13,7 @@
import android.widget.Toast
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
+import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController
@@ -178,14 +179,6 @@
}
// 头像点击老的处理逻辑
-// binding.layoutUserInfo.setOnClickListener {
-// val intent = Intent(requireContext(), EditProfileActivity::class.java).apply {
-// putExtra("nickname", binding.tvNickname.text.toString())
-// putExtra("avatar_url", binding.ivAvatar.toString())
-// }
-// editProfileLauncher.launch(intent)
-// }
-
binding.layoutUserInfo.setOnClickListener {
currentUserInfo?.let { user ->
val intent = Intent(requireContext(), EditProfileActivity::class.java).apply {
@@ -286,8 +279,11 @@
if (userInfo.showed) {
binding.ivVip.visibility = View.VISIBLE
binding.cardVip.visibility = View.VISIBLE
- binding.tvVipExpire.text = "${userInfo.passTime} 到期"
+ binding.tvVipExpire.text = "${userInfo.overTime} 到期"
} else {
+ //非会员信息
+ binding.btnRenew.text = "立即开通"
+ binding.linearVipContainer.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.gray))
binding.cardVip.visibility = View.GONE
}
}
diff --git a/app/src/main/java/com/example/firstapp/ui/profile/EditProfileActivity.kt b/app/src/main/java/com/example/firstapp/ui/profile/EditProfileActivity.kt
index 45d4c18..49d435c 100644
--- a/app/src/main/java/com/example/firstapp/ui/profile/EditProfileActivity.kt
+++ b/app/src/main/java/com/example/firstapp/ui/profile/EditProfileActivity.kt
@@ -9,17 +9,30 @@
import android.os.Bundle
import android.provider.MediaStore
import android.view.View
+import android.widget.ProgressBar
import android.widget.Toast
import androidx.activity.result.contract.ActivityResultContracts
+import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
+import androidx.lifecycle.lifecycleScope
import com.bumptech.glide.Glide
import com.example.firstapp.databinding.ActivityEditProfileBinding
+import com.example.firstapp.database.service.ApiService
+import kotlinx.coroutines.launch
+import java.io.File
+import okhttp3.MediaType.Companion.toMediaType
+import okhttp3.MultipartBody
+import okhttp3.RequestBody
+import okhttp3.RequestBody.Companion.asRequestBody
+import okhttp3.RequestBody.Companion.toRequestBody
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) {
@@ -69,25 +82,53 @@
binding.btnSaveBottom.setOnClickListener {
saveAndFinish()
}
-
- binding.btnSaveBottom.setOnClickListener {
- saveAndFinish()
- }
}
private fun saveAndFinish() {
- val newNickname = binding.etNickname.text.toString()
- if (newNickname.isEmpty()) {
- Toast.makeText(this, "昵称不能为空", Toast.LENGTH_SHORT).show()
- return
- }
+ lifecycleScope.launch {
+ try {
+ binding.btnSaveBottom.isEnabled = false
+ showLoading()
- val resultIntent = Intent().apply {
- putExtra("nickname", newNickname)
- putExtra("avatar_uri", selectedImageUri?.toString())
+ val newNickname = binding.etNickname.text.toString()
+ if (newNickname.isEmpty()) {
+ Toast.makeText(this@EditProfileActivity, "昵称不能为空", Toast.LENGTH_SHORT).show()
+ return@launch
+ }
+
+ // 准备文件和参数
+ val nicknameBody = newNickname.toRequestBody("text/plain".toMediaType())
+
+ // 如果选择了新头像,处理文件
+ val avatarPart = selectedImageUri?.let { uri ->
+ val inputStream = contentResolver.openInputStream(uri)
+ val file = File(cacheDir, "avatar_temp")
+ inputStream?.use { input ->
+ file.outputStream().use { output ->
+ input.copyTo(output)
+ }
+ }
+
+ val requestFile = file.asRequestBody("image/*".toMediaType())
+ MultipartBody.Part.createFormData("avatar", file.name, requestFile)
+ }
+
+ // 调用更新接口
+ apiService.updateProfile(
+ nickname = nicknameBody,
+ avatar = avatarPart
+ )
+
+ Toast.makeText(this@EditProfileActivity, "保存成功", Toast.LENGTH_SHORT).show()
+ finish()
+
+ } catch (e: Exception) {
+ Toast.makeText(this@EditProfileActivity, "保存失败: ${e.message}", Toast.LENGTH_SHORT).show()
+ } finally {
+ binding.btnSaveBottom.isEnabled = true
+ hideLoading()
+ }
}
- setResult(Activity.RESULT_OK, resultIntent)
- finish()
}
private fun checkAndRequestPermission() {
@@ -130,6 +171,28 @@
pickImage.launch(intent)
}
+ private fun showLoading() {
+ if (loadingDialog == null) {
+ loadingDialog = AlertDialog.Builder(this)
+ .setView(ProgressBar(this))
+ .setCancelable(false)
+ .create()
+ }
+ loadingDialog?.show()
+ }
+
+ private fun hideLoading() {
+ loadingDialog?.dismiss()
+ }
+
+ private fun String.toRequestBody(mediaType: String): RequestBody {
+ return this.toRequestBody(mediaType.toMediaType())
+ }
+
+ private fun File.asRequestBody(mediaType: String): RequestBody {
+ return this.asRequestBody(mediaType.toMediaType())
+ }
+
companion object {
private const val PERMISSION_REQUEST_CODE = 100
}
diff --git a/app/src/main/res/drawable/bg_button_black.xml b/app/src/main/res/drawable/bg_button_black.xml
deleted file mode 100644
index 55bcaa7..0000000
--- a/app/src/main/res/drawable/bg_button_black.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<shape xmlns:android="http://schemas.android.com/apk/res/android">
- <solid android:color="@android:color/black"/>
- <corners android:radius="4dp"/>
-</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/me_ai_assistant.png b/app/src/main/res/drawable/me_ai_assistant.png
deleted file mode 100644
index 4eaeba7..0000000
--- a/app/src/main/res/drawable/me_ai_assistant.png
+++ /dev/null
Binary files differ
diff --git a/app/src/main/res/drawable/me_ai_assistant.xml b/app/src/main/res/drawable/me_ai_assistant.xml
new file mode 100644
index 0000000..9896f27
--- /dev/null
+++ b/app/src/main/res/drawable/me_ai_assistant.xml
@@ -0,0 +1,21 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="48dp"
+ android:height="48dp"
+ android:viewportWidth="1024"
+ android:viewportHeight="1024">
+ <path
+ android:pathData="M512,512m-512,0a512,512 0,1 0,1024 0,512 512,0 1,0 -1024,0Z"
+ android:fillColor="#1A78EC"/>
+ <path
+ android:pathData="M515.5,181.1a334.5,334.5 0,0 1,325.9 259.2,49.3 49.3,0 0,1 12,-1.5c32.7,0 59.2,32.8 59.2,73.2s-26.5,73.1 -59.2,73.1a48.6,48.6 0,0 1,-10.5 -1.1,334.4 334.4,0 0,1 -651.3,14.5l-0.9,0.2 -6.1,0.4C151.9,599 125.4,566.3 125.4,525.9c0,-40.4 26.5,-73.2 59.2,-73.2l2.5,0.1A334.3,334.3 0,0 1,515.5 181.1z"
+ android:fillColor="#FCF6F6"/>
+ <path
+ android:pathData="M243.8,250.8m189.1,0l172.1,0q189.1,0 189.1,189.1l0,151.2q0,189.1 -189.1,189.1l-172.1,0q-189.1,0 -189.1,-189.1l0,-151.2q0,-189.1 189.1,-189.1Z"
+ android:fillColor="#182560"/>
+ <path
+ android:pathData="M365.7,402.3m19.9,0l33.3,0q19.9,0 19.9,19.9l0,179.6q0,19.9 -19.9,19.9l-33.3,0q-19.9,0 -19.9,-19.9l0,-179.6q0,-19.9 19.9,-19.9Z"
+ android:fillColor="#1A78EC"/>
+ <path
+ android:pathData="M621.7,402.3m19.9,0l33.3,0q19.9,0 19.9,19.9l0,179.6q0,19.9 -19.9,19.9l-33.3,0q-19.9,0 -19.9,-19.9l0,-179.6q0,-19.9 19.9,-19.9Z"
+ android:fillColor="#1A78EC"/>
+</vector>
diff --git a/app/src/main/res/layout/activity_edit_profile.xml b/app/src/main/res/layout/activity_edit_profile.xml
index d5653b2..1a86398 100644
--- a/app/src/main/res/layout/activity_edit_profile.xml
+++ b/app/src/main/res/layout/activity_edit_profile.xml
@@ -120,8 +120,10 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
- android:background="@drawable/bg_button_black"
+ android:backgroundTint="@color/cardview_dark_background"
android:text="保存"
android:textColor="@android:color/white"/>
+
+
</LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_notifications.xml b/app/src/main/res/layout/fragment_notifications.xml
index 7a1cb46..d0b76ad 100644
--- a/app/src/main/res/layout/fragment_notifications.xml
+++ b/app/src/main/res/layout/fragment_notifications.xml
@@ -76,6 +76,7 @@
app:cardElevation="4dp">
<LinearLayout
+ android:id="@+id/linearVipContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/black"
@@ -88,21 +89,40 @@
android:layout_weight="1"
android:orientation="vertical">
- <TextView
- android:layout_width="wrap_content"
+ <!-- 第一行:VIP标题 + 有效期 -->
+ <LinearLayout
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:text="VIP会员"
- android:textColor="#B8741A"
- android:textSize="18sp"
- android:textStyle="bold" />
+ android:orientation="horizontal"
+ android:gravity="center_vertical">
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="VIP会员 "
+ android:textColor="#B8741A"
+ android:textSize="18sp"
+ android:textStyle="bold"/>
+
+ <!-- 添加间隔 -->
+
+ <TextView
+ android:id="@+id/tv_vip_expire"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textColor="#FFD700"
+ android:textSize="14sp"/>
+ </LinearLayout>
+
+ <!-- 第二行:续费提示(上移调整) -->
<TextView
- android:id="@+id/tv_vip_expire"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
- android:textColor="#FFD700"
- android:textSize="14sp" />
+ android:text="续费畅享更多会员权益"
+ android:textColor="#B8741A"
+ android:textSize="12sp"
+ android:textStyle="bold"/>
</LinearLayout>
<Button
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 0c67673..9ea2a28 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -12,7 +12,7 @@
<color name="light_blue_A200">#FF40C4FF</color>
<color name="light_blue_A400">#FF00B0FF</color>
<color name="black_overlay">#66000000</color>
- <color name="gray">#757575</color>
+ <color name="gray">#757575</color> <!-- 标准灰色 #808080 主要用到到会员模块-->
<color name="light_blue_50">#E1F5FE</color>
<color name="tab_selected">#FF039BE5</color>
<color name="light_blue_new">#02A7F0</color>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 99924ef..feb8be6 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -2,7 +2,7 @@
<string name="app_name">智信管家</string>
<string name="title_home">首页</string>
<string name="title_dashboard">数据统计</string>
- <string name="title_notifications">设置</string>
+ <string name="title_notifications">我的</string>
<string name="notification_content">智信管家APP</string>
--
Gitblit v1.9.3