Skip to content

Instantly share code, notes, and snippets.

View rubenquadros's full-sized avatar

Ruben Quadros rubenquadros

  • Bangalore
View GitHub Profile
@rubenquadros
rubenquadros / PackageTableModel.kt
Last active March 27, 2024 17:17
Package table model to display in a JTable.
class PackageTableModel(
private val packages: MutableList<String>
) : AbstractTableModel() {
override fun getRowCount(): Int {
return packages.size
}
override fun getColumnCount(): Int {
return 1 //only 1 column
}
@rubenquadros
rubenquadros / CustomExoPlayerControls.kt
Last active February 13, 2024 14:03
Custom ExoPlayer controls overlay
@Composable
private fun VideoPlayer(modifier: Modifier = Modifier) {
val context = LocalContext.current
val exoPlayer = remember {
ExoPlayer.Builder(context)
.apply {
setSeekBackIncrementMs(PLAYER_SEEK_BACK_INCREMENT)
setSeekForwardIncrementMs(PLAYER_SEEK_FORWARD_INCREMENT)
@rubenquadros
rubenquadros / PlayerLisntener.kt
Last active August 7, 2022 11:37
Listening to ExoPlayer callbacks
var totalDuration by remember { mutableStateOf(0L) }
var currentTime by remember { mutableStateOf(0L) }
var bufferedPercentage by remember { mutableStateOf(0) }
Box(modifier = Modifier) {
DisposableEffect(key1 = Unit) {
val listener =
object : Player.Listener {
@rubenquadros
rubenquadros / AnimateControls.kt
Last active July 31, 2022 15:12
Animating player controls
@Composable
fun PlayerControls(
modifier: Modifier = Modifier,
isVisible: () -> Boolean,
/* other params */
) {
val visible = remember(isVisible()) { isVisible() }
AnimatedVisibility(
@rubenquadros
rubenquadros / BottomControlsHandling.kt
Last active August 7, 2022 11:36
Action to be performed by the bottom controls
@Composable
fun BottomControls(
modifier: Modifier = Modifier,
totalDuration: () -> Long,
currentTime: () -> Long,
bufferPercentage: () -> Int,
onSeekChanged: (timeMs: Float) -> Unit
) {
val duration = remember(totalDuration()) { totalDuration() }
@rubenquadros
rubenquadros / BottomControls.kt
Created July 31, 2022 14:11
Bottom controls UI
@Composable
fun BottomControls(modifier: Modifier = Modifier) {
Column(modifier = modifier.padding(bottom = 32.dp)) {
// seek bar
Slider(
modifier = Modifier.fillMaxWidth(),
value = 1f,
onValueChange = { value: Float -> },
valueRange = 0f..1f,
@rubenquadros
rubenquadros / CenterControlsHandling.kt
Last active July 31, 2022 12:26
Action to be performed by the center controls
@Composable
fun CenterControls(
modifier: Modifier = Modifier,
isPlaying: () -> Boolean,
onReplayClick: () -> Unit,
onPauseToggle: () -> Unit,
onForwardClick: () -> Unit
) {
val isVideoPlaying = remember(isPlaying()) { isPlaying() }
@rubenquadros
rubenquadros / CenterPlayerControls.kt
Created July 31, 2022 11:47
Center controls for player view
@Composable
fun PlayerControls(modifier: Modifier = Modifier) {
//black overlay across the video player
Box(modifier = modifier.background(Color.Black.copy(alpha = 0.6f))) {
Row(
modifier = Modifier.align(Alignment.Center).fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceEvenly
) {
//replay button
IconButton(modifier = Modifier.size(40.dp), onClick = {}) {
@rubenquadros
rubenquadros / VideoPlayer.kt
Last active July 31, 2022 11:09
Simple ExoPlayer setup
@Composable
fun VideoPlayer(modifier: Modifier = Modifier) {
val context = LocalContext.current
val exoPlayer = remember {
ExoPlayer.Builder(context).build().apply {
setMediaItem(
MediaItem.fromUri(
"https://www.learningcontainer.com/wp-content/uploads/2020/05/sample-mp4-file.mp4"
@rubenquadros
rubenquadros / ApplySettings.kt
Last active July 29, 2022 17:48
Reset notification and code analysis
// Update notifications
EditorNotifications.getInstance(project).updateAllNotifications()
// Restart the analysis
PsiManager.getInstance(project).apply {
dropPsiCaches()
dropResolveCaches()
}
DaemonCodeAnalyzer.getInstance(project).restart()