• 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 "picture_ability_slice.h"
17 #include "ability_env.h"
18 #include "gallery_config.h"
19 #include "gfx_utils/file.h"
20 #include "securec.h"
21 
22 namespace OHOS {
REGISTER_AS(PictureAbilitySlice)23 REGISTER_AS(PictureAbilitySlice)
24 
25 PictureAbilitySlice::~PictureAbilitySlice()
26 {
27     Clear();
28 }
29 
Clear()30 void PictureAbilitySlice::Clear()
31 {
32     printf("PictureAbilitySlice::Clear() | start \n");
33     if (backIcon_ != nullptr) {
34         delete backIcon_;
35         backIcon_ = nullptr;
36     }
37     if (backIconListener_ != nullptr) {
38         delete backIconListener_;
39         backIconListener_ = nullptr;
40     }
41     if (backArea_ != nullptr) {
42         delete backArea_;
43         backArea_ = nullptr;
44     }
45     if (picture_ != nullptr) {
46         delete picture_;
47         picture_ = nullptr;
48     }
49     if (rootView_ != nullptr) {
50         RootView::DestroyWindowRootView(rootView_);
51         rootView_ = nullptr;
52     }
53     printf("PictureAbilitySlice::Clear() | end \n");
54 }
55 
InitTitle()56 void PictureAbilitySlice::InitTitle()
57 {
58     printf("PictureAbilitySlice::InitTitle | start \n");
59     backIcon_ = new UIImageView();
60     backIcon_->SetPosition(BACK_ICON_POSITION_X, BACK_ICON_POSITION_Y);
61     backIcon_->SetSrc(backIconAbsolutePath);
62     backIcon_->SetTouchable(true);
63 
64     backArea_ = new UIViewGroup();
65     backArea_->SetPosition(0, 0, LABEL_POSITION_X, LABEL_HEIGHT);
66     backArea_->SetStyle(STYLE_BACKGROUND_OPA, 0);
67     backArea_->SetTouchable(true);
68 
69     auto onClick = [this] (UIView &view, const Event &event) -> bool {
70         printf("############  terminate AS enter  #############\n");
71         Terminate();
72         printf("############  terminate AS exit  #############\n");
73         return true;
74     };
75     backIconListener_ = new EventListener(onClick, nullptr);
76     backIcon_->SetOnClickListener(backIconListener_);
77     backArea_->SetOnClickListener(backIconListener_);
78 
79     backArea_->Add(backIcon_);
80     rootView_->Add(backArea_);
81 }
82 
InitPicture(const char * path)83 void PictureAbilitySlice::InitPicture(const char* path)
84 {
85     printf("PictureAbilitySlice::InitPicture | start | %s\n", path);
86     picture_ = new UIImageView();
87     picture_->SetSrc(path);
88     int16_t imageWidth = picture_->GetWidth();
89     int16_t imageHeight = picture_->GetHeight();
90     if (imageWidth > ROOT_VIEW_WIDTH || imageHeight > ROOT_VIEW_HEIGHT) {
91         TransformMap transMap(picture_->GetOrigRect());
92         float scaleWidth = 1.0;
93         float scaleHeight = 1.0;
94         if (imageWidth > ROOT_VIEW_WIDTH) {
95             scaleWidth = static_cast<float>(ROOT_VIEW_WIDTH) / imageWidth;
96             printf("########## scaleWidth: %f \n", scaleWidth);
97         }
98         if (imageHeight > ROOT_VIEW_HEIGHT) {
99             scaleHeight = static_cast<float>(ROOT_VIEW_HEIGHT) / imageHeight;
100             printf("########## scaleHeight: %f \n", scaleHeight);
101         }
102         float scale = (scaleWidth < scaleHeight) ? scaleWidth : scaleHeight;
103         printf("########## scale: %f \n", scale);
104         transMap.Scale(Vector2<float>(scale, scale), Vector2<float>(0, 0));
105         picture_->SetTransformMap(transMap);
106         picture_->SetTransformAlgorithm(TransformAlgorithm::NEAREST_NEIGHBOR);
107         imageWidth = imageWidth * scale;
108         imageHeight = imageHeight * scale;
109     }
110     int16_t imagePosX = (ROOT_VIEW_WIDTH - imageWidth) / 2; // 2: half
111     int16_t imagePosY = (ROOT_VIEW_HEIGHT - imageHeight) / 2; // 2: half
112     printf("########## image pos x: %d  | y: %d \n", imagePosX, imagePosY);
113     picture_->SetPosition(imagePosX, imagePosY);
114 
115     rootView_->Add(picture_);
116 }
117 
OnStart(const Want & want)118 void PictureAbilitySlice::OnStart(const Want &want)
119 {
120     printf("######### PictureAbilitySlice::OnStart\n");
121     printf("receive the data -> %s\n", reinterpret_cast<char*>(want.data));
122     AbilitySlice::OnStart(want);
123 
124     rootView_ = RootView::GetWindowRootView();
125     rootView_->SetPosition(ROOT_VIEW_POSITION_X, ROOT_VIEW_POSITION_Y);
126     rootView_->Resize(ROOT_VIEW_WIDTH, ROOT_VIEW_HEIGHT);
127     rootView_->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);
128 
129     uint16_t imagePathLen = strlen(PHOTO_DIRECTORY) + strlen(reinterpret_cast<char*>(want.data)) + 1;
130     if (imagePathLen > MAX_PATH_LENGTH) {
131         printf("---- imagePathLen > MAX_PATH_LENGTH | %d", imagePathLen);
132         return;
133     }
134     char* imagePath = new char[imagePathLen + 1]();
135     if (sprintf_s(imagePath, imagePathLen + 1, "%s/%s", PHOTO_DIRECTORY, reinterpret_cast<char*>(want.data)) < 0) {
136         printf("PictureAbilitySlice::OnStart | imagePath\n");
137         delete[] imagePath;
138         imagePath = nullptr;
139         return;
140     }
141 
142     const char* pathHeader = GetSrcPath();
143     if (sprintf_s(backIconAbsolutePath, MAX_PATH_LENGTH, "%s%s", pathHeader, BACK_ICON_PATH) < 0) {
144         printf("PictureAbilitySlice::OnStart | backIconAbsolutePath\n");
145         delete[] imagePath;
146         imagePath = nullptr;
147         return;
148     }
149 
150     InitPicture(imagePath);
151     InitTitle();
152     delete[] imagePath;
153 
154     SetUIContent(rootView_);
155 }
156 
OnInactive()157 void PictureAbilitySlice::OnInactive()
158 {
159     printf("PictureAbilitySlice::OnInactive\n");
160     AbilitySlice::OnInactive();
161 }
162 
OnActive(const Want & want)163 void PictureAbilitySlice::OnActive(const Want &want)
164 {
165     printf("PictureAbilitySlice::OnActive\n");
166     AbilitySlice::OnActive(want);
167 }
168 
OnBackground()169 void PictureAbilitySlice::OnBackground()
170 {
171     printf("PictureAbilitySlice::OnBackground\n");
172     AbilitySlice::OnBackground();
173 }
174 
OnStop()175 void PictureAbilitySlice::OnStop()
176 {
177     printf("PictureAbilitySlice::OnStop\n");
178     AbilitySlice::OnStop();
179     Clear();
180 }
181 }
182