#include "Presenter.h"
#include "components/ui_view.h"
#include "KeyInputListener.h"
+#include "ModelListenerSample.h"
namespace OHOS {
+const uint16_t MISS_DIAL_OPERATION_TIME = 3000;
+
class SetDialView;
class SetDialModel;
class SetDialPresenter : public Presenter<SetDialView>,
- public UIView::OnClickListener,
+ public UIView::OnClickListener, public ModelListenerSample,
public UICoverflowView::OnCoverflowScrollListener {
public:
SetDialPresenter();
- virtual ~SetDialPresenter();
+ ~SetDialPresenter() override;
size_t GetDialCount(void);
std::vector<SetDialInfo>& GetDialInfo(void);
uint8_t GetPageIndex(void);
- virtual void OnStart() override;
- virtual void OnResume() override;
- virtual void OnStop() override;
+ void OnStart() override;
+ void OnResume() override;
+ void OnStop() override;
+ void OnTickEvent() override;
+ void Notify() override {}
bool OnScroll() override;
bool OnClick(UIView &view, const ClickEvent &event) override;
+ void ResetTickTimer(void);
private:
+ void OnClickAction(void);
KeyInputListener *keyActListenr{nullptr};
SetDialModel *model{nullptr};
+ uint64_t startTime{0};
};
}
* Author:
* Create: 2021-11-23
*/
-
+#include <algorithm>
#include "MainModel.h"
#include "SetDialModel.h"
#include "kv_store.h"
#include "securec.h"
#include "dirent.h"
-#include "DialBinTypes.h"
+#include "DialBinParser.h"
#include "wearable_log.h"
namespace OHOS {
{
dialInfoList.clear();
LoadAllDialFromRam();
+ size_t dialSize = dialInfoList.size();
LoadAllDialFromFs();
+ /* 只排序离线表盘 */
+ std::sort(dialInfoList.begin() + dialSize, dialInfoList.end(), [](const SetDialInfo& f, const SetDialInfo& n) {
+ return f.dialName < n.dialName;
+ });
}
void SetDialModel::LoadAllDialFromRam()
for (uint8_t i = DIAL_CLOCK; i < DIAL_MAX; i++) {
const DialInfo *info = MainModel::GetInstance().GetDialInfo((DialId)i);
if (info != nullptr) {
- SetDialInfo dialInfo;
+ SetDialInfo dialInfo{0};
dialInfo.dialFlag = 0;
dialInfo.id = i;
dialInfo.dialName = info->dialName;
dialInfo.imageFullName = info->dialImg;
- dialInfo.freq = info->freq;
ImageInfo* imageInfo = ImageCacheManager::GetInstance().LoadSingleRes(info->dialImg, false);
if (info == nullptr) {
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LoadAllDialFromRam loadimage %s fail",
// 打开目录
DIR *dirp = opendir(APP_DIAL_PATH);
// 遍历文件
- if (dirp != NULL) {
- while ((direntp = readdir(dirp)) != NULL) {
- SetDialInfo dialInfo;
+ if (dirp != nullptr) {
+ while ((direntp = readdir(dirp)) != nullptr) {
+ SetDialInfo dialInfo{0};
int ret = ParseDialHeader(direntp->d_name, dialInfo);
if (ret == 0) {
dialInfoList.push_back(dialInfo);
int32_t SetDialModel::ParseDialHeader(const std::string &dialFileName, SetDialInfo &dialInfo)
{
- DialHeader dialHeader{0};
std::string dialFullName = APP_DIAL_PATH;
dialFullName += "/";
dialFullName += dialFileName;
FILE *fp = fopen(dialFullName.c_str(), "rb");
if (fp == nullptr) {
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ParseDialHeader cannot open file: %s",
- dialFullName.c_str());
+ dialFullName.c_str());
return -1;
}
- if (fread(&dialHeader, 1, sizeof(dialHeader), fp) != sizeof(dialHeader)) {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ParseDialHeader fread %s fail",
- dialFullName.c_str());
+ DialPreviewInfo preInfo{0};
+ bool ret = DialBinParser::GetInstance()->GetDialPreviewInfo(fp, &preInfo);
+ if (!ret) {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "GetDialPreviewInfo %s fail",
+ dialFullName.c_str());
return -1;
}
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ParseDialHeader dialFullName: %s",
dialFullName.c_str());
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ParseDialHeader dialName: %s",
- dialHeader.dialName);
+ preInfo.dialName);
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ParseDialHeader description: %s",
- dialHeader.description);
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ParseDialHeader freq: %u",
- dialHeader.freq);
+ preInfo.description);
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ParseDialHeader previewImgId: %u",
- dialHeader.previewImgId);
+ preInfo.imgId);
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ParseDialHeader imageOffset: %u",
- dialHeader.imageOffset);
+ preInfo.offset);
ImageInfo *info = ImageCacheManager::GetInstance().LoadOneInMultiRes(
- dialHeader.previewImgId | (0xfef << 20), dialFullName, fp, false, dialHeader.imageOffset);
+ preInfo.imgId, dialFullName, fp, false, preInfo.offset);
if (info == nullptr) {
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ParseDialHeader loadimage fail");
return -1;
dialInfo.dialFlag = 1;
dialInfo.id = 0;
dialInfo.dialFullName = dialFullName;
- dialInfo.dialName = dialHeader.dialName;
- dialInfo.description = dialHeader.description;
- dialInfo.freq = dialHeader.freq;
+ dialInfo.dialName = preInfo.dialName;
+ dialInfo.description = preInfo.description;
dialInfo.preImageInfo = info;
fclose(fp);
diagSetting.dialId = info.id;
diagSetting.dialFullName = info.dialFullName;
MainModel::GetInstance().AddDialSetting(diagSetting);
- pageIndex_ = pageIndex;
}
size_t SetDialModel::GetDialCount(void)
uint8_t SetDialModel::GetPageIndex(void)
{
- if (pageIndex_ >= dialInfoList.size()) {
- return 0;
- } else {
- return pageIndex_;
+ uint8_t index = 0;
+ DialSetting dialSetting = MainModel::GetInstance().GetDialSetting();
+ for (auto iter : dialInfoList) {
+ if (dialSetting.dialFlag) {
+ if (strcmp(iter.dialFullName.c_str(), dialSetting.dialFullName.c_str()) == 0) {
+ return index;
+ }
+ } else {
+ if ((!iter.dialFlag) && (iter.id == dialSetting.dialId)) {
+ return index;
+ }
+ }
+ index++;
}
+ return 0;
}
}
#include "SetDialModel.h"
#include "SetDialPresenter.h"
-namespace OHOS
-{
+namespace OHOS {
SetDialPresenter::SetDialPresenter()
{
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetDialPresenter::SetDialPresenter");
model = &SetDialModel::GetInstance();
model->LoadAllDial();
+ ResetTickTimer();
}
SetDialPresenter::~SetDialPresenter()
{
- if (keyActListenr != nullptr)
- {
+ if (keyActListenr != nullptr) {
delete keyActListenr;
keyActListenr = nullptr;
}
void SetDialPresenter::OnStart()
{
Presenter<SetDialView>::OnStart();
- if (keyActListenr == nullptr)
- {
+ if (keyActListenr == nullptr) {
keyActListenr = new KeyInputListener();
- if (keyActListenr != nullptr)
- {
+ if (keyActListenr != nullptr) {
RootView::GetInstance()->SetOnKeyActListener(keyActListenr);
- }
- else
- {
+ } else {
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ApplistPresenter::OnStart: new KeyInputListener fail");
}
}
{
}
+ void SetDialPresenter::OnClickAction(void)
+ {
+ uint8_t pageIndex = view_->GetCoverflowPage();
+ model->SaveDialSetting(pageIndex);
+ NativeAbility::GetInstance().ChangeSlice(VIEW_MAIN_SAMPLE);
+ }
+
bool SetDialPresenter::OnClick(UIView &view, const ClickEvent &event)
{
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetDialPresenter::OnClick");
- uint8_t pageIndex = view_->GetCoverflowPage();
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetDialPresenter select pageIndex = %u", pageIndex);
- // 目前暂时这样处理
- if (pageIndex == 0)
- {
- model->SaveDialSetting(0);
- }
- else
- {
- model->SaveDialSetting(pageIndex);
- }
- NativeAbility::GetInstance().ChangeSlice(VIEW_MAIN);
+ OnClickAction();
return true;
}
return model->GetDialCount();
}
- std::vector<SetDialInfo> &SetDialPresenter::GetDialInfo(void)
+ std::vector<SetDialInfo>& SetDialPresenter::GetDialInfo(void)
{
return model->GetDialInfo();
}
{
return model->GetPageIndex();
}
+
+ void SetDialPresenter::OnTickEvent()
+ {
+ uint64_t current_time = osKernelGetTick2ms();
+ if ((startTime != 0) && (current_time - startTime > MISS_DIAL_OPERATION_TIME)) {
+ OnClickAction();
+ }
+ }
+
+ void SetDialPresenter::ResetTickTimer(void)
+ {
+ startTime = osKernelGetTick2ms();
+ }
}