Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor notifications to Kotlin & paging #4026

Merged
merged 105 commits into from
May 3, 2024
Merged
Show file tree
Hide file tree
Changes from 81 commits
Commits
Show all changes
105 commits
Select commit Hold shift + click to select a range
92cb7b6
rename notifications package to systemnotifications
connyduck Sep 18, 2023
2a55757
add the "showNotificationsFilter" preference back
connyduck Sep 18, 2023
cfc8a40
Rename .java to .kt
connyduck Sep 20, 2023
075f76b
add new NotificationsFragment, implement NotificationsPagingAdapter
connyduck Sep 20, 2023
6dbd7c1
notis
connyduck Oct 30, 2023
be54fe4
Merge branch 'develop' into refactor_notifications
connyduck Oct 30, 2023
a1c1e76
support filters
connyduck Oct 31, 2023
9a821f1
Merge branch 'develop' into refactor_notifications
connyduck Dec 23, 2023
e8e0572
Merge branch 'develop' into refactor_notifications
connyduck Mar 12, 2024
16267a6
revert schema files
connyduck Mar 12, 2024
47f2049
fix build
connyduck Mar 12, 2024
bdeb899
revert schema files
connyduck Mar 12, 2024
9b4becc
new hometimeline db schema
connyduck Mar 21, 2024
61a1932
use same entities for home timeline and notifications
connyduck Mar 26, 2024
f229a41
update indizes and database cleanup
connyduck Mar 26, 2024
824c6a4
fix room warnings
connyduck Mar 26, 2024
d3b5bfe
fix codeformatting in some places
connyduck Mar 26, 2024
aab880d
implement some of the missing fragment functionality
connyduck Mar 26, 2024
bedfe01
add fetching status from db back into ViewThreadViewModel
connyduck Mar 26, 2024
17ce0be
make clearing notifications work again
connyduck Mar 26, 2024
88d79cd
add preference change listener back
connyduck Mar 26, 2024
6980bb3
Merge branch 'develop' into refactor_notifications
connyduck Mar 26, 2024
4ce685b
improve menu/filter bar
connyduck Mar 26, 2024
bf3d55c
add filter functionality back
connyduck Mar 26, 2024
f077425
remove unused code
connyduck Mar 26, 2024
f135672
add missing license headers
connyduck Mar 26, 2024
42f003b
Merge branch 'develop' into refactor_notifications
connyduck Mar 26, 2024
e5f6d83
add loading property to HomeTimelineData
connyduck Mar 26, 2024
b2c3007
fix tests
connyduck Mar 27, 2024
5a82070
remove runBlocking from tests
connyduck Mar 27, 2024
a9cee65
Merge branch 'develop' into refactor_notifications
connyduck Mar 27, 2024
5f4c476
close cursors in test
connyduck Mar 27, 2024
76bee61
Update app/src/main/java/com/keylesspalace/tusky/components/notificat…
connyduck Mar 27, 2024
e14c12e
make follow requests work again
connyduck Mar 28, 2024
1c26a02
Merge branch 'develop' into refactor_notifications
connyduck Mar 28, 2024
4cd278f
cleanup code in NotificationTypeMappers
connyduck Mar 28, 2024
44a9814
improve TimelineDao
connyduck Mar 28, 2024
f7d440e
Merge branch 'develop' into refactor_notifications
connyduck Mar 29, 2024
b2eca59
add comments to onMute/onBlock in NotificationsFragment
connyduck Mar 30, 2024
5e95fab
implement NotificationsFragment.removeItem
connyduck Mar 30, 2024
c6c091b
implement translations
connyduck Mar 30, 2024
ab5b086
implement load more
connyduck Mar 30, 2024
4615bfd
fix timeline load more
connyduck Mar 30, 2024
e0b673a
update reading order when pref changed in NotificationsFragment
connyduck Mar 31, 2024
af2add1
use NotificationsDao.delete in the appropriate places
connyduck Mar 31, 2024
4501e3d
some code cleanup
connyduck Mar 31, 2024
40d017a
update reading order when pref changed in NotificationsViewData
connyduck Mar 31, 2024
efa3ec0
adapt cache updating
connyduck Apr 1, 2024
d1c28ea
cleanup notification cache when logging out
connyduck Apr 1, 2024
4547d08
reorganize daos
connyduck Apr 1, 2024
9a41474
reorganize db entities
connyduck Apr 1, 2024
6da0112
some code cleanup
connyduck Apr 1, 2024
3f58187
regenerate lint-baseline.xml
connyduck Apr 1, 2024
924a115
fix tests
connyduck Apr 1, 2024
011d795
Merge branch 'develop' into refactor_notifications
connyduck Apr 1, 2024
6cfe884
create database migrations
connyduck Apr 2, 2024
96048cd
Merge branch 'develop' into refactor_notifications
connyduck Apr 2, 2024
ff277e1
implement click handler in StatusNotificationViewHolder
connyduck Apr 3, 2024
bb19a82
fix proguard-rules.pro
connyduck Apr 4, 2024
017c7ec
fix bugs related to boosted posts
connyduck Apr 4, 2024
13014ab
add tests for removing items by user, fix query
connyduck Apr 5, 2024
1c93c06
fix load more on the home timeline
connyduck Apr 5, 2024
5895539
fix crash when showing filtered status in home timeline
connyduck Apr 5, 2024
86db3d8
fix boosted posts losing state on refresh
connyduck Apr 5, 2024
1155915
Merge branch 'develop' into refactor_notifications
connyduck Apr 6, 2024
e3696a1
remove unused method
connyduck Apr 6, 2024
f1f3ed8
don't override equals / hashcode for Notification
connyduck Apr 6, 2024
50a6801
add CleanupDaoTest and NotificationMocker, fix cleanup bug
connyduck Apr 7, 2024
6d4976f
delete unused code
connyduck Apr 7, 2024
26b7e04
add NotificationsDaoTest
connyduck Apr 9, 2024
8032e9e
add NotificationsRemoteMediatorTest
connyduck Apr 10, 2024
077036f
Merge branch 'develop' into refactor_notifications
connyduck Apr 10, 2024
ad9b7a2
regenerate lint-baseline.xml
connyduck Apr 10, 2024
55af4a3
improve report notification layout
connyduck Apr 11, 2024
c9308ab
remove unused imports
connyduck Apr 11, 2024
654e522
improve report notification layout
connyduck Apr 12, 2024
4f14b4e
revert unnecessary change in StatusViewHolder
connyduck Apr 12, 2024
b04f2ee
remove duplicate notification type to name mapping
connyduck Apr 12, 2024
5ac34f6
various code cleanups
connyduck Apr 12, 2024
194c633
save last notification id to account
connyduck Apr 12, 2024
2cb9957
Merge branch 'develop' into refactor_notifications
connyduck Apr 14, 2024
843463e
Merge branch 'develop' into refactor_notifications
connyduck Apr 17, 2024
0e8b0c3
add jump-to-top on reselect back into NotificationsFragment
connyduck Apr 17, 2024
a6bc841
make NotificationViewData implementations data classes
connyduck Apr 17, 2024
eaaf865
use Kotlin isEmpty() instead of TextUtils.isEmpty
connyduck Apr 17, 2024
98098a1
get context from view instead of fragment when possible
connyduck Apr 17, 2024
0cb0721
move listener setup to constructor of PlaceholderViewHolder
connyduck Apr 17, 2024
0dde036
remove unused import
connyduck Apr 17, 2024
cbd9f06
fix hasSpoiler condition in StatusNotificationViewHolder
connyduck Apr 18, 2024
0a5714a
move json de/serialization completely to room converter
connyduck Apr 18, 2024
c8bf780
Merge branch 'develop' into refactor_notifications
connyduck Apr 18, 2024
ed37bb2
shorten some code in NotificationsFragment
connyduck Apr 18, 2024
9882c27
use start/end instead of left/right in item_report_notification.xml
connyduck Apr 18, 2024
7186d2e
rename mock* to fake*
connyduck Apr 18, 2024
5ba10f2
refactor respondToFollowRequest to return Deferred
connyduck Apr 18, 2024
135e619
Merge branch 'develop' into refactor_notifications
connyduck Apr 29, 2024
e6a042d
put back notification clearing and timestamp updating
connyduck Apr 29, 2024
d74dd63
Merge branch 'develop' into refactor_notifications
connyduck May 3, 2024
c5633de
change payloads param to be non-null
connyduck May 3, 2024
a78433a
use SpannableString instead of SpannableStringBuilder
connyduck May 3, 2024
a6e9fc1
CleanupDao -> DatabaseCleaner
connyduck May 3, 2024
3581e9a
improve NotificationViewData
connyduck May 3, 2024
b3a8978
don't specify executor when mapping/filtering pagingData
connyduck May 3, 2024
7f2e403
refresh notifications directly in viewmodel when responding to follow…
connyduck May 3, 2024
abf0008
refresh notifications directly in viewmodel when responding to follow…
connyduck May 3, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
329 changes: 16 additions & 313 deletions app/lint-baseline.xml

