7_10-核心common-文档
1 功能概述
文件模組是三分螢幕開播端使用的功能,包含控制文件WebView的顯示內容,以及頻道文件的管理操作。
2 MVP模式
文件模組使用MVP模式,介面定義為IPLVDocumentContract類別。
2.1 View
文件MVP模式對應的View為PLVAbsDocumentView,這是一個空實作的抽象View。在註冊MVP-View時可以透過繼承該View,僅覆寫部分需要監聽回呼的方法。
2.2 Presenter
文件MVP模式對應的Presenter為PLVDocumentPresenter,它提供了許多文件操作的功能方法。在使用該Presenter前,必須呼叫init()方法對其進行初始化。
interface Presenter {
/**
* 初始化方法,必须调用一次
*
* @param lifecycleOwner 生命周期
* @param liveRoomDataManager 直播间数据管理器
* @param documentWebProcessor 封装的WebView处理器
*/
void init(LifecycleOwner lifecycleOwner,
IPLVLiveRoomDataManager liveRoomDataManager,
PLVSDocumentWebProcessor documentWebProcessor);
}
2.2.1 向View層的呼叫
一般來說,由Presenter向View的呼叫都帶有回呼性質。大部分的回呼都是透過監聽Model層中LiveData的資料變更,然後向View層呼叫實現。以下範例程式碼展示了在透過網路請求取得PPT列表資料後,是如何回呼給View層的。
/**
* 监听Model层所有PPT文档列表更新
* 向view层回调
*
* @param lifecycleOwner
*/
private void observePptInfo(LifecycleOwner lifecycleOwner) {
plvDocumentRepository.getPptInfoLiveData().observe(lifecycleOwner, new Observer<PLVStatefulData<PLVSPPTInfo>>() {
@Override
public void onChanged(@Nullable PLVStatefulData<PLVSPPTInfo> plvspptInfo) {
if (plvspptInfo == null || !plvspptInfo.isSuccess()) {
return;
}
for (WeakReference<IPLVDocumentContract.View> viewWeakReference : viewWeakReferenceList) {
IPLVDocumentContract.View view = viewWeakReference.get();
if (view != null) {
view.onPptCoverList(plvspptInfo.getData());
}
}
}
});
}
當Model層plvDocumentRepository進行網路請求取得PPT列表資料後,會更新pptInfoLiveData中的資料。這裡訂閱了LiveData的資料更新,在資料有變更時會觸發onChanged方法,對每一個註冊的View呼叫onPptCoverList()來提醒PPT列表資料的更新。
2.2.2 向Model層的呼叫
PLVDocumentPresenter依賴2個Model層物件,分別是負責與Webview進行互動,以及具有文件管理功能的PLVDocumentRepository,負責在上傳文件時進行上傳進度本地快取的PLVPptUploadLocalRepository。在這裡,我們將PPT Webview也視為一個遠端物件,與Webview的互動視為與網路請求等價,因此由Model層進行Webview的互動處理。
以下範例程式碼展示了如何讓Webview切換顯示的PPT。
@Override
public void changePpt(int autoId) {
if (!checkInitialized()) {
return;
}
plvDocumentRepository.sendWebMessage(PLVSDocumentWebProcessor.CHANGEPPT, "{\"autoId\":" + autoId + "}");
其中autoId為後端回傳的PPT識別碼,在PPT列表中會攜帶該資料。這裡首先需要透過checkInitialized()檢查Presenter是否已經過初始化,隨後直接呼叫Model層方法發送資料。
2.3 Model
2.3.1 PLVDocumentRepository
PLVDocumentRepository負責向WebView發送資料,向伺服器發送請求,以及接收對應的回傳資料。PLVDocumentRepository不持有Presenter的參考,向Presenter回傳資料的方式是由Presenter主動訂閱LiveData。以下範例程式碼展示了取得PPT列表的方式。
/**
* 请求更新PPT文档列表数据
* 回调 {@link #getPptInfoLiveData()}
*/
public void requestPptCoverList() {
PLVDocumentDataManager.getDocumentList(new PLVrResponseCallback<PLVSPPTInfo>() {
@Override
public void onSuccess(PLVSPPTInfo plvspptInfo) {
cachePptInfo = plvspptInfo;
plvsPptInfoLiveData.postValue(PLVStatefulData.success(cachePptInfo));
}
@Override
public void onFinish() {
}
});
}
PLVDocumentDataManager是SDK內部提供的文件資料類別,裡面封裝了取得PPT列表的HTTP請求,直接呼叫getDocumentList()方法即可在回呼的onSuccess中取得PPT列表資料。取得PPT列表後更新plvsPptInfoLiveData的資料,若Presenter訂閱了該LiveData,則能夠自動在訂閱回呼中取得新的資料。
2.3.2 PLVPptUploadLocalRepository
PLVPptUploadLocalRepository負責在PPT文件進行上傳時,在本地快取記錄上傳進度。下次重新登入進入直播間時,會檢查是否存在上次上傳文件未完成的情況。這個類別利用SharedPreferences進行資料的本地儲存。
