blob: 66c3ff3729978cf8201d3ddc307729f3079fd2a0 [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SRC_MEDIA_PLAYBACK_MEDIAPLAYER_TEST_MEDIAPLAYER_TEST_UTIL_VIEW_H_
#define SRC_MEDIA_PLAYBACK_MEDIAPLAYER_TEST_MEDIAPLAYER_TEST_UTIL_VIEW_H_
#include <fuchsia/media/cpp/fidl.h>
#include <fuchsia/media/playback/cpp/fidl.h>
#include <lib/async-loop/cpp/loop.h>
#include <lib/fit/function.h>
#include <lib/ui/base_view/cpp/base_view.h>
#include <memory>
#include <queue>
#include "lib/component/cpp/startup_context.h"
#include "lib/media/timeline/timeline_function.h"
#include "src/media/playback/mediaplayer/test/command_queue.h"
#include "src/media/playback/mediaplayer/test/mediaplayer_test_util_params.h"
namespace media_player {
namespace test {
class MediaPlayerTestUtilView : public scenic::BaseView {
public:
MediaPlayerTestUtilView(scenic::ViewContext view_context,
fit::function<void(int)> quit_callback,
const MediaPlayerTestUtilParams& params);
~MediaPlayerTestUtilView() override;
private:
enum class State { kPaused, kPlaying, kEnded };
// |scenic::SessionListener|
void OnScenicError(std::string error) override {
FXL_LOG(ERROR) << "Scenic Error " << error;
}
// Implements --experiment. Implementations of this method should not, in
// general, be submitted. This is for developer experiments.
void RunExperiment();
// Implements --test-seek.
void TestSeek();
// Continues --test-seek assuming that a URL is loaded and the view is ready.
void ContinueTestSeek();
// Schedules playback of the next URL when end-of-stream is reached, if there
// is a next URL to be played.
void ScheduleNextUrl();
// |scenic::BaseView|
void OnPropertiesChanged(
fuchsia::ui::gfx::ViewProperties old_properties) override;
// |scenic::BaseView|
void OnSceneInvalidated(
fuchsia::images::PresentationInfo presentation_info) override;
// |scenic::BaseView|
void OnInputEvent(fuchsia::ui::input::InputEvent event) override;
// |scenic::BaseView|
void OnScenicEvent(fuchsia::ui::scenic::Event event) override;
void OnChildAttached(uint32_t view_holder_id);
void OnChildUnavailable(uint32_t view_holder_id);
// Perform a layout of the UI elements.
void Layout();
// Handles a status changed event from the player.
void HandleStatusChanged(
const fuchsia::media::playback::PlayerStatus& status);
// Toggles between play and pause.
void TogglePlayPause();
// Returns progress in ns.
int64_t progress_ns() const;
// Returns progress in the range 0.0 to 1.0.
float normalized_progress() const;
fit::function<void(int)> quit_callback_;
const MediaPlayerTestUtilParams& params_;
size_t next_url_index_ = 0;
scenic::ShapeNode background_node_;
scenic::ShapeNode progress_bar_node_;
scenic::ShapeNode progress_bar_slider_node_;
std::unique_ptr<scenic::EntityNode> video_host_node_;
std::unique_ptr<scenic::ViewHolder> video_view_holder_;
fuchsia::media::playback::PlayerPtr player_;
CommandQueue commands_;
fuchsia::math::Size video_size_;
fuchsia::math::Size pixel_aspect_ratio_;
State state_ = State::kPaused;
media::TimelineFunction timeline_function_;
int64_t duration_ns_ = 0;
fuchsia::media::MetadataPtr metadata_;
fuchsia::math::RectF content_rect_;
fuchsia::math::RectF controls_rect_;
bool problem_shown_ = false;
bool scenic_ready_ = false;
// Disallow copy, assign and move.
MediaPlayerTestUtilView(const MediaPlayerTestUtilView&) = delete;
MediaPlayerTestUtilView(MediaPlayerTestUtilView&&) = delete;
MediaPlayerTestUtilView& operator=(const MediaPlayerTestUtilView&) = delete;
MediaPlayerTestUtilView& operator=(MediaPlayerTestUtilView&&) = delete;
};
} // namespace test
} // namespace media_player
#endif // SRC_MEDIA_PLAYBACK_MEDIAPLAYER_TEST_MEDIAPLAYER_TEST_UTIL_VIEW_H_