6_2-互动学堂场景-登录
1 功能概述
互動學堂場景登入功能的介面實作為 PLVLoginHiClassActivity
互動學堂場景下定義的 講師登入、學生登入 的 共用介面。
講師登入流程:
選擇老師角色->輸入帳號、密碼,登入驗證->選擇公司,登入驗證->驗證成功,取得課節列表頁面->選擇其中一個課節,進入上課頁。
當講師重複出現在多個公司時,則講師需要選擇公司,否則不需要。
學生使用課節號登入流程:
選擇學生角色->輸入課節號,課節驗證->輸入名稱+/驗證/學生碼,登入驗證->驗證成功,進入上課頁。
學生使用課程號登入流程:
選擇學生角色->輸入課程號,課程驗證->輸入名稱+/驗證/學生碼,登入驗證->驗證成功,取得課節列表頁面->選擇其中一個課節,進入上課頁。
2 使用演示
因為整個登入系統有多個流程,每個流程的UI互動都不一樣,因此在demo中使用一個Activity+ViewPager+多個Fragment實作。以下範例講師登入驗證的方式,程式碼如下:
//讲师登录验证示例
loginManager.loginHiClassTeacher(
areaCode,
account,
password,
null,
null,
new IPLVSceneLoginManager.OnLoginListener<PLVHCTeacherLoginVO>() {
@Override
public void onLoginSuccess(PLVHCTeacherLoginVO result) {
if (result == null
|| result.getStatus() == null
|| loginViewModel == null
|| getContext() == null) {
return;
}
PLVHCTeacherLoginAccountVO accountVO = new PLVHCTeacherLoginAccountVO();
accountVO.setAreaCode(areaCode);
accountVO.setAccount(account);
accountVO.setPassword(password);
loginViewModel.getTeacherLoginAccountLiveData().setValue(accountVO);
saveLastLoginAccount(areaCode, account);
saveLastLoginPassword(plvhcLoginTeacherRememberPasswordCb.isChecked(), password);
saveAgreeContract(true);
if (result.getStatus() == PLVHCTeacherLoginVO.STATUS_LOGIN_SELECT_COMPANY) {
List<PLVHCLoginCompanyVO> loginCompanyVOList = new ArrayList<>();
for (PLVHCTeacherLoginResultVO.CompanyVO companyVO : result.getCompanyList()) {
loginCompanyVOList.add(PLVHCLoginCompanyVO.fromLoginResult(companyVO));
}
loginViewModel.getCompanyListLiveData().setValue(loginCompanyVOList);
KeyboardUtils.hideSoftInput(plvhcLoginTeacherPasswordEt);
//进入选择公司页
PLVHCLoginFragmentManager.getInstance().addLast(PLVHCLoginFragmentManager.FRAG_TEACHER_COMPANY);
} else if (result.getStatus() == PLVHCTeacherLoginVO.STATUS_LOGIN_SUCCESS) {
if (result.getSuccessData() != null) {
PLVHCLoginDataVO loginTokenVO = new PLVHCLoginDataVO();
loginTokenVO.setRole(PLVSocketUserConstant.USERTYPE_TEACHER);
loginTokenVO.setToken(result.getSuccessData().getToken());
loginTokenVO.setNickname(result.getSuccessData().getNickname());
loginTokenVO.setViewerId(result.getSuccessData().getViewerId());
loginViewModel.setLoginDataVOWithSave(loginTokenVO, timestamp);
List<PLVHCLoginLessonVO> loginLessonVOList = listMap(result.getSuccessData().getLessonList(),
new PLVSugarUtil.Function<PLVHCTeacherLoginResultVO.DataVO.LessonVO, PLVHCLoginLessonVO>() {
@Override
public PLVHCLoginLessonVO apply(PLVHCTeacherLoginResultVO.DataVO.LessonVO lessonVO) {
return PLVHCLoginLessonVO.fromTeacherLoginResultLessonVO(lessonVO);
}
});
loginViewModel.getLoginLessonListLiveData().setValue(loginLessonVOList);
}
KeyboardUtils.hideSoftInput(plvhcLoginTeacherPasswordEt);
// 进入选择课节页
PLVHCLoginFragmentManager.getInstance().addLast(PLVHCLoginFragmentManager.FRAG_LESSON_SELECT);
} else {
PLVHCToast.Builder.context(getContext())
.setText("登录状态错误:" + result.getStatus())
.build().show();
}
}
@Override
public void onLoginFailed(String msg, Throwable throwable) {
if (getContext() == null) {
return;
}
PLVHCToast.Builder.context(getContext())
.setText(msg)
.build().show();
}
}
);
上述方法的具體用例可以在PLVHCTeacherLoginFragment類別中找到。
3 實作介紹
登入的整個流程,其實就是確認和取得使用者類型、使用者Id、使用者暱稱、登入token、課程號、課節Id的過程。
3.1 PLVLoginHiClassActivity
互動學堂登入頁面Activity,佈局中定義了一個ViewPager,用於新增登入流程中所出現的Fragment。
3.2 PLVHCRoleSelectFragment
互動學堂登入 - 角色選擇Fragment,用於選擇講師/學生角色。
3.3 PLVHCTeacherLoginFragment
互動學堂登入 - 講師登入Fragment,提供輸入講師的帳號、密碼和登入驗證的UI互動。
3.4 PLVHCTeacherCompanyFragment
互動學堂登入 - 講師公司選擇Fragment,提供選擇講師所在公司的UI互動。當一個講師綁定了多個公司時,登入驗證成功後就會先出現這個Fragment。
3.5 PLVHCLessonSelectFragment
互動學堂登入 - 課節選擇Fragment,該頁面會展示一個可以上課的課節列表,可以從該列表中選擇一個課節進行上課。
3.6 PLVHCStudentLoginFragment
互動學堂登入 - 學生登入Fragment,提供輸入課程號/課節號和資訊驗證的UI互動。
3.7 PLVHCStudentVerifyFragment
互動學堂登入 - 學生驗證Fragment,提供輸入學生名稱+/驗證/學生碼和觀看條件驗證的UI互動。
