From e73e844070f3998149a2e58797ec4e63e6f02bf1 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 25 May 2020 13:48:01 +0200 Subject: [PATCH] Should fix screen not waked up on some devices --- .../linphone/activities/call/CallActivity.kt | 4 +++ .../activities/call/IncomingCallActivity.kt | 6 ++++ .../activities/call/OutgoingCallActivity.kt | 3 ++ .../compatibility/Api21Compatibility.kt | 18 ++++++++++ .../compatibility/Api27Compatibility.kt | 36 +++++++++++++++++++ .../linphone/compatibility/Compatibility.kt | 18 ++++++++++ 6 files changed, 85 insertions(+) create mode 100644 app/src/main/java/org/linphone/compatibility/Api27Compatibility.kt diff --git a/app/src/main/java/org/linphone/activities/call/CallActivity.kt b/app/src/main/java/org/linphone/activities/call/CallActivity.kt index 586a18c49..212718854 100644 --- a/app/src/main/java/org/linphone/activities/call/CallActivity.kt +++ b/app/src/main/java/org/linphone/activities/call/CallActivity.kt @@ -23,6 +23,7 @@ import android.content.res.Configuration import android.os.Bundle import android.view.Gravity import android.view.MotionEvent +import android.view.WindowManager import androidx.databinding.DataBindingUtil import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider @@ -46,6 +47,9 @@ class CallActivity : ProximitySensorActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + Compatibility.setShowWhenLocked(this, true) + binding = DataBindingUtil.setContentView(this, R.layout.call_activity) binding.lifecycleOwner = this diff --git a/app/src/main/java/org/linphone/activities/call/IncomingCallActivity.kt b/app/src/main/java/org/linphone/activities/call/IncomingCallActivity.kt index a112409c4..03a6756bc 100644 --- a/app/src/main/java/org/linphone/activities/call/IncomingCallActivity.kt +++ b/app/src/main/java/org/linphone/activities/call/IncomingCallActivity.kt @@ -23,6 +23,7 @@ import android.annotation.TargetApi import android.app.KeyguardManager import android.content.Context import android.os.Bundle +import android.view.WindowManager import androidx.databinding.DataBindingUtil import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider @@ -31,6 +32,7 @@ import org.linphone.R import org.linphone.activities.GenericActivity import org.linphone.activities.call.viewmodels.IncomingCallViewModel import org.linphone.activities.call.viewmodels.IncomingCallViewModelFactory +import org.linphone.compatibility.Compatibility import org.linphone.core.Call import org.linphone.core.tools.Log import org.linphone.databinding.CallIncomingActivityBinding @@ -44,6 +46,10 @@ class IncomingCallActivity : GenericActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + Compatibility.setShowWhenLocked(this, true) + Compatibility.setTurnScreenOn(this, true) + binding = DataBindingUtil.setContentView(this, R.layout.call_incoming_activity) binding.lifecycleOwner = this diff --git a/app/src/main/java/org/linphone/activities/call/OutgoingCallActivity.kt b/app/src/main/java/org/linphone/activities/call/OutgoingCallActivity.kt index 203376d4b..b4e26f2a3 100644 --- a/app/src/main/java/org/linphone/activities/call/OutgoingCallActivity.kt +++ b/app/src/main/java/org/linphone/activities/call/OutgoingCallActivity.kt @@ -21,6 +21,7 @@ package org.linphone.activities.call import android.annotation.TargetApi import android.os.Bundle +import android.view.WindowManager import androidx.databinding.DataBindingUtil import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider @@ -43,6 +44,8 @@ class OutgoingCallActivity : ProximitySensorActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + binding = DataBindingUtil.setContentView(this, R.layout.call_outgoing_activity) binding.lifecycleOwner = this diff --git a/app/src/main/java/org/linphone/compatibility/Api21Compatibility.kt b/app/src/main/java/org/linphone/compatibility/Api21Compatibility.kt index 804ac10af..2c07e21bb 100644 --- a/app/src/main/java/org/linphone/compatibility/Api21Compatibility.kt +++ b/app/src/main/java/org/linphone/compatibility/Api21Compatibility.kt @@ -20,6 +20,7 @@ package org.linphone.compatibility import android.annotation.TargetApi +import android.app.Activity import android.bluetooth.BluetoothAdapter import android.content.ContentValues import android.content.Context @@ -28,6 +29,7 @@ import android.os.Environment import android.os.Vibrator import android.provider.MediaStore import android.provider.Settings +import android.view.WindowManager import org.linphone.R import org.linphone.core.Content import org.linphone.core.tools.Log @@ -151,5 +153,21 @@ class Api21Compatibility { } return copyOk } + + fun setShowWhenLocked(activity: Activity, enable: Boolean) { + if (enable) { + activity.window.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED) + } else { + activity.window.clearFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED) + } + } + + fun setTurnScreenOn(activity: Activity, enable: Boolean) { + if (enable) { + activity.window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON) + } else { + activity.window.clearFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON) + } + } } } diff --git a/app/src/main/java/org/linphone/compatibility/Api27Compatibility.kt b/app/src/main/java/org/linphone/compatibility/Api27Compatibility.kt new file mode 100644 index 000000000..f148b9fd0 --- /dev/null +++ b/app/src/main/java/org/linphone/compatibility/Api27Compatibility.kt @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of linphone-android + * (see https://www.linphone.org). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.linphone.compatibility + +import android.annotation.TargetApi +import android.app.* + +@TargetApi(27) +class Api27Compatibility { + companion object { + fun setShowWhenLocked(activity: Activity, enable: Boolean) { + activity.setShowWhenLocked(enable) + } + + fun setTurnScreenOn(activity: Activity, enable: Boolean) { + activity.setTurnScreenOn(enable) + } + } +} diff --git a/app/src/main/java/org/linphone/compatibility/Compatibility.kt b/app/src/main/java/org/linphone/compatibility/Compatibility.kt index cc44a3db5..5e7f78913 100644 --- a/app/src/main/java/org/linphone/compatibility/Compatibility.kt +++ b/app/src/main/java/org/linphone/compatibility/Compatibility.kt @@ -46,6 +46,24 @@ class Compatibility { } } + /* UI */ + + fun setShowWhenLocked(activity: Activity, enable: Boolean) { + if (Version.sdkStrictlyBelow(Version.API27_OREO_81)) { + Api21Compatibility.setShowWhenLocked(activity, enable) + } else { + Api27Compatibility.setShowWhenLocked(activity, enable) + } + } + + fun setTurnScreenOn(activity: Activity, enable: Boolean) { + if (Version.sdkStrictlyBelow(Version.API27_OREO_81)) { + Api21Compatibility.setTurnScreenOn(activity, enable) + } else { + Api27Compatibility.setTurnScreenOn(activity, enable) + } + } + /* Notifications */ fun createNotificationChannels(