- Added a new “When opening app” preference for what folder to show on launch.
- Implemented for both iPhone and iPad.
- Fixed loading default prefs.
- Removed the obsolete restore position preference.
- Enhanced the preferences views to support letting the app add custom values, to enable choosing any folder.
- Hidden the Widget Site Stories smart folder.
- Changed the Widget Sites preferences to only allow selecting feeds for one folder, or all.
- The selected folder is displayed when tapping a feed in the widget.
- N.B. This is a temporary solution until each widget can have settings for what folder or feed to show.
- On iPad, added a feed detail preference to open the first story (default) or list the stories
- Didn't do this on iPhone, as it makes less sense there; going back from the story to the list would just bounce back into the story. I could add extra logic to avoid that if you really want this option on iPhone too.
- Both are back to the old marking as read behavior.
- Since the UIPageViewController approach to paging had multiple issues that were proving impossible to work around, I decided to revert to the old UIScrollView-based approach.
- Saved searches (if any) are now listed near the bottom of the feeds list.
- When one is tapped, the folder or feed is displayed and the search performed.
- When showing a saved search, a Delete Saved Search command appears at the top of the menu.
- When showing a non-saved search, a Save Search command appears in the menu.
- Added a “Hide status bar” preference below the “Full screen” one.
- It is only shown when “Full screen” is on.
- Defaults to on, which does the previous behavior.
- If turned off, the status bar remains visible when scrolling to full-screen.
- In this situation, a fade-out gradient will be shown under the status bar, so the story content dims to avoid conflicting with the status bar content.
- All app-specific uses of UIWebView have been replaced with WKWebView.
- Some third-party uses remain.
- More testing required.
- Note that I’ve bumped the minimum iOS version to iOS 11, since that is needed for WKWebView support.
- Committing to a new branch until ready.
- Added Statistics to the preferences for the left swipe in the feeds list.
- A bit of refactoring to support displaying the popover from a cell on iPad.
- Added a Statistics item to the feed detail menu (please provide an icon).
- This command will show the statistics web page in a popover on iPad, or pushed on iPhone.
- Extended the “original” view controller to support showing a custom page without changing the title or including the navigation bar buttons.
- Fixed the story sometimes not getting displayed in the app when tapping in the widget.
- Now uses the scaled thumbnails provided by the server.
- Split the image cache into separate caches for feed images and story images.
- Now prunes the cached story images to only those currently displayed.
- Added a "Download text" preference. Defaults on.
- If on, the text is fetched for feeds that are in text view when fetching new stories.
- The text is fetched after stories, and before images, using a similar mechanism.
- The text is stored in a new "cached_text" database table.
- The text is deleted when the story is deleted.
- When displaying a text view, the cached text is used if available, otherwise it is fetched as before.
Note that need to pull-to-refresh to make the preference take effect, since it sorts on loading the feeds. I think that’s reasonable; not something people would change often.
- Implemented the feature, showing or hiding hidden stories, only offering it if there are some.
- I used the “all” icon in the menu as a placeholder; please provide one you’d prefer.
- Since the crusty old menu mechanism doesn’t handle dynamic items well, I took this opportunity to migrate the feed detail menu to the block-based MenuViewController mechanism, resulting in significant code reduction.
- Enhanced MenuViewController to support the theme controls etc, so other menus can be more easily migrated next time they need to be updated.
Purchases could fail if they require approval, and complete after leaving the premium view, or on next app launch. So I’ve split the premium business logic into a separate manager that maintains a permanent transaction observer.