Large diffs are not rendered by default.

1,325 changes: 1,325 additions & 0 deletions app/schemas/com.keylesspalace.tusky.db.AppDatabase/60.json

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@
import com.google.android.material.snackbar.Snackbar;
import com.keylesspalace.tusky.adapter.AccountSelectionAdapter;
import com.keylesspalace.tusky.components.login.LoginActivity;
import com.keylesspalace.tusky.db.AccountEntity;
import com.keylesspalace.tusky.db.entity.AccountEntity;
import com.keylesspalace.tusky.db.AccountManager;
import com.keylesspalace.tusky.di.Injectable;
import com.keylesspalace.tusky.interfaces.AccountSelectionListener;
Expand Down
10 changes: 5 additions & 5 deletions app/src/main/java/com/keylesspalace/tusky/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -80,17 +80,17 @@ import com.keylesspalace.tusky.components.compose.ComposeActivity
import com.keylesspalace.tusky.components.compose.ComposeActivity.Companion.canHandleMimeType
import com.keylesspalace.tusky.components.drafts.DraftsActivity
import com.keylesspalace.tusky.components.login.LoginActivity
import com.keylesspalace.tusky.components.notifications.NotificationHelper
import com.keylesspalace.tusky.components.notifications.disableAllNotifications
import com.keylesspalace.tusky.components.notifications.enablePushNotificationsWithFallback
import com.keylesspalace.tusky.components.notifications.showMigrationNoticeIfNecessary
import com.keylesspalace.tusky.components.preference.PreferencesActivity
import com.keylesspalace.tusky.components.scheduled.ScheduledStatusActivity
import com.keylesspalace.tusky.components.search.SearchActivity
import com.keylesspalace.tusky.components.systemnotifications.NotificationHelper
import com.keylesspalace.tusky.components.systemnotifications.disableAllNotifications
import com.keylesspalace.tusky.components.systemnotifications.enablePushNotificationsWithFallback
import com.keylesspalace.tusky.components.systemnotifications.showMigrationNoticeIfNecessary
import com.keylesspalace.tusky.components.trending.TrendingActivity
import com.keylesspalace.tusky.databinding.ActivityMainBinding
import com.keylesspalace.tusky.db.AccountEntity
import com.keylesspalace.tusky.db.DraftsAlert
import com.keylesspalace.tusky.db.entity.AccountEntity
import com.keylesspalace.tusky.di.ApplicationScope
import com.keylesspalace.tusky.entity.Account
import com.keylesspalace.tusky.entity.Notification
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/java/com/keylesspalace/tusky/TabData.kt
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,10 @@ import androidx.annotation.DrawableRes
import androidx.annotation.StringRes
import androidx.fragment.app.Fragment
import com.keylesspalace.tusky.components.conversation.ConversationsFragment
import com.keylesspalace.tusky.components.notifications.NotificationsFragment
import com.keylesspalace.tusky.components.timeline.TimelineFragment
import com.keylesspalace.tusky.components.timeline.viewmodel.TimelineViewModel
import com.keylesspalace.tusky.components.trending.TrendingTagsFragment
import com.keylesspalace.tusky.fragment.NotificationsFragment
import java.util.Objects

