From baef77c7f99ccc4d74e569974bb3bd179ac3c825 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Fri, 20 Nov 2020 14:58:52 +0100 Subject: [PATCH] Improve notification handling --- Habitica/build.gradle | 4 +- Habitica/res/layout/activity_intro.xml | 2 +- Habitica/res/layout/activity_prefs.xml | 12 +++++- .../helpers/NotificationOpenHandler.kt | 4 -- .../habitica/helpers/NotificationsManager.kt | 42 +++++++++---------- .../HabiticaLocalNotification.kt | 1 + .../habitica/ui/activities/MainActivity.kt | 6 +-- .../habitica/ui/activities/PrefsActivity.kt | 8 ++++ .../social/GuildsOverviewFragment.kt | 3 +- .../challenges/ChallengeDetailFragment.kt | 3 +- build.gradle | 2 +- 11 files changed, 52 insertions(+), 35 deletions(-) diff --git a/Habitica/build.gradle b/Habitica/build.gradle index 4bcbedfea..57106fc31 100644 --- a/Habitica/build.gradle +++ b/Habitica/build.gradle @@ -16,7 +16,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:4.1.0' + classpath 'com.android.tools.build:gradle:4.1.1' classpath('com.noveogroup.android:check:1.2.5') { exclude module: 'checkstyle' exclude module: 'pmd-java' @@ -150,7 +150,7 @@ android { buildConfigField "String", "TESTING_LEVEL", "\"production\"" resConfigs "en", "bg", "de", "en-rGB", "es", "fr", "hr-rHR", "in", "it", "iw", "ja", "ko", "lt", "nl", "pl", "pt-rBR", "pt-rPT", "ru", "tr", "zh", "zh-rTW" - versionCode 2644 + versionCode 2647 versionName "3.1" } diff --git a/Habitica/res/layout/activity_intro.xml b/Habitica/res/layout/activity_intro.xml index f11fe1000..f5b3f090a 100644 --- a/Habitica/res/layout/activity_intro.xml +++ b/Habitica/res/layout/activity_intro.xml @@ -27,7 +27,7 @@ android:layout_alignParentEnd="true" android:layout_marginEnd="6dp" android:layout_alignParentTop="true" - android:layout_marginTop="6dp" + android:layout_marginTop="30dp" android:textColor="@android:color/white" android:background="@color/transparent" /> diff --git a/Habitica/res/layout/activity_prefs.xml b/Habitica/res/layout/activity_prefs.xml index 8667bdae2..36641ca4f 100644 --- a/Habitica/res/layout/activity_prefs.xml +++ b/Habitica/res/layout/activity_prefs.xml @@ -22,13 +22,23 @@ app:popupTheme="@style/ThemeOverlay.AppCompat.Dark"/> + - + + \ No newline at end of file diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/NotificationOpenHandler.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/NotificationOpenHandler.kt index 9b8c909df..e7c2fe110 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/NotificationOpenHandler.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/NotificationOpenHandler.kt @@ -70,10 +70,6 @@ class NotificationOpenHandler { MainNavigationController.navigate(R.id.prefsActivity) } - private fun displayWonChallengeNotificaiton(notification: Notification) { - EventBus.getDefault().post(ShowWonChallengeDialog(notification.id, notification.data as? ChallengeWonData)) - } - private fun handleChatMessage(type: String?, groupID: String?) { when (type) { "party" -> MainNavigationController.navigate(R.id.partyFragment) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/NotificationsManager.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/NotificationsManager.kt index a5da054c7..691fe7aa8 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/NotificationsManager.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/NotificationsManager.kt @@ -73,27 +73,27 @@ class NotificationsManager (private val context: Context) { Notification.Type.ACHIEVEMENT_INVITED_FRIEND.type -> displayAchievementNotification(it) Notification.Type.WON_CHALLENGE.type -> displayWonChallengeNotificaiton(it) - Notification.Type.ACHIEVEMENT_ALL_YOUR_BASE.type -> displayWonChallengeNotificaiton(it) - Notification.Type.ACHIEVEMENT_BACK_TO_BASICS.type -> displayWonChallengeNotificaiton(it) - Notification.Type.ACHIEVEMENT_JUST_ADD_WATER.type -> displayWonChallengeNotificaiton(it) - Notification.Type.ACHIEVEMENT_LOST_MASTERCLASSER.type -> displayWonChallengeNotificaiton(it) - Notification.Type.ACHIEVEMENT_MIND_OVER_MATTER.type -> displayWonChallengeNotificaiton(it) - Notification.Type.ACHIEVEMENT_DUST_DEVIL.type -> displayWonChallengeNotificaiton(it) - Notification.Type.ACHIEVEMENT_ARID_AUTHORITY.type -> displayWonChallengeNotificaiton(it) - Notification.Type.ACHIEVEMENT_MONSTER_MAGUS.type -> displayWonChallengeNotificaiton(it) - Notification.Type.ACHIEVEMENT_UNDEAD_UNDERTAKER.type -> displayWonChallengeNotificaiton(it) - Notification.Type.ACHIEVEMENT_PRIMED_FOR_PAINTING.type -> displayWonChallengeNotificaiton(it) - Notification.Type.ACHIEVEMENT_PEARLY_PRO.type -> displayWonChallengeNotificaiton(it) - Notification.Type.ACHIEVEMENT_TICKLED_PINK.type -> displayWonChallengeNotificaiton(it) - Notification.Type.ACHIEVEMENT_ROSY_OUTLOOK.type -> displayWonChallengeNotificaiton(it) - Notification.Type.ACHIEVEMENT_BUG_BONANZA.type -> displayWonChallengeNotificaiton(it) - Notification.Type.ACHIEVEMENT_BARE_NECESSITIES.type -> displayWonChallengeNotificaiton(it) - Notification.Type.ACHIEVEMENT_FRESHWATER_FRIENDS.type -> displayWonChallengeNotificaiton(it) - Notification.Type.ACHIEVEMENT_GOOD_AS_GOLD.type -> displayWonChallengeNotificaiton(it) - Notification.Type.ACHIEVEMENT_ALL_THAT_GLITTERS.type -> displayWonChallengeNotificaiton(it) - Notification.Type.ACHIEVEMENT_GOOD_AS_GOLD.type -> displayWonChallengeNotificaiton(it) - Notification.Type.ACHIEVEMENT_BONE_COLLECTOR.type -> displayWonChallengeNotificaiton(it) - Notification.Type.ACHIEVEMENT_SKELETON_CREW.type -> displayWonChallengeNotificaiton(it) + Notification.Type.ACHIEVEMENT_ALL_YOUR_BASE.type -> displayAchievementNotification(it) + Notification.Type.ACHIEVEMENT_BACK_TO_BASICS.type -> displayAchievementNotification(it) + Notification.Type.ACHIEVEMENT_JUST_ADD_WATER.type -> displayAchievementNotification(it) + Notification.Type.ACHIEVEMENT_LOST_MASTERCLASSER.type -> displayAchievementNotification(it) + Notification.Type.ACHIEVEMENT_MIND_OVER_MATTER.type -> displayAchievementNotification(it) + Notification.Type.ACHIEVEMENT_DUST_DEVIL.type -> displayAchievementNotification(it) + Notification.Type.ACHIEVEMENT_ARID_AUTHORITY.type -> displayAchievementNotification(it) + Notification.Type.ACHIEVEMENT_MONSTER_MAGUS.type -> displayAchievementNotification(it) + Notification.Type.ACHIEVEMENT_UNDEAD_UNDERTAKER.type -> displayAchievementNotification(it) + Notification.Type.ACHIEVEMENT_PRIMED_FOR_PAINTING.type -> displayAchievementNotification(it) + Notification.Type.ACHIEVEMENT_PEARLY_PRO.type -> displayAchievementNotification(it) + Notification.Type.ACHIEVEMENT_TICKLED_PINK.type -> displayAchievementNotification(it) + Notification.Type.ACHIEVEMENT_ROSY_OUTLOOK.type -> displayAchievementNotification(it) + Notification.Type.ACHIEVEMENT_BUG_BONANZA.type -> displayAchievementNotification(it) + Notification.Type.ACHIEVEMENT_BARE_NECESSITIES.type -> displayAchievementNotification(it) + Notification.Type.ACHIEVEMENT_FRESHWATER_FRIENDS.type -> displayAchievementNotification(it) + Notification.Type.ACHIEVEMENT_GOOD_AS_GOLD.type -> displayAchievementNotification(it) + Notification.Type.ACHIEVEMENT_ALL_THAT_GLITTERS.type -> displayAchievementNotification(it) + Notification.Type.ACHIEVEMENT_GOOD_AS_GOLD.type -> displayAchievementNotification(it) + Notification.Type.ACHIEVEMENT_BONE_COLLECTOR.type -> displayAchievementNotification(it) + Notification.Type.ACHIEVEMENT_SKELETON_CREW.type -> displayAchievementNotification(it) Notification.Type.ACHIEVEMENT_GENERIC.type -> displayAchievementNotification(it, notifications.find { notif -> notif.type == Notification.Type.ACHIEVEMENT_ONBOARDING_COMPLETE.type diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaLocalNotification.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaLocalNotification.kt index 846c6596c..bc39291dd 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaLocalNotification.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaLocalNotification.kt @@ -57,6 +57,7 @@ abstract class HabiticaLocalNotification(protected var context: Context, protect protected open fun setNotificationActions(data: Map) { val intent = Intent(context, MainActivity::class.java) intent.putExtra("notificationIdentifier", identifier) + intent.putExtra("notificationTimeStamp", Date().time) configureMainIntent(intent) val pendingIntent = PendingIntent.getActivity( context, diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt index 7a94a804f..0303757a8 100755 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt @@ -134,7 +134,7 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction { var drawerToggle: ActionBarDrawerToggle? = null private var resumeFromActivity = false private var userQuestStatus = UserQuestStatus.NO_QUEST - private var hasHandledNotificationOpen = false + private var lastNotificationOpen: Int? = null val userID: String get() = user?.id ?: "" @@ -358,8 +358,8 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction { putBoolean("preventDailyReminder", false) } - if (intent.hasExtra("notificationIdentifier") && !hasHandledNotificationOpen) { - hasHandledNotificationOpen = true + if (intent.hasExtra("notificationIdentifier") && lastNotificationOpen != intent.getIntExtra("notificationTimeStamp", 0)) { + lastNotificationOpen = intent.getIntExtra("notificationTimeStamp", 0) val identifier = intent.getStringExtra("notificationIdentifier") ?: "" val additionalData = HashMap() additionalData["identifier"] = identifier diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/PrefsActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/PrefsActivity.kt index 8e1d9dd5f..8e188ceef 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/PrefsActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/PrefsActivity.kt @@ -5,7 +5,10 @@ import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceScreen import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.components.UserComponent +import com.habitrpg.android.habitica.events.ShowSnackbarEvent import com.habitrpg.android.habitica.ui.fragments.preferences.* +import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar +import org.greenrobot.eventbus.Subscribe class PrefsActivity : BaseActivity(), PreferenceFragmentCompat.OnPreferenceStartScreenCallback { @@ -49,6 +52,11 @@ class PrefsActivity : BaseActivity(), PreferenceFragmentCompat.OnPreferenceStart return false } + @Subscribe + fun showSnackBarEvent(event: ShowSnackbarEvent) { + HabiticaSnackbar.showSnackbar(findViewById(R.id.snackbar_container), event.leftImage, event.title, event.text, event.specialView, event.rightIcon, event.rightTextColor, event.rightText, event.type) + } + private fun createNextPage(preferenceScreen: PreferenceScreen): PreferenceFragmentCompat? = when (preferenceScreen.key) { "profile" -> ProfilePreferencesFragment() diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GuildsOverviewFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GuildsOverviewFragment.kt index 4d1d15a54..6dec4924c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GuildsOverviewFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GuildsOverviewFragment.kt @@ -92,7 +92,8 @@ class GuildsOverviewFragment : BaseMainFragment() val uriUrl = "https://habitica.com/groups/myGuilds".toUri() val launchBrowser = Intent(Intent.ACTION_VIEW, uriUrl) val l = context.packageManager.queryIntentActivities(launchBrowser, PackageManager.MATCH_DEFAULT_ONLY) - launchBrowser.setPackage(l[0].activityInfo.processName) + val notHabitica = l.first { !it.activityInfo.processName.contains("habitica") } + launchBrowser.setPackage(notHabitica.activityInfo.processName) startActivity(launchBrowser) } dialog.addCloseButton() diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeDetailFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeDetailFragment.kt index ddb9595af..fef408724 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeDetailFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeDetailFragment.kt @@ -182,7 +182,8 @@ class ChallengeDetailFragment: BaseMainFragment( val uriUrl = "https://habitica.com/challenges/${challengeID}".toUri() val launchBrowser = Intent(Intent.ACTION_VIEW, uriUrl) val l = context.packageManager.queryIntentActivities(launchBrowser, PackageManager.MATCH_DEFAULT_ONLY) - launchBrowser.setPackage(l[0].activityInfo.processName) + val notHabitica = l.first { !it.activityInfo.processName.contains("habitica") } + launchBrowser.setPackage(notHabitica.activityInfo.processName) startActivity(launchBrowser) } dialog.addCloseButton() diff --git a/build.gradle b/build.gradle index a0784d9bc..01fb8bf24 100644 --- a/build.gradle +++ b/build.gradle @@ -11,7 +11,7 @@ buildscript { maven { url "https://plugins.gradle.org/m2/" } } dependencies { - classpath 'com.android.tools.build:gradle:4.1.0' + classpath 'com.android.tools.build:gradle:4.1.1' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' classpath 'com.google.gms:google-services:4.3.4' classpath 'com.google.firebase:firebase-crashlytics-gradle:2.3.0'