android: keep screen on while playing/recording media
This commit is contained in:
parent
4816150b99
commit
d291f006e9
@ -1,6 +1,8 @@
|
|||||||
package chat.simplex.app
|
package chat.simplex.app
|
||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
|
import androidx.compose.runtime.*
|
||||||
|
import androidx.compose.ui.platform.LocalView
|
||||||
import chat.simplex.common.platform.Log
|
import chat.simplex.common.platform.Log
|
||||||
import androidx.lifecycle.*
|
import androidx.lifecycle.*
|
||||||
import androidx.work.*
|
import androidx.work.*
|
||||||
@ -216,6 +218,17 @@ class SimplexApp: Application(), LifecycleEventObserver {
|
|||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
override fun AndroidKeepScreenOn() {
|
||||||
|
val view = LocalView.current
|
||||||
|
DisposableEffect(Unit) {
|
||||||
|
view.keepScreenOn = true
|
||||||
|
onDispose {
|
||||||
|
view.keepScreenOn = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,8 +23,7 @@ import androidx.compose.ui.Alignment
|
|||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.graphics.painter.Painter
|
import androidx.compose.ui.graphics.painter.Painter
|
||||||
import androidx.compose.ui.platform.LocalContext
|
import androidx.compose.ui.platform.*
|
||||||
import androidx.compose.ui.platform.LocalLifecycleOwner
|
|
||||||
import dev.icerock.moko.resources.compose.painterResource
|
import dev.icerock.moko.resources.compose.painterResource
|
||||||
import dev.icerock.moko.resources.compose.stringResource
|
import dev.icerock.moko.resources.compose.stringResource
|
||||||
import androidx.compose.ui.text.TextStyle
|
import androidx.compose.ui.text.TextStyle
|
||||||
@ -204,6 +203,7 @@ actual fun ActiveCallView() {
|
|||||||
chatModel.callCommand.clear()
|
chatModel.callCommand.clear()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
platform.AndroidKeepScreenOn()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
|
@ -3,8 +3,7 @@ package chat.simplex.common.views.chat.item
|
|||||||
import android.graphics.Rect
|
import android.graphics.Rect
|
||||||
import androidx.compose.foundation.combinedClickable
|
import androidx.compose.foundation.combinedClickable
|
||||||
import androidx.compose.foundation.layout.width
|
import androidx.compose.foundation.layout.width
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.*
|
||||||
import androidx.compose.runtime.remember
|
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.platform.LocalDensity
|
import androidx.compose.ui.platform.LocalDensity
|
||||||
import androidx.compose.ui.platform.LocalView
|
import androidx.compose.ui.platform.LocalView
|
||||||
@ -12,6 +11,7 @@ import androidx.compose.ui.unit.Dp
|
|||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.viewinterop.AndroidView
|
import androidx.compose.ui.viewinterop.AndroidView
|
||||||
import chat.simplex.common.platform.VideoPlayer
|
import chat.simplex.common.platform.VideoPlayer
|
||||||
|
import chat.simplex.common.platform.platform
|
||||||
import com.google.android.exoplayer2.ui.AspectRatioFrameLayout.RESIZE_MODE_FIXED_WIDTH
|
import com.google.android.exoplayer2.ui.AspectRatioFrameLayout.RESIZE_MODE_FIXED_WIDTH
|
||||||
import com.google.android.exoplayer2.ui.StyledPlayerView
|
import com.google.android.exoplayer2.ui.StyledPlayerView
|
||||||
|
|
||||||
@ -32,6 +32,9 @@ actual fun PlayerView(player: VideoPlayer, width: Dp, onClick: () -> Unit, onLon
|
|||||||
onClick = { if (player.player.playWhenReady) stop() else onClick() }
|
onClick = { if (player.player.playWhenReady) stop() else onClick() }
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
if (remember { player.videoPlaying }.value) {
|
||||||
|
platform.AndroidKeepScreenOn()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
|
@ -4,6 +4,7 @@ import android.os.Build
|
|||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.compose.foundation.Image
|
import androidx.compose.foundation.Image
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.graphics.*
|
import androidx.compose.ui.graphics.*
|
||||||
import androidx.compose.ui.graphics.painter.BitmapPainter
|
import androidx.compose.ui.graphics.painter.BitmapPainter
|
||||||
@ -11,8 +12,8 @@ import androidx.compose.ui.layout.ContentScale
|
|||||||
import androidx.compose.ui.platform.LocalContext
|
import androidx.compose.ui.platform.LocalContext
|
||||||
import androidx.compose.ui.viewinterop.AndroidView
|
import androidx.compose.ui.viewinterop.AndroidView
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import chat.simplex.common.helpers.toUri
|
|
||||||
import chat.simplex.common.platform.VideoPlayer
|
import chat.simplex.common.platform.VideoPlayer
|
||||||
|
import chat.simplex.common.platform.platform
|
||||||
import chat.simplex.res.MR
|
import chat.simplex.res.MR
|
||||||
import coil.ImageLoader
|
import coil.ImageLoader
|
||||||
import coil.compose.rememberAsyncImagePainter
|
import coil.compose.rememberAsyncImagePainter
|
||||||
@ -23,7 +24,6 @@ import coil.size.Size
|
|||||||
import com.google.android.exoplayer2.ui.AspectRatioFrameLayout
|
import com.google.android.exoplayer2.ui.AspectRatioFrameLayout
|
||||||
import com.google.android.exoplayer2.ui.StyledPlayerView
|
import com.google.android.exoplayer2.ui.StyledPlayerView
|
||||||
import dev.icerock.moko.resources.compose.stringResource
|
import dev.icerock.moko.resources.compose.stringResource
|
||||||
import java.net.URI
|
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
actual fun FullScreenImageView(modifier: Modifier, data: ByteArray, imageBitmap: ImageBitmap) {
|
actual fun FullScreenImageView(modifier: Modifier, data: ByteArray, imageBitmap: ImageBitmap) {
|
||||||
@ -72,4 +72,7 @@ actual fun FullScreenVideoView(player: VideoPlayer, modifier: Modifier, close: (
|
|||||||
},
|
},
|
||||||
modifier
|
modifier
|
||||||
)
|
)
|
||||||
|
if (remember { player.videoPlaying }.value) {
|
||||||
|
platform.AndroidKeepScreenOn()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package chat.simplex.common.platform
|
package chat.simplex.common.platform
|
||||||
|
|
||||||
|
import androidx.compose.runtime.*
|
||||||
import chat.simplex.common.model.NotificationsMode
|
import chat.simplex.common.model.NotificationsMode
|
||||||
|
|
||||||
interface PlatformInterface {
|
interface PlatformInterface {
|
||||||
@ -11,6 +12,8 @@ interface PlatformInterface {
|
|||||||
fun androidChatInitializedAndStarted() {}
|
fun androidChatInitializedAndStarted() {}
|
||||||
fun androidIsBackgroundCallAllowed(): Boolean = true
|
fun androidIsBackgroundCallAllowed(): Boolean = true
|
||||||
suspend fun androidAskToAllowBackgroundCalls(): Boolean = true
|
suspend fun androidAskToAllowBackgroundCalls(): Boolean = true
|
||||||
|
@Composable
|
||||||
|
fun AndroidKeepScreenOn() {}
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Multiplatform project has separate directories per platform + common directory that contains directories per platform + common for all of them.
|
* Multiplatform project has separate directories per platform + common directory that contains directories per platform + common for all of them.
|
||||||
|
@ -22,6 +22,7 @@ import chat.simplex.common.model.durationText
|
|||||||
import chat.simplex.common.ui.theme.*
|
import chat.simplex.common.ui.theme.*
|
||||||
import chat.simplex.common.views.helpers.*
|
import chat.simplex.common.views.helpers.*
|
||||||
import chat.simplex.common.platform.AudioPlayer
|
import chat.simplex.common.platform.AudioPlayer
|
||||||
|
import chat.simplex.common.platform.platform
|
||||||
import chat.simplex.res.MR
|
import chat.simplex.res.MR
|
||||||
import kotlinx.coroutines.flow.distinctUntilChanged
|
import kotlinx.coroutines.flow.distinctUntilChanged
|
||||||
|
|
||||||
@ -68,6 +69,9 @@ fun ComposeVoiceView(
|
|||||||
.size(36.dp),
|
.size(36.dp),
|
||||||
tint = if (finishedRecording) MaterialTheme.colors.primary else MaterialTheme.colors.secondary
|
tint = if (finishedRecording) MaterialTheme.colors.primary else MaterialTheme.colors.secondary
|
||||||
)
|
)
|
||||||
|
if (audioPlaying.value) {
|
||||||
|
platform.AndroidKeepScreenOn()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
val numberInText = remember(recordedDurationMs, progress.value) {
|
val numberInText = remember(recordedDurationMs, progress.value) {
|
||||||
derivedStateOf {
|
derivedStateOf {
|
||||||
|
@ -29,7 +29,6 @@ import chat.simplex.res.MR
|
|||||||
import dev.icerock.moko.resources.compose.stringResource
|
import dev.icerock.moko.resources.compose.stringResource
|
||||||
import dev.icerock.moko.resources.compose.painterResource
|
import dev.icerock.moko.resources.compose.painterResource
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.*
|
||||||
import java.io.File
|
|
||||||
import java.net.URI
|
import java.net.URI
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@ -371,6 +370,9 @@ private fun RecordVoiceView(recState: MutableState<RecordingState>, stopRecOnNex
|
|||||||
)
|
)
|
||||||
RecordVoiceButton(interactionSource)
|
RecordVoiceButton(interactionSource)
|
||||||
}
|
}
|
||||||
|
if (recState.value is RecordingState.Started) {
|
||||||
|
platform.AndroidKeepScreenOn()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
|
@ -70,6 +70,9 @@ fun CIVoiceView(
|
|||||||
VoiceLayout(file, ci, text, audioPlaying, progress, duration, brokenAudio, sent, hasText, timedMessagesTTL, play, pause, longClick, receiveFile) {
|
VoiceLayout(file, ci, text, audioPlaying, progress, duration, brokenAudio, sent, hasText, timedMessagesTTL, play, pause, longClick, receiveFile) {
|
||||||
AudioPlayer.seekTo(it, progress, fileSource?.filePath)
|
AudioPlayer.seekTo(it, progress, fileSource?.filePath)
|
||||||
}
|
}
|
||||||
|
if (audioPlaying.value) {
|
||||||
|
platform.AndroidKeepScreenOn()
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
VoiceMsgIndicator(null, false, sent, hasText, null, null, false, {}, {}, longClick, receiveFile)
|
VoiceMsgIndicator(null, false, sent, hasText, null, null, false, {}, {}, longClick, receiveFile)
|
||||||
val metaReserve = if (edited)
|
val metaReserve = if (edited)
|
||||||
|
Loading…
Reference in New Issue
Block a user