From db2e408f6c2eddc363ed76e0f5fd1e59a02aa175 Mon Sep 17 00:00:00 2001
From: zhujie <leon.zhu@cloudroam.com.cn>
Date: 星期四, 03 四月 2025 09:12:37 +0800
Subject: [PATCH] 邀请有礼

---
 app/src/main/java/com/example/firstapp/ui/notifications/NotificationsFragment.kt |  330 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 320 insertions(+), 10 deletions(-)

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 3f7139f..38a6f08 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
@@ -1,13 +1,39 @@
 package com.example.firstapp.ui.notifications
 
+import android.content.ClipData
+import android.content.ClipboardManager
+import android.content.Context
+import android.content.Intent
+import android.net.Uri
 import android.os.Bundle
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
-import android.widget.TextView
+import android.widget.EditText
+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.ViewModelProvider
+import androidx.lifecycle.Observer
+import androidx.lifecycle.lifecycleScope
+import androidx.navigation.fragment.findNavController
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
+import com.example.firstapp.R
+import com.example.firstapp.activity.ContentDetailActivity
+import com.example.firstapp.database.service.RetrofitClient
 import com.example.firstapp.databinding.FragmentNotificationsBinding
+import com.example.firstapp.pay.PayAbility
+import com.example.firstapp.ui.reminderOther.ReminderOtherAddActivity2
+import com.example.firstapp.ui.reminderOther.ReminderSettingsFragmentOther
+import com.example.firstapp.ui.profile.EditProfileActivity
+import com.example.firstapp.utils.Log
+import com.google.android.material.snackbar.Snackbar
+import kotlinx.coroutines.launch
+import com.bumptech.glide.Glide
+import com.example.firstapp.MainActivity
+import com.example.firstapp.database.response.UserInfo
+import com.example.firstapp.ui.invitation.InvitationActivity
 
 class NotificationsFragment : Fragment() {
 
@@ -17,22 +43,306 @@
     // onDestroyView.
     private val binding get() = _binding!!
 
+    // 默认值
+    private val DEFAULT_XIAOHONGSHU_URL = "https://www.xiaohongshu.com/user/profile/64978d5c000000001001ee26"
+    private val DEFAULT_EMAIL = "support@example.com"
+    private val DEFAULT_SHARE_TEXT = "推荐一个很棒的应用给你!\n下载地址:https://oia.xiaohongshu.com/oia"
+
+    // 存储从接口获取的值
+    private var xiaohongshuUrl = ""
+    private var contactEmail = ""
+    private var shareText = ""
+    private var currentUserInfo: UserInfo? = null // 确保使用你的实际数据类
+
+
+    private val editProfileLauncher = registerForActivityResult(
+        ActivityResultContracts.StartActivityForResult()
+    ) { result ->
+        if (result.resultCode == AppCompatActivity.RESULT_OK) {
+            result.data?.let { data ->
+                // 更新昵称
+                val newNickname = data.getStringExtra("nickname")
+                newNickname?.let {
+                    binding.tvNickname.text = it
+                }
+
+                // 更新头像
+                val avatarUri = data.getStringExtra("avatar_uri")
+                avatarUri?.let {
+                    Glide.with(requireContext())
+                        .load(Uri.parse(it))
+                        .circleCrop()
+                        .into(binding.ivAvatar)
+                }
+
+                // TODO: 将更新后的信息保存到服务器
+            }
+        }
+    }
+
     override fun onCreateView(
         inflater: LayoutInflater,
         container: ViewGroup?,
         savedInstanceState: Bundle?
     ): View {
-        val notificationsViewModel =
-            ViewModelProvider(this).get(NotificationsViewModel::class.java)
-
         _binding = FragmentNotificationsBinding.inflate(inflater, container, false)
-        val root: View = binding.root
 
-        val textView: TextView = binding.textNotifications
-        notificationsViewModel.text.observe(viewLifecycleOwner) {
-            textView.text = it
+        // 先加载配置,再设置点击事件
+        lifecycleScope.launch {
+            loadConfigurations()
+            setupClickListeners()
         }
-        return root
+
+        return binding.root
+    }
+
+    private suspend fun loadConfigurations() {
+        try {
+            // 获取小红书链接
+            val xhsResponse = RetrofitClient.apiService.getDictValue("setting", "xiaohongshu")
+            if (xhsResponse.code == 200 && !xhsResponse.data?.itemValue.isNullOrEmpty()) {
+                xiaohongshuUrl = xhsResponse.data?.itemValue ?: DEFAULT_XIAOHONGSHU_URL
+            } else {
+                xiaohongshuUrl = DEFAULT_XIAOHONGSHU_URL
+            }
+
+            // 获取邮箱
+            val emailResponse = RetrofitClient.apiService.getDictValue("setting", "email")
+            if (emailResponse.code == 200 && !emailResponse.data?.itemValue.isNullOrEmpty()) {
+                contactEmail = emailResponse.data?.itemValue ?: DEFAULT_EMAIL
+            } else {
+                contactEmail = DEFAULT_EMAIL
+            }
+
+            // 获取分享文本
+            val shareResponse = RetrofitClient.apiService.getDictValue("setting", "share_link")
+            if (shareResponse.code == 200 && !shareResponse.data?.itemValue.isNullOrEmpty()) {
+                shareText = shareResponse.data?.itemValue ?: DEFAULT_SHARE_TEXT
+            } else {
+                shareText = DEFAULT_SHARE_TEXT
+            }
+        } catch (e: Exception) {
+            // 如果发生错误,使用默认值
+            xiaohongshuUrl = DEFAULT_XIAOHONGSHU_URL
+            contactEmail = DEFAULT_EMAIL
+            shareText = DEFAULT_SHARE_TEXT
+        }
+    }
+
+    private fun setupClickListeners() {
+
+        // 支付插件
+//        binding.payPlugin.setOnClickListener {
+//            // 跳转到支付插件页面
+//            lifecycleScope.launch {
+//                try {
+//                    val response = RetrofitClient.apiService.getPayOrderInfo()
+//                    var orderInfo=response.data
+//                    Log.d("AliPayHelper","获取订单信息时: ${response}")
+//                    // 这里调用支付宝
+//                    PayAbility.aliPay(requireActivity(), orderInfo, Observer {
+//                        when (it.resultStatus) {
+//                            "9000" -> {
+////                                Snackbar.make(binding.root, "支付成功", Snackbar.LENGTH_LONG).show()
+//                                requireActivity().runOnUiThread {
+//                                    Toast.makeText(requireContext(), "支付成功", Toast.LENGTH_LONG).show()
+//                                }
+//                            }
+//                            else -> {
+////                                Snackbar.make(binding.root, "支付失败", Snackbar.LENGTH_LONG).show()
+//                                requireActivity().runOnUiThread {
+//                                    Toast.makeText(requireContext(), "支付失败", Toast.LENGTH_LONG).show()
+//                                }
+//
+//                            }
+//                        }
+//                    })
+//
+//                } catch (e: Exception) {
+//                    Log.d("AliPayHelper","获取订单信息时发生错误: ${e.message}")
+//                }
+//            }
+//        }
+
+
+        // 设置提醒
+        binding.layoutReminder.setOnClickListener {
+            findNavController().navigate(R.id.action_navigation_notifications_to_reminderSettingsFragment)
+        }
+
+        // 待办
+        binding.layoutTodo.setOnClickListener {
+            // TODO: 实现待办功能
+            Toast.makeText(context, "待办功能开发中", Toast.LENGTH_SHORT).show()
+        }
+
+        // 好友邀请
+        binding.layoutInvite.setOnClickListener {
+            // 跳转到邀请活动页面
+            val intent = Intent(requireActivity(), InvitationActivity::class.java)
+            startActivity(intent)
+        }
+
+        // AI助手
+        binding.layoutAi.setOnClickListener {
+            // TODO: 实现AI助手功能
+            Toast.makeText(context, "AI助手功能开发中", Toast.LENGTH_SHORT).show()
+        }
+
+        // 离线模式
+        binding.layoutOffline.setOnClickListener {
+            // TODO: 实现离线模式功能
+            Toast.makeText(context, "离线模式功能开发中", Toast.LENGTH_SHORT).show()
+        }
+
+        // 关于小红书
+        binding.layoutAbout.setOnClickListener {
+            val intent = Intent(Intent.ACTION_VIEW, Uri.parse(xiaohongshuUrl))
+            startActivity(intent)
+        }
+
+        // 邮件联系
+        binding.layoutEmail.setOnClickListener {
+            showEmailDialog()
+        }
+
+        // 意见与反馈
+        binding.layoutFeedback.setOnClickListener {
+            showFeedbackDialog()
+        }
+
+        // 隐私协议
+        binding.layoutPrivacy.setOnClickListener {
+            startContentActivity("privacy_policy", "隐私协议")
+        }
+
+        // 使用教程
+        binding.layoutTutorial.setOnClickListener {
+            startContentActivity("user_guide", "使用教程")
+        }
+
+        // 头像点击老的处理逻辑
+        binding.layoutUserInfo.setOnClickListener {
+            currentUserInfo?.let { user ->
+                val intent = Intent(requireContext(), EditProfileActivity::class.java).apply {
+                    putExtra("nickname", user.name) // 使用数据模型中的字段
+                    putExtra("avatar_url", user.cover) // 使用正确的URL字段
+                }
+                editProfileLauncher.launch(intent)
+            } ?: run {
+                Toast.makeText(context, "用户信息未加载完成", Toast.LENGTH_SHORT).show()
+            }
+        }
+
+        // VIP续费
+        binding.btnRenew.setOnClickListener {
+            Toast.makeText(context, "VIP续费功能开发中", Toast.LENGTH_SHORT).show()
+        }
+    }
+
+    private fun showEmailDialog() {
+        MaterialAlertDialogBuilder(requireContext())
+            .setTitle("联系邮箱")
+            .setMessage(contactEmail)
+            .setPositiveButton("复制") { _, _ ->
+                val clipboard = requireContext().getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
+                val clip = ClipData.newPlainText("email", contactEmail)
+                clipboard.setPrimaryClip(clip)
+                Toast.makeText(context, "邮箱已复制", Toast.LENGTH_SHORT).show()
+            }
+            .setNegativeButton("取消", null)
+            .show()
+    }
+
+    private fun showFeedbackDialog() {
+        val dialogView = LayoutInflater.from(context).inflate(R.layout.dialog_feedback, null)
+        val editText = dialogView.findViewById<EditText>(R.id.feedback_edit_text)
+
+        MaterialAlertDialogBuilder(requireContext())
+            .setTitle("意见反馈")
+            .setView(dialogView)
+            .setPositiveButton("提交") { _, _ ->
+                val feedback = editText.text.toString()
+                if (feedback.isNotEmpty()) {
+                    // TODO: 提交反馈到服务器
+                    Toast.makeText(context, "感谢您的反馈", Toast.LENGTH_SHORT).show()
+                }
+            }
+            .setNegativeButton("取消", null)
+            .show()
+    }
+
+    private fun shareToWechat() {
+        try {
+            // 获取应用程序的包名
+            //val packageName = requireContext().packageName
+
+            // 创建分享意图
+            val intent = Intent().apply {
+                action = Intent.ACTION_SEND
+                type = "text/plain"
+                putExtra(Intent.EXTRA_TEXT, shareText)
+
+                // 指定分享到微信
+                setPackage("com.tencent.mm")
+            }
+            startActivity(Intent.createChooser(intent, "分享到微信"))
+        } catch (e: Exception) {
+            Toast.makeText(context, "请先安装微信", Toast.LENGTH_SHORT).show()
+        }
+    }
+
+    private fun startContentActivity(type: String, title: String) {
+        val intent = Intent(requireContext(), ContentDetailActivity::class.java).apply {
+            putExtra(ContentDetailActivity.EXTRA_CONTENT_TYPE, type)
+            putExtra(ContentDetailActivity.EXTRA_TITLE, title)
+        }
+        startActivity(intent)
+    }
+
+    private suspend fun loadUserInfo() {
+        try {
+            val response = RetrofitClient.apiService.getUserInfo("17586582287")
+            if (response.code == "0" && response.data != null) {
+                // 保存用户信息
+                currentUserInfo = response.data
+                val userInfo = response.data
+
+                // 设置头像
+                Glide.with(this)
+                    .load(userInfo.cover)
+                    .placeholder(R.drawable.default_avatar)
+                    .into(binding.ivAvatar)
+
+                // 设置昵称和账号
+                binding.tvNickname.text = userInfo.name
+                binding.tvUserId.text = "个人账号:${userInfo.contactTel}"
+
+                // 设置VIP信息
+                if (userInfo.showed) {
+                    binding.ivVip.visibility = View.VISIBLE
+                    binding.cardVip.visibility = View.VISIBLE
+                    binding.tvVipExpire.text = "${userInfo.overTime} 到期"
+                } else {
+                    //非会员信息
+                    binding.btnRenew.text = "立即开通"
+                    binding.linearVipContainer.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.gray))
+                    binding.cardVip.visibility = View.GONE
+                }
+            }
+        } catch (e: Exception) {
+            e.printStackTrace()
+            Toast.makeText(context, "获取用户信息失败", Toast.LENGTH_SHORT).show()
+        }
+    }
+
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        super.onViewCreated(view, savedInstanceState)
+
+        // 加载用户信息
+        lifecycleScope.launch {
+            loadUserInfo()
+        }
     }
 
     override fun onDestroyView() {

--
Gitblit v1.9.3