/** this would be a good case for a sealed class, but that does not work nice with Room */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import androidx.work.Constraints
import androidx.work.ExistingPeriodicWorkPolicy
import androidx.work.PeriodicWorkRequestBuilder
import androidx.work.WorkManager
import com.keylesspalace.tusky.components.notifications.NotificationHelper
import com.keylesspalace.tusky.components.systemnotifications.NotificationHelper
import com.keylesspalace.tusky.di.AppInjector
import com.keylesspalace.tusky.settings.AppTheme
import com.keylesspalace.tusky.settings.NEW_INSTALL_SCHEMA_VERSION
Expand Down Expand Up @@ -127,12 +127,6 @@ class TuskyApplication : Application(), HasAndroidInjector {
editor.remove(PrefKeys.MEDIA_PREVIEW_ENABLED)
}

if (oldVersion < 2023072401) {
// The notifications filter / clear options are shown on a menu, not a separate bar,
// the preference to display them is not needed.
editor.remove(PrefKeys.Deprecated.SHOW_NOTIFICATIONS_FILTER)
}

if (oldVersion != NEW_INSTALL_SCHEMA_VERSION && oldVersion < 2023082301) {
// Default value for appTheme is now THEME_SYSTEM. If the user is upgrading and
// didn't have an explicit preference set use the previous default, so the
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import android.widget.ArrayAdapter
import androidx.preference.PreferenceManager
import com.keylesspalace.tusky.R
import com.keylesspalace.tusky.databinding.ItemAutocompleteAccountBinding
import com.keylesspalace.tusky.db.AccountEntity
import com.keylesspalace.tusky.db.entity.AccountEntity
import com.keylesspalace.tusky.settings.PrefKeys
import com.keylesspalace.tusky.util.emojify
import com.keylesspalace.tusky.util.loadAvatar
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,12 @@ import android.text.Spanned
import android.text.style.StyleSpan
import androidx.recyclerview.widget.RecyclerView
import com.keylesspalace.tusky.R
import com.keylesspalace.tusky.components.notifications.NotificationsViewHolder
import com.keylesspalace.tusky.databinding.ItemFollowRequestBinding
import com.keylesspalace.tusky.entity.TimelineAccount
import com.keylesspalace.tusky.interfaces.AccountActionListener
import com.keylesspalace.tusky.interfaces.LinkListener
import com.keylesspalace.tusky.util.StatusDisplayOptions
import com.keylesspalace.tusky.util.emojify
import com.keylesspalace.tusky.util.hide
import com.keylesspalace.tusky.util.loadAvatar
Expand All @@ -33,12 +35,28 @@ import com.keylesspalace.tusky.util.setClickableText
import com.keylesspalace.tusky.util.show
import com.keylesspalace.tusky.util.unicodeWrap
import com.keylesspalace.tusky.util.visible
import com.keylesspalace.tusky.viewdata.NotificationViewData

class FollowRequestViewHolder(
private val binding: ItemFollowRequestBinding,
private val accountListener: AccountActionListener,
private val linkListener: LinkListener,
private val showHeader: Boolean
) : RecyclerView.ViewHolder(binding.root) {
) : RecyclerView.ViewHolder(binding.root), NotificationsViewHolder {

override fun bind(
viewData: NotificationViewData.Concrete,
payloads: List<*>?,
statusDisplayOptions: StatusDisplayOptions
) {
setupWithAccount(
viewData.account,
statusDisplayOptions.animateAvatars,
statusDisplayOptions.animateEmojis,
statusDisplayOptions.showBotOverlay
)
setupActionListener(accountListener, viewData.account.id)
}

fun setupWithAccount(
account: TimelineAccount,
Expand Down
Loading
Loading