Enhance AI Agent Profile Interaction
This commit introduces several enhancements to how AI agent profiles are displayed and interacted with:
**Profile Display:**
- **AI Account Distinction:** Profile pages now differentiate between regular user accounts and AI agent accounts.
- AI agent profiles will not display the "Agents" tab in their profile.
- The profile header height is adjusted for AI accounts.
- **Navigation Parameter:** An `isAiAccount` boolean parameter is added to the `AccountProfile` navigation route to indicate if the profile being viewed belongs to an AI.
**Interaction & Navigation:**
- **Avatar Click Navigation:**
- Clicking an AI agent's avatar in various lists (Hot Agents, My Agents, User Agents Row, User Agents List) now navigates to the agent's dedicated profile page.
- When navigating to an agent's profile from an agent list, `isAiAccount` is set to `true`.
- **Chat Initiation:** Clicking the chat button on AI agent cards in the "Agent" tab (both Hot and My Agents) now correctly initiates a chat with the respective AI.
- **ViewModel Updates:**
- `AgentViewModel`, `MineAgentViewModel`, and `HotAgentViewModel` now include a `goToProfile` function to handle navigation to agent profiles, correctly passing the `isAiAccount` flag.
**Code Refinements:**
- Click handlers for agent avatars and chat buttons are now wrapped with `DebounceUtils.simpleDebounceClick` to prevent multiple rapid clicks.
- The `UserContentPageIndicator` now conditionally hides the "Agent" tab based on the `isAiAccount` status.
- `UserAgentsRow` and `UserAgentsList` now accept an `onAvatarClick` callback for navigating to agent profiles.
- `AgentItem` (used in `UserAgentsRow`) and `UserAgentCard` (used in `UserAgentsList`) now handle avatar clicks.
- The general `Agent` composable (used in `AiPostComposable`) now also supports an `onAvatarClick` callback.
This commit is contained in:
@@ -45,6 +45,12 @@ object AppState {
|
||||
var enableGoogleLogin: Boolean = false
|
||||
var enableChat = false
|
||||
suspend fun initWithAccount(scope: CoroutineScope, context: Context) {
|
||||
// 如果是游客模式,使用简化的初始化流程
|
||||
if (AppStore.isGuest) {
|
||||
initWithGuestAccount()
|
||||
return
|
||||
}
|
||||
|
||||
val accountService: AccountService = AccountServiceImpl()
|
||||
// 获取用户认证信息
|
||||
val resp = accountService.getMyAccount()
|
||||
@@ -69,6 +75,18 @@ object AppState {
|
||||
initChat(context)
|
||||
}
|
||||
|
||||
/**
|
||||
* 游客模式的简化初始化
|
||||
*/
|
||||
private fun initWithGuestAccount() {
|
||||
// 游客模式下,不初始化推送和TRTC
|
||||
// 设置默认的用户信息
|
||||
UserId = 0
|
||||
profile = null
|
||||
enableChat = false
|
||||
Log.d("AppState", "Guest mode initialized without push notifications and TRTC")
|
||||
}
|
||||
|
||||
private suspend fun initChat(context: Context){
|
||||
val dictService :DictService = DictServiceImpl()
|
||||
val enableItem = dictService.getDictByKey(ConstVars.DICT_KEY_ENABLE_TRTC)
|
||||
@@ -149,6 +167,27 @@ object AppState {
|
||||
AppStore.saveDarkMode(darkMode)
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查是否是游客模式,并且是否需要登录
|
||||
* @return true 如果是游客模式
|
||||
*/
|
||||
fun isGuestMode(): Boolean {
|
||||
return AppStore.isGuest
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查游客模式并提示登录
|
||||
* @param onGuestMode 当是游客模式时的回调
|
||||
* @return true 如果是游客模式
|
||||
*/
|
||||
fun checkGuestModeAndPromptLogin(onGuestMode: (() -> Unit)? = null): Boolean {
|
||||
if (AppStore.isGuest) {
|
||||
onGuestMode?.invoke()
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
fun ReloadAppState(context: Context) {
|
||||
// 重置动态列表页面
|
||||
TimelineMomentViewModel.ResetModel()
|
||||
@@ -175,6 +214,9 @@ object AppState {
|
||||
IndexViewModel.ResetModel()
|
||||
UserId = null
|
||||
|
||||
// 清除游客状态
|
||||
AppStore.isGuest = false
|
||||
|
||||
// 关闭 TrtcService
|
||||
val trtcService = Intent(
|
||||
context,
|
||||
|
||||
Reference in New Issue
Block a user