This PR is now in Beta!
Join the beta test if you want to test it.
Join the Beta on Google Play
on your phone: https://play.google.com/store/apps/details?id=com.nononsenseapps.feeder.play
on the web: https://play.google.com/apps/testing/com.nononsenseapps.feeder.play
Join the Beta on F-Droid
on F-Droid https://f-droid.org/en/packages/com.nononsenseapps.feeder/
Choose Versions and manually install the latest available Beta version.
Note that F-Droid builds apps with significant delay so it will probably not be the latest beta version available.
Description
It will enable cool things such as
TODO
Alpha
-
Feed List: Menu items clickable -
Feed list: items properly update when backing data updates (try @Immutable
items) -
Reader: Menu items clickable (except read aloud) -
Reader: clickable links -
Reader: Clickable enclosure -
Reader: Display link to enclosures -
Reader: Dynamic number of items, depending on full text view or not -
EditFeed: Initiate Sync on new save -
EditFeed: Focus order -
EditFeed: Close keyboard when done -
EditFeed: Leaving title blank uses default title - and actually sets title! -
EditFeed: Minimum size of switches -
EditFeed: Clears back stack when navigating to Feed -
EditFeed: Autosuggestion in tag -
Settings: Sync is scheduled on settings changes
Beta
-
All strings with HTML formatting in them are updated to annotations instead -
All screens: Can select text where applicable -
Feed List: have images match height of rest of item (learn to use preferrable height??) -
Feed list: Swipe to dismiss read/unread (https://developer.android.com/reference/kotlin/androidx/compose/material/package-summary#swipetodismiss) -
Feed list: [mark above as read, mark below as read] -
Feed list: Unread status indicated by alpha channel on text -
Feed list: FAB -
Reader: Bare minimum table rendering -
Reader: Respect fetch image settings -
Reader: Marks as read when opened -
Reader: Respects option for opening in custom tab or reader -
Reader: Read aloud -
Intent support for sharing to feeder etc -
Drawer counters update dynamically (try @Immutable
?) -
General: Notifications and app shortcuts use intents constructed via Navgraph DeepLink builder -
Fix GitLab pipeline -
Verify F-Droid build
Release
-
Jetpack Compose v1.0 has been released and dependencies updated. -
No more compose related TODOs -
All screens: Verify RTL behavior -
Feed list: Swipe to refresh possible in empty view -
General: Alpha channel of certain texts, like captions, have been set -
Reader: Sizes of H1-6 tags finalized -
Reader: Code block style finalized -
Reader: Block quot style finalized -
Reader: Youtube thumbnails -
Reader: Feed title clickable in title section -
CustomTab: Toolbar matches rest of app in dark mode -
Sync on start if setting enabled -
Dropdown menus: menu should close after external actions (like share) -
Feed list: Scroll state should be retained when flow updates (like switching between read/unread) -
Settings: Remove preload custom tab option -
General: Dark theme has dark bottom bar (with home button, back, etc): https://google.github.io/accompanist/systemuicontroller/ -
Crash: When opening TheRegister article, full text by default. Worked second time -
Verify app shortcuts -
Feed list: Should long press dropdown menu item be added? [share, open feed, edit feed] -
SwipeToDismiss should not prevent navigation drawer from being dragged out from edge] -
Selecting text in reader - should then be possible to tap outside selection to cancel it but ClickableText prevents this -
The system top bar should not be green in dark mode. -
Ensure performance is top notch -
Should dropdown menu items have icons or not? -
Notification: Mark to read should be a broadcast and not a startActivity intent
This stack trace needs investigating (opened from feed, configured full text by default, it fetched article):
2021-08-29 08:28:37.074 9365-9365/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.nononsenseapps.feeder.debug, PID: 9365
java.lang.IllegalStateException: pending composition has not been applied
at androidx.compose.runtime.CompositionImpl.drainPendingModificationsForCompositionLocked(Composition.kt:443)
at androidx.compose.runtime.CompositionImpl.composeContent(Composition.kt:475)
at androidx.compose.runtime.Recomposer.composeInitial$runtime_release(Recomposer.kt:727)
at androidx.compose.runtime.ComposerImpl$CompositionContextImpl.composeInitial$runtime_release(Composer.kt:2980)
at androidx.compose.runtime.CompositionImpl.setContent(Composition.kt:432)
at androidx.compose.ui.layout.SubcomposeLayoutState.subcomposeInto(SubcomposeLayout.kt:259)
at androidx.compose.ui.layout.SubcomposeLayoutState.access$subcomposeInto(SubcomposeLayout.kt:145)
at androidx.compose.ui.layout.SubcomposeLayoutState$subcompose$2.invoke(SubcomposeLayout.kt:234)
at androidx.compose.ui.layout.SubcomposeLayoutState$subcompose$2.invoke(SubcomposeLayout.kt:231)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.withNoObservations(SnapshotStateObserver.kt:144)
at androidx.compose.ui.node.OwnerSnapshotObserver.withNoSnapshotReadObservation$ui_release(OwnerSnapshotObserver.kt:49)
at androidx.compose.ui.node.LayoutNode.withNoSnapshotReadObservation$ui_release(LayoutNode.kt:1107)
at androidx.compose.ui.layout.SubcomposeLayoutState.subcompose(SubcomposeLayout.kt:231)
at androidx.compose.ui.layout.SubcomposeLayoutState.subcompose(SubcomposeLayout.kt:226)
at androidx.compose.ui.layout.SubcomposeLayoutState.subcompose$ui_release(SubcomposeLayout.kt:215)
at androidx.compose.ui.layout.SubcomposeLayoutState$Scope.subcompose(SubcomposeLayout.kt:466)
at com.google.accompanist.insets.ui.ScaffoldKt$ScaffoldLayout$1$1.invoke(Scaffold.kt:275)
at com.google.accompanist.insets.ui.ScaffoldKt$ScaffoldLayout$1$1.invoke(Scaffold.kt:194)
at androidx.compose.ui.layout.MeasureScope$layout$1.placeChildren(MeasureScope.kt:333)
at androidx.compose.ui.layout.SubcomposeLayoutState$createMeasurePolicy$1$measure$1.placeChildren(SubcomposeLayout.kt:357)
at androidx.compose.ui.node.LayoutNode$layoutChildren$1.invoke(LayoutNode.kt:925)
at androidx.compose.ui.node.LayoutNode$layoutChildren$1.invoke(LayoutNode.kt:915)
at androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.kt:115)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:123)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:75)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeLayoutSnapshotReads$ui_release(OwnerSnapshotObserver.kt:56)
at androidx.compose.ui.node.LayoutNode.layoutChildren$ui_release(LayoutNode.kt:915)
at androidx.compose.ui.node.LayoutNode.onNodePlaced$ui_release(LayoutNode.kt:901)
at androidx.compose.ui.node.InnerPlaceable.placeAt-f8xVGno(InnerPlaceable.kt:94)
at androidx.compose.ui.layout.Placeable.access$placeAt-f8xVGno(Placeable.kt:31)
at androidx.compose.ui.layout.Placeable$PlacementScope.place-70tqf50(Placeable.kt:315)
at androidx.compose.ui.node.OuterMeasurablePlaceable.placeAt-f8xVGno(OuterMeasurablePlaceable.kt:149)
at androidx.compose.ui.node.OuterMeasurablePlaceable.replace(OuterMeasurablePlaceable.kt:161)
at androidx.compose.ui.node.LayoutNode.replace$ui_release(LayoutNode.kt:811)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.measureAndLayout(MeasureAndLayoutDelegate.kt:215)
at androidx.compose.ui.platform.AndroidComposeView.measureAndLayout(AndroidComposeView.android.kt:510)
at androidx.compose.ui.platform.AndroidComposeView.dispatchDraw(AndroidComposeView.android.kt:666)
at android.view.View.draw(View.java:21597)
at android.view.View.updateDisplayListIfDirty(View.java:20471)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4397)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4370)
at android.view.View.updateDisplayListIfDirty(View.java:20431)
Nice to haves
-
HtmlToPlainText: Ruby handling: ignore RT tags -
General: AMOLED toggle for dark mode -
Reader: Some kind of Ruby handling -
Reader: Actual table rendering, with horizontal scroll if wide -
Reader: Youtube video player -
Reader: General video player for html5 video -
General: View models correspond to screens -
All screens: Toolbar dropdown menu width adjusted -
Can feed items have clearer separation? Maybe padding?