package com.quickblox.q_municate.utils; import android.annotation.SuppressLint; import android.app.Activity; import android.app.Application; import android.os.Bundle; import android.util.Log; import com.quickblox.core.helper.Lo; import com.quickblox.chat.QBChatService; import com.quickblox.q_municate.ui.activities.base.BaseActivity; import com.quickblox.q_municate_core.models.AppSession; import com.quickblox.q_municate_core.qb.commands.chat.QBLoginChatCompositeCommand; import com.quickblox.q_municate_core.qb.commands.chat.QBLogoutAndDestroyChatCommand; public class ActivityLifecycleHandler implements Application.ActivityLifecycleCallbacks { private int numberOfActivitiesInForeground; private boolean chatDestroyed = false; @SuppressLint("LongLogTag") public void onActivityCreated(Activity activity, Bundle savedInstanceState) { Log.d("ActivityLifecycleHandler", "onActivityCreated " + activity.getClass().getSimpleName()); } @SuppressLint("LongLogTag") public void onActivityStarted(Activity activity) { Log.d("ActivityLifecycleHandler", "onActivityStarted " + activity.getClass().getSimpleName()); } @SuppressLint("LongLogTag") public void onActivityResumed(Activity activity) { Log.d("ActivityLifecycleHandler", "onActivityResumed " + activity.getClass().getSimpleName() + " count of activities = " + numberOfActivitiesInForeground); //Count only our app logeable activity boolean activityLogeable = isActivityLogeable(activity); chatDestroyed = chatDestroyed && !isLoggedIn(); if (numberOfActivitiesInForeground == 0 && chatDestroyed && activityLogeable) { boolean canLogin = chatDestroyed && AppSession.getSession().isSessionExist(); if (canLogin && ((BaseActivity) activity).isNetworkAvailable()) { QBLoginChatCompositeCommand.start(activity); } } if (activityLogeable) { ++numberOfActivitiesInForeground; } } public boolean isActivityLogeable(Activity activity) { return (activity instanceof Loggable); } public void onActivityPaused(Activity activity) { } public void onActivityStopped(Activity activity) { //Count only our app logeable activity if (activity instanceof Loggable) { --numberOfActivitiesInForeground; } Lo.g("onActivityStopped" + numberOfActivitiesInForeground); if (numberOfActivitiesInForeground == 0 && activity instanceof Loggable) { boolean isLogedIn = isLoggedIn(); if (!isLogedIn) { return; } chatDestroyed = ((Loggable) activity).isCanPerformLogoutInOnStop(); if (chatDestroyed) { QBLogoutAndDestroyChatCommand.start(activity, true); } } } private boolean isLoggedIn() { return QBChatService.getInstance().isLoggedIn(); } public void onActivitySaveInstanceState(Activity activity, Bundle outState) { } public void onActivityDestroyed(Activity activity) { } }