diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/Storage.kt b/app/src/main/java/org/thoughtcrime/securesms/database/Storage.kt index 3b5b424ad0..6422930682 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/Storage.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/Storage.kt @@ -4,6 +4,7 @@ import android.content.Context import android.net.Uri import okhttp3.HttpUrl import org.session.libsession.database.StorageProtocol +import org.session.libsession.messaging.MessagingModuleConfiguration import org.session.libsession.messaging.jobs.AttachmentUploadJob import org.session.libsession.messaging.jobs.Job import org.session.libsession.messaging.jobs.JobQueue @@ -301,6 +302,8 @@ class Storage(context: Context, helper: SQLCipherOpenHelper) : Database(context, } override fun getLastMessageServerId(room: String, server: String): Long? { + // return null if limit is set on open groups polling + if (TextSecurePreferences.isOpenGroupPollingLimit(context)) return null return DatabaseFactory.getLokiAPIDatabase(context).getLastMessageServerID(room, server) } @@ -325,6 +328,8 @@ class Storage(context: Context, helper: SQLCipherOpenHelper) : Database(context, } override fun getLastDeletionServerId(room: String, server: String): Long? { + // return null if limit is set on open groups polling + if (TextSecurePreferences.isOpenGroupPollingLimit(context)) return null return DatabaseFactory.getLokiAPIDatabase(context).getLastDeletionServerID(room, server) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/activities/HomeActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/activities/HomeActivity.kt index 1b54c5010f..3140b1aaaa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/loki/activities/HomeActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/loki/activities/HomeActivity.kt @@ -32,6 +32,7 @@ import org.session.libsession.messaging.jobs.JobQueue import org.session.libsession.messaging.mentions.MentionsManager import org.session.libsession.messaging.open_groups.OpenGroupAPI import org.session.libsession.messaging.sending_receiving.MessageSender +import org.session.libsession.messaging.sending_receiving.pollers.OpenGroupPollerV2 import org.session.libsession.utilities.* import org.session.libsignal.utilities.toHexString import org.session.libsignal.utilities.ThreadUtils @@ -66,6 +67,8 @@ class HomeActivity : PassphraseRequiredActionBarActivity(), // region Lifecycle override fun onCreate(savedInstanceState: Bundle?, isReady: Boolean) { super.onCreate(savedInstanceState, isReady) + // Check when Session was last opened + setPollingLimit(); // Double check that the long poller is up (applicationContext as ApplicationContext).startPollingIfNeeded() // Set content view @@ -194,6 +197,15 @@ class HomeActivity : PassphraseRequiredActionBarActivity(), super.onDestroy() EventBus.getDefault().unregister(this) } + + fun setPollingLimit() { + val lastTimeSessionOpened = TextSecurePreferences.getLastTimeSessionOpened(this) + val timeSinceLastTimeOpen = System.currentTimeMillis() - lastTimeSessionOpened + + // activate polling limit on open groups if the app hasn't been opened for more than the duration set in MAX_INACTIVITY_PERIOD + TextSecurePreferences.setOpenGroupPollingLimit(this, timeSinceLastTimeOpen > OpenGroupPollerV2.maxInactivityPeriod) + TextSecurePreferences.setLastTimeSessionOpened(this) + } // endregion // region Updating diff --git a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/pollers/OpenGroupPollerV2.kt b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/pollers/OpenGroupPollerV2.kt index 320c3afd97..5df6f3e3d0 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/pollers/OpenGroupPollerV2.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/pollers/OpenGroupPollerV2.kt @@ -22,6 +22,7 @@ class OpenGroupPollerV2(private val server: String, private val executorService: companion object { private val pollInterval: Long = 4 * 1000 + const val maxInactivityPeriod = 14 * 24 * 60 * 60 * 1000 } fun startIfNeeded() { diff --git a/libsession/src/main/java/org/session/libsession/utilities/TextSecurePreferences.kt b/libsession/src/main/java/org/session/libsession/utilities/TextSecurePreferences.kt index 37f2bacd0c..c835816659 100644 --- a/libsession/src/main/java/org/session/libsession/utilities/TextSecurePreferences.kt +++ b/libsession/src/main/java/org/session/libsession/utilities/TextSecurePreferences.kt @@ -99,6 +99,11 @@ object TextSecurePreferences { private const val GIF_GRID_LAYOUT = "pref_gif_grid_layout" + // region Limit open group polling + + private const val LAST_TIME_SESSION_OPENED = "pref_last_time_session_open" + private const val OPEN_GROUP_POLLING_LIMIT = "pref_Open_group_polling_limit" + // region FCM const val IS_USING_FCM = "pref_is_using_fcm" private const val FCM_TOKEN = "pref_fcm_token" @@ -771,5 +776,22 @@ object TextSecurePreferences { fun setHasSeenFileServerInstabilityNotification(context: Context) { setBooleanPreference(context, "has_seen_file_server_instability_notification", true) } + + fun getLastTimeSessionOpened(context: Context): Long { + return getLongPreference(context!!, LAST_TIME_SESSION_OPENED, 0) + } + + fun setLastTimeSessionOpened(context: Context) { + setLongPreference(context, LAST_TIME_SESSION_OPENED, System.currentTimeMillis()) + } + + fun isOpenGroupPollingLimit(context: Context): Boolean { + return getBooleanPreference(context, OPEN_GROUP_POLLING_LIMIT, false) + } + + fun setOpenGroupPollingLimit(context: Context, limit: Boolean) { + setBooleanPreference(context, OPEN_GROUP_POLLING_LIMIT, limit) + } + // endregion } \ No newline at end of file