@@ -15,6 +15,7 @@ import android.media.AudioFocusRequest
15
15
import android.media.AudioManager
16
16
import android.os.Build
17
17
import android.os.Bundle
18
+ import android.os.PowerManager
18
19
import android.util.Rational
19
20
import android.view.WindowManager
20
21
import android.webkit.PermissionRequest
@@ -31,6 +32,7 @@ import androidx.compose.runtime.mutableStateOf
31
32
import androidx.compose.runtime.rememberUpdatedState
32
33
import androidx.core.app.PictureInPictureModeChangedInfo
33
34
import androidx.core.content.IntentCompat
35
+ import androidx.core.content.getSystemService
34
36
import androidx.core.util.Consumer
35
37
import androidx.lifecycle.Lifecycle
36
38
import io.element.android.features.call.api.CallType
@@ -81,6 +83,12 @@ class ElementCallActivity :
81
83
82
84
private var eventSink: ((CallScreenEvents ) -> Unit )? = null
83
85
86
+ private val proximitySensorWakeLock: PowerManager .WakeLock ? by lazy {
87
+ getSystemService<PowerManager >()
88
+ ?.takeIf { it.isWakeLockLevelSupported(PowerManager .PROXIMITY_SCREEN_OFF_WAKE_LOCK ) }
89
+ ?.newWakeLock(PowerManager .PROXIMITY_SCREEN_OFF_WAKE_LOCK , " $packageName :ProximitySensorCallWakeLock" )
90
+ }
91
+
84
92
override fun onCreate (savedInstanceState : Bundle ? ) {
85
93
super .onCreate(savedInstanceState)
86
94
@@ -94,6 +102,13 @@ class ElementCallActivity :
94
102
WindowManager .LayoutParams .FLAG_TURN_SCREEN_ON
95
103
)
96
104
105
+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .O_MR1 ) {
106
+ setShowWhenLocked(true )
107
+ } else {
108
+ @Suppress(" DEPRECATION" )
109
+ window.addFlags(WindowManager .LayoutParams .FLAG_SHOW_WHEN_LOCKED )
110
+ }
111
+
97
112
setCallType(intent)
98
113
// If presenter is not created at this point, it means we have no call to display, the Activity is finishing, so return early
99
114
if (! ::presenter.isInitialized) {
@@ -132,6 +147,26 @@ class ElementCallActivity :
132
147
}
133
148
}
134
149
150
+ override fun onStart () {
151
+ super .onStart()
152
+
153
+ if (proximitySensorWakeLock?.isHeld == false ) {
154
+ val proximitySensorEnabled = proximitySensorWakeLock?.acquire()
155
+ Timber .d(" Proximity sensor wake lock acquired: $proximitySensorEnabled " )
156
+ } else {
157
+ Timber .d(" Proximity sensor wakelock does not exist or is already held" )
158
+ }
159
+ }
160
+
161
+ override fun onStop () {
162
+ super .onStop()
163
+
164
+ if (proximitySensorWakeLock?.isHeld == true ) {
165
+ proximitySensorWakeLock?.release()
166
+ Timber .d(" Proximity sensor wake lock released" )
167
+ }
168
+ }
169
+
135
170
private fun setCallIsActive () {
136
171
requestAudioFocus()
137
172
CallForegroundService .start(this )
0 commit comments