updateActivity.cpp 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493
  1. /***********************************************
  2. /gen auto by zuitools
  3. ***********************************************/
  4. #include "updateActivity.h"
  5. /*TAG:GlobalVariable全局变量*/
  6. static ZKTextView* mProgressMessageTextViewPtr;
  7. static ZKTextView* mProgressLoadingTextViewPtr;
  8. static ZKPainter* mProgressPainterPtr;
  9. static ZKWindow* mProgressWindowPtr;
  10. static ZKButton* mBackButtonPtr;
  11. static ZKButton* mInitUpdateButtonPtr;
  12. static ZKListView* mDeviceTypeListViewPtr;
  13. static ZKWindow* mInitWindowPtr;
  14. static ZKPainter* mDialogPainterPtr;
  15. static ZKButton* mDialogButtonPtr;
  16. static ZKTextView* mDialogTextViewPtr;
  17. static ZKWindow* mDialogWindowPtr;
  18. static ZKButton* mFindBackButtonPtr;
  19. static ZKButton* mInstantlyButtonPtr;
  20. static ZKTextView* mVersionNoNewPtr;
  21. static ZKTextView* mFindNewVersionNoTextViewPtr;
  22. static ZKTextView* mVersionNewPtr;
  23. static ZKTextView* mFindNewTextViewPtr;
  24. static ZKPainter* mFindNewPainterPtr;
  25. static ZKWindow* mFindWindowPtr;
  26. static ZKButton* mInitButtonPtr;
  27. static ZKButton* mUpdateButtonPtr;
  28. static ZKTextView* mVersionNoPtr;
  29. static ZKTextView* mVersionNoTextViewPtr;
  30. static ZKTextView* mVersionPtr;
  31. static ZKTextView* mVersionTextViewPtr;
  32. static ZKPainter* mDeviceUpdatePicPainterPtr;
  33. static ZKPainter* mDeviceIpdatePainterPtr;
  34. static ZKTextView* mTitleTextViewPtr;
  35. static ZKButton* msys_backPtr;
  36. static updateActivity* mActivityPtr;
  37. /*register activity*/
  38. REGISTER_ACTIVITY(updateActivity);
  39. typedef struct {
  40. int id; // 定时器ID , 不能重复
  41. int time; // 定时器 时间间隔 单位 毫秒
  42. }S_ACTIVITY_TIMEER;
  43. #include "logic/updateLogic.cc"
  44. /***********/
  45. typedef struct {
  46. int id;
  47. const char *pApp;
  48. } SAppInfo;
  49. /**
  50. *点击跳转window
  51. */
  52. static SAppInfo sAppInfoTab[] = {
  53. // { ID_MAIN_TEXT, "TextViewActivity" },
  54. };
  55. /***************/
  56. typedef bool (*ButtonCallback)(ZKButton *pButton);
  57. /**
  58. * button onclick表
  59. */
  60. typedef struct {
  61. int id;
  62. ButtonCallback callback;
  63. }S_ButtonCallback;
  64. /*TAG:ButtonCallbackTab按键映射表*/
  65. static S_ButtonCallback sButtonCallbackTab[] = {
  66. ID_UPDATE_BackButton, onButtonClick_BackButton,
  67. ID_UPDATE_InitUpdateButton, onButtonClick_InitUpdateButton,
  68. ID_UPDATE_DialogButton, onButtonClick_DialogButton,
  69. ID_UPDATE_FindBackButton, onButtonClick_FindBackButton,
  70. ID_UPDATE_InstantlyButton, onButtonClick_InstantlyButton,
  71. ID_UPDATE_InitButton, onButtonClick_InitButton,
  72. ID_UPDATE_UpdateButton, onButtonClick_UpdateButton,
  73. ID_UPDATE_sys_back, onButtonClick_sys_back,
  74. };
  75. /***************/
  76. typedef void (*SeekBarCallback)(ZKSeekBar *pSeekBar, int progress);
  77. typedef struct {
  78. int id;
  79. SeekBarCallback callback;
  80. }S_ZKSeekBarCallback;
  81. /*TAG:SeekBarCallbackTab*/
  82. static S_ZKSeekBarCallback SZKSeekBarCallbackTab[] = {
  83. };
  84. typedef int (*ListViewGetItemCountCallback)(const ZKListView *pListView);
  85. typedef void (*ListViewobtainListItemDataCallback)(ZKListView *pListView,ZKListView::ZKListItem *pListItem, int index);
  86. typedef void (*ListViewonItemClickCallback)(ZKListView *pListView, int index, int id);
  87. typedef struct {
  88. int id;
  89. ListViewGetItemCountCallback getListItemCountCallback;
  90. ListViewobtainListItemDataCallback obtainListItemDataCallback;
  91. ListViewonItemClickCallback onItemClickCallback;
  92. }S_ListViewFunctionsCallback;
  93. /*TAG:ListViewFunctionsCallback*/
  94. static S_ListViewFunctionsCallback SListViewFunctionsCallbackTab[] = {
  95. ID_UPDATE_DeviceTypeListView, getListItemCount_DeviceTypeListView, obtainListItemData_DeviceTypeListView, onListItemClick_DeviceTypeListView,
  96. };
  97. typedef void (*SlideWindowItemClickCallback)(ZKSlideWindow *pSlideWindow, int index);
  98. typedef struct {
  99. int id;
  100. SlideWindowItemClickCallback onSlideItemClickCallback;
  101. }S_SlideWindowItemClickCallback;
  102. /*TAG:SlideWindowFunctionsCallbackTab*/
  103. static S_SlideWindowItemClickCallback SSlideWindowItemClickCallbackTab[] = {
  104. };
  105. typedef void (*EditTextInputCallback)(const std::string &text);
  106. typedef struct {
  107. int id;
  108. EditTextInputCallback onEditTextChangedCallback;
  109. }S_EditTextInputCallback;
  110. /*TAG:EditTextInputCallback*/
  111. static S_EditTextInputCallback SEditTextInputCallbackTab[] = {
  112. };
  113. typedef void (*VideoViewCallback)(ZKVideoView *pVideoView, int msg);
  114. typedef struct {
  115. int id; //VideoView ID
  116. bool loop; // 是否是轮播类型
  117. int defaultvolume;//轮播类型时,默认视频音量
  118. VideoViewCallback onVideoViewCallback;
  119. }S_VideoViewCallback;
  120. /*TAG:VideoViewCallback*/
  121. static S_VideoViewCallback SVideoViewCallbackTab[] = {
  122. };
  123. updateActivity::updateActivity() {
  124. //todo add init code here
  125. mVideoLoopIndex = -1;
  126. mVideoLoopErrorCount = 0;
  127. }
  128. updateActivity::~updateActivity() {
  129. //todo add init file here
  130. // 退出应用时需要反注册
  131. EASYUICONTEXT->unregisterGlobalTouchListener(this);
  132. unregisterProtocolDataUpdateListener(onProtocolDataUpdate);
  133. onUI_quit();
  134. mActivityPtr = NULL;
  135. mProgressMessageTextViewPtr = NULL;
  136. mProgressLoadingTextViewPtr = NULL;
  137. mProgressPainterPtr = NULL;
  138. mProgressWindowPtr = NULL;
  139. mBackButtonPtr = NULL;
  140. mInitUpdateButtonPtr = NULL;
  141. mDeviceTypeListViewPtr = NULL;
  142. mInitWindowPtr = NULL;
  143. mDialogPainterPtr = NULL;
  144. mDialogButtonPtr = NULL;
  145. mDialogTextViewPtr = NULL;
  146. mDialogWindowPtr = NULL;
  147. mFindBackButtonPtr = NULL;
  148. mInstantlyButtonPtr = NULL;
  149. mVersionNoNewPtr = NULL;
  150. mFindNewVersionNoTextViewPtr = NULL;
  151. mVersionNewPtr = NULL;
  152. mFindNewTextViewPtr = NULL;
  153. mFindNewPainterPtr = NULL;
  154. mFindWindowPtr = NULL;
  155. mInitButtonPtr = NULL;
  156. mUpdateButtonPtr = NULL;
  157. mVersionNoPtr = NULL;
  158. mVersionNoTextViewPtr = NULL;
  159. mVersionPtr = NULL;
  160. mVersionTextViewPtr = NULL;
  161. mDeviceUpdatePicPainterPtr = NULL;
  162. mDeviceIpdatePainterPtr = NULL;
  163. mTitleTextViewPtr = NULL;
  164. msys_backPtr = NULL;
  165. }
  166. const char* updateActivity::getAppName() const{
  167. return "update.ftu";
  168. }
  169. //TAG:onCreate
  170. void updateActivity::onCreate() {
  171. Activity::onCreate();
  172. mProgressMessageTextViewPtr = (ZKTextView*)findControlByID(ID_UPDATE_ProgressMessageTextView);
  173. mProgressLoadingTextViewPtr = (ZKTextView*)findControlByID(ID_UPDATE_ProgressLoadingTextView);
  174. mProgressPainterPtr = (ZKPainter*)findControlByID(ID_UPDATE_ProgressPainter);
  175. mProgressWindowPtr = (ZKWindow*)findControlByID(ID_UPDATE_ProgressWindow);
  176. mBackButtonPtr = (ZKButton*)findControlByID(ID_UPDATE_BackButton);
  177. mInitUpdateButtonPtr = (ZKButton*)findControlByID(ID_UPDATE_InitUpdateButton);
  178. mDeviceTypeListViewPtr = (ZKListView*)findControlByID(ID_UPDATE_DeviceTypeListView);if(mDeviceTypeListViewPtr!= NULL){mDeviceTypeListViewPtr->setListAdapter(this);mDeviceTypeListViewPtr->setItemClickListener(this);}
  179. mInitWindowPtr = (ZKWindow*)findControlByID(ID_UPDATE_InitWindow);
  180. mDialogPainterPtr = (ZKPainter*)findControlByID(ID_UPDATE_DialogPainter);
  181. mDialogButtonPtr = (ZKButton*)findControlByID(ID_UPDATE_DialogButton);
  182. mDialogTextViewPtr = (ZKTextView*)findControlByID(ID_UPDATE_DialogTextView);
  183. mDialogWindowPtr = (ZKWindow*)findControlByID(ID_UPDATE_DialogWindow);
  184. mFindBackButtonPtr = (ZKButton*)findControlByID(ID_UPDATE_FindBackButton);
  185. mInstantlyButtonPtr = (ZKButton*)findControlByID(ID_UPDATE_InstantlyButton);
  186. mVersionNoNewPtr = (ZKTextView*)findControlByID(ID_UPDATE_VersionNoNew);
  187. mFindNewVersionNoTextViewPtr = (ZKTextView*)findControlByID(ID_UPDATE_FindNewVersionNoTextView);
  188. mVersionNewPtr = (ZKTextView*)findControlByID(ID_UPDATE_VersionNew);
  189. mFindNewTextViewPtr = (ZKTextView*)findControlByID(ID_UPDATE_FindNewTextView);
  190. mFindNewPainterPtr = (ZKPainter*)findControlByID(ID_UPDATE_FindNewPainter);
  191. mFindWindowPtr = (ZKWindow*)findControlByID(ID_UPDATE_FindWindow);
  192. mInitButtonPtr = (ZKButton*)findControlByID(ID_UPDATE_InitButton);
  193. mUpdateButtonPtr = (ZKButton*)findControlByID(ID_UPDATE_UpdateButton);
  194. mVersionNoPtr = (ZKTextView*)findControlByID(ID_UPDATE_VersionNo);
  195. mVersionNoTextViewPtr = (ZKTextView*)findControlByID(ID_UPDATE_VersionNoTextView);
  196. mVersionPtr = (ZKTextView*)findControlByID(ID_UPDATE_Version);
  197. mVersionTextViewPtr = (ZKTextView*)findControlByID(ID_UPDATE_VersionTextView);
  198. mDeviceUpdatePicPainterPtr = (ZKPainter*)findControlByID(ID_UPDATE_DeviceUpdatePicPainter);
  199. mDeviceIpdatePainterPtr = (ZKPainter*)findControlByID(ID_UPDATE_DeviceIpdatePainter);
  200. mTitleTextViewPtr = (ZKTextView*)findControlByID(ID_UPDATE_TitleTextView);
  201. msys_backPtr = (ZKButton*)findControlByID(ID_UPDATE_sys_back);
  202. mActivityPtr = this;
  203. onUI_init();
  204. registerProtocolDataUpdateListener(onProtocolDataUpdate);
  205. rigesterActivityTimer();
  206. }
  207. void updateActivity::onClick(ZKBase *pBase) {
  208. //TODO: add widget onClik code
  209. int buttonTablen = sizeof(sButtonCallbackTab) / sizeof(S_ButtonCallback);
  210. for (int i = 0; i < buttonTablen; ++i) {
  211. if (sButtonCallbackTab[i].id == pBase->getID()) {
  212. if (sButtonCallbackTab[i].callback((ZKButton*)pBase)) {
  213. return;
  214. }
  215. break;
  216. }
  217. }
  218. int len = sizeof(sAppInfoTab) / sizeof(sAppInfoTab[0]);
  219. for (int i = 0; i < len; ++i) {
  220. if (sAppInfoTab[i].id == pBase->getID()) {
  221. EASYUICONTEXT->openActivity(sAppInfoTab[i].pApp);
  222. return;
  223. }
  224. }
  225. Activity::onClick(pBase);
  226. }
  227. void updateActivity::onResume() {
  228. Activity::onResume();
  229. EASYUICONTEXT->registerGlobalTouchListener(this);
  230. startVideoLoopPlayback();
  231. onUI_show();
  232. }
  233. void updateActivity::onPause() {
  234. Activity::onPause();
  235. EASYUICONTEXT->unregisterGlobalTouchListener(this);
  236. stopVideoLoopPlayback();
  237. onUI_hide();
  238. }
  239. void updateActivity::onIntent(const Intent *intentPtr) {
  240. Activity::onIntent(intentPtr);
  241. onUI_intent(intentPtr);
  242. }
  243. bool updateActivity::onTimer(int id) {
  244. return onUI_Timer(id);
  245. }
  246. void updateActivity::onProgressChanged(ZKSeekBar *pSeekBar, int progress){
  247. int seekBarTablen = sizeof(SZKSeekBarCallbackTab) / sizeof(S_ZKSeekBarCallback);
  248. for (int i = 0; i < seekBarTablen; ++i) {
  249. if (SZKSeekBarCallbackTab[i].id == pSeekBar->getID()) {
  250. SZKSeekBarCallbackTab[i].callback(pSeekBar, progress);
  251. break;
  252. }
  253. }
  254. }
  255. int updateActivity::getListItemCount(const ZKListView *pListView) const{
  256. int tablen = sizeof(SListViewFunctionsCallbackTab) / sizeof(S_ListViewFunctionsCallback);
  257. for (int i = 0; i < tablen; ++i) {
  258. if (SListViewFunctionsCallbackTab[i].id == pListView->getID()) {
  259. return SListViewFunctionsCallbackTab[i].getListItemCountCallback(pListView);
  260. break;
  261. }
  262. }
  263. return 0;
  264. }
  265. void updateActivity::obtainListItemData(ZKListView *pListView,ZKListView::ZKListItem *pListItem, int index){
  266. int tablen = sizeof(SListViewFunctionsCallbackTab) / sizeof(S_ListViewFunctionsCallback);
  267. for (int i = 0; i < tablen; ++i) {
  268. if (SListViewFunctionsCallbackTab[i].id == pListView->getID()) {
  269. SListViewFunctionsCallbackTab[i].obtainListItemDataCallback(pListView, pListItem, index);
  270. break;
  271. }
  272. }
  273. }
  274. void updateActivity::onItemClick(ZKListView *pListView, int index, int id){
  275. int tablen = sizeof(SListViewFunctionsCallbackTab) / sizeof(S_ListViewFunctionsCallback);
  276. for (int i = 0; i < tablen; ++i) {
  277. if (SListViewFunctionsCallbackTab[i].id == pListView->getID()) {
  278. SListViewFunctionsCallbackTab[i].onItemClickCallback(pListView, index, id);
  279. break;
  280. }
  281. }
  282. }
  283. void updateActivity::onSlideItemClick(ZKSlideWindow *pSlideWindow, int index) {
  284. int tablen = sizeof(SSlideWindowItemClickCallbackTab) / sizeof(S_SlideWindowItemClickCallback);
  285. for (int i = 0; i < tablen; ++i) {
  286. if (SSlideWindowItemClickCallbackTab[i].id == pSlideWindow->getID()) {
  287. SSlideWindowItemClickCallbackTab[i].onSlideItemClickCallback(pSlideWindow, index);
  288. break;
  289. }
  290. }
  291. }
  292. bool updateActivity::onTouchEvent(const MotionEvent &ev) {
  293. return onupdateActivityTouchEvent(ev);
  294. }
  295. void updateActivity::onTextChanged(ZKTextView *pTextView, const std::string &text) {
  296. int tablen = sizeof(SEditTextInputCallbackTab) / sizeof(S_EditTextInputCallback);
  297. for (int i = 0; i < tablen; ++i) {
  298. if (SEditTextInputCallbackTab[i].id == pTextView->getID()) {
  299. SEditTextInputCallbackTab[i].onEditTextChangedCallback(text);
  300. break;
  301. }
  302. }
  303. }
  304. void updateActivity::rigesterActivityTimer() {
  305. int tablen = sizeof(REGISTER_ACTIVITY_TIMER_TAB) / sizeof(S_ACTIVITY_TIMEER);
  306. for (int i = 0; i < tablen; ++i) {
  307. S_ACTIVITY_TIMEER temp = REGISTER_ACTIVITY_TIMER_TAB[i];
  308. registerTimer(temp.id, temp.time);
  309. }
  310. }
  311. void updateActivity::onVideoPlayerMessage(ZKVideoView *pVideoView, int msg) {
  312. int tablen = sizeof(SVideoViewCallbackTab) / sizeof(S_VideoViewCallback);
  313. for (int i = 0; i < tablen; ++i) {
  314. if (SVideoViewCallbackTab[i].id == pVideoView->getID()) {
  315. if (SVideoViewCallbackTab[i].loop) {
  316. //循环播放
  317. videoLoopPlayback(pVideoView, msg, i);
  318. } else if (SVideoViewCallbackTab[i].onVideoViewCallback != NULL){
  319. SVideoViewCallbackTab[i].onVideoViewCallback(pVideoView, msg);
  320. }
  321. break;
  322. }
  323. }
  324. }
  325. void updateActivity::videoLoopPlayback(ZKVideoView *pVideoView, int msg, size_t callbackTabIndex) {
  326. switch (msg) {
  327. case ZKVideoView::E_MSGTYPE_VIDEO_PLAY_STARTED:
  328. LOGD("ZKVideoView::E_MSGTYPE_VIDEO_PLAY_STARTED\n");
  329. if (callbackTabIndex >= (sizeof(SVideoViewCallbackTab)/sizeof(S_VideoViewCallback))) {
  330. break;
  331. }
  332. pVideoView->setVolume(SVideoViewCallbackTab[callbackTabIndex].defaultvolume / 10.0);
  333. mVideoLoopErrorCount = 0;
  334. break;
  335. case ZKVideoView::E_MSGTYPE_VIDEO_PLAY_ERROR:
  336. /**错误处理 */
  337. ++mVideoLoopErrorCount;
  338. if (mVideoLoopErrorCount > 100) {
  339. LOGD("video loop error counts > 100, quit loop playback !");
  340. break;
  341. } //不用break, 继续尝试播放下一个
  342. case ZKVideoView::E_MSGTYPE_VIDEO_PLAY_COMPLETED:
  343. LOGD("ZKVideoView::E_MSGTYPE_VIDEO_PLAY_COMPLETED\n");
  344. std::vector<std::string> videolist;
  345. std::string fileName(getAppName());
  346. if (fileName.size() < 4) {
  347. LOGD("getAppName size < 4, ignore!");
  348. break;
  349. }
  350. fileName = fileName.substr(0, fileName.length() - 4) + "_video_list.txt";
  351. fileName = "/mnt/extsd/" + fileName;
  352. if (!parseVideoFileList(fileName.c_str(), videolist)) {
  353. LOGD("parseVideoFileList failed !");
  354. break;
  355. }
  356. if (pVideoView && !videolist.empty()) {
  357. mVideoLoopIndex = (mVideoLoopIndex + 1) % videolist.size();
  358. pVideoView->play(videolist[mVideoLoopIndex].c_str());
  359. }
  360. break;
  361. }
  362. }
  363. void updateActivity::startVideoLoopPlayback() {
  364. int tablen = sizeof(SVideoViewCallbackTab) / sizeof(S_VideoViewCallback);
  365. for (int i = 0; i < tablen; ++i) {
  366. if (SVideoViewCallbackTab[i].loop) {
  367. ZKVideoView* videoView = (ZKVideoView*)findControlByID(SVideoViewCallbackTab[i].id);
  368. if (!videoView) {
  369. return;
  370. }
  371. //循环播放
  372. videoLoopPlayback(videoView, ZKVideoView::E_MSGTYPE_VIDEO_PLAY_COMPLETED, i);
  373. return;
  374. }
  375. }
  376. }
  377. void updateActivity::stopVideoLoopPlayback() {
  378. int tablen = sizeof(SVideoViewCallbackTab) / sizeof(S_VideoViewCallback);
  379. for (int i = 0; i < tablen; ++i) {
  380. if (SVideoViewCallbackTab[i].loop) {
  381. ZKVideoView* videoView = (ZKVideoView*)findControlByID(SVideoViewCallbackTab[i].id);
  382. if (!videoView) {
  383. return;
  384. }
  385. if (videoView->isPlaying()) {
  386. videoView->stop();
  387. }
  388. return;
  389. }
  390. }
  391. }
  392. bool updateActivity::parseVideoFileList(const char *pFileListPath, std::vector<string>& mediaFileList) {
  393. mediaFileList.clear();
  394. if (NULL == pFileListPath || 0 == strlen(pFileListPath)) {
  395. LOGD("video file list is null!");
  396. return false;
  397. }
  398. ifstream is(pFileListPath, ios_base::in);
  399. if (!is.is_open()) {
  400. LOGD("cann't open file %s \n", pFileListPath);
  401. return false;
  402. }
  403. char tmp[1024] = {0};
  404. while (is.getline(tmp, sizeof(tmp))) {
  405. string str = tmp;
  406. removeCharFromString(str, '\"');
  407. removeCharFromString(str, '\r');
  408. removeCharFromString(str, '\n');
  409. if (str.size() > 1) {
  410. mediaFileList.push_back(str.c_str());
  411. }
  412. }
  413. LOGD("(f:%s, l:%d) parse fileList[%s], get [%d]files", __FUNCTION__,
  414. __LINE__, pFileListPath, int(mediaFileList.size()));
  415. for (std::vector<string>::size_type i = 0; i < mediaFileList.size(); i++) {
  416. LOGD("file[%u]:[%s]", ::size_t(i), mediaFileList[i].c_str());
  417. }
  418. is.close();
  419. return true;
  420. }
  421. int updateActivity::removeCharFromString(string& nString, char c) {
  422. string::size_type pos;
  423. while(1) {
  424. pos = nString.find(c);
  425. if(pos != string::npos) {
  426. nString.erase(pos, 1);
  427. } else {
  428. break;
  429. }
  430. }
  431. return (int)nString.size();
  432. }
  433. void updateActivity::registerUserTimer(int id, int time) {
  434. registerTimer(id, time);
  435. }
  436. void updateActivity::unregisterUserTimer(int id) {
  437. unregisterTimer(id);
  438. }
  439. void updateActivity::resetUserTimer(int id, int time) {
  440. resetTimer(id, time);
  441. }