215 lines
7.3 KiB
Plaintext
215 lines
7.3 KiB
Plaintext
# 账号安全页面增加默认手机号显示功能文档
|
||
|
||
## 功能背景
|
||
|
||
根据用户需求,在"我的-设置-账号安全"页面的手机号条目中需要显示当前用户的手机号,让用户清楚知道当前绑定的手机号,提升用户体验。
|
||
|
||
## 问题描述
|
||
|
||
**测试步骤**:我的-设置-账号安全页面
|
||
**问题**:手机号条目只显示"手机号"文字,没有显示当前绑定的手机号码,用户不知道当前绑定的手机号是什么。
|
||
|
||
## 功能实现
|
||
|
||
### 1. 修改AccountActivity.java
|
||
|
||
#### 1.1 添加必要的导入
|
||
**文件路径**:`app/src/main/java/com/xunpaisoft/social/im/setting/AccountActivity.java`
|
||
|
||
```java
|
||
import android.text.TextUtils;
|
||
import cn.wildfire.chat.kit.user.UserViewModel;
|
||
import cn.wildfire.chat.kit.widget.OptionItemView;
|
||
import cn.wildfirechat.model.UserInfo;
|
||
```
|
||
|
||
#### 1.2 添加成员变量
|
||
```java
|
||
public class AccountActivity extends WfcBaseActivity {
|
||
|
||
private OptionItemView phoneOptionItem;
|
||
private UserViewModel userViewModel;
|
||
|
||
// ... 其他代码
|
||
}
|
||
```
|
||
|
||
#### 1.3 修改afterViews()方法
|
||
```java
|
||
@Override
|
||
protected void afterViews() {
|
||
super.afterViews();
|
||
setToolBarTitle("账号安全");
|
||
|
||
// 初始化手机号选项
|
||
phoneOptionItem = findViewById(R.id.ov_phone);
|
||
|
||
// 初始化UserViewModel并加载用户信息
|
||
userViewModel = new UserViewModel();
|
||
loadUserInfo();
|
||
}
|
||
```
|
||
|
||
#### 1.4 添加loadUserInfo()方法
|
||
```java
|
||
/**
|
||
* 加载用户信息并显示手机号
|
||
*/
|
||
private void loadUserInfo() {
|
||
userViewModel.getUserInfoAsync(userViewModel.getUserId(), true)
|
||
.observe(this, userInfo -> {
|
||
if (userInfo != null) {
|
||
// 显示当前手机号
|
||
if (!TextUtils.isEmpty(userInfo.mobile)) {
|
||
phoneOptionItem.setDesc(userInfo.mobile);
|
||
} else {
|
||
phoneOptionItem.setDesc("未绑定手机号");
|
||
}
|
||
}
|
||
});
|
||
}
|
||
```
|
||
|
||
### 2. 技术实现细节
|
||
|
||
#### 2.1 数据获取机制
|
||
- **UserViewModel**:使用ViewModel模式获取用户信息
|
||
- **LiveData**:通过LiveData确保数据获取的异步性和实时性
|
||
- **用户ID**:通过 `userViewModel.getUserId()` 获取当前用户ID
|
||
- **手机号字段**:通过 `userInfo.mobile` 字段获取手机号
|
||
|
||
#### 2.2 界面显示机制
|
||
- **OptionItemView**:使用现有的OptionItemView组件
|
||
- **setDesc()方法**:通过setDesc()方法设置右侧显示内容
|
||
- **异常处理**:处理手机号为空的情况,显示"未绑定手机号"
|
||
|
||
#### 2.3 生命周期管理
|
||
- **observe()**:使用observe()方法绑定Activity生命周期
|
||
- **自动更新**:当用户信息发生变化时,界面会自动更新
|
||
- **内存安全**:LiveData会自动处理生命周期,避免内存泄漏
|
||
|
||
### 3. 功能效果
|
||
|
||
#### 3.1 页面显示效果
|
||
```
|
||
账号安全
|
||
├── 手机号 → 18792702169
|
||
└── 注销账号
|
||
```
|
||
|
||
#### 3.2 用户体验提升
|
||
- **信息透明**:用户清楚知道当前绑定的手机号
|
||
- **操作便利**:不需要进入其他页面就能看到手机号
|
||
- **视觉一致**:与系统设置页面的风格保持一致
|
||
- **异常友好**:未绑定手机号时显示友好提示
|
||
|
||
#### 3.3 交互流程
|
||
1. **页面打开** → 自动获取当前用户信息
|
||
2. **数据加载** → 通过UserViewModel获取用户数据
|
||
3. **界面更新** → 在手机号条目右侧显示手机号
|
||
4. **用户操作** → 点击手机号条目跳转到更换手机号页面
|
||
|
||
### 4. 代码结构
|
||
|
||
#### 4.1 类结构
|
||
```java
|
||
public class AccountActivity extends WfcBaseActivity {
|
||
// 成员变量
|
||
private OptionItemView phoneOptionItem;
|
||
private UserViewModel userViewModel;
|
||
|
||
// 生命周期方法
|
||
@Override
|
||
protected void afterViews() { ... }
|
||
|
||
// 业务方法
|
||
private void loadUserInfo() { ... }
|
||
void changePassword() { ... }
|
||
protected void resignAccount() { ... }
|
||
}
|
||
```
|
||
|
||
#### 4.2 方法职责
|
||
- **afterViews()**:初始化界面和加载用户信息
|
||
- **loadUserInfo()**:获取用户信息并更新界面
|
||
- **changePassword()**:处理手机号条目点击事件
|
||
- **resignAccount()**:处理注销账号功能
|
||
|
||
### 5. 异常处理
|
||
|
||
#### 5.1 数据获取异常
|
||
- **用户信息为空**:不进行任何操作,保持界面原状
|
||
- **手机号为空**:显示"未绑定手机号"提示
|
||
- **网络异常**:LiveData会自动重试,无需额外处理
|
||
|
||
#### 5.2 界面更新异常
|
||
- **OptionItemView为空**:通过findViewById获取,确保不为空
|
||
- **数据更新失败**:LiveData机制保证数据一致性
|
||
|
||
### 6. 性能优化
|
||
|
||
#### 6.1 数据获取优化
|
||
- **ViewModel复用**:使用单例模式,避免重复创建
|
||
- **LiveData缓存**:LiveData会自动缓存数据,避免重复请求
|
||
- **生命周期绑定**:自动处理Activity生命周期,避免内存泄漏
|
||
|
||
#### 6.2 界面更新优化
|
||
- **异步更新**:数据获取在后台线程,界面更新在主线程
|
||
- **增量更新**:只有数据变化时才更新界面
|
||
- **内存管理**:LiveData自动管理内存,无需手动处理
|
||
|
||
### 7. 测试验证
|
||
|
||
#### 7.1 功能测试
|
||
1. **正常情况**:用户已绑定手机号,显示完整手机号
|
||
2. **异常情况**:用户未绑定手机号,显示"未绑定手机号"
|
||
3. **网络异常**:网络断开时,保持原有显示状态
|
||
4. **数据更新**:用户信息更新时,界面自动更新
|
||
|
||
#### 7.2 界面测试
|
||
1. **布局正确**:手机号显示在条目右侧
|
||
2. **样式一致**:与系统设置页面风格保持一致
|
||
3. **交互正常**:点击条目正常跳转到更换手机号页面
|
||
4. **响应及时**:页面打开后及时显示手机号
|
||
|
||
### 8. 文件清单
|
||
|
||
#### 8.1 修改文件
|
||
1. `app/src/main/java/com/xunpaisoft/social/im/setting/AccountActivity.java` - 主要修改文件
|
||
|
||
#### 8.2 依赖文件
|
||
1. `cn.wildfire.chat.kit.user.UserViewModel` - 用户信息获取
|
||
2. `cn.wildfire.chat.kit.widget.OptionItemView` - 界面组件
|
||
3. `cn.wildfirechat.model.UserInfo` - 用户信息模型
|
||
|
||
### 9. 优势特点
|
||
|
||
#### 9.1 用户体验
|
||
- **信息透明**:用户清楚知道当前绑定的手机号
|
||
- **操作便利**:不需要进入其他页面就能看到手机号
|
||
- **视觉清晰**:通过右侧显示,信息层次清晰
|
||
- **异常友好**:未绑定手机号时提供友好提示
|
||
|
||
#### 9.2 技术优势
|
||
- **架构清晰**:使用MVVM架构,代码结构清晰
|
||
- **性能优良**:LiveData机制保证性能和内存安全
|
||
- **维护性好**:代码简洁,易于维护和扩展
|
||
- **兼容性强**:与现有代码完全兼容
|
||
|
||
#### 9.3 业务价值
|
||
- **提升用户体验**:让用户清楚知道当前状态
|
||
- **减少操作步骤**:不需要进入其他页面查看信息
|
||
- **增强信任感**:信息透明提升用户信任
|
||
- **降低错误率**:减少用户操作错误
|
||
|
||
### 10. 总结
|
||
|
||
本次功能实现成功在账号安全页面添加了手机号显示功能,通过以下方式实现:
|
||
|
||
1. **界面优化**:在手机号条目右侧显示当前手机号
|
||
2. **功能完善**:自动获取并显示用户当前绑定的手机号
|
||
3. **用户体验**:让用户清楚知道当前绑定的手机号,提升操作体验
|
||
4. **技术实现**:使用MVVM架构和LiveData机制,保证代码质量和性能
|
||
|
||
功能实现后,用户进入账号安全页面就能清楚看到当前绑定的手机号,完全满足了用户需求,提升了应用的用户体验。
|