if (Id == DIAL_CLOCK || Id > DIAL_MAX)
return;
+ //赋值id
+ custom_id = Id;
+
DialLayout dialconfig;
- if (SetDialModel::GetInstance().loadDialConfig(Id, dialconfig))
+ if (SetDialModel::GetInstance().loadDialConfig(custom_id, dialconfig))
{
// 设置背景 Id == 2(实际是1) 视频表盘
if(Id == 2)
{
- dialFile = SetDialModel::GetInstance().GetSaveDir(Id) + "/" + "main_bg.mp4";
+ dialFile = SetDialModel::GetInstance().GetSaveDir(custom_id) + "/" + "main_bg.mp4";
}
else // 图片表盘
{
- dialFile = SetDialModel::GetInstance().GetSaveDir(Id) + "/" + "main_bg.bin";
+ dialFile = SetDialModel::GetInstance().GetSaveDir(custom_id) + "/" + "main_bg.bin";
}
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "dialFile is %s", dialFile.c_str());
videoPlayer_ = new DialVideoView();
videoPlayer_->SetPosition(0 ,0,466, 466);
- videoPlayer_->SetSurfaceColorkey(Color::White());
+ videoPlayer_->SetSurfaceColorkey(Color::GetColorFromRGBA(0xff,0x21,0x23,0x24));
videoPlayer_->SetVideoRes(fp, 0);
-
+ //阅览帧 preview.bin
+ std::string preview_img = SetDialModel::GetInstance().GetSaveDir(custom_id) + "/" + "preview.bin";
+ ImageInfo *image = ImageCacheManager::GetInstance().LoadSingleRes(preview_img.c_str(), false);
+ if (image != nullptr) {
+ videoPlayer_->SetPreview(image);
+ }
+ else
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LoadAllDialFromRam loadimage %s fail", preview_img.c_str());
+ return false;
+ }
Add(videoPlayer_);
return true;
} else {
void MainClockView::OnActive(void)
{
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnActive");
if (videoPlayer_ != nullptr)
{
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnActive videoPlayer_");
if (videoPlayer_->IsPaused())
{
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnActive videoPlayer_ resume");
videoPlayer_->ResumePlay();
}
else if (!videoPlayer_->IsPlayed())
{
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnActive videoPlayer_ start");
videoPlayer_->StartPlay();
}
}
void MainClockView::OnInactive(void)
{
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnInactive");
if (videoPlayer_ != nullptr)
{
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnInactive videoPlayer_");
if (!videoPlayer_->IsStopped())
{
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnInactive videoPlayer_ stop");
videoPlayer_->StopPlay();
}
}
}\r
static errcode_t install_dial(void)\r
{\r
- char *lzmapkgname =uapi_dev_runtime_get_dialname();\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"install %s\n",lzmapkgname);\r
- char *lzmaindex = strstr(lzmapkgname,".lzma");\r
- if (lzmaindex != NULL)\r
- {\r
- struct stat info;\r
- if (stat(get_dial_path(), &info) != 0)\r
- {\r
- if (mkdir(get_dial_path(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0)\r
- {\r
- return ERRCODE_FAIL; // \r
- }\r
- }\r
+ char *lzmapkgname = uapi_dev_runtime_get_dialname();\r
+ // 增加初始参数校验打印\r
+ if (lzmapkgname == NULL) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[install_dial] 错误:获取到的表盘包名为空\n");\r
+ return ERRCODE_FAIL;\r
+ }\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[install_dial] 开始安装表盘,包名:%s\n", lzmapkgname);\r
\r
- char dial_basename[64]={0};\r
- int dial_basenamelen = (lzmaindex - lzmapkgname);\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"dial_basenamelen %d\n",dial_basenamelen);\r
- if (dial_basenamelen>0 )\r
- {\r
- memcpy_s(dial_basename,sizeof(dial_basename),lzmapkgname,dial_basenamelen);\r
- }\r
- else{\r
+ // 检查是否为lzma格式包\r
+ char *lzmaindex = strstr(lzmapkgname, ".lzma");\r
+ if (lzmaindex == NULL) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[install_dial] 错误:包名中未找到.lzma后缀,不是有效压缩包\n");\r
+ return ERRCODE_FAIL;\r
+ }\r
+\r
+ // 创建表盘目录(若不存在)\r
+ struct stat info;\r
+ if (stat(get_dial_path(), &info) != 0) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[install_dial] 表盘目录不存在,尝试创建...\n");\r
+ if (mkdir(get_dial_path(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[install_dial] 错误:创建表盘目录失败\n");\r
return ERRCODE_FAIL;\r
}\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"dial_basename %s\n",dial_basename);\r
- char dialbin_filepath[128]={0};\r
- if(ble_dial_uid>5)\r
- {\r
- if (get_dial_file_path(dial_basename,strlen(dial_basename),dialbin_filepath,sizeof(dialbin_filepath)) != ERRCODE_SUCC)\r
- {\r
- return ERRCODE_FAIL;\r
- }\r
- }\r
- else\r
- {\r
- if (get_custom_dial_file_path(ble_dial_uid,dial_basename,strlen(dial_basename),dialbin_filepath,sizeof(dialbin_filepath)) != ERRCODE_SUCC)\r
- {\r
- return ERRCODE_FAIL;\r
- }\r
- }\r
- \r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[install_dial] 表盘目录创建成功\n");\r
+ } else {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[install_dial] 表盘目录已存在,无需创建\n");\r
+ }\r
\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"dialbin_filepath %s\n",dialbin_filepath);\r
- char lzma_filepath[128]={0};\r
- if (get_file_recv_file_path(lzmapkgname,strlen(lzmapkgname),lzma_filepath,sizeof(lzma_filepath)) != ERRCODE_SUCC)\r
- {\r
+ // 解析表盘基础名称(去除.lzma后缀)\r
+ char dial_basename[64] = {0};\r
+ int dial_basenamelen = lzmaindex - lzmapkgname;\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[install_dial] 解析基础名称长度:%d\n", dial_basenamelen);\r
+ if (dial_basenamelen <= 0 || dial_basenamelen >= sizeof(dial_basename)) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[install_dial] 错误:基础名称长度无效(%d),超出缓冲区大小\n", dial_basenamelen);\r
+ return ERRCODE_FAIL;\r
+ }\r
+ memcpy_s(dial_basename, sizeof(dial_basename), lzmapkgname, dial_basenamelen);\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[install_dial] 解析到表盘基础名称:%s\n", dial_basename);\r
+\r
+ // 确定解压后bin文件路径\r
+ char dialbin_filepath[128] = {0};\r
+ if (ble_dial_uid > 5) {\r
+ if (get_dial_file_path(dial_basename, strlen(dial_basename), dialbin_filepath, sizeof(dialbin_filepath)) != ERRCODE_SUCC) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[install_dial] 错误:获取常规表盘文件路径失败\n");\r
+ return ERRCODE_FAIL;\r
+ }\r
+ } else {\r
+ if (get_custom_dial_file_path(ble_dial_uid, dial_basename, strlen(dial_basename), dialbin_filepath, sizeof(dialbin_filepath)) != ERRCODE_SUCC) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[install_dial] 错误:获取自定义表盘文件路径失败\n");\r
return ERRCODE_FAIL;\r
}\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"lzma_filepath %s\n",lzma_filepath);\r
+ }\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[install_dial] 解压目标bin文件路径:%s\n", dialbin_filepath);\r
\r
- errcode_t ret = uapi_dial_pkg_decompress(lzma_filepath,dialbin_filepath);\r
+ // 确定源lzma文件路径\r
+ char lzma_filepath[128] = {0};\r
+ if (get_file_recv_file_path(lzmapkgname, strlen(lzmapkgname), lzma_filepath, sizeof(lzma_filepath)) != ERRCODE_SUCC) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[install_dial] 错误:获取源lzma文件路径失败\n");\r
+ return ERRCODE_FAIL;\r
+ }\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[install_dial] 源lzma文件路径:%s\n", lzma_filepath);\r
\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"decode %s to %s , ret %X \n",lzma_filepath,dialbin_filepath, ret);\r
+ // 执行解压操作\r
+ errcode_t ret = uapi_dial_pkg_decompress(lzma_filepath, dialbin_filepath);\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[install_dial] 解压操作完成,返回码:0x%X(%s)\n", ret, \r
+ (ret == ERRCODE_SUCC) ? "成功" : "失败");\r
\r
- char *namebuf= strtok(lzmapkgname,".");\r
+ // 关键:检查解压后bin文件是否存在及大小\r
+ struct stat bin_info;\r
+ if (stat(dialbin_filepath, &bin_info) != 0) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[install_dial] 错误:解压后bin文件不存在或无法访问(路径:%s)\n", dialbin_filepath);\r
+ ret = ERRCODE_FAIL; // 即使解压返回成功,文件不存在也视为失败\r
+ } else {\r
+ if (bin_info.st_size <= 0) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[install_dial] 错误:解压后bin文件大小为空(%ld字节),无效文件\n", bin_info.st_size);\r
+ ret = ERRCODE_FAIL; // 大小为空视为失败\r
+ } else {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[install_dial] 解压后bin文件大小正常:%ld字节\n", bin_info.st_size);\r
+ }\r
+ }\r
\r
- if(ble_dial_uid>5)\r
- {\r
- install_Register_dial(namebuf,ble_dial_uid);\r
+ // 若解压失败,直接返回\r
+ if (ret != ERRCODE_SUCC) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[install_dial] 解压失败,终止安装流程\n");\r
+ return ret;\r
+ }\r
\r
+ // 注册并设置表盘\r
+ char *namebuf = strtok(lzmapkgname, ".");\r
+ if (ble_dial_uid > 5) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[install_dial] 注册常规表盘:%s(ID:%d)\n", namebuf, ble_dial_uid);\r
+ install_Register_dial(namebuf, ble_dial_uid);\r
+ ble_set_dial_by_id(ble_dial_uid);\r
+ } else {\r
+ if (ble_dial_file_index == ble_dial_file_count) {\r
+ char name_str[32] = {0};\r
+ ble_get_custom_dial(ble_dial_uid, name_str);\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[install_dial] 自定义表盘安装完毕,注册:%s(ID:%d)\n", name_str, ble_dial_uid);\r
+ install_Register_dial(name_str, ble_dial_uid);\r
ble_set_dial_by_id(ble_dial_uid);\r
-\r
- }\r
- else\r
- {\r
- if(ble_dial_file_index==ble_dial_file_count)\r
- {\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"自定义表盘安装完毕\r\n");\r
- char name_str[32]={0};\r
- ble_get_custom_dial(ble_dial_uid,name_str);\r
- install_Register_dial(name_str,ble_dial_uid);\r
- ble_set_dial_by_id(ble_dial_uid);\r
- }\r
- \r
+ } else {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[install_dial] 自定义表盘未达安装条件(当前索引:%d,总数:%d)\n", \r
+ ble_dial_file_index, ble_dial_file_count);\r
}\r
- \r
- \r
- //安装完后删除表盘\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"remove %s\r\n",lzma_filepath);\r
-\r
- if(0!=remove(lzma_filepath))\r
- return ERRCODE_FAIL;\r
+ }\r
\r
- if ( ret == ERRCODE_SUCC)\r
- return ERRCODE_SUCC;\r
- else\r
- return ERRCODE_FAIL;\r
- }else{\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,".lzma not found\n");\r
- return ERRCODE_FAIL;\r
+ // 删除源lzma文件\r
+ #if 1\r
+ if (remove(lzma_filepath) != 0) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[install_dial] 警告:删除源lzma文件失败(路径:%s),可能残留冗余文件\n", lzma_filepath);\r
+ // 此处不返回失败,仅警告,因为核心安装已完成\r
+ } else {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[install_dial] 源lzma文件已成功删除\n");\r
}\r
-}\r
+ #endif\r
\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[install_dial] 表盘安装流程全部完成,返回成功\n");\r
+ return ERRCODE_SUCC;\r
+}\r
static char file_name[128]={0};\r
static uint32_t file_size=0;\r
\r