aboutsummaryrefslogtreecommitdiff
path: root/app/src (unfollow)
Commit message (Collapse)AuthorFilesLines
2022-11-11Switch loading more comments to /morechildren endpoint (#1186)Sergei Kozelko6-83/+167
* Load more comments from /morechildren endpoint Previous implementation requested comments from /api/info which returned the comments themselves but did not include any information about their children. Also /api/info does not allow to specify sort type. On the other hand /morechildren supports sort type and it will be added in a later commit. I am not proud of this implementation, but I had to fight with both Reddit api response and existing code. The problem with api response is that it is a flat list of comments, not a tree structure. So the tree has to be rebuilt on our end. And the problem with existing code is that it merges "more children" node into its parent but then adds a placeholder anyways. The code relies on the fact that parent comment will be located before any of its children in the response. The code sequentially processes comments, tries to find their parents and either adds them to the tree or puts in a "top-level" array which will be handled by outside code. One possible problem is the removal of `depth` argument from parsing as I couldn't find a way to fit it in the new logic. However I also didn't experience any problems with it during my testing and the response seems to always contain depth key. Moreover current depth handling logic in ParseComment#parseCommentRecursion is broken because it does not increment depth when making a recursive call. * Store moreChildren ids instead of fullnames /morechildren endpoint accepts ids instead of fullnames so there is no point in converting ids to fullnames and back * Send all comment ids to Reddit so it can select what to display itself Sending all ids allows Reddit to sort them properly. Since the number of comments can be very bing, it requires using POST request instead of GET. This commit changes the meaning of Comment#moreChildrenIds field, now it stores only ids of comments that are not yet loaded. This simplifies the code and removes the need for Comment#moreChildrenStartingIndex * Fetch more comments with current sort type
2022-11-08New option: Settings->Interface->Comment->Hide the Number of Votes.Docile-Alligator3-18/+36
2022-11-08Limit EditText's height in CustomizePostFilterActivity.Docile-Alligator7-17/+61
2022-11-08Material Design 3 Switch. Target Sdk 33.Docile-Alligator27-63/+88
2022-11-08Fix getting comment for "continue thread" button (#1207)Sergei Kozelko1-1/+1
It used position of viewholder during binding which could get outdated by the time user clicks on the button. This would result in retrieving wrong comment or even null. Replaced with getting comment based on current position of vieholder.
2022-11-07Modify the behaviour of ItemTouchHelper.Docile-Alligator4-148/+184
2022-11-06Fix screen staying at MorePostsInfoFragment after retrying.Docile-Alligator2-4/+10
2022-11-06Retry loading more posts.Docile-Alligator4-4/+21
2022-11-05Load sort type from correct shared preferences (#1202)Sergei Kozelko1-2/+2
When extracting sort type loading logic the shared preferences that are used to load sort type got accidentally changed to the wrong ones. This resulted in always using the default value which is displayed as Best. Fortunately the saving code was not changed so only reading has to be fixed.
2022-11-05Minor changes to loading more posts.Docile-Alligator3-5/+23
2022-11-05Fix problems when fetching more history posts in ViewPostDetailActivity.Docile-Alligator4-55/+69
2022-11-05Show status of loading more posts in MorePostsInfoFragment.Docile-Alligator5-12/+199
2022-11-05Fix history posts problems.Docile-Alligator3-8/+8
2022-11-04Load more posts in ViewPostDetailActivity for post feed in ↵Docile-Alligator3-3/+51
HistoryPostFragment. There are bugs in HistoryPostPagingSource so duplicate posts will be fetched and more posts could not be fetched. Will be fixed.
2022-11-04Load more posts in ViewPostDetailActivity for post feed in PostFragment.Docile-Alligator6-33/+354
2022-11-03New option: Settings->Interface->Hide FAB in Post Feed.Docile-Alligator9-14/+64
2022-11-03New option in PostFragment: More options.Docile-Alligator3-0/+15
2022-11-03Superscript parser overhaul (#1162)scria100021-177/+453
* Superscript parser overhaul * Make superscript work with tables * Fix some issues with Table compatibility * Some bug fixes * Re-enable Autolink
2022-11-03Fix issues related to hiding account karma in the navigation drawer.Docile-Alligator5-6/+43
2022-11-03Handle u/me.Docile-Alligator1-0/+4
2022-11-03Fix Separate posts and comments in portrait mode not working.Docile-Alligator1-2/+1
2022-11-03Handle invalid regex pattern in post filter.Docile-Alligator3-20/+41
2022-11-03Add some contrast to subreddit and user toolbars. (#1170)cmp1-0/+5
Add a gradient from the primary theme color to transparent so that if a subreddit or user profile has a very light background, the usually light text and buttons are not obscured or in some cases invisible. The gradients don't appear for immersive mode so that the app remains immersive.
2022-11-03Rename confidence sort to best (#1177)Sergei Kozelko4-49/+31
* Rename CONFIDENCE comments sort type to BEST and remove old BEST type The Reddit API supports only CONFIDENCE sort type for comments but displays it as BEST. I renamed CONFIDENCE name to Best and added a migration step for loading correct sort type. * Clean up sortType usages in ViewPostDetailFragment Removed unnecessary null checks, object creations and most case conversions
2022-11-03Display comment avatar only if it is the right user (#1191)Sergei Kozelko1-2/+10
Condition in callback for loading avatar url is almost always true[1]. So it would load avatar even if the viewholder got bound to another comment. Ideally the solution would be to update the comment just like now, then find current position of the comment and call onItemChanged. However you cannot call onItemChanged from onBindViewHolder and that is a problem because callback can be executed synchronously. So instead we just check that viewholder is bound to some comment and that bound comment's author matches initially requested author. [1] The only case I know when it is false is when that comment got deleted and its author got replaced with "[deleted]" before the callback got executed
2022-11-02add backup password below backup settings button (#1185)Patrick Demers2-1/+3
2022-11-02Don't pick up hyperlink text as a link (#1182)scria10002-1/+4
2022-11-02always mux videos when downloading (#1152)Patrick Demers1-25/+42
* mux videos with and without audio * move variable to inner scope * rename argument to catch block
2022-11-02Improve wiki link handling (#1184)Patrick Demers1-2/+12
* handle wiki links with dashes and index wiki page * properly handle w vs wiki and links with wiki in it twice * remove beginning and end of line tokens from wiki regex * optimize wiki regex
2022-11-02Rules can now show in private subreddits (#1181)Abi07114-5/+21
* Added oauth to fetching rules * Added getRulesOauth for users that are logged in Co-authored-by: Abi <u7290897@anu.edu.au>
2022-11-02handle reddit.com/report as a url, not post link (#1179)Patrick Demers1-0/+2
2022-11-02add button to export logs to GitHub issue (#1180)Patrick Demers3-0/+46
2022-11-02wait to load security settings until successful authentication (#1196)Patrick Demers2-2/+19
2022-11-02Fix see removed comment edit wrong comment (#1192)Blahaj-Samoyed4-14/+28
* Fix removed comment shown in the wrong position. * Handle index out of bounds.
2022-10-24fix the bug: Scroll position is lost when changing screen orientation (#1173)HuilinChen9431-0/+49
2022-10-22Hide Karma (#1168)Patrick Demers4-1/+16
* feature/ability to hide karma * only hide karma in nav bar * center account name vertically when not showing karma
2022-10-22Add view that can lock swipe-to-close gesture (#1140)Sergei Kozelko9-43/+114
Slidr works by adding its own view in the hierarchy and listening to touch events in `onInterceptTouchEvent`. Once it detects movement in the correct direction, it returns `true` and handles all the events itself. Adding scrollable view detection to Slidr would solve the problem, but it is not possible and would probably have performance impact. Fortunately Slidr does not intercept the very first event, which is ACTION_DOWN, and it reaches scrollable view. So the scrollable view itself can decide if it should disallow the swipe. This also has a performance benefit over `OnScrollChangedListener` because the listener is triggered for every scroll of every view even if the child we are interested in did not scroll. On the other hand `on(Intercept)TouchEvent` is triggered only when the view is touched. There is a possibility that swipe won't be unlocked if view never receives ACTION_UP or ACTION_CANCEL. However the docs say nothing about the probability of this happening. Anyways, one possible solution is to post a runnable that will unlock swipe soon after locking.
2022-10-16Fix comment expanding logic (#1155)Sergei Kozelko1-12/+8
Child comment expanding was broken because it did not take into account children of children of children and deeper levels of comments when calculating new comment's position. Replaced with a simple tree to list conversion in pre-order.
2022-10-15Fix duplicate download folders by persisting read permission (#1164)Sergei Kozelko2-9/+8
* Persist read permission ACTION_OPEN_DOCUMENT_TREE grants both read and write permissions, but they are granted only until device reboot unless app persists them. Once read permission is lost, app cannot check if folders exist in DownloadMediaService. But it can still create new folders because it has write permission. This results in duplicate folders. * Remove unnecessary FLAG_GRANT_WRITE_URI_PERMISSION This flag is ignored when used with ACTION_OPEN_DOCUMENT_TREE
2022-10-15Disable Copied toast on android 13+ (#1139)o13e6-6/+18
2022-10-15Delineate comments with hidden scores (#1147)cmp2-37/+70
* Delineate comments with hidden scores. * Same change for fully collapsed comments.
2022-10-08Parse spoilers into nodes (#1150)Sergei Kozelko8-188/+240
Implementation is inspired by already existing in Markwon image and link processing but has to work around some limitations of writing an external plugin. The first one is storing brackets ourselves. Stored brackets need to be cleared when a new block starts. Markwon does it in MarkwonInlineProcessor but there is no callback that we could use. Clearing storage from our own block parser is unreliable as it is not guaranteed to be called. Instead, every time we need to access the storage we compare current block with the last used block and clear storage if necessary. The second problem is actually a feature of Markwon that it applies spans in reverse order of calls to MarkwonVisitor#setSpansForNode. This causes other spans like links and code to be drawn over spoilers making them visible. Adding spans with a different priority doesn't help as it would require negative priority. Instead we just remove all the SpoilerSpans from the final string and add them again, so they are applied last as we want.
2022-10-08Ellipsize usernames if they don't fit on one line in a fully collapsed ↵cmp1-0/+1
comment text area. (#1148)
2022-10-08Refactor and de-duplicate markdown code (#1086)Sergei Kozelko15-689/+502
* Add todos to places that need more markdown fixes * Parse spoilers and headings in sidebar * Assign anonymous MarkwonPlugin to a variable Prepare code for a future refactoring * Assign click listener lambda to a variable Prepare code for a future refactoring * Add function for creating Markwon with full markdown All the builders had the same plugins applied to them, except for BetterLinkMovement. But it is safe to add the plugin as it just adjusts link interactions. Also some plugins are now applied in a different order but it doesn't change anything in this case. * Add function for creating Markwon with only links support * Extract UrlMenuBottomSheetFragment creation * Add functions for creating MarkwonAdapters * Replace linkify with newInstance for BetterLinkMovementMethod Because varargs weren't used, the two methods are identical
2022-09-25Fix crash in debug build by using fully qualified class name for ↵Sergei Kozelko12-14/+14
layoutmanager (#1130) When the class name is relative, Android tries to resolve it against applicationId. However it does not match the package because of `.debug` suffix so it tries to load the wrong class. This results in ClassNotFoundException and a crash. Using fully qualified class name fixes it as the system can use the class name as is.
2022-09-25Fix spoiler interactions with links and long clicks (#1129)Sergei Kozelko11-10/+135
* Prioritize clicks on hidden spoilers over links Extend BetterLinkMovementMethod to override selection of span that will be touched and give spoilers and links following priorities: 1. Hidden spoiler 2. Non-spoiler span (i.e. link) 3. Shown spoiler #609 * Ignore long clicks on spoilers Ignore long clicks if it is a SpoilerSpan. Also don't apply highlight because it breaks spoiler effect. #529
2022-09-25Rewrite spoiler parsing (#1104)Sergei Kozelko1-65/+90
* Rewrite spoiler parsing to properly support nested spoilers and code blocks Parse all the spoilers, ignoring spoiler brackets that intersect with code spans. Detect all the spoilers that are nested and mark them accordingly. Delete all spoiler brackets that were matched. Add SpoilerSpans for non-nested ranges. * Simplify offset calculation
2022-09-21Fixed Gray Overlay in Image (#1111)MChen3211-5/+13
* Added a clear search bar text button * Made caption disappear/show when tapping on image and removed gray overlay when no caption.
2022-09-21Fix 'Suggested Title' bug (#1120)Kurian Vithayathil1-2/+3
- Fixed issue where a post's suggested titles would fail to generate Co-authored-by: Kurian Vithayathil <no.reply@github.com>
2022-09-21Minor bugs fixed.Docile-Alligator2-11/+10