allow pip during connecting

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/ui/RtpSessionActivity.java | 17 ++
src/main/res/layout/activity_rtp_session.xml                    | 12 +
2 files changed, 27 insertions(+), 2 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/ui/RtpSessionActivity.java 🔗

@@ -299,7 +299,11 @@ public class RtpSessionActivity extends XmppActivity implements XmppConnectionSe
     private boolean shouldBePictureInPicture() {
         try {
             final JingleRtpConnection rtpConnection = requireRtpConnection();
-            return rtpConnection.getMedia().contains(Media.VIDEO) && rtpConnection.getEndUserState() == RtpEndUserState.CONNECTED;
+            return rtpConnection.getMedia().contains(Media.VIDEO) && Arrays.asList(
+                    RtpEndUserState.ACCEPTING_CALL,
+                    RtpEndUserState.CONNECTING,
+                    RtpEndUserState.CONNECTED
+            ).contains(rtpConnection.getEndUserState());
         } catch (IllegalStateException e) {
             return false;
         }
@@ -546,8 +550,10 @@ public class RtpSessionActivity extends XmppActivity implements XmppConnectionSe
                 binding.pipPlaceholder.setVisibility(View.VISIBLE);
                 if (state == RtpEndUserState.APPLICATION_ERROR || state == RtpEndUserState.CONNECTIVITY_ERROR) {
                     binding.pipWarning.setVisibility(View.VISIBLE);
+                    binding.pipWaiting.setVisibility(View.GONE);
                 } else {
                     binding.pipWarning.setVisibility(View.GONE);
+                    binding.pipWaiting.setVisibility(View.GONE);
                 }
             } else {
                 binding.appBarLayout.setVisibility(View.VISIBLE);
@@ -556,6 +562,15 @@ public class RtpSessionActivity extends XmppActivity implements XmppConnectionSe
             getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
             return;
         }
+        if (isPictureInPicture() && (state == RtpEndUserState.CONNECTING || state == RtpEndUserState.ACCEPTING_CALL)) {
+            binding.localVideo.setVisibility(View.GONE);
+            binding.remoteVideo.setVisibility(View.GONE);
+            binding.appBarLayout.setVisibility(View.GONE);
+            binding.pipPlaceholder.setVisibility(View.VISIBLE);
+            binding.pipWarning.setVisibility(View.GONE);
+            binding.pipWaiting.setVisibility(View.VISIBLE);
+            return;
+        }
         final Optional<VideoTrack> localVideoTrack = requireRtpConnection().geLocalVideoTrack();
         if (localVideoTrack.isPresent() && !isPictureInPicture()) {
             ensureSurfaceViewRendererIsSetup(binding.localVideo);

src/main/res/layout/activity_rtp_session.xml 🔗

@@ -17,11 +17,21 @@
             android:orientation="horizontal"
             android:visibility="gone">
 
+            <ProgressBar
+                android:id="@+id/pip_waiting"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:indeterminate="true"
+                android:indeterminateOnly="true"
+                android:indeterminateTint="@color/white"
+                android:visibility="gone" />
+
             <ImageView
                 android:id="@+id/pip_warning"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:src="@drawable/ic_warning_white_48dp" />
+                android:src="@drawable/ic_warning_white_48dp"
+                android:visibility="gone" />
         </LinearLayout>
 
         <android.support.design.widget.AppBarLayout