Project containing Jetpack Compose samples
For pagination & network images it uses CATAAS.
Known issues
Navigation-Compose
- Issue with fast tapping on destination
Paging
- Can't declare state listeners on the Flow<PagingData> or Pager or similar. We're forced to propagate important events from bottom to top instead of top to bottom. issue
Modal Drawer
Google Maps
Keyboard
- issue with changing focus on backpress ( affecting OTP sample )
- issue with adjustPan mode not pinning to the focused textField
- issue with keyboard being hidden when focus is shared between composables & views
Miscellaneous
- We can't drop usage of liveData completely since we can't return stateFlow from the savedStateHandle, also it is still needed for scenarios which cover flow being observed with flatMapLatest ( as a typical scenario for searching by query ). Latter issue
- drag & drop feature. possible workaround, library
- there is no out of the box support for scroll bars as of August 19, 2021. Sample for simple cases
- bottomSheet destination is not preserved by default when navigating to new destination and coming back. Workaround
- no way to create nested sticky headers. Workaround imo is changing design or making one lvl of the headers as a composable that animates text changes.
- LazyVerticalGrid seems to be really imperformant and not adviced to use. Instead use combinations of Column + Rows
- Fling breaks on skipped frames. issue
- Need to find an alternative to onboarding guides from the view system like these libraries provided: onboardingFlow,TapTargetView,Spotlight
Limitations
- We're forced to use ProvideWindowInsets composable as a wrapper for composables in fragment based projects
- There is no way to navigate from composable to fragment & share a navigation graph between them. (not an issue)
- Deep links might require lot of additional work if we need to open them in a specific bottom bar / drawer tab.
- Navigating with parcelable object might be causing issues due it's hacky logic
- We need to use setViewCompositionStrategy when working with fragments
- Surface composable has issue with elevation overlapping. This is considered a proper behaviour and one of the workarounds would be using Scaffold.
TODO
CameraX
- investigate crashe on orientation change
Paging ( all cases should be tested with both PagingSource & RemoteMediator versions ).
- add sample of how to use maxSize
- scroll to top feature with maxSize (page dropping) enabled.
- paging with Grids
- allow modifying lists using selectedIds array, to ensure any modification behaviour is working well & can be properlly restored across PD ( eg. selection, checkboxes )
- immitate socket updates ( eg. stock price updates or smth )
- check out if it's a bug or misconfiguration inside paging+room sample. Upon entering the screen we're fetching twice.
Pager
- check & fix bad performance on viewPager sample.
- check & fix/file issue with scroll indicator going only to the right side upon swiping. video
- add tab indicator animation like on google weather application.
Snap behaviour ( seems there is already WIP on it and it might be available on accompanist soon
- simple snap like in pager (for lazyColumns/rows)
- snap to X items, eg. snap to 3 visible items
- grid snapping
Uncategorized
-
spinners with a lot of items like country flags etc.
-
Container transformations. eg. small circle from bottom end of the screen floats to the center of the screen and changes it's size. Both back& forward animations should be flawless and tested across PD.
-
Hide bottomBar on scroll
-
Animations typical for iOS. can be found in olx, monobank. When we scroll something, toolbar changes content relatively to some text/icon being scrolled behind the toolbar
-
Draw / hide something using coordinates. Look into
onGloballyPositioned
modifier -
How to do custom shapes ripples
-
Complex motion layout example ( currently it supports only 2 states so might be left for later )
-
Staggered grid example
-
circular reveal upon changing theme
-
cool transformation animations in google owl sample
-
https://github.com/Skyyo/drawing-floating-objects-inside-view in compose
-
compose with ad mob
-
enhance parallax sample, show how to add snapping behaviour
-
add more animate on scroll animations
-
add on scroll animation using animatable DP
-
App bar auto elevation for dark theme sample
-
draggable sample like here. Sample which allows to drag elements in 1 screen from top, right & bottom for example.
-
exoplayer sample with gestures like here
-
check if exoplyaer sample with indexes is reliable when used with paging library
-
memory leaks in compose section
-
add flexible autocomplete & auto-fill sample/samples
-
add reselect bottomBar tab listener and dispatch this event to the composable.
-
try out media3 and think whether it makes sense, and what are its strong sides
License
MIT License
Copyright (c) 2021 Denis Rudenko
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.```