diff --git a/app/src/main/java/org/thoughtcrime/securesms/calls/WebRtcCallActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/calls/WebRtcCallActivity.kt index 479977ef56..19d0cc7d41 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/calls/WebRtcCallActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/calls/WebRtcCallActivity.kt @@ -267,11 +267,6 @@ class WebRtcCallActivity: PassphraseRequiredActionBarActivity() { viewModel.localRenderer?.let { surfaceView -> surfaceView.setZOrderOnTop(true) local_renderer.addView(surfaceView) - val params = surfaceView.layoutParams as FrameLayout.LayoutParams - params.width = FrameLayout.LayoutParams.WRAP_CONTENT - params.height = FrameLayout.LayoutParams.WRAP_CONTENT - params.gravity = Gravity.CENTER - surfaceView.layoutParams = params } } local_renderer.isVisible = isEnabled @@ -285,11 +280,6 @@ class WebRtcCallActivity: PassphraseRequiredActionBarActivity() { if (isEnabled) { viewModel.remoteRenderer?.let { surfaceView -> remote_renderer.addView(surfaceView) - val params = surfaceView.layoutParams as FrameLayout.LayoutParams - params.width = ViewGroup.LayoutParams.WRAP_CONTENT - params.height = ViewGroup.LayoutParams.WRAP_CONTENT - params.gravity = Gravity.CENTER - surfaceView.layoutParams = params } } remote_renderer.isVisible = isEnabled diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/WebRtcCallService.kt b/app/src/main/java/org/thoughtcrime/securesms/service/WebRtcCallService.kt index 5693e3ca81..a7f76e1c33 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/WebRtcCallService.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/service/WebRtcCallService.kt @@ -6,6 +6,7 @@ import android.content.Context import android.content.Intent import android.content.IntentFilter import android.media.AudioManager +import android.net.ConnectivityManager import android.os.IBinder import android.os.ResultReceiver import android.telephony.PhoneStateListener @@ -25,6 +26,7 @@ import org.thoughtcrime.securesms.util.CallNotificationBuilder.Companion.TYPE_IN import org.thoughtcrime.securesms.util.CallNotificationBuilder.Companion.TYPE_INCOMING_PRE_OFFER import org.thoughtcrime.securesms.util.CallNotificationBuilder.Companion.TYPE_INCOMING_RINGING import org.thoughtcrime.securesms.util.CallNotificationBuilder.Companion.TYPE_OUTGOING_RINGING +import org.thoughtcrime.securesms.util.ContextProvider import org.thoughtcrime.securesms.webrtc.* import org.thoughtcrime.securesms.webrtc.CallManager.CallState.* import org.thoughtcrime.securesms.webrtc.audio.OutgoingRinger @@ -263,7 +265,7 @@ class WebRtcCallService: Service(), CallManager.WebRtcListener { networkChangedReceiver = NetworkChangeReceiver { available -> networkChange(available) } - LocalBroadcastManager.getInstance(this).registerReceiver(networkChangedReceiver!!, IntentFilter("pathsBuilt")) + networkChangedReceiver!!.register(this) } private fun registerUncaughtExceptionHandler() { @@ -647,7 +649,7 @@ class WebRtcCallService: Service(), CallManager.WebRtcListener { unregisterReceiver(receiver) } networkChangedReceiver?.let { receiver -> - LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver) + receiver.unregister(this) } wantsToAnswerReceiver?.let { receiver -> LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver) @@ -660,7 +662,7 @@ class WebRtcCallService: Service(), CallManager.WebRtcListener { } fun networkChange(networkAvailable: Boolean) { - if (!callManager.isReestablishing && callManager.currentConnectionState in arrayOf(STATE_CONNECTED)) { + if (networkAvailable && !callManager.isReestablishing && callManager.currentConnectionState in arrayOf(STATE_CONNECTED)) { callManager.networkReestablished() } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/webrtc/CallManager.kt b/app/src/main/java/org/thoughtcrime/securesms/webrtc/CallManager.kt index 4bdf06ee42..cd33170a20 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/webrtc/CallManager.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/webrtc/CallManager.kt @@ -181,8 +181,6 @@ class CallManager(context: Context, audioManager: AudioManagerCompat, private va localRenderer = SurfaceViewRenderer(context) remoteRenderer = SurfaceViewRenderer(context) - localRenderer?.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FIT) - remoteRenderer?.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FIT) localRenderer?.init(base.eglBaseContext, null) remoteRenderer?.init(base.eglBaseContext, null) @@ -641,6 +639,7 @@ class CallManager(context: Context, audioManager: AudioManagerCompat, private va if (isReestablishing) return isReestablishing = true + Log.d("Loki", "start re-establish") val offer = connection.createOffer(MediaConstraints().apply { mandatory.add(MediaConstraints.KeyValuePair("IceRestart", "true")) diff --git a/app/src/main/java/org/thoughtcrime/securesms/webrtc/NetworkChangeReceiver.kt b/app/src/main/java/org/thoughtcrime/securesms/webrtc/NetworkChangeReceiver.kt index e2ac35d05c..80e5fd005a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/webrtc/NetworkChangeReceiver.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/webrtc/NetworkChangeReceiver.kt @@ -3,12 +3,49 @@ package org.thoughtcrime.securesms.webrtc import android.content.BroadcastReceiver import android.content.Context import android.content.Intent +import android.content.IntentFilter import android.net.ConnectivityManager +import android.net.Network +import android.os.Build +import android.util.SparseArray import org.session.libsignal.utilities.Log -class NetworkChangeReceiver(private val onNetworkChangedCallback: (Boolean)->Unit): BroadcastReceiver() { +class NetworkChangeReceiver(private val onNetworkChangedCallback: (Boolean)->Unit) { - override fun onReceive(context: Context, intent: Intent) { + private val networkList: MutableSet = mutableSetOf() + + val broadcastDelegate = object: BroadcastReceiver() { + override fun onReceive(context: Context, intent: Intent) { + receiveBroadcast(context, intent) + } + } + + private fun checkNetworks() { + + } + + val defaultObserver = object: ConnectivityManager.NetworkCallback() { + override fun onAvailable(network: Network) { + Log.d("Loki", "onAvailable: $network") + networkList += network + } + + override fun onLosing(network: Network, maxMsToLive: Int) { + Log.d("Loki", "onLosing: $network, maxMsToLive: $maxMsToLive") + } + + override fun onLost(network: Network) { + Log.d("Loki", "onLost: $network") + networkList -= network + onNetworkChangedCallback(networkList.isNotEmpty()) + } + + override fun onUnavailable() { + Log.d("Loki", "onUnavailable") + } + } + + fun receiveBroadcast(context: Context, intent: Intent) { Log.d("Loki", intent.toString()) onNetworkChangedCallback(context.isConnected()) } @@ -18,4 +55,23 @@ class NetworkChangeReceiver(private val onNetworkChangedCallback: (Boolean)->Uni return cm.activeNetworkInfo?.isConnected ?: false } + fun register(context: Context) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager + cm.registerDefaultNetworkCallback(defaultObserver) + } else { + val intentFilter = IntentFilter("android.net.conn.CONNECTIVITY_CHANGE") + context.registerReceiver(broadcastDelegate, intentFilter) + } + } + + fun unregister(context: Context) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager + cm.unregisterNetworkCallback(defaultObserver) + } else { + context.unregisterReceiver(broadcastDelegate) + } + } + } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_webrtc.xml b/app/src/main/res/layout/activity_webrtc.xml index 216787ecde..529b5e7311 100644 --- a/app/src/main/res/layout/activity_webrtc.xml +++ b/app/src/main/res/layout/activity_webrtc.xml @@ -166,35 +166,36 @@ app:layout_constraintHorizontal_bias="0.9" /> - + android:id="@+id/acceptCallButton"/> - + app:layout_constraintHorizontal_bias="0.25" + android:id="@+id/declineCallButton"/>