Skip to content

Commit

Permalink
Deploy preview for PR 18 🛫
Browse files Browse the repository at this point in the history
  • Loading branch information
MattiasBuelens committed Mar 18, 2024
1 parent 328bc66 commit a7b9d04
Show file tree
Hide file tree
Showing 4,683 changed files with 2,697,269 additions and 0 deletions.
The diff you're trying to view is too large. We only load the first 3000 changed files.
Empty file added pr-preview/pr-18/.nojekyll
Empty file.
16 changes: 16 additions & 0 deletions pr-preview/pr-18/404.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<!doctype html>
<html lang="en" dir="ltr" class="plugin-native plugin-id-default" data-has-hydrated="false">
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.1.1">
<title data-rh="true">Page Not Found | THEOplayer Documentation</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="robots" content="noindex, nofollow"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://theoplayer.prudentgiraffe.com/documentation/pr-preview/pr-18/404.html/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="Page Not Found | THEOplayer Documentation"><link data-rh="true" rel="icon" href="/documentation/pr-preview/pr-18/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://theoplayer.prudentgiraffe.com/documentation/pr-preview/pr-18/404.html/"><link data-rh="true" rel="alternate" href="https://theoplayer.prudentgiraffe.com/documentation/pr-preview/pr-18/404.html/" hreflang="en"><link data-rh="true" rel="alternate" href="https://theoplayer.prudentgiraffe.com/documentation/pr-preview/pr-18/404.html/" hreflang="x-default"><link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Francois+One&family=Open+Sans:ital,wght@0,300..800;1,300..800&display=swap">
<script src="//js.hs-scripts.com/2163521.js" id="hs-script-loader" async defer="defer"></script><link rel="stylesheet" href="/documentation/pr-preview/pr-18/assets/css/styles.dd92d372.css">
<script src="/documentation/pr-preview/pr-18/assets/js/runtime~main.c41bfc62.js" defer="defer"></script>
<script src="/documentation/pr-preview/pr-18/assets/js/main.552398ad.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const a=new URLSearchParams(window.location.search).entries();for(var[t,e]of a)if(t.startsWith("docusaurus-data-")){var n=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(n,e)}}catch(t){}}(),document.documentElement.setAttribute("data-announcement-bar-initially-dismissed",function(){try{return"true"===localStorage.getItem("docusaurus.announcement.dismiss")}catch(t){}return!1}())</script><div id="__docusaurus"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><div class="announcementBar_mb4j" style="background-color:#9cb9c9;color:#344a5e" role="banner"><div class="content_knG7 announcementBarContent_xLdY">This is a preview of the documentation website from <a target="_blank" rel="noopener noreferrer" href="https://github.com/THEOplayer/documentation/pull/18">pull request #18</a>.</div></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/documentation/pr-preview/pr-18/"><div class="navbar__logo"><img src="/documentation/pr-preview/pr-18/img/logo.svg" alt="THEO" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src="/documentation/pr-preview/pr-18/img/logo_dark.svg" alt="THEO" class="themedComponent_mlkZ themedComponent--dark_xIcU"></div><b class="navbar__title text--truncate">Docs</b></a><a class="navbar__item navbar__link" href="/documentation/pr-preview/pr-18/theoplayer/">THEOplayer</a><a class="navbar__item navbar__link" href="/documentation/pr-preview/pr-18/open-video-ui/">Open Video UI</a><a href="https://developers.theo.live/" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">THEOlive<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="navbarSearchContainer_Bca1"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container margin-vert--xl"><div class="row"><div class="col col--6 col--offset-3"><h1 class="hero__title">Page Not Found</h1><p>We could not find what you were looking for.</p><p>Please contact the owner of the site that linked you to the original URL and let them know their link is broken.</p></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/documentation/pr-preview/pr-18/theoplayer/">THEOplayer</a></li><li class="footer__item"><a class="footer__link-item" href="/documentation/pr-preview/pr-18/open-video-ui/">Open Video UI</a></li><li class="footer__item"><a href="https://developers.theo.live/" target="_blank" rel="noopener noreferrer" class="footer__link-item">THEOlive<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://www.theoplayer.com/" target="_blank" rel="noopener noreferrer" class="footer__link-item">theoplayer.com<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://github.com/THEOplayer" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.linkedin.com/company/theoplayer/" target="_blank" rel="noopener noreferrer" class="footer__link-item">LinkedIn<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 THEO Technologies</div></div></div></footer></div>
</body>
</html>
1 change: 1 addition & 0 deletions pr-preview/pr-18/assets/css/styles.dd92d372.css

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
package com.theoplayer.android.ui

import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import com.theoplayer.android.api.THEOplayerConfig
import com.theoplayer.android.api.THEOplayerView
import com.theoplayer.android.api.source.SourceDescription
import com.theoplayer.android.ui.theme.THEOplayerTheme

/**
* A default THEOplayer UI component.
*
* This component provides a great player experience out-of-the-box, that works for all types
* of streams. It provides all the common playback controls for playing, seeking, changing
* languages and qualities.
*
* The colors and fonts can be changed by wrapping this inside a [THEOplayerTheme].
* For more extensive customizations, we recommend defining your own custom UI using
* a [UIController].
*
* @param modifier the [Modifier] to be applied to this UI
* @param config the player configuration to be used when constructing the [THEOplayerView]
* @param source the source description to load into the player
* @param title the stream's title, shown at the top of the player
* @see UIController
*/
@Composable
fun DefaultUI(
modifier: Modifier = Modifier,
config: THEOplayerConfig,
source: SourceDescription? = null,
title: String? = null
) {
val player = rememberPlayer(config)
LaunchedEffect(player, source) {
player.source = source
}

DefaultUI(modifier = modifier, player = player, title = title)
}

