From 8f4994d32739f027b2070fc94e79dccb059f50a7 Mon Sep 17 00:00:00 2001 From: Hafiz Date: Thu, 18 May 2023 21:12:16 -0400 Subject: [PATCH 001/169] Change class flow - tap change your class in settings - get a confirmation modal with a red button to confirm this will cost 3 gems (you aren't charged at this point) - view the class options - select your class and get another confirmation modal - confirm, you're charged, and your class changes --- .../ui/activities/ClassSelectionActivity.kt | 31 +++++++++++++++---- .../preferences/PreferencesFragment.kt | 29 +++-------------- 2 files changed, 29 insertions(+), 31 deletions(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ClassSelectionActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ClassSelectionActivity.kt index 29c1f823b..ed9c961f7 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ClassSelectionActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ClassSelectionActivity.kt @@ -12,6 +12,7 @@ import androidx.lifecycle.lifecycleScope import androidx.navigation.navArgs import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.databinding.ActivityClassSelectionBinding +import com.habitrpg.android.habitica.extensions.observeOnce import com.habitrpg.android.habitica.models.user.Gear import com.habitrpg.android.habitica.models.user.Items import com.habitrpg.android.habitica.models.user.Outfit @@ -21,6 +22,7 @@ import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaProgressDialog +import com.habitrpg.android.habitica.ui.views.insufficientCurrency.InsufficientGemsDialog import com.habitrpg.common.habitica.helpers.ExceptionHandler import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.Dispatchers @@ -262,12 +264,29 @@ class ClassSelectionActivity : BaseActivity() { } private fun selectClass(selectedClass: String, isChanging: Boolean) { - shouldFinish = true - val dialog = this.displayProgressDialog(getString(R.string.changing_class_progress)) - lifecycleScope.launch(Dispatchers.Main) { - userRepository.changeClass(selectedClass) - dialog.hide() - if (isChanging) displayClassChanged(selectedClass) + userViewModel.user.observeOnce(this) { user -> + if (user == null) { + return@observeOnce + } + if ((user.gemCount ?: 0) >= 3) { + val dialog = HabiticaAlertDialog(this) + dialog.setTitle(R.string.change_class_confirmation) + dialog.addButton(R.string.change_class, true, true) { _, _ -> + shouldFinish = true + val dialog = + this.displayProgressDialog(getString(R.string.changing_class_progress)) + lifecycleScope.launch(Dispatchers.Main) { + userRepository.changeClass(selectedClass) + dialog.hide() + if (isChanging) displayClassChanged(selectedClass) + } + } + dialog.addButton(R.string.dialog_go_back, false) + dialog.enqueue() + } else { + val dialog = InsufficientGemsDialog(this, 3) + dialog.show() + } } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.kt index c16b6c494..54f133b80 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.kt @@ -140,32 +140,11 @@ class PreferencesFragment : BasePreferencesFragment(), } "choose_class" -> { - val bundle = Bundle() - bundle.putBoolean("isInitialSelection", user?.flags?.classSelected == false) - - val intent = Intent(activity, ClassSelectionActivity::class.java) - intent.putExtras(bundle) - if (user?.flags?.classSelected == true && user?.preferences?.disableClasses == false) { - if ((user?.gemCount ?: 0) >= 3) { - context?.let { context -> - val dialog = HabiticaAlertDialog(context) - dialog.setTitle(R.string.change_class_confirmation) - dialog.addButton(R.string.change_class, true, true) { _, _ -> - classSelectionResult.launch( - intent - ) - } - dialog.addButton(R.string.dialog_go_back, false) - dialog.enqueue() - } - } else { - activity?.let { activity -> - val dialog = InsufficientGemsDialog(activity, 3) - dialog.show() - } - } - } else { + val bundle = Bundle() + bundle.putBoolean("isInitialSelection", user?.flags?.classSelected == false) + val intent = Intent(activity, ClassSelectionActivity::class.java) + intent.putExtras(bundle) classSelectionResult.launch(intent) } return true From 3970c0f674a1f7a3d387bfce477345a439973a9c Mon Sep 17 00:00:00 2001 From: Hafiz Date: Wed, 7 Jun 2023 11:58:29 -0400 Subject: [PATCH 002/169] Check if user has initial class selected already --- .../ui/activities/FullProfileActivity.kt | 3 +- .../habitica/ui/activities/MainActivity.kt | 44 +++++++++++++++---- .../habitica/ui/views/AppHeaderView.kt | 10 +++-- 3 files changed, 42 insertions(+), 15 deletions(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.kt index 7d041d774..701cfdf54 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.kt @@ -104,8 +104,7 @@ class FullProfileActivity : BaseActivity() { binding.avatarWithBars.setContent { HabiticaTheme { - AppHeaderView(member.value, isMyProfile = isMyProfile()) { - } + AppHeaderView(member.value, isMyProfile = isMyProfile(), onMemberRowClicked = {}, onClassSelectionClicked = {}) } } 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 f7c928b09..f11516797 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 @@ -157,6 +157,13 @@ open class MainActivity : BaseActivity(), SnackbarActivity { } } + private val classSelectionResult = + registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { + lifecycleScope.launch(ExceptionHandler.coroutine()) { + userRepository.retrieveUser(true, true) + } + } + val isAppBarExpanded: Boolean get() = binding.content.appbar.height - binding.content.appbar.bottom == 0 @@ -265,19 +272,38 @@ open class MainActivity : BaseActivity(), SnackbarActivity { binding.content.headerView.setContent { HabiticaTheme { val user by viewModel.user.observeAsState(null) - val teamPlan by viewModel.userViewModel.currentTeamPlan.collectAsStateLifecycleAware(null) + val teamPlan by viewModel.userViewModel.currentTeamPlan.collectAsStateLifecycleAware( + null + ) val teamPlanMembers by viewModel.userViewModel.currentTeamPlanMembers.observeAsState() val canShowTeamHeader: Boolean by viewModel.canShowTeamPlanHeader - AppHeaderView(user, teamPlan = if (canShowTeamHeader) teamPlan else null, teamPlanMembers = teamPlanMembers) { - showAsBottomSheet { onClose -> - val group by viewModel.userViewModel.currentTeamPlanGroup.collectAsState(null) - val members by viewModel.userViewModel.currentTeamPlanMembers.observeAsState() - GroupPlanMemberList(members, group) { - onClose() - FullProfileActivity.open(it) + AppHeaderView( + user, + teamPlan = if (canShowTeamHeader) teamPlan else null, + teamPlanMembers = teamPlanMembers, + onMemberRowClicked = { + showAsBottomSheet { onClose -> + val group by viewModel.userViewModel.currentTeamPlanGroup.collectAsState( + null + ) + val members by viewModel.userViewModel.currentTeamPlanMembers.observeAsState() + GroupPlanMemberList(members, group) { + onClose() + FullProfileActivity.open(it) + } + } + }, + onClassSelectionClicked = { + val bundle = Bundle() + bundle.putBoolean("isInitialSelection", user?.flags?.classSelected == false) + val intent = Intent(this@MainActivity, ClassSelectionActivity::class.java) + intent.putExtras(bundle) + classSelectionResult.launch( + intent + ) } - } + ) } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/AppHeaderView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/AppHeaderView.kt index ddd694b8e..d15249fb8 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/AppHeaderView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/AppHeaderView.kt @@ -108,6 +108,7 @@ fun AppHeaderView( teamPlan : TeamPlan? = null, teamPlanMembers : List? = null, onMemberRowClicked : () -> Unit, + onClassSelectionClicked: () -> Unit ) { Column(modifier) { Row { @@ -181,7 +182,7 @@ fun AppHeaderView( background = HabiticaTheme.colors.basicButtonColor(), color = MaterialTheme.colors.onPrimary, onClick = { - MainNavigationController.navigate(R.id.classSelectionActivity) + onClassSelectionClicked() }, contentPadding = PaddingValues(0.dp), fontSize = 14.sp, @@ -397,8 +398,9 @@ private fun Preview(@PreviewParameter(UserProvider::class) data: Pair Date: Thu, 15 Jun 2023 15:32:37 -0400 Subject: [PATCH 003/169] Create Bailey Notification Retrieve Bailey News, and use Bailey news description to create Notification --- .../android/habitica/api/ApiService.kt | 3 +++ .../android/habitica/data/ApiClient.kt | 2 ++ .../android/habitica/data/UserRepository.kt | 4 ++++ .../data/implementation/ApiClientImpl.kt | 4 ++++ .../data/implementation/UserRepositoryImpl.kt | 18 ++++++++++++++++++ .../ui/activities/NotificationsActivity.kt | 12 ++++++++---- 6 files changed, 39 insertions(+), 4 deletions(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/api/ApiService.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/api/ApiService.kt index e25973c5b..5baecd554 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/api/ApiService.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/api/ApiService.kt @@ -387,6 +387,9 @@ interface ApiService { @POST("debug/add-ten-gems") suspend fun debugAddTenGems(): HabitResponse + @GET("news") + suspend fun getNews(): HabitResponse> + // Notifications @POST("notifications/{notificationId}/read") suspend fun readNotification(@Path("notificationId") notificationId: String): HabitResponse> diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/ApiClient.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/ApiClient.kt index d5c2dc78c..c0c5810f0 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/ApiClient.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/ApiClient.kt @@ -223,6 +223,8 @@ interface ApiClient { suspend fun debugAddTenGems(): Void? + suspend fun getNews(): List? + // Notifications suspend fun readNotification(notificationId: String): List? suspend fun readNotifications(notificationIds: Map>): List? diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/UserRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/UserRepository.kt index b263edc62..a1496766b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/UserRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/UserRepository.kt @@ -12,6 +12,7 @@ import com.habitrpg.android.habitica.models.tasks.Task import com.habitrpg.android.habitica.models.user.Stats import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.models.user.UserQuestStatus +import com.habitrpg.common.habitica.models.Notification import com.habitrpg.shared.habitica.models.responses.VerifyUsernameResponse import com.habitrpg.shared.habitica.models.tasks.Attribute import kotlinx.coroutines.flow.Flow @@ -47,6 +48,9 @@ interface UserRepository : BaseRepository { suspend fun runCron(tasks: MutableList) suspend fun runCron() + suspend fun getNews(): List? + suspend fun getNewsNotification(): Notification? + suspend fun readNotification(id: String): List? suspend fun readNotifications(notificationIds: Map>): List? suspend fun seeNotifications(notificationIds: Map>): List? diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt index d2cf59593..fbd4962e6 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt @@ -719,6 +719,10 @@ class ApiClientImpl( return process { apiService.debugAddTenGems() } } + override suspend fun getNews(): List? { + return process { apiService.getNews() } + } + override suspend fun readNotification(notificationId: String): List? { return process { apiService.readNotification(notificationId) } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt index 06bc72424..945e69602 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt @@ -19,6 +19,8 @@ import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.models.user.UserQuestStatus import com.habitrpg.android.habitica.modules.AuthenticationHandler import com.habitrpg.common.habitica.helpers.AnalyticsManager +import com.habitrpg.common.habitica.models.Notification +import com.habitrpg.common.habitica.models.notifications.NewStuffData import com.habitrpg.shared.habitica.models.responses.TaskDirection import com.habitrpg.shared.habitica.models.tasks.Attribute import kotlinx.coroutines.Dispatchers @@ -174,6 +176,22 @@ class UserRepositoryImpl( runCron(ArrayList()) } + override suspend fun getNews(): List? { + return apiClient.getNews() + } + + override suspend fun getNewsNotification(): Notification? { + val baileyNews = apiClient.getNews() + val baileyAnnouncement = (baileyNews?.first() as Map<*, *>)["title"] as String + val notification = Notification() + notification.id = "custom-new-stuff-notification" + notification.type = Notification.Type.NEW_STUFF.type + val data = NewStuffData() + data.title = baileyAnnouncement + notification.data = data + return notification + } + override suspend fun readNotification(id: String): List? { if (lastReadNotification == id) return null lastReadNotification = id diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/NotificationsActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/NotificationsActivity.kt index 6c8d8c903..ee0479978 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/NotificationsActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/NotificationsActivity.kt @@ -85,6 +85,7 @@ class NotificationsActivity : BaseActivity(), androidx.swiperefreshlayout.widget lifecycleScope.launchCatching { viewModel.refreshNotifications() } + } override fun onSupportNavigateUp(): Boolean { @@ -203,16 +204,19 @@ class NotificationsActivity : BaseActivity(), androidx.swiperefreshlayout.widget ) } - private fun createNewStuffNotification(notification: Notification): View? { + private suspend fun createNewStuffNotification(notification: Notification): View? = withContext(ExceptionHandler.coroutine()) { + var baileyNotification = notification val data = notification.data as? NewStuffData val text = if (data?.title != null) { fromHtml("" + getString(R.string.new_bailey_update) + "
" + data.title) } else { - fromHtml("" + getString(R.string.new_bailey_update) + "") + baileyNotification = userRepository.getNewsNotification() ?: return@withContext null + val baileyNewsData = baileyNotification.data as? NewStuffData + fromHtml("" + getString(R.string.new_bailey_update) + "
" + baileyNewsData?.title) } - return createDismissableNotificationItem( - notification, + return@withContext createDismissableNotificationItem( + baileyNotification, text, R.drawable.notifications_bailey ) From a3ab4a651854508f7eb5fa5e2702e5bf468fb932 Mon Sep 17 00:00:00 2001 From: Hafiz Date: Tue, 20 Jun 2023 12:49:32 -0400 Subject: [PATCH 004/169] Death Screen update to handle small screens or large text NestedScrollView added to handle smaller phone screen sizes Set Buttons and Broken equipment text relative to bottom of screen (versus below text) --- Habitica/res/layout/activity_death.xml | 182 ++++++++++++++----------- 1 file changed, 105 insertions(+), 77 deletions(-) diff --git a/Habitica/res/layout/activity_death.xml b/Habitica/res/layout/activity_death.xml index cc0fd0e0d..d73e70d6f 100644 --- a/Habitica/res/layout/activity_death.xml +++ b/Habitica/res/layout/activity_death.xml @@ -1,91 +1,119 @@ + android:layout_height="match_parent"> + - - + - + + + + + + + + + + + - + android:layout_centerVertical="true" + android:layout_marginHorizontal="@dimen/spacing_xlarge" + android:layout_marginVertical="@dimen/spacing_medium" + android:gravity="center" + android:lineSpacingExtra="4dp" + android:textColor="@color/text_primary" + android:textSize="20sp" /> + + + + + + + + + + \ No newline at end of file diff --git a/Habitica/res/layout/dialog_insufficient_gems.xml b/Habitica/res/layout/dialog_insufficient_gems.xml index a9c2df31c..1260e76e8 100644 --- a/Habitica/res/layout/dialog_insufficient_gems.xml +++ b/Habitica/res/layout/dialog_insufficient_gems.xml @@ -76,7 +76,7 @@ android:id="@+id/purchase_button" android:layout_width="129dp" android:layout_height="50dp" - style="@style/HabiticaButton.White.Small" + style="@style/HabiticaButton.Maroon.Small" tools:text="$0.99" android:textSize="16sp" android:visibility="invisible"/> diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml index 6a912a6ab..d04832bc8 100644 --- a/Habitica/res/values/strings.xml +++ b/Habitica/res/values/strings.xml @@ -317,7 +317,7 @@ I just hatched a %1$s %2$s pet in #Habitica by completing my real-life tasks! I just gained a %1$s mount in #Habitica by completing my real-life tasks! Open Play Store - Do you want to change your class for 3 Gems? + Do you want to change class for 3 Gems? Do you want to change your class to %1$s for 3 Gems? This will remove your current class and refund all stat points then let you select a new class This will switch which gear is unlocked in shops and change your available skills diff --git a/Habitica/res/values/styles.habitica.xml b/Habitica/res/values/styles.habitica.xml index aea22a321..1c2d437e7 100644 --- a/Habitica/res/values/styles.habitica.xml +++ b/Habitica/res/values/styles.habitica.xml @@ -87,6 +87,14 @@ 0.035 + + - \ No newline at end of file + + + From f09cf173a030426cb190aeb95d2eb8fda62be1aa Mon Sep 17 00:00:00 2001 From: Hafiz Date: Mon, 10 Jul 2023 13:10:42 -0400 Subject: [PATCH 030/169] Navigate to party chat when tapping party chat notification --- .../android/habitica/helpers/NotificationOpenHandler.kt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) 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 6696e46cb..e0162c652 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 @@ -47,8 +47,9 @@ class NotificationOpenHandler { } } - private fun openPartyScreen() { - MainNavigationController.navigate(R.id.partyFragment) + private fun openPartyScreen(isChatNotification: Boolean = false) { + val tabToOpen = if (isChatNotification) 1 else 0 + MainNavigationController.navigate(R.id.partyFragment, bundleOf("tabToOpen" to tabToOpen)) } private fun openNoPartyScreen() { @@ -77,7 +78,7 @@ class NotificationOpenHandler { private fun handleChatMessage(type: String?, groupID: String?) { when (type) { - "party" -> openPartyScreen() + "party" -> openPartyScreen(true) "tavern" -> MainNavigationController.navigate(R.id.tavernFragment) "guild" -> openGuildDetailScreen(groupID) } From d6ea83ac41b65aacaa1302aafadd812f79a563fa Mon Sep 17 00:00:00 2001 From: Hafiz Date: Mon, 10 Jul 2023 14:05:31 -0400 Subject: [PATCH 031/169] Remove dismissible in-app notification immediately - Remove notification view immediately even before server response for better user experience - Update refreshViews method name to reflect usage --- .../ui/activities/NotificationsActivity.kt | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/NotificationsActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/NotificationsActivity.kt index 1560b5c8b..fdea72aa3 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/NotificationsActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/NotificationsActivity.kt @@ -77,7 +77,6 @@ class NotificationsActivity : BaseActivity(), androidx.swiperefreshlayout.widget // and if so, don't display the notification to allocate points. viewModel.user.observeOnce(this) {user -> userLvl = user?.stats?.lvl ?: 0 - println("test") } inflater = getSystemService(Context.LAYOUT_INFLATER_SERVICE) as? LayoutInflater @@ -155,12 +154,12 @@ class NotificationsActivity : BaseActivity(), androidx.swiperefreshlayout.widget viewList.add(item) } } - refreshViews(viewList) + updateNotificationsAndRefresh(viewList) } } - private fun refreshViews(newItems: List) { + private fun updateNotificationsAndRefresh(newItems: List) { val currentViews = (0 until binding.notificationItems.childCount).map { binding.notificationItems.getChildAt(it) } @@ -180,6 +179,19 @@ class NotificationsActivity : BaseActivity(), androidx.swiperefreshlayout.widget } } + private fun removeNotificationAndRefresh(notification: Notification) { + // Immediately remove notification for better user experience + // (To avoid waiting for the server to respond for potential slower connections) + this.notifications = this.notifications.filter { it.id != notification.id } + + if (notifications.isEmpty()) { + displayNoNotificationsView() + } else { + displayNotificationsListView(notifications) + } + } + + private fun createNotificationsHeaderView(notificationCount: Int): View? { val header = inflater?.inflate(R.layout.notifications_header, binding.notificationItems, false) @@ -320,7 +332,10 @@ class NotificationsActivity : BaseActivity(), androidx.swiperefreshlayout.widget } val dismissButton = item?.findViewById(R.id.dismiss_button) as? ImageView - dismissButton?.setOnClickListener { viewModel.dismissNotification(notification) } + dismissButton?.setOnClickListener { + removeNotificationAndRefresh(notification) + viewModel.dismissNotification(notification) + } val messageTextView = item?.findViewById(R.id.message_text) as? TextView messageTextView?.text = messageText From a494a5d5fd79587524e7273d2189a0f9f1d2a3d0 Mon Sep 17 00:00:00 2001 From: Hafiz Date: Mon, 10 Jul 2023 14:13:38 -0400 Subject: [PATCH 032/169] Revert activity_death layout changes and add a scrollview This allows all text to remain visible and the view itself to move (For smaller screens) --- Habitica/res/layout/activity_death.xml | 167 ++++++++++++------------- 1 file changed, 79 insertions(+), 88 deletions(-) diff --git a/Habitica/res/layout/activity_death.xml b/Habitica/res/layout/activity_death.xml index d73e70d6f..c7d3fcfc7 100644 --- a/Habitica/res/layout/activity_death.xml +++ b/Habitica/res/layout/activity_death.xml @@ -9,111 +9,102 @@ android:layout_width="match_parent" android:layout_height="match_parent" /> - + android:fillViewport="true"> - - - - - - - - - - - - + android:gravity="center_horizontal" + android:orientation="vertical" + android:paddingHorizontal="23dp"> + + + + + + + + + + + + + - +