• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2020 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "camera_ability_slice.h"
17 #include <algorithm>
18 #include <meta_data.h>
19 #include <window/window.h>
20 
21 #include "ability_manager.h"
22 #include "gfx_utils/color.h"
23 #include "ui_config.h"
24 #include "securec.h"
25 
26 namespace OHOS {
27 REGISTER_AS(CameraAbilitySlice)
28 
29 static constexpr const char *VIEWIMAGE = "/userdata/photo/tmp.jpg";
30 // button idx
31 static uint8_t g_curButtonIdx = 1;
32 // video info
33 static int g_isRecording = 0;    // 0--stop recording    1--start/resume recording  2--pause recording
34 
35 class SliderAnimator : public Animator, public AnimatorCallback {
36 public:
SliderAnimator(UISlider * slider,UIImageView * backview,UISurfaceView * surface,SampleCameraManager * cManager,uint16_t duration)37     explicit SliderAnimator(UISlider *slider, UIImageView *backview, UISurfaceView *surface,
38     SampleCameraManager *cManager, uint16_t duration)
39         : Animator(this, slider, duration, true), backgroundView_(backview), mSurfaceview(surface),
40         camManager(cManager), ss(0), runType_(0), camRestart(false) {}
~SliderAnimator()41     virtual ~SliderAnimator() {}
42 
Callback(UIView * view)43     void Callback(UIView *view) override
44     {
45         if (runType_ == 1) {    /* 1 is normal photo */
46             if (camManager->SampleCameraCaptrueIsFinish()) {
47                 if (ss == 0) {    /* 0 first record times */
48                     BackViewSetImage(VIEWIMAGE);
49                     backgroundView_->SetVisible(true);
50                     backgroundView_->Invalidate();
51                     ss = GetRunTime();
52                 } else {
53                     if ((GetRunTime()-ss) > 1000) {    /* 1000 = 1s */
54                         backgroundView_->SetVisible(false);
55                         backgroundView_->Invalidate();
56                         Stop();
57                     }
58                 }
59             }
60         } else if (runType_ == 2) {    /* 2 is record mode */
61             int ms = GetRunTime();
62             if (ss == 0) {
63                 ss = GetRunTime();
64                 return;
65             }
66             if ((ms - ss) > 1000 && camRestart == false) {    /* 1000 = 1s */
67                 camManager->SampleCameraStopRecord();
68                 printf("after stop record!! \n");
69                 printf("before SampleCameraStart!! \n");
70                 camManager->SampleCameraStart(mSurfaceview->GetSurface());
71                 printf("after SampleCameraStart!! \n");
72                 camRestart = true;
73             } else if ((ms - ss) > 2000) {    /* 2000 = 2s */
74                 backgroundView_->SetVisible(false);
75                 backgroundView_->Invalidate();
76                 Stop();
77             }
78         }
79     }
80 
OnStop(UIView & view)81     void OnStop(UIView &view) override
82     {
83         runType_ = 0;
84         ss = 0;
85         camRestart = false;
86     }
87 
SetStart(int type)88     void SetStart(int type)
89     {
90         runType_ = type;
91         camRestart = false;
92     }
93 private:
94     UIImageView *backgroundView_;
95     UISurfaceView *mSurfaceview;
96     SampleCameraManager *camManager;
97     uint32_t ss;
98     uint32_t runType_;
99     bool camRestart;
100 
BackViewSetImage(const char * image)101     void BackViewSetImage(const char *image)
102     {
103         backgroundView_->SetSrc(image);
104         int16_t imageWidth = backgroundView_->GetWidth();
105         int16_t imageHeight = backgroundView_->GetHeight();
106         if (imageWidth > SCREEN_WIDTH || imageHeight > SCREEN_HEIGHT) {
107             TransformMap transMap(backgroundView_->GetOrigRect());
108             float scaleWidth = 1.0;
109             float scaleHeight = 1.0;
110             if (imageWidth > SCREEN_WIDTH)
111                 scaleWidth = static_cast<float>(SCREEN_WIDTH) / imageWidth;
112             if (imageHeight > SCREEN_HEIGHT)
113                 scaleHeight = static_cast<float>(SCREEN_HEIGHT) / imageHeight;
114 #ifdef KEEP_PICTURE_RECT
115             float scale = (scaleWidth < scaleHeight) ? scaleWidth : scaleHeight;
116 
117             transMap.Scale(Vector2<float>(scale, scale), Vector2<float>(0, 0));
118 #else
119             transMap.Scale(Vector2<float>(scaleWidth, scaleHeight), Vector2<float>(0, 0));
120 #endif
121             backgroundView_->SetTransformMap(transMap);
122             backgroundView_->SetTransformAlgorithm(TransformAlgorithm::NEAREST_NEIGHBOR);
123 #ifdef KEEP_PICTURE_RECT
124             imageWidth = imageWidth * scale;
125             imageHeight = imageHeight * scale;
126 #else
127             imageWidth = imageWidth * scaleWidth;
128             imageHeight = imageHeight * scaleHeight;
129 #endif
130         }
131         int16_t imagePosX = (SCREEN_WIDTH - imageWidth) / 2;    /* 2 half */
132         int16_t imagePosY = (SCREEN_HEIGHT - imageHeight) / 2;    /* 2 half */
133         backgroundView_->SetPosition(imagePosX, imagePosY);
134     }
135 };
136 
137 class CameraImageButtonOnClickListener : public UIView::OnClickListener {
138 public:
CameraImageButtonOnClickListener(UIView * uiView,UISurfaceView * surface,UIImageView * iamgeview,TaskView * taskView,SliderAnimator * animator)139     CameraImageButtonOnClickListener(UIView *uiView,  UISurfaceView *surface,
140         UIImageView *iamgeview, TaskView *taskView, SliderAnimator *animator) : uiView_(uiView),
141         backgroundView_(iamgeview), mSurfaceview(surface), animator_(animator), gTaskView_(taskView)
142         {
143             cManager_ = nullptr;
144             bttnLeft = nullptr;
145             bttnRight = nullptr;
146             bttnMidle = nullptr;
147             bttnRecord = nullptr;
148             recordImage = nullptr;
149             tmLabel = nullptr;
150             bttnIdx_ = 0;
151         }
~CameraImageButtonOnClickListener()152     virtual ~CameraImageButtonOnClickListener() {}
153 
OnClick(UIView & view,const ClickEvent & event)154     bool OnClick(UIView &view, const ClickEvent &event) override
155     {
156         if (cManager_ == nullptr || tmLabel == nullptr || bttnLeft == nullptr || bttnMidle == nullptr ||
157             bttnRight == nullptr || bttnRecord == nullptr || recordImage == nullptr) {
158             printf("nullptr point!! \n");
159             return false;
160         }
161         switch (bttnIdx_) {
162             case 0: {     /* 0 thumb */
163                 StartGallery();
164                 return true;
165             }
166                 break;
167             case 1:    /* 1 photo */
168                 StartTakePhoto();
169                 break;
170             case 2:    /* 2 record */
171                 RecorderButtonDeal();
172                 break;
173             case 3:    /* 3 pause/resume */
174                 if (g_isRecording == 1) {    /* 1 start */
175                     g_isRecording = 2;    /* 2 pause */
176                     gTaskView_->SetPause();
177                     bttnRecord->SetSrc(UI_IMAGE_PATH"ic_camera_record_continue.png");
178                 } else {
179                     bttnRecord->SetSrc(UI_IMAGE_PATH"ic_camera_record_pause.png");
180                     g_isRecording = 1;    /* 1 start */
181                     gTaskView_->SetResume();
182                 }
183                 bttnRecord->Invalidate();
184                 return true;
185             default:
186                 return true;
187         }
188 
189         if (g_curButtonIdx != 2) {    /* 2 is record button */
190             recordImage->SetVisible(false);
191             recordImage->Invalidate();
192 
193             tmLabel->SetVisible(false);
194             tmLabel->Invalidate();
195 
196             bttnRecord->SetVisible(false);
197             bttnRecord->Invalidate();
198         } else {
199             tmLabel->SetVisible(true);
200             tmLabel->Invalidate();
201         }
202 
203         uiView_->Invalidate();
204 
205         return true;
206     }
207 
208     // idx  0--left, 1--midle, 2--right, 3--record, 4--rview
SetImageView(UIImageView * imgButton,int idx)209     void SetImageView(UIImageView *imgButton, int idx)
210     {
211         if (idx == 0) bttnLeft = imgButton;    /* 0 thumb */
212         if (idx == 1) bttnMidle = imgButton;    /* 1 photo */
213         if (idx == 2) bttnRight = imgButton;    /* 2 record */
214         if (idx == 3) bttnRecord = imgButton;    /* 3 pause */
215         if (idx == 4) recordImage = imgButton;    /* 4 icon */
216     }
217 
SetButtonIdxCamera(SampleCameraManager * cManager,int idx)218     void SetButtonIdxCamera(SampleCameraManager *cManager, int idx)
219     {
220         cManager_ = cManager;
221         bttnIdx_ = idx;
222     }
223 
SetLabel(UILabel * l)224     void SetLabel(UILabel *l)
225     {
226         tmLabel = l;
227     }
228 
229 private:
230     UIView *uiView_;
231     UIImageView *backgroundView_;
232     UISurfaceView *mSurfaceview;
233     SliderAnimator *animator_;
234     TaskView *gTaskView_;
235     int16_t bttnIdx_;
236 
237     SampleCameraManager *cManager_;
238     UIImageView *bttnLeft;
239     UIImageView *bttnRight;
240     UIImageView *bttnMidle;
241     UIImageView *bttnRecord;
242     UIImageView *recordImage;
243     UILabel *tmLabel;
StartGallery(void)244     void StartGallery(void)
245     {
246         Want want1 = { nullptr };
247         ElementName element = { nullptr };
248         SetElementBundleName(&element, "com.huawei.gallery");
249         SetElementAbilityName(&element, "GalleryAbility");
250         SetWantElement(&want1, element);
251         SetWantData(&want1, "WantData", strlen("WantData") + 1);
252         StartAbility(&want1);
253     }
254 
StartTakePhoto(void)255     void StartTakePhoto(void)
256     {
257         if (g_curButtonIdx != 1) {    /* 1 photo */
258             if (g_isRecording) {
259                 return;
260             }
261             g_curButtonIdx = 1;
262             bttnLeft->SetPosition(LEFT_BUTTON_X, LEFT_BUTTON_Y, LEFT_BUTTON_W, LEFT_BUTTON_H);
263             bttnMidle->SetPosition(MID_BUTTON_X, MID_BUTTON_Y, MID_BUTTON_W, MID_BUTTON_H);
264             bttnRight->SetPosition(RIGHT_BUTTON_X, RIGHT_BUTTON_Y, RIGHT_BUTTON_W, RIGHT_BUTTON_H);
265             bttnMidle->SetSrc(UI_IMAGE_PATH"ic_camera_shutter.png");
266             bttnRight->SetSrc(UI_IMAGE_PATH"ic_camera_video.png");
267         } else {
268             cManager_->SampleCameraCaptrue(0);
269             animator_->SetStart(1);
270             animator_->Start();
271         }
272     }
273 
RecorderButtonDeal(void)274     void RecorderButtonDeal(void)
275     {
276         if (g_curButtonIdx != 2) {    /* 2 record */
277             g_curButtonIdx = 2;    /* 2 record */
278             bttnRight->SetPosition(MID_BUTTON_X, MID_BUTTON_Y, MID_BUTTON_W, MID_BUTTON_H);
279             bttnMidle->SetPosition(RIGHT_BUTTON_X, RIGHT_BUTTON_Y, RIGHT_BUTTON_W, RIGHT_BUTTON_H);
280 
281             bttnMidle->SetSrc(UI_IMAGE_PATH"ic_camera_record_camra.png");
282             bttnRight->SetSrc(UI_IMAGE_PATH"ic_camera_record.png");
283         } else {
284             if (g_isRecording) {
285                 g_isRecording = 0;    /* 0 stop */
286                 animator_->Stop();
287 
288                 cManager_->SampleCameraStopRecord();
289                 printf("after stop record!! \n");
290                 printf("before SampleCameraStart!! \n");
291                 cManager_->SampleCameraStart(mSurfaceview->GetSurface());
292                 printf("after SampleCameraStart!! \n");
293 
294                 gTaskView_->SetStop();
295                 recordImage->SetVisible(false);
296                 recordImage->Invalidate();
297 
298                 bttnRecord->SetVisible(false);
299                 bttnRecord->Invalidate();
300                 bttnMidle->SetVisible(true);
301                 bttnMidle->Invalidate();
302                 bttnLeft->SetVisible(true);
303                 bttnLeft->Invalidate();
304 
305                 bttnRight->SetSrc(UI_IMAGE_PATH"ic_camera_record.png");
306             } else {
307                 g_isRecording = 1;    /* 1 start */
308                 cManager_->SampleCameraCaptrue(1);    /* 1 start */
309                 cManager_->SampleCameraStartRecord(mSurfaceview->GetSurface());
310 
311                 recordImage->SetVisible(true);
312                 recordImage->Invalidate();
313                 bttnMidle->SetVisible(false);
314                 bttnMidle->Invalidate();
315                 gTaskView_->SetStart();
316                 bttnLeft->SetVisible(false);
317                 bttnLeft->Invalidate();
318 
319                 bttnRight->SetSrc(UI_IMAGE_PATH"ic_camera_record_stop.png");
320             }
321             bttnRight->Invalidate();
322         }
323     }
324 
BackViewSetImage(const char * image)325     void BackViewSetImage(const char *image)
326     {
327         backgroundView_->SetSrc(image);
328         int16_t imageWidth = backgroundView_->GetWidth();
329         int16_t imageHeight = backgroundView_->GetHeight();
330         if (imageWidth > SCREEN_WIDTH || imageHeight > SCREEN_HEIGHT) {
331             TransformMap transMap(backgroundView_->GetOrigRect());
332             float scaleWidth = 1.0;
333             float scaleHeight = 1.0;
334             if (imageWidth > SCREEN_WIDTH)
335                 scaleWidth = static_cast<float>(SCREEN_WIDTH) / imageWidth;
336             if (imageHeight > SCREEN_HEIGHT)
337                 scaleHeight = static_cast<float>(SCREEN_HEIGHT) / imageHeight;
338             float scale = (scaleWidth < scaleHeight) ? scaleWidth : scaleHeight;
339 
340             transMap.Scale(Vector2<float>(scale, scale), Vector2<float>(0, 0));
341             backgroundView_->SetTransformMap(transMap);
342             backgroundView_->SetTransformAlgorithm(TransformAlgorithm::NEAREST_NEIGHBOR);
343             imageWidth = imageWidth * scale;
344             imageHeight = imageHeight * scale;
345         }
346         int16_t imagePosX = (SCREEN_WIDTH - imageWidth) / 2;    /* 2 half */
347         int16_t imagePosY = (SCREEN_HEIGHT - imageHeight) / 2;    /* 2 half */
348         backgroundView_->SetPosition(imagePosX, imagePosY);
349     }
350 };
351 
~CameraAbilitySlice()352 CameraAbilitySlice::~CameraAbilitySlice()
353 {
354     gTaskView_->SetPause();
355     delete gTaskView_;
356     for (int i = 0; i < BUTTON_NUMS; i++)
357         delete bttnImageClick[i];
358     delete cam_manager;
359     delete backBttn;
360     delete backIcon;
361     delete txtMsgLabel;
362     delete recordImage;
363     delete tmLabel;
364     delete bttnLeft;
365     delete bttnMidle;
366     delete bttnRight;
367     delete bttnRecord;
368     delete scroll;
369     animator_->Stop();
370     delete animator_;
371     delete slider;
372     delete buttonListener_;
373     delete surfaceView;
374     delete background_;
375 }
376 
SetHead(void)377 void CameraAbilitySlice::SetHead(void)
378 {
379     backIcon = new UIImageView();
380     backIcon->SetTouchable(true);
381     backIcon->SetSrc(UI_IMAGE_PATH"ic_back.png");
382     backIcon->SetPosition(BACK_LABEL_X, BACK_LABEL_Y, BACK_LABEL_W, BACK_LABEL_H);
383 
384     backBttn = new UIImageView();
385     backBttn->SetTouchable(true);
386     backBttn->SetPosition(0, 0, BACK_LABEL_W * 4, BACK_LABEL_H * 4);    /* 4 cups of icon size */
387     backBttn->SetStyle(STYLE_BACKGROUND_OPA, 0);
388     auto backBttnonClick = [this](UIView &view, const Event &event) -> bool {
389         printf("############  from launcher enter  #############\n");
390         TerminateAbility();
391         printf("############  to launcher  #############\n");
392         return true;
393     };
394 
395     buttonListener_ = new EventListener(backBttnonClick, nullptr);
396     backBttn->SetOnClickListener(buttonListener_);
397     backIcon->SetOnClickListener(buttonListener_);
398 
399     txtMsgLabel = new UILabel();
400     txtMsgLabel->SetPosition(TXT_LABEL_X, TXT_LABEL_Y, TXT_LABEL_W, TXT_LABEL_H);
401     txtMsgLabel->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_LEFT, UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER);
402 
403     txtMsgLabel->SetFont((const char *)TTF_PATH, FONT_SIZE);
404 
405     txtMsgLabel->SetAlign(TEXT_ALIGNMENT_LEFT);
406     txtMsgLabel->SetStyle(STYLE_TEXT_COLOR, Color::ColorTo32(Color::White()));
407     txtMsgLabel->SetStyle(STYLE_BACKGROUND_OPA, 0);
408     txtMsgLabel->SetText((char *)"相机");
409 
410     recordImage = new UIImageView();
411     recordImage->SetTouchable(false);
412     recordImage->SetSrc(UI_IMAGE_PATH"ic_timer.png");
413     recordImage->SetPosition(RECORD_IMAGE_X, RECORD_IMAGE_Y, RECORD_IMAGE_W, RECORD_IMAGE_H);
414     recordImage->SetStyle(STYLE_BACKGROUND_OPA, 0);
415 
416     tmLabel = new UILabel();
417     tmLabel->SetPosition(TIME_LABEL_X, TIME_LABEL_Y, TIME_LABEL_W, TIME_LABEL_H);
418     tmLabel->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_LEFT, UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER);
419     tmLabel->SetText("00:00");
420 
421     tmLabel->SetFont((const char *)TTF_PATH, FONT_SIZE);
422 
423     tmLabel->SetStyle(STYLE_TEXT_COLOR, Color::ColorTo32(Color::White()));
424     tmLabel->SetStyle(STYLE_BACKGROUND_OPA, 0);
425 
426     recordImage->SetVisible(false);
427     recordImage->Invalidate();
428     tmLabel->SetVisible(false);
429     tmLabel->Invalidate();
430 }
431 
SetBottom(void)432 void CameraAbilitySlice::SetBottom(void)
433 {
434     scroll = new UIScrollView();
435     scroll->SetStyle(STYLE_BACKGROUND_COLOR, Color::ColorTo32(Color::White()));
436     scroll->SetStyle(STYLE_BACKGROUND_OPA, 0);
437     scroll->SetPosition(SCROLL_VIEW_X, SCROLL_VIEW_Y, SCROLL_VIEW_W, SCROLL_VIEW_H);
438     scroll->SetHorizontalScrollState(true);
439     scroll->SetVerticalScrollState(false);
440     scroll->SetXScrollBarVisible(false);
441     scroll->SetYScrollBarVisible(false);
442 
443     bttnLeft = new UIImageView();
444     bttnLeft->SetTouchable(true);
445     bttnLeft->SetPosition(LEFT_BUTTON_X, LEFT_BUTTON_Y, LEFT_BUTTON_W, LEFT_BUTTON_H);
446     bttnLeft->SetSrc(UI_IMAGE_PATH"ic_camera_photo.png");
447     bttnLeft->SetStyle(STYLE_BACKGROUND_OPA, 0);
448 
449     bttnMidle = new UIImageView();
450     bttnMidle->SetTouchable(true);
451     bttnMidle->SetSrc(UI_IMAGE_PATH"ic_camera_shutter.png");
452     bttnMidle->SetPosition(MID_BUTTON_X, MID_BUTTON_Y, MID_BUTTON_W, MID_BUTTON_H);
453     bttnMidle->SetStyle(STYLE_BACKGROUND_OPA, 0);
454 
455     bttnRight = new UIImageView();
456     bttnRight->SetTouchable(true);
457     bttnRight->SetPosition(RIGHT_BUTTON_X, RIGHT_BUTTON_Y, RIGHT_BUTTON_W, RIGHT_BUTTON_H);
458     bttnRight->SetSrc(UI_IMAGE_PATH"ic_camera_video.png");
459     bttnRight->SetStyle(STYLE_BACKGROUND_OPA, 0);
460 
461     bttnRecord = new UIImageView();
462     bttnRecord->SetTouchable(true);
463     bttnRecord->SetPosition(RIGHT_BUTTON_X, RIGHT_BUTTON_Y, RIGHT_BUTTON_W, RIGHT_BUTTON_H);
464     bttnRecord->SetSrc(UI_IMAGE_PATH"ic_camera_record_pause.png");
465     bttnRecord->SetStyle(STYLE_BACKGROUND_OPA, 0);
466     bttnRecord->SetVisible(false);
467     bttnRecord->Invalidate();
468 
469     slider = new UISlider();
470     slider->SetPosition(-1, -1, 1, 1);
471 
472     gTaskView_ = new TaskView(tmLabel);
473     gTaskView_->TaskStart();
474 
475     animator_ = new SliderAnimator(slider, background_, surfaceView, cam_manager, 10000);    /* 10000 = 10s */
476 
477     UIImageView *imageV[BUTTON_NUMS] = {bttnLeft, bttnMidle, bttnRight, bttnRecord};
478     for (int i = 0; i < BUTTON_NUMS; i++) {
479         bttnImageClick[i] =
480             new CameraImageButtonOnClickListener((UIView *)scroll, surfaceView, background_, gTaskView_,
481             (SliderAnimator*)animator_);
482         ((CameraImageButtonOnClickListener *)bttnImageClick[i])->SetButtonIdxCamera(cam_manager, i);
483         ((CameraImageButtonOnClickListener *)bttnImageClick[i])->SetLabel(tmLabel);
484         ((CameraImageButtonOnClickListener *)bttnImageClick[i])->SetImageView(bttnLeft, 0);    /* 0 */
485         ((CameraImageButtonOnClickListener *)bttnImageClick[i])->SetImageView(bttnMidle, 1);    /* 1 */
486         ((CameraImageButtonOnClickListener *)bttnImageClick[i])->SetImageView(bttnRight, 2);    /* 2 */
487         ((CameraImageButtonOnClickListener *)bttnImageClick[i])->SetImageView(bttnRecord, 3);    /* 3 */
488         ((CameraImageButtonOnClickListener *)bttnImageClick[i])->SetImageView(recordImage, 4);    /* 4 */
489         imageV[i]->SetOnClickListener(bttnImageClick[i]);
490     }
491 }
492 
OnStart(const Want & want)493 void CameraAbilitySlice::OnStart(const Want &want)
494 {
495     AbilitySlice::OnStart(want);
496     printf("CameraAbilitySlice onstart \n");
497 
498     surfaceView = new UISurfaceView();
499     surfaceView->SetPosition(V_GROUP_X, V_GROUP_Y, V_GROUP_W, V_GROUP_H);
500     surfaceView->GetSurface()->SetWidthAndHeight(IMAGE_WIDTH, IMAGE_HEIGHT);
501 
502     background_ = new UIImageView();
503     background_->SetTouchable(false);
504     background_->SetSrc("/userdata/tmp.jpg");
505     background_->SetPosition(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
506     background_->SetVisible(true);
507     background_->Invalidate();
508 
509     cam_manager = new SampleCameraManager();
510     cam_manager->SampleCameraCreate();
511 
512     SetHead();
513 
514     SetBottom();
515     scroll->Add(bttnLeft);
516     scroll->Add(bttnMidle);
517     scroll->Add(bttnRight);
518     scroll->Add(bttnRecord);
519 
520     RootView *rootView = RootView::GetWindowRootView();
521     rootView->SetPosition(0, 0);
522     rootView->Resize(SCREEN_WIDTH, SCREEN_HEIGHT);
523     rootView->SetStyle(STYLE_BACKGROUND_COLOR, Color::ColorTo32(Color::Black()));
524 
525     rootView->Add(surfaceView);
526     rootView->Add(background_);
527     rootView->Add(backBttn);
528     rootView->Add(backIcon);
529     rootView->Add(txtMsgLabel);
530     rootView->Add(recordImage);
531     rootView->Add(tmLabel);
532     rootView->Add(scroll);
533     rootView->Add(slider);
534 
535     int timecnt = 0;
536     while (1) {
537         if (++timecnt > 5) {    /* 5s timeout */
538             printf("wait camera timeout!! \n");
539             break;
540         }
541         if (cam_manager->SampleCameraIsReady()) break;
542         sleep(1);
543     }
544     SetUIContent(rootView);
545 }
546 
OnInactive()547 void CameraAbilitySlice::OnInactive()
548 {
549     printf("CameraAbilitySlice::OnInactive\n");
550     AbilitySlice::OnInactive();
551 }
552 
OnActive(const Want & want)553 void CameraAbilitySlice::OnActive(const Want &want)
554 {
555     printf("CameraAbilitySlice::OnActive\n");
556     AbilitySlice::OnActive(want);
557 
558     if (cam_manager) {
559         cam_manager->SampleCameraStart(surfaceView->GetSurface());
560         if (background_) {
561             background_->SetVisible(false);
562             background_->Invalidate();
563         }
564     }
565 }
566 
OnBackground()567 void CameraAbilitySlice::OnBackground()
568 {
569     printf("CameraAbilitySlice::OnBackground\n");
570     AbilitySlice::OnBackground();
571     if (background_) {
572         background_->SetSrc("/userdata/tmp.jpg");
573         background_->SetVisible(true);
574         background_->Invalidate();
575     }
576     if (cam_manager)
577         cam_manager->SampleCameraStop();
578 }
579 
OnStop()580 void CameraAbilitySlice::OnStop()
581 {
582     printf("CameraAbilitySlice::OnStop\n");
583     AbilitySlice::OnStop();
584 }
585 }
586