From aed03980af375cf307da85e8f8101621d60ad84b Mon Sep 17 00:00:00 2001 From: Mario Danic Date: Tue, 19 Jun 2018 22:39:43 +0200 Subject: [PATCH] Show notification if app is not in foreground Signed-off-by: Mario Danic --- app/build.gradle | 4 +- .../application/NextcloudTalkApplication.java | 18 ++++++++- .../AccountVerificationController.java | 2 +- .../talk/controllers/CallController.java | 2 +- .../talk/controllers/ChatController.java | 2 +- .../ServerSelectionController.java | 2 +- .../talk/controllers/SettingsController.java | 2 +- .../controllers/WebViewLoginController.java | 2 +- .../bottomsheet/EntryMenuController.java | 2 +- .../bottomsheet/OperationsMenuController.java | 2 +- .../nextcloud/talk/jobs/NotificationJob.java | 7 +++- .../ApplicationWideCurrentRoomHolder.java | 2 +- .../ApplicationWideMessageHolder.java | 4 +- .../ApplicationWideStateHolder.java | 38 +++++++++++++++++++ 14 files changed, 73 insertions(+), 16 deletions(-) rename app/src/main/java/com/nextcloud/talk/utils/{ => singletons}/ApplicationWideCurrentRoomHolder.java (97%) rename app/src/main/java/com/nextcloud/talk/utils/{ => singletons}/ApplicationWideMessageHolder.java (93%) create mode 100644 app/src/main/java/com/nextcloud/talk/utils/singletons/ApplicationWideStateHolder.java 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; + } +}