diff --git a/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetActivity.java b/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetActivity.java index d88f780ad..368816d45 100644 --- a/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetActivity.java +++ b/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetActivity.java @@ -73,7 +73,18 @@ public class JitsiMeetActivity extends FragmentActivity @Override public void onDestroy() { + // Here we are trying to handle the following corner case: an application using the SDK + // is using this Activity for displaying meetings, but there is another "main" Activity + // with other content. If this Activity is "swiped out" from the recent list we will get + // Activity#onDestroy() called without warning. At this point we can try to leave the + // current meeting, but when our view is detached from React the JS <-> Native bridge won't + // be operational so the external API won't be able to notify the native side that the + // conference terminated. Thus, try our best to clean up. leave(); + if (AudioModeModule.useConnectionService()) { + ConnectionService.abortConnections(); + } + JitsiMeetOngoingConferenceService.abort(this); super.onDestroy(); } @@ -198,6 +209,8 @@ public class JitsiMeetActivity extends FragmentActivity @Override public void onConferenceJoined(Map data) { Log.d(TAG, "Conference joined: " + data); + // Launch the service for the ongoing notification. + JitsiMeetOngoingConferenceService.launch(this); } @Override diff --git a/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetOngoingConferenceService.java b/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetOngoingConferenceService.java index f6ee5be92..01abff514 100644 --- a/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetOngoingConferenceService.java +++ b/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetOngoingConferenceService.java @@ -53,6 +53,11 @@ public class JitsiMeetOngoingConferenceService extends Service } } + static void abort(Context context) { + Intent intent = new Intent(context, JitsiMeetOngoingConferenceService.class); + context.stopService(intent); + } + @Override public void onCreate() { super.onCreate(); diff --git a/android/sdk/src/main/java/org/jitsi/meet/sdk/OngoingConferenceTracker.java b/android/sdk/src/main/java/org/jitsi/meet/sdk/OngoingConferenceTracker.java index bd0f8ece3..4e6f661ec 100644 --- a/android/sdk/src/main/java/org/jitsi/meet/sdk/OngoingConferenceTracker.java +++ b/android/sdk/src/main/java/org/jitsi/meet/sdk/OngoingConferenceTracker.java @@ -16,8 +16,6 @@ package org.jitsi.meet.sdk; -import android.app.Activity; - import com.facebook.react.bridge.ReadableMap; import java.util.Collection; @@ -67,13 +65,13 @@ class OngoingConferenceTracker { switch(name) { case CONFERENCE_WILL_JOIN: currentConference = url; - updateOnConferenceJoined(); + updateListeners(); break; case CONFERENCE_TERMINATED: if (url.equals(currentConference)) { currentConference = null; - updateOnConferenceTerminated(); + updateListeners(); } break; } @@ -87,20 +85,6 @@ class OngoingConferenceTracker { listeners.remove(listener); } - private void updateOnConferenceJoined() { - // Launch the service. - Activity currentActivity = ReactInstanceManagerHolder.getCurrentActivity(); - if (currentActivity != null) { - JitsiMeetOngoingConferenceService.launch(currentActivity); - } - - updateListeners(); - } - - private void updateOnConferenceTerminated() { - updateListeners(); - } - private void updateListeners() { for (OngoingConferenceListener listener : listeners) { listener.onCurrentConferenceChanged(currentConference);