From 3e38e98384f0bfb00690be1d39533d9a5ff6f69f Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Thu, 15 Feb 2018 18:00:01 +0100 Subject: [PATCH] This will ensure the onPause method of removed fragment is called before onResume of the new one --- src/android/org/linphone/activities/LinphoneActivity.java | 1 + src/android/org/linphone/chat/ChatListFragment.java | 2 +- src/android/org/linphone/chat/ChatRoomsAdapter.java | 3 +++ src/android/org/linphone/compatibility/ApiSixteenPlus.java | 5 +++++ .../org/linphone/compatibility/ApiTwentySixPlus.java | 5 +++++ src/android/org/linphone/compatibility/Compatibility.java | 7 +++++++ 6 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/android/org/linphone/activities/LinphoneActivity.java b/src/android/org/linphone/activities/LinphoneActivity.java index 23444835a..80421a9e7 100644 --- a/src/android/org/linphone/activities/LinphoneActivity.java +++ b/src/android/org/linphone/activities/LinphoneActivity.java @@ -486,6 +486,7 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick } } + Compatibility.setFragmentTransactionReorderingAllowed(transaction, false); transaction.replace(R.id.fragmentContainer, newFragment, newFragmentType.toString()); transaction.commitAllowingStateLoss(); fm.executePendingTransactions(); diff --git a/src/android/org/linphone/chat/ChatListFragment.java b/src/android/org/linphone/chat/ChatListFragment.java index 9f1f1716d..05c3c4bd7 100644 --- a/src/android/org/linphone/chat/ChatListFragment.java +++ b/src/android/org/linphone/chat/ChatListFragment.java @@ -141,7 +141,7 @@ public class ChatListFragment extends Fragment implements OnItemClickListener, C refreshChatRoomsList(); } - + @Override public void onPause() { Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); diff --git a/src/android/org/linphone/chat/ChatRoomsAdapter.java b/src/android/org/linphone/chat/ChatRoomsAdapter.java index b3cc22435..d24c89d89 100644 --- a/src/android/org/linphone/chat/ChatRoomsAdapter.java +++ b/src/android/org/linphone/chat/ChatRoomsAdapter.java @@ -110,6 +110,9 @@ public class ChatRoomsAdapter extends ListSelectionAdapter { } public void clear() { + for (ChatRoom room : mRooms) { + room.setListener(null); + } mRooms.clear(); } diff --git a/src/android/org/linphone/compatibility/ApiSixteenPlus.java b/src/android/org/linphone/compatibility/ApiSixteenPlus.java index 9c31506ef..7a9c518fb 100644 --- a/src/android/org/linphone/compatibility/ApiSixteenPlus.java +++ b/src/android/org/linphone/compatibility/ApiSixteenPlus.java @@ -3,6 +3,7 @@ package org.linphone.compatibility; import org.linphone.R; import android.annotation.TargetApi; +import android.app.FragmentTransaction; import android.app.Notification; import android.app.PendingIntent; import android.content.Context; @@ -142,4 +143,8 @@ public class ApiSixteenPlus { public static void startService(Context context, Intent intent) { context.startService(intent); } + + public static void setFragmentTransactionReorderingAllowed(FragmentTransaction transaction, boolean allowed) { + + } } diff --git a/src/android/org/linphone/compatibility/ApiTwentySixPlus.java b/src/android/org/linphone/compatibility/ApiTwentySixPlus.java index 4a8dd216d..0ed80b882 100644 --- a/src/android/org/linphone/compatibility/ApiTwentySixPlus.java +++ b/src/android/org/linphone/compatibility/ApiTwentySixPlus.java @@ -2,6 +2,7 @@ package org.linphone.compatibility; import android.annotation.TargetApi; +import android.app.FragmentTransaction; import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; @@ -180,4 +181,8 @@ public class ApiTwentySixPlus { public static void startService(Context context, Intent intent) { context.startForegroundService(intent); } + + public static void setFragmentTransactionReorderingAllowed(FragmentTransaction transaction, boolean allowed) { + transaction.setReorderingAllowed(allowed); + } } diff --git a/src/android/org/linphone/compatibility/Compatibility.java b/src/android/org/linphone/compatibility/Compatibility.java index 88d826d96..86927aa1c 100644 --- a/src/android/org/linphone/compatibility/Compatibility.java +++ b/src/android/org/linphone/compatibility/Compatibility.java @@ -20,6 +20,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. import org.linphone.mediastream.Version; import android.app.AlarmManager; +import android.app.FragmentTransaction; import android.app.Notification; import android.app.PendingIntent; import android.content.Context; @@ -163,4 +164,10 @@ public class Compatibility { ApiSixteenPlus.startService(context, intent); } } + + public static void setFragmentTransactionReorderingAllowed(FragmentTransaction transaction, boolean allowed) { + if (Version.sdkAboveOrEqual(Version.API26_O_80)) { + ApiTwentySixPlus.setFragmentTransactionReorderingAllowed(transaction, allowed); + } + } }