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