refactor: testing out the full screen intents

This commit is contained in:
jubb
2021-12-06 18:11:26 +11:00
parent acb4f1d466
commit 2966dc00ab
4 changed files with 38 additions and 33 deletions

View File

@@ -54,6 +54,7 @@
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" /> <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" tools:node="remove"/> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" tools:node="remove"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT"/>
<queries> <queries>
<intent> <intent>
@@ -298,6 +299,7 @@
<activity android:name="org.thoughtcrime.securesms.calls.WebRtcCallActivity" <activity android:name="org.thoughtcrime.securesms.calls.WebRtcCallActivity"
android:screenOrientation="portrait" android:screenOrientation="portrait"
android:launchMode="singleTop" android:launchMode="singleTop"
android:showForAllUsers="true"
android:parentActivityName="org.thoughtcrime.securesms.home.HomeActivity" android:parentActivityName="org.thoughtcrime.securesms.home.HomeActivity"
android:theme="@style/Theme.Session.CallActivity"> android:theme="@style/Theme.Session.CallActivity">
<meta-data <meta-data

View File

@@ -6,6 +6,7 @@ import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.IntentFilter import android.content.IntentFilter
import android.media.AudioManager import android.media.AudioManager
import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.view.MenuItem import android.view.MenuItem
import android.view.WindowManager import android.view.WindowManager
@@ -76,8 +77,17 @@ class WebRtcCallActivity: PassphraseRequiredActionBarActivity() {
override fun onCreate(savedInstanceState: Bundle?, ready: Boolean) { override fun onCreate(savedInstanceState: Bundle?, ready: Boolean) {
super.onCreate(savedInstanceState, ready) super.onCreate(savedInstanceState, ready)
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
setContentView(R.layout.activity_webrtc) setContentView(R.layout.activity_webrtc)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
setShowWhenLocked(true)
setTurnScreenOn(true)
}
window.addFlags(
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
or WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
or WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
or WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
or WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON)
volumeControlStream = AudioManager.STREAM_VOICE_CALL volumeControlStream = AudioManager.STREAM_VOICE_CALL
if (intent.action == ACTION_ANSWER) { if (intent.action == ACTION_ANSWER) {

View File

@@ -1,6 +1,7 @@
package org.thoughtcrime.securesms.notifications; package org.thoughtcrime.securesms.notifications;
import android.annotation.TargetApi; import android.annotation.TargetApi;
import android.app.Notification;
import android.app.NotificationChannel; import android.app.NotificationChannel;
import android.app.NotificationChannelGroup; import android.app.NotificationChannelGroup;
import android.app.NotificationManager; import android.app.NotificationManager;

View File

@@ -34,13 +34,14 @@ class CallNotificationBuilder {
val text = context.getString(R.string.CallNotificationBuilder_first_call_message) val text = context.getString(R.string.CallNotificationBuilder_first_call_message)
val builder = NotificationCompat.Builder(context, NotificationChannels.CALLS) val builder = NotificationCompat.Builder(context, NotificationChannels.CALLS)
.setSound(null) .setSound(null)
.setSmallIcon(R.drawable.ic_baseline_call_24) .setSmallIcon(R.drawable.ic_baseline_call_24)
.setContentIntent(pendingIntent) .setContentIntent(pendingIntent)
.setPriority(NotificationCompat.PRIORITY_HIGH) .setPriority(NotificationCompat.PRIORITY_HIGH)
.setContentTitle(context.getString(R.string.CallNotificationBuilder_first_call_title)) .setContentTitle(context.getString(R.string.CallNotificationBuilder_first_call_title))
.setContentText(text) .setContentText(text)
.setStyle(NotificationCompat.BigTextStyle().bigText(text)) .setStyle(NotificationCompat.BigTextStyle().bigText(text))
.setAutoCancel(true)
return builder.build() return builder.build()
} }
@@ -53,11 +54,11 @@ class CallNotificationBuilder {
val pendingIntent = PendingIntent.getActivity(context, 0, contentIntent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) val pendingIntent = PendingIntent.getActivity(context, 0, contentIntent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE)
val builder = NotificationCompat.Builder(context, NotificationChannels.CALLS) val builder = NotificationCompat.Builder(context, NotificationChannels.CALLS)
.setSound(null) .setSound(null)
.setSmallIcon(R.drawable.ic_baseline_call_24) .setSmallIcon(R.drawable.ic_baseline_call_24)
.setContentIntent(pendingIntent) .setContentIntent(pendingIntent)
.setOngoing(true) .setOngoing(true)
.setPriority(NotificationCompat.PRIORITY_LOW) .setPriority(NotificationCompat.PRIORITY_LOW)
recipient?.name?.let { name -> recipient?.name?.let { name ->
builder.setContentTitle(name) builder.setContentTitle(name)
@@ -68,23 +69,7 @@ class CallNotificationBuilder {
builder.setContentText(context.getString(R.string.CallNotificationBuilder_connecting)) builder.setContentText(context.getString(R.string.CallNotificationBuilder_connecting))
builder.priority = NotificationCompat.PRIORITY_LOW builder.priority = NotificationCompat.PRIORITY_LOW
} }
TYPE_INCOMING_PRE_OFFER -> { TYPE_INCOMING_PRE_OFFER,
builder.setContentText(context.getString(R.string.NotificationBarManager__incoming_signal_call))
.setCategory(NotificationCompat.CATEGORY_CALL)
builder.addAction(getServiceNotificationAction(
context,
WebRtcCallService.ACTION_DENY_CALL,
R.drawable.ic_close_grey600_32dp,
R.string.NotificationBarManager__deny_call
))
builder.addAction(getActivityNotificationAction(
context,
WebRtcCallActivity.ACTION_PRE_OFFER,
R.drawable.ic_phone_grey600_32dp,
R.string.NotificationBarManager__answer_call
))
builder.priority = NotificationCompat.PRIORITY_HIGH
}
TYPE_INCOMING_RINGING -> { TYPE_INCOMING_RINGING -> {
builder.setContentText(context.getString(R.string.NotificationBarManager__incoming_signal_call)) builder.setContentText(context.getString(R.string.NotificationBarManager__incoming_signal_call))
.setCategory(NotificationCompat.CATEGORY_CALL) .setCategory(NotificationCompat.CATEGORY_CALL)
@@ -94,9 +79,12 @@ class CallNotificationBuilder {
R.drawable.ic_close_grey600_32dp, R.drawable.ic_close_grey600_32dp,
R.string.NotificationBarManager__deny_call R.string.NotificationBarManager__deny_call
)) ))
builder.setFullScreenIntent(getFullScreenPendingIntent(
context
), true)
builder.addAction(getActivityNotificationAction( builder.addAction(getActivityNotificationAction(
context, context,
WebRtcCallActivity.ACTION_ANSWER, if (type == TYPE_INCOMING_PRE_OFFER) WebRtcCallActivity.ACTION_PRE_OFFER else WebRtcCallActivity.ACTION_ANSWER,
R.drawable.ic_phone_grey600_32dp, R.drawable.ic_phone_grey600_32dp,
R.string.NotificationBarManager__answer_call R.string.NotificationBarManager__answer_call
)) ))
@@ -125,7 +113,6 @@ class CallNotificationBuilder {
return builder.build() return builder.build()
} }
@JvmStatic
private fun getServiceNotificationAction(context: Context, action: String, iconResId: Int, titleResId: Int): NotificationCompat.Action { private fun getServiceNotificationAction(context: Context, action: String, iconResId: Int, titleResId: Int): NotificationCompat.Action {
val intent = Intent(context, WebRtcCallService::class.java) val intent = Intent(context, WebRtcCallService::class.java)
.setAction(action) .setAction(action)
@@ -135,7 +122,12 @@ class CallNotificationBuilder {
return NotificationCompat.Action(iconResId, context.getString(titleResId), pendingIntent) return NotificationCompat.Action(iconResId, context.getString(titleResId), pendingIntent)
} }
@JvmStatic private fun getFullScreenPendingIntent(context: Context): PendingIntent {
val intent = Intent(context, WebRtcCallActivity::class.java)
return PendingIntent.getActivity(context, 1, intent, PendingIntent.FLAG_CANCEL_CURRENT or PendingIntent.FLAG_IMMUTABLE)
}
private fun getActivityNotificationAction(context: Context, action: String, private fun getActivityNotificationAction(context: Context, action: String,
@DrawableRes iconResId: Int, @StringRes titleResId: Int): NotificationCompat.Action { @DrawableRes iconResId: Int, @StringRes titleResId: Int): NotificationCompat.Action {
val intent = Intent(context, WebRtcCallActivity::class.java) val intent = Intent(context, WebRtcCallActivity::class.java)