diff --git a/ring-android/app/src/main/java/cx/ring/fragments/CallFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/CallFragment.java index 7e98c6f0f08bafcb86aeb8782e9b8861ff9cd147..60b3390bd93edfc21583b7c14706b3e2186c4da0 100644 --- a/ring-android/app/src/main/java/cx/ring/fragments/CallFragment.java +++ b/ring-android/app/src/main/java/cx/ring/fragments/CallFragment.java @@ -25,6 +25,7 @@ import android.app.Activity; import android.app.PendingIntent; import android.app.PictureInPictureParams; import android.app.RemoteAction; +import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; @@ -120,6 +121,8 @@ public class CallFragment extends BaseSupportFragment<CallPresenter> implements private int mPreviewWidth = 720, mPreviewHeight = 1280; private int mPreviewSurfaceWidth = 0, mPreviewSurfaceHeight = 0; + private boolean mBackstackLost = false; + @Inject DeviceRuntimeService mDeviceRuntimeService; @@ -247,8 +250,7 @@ public class CallFragment extends BaseSupportFragment<CallPresenter> implements displayVideoSurface(true, !presenter.isPipMode()); restartVideo = false; restartPreview = false; - } - else if (restartVideo) { + } else if (restartVideo) { displayVideoSurface(true, false); restartVideo = false; } @@ -444,10 +446,12 @@ public class CallFragment extends BaseSupportFragment<CallPresenter> implements AppCompatActivity activity = (AppCompatActivity) getActivity(); ActionBar actionBar = activity == null ? null : activity.getSupportActionBar(); if (actionBar != null) { - if (isInPictureInPictureMode) + if (isInPictureInPictureMode) { actionBar.hide(); - else + } else { + mBackstackLost = true; actionBar.show(); + } } presenter.pipModeChanged(isInPictureInPictureMode); } @@ -708,7 +712,7 @@ public class CallFragment extends BaseSupportFragment<CallPresenter> implements if (!audioOnly) { boolean videoGranted = mDeviceRuntimeService.hasVideoPermission(); - if ((!audioGranted || !videoGranted) && android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if ((!audioGranted || !videoGranted) && android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { ArrayList<String> perms = new ArrayList<>(); if (!videoGranted) { perms.add(Manifest.permission.CAMERA); @@ -753,10 +757,19 @@ public class CallFragment extends BaseSupportFragment<CallPresenter> implements @Override public void finish() { Activity activity = getActivity(); - if (activity != null) - activity.finish(); + if (activity != null) { + if (mBackstackLost) { + activity.finishAndRemoveTask(); + startActivity( + Intent.makeMainActivity( + new ComponentName(activity, HomeActivity.class)).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); + } else { + activity.finish(); + } + } } + public void speakerClicked() { presenter.speakerClick(binding.callSpeakerBtn.isChecked()); } diff --git a/ring-android/app/src/main/java/cx/ring/tv/call/TVCallFragment.java b/ring-android/app/src/main/java/cx/ring/tv/call/TVCallFragment.java index da27b6b5640a2fe0982549d8edfd3bf5a02e1763..53cb91c5294a52789174bde72b5791ba454dc650 100644 --- a/ring-android/app/src/main/java/cx/ring/tv/call/TVCallFragment.java +++ b/ring-android/app/src/main/java/cx/ring/tv/call/TVCallFragment.java @@ -22,7 +22,9 @@ package cx.ring.tv.call; import android.Manifest; import android.app.Activity; +import android.content.ComponentName; import android.content.Context; +import android.content.Intent; import android.content.pm.PackageManager; import android.content.res.Configuration; import android.graphics.Matrix; @@ -67,6 +69,7 @@ import cx.ring.model.CallContact; import cx.ring.model.SipCall; import cx.ring.mvp.BaseFragment; import cx.ring.services.DeviceRuntimeService; +import cx.ring.tv.main.HomeActivity; import cx.ring.views.AvatarDrawable; import io.reactivex.disposables.CompositeDisposable; @@ -95,6 +98,8 @@ public class TVCallFragment extends BaseFragment<CallPresenter> implements CallV private int mPreviewWidth = 720, mPreviewHeight = 1280; private int mPreviewWidthRot = 720, mPreviewHeightRot = 1280; + private boolean mBackstackLost = false; + @Inject DeviceRuntimeService mDeviceRuntimeService; @@ -253,6 +258,9 @@ public class TVCallFragment extends BaseFragment<CallPresenter> implements CallV @Override public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode, Configuration newConfig) { + if(!isInPictureInPictureMode) { + mBackstackLost = true; + } presenter.pipModeChanged(isInPictureInPictureMode); } @@ -537,7 +545,17 @@ public class TVCallFragment extends BaseFragment<CallPresenter> implements CallV @Override public void finish() { - getActivity().finish(); + Activity activity = getActivity(); + if (activity != null) { + if (mBackstackLost) { + activity.finishAndRemoveTask(); + startActivity( + Intent.makeMainActivity( + new ComponentName(activity, HomeActivity.class)).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); + } else { + activity.finish(); + } + } } @Override