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#ifndef OHOS_PLAYER_ABILITY_SLICE_H
175fede72eSopenharmony_ci#define OHOS_PLAYER_ABILITY_SLICE_H
185fede72eSopenharmony_ci
195fede72eSopenharmony_ci#include "ability_loader.h"
205fede72eSopenharmony_ci#include "animator/animator.h"
215fede72eSopenharmony_ci#include "animator/easing_equation.h"
225fede72eSopenharmony_ci#include "components/root_view.h"
235fede72eSopenharmony_ci#include "components/ui_label.h"
245fede72eSopenharmony_ci#include "components/ui_slider.h"
255fede72eSopenharmony_ci#include "components/ui_surface_view.h"
265fede72eSopenharmony_ci#include "components/ui_toggle_button.h"
275fede72eSopenharmony_ci#include "event_listener.h"
285fede72eSopenharmony_ci#include "gallery_config.h"
295fede72eSopenharmony_ci#include "player.h"
305fede72eSopenharmony_ci#include "securec.h"
315fede72eSopenharmony_ci#include "source.h"
325fede72eSopenharmony_ci
335fede72eSopenharmony_cinamespace OHOS {
345fede72eSopenharmony_ciusing OHOS::Media::Player;
355fede72eSopenharmony_ciusing OHOS::Media::Source;
365fede72eSopenharmony_ciusing namespace OHOS::Media;
375fede72eSopenharmony_cistruct PlayerAdapter {
385fede72eSopenharmony_ci    std::shared_ptr<Player> adapter;
395fede72eSopenharmony_ci    int32_t sourceType;
405fede72eSopenharmony_ci    char filePath[MAX_PATH_LENGTH];
415fede72eSopenharmony_ci};
425fede72eSopenharmony_ci
435fede72eSopenharmony_ciclass ToggleBtnListener : public UIView::OnClickListener {
445fede72eSopenharmony_cipublic:
455fede72eSopenharmony_ci    explicit ToggleBtnListener(UIToggleButton* btn,
465fede72eSopenharmony_ci                               PlayerAdapter* sample,
475fede72eSopenharmony_ci                               Animator* animator,
485fede72eSopenharmony_ci                               UISurfaceView* surfaceView)
495fede72eSopenharmony_ci        : button_(btn),
505fede72eSopenharmony_ci          videoPlayer_(sample),
515fede72eSopenharmony_ci          animator_(animator) {}
525fede72eSopenharmony_ci
535fede72eSopenharmony_ci    virtual ~ToggleBtnListener() {}
545fede72eSopenharmony_ci
555fede72eSopenharmony_ci    bool OnClick(UIView &view, const ClickEvent& event) override;
565fede72eSopenharmony_ci
575fede72eSopenharmony_ci    void SetCompleteFlag(bool state)
585fede72eSopenharmony_ci    {
595fede72eSopenharmony_ci        completeFlag_ = state;
605fede72eSopenharmony_ci    }
615fede72eSopenharmony_ci
625fede72eSopenharmony_ciprivate:
635fede72eSopenharmony_ci    UIToggleButton* button_;
645fede72eSopenharmony_ci    PlayerAdapter* videoPlayer_;
655fede72eSopenharmony_ci    Animator* animator_;
665fede72eSopenharmony_ci    bool completeFlag_ { false };
675fede72eSopenharmony_ci};
685fede72eSopenharmony_ci
695fede72eSopenharmony_ciclass SliderAnimator : public Animator, public AnimatorCallback {
705fede72eSopenharmony_cipublic:
715fede72eSopenharmony_ci    explicit SliderAnimator(PlayerAdapter *sample,
725fede72eSopenharmony_ci                            UISlider *slider,
735fede72eSopenharmony_ci                            UILabel *label,
745fede72eSopenharmony_ci                            int64_t duration,
755fede72eSopenharmony_ci                            UISurfaceView* surfaceView)
765fede72eSopenharmony_ci        : Animator(this, slider, duration, true),
775fede72eSopenharmony_ci          videoPlayer_(sample),
785fede72eSopenharmony_ci          slider_(slider),
795fede72eSopenharmony_ci          timeLabel_(label),
805fede72eSopenharmony_ci          duration_(duration),
815fede72eSopenharmony_ci          surfaceView_(surfaceView),
825fede72eSopenharmony_ci          needRefreshPlayer_(false) {}
835fede72eSopenharmony_ci
845fede72eSopenharmony_ci    virtual ~SliderAnimator() {}
855fede72eSopenharmony_ci
865fede72eSopenharmony_ci    void Callback(UIView* view) override;
875fede72eSopenharmony_ci
885fede72eSopenharmony_ci    void SetToggleButton(UIToggleButton* toggleButton)
895fede72eSopenharmony_ci    {
905fede72eSopenharmony_ci        toggleButton_ = toggleButton;
915fede72eSopenharmony_ci    }
925fede72eSopenharmony_ci
935fede72eSopenharmony_ci    void SetToggleBtnListener(ToggleBtnListener* listener)
945fede72eSopenharmony_ci    {
955fede72eSopenharmony_ci        listener_ = listener;
965fede72eSopenharmony_ci    }
975fede72eSopenharmony_ci
985fede72eSopenharmony_ciprivate:
995fede72eSopenharmony_ci    PlayerAdapter* videoPlayer_;
1005fede72eSopenharmony_ci    UISlider* slider_;
1015fede72eSopenharmony_ci    UILabel* timeLabel_;
1025fede72eSopenharmony_ci    int64_t duration_;
1035fede72eSopenharmony_ci    UISurfaceView* surfaceView_;
1045fede72eSopenharmony_ci    UIToggleButton* toggleButton_ { nullptr };
1055fede72eSopenharmony_ci    ToggleBtnListener* listener_ { nullptr };
1065fede72eSopenharmony_ci    bool needRefreshPlayer_;
1075fede72eSopenharmony_ci};
1085fede72eSopenharmony_ci
1095fede72eSopenharmony_ciclass PlayerAbilitySlice : public AbilitySlice {
1105fede72eSopenharmony_cipublic:
1115fede72eSopenharmony_ci    PlayerAbilitySlice() = default;
1125fede72eSopenharmony_ci    ~PlayerAbilitySlice() override;
1135fede72eSopenharmony_ci    static std::shared_ptr<Player> CreatePlayer();
1145fede72eSopenharmony_ciprotected:
1155fede72eSopenharmony_ci    void OnStart(const Want &want) override;
1165fede72eSopenharmony_ci    void OnInactive() override;
1175fede72eSopenharmony_ci    void OnActive(const Want &want) override;
1185fede72eSopenharmony_ci    void OnBackground() override;
1195fede72eSopenharmony_ci    void OnStop() override;
1205fede72eSopenharmony_ci
1215fede72eSopenharmony_ciprivate:
1225fede72eSopenharmony_ci    void Clear();
1235fede72eSopenharmony_ci    void ShowErrorTips();
1245fede72eSopenharmony_ci    void SetUpRootView();
1255fede72eSopenharmony_ci    void SetUpBackArea(const char* pathHeader);
1265fede72eSopenharmony_ci    void SetUpVideoPlayer(const Want &want);
1275fede72eSopenharmony_ci    bool SetUpSurfaceView();
1285fede72eSopenharmony_ci    void SetUpProgress(int64_t duration);
1295fede72eSopenharmony_ci    void SetUpAnimatorGroup(const char* pathHeader);
1305fede72eSopenharmony_ci    void SetUpToggleButton(const char* pathHeader);
1315fede72eSopenharmony_ci
1325fede72eSopenharmony_ci    PlayerAdapter* videoPlayer_ { nullptr };
1335fede72eSopenharmony_ci    SliderAnimator* animator_ { nullptr };
1345fede72eSopenharmony_ci    EventListener* backIconListener_ { nullptr };
1355fede72eSopenharmony_ci    ToggleBtnListener* onClickListener_ { nullptr };
1365fede72eSopenharmony_ci
1375fede72eSopenharmony_ci    RootView* rootView_ { nullptr };
1385fede72eSopenharmony_ci    UIViewGroup* backArea_ { nullptr };
1395fede72eSopenharmony_ci    UIImageView* backIcon_ { nullptr };
1405fede72eSopenharmony_ci    UISurfaceView* surfaceView_ { nullptr };
1415fede72eSopenharmony_ci    UIViewGroup* animatorGroup_ { nullptr };
1425fede72eSopenharmony_ci    UIToggleButton* toggleButton_ { nullptr };
1435fede72eSopenharmony_ci    UIViewGroup* toggleButtonArea_ { nullptr };
1445fede72eSopenharmony_ci    UILabel* currentTimeLabel_ { nullptr };
1455fede72eSopenharmony_ci    UISlider* slider_ { nullptr };
1465fede72eSopenharmony_ci    UILabel* totalTimeLabel_ { nullptr };
1475fede72eSopenharmony_ci    UILabel* errorTips_ { nullptr };
1485fede72eSopenharmony_ci    char backIconAbsolutePath[MAX_PATH_LENGTH] = { 0 };
1495fede72eSopenharmony_ci    char videoPlayAbsolutePath[MAX_PATH_LENGTH] = { 0 };
1505fede72eSopenharmony_ci    char videoPauseAbsolutePath[MAX_PATH_LENGTH] = { 0 };
1515fede72eSopenharmony_ci};
1525fede72eSopenharmony_ci} // namespace OHOS
1535fede72eSopenharmony_ci#endif // OHOS_PLAYER_ABILITY_SLICE_H
154