/**
* A default THEOplayer UI component.
*
* This component provides a great player experience out-of-the-box, that works for all types
* of streams. It provides all the common playback controls for playing, seeking, changing
* languages and qualities.
*
* The colors and fonts can be changed by wrapping this inside a [THEOplayerTheme].
* For more extensive customizations, we recommend defining your own custom UI using
* a [UIController].
*
* @param modifier the [Modifier] to be applied to this UI
* @param player the player. This should always be created using [rememberPlayer].
* @param title the stream's title, shown at the top of the player
* @see UIController
*/
@Composable
fun DefaultUI(
modifier: Modifier = Modifier,
player: Player = rememberPlayer(),
title: String? = null
) {
UIController(
modifier = modifier,
player = player,
centerOverlay = {
if (player.firstPlay) {
LoadingSpinner()
}
},
topChrome = {
if (player.firstPlay) {
Row(verticalAlignment = Alignment.CenterVertically) {
title?.let {
Text(
modifier = Modifier.padding(8.dp),
text = it
)
}
Spacer(modifier = Modifier.weight(1f))
LanguageMenuButton()
ChromecastButton()
}
}
},
centerChrome = {
if (player.firstPlay) {
SeekButton(seekOffset = -10, iconSize = 48.dp, contentPadding = PaddingValues(8.dp))
}
PlayButton(iconModifier = Modifier.size(96.dp), contentPadding = PaddingValues(8.dp))
if (player.firstPlay) {
SeekButton(seekOffset = 10, iconSize = 48.dp, contentPadding = PaddingValues(8.dp))
}
},
bottomChrome = {
if (player.firstPlay) {
ChromecastDisplay(modifier = Modifier.padding(8.dp))
if (player.streamType != StreamType.Live) {
SeekBar()
}
Row(verticalAlignment = Alignment.CenterVertically) {
MuteButton()
LiveButton()
CurrentTimeDisplay(showDuration = true)
Spacer(modifier = Modifier.weight(1f))
FullscreenButton()
}
}
},
errorOverlay = {
Box(contentAlignment = Alignment.Center) {
ErrorDisplay()
// Ensure the user can still exit fullscreen
if (player.fullscreen) {
FullscreenButton(modifier = Modifier.align(Alignment.BottomEnd))
}
}
}
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
package com.theoplayer.android.ui.demo

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.rounded.Brush
import androidx.compose.material.icons.rounded.Refresh
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import com.theoplayer.android.api.THEOplayerConfig
import com.theoplayer.android.api.source.SourceDescription
import com.theoplayer.android.api.source.TypedSource
import com.theoplayer.android.ui.DefaultUI
import com.theoplayer.android.ui.demo.nitflex.NitflexUI
import com.theoplayer.android.ui.demo.nitflex.theme.NitflexTheme
import com.theoplayer.android.ui.rememberPlayer
import com.theoplayer.android.ui.theme.THEOplayerTheme

class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

setContent {
THEOplayerTheme(useDarkTheme = true) {
MainContent()
}
}
}
}

@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun MainContent() {
val source = SourceDescription.Builder(
TypedSource.Builder("https://cdn.theoplayer.com/video/elephants-dream/playlist.m3u8")
.build()
).build()

val player = rememberPlayer()
LaunchedEffect(player, source) {
player.source = source
}

var themeMenuOpen by remember { mutableStateOf(false) }
var theme by rememberSaveable { mutableStateOf(PlayerTheme.Default) }

Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
Scaffold(topBar = {
TopAppBar(
title = {
Text(text = "Demo")
},
actions = {
IconButton(onClick = {
player.source = source
player.play()
}) {
Icon(Icons.Rounded.Refresh, contentDescription = "Reload")
}
IconButton(onClick = { themeMenuOpen = true }) {
Icon(Icons.Rounded.Brush, contentDescription = "Theme")
}
DropdownMenu(
expanded = themeMenuOpen,
onDismissRequest = { themeMenuOpen = false }) {
DropdownMenuItem(
text = { Text(text = "Default theme") },
onClick = { theme = PlayerTheme.Default })
DropdownMenuItem(
text = { Text(text = "Nitflex theme") },
onClick = { theme = PlayerTheme.Nitflex })
}
}
)
}, content = { padding ->
val playerModifier = Modifier
.padding(padding)
.fillMaxSize(1f)
when (theme) {
PlayerTheme.Default -> {
DefaultUI(
modifier = playerModifier,
player = player,
title = "Elephant's Dream"
)
}

PlayerTheme.Nitflex -> {
NitflexTheme(useDarkTheme = true) {
NitflexUI(
modifier = playerModifier,
player = player,
title = "Elephant's Dream"
)
}
}
}
})
}
}

enum class PlayerTheme {
Default,
Nitflex
}

@Preview(showBackground = true)
@Composable
fun DefaultPreview() {
MaterialTheme {
DefaultUI(config = THEOplayerConfig.Builder().build())
}
}
Loading

0 comments on commit a7b9d04

Please sign in to comment.