diff --git a/app/build.gradle b/app/build.gradle
index 4a3640387..1fa10ce8d 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -79,8 +79,8 @@ dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "com.android.support:appcompat-v7:${supportLibraryVersion}"
implementation "com.android.support:design:${supportLibraryVersion}"
- implementation 'com.android.support.constraint:constraint-layout:1.1.1'
-
+ implementation 'com.android.support.constraint:constraint-layout:1.1.2'
+ implementation "android.arch.lifecycle:extensions:1.1.1"
implementation 'com.android.support:multidex:1.0.3'
diff --git a/app/src/main/java/com/nextcloud/talk/application/NextcloudTalkApplication.java b/app/src/main/java/com/nextcloud/talk/application/NextcloudTalkApplication.java
index 41373b203..aa9124ee6 100644
--- a/app/src/main/java/com/nextcloud/talk/application/NextcloudTalkApplication.java
+++ b/app/src/main/java/com/nextcloud/talk/application/NextcloudTalkApplication.java
@@ -20,6 +20,10 @@
*/
package com.nextcloud.talk.application;
+import android.arch.lifecycle.Lifecycle;
+import android.arch.lifecycle.LifecycleObserver;
+import android.arch.lifecycle.OnLifecycleEvent;
+import android.arch.lifecycle.ProcessLifecycleOwner;
import android.content.Context;
import android.os.Build;
import android.support.multidex.MultiDex;
@@ -41,6 +45,7 @@ import com.nextcloud.talk.utils.ClosedInterfaceImpl;
import com.nextcloud.talk.utils.DeviceUtils;
import com.nextcloud.talk.utils.DisplayUtils;
import com.nextcloud.talk.utils.database.user.UserModule;
+import com.nextcloud.talk.utils.singletons.ApplicationWideStateHolder;
import com.nextcloud.talk.webrtc.MagicWebRTCUtils;
import com.squareup.leakcanary.LeakCanary;
import com.squareup.leakcanary.RefWatcher;
@@ -69,7 +74,7 @@ import autodagger.AutoInjector;
@Singleton
@AutoInjector(NextcloudTalkApplication.class)
-public class NextcloudTalkApplication extends MultiDexApplication {
+public class NextcloudTalkApplication extends MultiDexApplication implements LifecycleObserver {
private static final String TAG = NextcloudTalkApplication.class.getSimpleName();
//region Public variables
@@ -112,6 +117,7 @@ public class NextcloudTalkApplication extends MultiDexApplication {
@Override
public void onCreate() {
super.onCreate();
+ ProcessLifecycleOwner.get().getLifecycle().addObserver(this);
JobManager.create(this).addJobCreator(new MagicJobCreator());
@@ -188,4 +194,14 @@ public class NextcloudTalkApplication extends MultiDexApplication {
MultiDex.install(this);
}
//endregion
+
+ @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
+ private void onAppBackgrounded() {
+ ApplicationWideStateHolder.getInstance().setInForeground(false);
+ }
+
+ @OnLifecycleEvent(Lifecycle.Event.ON_START)
+ private void onAppForegrounded() {
+ ApplicationWideStateHolder.getInstance().setInForeground(true);
+ }
}
diff --git a/app/src/main/java/com/nextcloud/talk/controllers/AccountVerificationController.java b/app/src/main/java/com/nextcloud/talk/controllers/AccountVerificationController.java
index 2e7610250..7624fa76f 100644
--- a/app/src/main/java/com/nextcloud/talk/controllers/AccountVerificationController.java
+++ b/app/src/main/java/com/nextcloud/talk/controllers/AccountVerificationController.java
@@ -46,7 +46,7 @@ import com.nextcloud.talk.models.json.generic.Status;
import com.nextcloud.talk.models.json.rooms.RoomsOverall;
import com.nextcloud.talk.models.json.userprofile.UserProfileOverall;
import com.nextcloud.talk.utils.ApiUtils;
-import com.nextcloud.talk.utils.ApplicationWideMessageHolder;
+import com.nextcloud.talk.utils.singletons.ApplicationWideMessageHolder;
import com.nextcloud.talk.utils.bundle.BundleKeys;
import com.nextcloud.talk.utils.database.user.UserUtils;
import com.nextcloud.talk.utils.preferences.AppPreferences;
diff --git a/app/src/main/java/com/nextcloud/talk/controllers/CallController.java b/app/src/main/java/com/nextcloud/talk/controllers/CallController.java
index e0fd6c13a..dd9ee15fe 100644
--- a/app/src/main/java/com/nextcloud/talk/controllers/CallController.java
+++ b/app/src/main/java/com/nextcloud/talk/controllers/CallController.java
@@ -70,7 +70,7 @@ import com.nextcloud.talk.models.json.signaling.SignalingOverall;
import com.nextcloud.talk.models.json.signaling.settings.IceServer;
import com.nextcloud.talk.models.json.signaling.settings.SignalingSettingsOverall;
import com.nextcloud.talk.utils.ApiUtils;
-import com.nextcloud.talk.utils.ApplicationWideCurrentRoomHolder;
+import com.nextcloud.talk.utils.singletons.ApplicationWideCurrentRoomHolder;
import com.nextcloud.talk.utils.animations.PulseAnimation;
import com.nextcloud.talk.utils.bundle.BundleKeys;
import com.nextcloud.talk.utils.database.user.UserUtils;
diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.java b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.java
index de81ab72f..608270331 100644
--- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.java
+++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.java
@@ -75,7 +75,7 @@ import com.nextcloud.talk.models.json.rooms.RoomOverall;
import com.nextcloud.talk.models.json.rooms.RoomsOverall;
import com.nextcloud.talk.presenters.MentionAutocompletePresenter;
import com.nextcloud.talk.utils.ApiUtils;
-import com.nextcloud.talk.utils.ApplicationWideCurrentRoomHolder;
+import com.nextcloud.talk.utils.singletons.ApplicationWideCurrentRoomHolder;
import com.nextcloud.talk.utils.KeyboardUtils;
import com.nextcloud.talk.utils.bundle.BundleKeys;
import com.nextcloud.talk.utils.database.user.UserUtils;
diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ServerSelectionController.java b/app/src/main/java/com/nextcloud/talk/controllers/ServerSelectionController.java
index 4b0621fad..ba6f1601e 100644
--- a/app/src/main/java/com/nextcloud/talk/controllers/ServerSelectionController.java
+++ b/app/src/main/java/com/nextcloud/talk/controllers/ServerSelectionController.java
@@ -45,7 +45,7 @@ import com.nextcloud.talk.application.NextcloudTalkApplication;
import com.nextcloud.talk.controllers.base.BaseController;
import com.nextcloud.talk.utils.AccountUtils;
import com.nextcloud.talk.utils.ApiUtils;
-import com.nextcloud.talk.utils.ApplicationWideMessageHolder;
+import com.nextcloud.talk.utils.singletons.ApplicationWideMessageHolder;
import com.nextcloud.talk.utils.bundle.BundleKeys;
import com.nextcloud.talk.utils.database.user.UserUtils;
import com.nextcloud.talk.utils.preferences.AppPreferences;
diff --git a/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.java b/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.java
index faf7e9bb5..584193243 100644
--- a/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.java
+++ b/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.java
@@ -54,7 +54,7 @@ import com.nextcloud.talk.jobs.AccountRemovalJob;
import com.nextcloud.talk.models.RingtoneSettings;
import com.nextcloud.talk.models.database.UserEntity;
import com.nextcloud.talk.utils.ApiUtils;
-import com.nextcloud.talk.utils.ApplicationWideMessageHolder;
+import com.nextcloud.talk.utils.singletons.ApplicationWideMessageHolder;
import com.nextcloud.talk.utils.bundle.BundleKeys;
import com.nextcloud.talk.utils.database.user.UserUtils;
import com.nextcloud.talk.utils.glide.GlideApp;
diff --git a/app/src/main/java/com/nextcloud/talk/controllers/WebViewLoginController.java b/app/src/main/java/com/nextcloud/talk/controllers/WebViewLoginController.java
index d6d18f1dc..e2d4f3bd8 100644
--- a/app/src/main/java/com/nextcloud/talk/controllers/WebViewLoginController.java
+++ b/app/src/main/java/com/nextcloud/talk/controllers/WebViewLoginController.java
@@ -49,7 +49,7 @@ import com.nextcloud.talk.controllers.base.BaseController;
import com.nextcloud.talk.events.CertificateEvent;
import com.nextcloud.talk.models.LoginData;
import com.nextcloud.talk.models.database.UserEntity;
-import com.nextcloud.talk.utils.ApplicationWideMessageHolder;
+import com.nextcloud.talk.utils.singletons.ApplicationWideMessageHolder;
import com.nextcloud.talk.utils.bundle.BundleKeys;
import com.nextcloud.talk.utils.database.user.UserUtils;
import com.nextcloud.talk.utils.preferences.AppPreferences;
diff --git a/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/EntryMenuController.java b/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/EntryMenuController.java
index 8258c2ff9..b90b8e43a 100644
--- a/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/EntryMenuController.java
+++ b/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/EntryMenuController.java
@@ -41,7 +41,7 @@ import com.nextcloud.talk.application.NextcloudTalkApplication;
import com.nextcloud.talk.controllers.base.BaseController;
import com.nextcloud.talk.events.BottomSheetLockEvent;
import com.nextcloud.talk.models.json.rooms.Room;
-import com.nextcloud.talk.utils.ApplicationWideMessageHolder;
+import com.nextcloud.talk.utils.singletons.ApplicationWideMessageHolder;
import com.nextcloud.talk.utils.ShareUtils;
import com.nextcloud.talk.utils.bundle.BundleKeys;
import com.nextcloud.talk.utils.database.user.UserUtils;
diff --git a/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.java b/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.java
index 6a5d539d6..2a0bcecba 100644
--- a/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.java
+++ b/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.java
@@ -56,7 +56,7 @@ import com.nextcloud.talk.models.json.participants.AddParticipantOverall;
import com.nextcloud.talk.models.json.rooms.Room;
import com.nextcloud.talk.models.json.rooms.RoomOverall;
import com.nextcloud.talk.utils.ApiUtils;
-import com.nextcloud.talk.utils.ApplicationWideMessageHolder;
+import com.nextcloud.talk.utils.singletons.ApplicationWideMessageHolder;
import com.nextcloud.talk.utils.DisplayUtils;
import com.nextcloud.talk.utils.bundle.BundleKeys;
import com.nextcloud.talk.utils.database.user.UserUtils;
diff --git a/app/src/main/java/com/nextcloud/talk/jobs/NotificationJob.java b/app/src/main/java/com/nextcloud/talk/jobs/NotificationJob.java
index 34186ab66..6bbfc77c9 100644
--- a/app/src/main/java/com/nextcloud/talk/jobs/NotificationJob.java
+++ b/app/src/main/java/com/nextcloud/talk/jobs/NotificationJob.java
@@ -46,12 +46,13 @@ import com.nextcloud.talk.application.NextcloudTalkApplication;
import com.nextcloud.talk.models.RingtoneSettings;
import com.nextcloud.talk.models.SignatureVerification;
import com.nextcloud.talk.models.json.push.DecryptedPushMessage;
-import com.nextcloud.talk.utils.ApplicationWideCurrentRoomHolder;
+import com.nextcloud.talk.utils.singletons.ApplicationWideCurrentRoomHolder;
import com.nextcloud.talk.utils.NotificationUtils;
import com.nextcloud.talk.utils.PushUtils;
import com.nextcloud.talk.utils.bundle.BundleKeys;
import com.nextcloud.talk.utils.database.user.UserUtils;
import com.nextcloud.talk.utils.preferences.AppPreferences;
+import com.nextcloud.talk.utils.singletons.ApplicationWideStateHolder;
import org.parceler.Parcels;
@@ -117,7 +118,9 @@ public class NotificationJob extends Job {
boolean shouldShowNotification = decryptedPushMessage.getApp().equals("spreed") &&
!decryptedPushMessage.getType().equals("room") &&
- (!isInTheSameRoomAsNotification || decryptedPushMessage.getType().equals("call"));
+ (!isInTheSameRoomAsNotification ||
+ !ApplicationWideStateHolder.getInstance().isInForeground() ||
+ decryptedPushMessage.getType().equals("call"));
if (shouldShowNotification) {
int smallIcon = 0;
diff --git a/app/src/main/java/com/nextcloud/talk/utils/ApplicationWideCurrentRoomHolder.java b/app/src/main/java/com/nextcloud/talk/utils/singletons/ApplicationWideCurrentRoomHolder.java
similarity index 97%
rename from app/src/main/java/com/nextcloud/talk/utils/ApplicationWideCurrentRoomHolder.java
rename to app/src/main/java/com/nextcloud/talk/utils/singletons/ApplicationWideCurrentRoomHolder.java
index e3cd42689..76ed34595 100644
--- a/app/src/main/java/com/nextcloud/talk/utils/ApplicationWideCurrentRoomHolder.java
+++ b/app/src/main/java/com/nextcloud/talk/utils/singletons/ApplicationWideCurrentRoomHolder.java
@@ -18,7 +18,7 @@
* along with this program. If not, see .
*/
-package com.nextcloud.talk.utils;
+package com.nextcloud.talk.utils.singletons;
import com.nextcloud.talk.models.database.UserEntity;
diff --git a/app/src/main/java/com/nextcloud/talk/utils/ApplicationWideMessageHolder.java b/app/src/main/java/com/nextcloud/talk/utils/singletons/ApplicationWideMessageHolder.java
similarity index 93%
rename from app/src/main/java/com/nextcloud/talk/utils/ApplicationWideMessageHolder.java
rename to app/src/main/java/com/nextcloud/talk/utils/singletons/ApplicationWideMessageHolder.java
index da5122dc7..fedbbd80e 100644
--- a/app/src/main/java/com/nextcloud/talk/utils/ApplicationWideMessageHolder.java
+++ b/app/src/main/java/com/nextcloud/talk/utils/singletons/ApplicationWideMessageHolder.java
@@ -2,7 +2,7 @@
* Nextcloud Talk application
*
* @author Mario Danic
- * Copyright (C) 2017 Mario Danic
+ * Copyright (C) 2017-2018 Mario Danic
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -18,7 +18,7 @@
* along with this program. If not, see .
*/
-package com.nextcloud.talk.utils;
+package com.nextcloud.talk.utils.singletons;
import android.support.annotation.Nullable;
diff --git a/app/src/main/java/com/nextcloud/talk/utils/singletons/ApplicationWideStateHolder.java b/app/src/main/java/com/nextcloud/talk/utils/singletons/ApplicationWideStateHolder.java
new file mode 100644
index 000000000..aaf4e5dd5
--- /dev/null
+++ b/app/src/main/java/com/nextcloud/talk/utils/singletons/ApplicationWideStateHolder.java
@@ -0,0 +1,38 @@
+/*
+ * Nextcloud Talk application
+ *
+ * @author Mario Danic
+ * Copyright (C) 2017-2018 Mario Danic
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+package com.nextcloud.talk.utils.singletons;
+
+public class ApplicationWideStateHolder {
+ private boolean isInForeground;
+ private static final ApplicationWideStateHolder holder = new ApplicationWideStateHolder();
+
+ public static ApplicationWideStateHolder getInstance() {
+ return holder;
+ }
+
+ public boolean isInForeground() {
+ return isInForeground;
+ }
+
+ public void setInForeground(boolean inForeground) {
+ isInForeground = inForeground;
+ }
+}