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}