@@ -12,6 +12,7 @@ import android.app.PictureInPictureParams
12
12
import android.content.Intent
13
13
import android.os.Build
14
14
import android.os.Bundle
15
+ import android.os.PowerManager
15
16
import android.util.Rational
16
17
import android.view.WindowManager
17
18
import android.webkit.PermissionRequest
@@ -28,6 +29,7 @@ import androidx.compose.runtime.mutableStateOf
28
29
import androidx.compose.runtime.rememberUpdatedState
29
30
import androidx.core.app.PictureInPictureModeChangedInfo
30
31
import androidx.core.content.IntentCompat
32
+ import androidx.core.content.getSystemService
31
33
import androidx.core.util.Consumer
32
34
import androidx.lifecycle.Lifecycle
33
35
import io.element.android.features.call.api.CallType
@@ -76,6 +78,12 @@ class ElementCallActivity :
76
78
77
79
private var eventSink: ((CallScreenEvents ) -> Unit )? = null
78
80
81
+ private val proximitySensorWakeLock: PowerManager .WakeLock ? by lazy {
82
+ getSystemService<PowerManager >()
83
+ ?.takeIf { it.isWakeLockLevelSupported(PowerManager .PROXIMITY_SCREEN_OFF_WAKE_LOCK ) }
84
+ ?.newWakeLock(PowerManager .PROXIMITY_SCREEN_OFF_WAKE_LOCK , " $packageName :ProximitySensorCallWakeLock" )
85
+ }
86
+
79
87
override fun onCreate (savedInstanceState : Bundle ? ) {
80
88
super .onCreate(savedInstanceState)
81
89
@@ -89,6 +97,13 @@ class ElementCallActivity :
89
97
WindowManager .LayoutParams .FLAG_TURN_SCREEN_ON
90
98
)
91
99
100
+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .O_MR1 ) {
101
+ setShowWhenLocked(true )
102
+ } else {
103
+ @Suppress(" DEPRECATION" )
104
+ window.addFlags(WindowManager .LayoutParams .FLAG_SHOW_WHEN_LOCKED )
105
+ }
106
+
92
107
setCallType(intent)
93
108
// If presenter is not created at this point, it means we have no call to display, the Activity is finishing, so return early
94
109
if (! ::presenter.isInitialized) {
@@ -125,6 +140,26 @@ class ElementCallActivity :
125
140
}
126
141
}
127
142
143
+ override fun onStart () {
144
+ super .onStart()
145
+
146
+ if (proximitySensorWakeLock?.isHeld == false ) {
147
+ val proximitySensorEnabled = proximitySensorWakeLock?.acquire()
148
+ Timber .d(" Proximity sensor wake lock acquired: $proximitySensorEnabled " )
149
+ } else {
150
+ Timber .d(" Proximity sensor wakelock does not exist or is already held" )
151
+ }
152
+ }
153
+
154
+ override fun onStop () {
155
+ super .onStop()
156
+
157
+ if (proximitySensorWakeLock?.isHeld == true ) {
158
+ proximitySensorWakeLock?.release()
159
+ Timber .d(" Proximity sensor wake lock released" )
160
+ }
161
+ }
162
+
128
163
private fun setCallIsActive () {
129
164
audioFocus.requestAudioFocus(
130
165
requester = AudioFocusRequester .ElementCall ,
0 commit comments