15fede72eSopenharmony_ci/* 25fede72eSopenharmony_ci * Copyright (c) 2020 Huawei Device Co., Ltd. 35fede72eSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 45fede72eSopenharmony_ci * you may not use this file except in compliance with the License. 55fede72eSopenharmony_ci * You may obtain a copy of the License at 65fede72eSopenharmony_ci * 75fede72eSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 85fede72eSopenharmony_ci * 95fede72eSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 105fede72eSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 115fede72eSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 125fede72eSopenharmony_ci * See the License for the specific language governing permissions and 135fede72eSopenharmony_ci * limitations under the License. 145fede72eSopenharmony_ci */ 155fede72eSopenharmony_ci 165fede72eSopenharmony_ci#include "gallery_ability_slice.h" 175fede72eSopenharmony_ci#include "ability_env.h" 185fede72eSopenharmony_ci#include "ability_manager.h" 195fede72eSopenharmony_ci#include "picture_ability_slice.h" 205fede72eSopenharmony_ci 215fede72eSopenharmony_ci#include "gfx_utils/file.h" 225fede72eSopenharmony_ci#include "securec.h" 235fede72eSopenharmony_ci 245fede72eSopenharmony_cinamespace OHOS { 255fede72eSopenharmony_ciREGISTER_AS(GalleryAbilitySlice) 265fede72eSopenharmony_ci 275fede72eSopenharmony_ciGalleryAbilitySlice::~GalleryAbilitySlice() 285fede72eSopenharmony_ci{ 295fede72eSopenharmony_ci printf("~GalleryAbilitySlice() | start \n"); 305fede72eSopenharmony_ci Clear(); 315fede72eSopenharmony_ci printf("~GalleryAbilitySlice() | end \n"); 325fede72eSopenharmony_ci} 335fede72eSopenharmony_ci 345fede72eSopenharmony_civoid GalleryAbilitySlice::Clear() 355fede72eSopenharmony_ci{ 365fede72eSopenharmony_ci printf("GalleryAbilitySlice::Clear() | start \n"); 375fede72eSopenharmony_ci if (backIcon_ != nullptr) { 385fede72eSopenharmony_ci delete backIcon_; 395fede72eSopenharmony_ci backIcon_ = nullptr; 405fede72eSopenharmony_ci } 415fede72eSopenharmony_ci if (backIconListener_ != nullptr) { 425fede72eSopenharmony_ci delete backIconListener_; 435fede72eSopenharmony_ci backIconListener_ = nullptr; 445fede72eSopenharmony_ci } 455fede72eSopenharmony_ci if (deleteClickListener_ != nullptr) { 465fede72eSopenharmony_ci delete deleteClickListener_; 475fede72eSopenharmony_ci deleteClickListener_ = nullptr; 485fede72eSopenharmony_ci } 495fede72eSopenharmony_ci if (backArea_ != nullptr) { 505fede72eSopenharmony_ci delete backArea_; 515fede72eSopenharmony_ci backArea_ = nullptr; 525fede72eSopenharmony_ci } 535fede72eSopenharmony_ci if (titleLabel_ != nullptr) { 545fede72eSopenharmony_ci delete titleLabel_; 555fede72eSopenharmony_ci titleLabel_ = nullptr; 565fede72eSopenharmony_ci } 575fede72eSopenharmony_ci if (deleteLabel_ != nullptr) { 585fede72eSopenharmony_ci delete deleteLabel_; 595fede72eSopenharmony_ci deleteLabel_ = nullptr; 605fede72eSopenharmony_ci } 615fede72eSopenharmony_ci 625fede72eSopenharmony_ci ClearThumb(); 635fede72eSopenharmony_ci 645fede72eSopenharmony_ci if (rootView_ != nullptr) { 655fede72eSopenharmony_ci RootView::DestroyWindowRootView(rootView_); 665fede72eSopenharmony_ci rootView_ = nullptr; 675fede72eSopenharmony_ci } 685fede72eSopenharmony_ci printf("GalleryAbilitySlice::Clear() | end \n"); 695fede72eSopenharmony_ci} 705fede72eSopenharmony_ci 715fede72eSopenharmony_civoid GalleryAbilitySlice::ClearThumb() 725fede72eSopenharmony_ci{ 735fede72eSopenharmony_ci printf("GalleryAbilitySlice::ClearThumb() | start \n"); 745fede72eSopenharmony_ci if (picContainer_ != nullptr) { 755fede72eSopenharmony_ci delete picContainer_; 765fede72eSopenharmony_ci picContainer_ = nullptr; 775fede72eSopenharmony_ci } 785fede72eSopenharmony_ci if (picList_ != nullptr) { 795fede72eSopenharmony_ci ClearPictureList(picList_); 805fede72eSopenharmony_ci delete picList_; 815fede72eSopenharmony_ci picList_ = nullptr; 825fede72eSopenharmony_ci } 835fede72eSopenharmony_ci for (uint16_t i = 0; i < pictureCount_; i++) { 845fede72eSopenharmony_ci if (pictureName_[i] != nullptr) { 855fede72eSopenharmony_ci delete[] pictureName_[i]; 865fede72eSopenharmony_ci pictureName_[i] = nullptr; 875fede72eSopenharmony_ci } 885fede72eSopenharmony_ci } 895fede72eSopenharmony_ci for (uint16_t i = 0; i < pictureOnClickListenerCount_; i++) { 905fede72eSopenharmony_ci if (pictureOnClickListener_[i] != nullptr) { 915fede72eSopenharmony_ci delete pictureOnClickListener_[i]; 925fede72eSopenharmony_ci pictureOnClickListener_[i] = nullptr; 935fede72eSopenharmony_ci } 945fede72eSopenharmony_ci } 955fede72eSopenharmony_ci pictureCount_ = 0; 965fede72eSopenharmony_ci pictureOnClickListenerCount_ = 0; 975fede72eSopenharmony_ci printf("GalleryAbilitySlice::ClearThumb() | end \n"); 985fede72eSopenharmony_ci} 995fede72eSopenharmony_ci 1005fede72eSopenharmony_civoid GalleryAbilitySlice::ClearPictureList(const UIView* view) 1015fede72eSopenharmony_ci{ 1025fede72eSopenharmony_ci printf("GalleryAbilitySlice::ClearPictureList() | start \n"); 1035fede72eSopenharmony_ci if (view == nullptr || !(view->IsViewGroup())) { 1045fede72eSopenharmony_ci return; 1055fede72eSopenharmony_ci } 1065fede72eSopenharmony_ci UIView* child = static_cast<const UIViewGroup*>(view)->GetChildrenHead(); 1075fede72eSopenharmony_ci UIView* childNext = nullptr; 1085fede72eSopenharmony_ci while (child != nullptr) { 1095fede72eSopenharmony_ci childNext = child->GetNextSibling(); 1105fede72eSopenharmony_ci if (child->IsViewGroup()) { 1115fede72eSopenharmony_ci ClearPictureList(child); 1125fede72eSopenharmony_ci } 1135fede72eSopenharmony_ci delete child; 1145fede72eSopenharmony_ci child = childNext; 1155fede72eSopenharmony_ci } 1165fede72eSopenharmony_ci printf("GalleryAbilitySlice::ClearPictureList() | end \n"); 1175fede72eSopenharmony_ci} 1185fede72eSopenharmony_ci 1195fede72eSopenharmony_civoid GalleryAbilitySlice::InitTitle() 1205fede72eSopenharmony_ci{ 1215fede72eSopenharmony_ci printf("GalleryAbilitySlice::InitTitle | start \n"); 1225fede72eSopenharmony_ci backIcon_ = new UIImageView(); 1235fede72eSopenharmony_ci backIcon_->SetPosition(BACK_ICON_POSITION_X, BACK_ICON_POSITION_Y); 1245fede72eSopenharmony_ci backIcon_->SetSrc(backIconAbsolutePath); 1255fede72eSopenharmony_ci backIcon_->SetTouchable(true); 1265fede72eSopenharmony_ci 1275fede72eSopenharmony_ci backArea_ = new UIViewGroup(); 1285fede72eSopenharmony_ci backArea_->SetPosition(0, 0, LABEL_POSITION_X, LABEL_HEIGHT); 1295fede72eSopenharmony_ci backArea_->SetStyle(STYLE_BACKGROUND_OPA, 0); 1305fede72eSopenharmony_ci backArea_->SetTouchable(true); 1315fede72eSopenharmony_ci 1325fede72eSopenharmony_ci auto onClick = [this] (UIView& view, const Event& event) -> bool { 1335fede72eSopenharmony_ci printf("############ Next AS enter #############\n"); 1345fede72eSopenharmony_ci TerminateAbility(); 1355fede72eSopenharmony_ci printf("############ Next AS exit #############\n"); 1365fede72eSopenharmony_ci return true; 1375fede72eSopenharmony_ci }; 1385fede72eSopenharmony_ci backIconListener_ = new EventListener(onClick, nullptr); 1395fede72eSopenharmony_ci backIcon_->SetOnClickListener(backIconListener_); 1405fede72eSopenharmony_ci backArea_->SetOnClickListener(backIconListener_); 1415fede72eSopenharmony_ci 1425fede72eSopenharmony_ci titleLabel_ = new UILabel(); 1435fede72eSopenharmony_ci titleLabel_->SetPosition(LABEL_POSITION_X, LABEL_POSITION_Y, LABEL_WIDTH, LABEL_HEIGHT); 1445fede72eSopenharmony_ci titleLabel_->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_LEFT, UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER); 1455fede72eSopenharmony_ci titleLabel_->SetFont(FONT_NAME, GALLERY_FONT_SIZE); 1465fede72eSopenharmony_ci titleLabel_->SetText("照片"); 1475fede72eSopenharmony_ci 1485fede72eSopenharmony_ci deleteLabel_ = new UILabel(); 1495fede72eSopenharmony_ci deleteLabel_->SetPosition(ROOT_VIEW_WIDTH - DELETE_LABEL_WIDTH, LABEL_POSITION_Y, 1505fede72eSopenharmony_ci DELETE_LABEL_WIDTH, LABEL_HEIGHT); 1515fede72eSopenharmony_ci deleteLabel_->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_LEFT, 1525fede72eSopenharmony_ci UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER); 1535fede72eSopenharmony_ci deleteLabel_->SetFont(FONT_NAME, GALLERY_DELETE_FONT_SIZE); 1545fede72eSopenharmony_ci deleteLabel_->SetText("全部删除"); 1555fede72eSopenharmony_ci deleteLabel_->SetTouchable(true); 1565fede72eSopenharmony_ci auto deleteClick = [this] (UIView& view, const Event& event) -> bool { 1575fede72eSopenharmony_ci printf("############ DeleteAllData click enter #############\n"); 1585fede72eSopenharmony_ci DeleteAllData(); 1595fede72eSopenharmony_ci printf("############ DeleteAllData click exit #############\n"); 1605fede72eSopenharmony_ci return true; 1615fede72eSopenharmony_ci }; 1625fede72eSopenharmony_ci deleteClickListener_ = new EventListener(deleteClick, nullptr); 1635fede72eSopenharmony_ci deleteLabel_->SetOnClickListener(deleteClickListener_); 1645fede72eSopenharmony_ci 1655fede72eSopenharmony_ci backArea_->Add(backIcon_); 1665fede72eSopenharmony_ci rootView_->Add(backArea_); 1675fede72eSopenharmony_ci rootView_->Add(titleLabel_); 1685fede72eSopenharmony_ci rootView_->Add(deleteLabel_); 1695fede72eSopenharmony_ci} 1705fede72eSopenharmony_ci 1715fede72eSopenharmony_civoid GalleryAbilitySlice::InitPictureList() 1725fede72eSopenharmony_ci{ 1735fede72eSopenharmony_ci printf("GalleryAbilitySlice::InitPictureList | start \n"); 1745fede72eSopenharmony_ci picContainer_ = new UIScrollView(); 1755fede72eSopenharmony_ci picContainer_->SetPosition(0, LABEL_POSITION_Y + LABEL_HEIGHT); 1765fede72eSopenharmony_ci picContainer_->Resize(ROOT_VIEW_WIDTH, (THUMBNAIL_RESOLUTION_Y + THUMBNAIL_SPACE) * THUMBNAIL_COLUMN); 1775fede72eSopenharmony_ci picContainer_->SetStyle(STYLE_BACKGROUND_OPA, 0); 1785fede72eSopenharmony_ci rootView_->Add(picContainer_); 1795fede72eSopenharmony_ci 1805fede72eSopenharmony_ci picList_ = new UIViewGroup(); 1815fede72eSopenharmony_ci picList_->SetPosition(0, 0, ROOT_VIEW_WIDTH, ROOT_VIEW_HEIGHT); 1825fede72eSopenharmony_ci picList_->SetStyle(STYLE_BACKGROUND_OPA, 0); 1835fede72eSopenharmony_ci 1845fede72eSopenharmony_ci int16_t numInLine = (ROOT_VIEW_WIDTH + THUMBNAIL_SPACE) / (THUMBNAIL_RESOLUTION_X + THUMBNAIL_SPACE); 1855fede72eSopenharmony_ci int16_t offset = ((ROOT_VIEW_WIDTH + THUMBNAIL_SPACE) % (THUMBNAIL_RESOLUTION_X + THUMBNAIL_SPACE)) / 2; // 2: half 1865fede72eSopenharmony_ci AddAllPictures(Point { offset, 0 }, numInLine); 1875fede72eSopenharmony_ci 1885fede72eSopenharmony_ci int16_t totalHeight = (pictureCount_ / numInLine) * (THUMBNAIL_RESOLUTION_Y + THUMBNAIL_SPACE); 1895fede72eSopenharmony_ci if ((pictureCount_ % numInLine) != 0) { 1905fede72eSopenharmony_ci totalHeight += THUMBNAIL_RESOLUTION_Y + THUMBNAIL_SPACE; 1915fede72eSopenharmony_ci } 1925fede72eSopenharmony_ci picList_->Resize(ROOT_VIEW_WIDTH, totalHeight); 1935fede72eSopenharmony_ci printf("------------ totalHeight : %d ------------", totalHeight); 1945fede72eSopenharmony_ci picContainer_->Add(picList_); 1955fede72eSopenharmony_ci} 1965fede72eSopenharmony_ci 1975fede72eSopenharmony_civoid GalleryAbilitySlice::AddAllPictures(const Point& pos, int16_t numInLine) 1985fede72eSopenharmony_ci{ 1995fede72eSopenharmony_ci printf("GalleryAbilitySlice::AddAllPictures | start | %d\n", numInLine); 2005fede72eSopenharmony_ci Point imagePos = pos; 2015fede72eSopenharmony_ci DIR* drip = opendir(THUMBNAIL_DIRECTORY); 2025fede72eSopenharmony_ci if (drip == nullptr) { 2035fede72eSopenharmony_ci return; 2045fede72eSopenharmony_ci } 2055fede72eSopenharmony_ci struct dirent* info = nullptr; 2065fede72eSopenharmony_ci while ((info = readdir(drip)) != nullptr && pictureCount_ < MAX_PICTURE_COUNT) { 2075fede72eSopenharmony_ci uint16_t imageNameLen = static_cast<uint16_t>(strlen(info->d_name)); 2085fede72eSopenharmony_ci if (imageNameLen > MAX_PATH_LENGTH || (strcmp(info->d_name, ".") == 0) || (strcmp(info->d_name, "..") == 0)) { 2095fede72eSopenharmony_ci printf("GalleryAbilitySlice::AddAllPictures | imageNameLen > MAX_PATH_LENGTH | %d\n", imageNameLen); 2105fede72eSopenharmony_ci continue; 2115fede72eSopenharmony_ci } 2125fede72eSopenharmony_ci char* imageName = new char[imageNameLen + 1](); 2135fede72eSopenharmony_ci memcpy_s(imageName, imageNameLen + 1, info->d_name, imageNameLen + 1); 2145fede72eSopenharmony_ci pictureName_[pictureCount_] = imageName; 2155fede72eSopenharmony_ci pictureCount_++; 2165fede72eSopenharmony_ci 2175fede72eSopenharmony_ci uint16_t pathLen = static_cast<uint16_t>(strlen(THUMBNAIL_DIRECTORY)) + imageNameLen + 1; 2185fede72eSopenharmony_ci if (pathLen > MAX_PATH_LENGTH) { 2195fede72eSopenharmony_ci printf("GalleryAbilitySlice::AddAllPictures | pathLen > MAX_PATH_LENGTH | %d\n", pathLen); 2205fede72eSopenharmony_ci continue; 2215fede72eSopenharmony_ci } 2225fede72eSopenharmony_ci char* imagePath = new char[pathLen + 1](); 2235fede72eSopenharmony_ci if (sprintf_s(imagePath, pathLen + 1, "%s/%s", THUMBNAIL_DIRECTORY, info->d_name) < 0) { 2245fede72eSopenharmony_ci printf("GalleryAbilitySlice::AddAllPictures | sprintf_s error\n"); 2255fede72eSopenharmony_ci delete[] imagePath; 2265fede72eSopenharmony_ci continue; 2275fede72eSopenharmony_ci } 2285fede72eSopenharmony_ci 2295fede72eSopenharmony_ci picList_->Add(CreateImageItem(imagePos, imageName, imagePath)); 2305fede72eSopenharmony_ci delete[] imagePath; 2315fede72eSopenharmony_ci 2325fede72eSopenharmony_ci if ((pictureCount_ % numInLine) == 0) { 2335fede72eSopenharmony_ci imagePos.x = pos.x; 2345fede72eSopenharmony_ci imagePos.y += THUMBNAIL_RESOLUTION_Y + THUMBNAIL_SPACE; 2355fede72eSopenharmony_ci } else { 2365fede72eSopenharmony_ci imagePos.x += THUMBNAIL_RESOLUTION_X + THUMBNAIL_SPACE; 2375fede72eSopenharmony_ci } 2385fede72eSopenharmony_ci } 2395fede72eSopenharmony_ci delete info; 2405fede72eSopenharmony_ci closedir(drip); 2415fede72eSopenharmony_ci} 2425fede72eSopenharmony_ci 2435fede72eSopenharmony_ciUIView* GalleryAbilitySlice::CreateImageItem(const Point& pos, const char* imageName, const char* imagePath) 2445fede72eSopenharmony_ci{ 2455fede72eSopenharmony_ci UIImageView* imageView = new UIImageView(); 2465fede72eSopenharmony_ci imageView->SetAutoEnable(false); 2475fede72eSopenharmony_ci imageView->Resize(THUMBNAIL_RESOLUTION_X, THUMBNAIL_RESOLUTION_Y); 2485fede72eSopenharmony_ci imageView->SetSrc(imagePath); 2495fede72eSopenharmony_ci pictureOnClickListener_[pictureOnClickListenerCount_] = GetImageClickListener(imageName); 2505fede72eSopenharmony_ci imageView->SetOnClickListener(pictureOnClickListener_[pictureOnClickListenerCount_++]); 2515fede72eSopenharmony_ci imageView->SetTouchable(true); 2525fede72eSopenharmony_ci 2535fede72eSopenharmony_ci if (strncmp(imageName, PHOTO_PREFIX, strlen(PHOTO_PREFIX)) == 0) { 2545fede72eSopenharmony_ci imageView->SetPosition(pos.x, pos.y); 2555fede72eSopenharmony_ci return imageView; 2565fede72eSopenharmony_ci } 2575fede72eSopenharmony_ci imageView->SetPosition(0, 0); 2585fede72eSopenharmony_ci 2595fede72eSopenharmony_ci UIViewGroup* imageItem = new UIViewGroup(); 2605fede72eSopenharmony_ci imageItem->SetStyle(STYLE_BACKGROUND_OPA, 0); 2615fede72eSopenharmony_ci imageItem->SetPosition(pos.x, pos.y, THUMBNAIL_RESOLUTION_X, THUMBNAIL_RESOLUTION_Y); 2625fede72eSopenharmony_ci imageItem->SetTouchable(true); 2635fede72eSopenharmony_ci imageItem->SetOnClickListener(imageView->GetOnClickListener()); 2645fede72eSopenharmony_ci 2655fede72eSopenharmony_ci UIImageView* videoTag = new UIImageView(); 2665fede72eSopenharmony_ci videoTag->SetPosition(VIDEO_TAG_POSITION_X, VIDEO_TAG_POSITION_Y); 2675fede72eSopenharmony_ci videoTag->SetSrc(videoTagIconAbsolutePath); 2685fede72eSopenharmony_ci videoTag->SetTouchable(true); 2695fede72eSopenharmony_ci videoTag->SetOnClickListener(imageView->GetOnClickListener()); 2705fede72eSopenharmony_ci 2715fede72eSopenharmony_ci imageItem->Add(imageView); 2725fede72eSopenharmony_ci imageItem->Add(videoTag); 2735fede72eSopenharmony_ci 2745fede72eSopenharmony_ci return imageItem; 2755fede72eSopenharmony_ci} 2765fede72eSopenharmony_ci 2775fede72eSopenharmony_ciEventListener* GalleryAbilitySlice::GetImageClickListener(const char* path) 2785fede72eSopenharmony_ci{ 2795fede72eSopenharmony_ci auto onClick = [this, path] (UIView& view, const Event& event) -> bool { 2805fede72eSopenharmony_ci printf("############ Next AS enter #############\n"); 2815fede72eSopenharmony_ci Want wantData = { nullptr }; 2825fede72eSopenharmony_ci printf("------- imagePath: %s \n", path); 2835fede72eSopenharmony_ci bool ret = SetWantData(&wantData, path, strlen(path) + 1); 2845fede72eSopenharmony_ci if (!ret) { 2855fede72eSopenharmony_ci printf("############ SetWantData error #############\n"); 2865fede72eSopenharmony_ci return ret; 2875fede72eSopenharmony_ci } 2885fede72eSopenharmony_ci AbilitySlice* nextSlice = nullptr; 2895fede72eSopenharmony_ci if (strncmp(path, PHOTO_PREFIX, strlen(PHOTO_PREFIX)) == 0) { 2905fede72eSopenharmony_ci printf("--------- enter PictureAbilitySlice \n"); 2915fede72eSopenharmony_ci nextSlice = AbilityLoader::GetInstance().GetAbilitySliceByName("PictureAbilitySlice"); 2925fede72eSopenharmony_ci } else { 2935fede72eSopenharmony_ci printf("--------- enter PlayerAbilitySlice \n"); 2945fede72eSopenharmony_ci nextSlice = AbilityLoader::GetInstance().GetAbilitySliceByName("PlayerAbilitySlice"); 2955fede72eSopenharmony_ci } 2965fede72eSopenharmony_ci if (nextSlice == nullptr) { 2975fede72eSopenharmony_ci printf("undefined nextSlice\n"); 2985fede72eSopenharmony_ci } else { 2995fede72eSopenharmony_ci Present(*nextSlice, wantData); 3005fede72eSopenharmony_ci } 3015fede72eSopenharmony_ci printf("############ Next AS exit #############\n"); 3025fede72eSopenharmony_ci return true; 3035fede72eSopenharmony_ci }; 3045fede72eSopenharmony_ci return new EventListener(onClick, nullptr); 3055fede72eSopenharmony_ci} 3065fede72eSopenharmony_ci 3075fede72eSopenharmony_civoid GalleryAbilitySlice::DeleteAllData() 3085fede72eSopenharmony_ci{ 3095fede72eSopenharmony_ci picContainer_->Invalidate(); 3105fede72eSopenharmony_ci rootView_->Remove(picContainer_); 3115fede72eSopenharmony_ci ClearThumb(); 3125fede72eSopenharmony_ci 3135fede72eSopenharmony_ci DeleteAllFilesInDir(THUMBNAIL_DIRECTORY); 3145fede72eSopenharmony_ci DeleteAllFilesInDir(PHOTO_DIRECTORY); 3155fede72eSopenharmony_ci DeleteAllFilesInDir(VIDEO_SOURCE_DIRECTORY); 3165fede72eSopenharmony_ci 3175fede72eSopenharmony_ci InitPictureList(); 3185fede72eSopenharmony_ci} 3195fede72eSopenharmony_ci 3205fede72eSopenharmony_civoid GalleryAbilitySlice::DeleteAllFilesInDir(const char* path) 3215fede72eSopenharmony_ci{ 3225fede72eSopenharmony_ci DIR* drip = opendir(path); 3235fede72eSopenharmony_ci if (drip == nullptr) { 3245fede72eSopenharmony_ci return; 3255fede72eSopenharmony_ci } 3265fede72eSopenharmony_ci struct dirent* info = nullptr; 3275fede72eSopenharmony_ci while ((info = readdir(drip)) != nullptr) { 3285fede72eSopenharmony_ci uint16_t fileNameLen = static_cast<uint16_t>(strlen(info->d_name)); 3295fede72eSopenharmony_ci uint16_t pathLen = static_cast<uint16_t>(strlen(path)) + fileNameLen + 1; 3305fede72eSopenharmony_ci if (pathLen > MAX_PATH_LENGTH) { 3315fede72eSopenharmony_ci printf("GalleryAbilitySlice::AddAllPictures | pathLen > MAX_PATH_LENGTH | %d\n", pathLen); 3325fede72eSopenharmony_ci continue; 3335fede72eSopenharmony_ci } 3345fede72eSopenharmony_ci char* filePath = new char[pathLen + 1](); 3355fede72eSopenharmony_ci if (sprintf_s(filePath, pathLen + 1, "%s/%s", path, info->d_name) < 0) { 3365fede72eSopenharmony_ci printf("GalleryAbilitySlice::AddAllPictures | sprintf_s error\n"); 3375fede72eSopenharmony_ci delete[] filePath; 3385fede72eSopenharmony_ci continue; 3395fede72eSopenharmony_ci } 3405fede72eSopenharmony_ci if (unlink(filePath) != 0) { 3415fede72eSopenharmony_ci printf("unlink file error | %s\n", filePath); 3425fede72eSopenharmony_ci } 3435fede72eSopenharmony_ci delete[] filePath; 3445fede72eSopenharmony_ci } 3455fede72eSopenharmony_ci delete info; 3465fede72eSopenharmony_ci closedir(drip); 3475fede72eSopenharmony_ci printf("GalleryAbilitySlice::DeleteAllFilesInDir() | success | %s\n", path); 3485fede72eSopenharmony_ci} 3495fede72eSopenharmony_ci 3505fede72eSopenharmony_civoid GalleryAbilitySlice::OnStart(const Want &want) 3515fede72eSopenharmony_ci{ 3525fede72eSopenharmony_ci AbilitySlice::OnStart(want); 3535fede72eSopenharmony_ci 3545fede72eSopenharmony_ci rootView_ = RootView::GetWindowRootView(); 3555fede72eSopenharmony_ci rootView_->SetPosition(ROOT_VIEW_POSITION_X, ROOT_VIEW_POSITION_Y); 3565fede72eSopenharmony_ci rootView_->Resize(ROOT_VIEW_WIDTH, ROOT_VIEW_HEIGHT); 3575fede72eSopenharmony_ci rootView_->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full); 3585fede72eSopenharmony_ci 3595fede72eSopenharmony_ci const char* pathHeader = GetSrcPath(); 3605fede72eSopenharmony_ci if (sprintf_s(backIconAbsolutePath, MAX_PATH_LENGTH, "%s%s", pathHeader, BACK_ICON_PATH) < 0) { 3615fede72eSopenharmony_ci printf("GalleryAbilitySlice::OnStart | backIconAbsolutePath error"); 3625fede72eSopenharmony_ci return; 3635fede72eSopenharmony_ci } 3645fede72eSopenharmony_ci if (sprintf_s(videoTagIconAbsolutePath, MAX_PATH_LENGTH, "%s%s", pathHeader, VIDEO_TAG_ICON_PATH) < 0) { 3655fede72eSopenharmony_ci printf("GalleryAbilitySlice::OnStart | videoTagIconAbsolutePath error"); 3665fede72eSopenharmony_ci return; 3675fede72eSopenharmony_ci } 3685fede72eSopenharmony_ci 3695fede72eSopenharmony_ci InitTitle(); 3705fede72eSopenharmony_ci InitPictureList(); 3715fede72eSopenharmony_ci SetUIContent(rootView_); 3725fede72eSopenharmony_ci} 3735fede72eSopenharmony_ci 3745fede72eSopenharmony_civoid GalleryAbilitySlice::OnInactive() 3755fede72eSopenharmony_ci{ 3765fede72eSopenharmony_ci printf("GalleryAbilitySlice::OnInactive\n"); 3775fede72eSopenharmony_ci AbilitySlice::OnInactive(); 3785fede72eSopenharmony_ci} 3795fede72eSopenharmony_ci 3805fede72eSopenharmony_civoid GalleryAbilitySlice::OnActive(const Want &want) 3815fede72eSopenharmony_ci{ 3825fede72eSopenharmony_ci printf("GalleryAbilitySlice::OnActive\n"); 3835fede72eSopenharmony_ci AbilitySlice::OnActive(want); 3845fede72eSopenharmony_ci} 3855fede72eSopenharmony_ci 3865fede72eSopenharmony_civoid GalleryAbilitySlice::OnBackground() 3875fede72eSopenharmony_ci{ 3885fede72eSopenharmony_ci printf("GalleryAbilitySlice::OnBackground\n"); 3895fede72eSopenharmony_ci AbilitySlice::OnBackground(); 3905fede72eSopenharmony_ci} 3915fede72eSopenharmony_ci 3925fede72eSopenharmony_civoid GalleryAbilitySlice::OnStop() 3935fede72eSopenharmony_ci{ 3945fede72eSopenharmony_ci printf("GalleryAbilitySlice::OnStop\n"); 3955fede72eSopenharmony_ci AbilitySlice::OnStop(); 3965fede72eSopenharmony_ci Clear(); 3975fede72eSopenharmony_ci} 3985fede72eSopenharmony_ci}