From 58b668e09a8e59cc5d3841368cb7866f70640bec Mon Sep 17 00:00:00 2001 From: Matthieu <24-artectrex@users.noreply.shinice.net> Date: Sun, 28 Nov 2021 19:00:18 +0100 Subject: [PATCH 1/2] Remove enableplaceholders config option --- .../cachedFeeds/FeedContentRepository.kt | 3 +-- .../NotificationsRemoteMediator.kt | 19 +++++++------------ .../postFeeds/HomeFeedRemoteMediator.kt | 15 +++++---------- .../postFeeds/PublicFeedRemoteMediator.kt | 15 +++++---------- .../FollowersContentRepository.kt | 3 +-- .../hashtags/HashTagContentRepository.kt | 4 ++-- .../profile/ProfileContentRepository.kt | 3 +-- .../search/SearchContentRepository.kt | 3 +-- 8 files changed, 23 insertions(+), 42 deletions(-) diff --git a/app/src/main/java/org/pixeldroid/app/posts/feeds/cachedFeeds/FeedContentRepository.kt b/app/src/main/java/org/pixeldroid/app/posts/feeds/cachedFeeds/FeedContentRepository.kt index e18b5720..ea8699ae 100644 --- a/app/src/main/java/org/pixeldroid/app/posts/feeds/cachedFeeds/FeedContentRepository.kt +++ b/app/src/main/java/org/pixeldroid/app/posts/feeds/cachedFeeds/FeedContentRepository.kt @@ -48,8 +48,7 @@ class FeedContentRepository @ExperimentalPagingApi return Pager( config = PagingConfig(initialLoadSize = NETWORK_PAGE_SIZE, pageSize = NETWORK_PAGE_SIZE, - enablePlaceholders = false, - prefetchDistance = 50 + prefetchDistance = 20 ), remoteMediator = mediator, pagingSourceFactory = pagingSourceFactory diff --git a/app/src/main/java/org/pixeldroid/app/posts/feeds/cachedFeeds/notifications/NotificationsRemoteMediator.kt b/app/src/main/java/org/pixeldroid/app/posts/feeds/cachedFeeds/notifications/NotificationsRemoteMediator.kt index 8ad0e03e..609c5a1c 100644 --- a/app/src/main/java/org/pixeldroid/app/posts/feeds/cachedFeeds/notifications/NotificationsRemoteMediator.kt +++ b/app/src/main/java/org/pixeldroid/app/posts/feeds/cachedFeeds/notifications/NotificationsRemoteMediator.kt @@ -41,18 +41,14 @@ class NotificationsRemoteMediator @Inject constructor( override suspend fun load(loadType: LoadType, state: PagingState): MediatorResult { - val (max_id, min_id) = when (loadType) { - LoadType.REFRESH -> { - Pair(null, null) - } + val maxId = when (loadType) { + LoadType.REFRESH -> null LoadType.PREPEND -> { //No prepend for the moment, might be nice to add later return MediatorResult.Success(endOfPaginationReached = true) } - LoadType.APPEND -> { - Pair(state.lastItemOrNull()?.id, null) - } - + LoadType.APPEND -> state.lastItemOrNull()?.id + ?: return MediatorResult.Success(endOfPaginationReached = true) } try { @@ -61,10 +57,9 @@ class NotificationsRemoteMediator @Inject constructor( val api = apiHolder.api ?: apiHolder.setToCurrentUser() val apiResponse = api.notifications( - max_id = max_id, - min_id = min_id, - limit = state.config.pageSize.toString(), - ) + max_id = maxId, + limit = state.config.pageSize.toString() + ) apiResponse.forEach{it.user_id = user.user_id; it.instance_uri = user.instance_uri} diff --git a/app/src/main/java/org/pixeldroid/app/posts/feeds/cachedFeeds/postFeeds/HomeFeedRemoteMediator.kt b/app/src/main/java/org/pixeldroid/app/posts/feeds/cachedFeeds/postFeeds/HomeFeedRemoteMediator.kt index b5ef519c..b953dd2e 100644 --- a/app/src/main/java/org/pixeldroid/app/posts/feeds/cachedFeeds/postFeeds/HomeFeedRemoteMediator.kt +++ b/app/src/main/java/org/pixeldroid/app/posts/feeds/cachedFeeds/postFeeds/HomeFeedRemoteMediator.kt @@ -26,18 +26,14 @@ class HomeFeedRemoteMediator @Inject constructor( override suspend fun load(loadType: LoadType, state: PagingState): MediatorResult { - val (max_id, min_id) = when (loadType) { - LoadType.REFRESH -> { - Pair(null, null) - } + val maxId = when (loadType) { + LoadType.REFRESH -> null LoadType.PREPEND -> { //No prepend for the moment, might be nice to add later return MediatorResult.Success(endOfPaginationReached = true) } - LoadType.APPEND -> { - Pair(state.lastItemOrNull()?.id, null) - } - + LoadType.APPEND -> state.lastItemOrNull()?.id + ?: return MediatorResult.Success(endOfPaginationReached = true) } try { @@ -46,8 +42,7 @@ class HomeFeedRemoteMediator @Inject constructor( val api = apiHolder.api ?: apiHolder.setToCurrentUser() val apiResponse = api.timelineHome( - max_id= max_id, - min_id = min_id, limit = state.config.pageSize.toString() + max_id= maxId, limit = state.config.pageSize.toString() ) val dbObjects = apiResponse.map{ diff --git a/app/src/main/java/org/pixeldroid/app/posts/feeds/cachedFeeds/postFeeds/PublicFeedRemoteMediator.kt b/app/src/main/java/org/pixeldroid/app/posts/feeds/cachedFeeds/postFeeds/PublicFeedRemoteMediator.kt index d832ecbc..756c92cf 100644 --- a/app/src/main/java/org/pixeldroid/app/posts/feeds/cachedFeeds/postFeeds/PublicFeedRemoteMediator.kt +++ b/app/src/main/java/org/pixeldroid/app/posts/feeds/cachedFeeds/postFeeds/PublicFeedRemoteMediator.kt @@ -41,18 +41,14 @@ class PublicFeedRemoteMediator @Inject constructor( override suspend fun load(loadType: LoadType, state: PagingState): MediatorResult { - val (max_id, min_id) = when (loadType) { - LoadType.REFRESH -> { - Pair(null, null) - } + val maxId = when (loadType) { + LoadType.REFRESH -> null LoadType.PREPEND -> { //No prepend for the moment, might be nice to add later return MediatorResult.Success(endOfPaginationReached = true) } - LoadType.APPEND -> { - Pair(state.lastItemOrNull()?.id, null) - } - + LoadType.APPEND -> state.lastItemOrNull()?.id + ?: return MediatorResult.Success(endOfPaginationReached = true) } try { @@ -61,8 +57,7 @@ class PublicFeedRemoteMediator @Inject constructor( val api = apiHolder.api ?: apiHolder.setToCurrentUser() val apiResponse = api.timelinePublic( - max_id = max_id, - min_id = min_id, + max_id = maxId, limit = state.config.pageSize.toString(), ) diff --git a/app/src/main/java/org/pixeldroid/app/posts/feeds/uncachedFeeds/accountLists/FollowersContentRepository.kt b/app/src/main/java/org/pixeldroid/app/posts/feeds/uncachedFeeds/accountLists/FollowersContentRepository.kt index 5eb529d0..97267d0d 100644 --- a/app/src/main/java/org/pixeldroid/app/posts/feeds/uncachedFeeds/accountLists/FollowersContentRepository.kt +++ b/app/src/main/java/org/pixeldroid/app/posts/feeds/uncachedFeeds/accountLists/FollowersContentRepository.kt @@ -21,8 +21,7 @@ class FollowersContentRepository @ExperimentalPagingApi return Pager( config = PagingConfig( initialLoadSize = NETWORK_PAGE_SIZE, - pageSize = NETWORK_PAGE_SIZE, - enablePlaceholders = false), + pageSize = NETWORK_PAGE_SIZE), pagingSourceFactory = { FollowersPagingSource(api, accountId, following) } diff --git a/app/src/main/java/org/pixeldroid/app/posts/feeds/uncachedFeeds/hashtags/HashTagContentRepository.kt b/app/src/main/java/org/pixeldroid/app/posts/feeds/uncachedFeeds/hashtags/HashTagContentRepository.kt index ce509b0b..f4238774 100644 --- a/app/src/main/java/org/pixeldroid/app/posts/feeds/uncachedFeeds/hashtags/HashTagContentRepository.kt +++ b/app/src/main/java/org/pixeldroid/app/posts/feeds/uncachedFeeds/hashtags/HashTagContentRepository.kt @@ -24,8 +24,8 @@ class HashTagContentRepository @ExperimentalPagingApi return Pager( config = PagingConfig( initialLoadSize = NETWORK_PAGE_SIZE, - pageSize = NETWORK_PAGE_SIZE, - enablePlaceholders = false), + pageSize = NETWORK_PAGE_SIZE + ), pagingSourceFactory = { HashTagPagingSource(api, hashtag) } diff --git a/app/src/main/java/org/pixeldroid/app/posts/feeds/uncachedFeeds/profile/ProfileContentRepository.kt b/app/src/main/java/org/pixeldroid/app/posts/feeds/uncachedFeeds/profile/ProfileContentRepository.kt index 11cafd29..aa1e0b18 100644 --- a/app/src/main/java/org/pixeldroid/app/posts/feeds/uncachedFeeds/profile/ProfileContentRepository.kt +++ b/app/src/main/java/org/pixeldroid/app/posts/feeds/uncachedFeeds/profile/ProfileContentRepository.kt @@ -19,8 +19,7 @@ class ProfileContentRepository @ExperimentalPagingApi return Pager( config = PagingConfig( initialLoadSize = NETWORK_PAGE_SIZE, - pageSize = NETWORK_PAGE_SIZE, - enablePlaceholders = false), + pageSize = NETWORK_PAGE_SIZE), pagingSourceFactory = { ProfilePagingSource(api, accountId) } diff --git a/app/src/main/java/org/pixeldroid/app/posts/feeds/uncachedFeeds/search/SearchContentRepository.kt b/app/src/main/java/org/pixeldroid/app/posts/feeds/uncachedFeeds/search/SearchContentRepository.kt index d4c0718e..ced5d965 100644 --- a/app/src/main/java/org/pixeldroid/app/posts/feeds/uncachedFeeds/search/SearchContentRepository.kt +++ b/app/src/main/java/org/pixeldroid/app/posts/feeds/uncachedFeeds/search/SearchContentRepository.kt @@ -28,8 +28,7 @@ class SearchContentRepository @ExperimentalPagingApi return Pager( config = PagingConfig( initialLoadSize = NETWORK_PAGE_SIZE, - pageSize = NETWORK_PAGE_SIZE, - enablePlaceholders = false), + pageSize = NETWORK_PAGE_SIZE), pagingSourceFactory = { SearchPagingSource(api, query, type) } From af63fc899097892b5eceaff1454590f008861c56 Mon Sep 17 00:00:00 2001 From: Matthieu <24-artectrex@users.noreply.shinice.net> Date: Sun, 28 Nov 2021 19:02:25 +0100 Subject: [PATCH 2/2] fix link parsing --- .../org/pixeldroid/app/posts/HtmlUtils.kt | 59 ++++++++++--------- 1 file changed, 31 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/org/pixeldroid/app/posts/HtmlUtils.kt b/app/src/main/java/org/pixeldroid/app/posts/HtmlUtils.kt index a18e624a..eb9ee3b7 100644 --- a/app/src/main/java/org/pixeldroid/app/posts/HtmlUtils.kt +++ b/app/src/main/java/org/pixeldroid/app/posts/HtmlUtils.kt @@ -57,10 +57,10 @@ fun parseHTMLText( context: Context, lifecycleScope: LifecycleCoroutineScope, ) : Spanned { - //Convert text to spannable + // Convert text to spannable val content = fromHtml(text) - //Retrive all links that should be made clickable + // Retrieve all links that should be made clickable val builder = SpannableStringBuilder(content) val urlSpans = content.getSpans(0, content.length, URLSpan::class.java) @@ -71,52 +71,55 @@ fun parseHTMLText( val text = builder.subSequence(start, end) var customSpan: ClickableSpan? = null - //Handle hashtags + // Handle hashtags if (text[0] == '#') { val tag = text.subSequence(1, text.length).toString() customSpan = object : ClickableSpanNoUnderline() { override fun onClick(widget: View) { openTag(context, tag) } - } + builder.removeSpan(span) } - //Handle mentions - if(text[0] == '@' && !mentions.isNullOrEmpty()) { - val accountUsername = text.subSequence(1, text.length).toString() - var id: String? = null + // Handle mentions + else if(text[0] == '@') { + if (!mentions.isNullOrEmpty()){ + val accountUsername = text.subSequence(1, text.length).toString() + var id: String? = null - //Go through all mentions stored in the status - for (mention in mentions) { - if (mention.username.equals(accountUsername, ignoreCase = true) - ) { - id = mention.id + // Go through all mentions stored in the status + for (mention in mentions) { + if (mention.username.equals(accountUsername, ignoreCase = true) + ) { + id = mention.id - //Mentions can be of users in other domains - if (mention.url.contains(getDomain(span.url))) { - break + //Mentions can be of users in other domains + if (mention.url.contains(getDomain(span.url))) { + break + } } } - } - //Check that we found a user for the given mention - if (id != null) { - val accountId: String = id - customSpan = object : ClickableSpanNoUnderline() { - override fun onClick(widget: View) { - Log.e("MENTION", "CLICKED") - //Retrieve the account for the given profile - lifecycleScope.launchWhenCreated { - val api: PixelfedAPI = apiHolder.api ?: apiHolder.setToCurrentUser() - openAccountFromId(accountId, api, context) + // Check that we found a user for the given mention + if (id != null) { + val accountId: String = id + customSpan = object : ClickableSpanNoUnderline() { + override fun onClick(widget: View) { + + // Retrieve the account for the given profile + lifecycleScope.launchWhenCreated { + val api: PixelfedAPI = apiHolder.api ?: apiHolder.setToCurrentUser() + openAccountFromId(accountId, api, context) + } } } } } + builder.removeSpan(span) } - builder.removeSpan(span) + builder.setSpan(customSpan, start, end, flags) // Add zero-width space after links in end of line to fix its too large hitbox.