Code review from 罗正
* refs/changes/1438/head: (16 commits squashed)
- applsit拨号盘实现:目前,滑动一下屏幕APP转动一次,后续优化为多次转动
- 解决倒计时界面内存泄漏问题
- Merge branch 'sdk602patch0911' of https://codeup.aliyun.com/
64191456b9581d62e8f81ac0/FD230 into sdk602patch0911
- Merge branch 'sdk602patch0911' of https://codeup.aliyun.com/
64191456b9581d62e8f81ac0/FD230 into sdk602patch0911
- 修改显示方式页面多国语言显示问题
- Merge branch 'sdk602patch0911' of https://codeup.aliyun.com/
64191456b9581d62e8f81ac0/FD230 into sdk602patch0911
- 解决查找手表后变成长亮屏
- Merge branch 'sdk602patch0911' of https://codeup.aliyun.com/
64191456b9581d62e8f81ac0/FD230 into sdk602patch0911
- 拨号盘样式,实现跟手滑动效果
- Merge branch 'sdk602patch0911' of https://codeup.aliyun.com/
64191456b9581d62e8f81ac0/FD230 into sdk602patch0911
- 解决ChatGPT,设置Key后不能用问题
- 修改拨号盘图片显示bug
- Merge branch 'sdk602patch0911' of https://codeup.aliyun.com/
64191456b9581d62e8f81ac0/FD230 into sdk602patch0911
- #865,手表与手机同时进行10分钟倒计时,手机倒计时已结束手表还剩余40秒bug
- Merge branch 'sdk602patch0911' of https://codeup.aliyun.com/
64191456b9581d62e8f81ac0/FD230 into sdk602patch0911
- 删除直线列表风格
Signed-off-by: 罗正 <1732036298@qq.com>
Reviewed-by: Caisking <3449750381@qq.com>
Reviewed-by: 罗正 <1732036298@qq.com>
Reviewed-by: aliyun8003852482 <1224667075@qq.com>
Reviewed-by: snickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
Reviewed-by: aliyun6865282430 <1624952103@qq.com>
Merged-by: snickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
link: https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230/change/1438
/*\r
* @Author: luozheng 1732036298@qq.com\r
* @Date: 2024-04-07 18:15:53\r
- * @LastEditors: SnickerSun snickersun@163.com\r
- * @LastEditTime: 2024-10-21 11:35:37\r
+ * @LastEditors: luozheng 1732036298@qq.com\r
+ * @LastEditTime: 2024-11-21 16:06:32\r
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/countdown/include/CountDownModel.h\r
*/\r
#ifndef COUNTDOWN_MODEL_H\r
void RequestStopRingtone(void);\r
int ResetRingtonePlayback(void);\r
\r
+ void countdownstart();\r
+ void countdownpause();\r
+ void countdownresume();\r
+ void countdownstop();\r
+\r
+ void SetisRunning(bool val) {\r
+ isRunning = val;\r
+ }\r
+ bool GetisRunning(void) const {\r
+ return isRunning;\r
+ }\r
+ void SetisPaused(bool val) {\r
+ isPaused = val;\r
+ }\r
+ bool GetisPaused(void) const {\r
+ return isPaused;\r
+ }\r
+ uint32_t get_current_time();//获取当前系统时间戳\r
public:\r
static int g_CountDownTimes;\r
+ static int totalSeconds; //要到计时总秒数\r
+ static uint32_t startTime; //开始时间戳\r
+ static uint32_t pauseTime; //暂停时间戳\r
+ static uint32_t endTime; //结束时间戳\r
\r
private:\r
CountDownModel() {}\r
std::string CountTimeBackup{"00:00:00"};\r
bool IsChanageToStartCountDownViewFlag{false};//是否需要切换到开始倒计时界面标志\r
bool CountDownTimerIsPauseFlag{false};\r
+\r
+ bool isRunning{false};//记录倒计时是否正在运行\r
+ bool isPaused{false}; //记录倒计时是否暂停\r
};\r
}\r
#endif
\ No newline at end of file
* @Author: luozheng 1732036298@qq.com\r
* @Date: 2024-04-07 18:15:53\r
* @LastEditors: luozheng 1732036298@qq.com\r
- * @LastEditTime: 2024-11-05 11:49:33\r
+ * @LastEditTime: 2024-11-21 16:38:01\r
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/countdown/src/CountDownModel.cpp\r
*/\r
#include "countdown/include/CountDownModel.h"\r
#include "AppViewIDs.h"\r
#include "NativeAbility.h"\r
#include <custom_utils.h>\r
+#include <errcode.h>\r
namespace OHOS\r
{\r
/* -------------------------------------------------------------------------- */\r
// 声明定时器变量\r
static osTimerId_t g_timer = nullptr;\r
int CountDownModel::g_CountDownTimes = {0};\r
+ int CountDownModel::totalSeconds = 0; //总的倒计时时间\r
+ uint32_t CountDownModel::startTime = 0;\r
+ uint32_t CountDownModel::pauseTime = 0;\r
+ uint32_t CountDownModel::endTime = 0;\r
static constexpr int32 NUM_TEN = 10; // 主要用于格式化输出,当小时、分钟或秒小于10时,在其前面添加一个’0’以保持常规时间格式,例如“09:05:03”。\r
static constexpr int16 NUM_TIME_MIN = 60;\r
static constexpr int16 NUM_TIME_HOUR = 3600;\r
*/\r
static void CountDown_TimerCallback(int data)\r
{\r
- CountDownModel::g_CountDownTimes--; // 每次回调减少1秒\r
- if (CountDownModel::g_CountDownTimes <= 0) // 检查倒计时是否结束\r
+\r
+ /*拿系统时间实现倒计时功能*/\r
+ bool isRunning = CountDownModel::GetInstance()->GetisRunning();\r
+ bool isPaused = CountDownModel::GetInstance()->GetisPaused();\r
+\r
+ if (isRunning &&!isPaused) \r
{\r
- GraphicService::GetInstance()->PostGraphicEvent(std::bind(CountDown_TimerCallbackProc, data));\r
+ uint32_t currentTime = CountDownModel::GetInstance()->get_current_time();\r
+ CountDownModel::g_CountDownTimes = CountDownModel::totalSeconds - (currentTime - CountDownModel::startTime);\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "当前时间戳:%u,倒计时剩余时间:%d", currentTime ,CountDownModel::g_CountDownTimes);\r
+ if (CountDownModel::g_CountDownTimes <= 0 && currentTime == CountDownModel::endTime) {\r
+ // 这里可以添加倒计时结束后的操作,比如发出提示音等\r
+ GraphicService::GetInstance()->PostGraphicEvent(std::bind(CountDown_TimerCallbackProc, data));\r
+ }\r
+ }\r
+ }\r
+\r
+ uint32_t CountDownModel::get_current_time()\r
+ {\r
+ uint32_t time;\r
+ if (uapi_get_timestampe_ss(&time) != ERRCODE_SUCC) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to get timestamp");\r
+ return 0;\r
}\r
+ return time;\r
+ }\r
+\r
+ void CountDownModel::countdownstart()\r
+ {\r
+ isRunning = true;\r
+ isPaused = false;\r
+ CountDownModel::totalSeconds = CountDownModel::g_CountDownTimes;\r
+ CountDownModel::startTime = get_current_time(); //获取开始时间戳\r
+ CountDownModel::endTime = CountDownModel::startTime + g_CountDownTimes; //获取结束时间戳\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "startTime:%u,endTime:%u",CountDownModel::startTime,CountDownModel::endTime);\r
+\r
+ }\r
+ \r
+ void CountDownModel::countdownpause()\r
+ {\r
+ if (isRunning &&!isPaused) {\r
+ isPaused = true;\r
+ CountDownModel::pauseTime = get_current_time();\r
+ }\r
+ }\r
+ void CountDownModel::countdownresume()\r
+ {\r
+ if (isRunning && isPaused) {\r
+ isPaused = false;\r
+ uint32_t currentTime = get_current_time();\r
+ uint32_t pauseDuration = currentTime - CountDownModel::pauseTime;\r
+ CountDownModel::endTime = CountDownModel::endTime + pauseDuration;\r
+ CountDownModel::totalSeconds = CountDownModel::totalSeconds + pauseDuration;\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "startTime:%u,pauseDuration:%u,endTime:%u",CountDownModel::startTime,pauseDuration,CountDownModel::endTime);\r
+ }\r
+ }\r
+ \r
+ void CountDownModel::countdownstop()\r
+ {\r
+ isRunning = false;\r
+ isPaused = false;\r
}\r
\r
/*\r
return;\r
}\r
\r
+ countdownstart();\r
+\r
/* --------------------------------- 2.创建定时器 -------------------------------- */\r
g_timer = osTimerNew((osTimerFunc_t)CountDown_TimerCallback, osTimerPeriodic, nullptr, nullptr);\r
// 检查定时器创建是否成功\r
// 检查定时器是否存在\r
if (g_timer != nullptr)\r
{\r
+ countdownstop();\r
+\r
osTimerStop(g_timer);\r
// 删除定时器并置为 nullptr\r
osStatus_t ret = osTimerDelete(g_timer);\r
// 检查定时器是否存在\r
if (g_timer != nullptr)\r
{\r
+ countdownpause();\r
+\r
// 暂停定时器,但不删除它\r
osStatus_t ret = osTimerStop(g_timer);\r
if (ret != osOK)\r
// 检查定时器是否存在\r
if (g_timer != nullptr)\r
{\r
+ countdownresume();\r
+\r
int tick = osMs2Tick(interval);\r
// 恢复定时器\r
osStatus_t ret = osTimerStart(g_timer, tick);\r
* @Author: luozheng 1732036298@qq.com
* @Date: 2024-06-14 09:40:13
* @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-11-14 14:25:34
+ * @LastEditTime: 2024-11-21 17:21:29
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/themestyle/include/ThemeStyleModel.h
*/
#ifndef SET_THEMESTYLE_MODEL_H
typedef enum : uint16_t
{
- APPLIST_STYLE, // 列表显示
- HEXAGONS_STYLE, // 蜂窝显示
ARC_SCALE_LIST_STYLE,//弧形列表
+ HEXAGONS_STYLE, // 蜂窝显示
CIRCLE_LIST_STYLE,//拨号盘
+ APPLIST_STYLE, // 列表显示
FOOTBALL_STYLE, //足球
MAX_THEME_STYLE,
} ThemeStyle;
* @Author: luozheng 1732036298@qq.com
* @Date: 2024-06-14 09:40:13
* @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-11-14 14:37:34
+ * @LastEditTime: 2024-11-21 17:22:12
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/themestyle/include/ThemeStyleView.h
*/
namespace OHOS
{
- static constexpr const uint16_t MAX_STYLE = MAX_THEME_STYLE - 1;
+ static constexpr const uint16_t MAX_STYLE = MAX_THEME_STYLE - 2; //直线列表和足球不显示所以删除了两个
static constexpr char *THEME_STYLE_LIST = "themestyleList"; // 列表
static constexpr char *THEME_STYLE_HEXAGONS = "themestyleHexagons"; // 蜂窝
static constexpr char *THEME_STYLE_FOOTBALL = "themestyleFootball"; // 足球
* @Author: luozheng 1732036298@qq.com
* @Date: 2024-06-14 09:40:20
* @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-11-18 17:19:28
+ * @LastEditTime: 2024-11-21 17:12:45
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/themestyle/src/ThemeStyleView.cpp
*/
titleText->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
scrollView->Add(titleText);
/* -------------------------------------------------------------------------- */
- int16_t textId[] = {STR_LIST_DISPLAY, STR_CELLULAR_DISPLAY, STR_ARC_SCALE_LIST_DISPLAY,STR_DIAL_PLATE};
+ // int16_t textId[] = {STR_LIST_DISPLAY, STR_CELLULAR_DISPLAY, STR_ARC_SCALE_LIST_DISPLAY,STR_DIAL_PLATE};
+ int16_t textId[] = {STR_ARC_SCALE_LIST_DISPLAY, STR_CELLULAR_DISPLAY,STR_DIAL_PLATE};
LabelConfig labelConfig = {
.left = 143,
.top = 153,
.viewId = THEME_STYLE_LIST,
};
- const char *viewId[] = {THEME_STYLE_LIST, THEME_STYLE_HEXAGONS, THEME_STYLE_ARC_LIST,THEME_STYLE_CIRCLE_LIST};
+ // const char *viewId[] = {THEME_STYLE_LIST, THEME_STYLE_HEXAGONS, THEME_STYLE_ARC_LIST,THEME_STYLE_CIRCLE_LIST};
+ const char *viewId[] = {THEME_STYLE_ARC_LIST, THEME_STYLE_HEXAGONS,THEME_STYLE_CIRCLE_LIST};
for (int i = 0; i < sizeof(viewId) / sizeof(viewId[0]); i++)
{
labelbuttonconfig.top = 120 + 120 * i;
.src = THEMESTYLE_LIST_IMAGEPATH,
};
int y = 150;
- const char *src[MAX_STYLE] = {THEMESTYLE_LIST_IMAGEPATH, THEMESTYLE_HEXAGONS_IMAGEPATH, THEMESTYLE_ARCLIST_IMAGEPATH,THEMESTYLE_CIRCLELIST_IMAGEPATH};
+ // const char *src[MAX_STYLE] = {THEMESTYLE_LIST_IMAGEPATH, THEMESTYLE_HEXAGONS_IMAGEPATH, THEMESTYLE_ARCLIST_IMAGEPATH,THEMESTYLE_CIRCLELIST_IMAGEPATH};
+ const char *src[] = {THEMESTYLE_ARCLIST_IMAGEPATH, THEMESTYLE_HEXAGONS_IMAGEPATH,THEMESTYLE_CIRCLELIST_IMAGEPATH};
for (int i = 0; i < sizeof(src) / sizeof(src[0]); i++)
{
imageconfig.y = y + 120 * i;