From 33a82891776bd31fc33475227972fc087e7d6922 Mon Sep 17 00:00:00 2001 From: ChronosX88 Date: Sat, 25 May 2019 12:19:21 +0400 Subject: [PATCH] Fixed minor bug with user presence system --- .../chronosx88/influence/XMPPConnection.java | 3 +++ .../influence/helpers/AppHelper.java | 9 ++++++++ .../influence/presenters/MainPresenter.kt | 23 +++++++++++++++++-- .../influence/views/MainActivity.java | 2 ++ 4 files changed, 35 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/io/github/chronosx88/influence/XMPPConnection.java b/app/src/main/java/io/github/chronosx88/influence/XMPPConnection.java index 0018d32..babdbbd 100644 --- a/app/src/main/java/io/github/chronosx88/influence/XMPPConnection.java +++ b/app/src/main/java/io/github/chronosx88/influence/XMPPConnection.java @@ -128,6 +128,9 @@ public class XMPPConnection implements ConnectionListener { } catch (InterruptedException e) { e.printStackTrace(); } + if(AppHelper.isIsMainActivityDestroyed()) { + sendUserPresence(new Presence(Presence.Type.unavailable)); + } } } diff --git a/app/src/main/java/io/github/chronosx88/influence/helpers/AppHelper.java b/app/src/main/java/io/github/chronosx88/influence/helpers/AppHelper.java index 0bc1a65..151876a 100644 --- a/app/src/main/java/io/github/chronosx88/influence/helpers/AppHelper.java +++ b/app/src/main/java/io/github/chronosx88/influence/helpers/AppHelper.java @@ -51,6 +51,7 @@ public class AppHelper extends MultiDexApplication { private static LoginCredentials currentLoginCredentials; private static Handler mainUIThreadHandler; private static ServiceConnection serviceConnection; + private static boolean isMainActivityDestroyed = true; public final static Map avatarsCache = new ConcurrentHashMap<>(); @Override @@ -140,4 +141,12 @@ public class AppHelper extends MultiDexApplication { public static ServiceConnection getServiceConnection() { return serviceConnection; } + + public static boolean isIsMainActivityDestroyed() { + return isMainActivityDestroyed; + } + + public static void setIsMainActivityDestroyed(boolean isMainActivityDestroyed) { + AppHelper.isMainActivityDestroyed = isMainActivityDestroyed; + } } \ No newline at end of file diff --git a/app/src/main/java/io/github/chronosx88/influence/presenters/MainPresenter.kt b/app/src/main/java/io/github/chronosx88/influence/presenters/MainPresenter.kt index 50ed7d5..be6a562 100644 --- a/app/src/main/java/io/github/chronosx88/influence/presenters/MainPresenter.kt +++ b/app/src/main/java/io/github/chronosx88/influence/presenters/MainPresenter.kt @@ -17,6 +17,7 @@ package io.github.chronosx88.influence.presenters import android.content.Intent +import android.util.Log import io.github.chronosx88.influence.R import io.github.chronosx88.influence.contracts.CoreContracts import io.github.chronosx88.influence.helpers.AppHelper @@ -27,6 +28,7 @@ import io.github.chronosx88.influence.models.appEvents.NewChatEvent import io.github.chronosx88.influence.views.LoginActivity import java9.util.concurrent.CompletableFuture import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.delay import kotlinx.coroutines.launch import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.Subscribe @@ -74,6 +76,17 @@ class MainPresenter(private val view: CoreContracts.IMainViewContract) : CoreCon override fun onStart() { EventBus.getDefault().register(this) + GlobalScope.launch { + var count = 0 + while(AppHelper.getXmppConnection() == null && count <= 10) { + delay(1000) + count++ + } + if(AppHelper.getXmppConnection() != null) { + AppHelper.getXmppConnection().sendUserPresence(Presence(Presence.Type.available)) + } + } + AppHelper.setIsMainActivityDestroyed(false) } override fun onStop() { @@ -82,10 +95,16 @@ class MainPresenter(private val view: CoreContracts.IMainViewContract) : CoreCon override fun onDestroy() { GlobalScope.launch { + var count = 0 + // Wait for connection will not be null + while(AppHelper.getXmppConnection() == null && count <= 10) { + delay(1000) + count++ + } if(AppHelper.getXmppConnection() != null) { - if(AppHelper.getXmppConnection().isConnectionAlive) - AppHelper.getXmppConnection().sendUserPresence(Presence(Presence.Type.unavailable)) + AppHelper.getXmppConnection().sendUserPresence(Presence(Presence.Type.unavailable)) } } + AppHelper.setIsMainActivityDestroyed(true) } } diff --git a/app/src/main/java/io/github/chronosx88/influence/views/MainActivity.java b/app/src/main/java/io/github/chronosx88/influence/views/MainActivity.java index 9dc93a5..a6e892b 100644 --- a/app/src/main/java/io/github/chronosx88/influence/views/MainActivity.java +++ b/app/src/main/java/io/github/chronosx88/influence/views/MainActivity.java @@ -38,6 +38,7 @@ import org.jetbrains.annotations.NotNull; import io.github.chronosx88.influence.R; import io.github.chronosx88.influence.contracts.CoreContracts; +import io.github.chronosx88.influence.helpers.AppHelper; import io.github.chronosx88.influence.presenters.MainPresenter; import io.github.chronosx88.influence.views.fragments.DialogListFragment; import io.github.chronosx88.influence.views.fragments.SettingsFragment; @@ -96,6 +97,7 @@ public class MainActivity extends AppCompatActivity implements CoreContracts.IMa progressDialog.setCancelable(false); progressDialog.setProgressStyle(android.R.style.Widget_ProgressBar_Small); presenter.initConnection(); + AppHelper.setIsMainActivityDestroyed(false); } @Override