Frontend rewrite
Operation 'Fantasy Fudge'
Task: Rewrite the activity-based fudge UI in an immediate-mode UI library.
Why: Current UI is slow, has too much state code, only works in portrait mode, and is hard to maintain.
- [ ] Main Screen
- [ ] Image Gallery
- [ ] Load thumbnails currently in view as user scrolls
- [ ] Load thumbnails in the background
- [ ] Load in metadata on idle
- [ ] Image viewer
- [ ] Progress bar
- [ ] Zoomable image viewer
Things that should improve/be added:
- Swipe in gallery (https://github.com/petabyt/fudge/issues/13)
- Support landscape mode
- Remove lag/stutter
- Reduce LoC and maintenance burden
- Geolocation menu (https://github.com/petabyt/fudge/issues/21)
Jetpack Compose
- Recommended Android UI library, used by Google for Google Play, settings app, etc
- Kotlin has great Java interop
- Good FFI support (JNI)
- iOS and desktop support with compose multiplatform
- Backed by Google and JetBrains
- A slow migration can be done, since compose allows embedding views and using legacy view code
Flutter
- Android/iOS/Desktop
- I think Dart is a bad language
- Jank bugs (https://medium.com/@chamithmathukorala/shader-compilation-jank-in-flutter-8cc9d92aa8b3)
- Bad FFI support last time I checked
- Not good Java interop
- Google might kill it (?)
Challenges
-
Gallery is really hard to deal with. It has to lazy load thumbnails (many times slower than loading local files) and keep up with quick scrolling (loading last seen first), as well as loading in metadata when the thunbnail loader is idle. This works OK right now, but it still stutters.
-
Learning curve. I normally do embedded development so jumping to a very high level language like Kotlin screws with my head and the way I'm used to reading code.
Hello @petabyt, thanks for the app I didn't used it yet, just discovering open source projects related to Fujifilm 😄
What about React Native https://reactnative.dev?
It has a great community and framework like Expo https://expo.dev and a lot of great packages just install and use(I believe for galleries as well example https://github.com/pavelbabenko/react-native-awesome-gallery)
It does have Android, iOS, Web support out of the box, a lot of great packages and you can integrate native code too if you want
Main language is JS/TS, and easy to write UI there(custom or some predefined UI library)
What do you think?
ps. Apps like Tesla and BlueSky were built with React Native Expo
I tried a while ago and I had some problems with React Native FFI support. Fudge is mostly C/C++ and being able to do a lot of Java/C interop is important. I also hate JS/TS, so I'd like to stay away from that ecosystem...
Hello, I'm thrilled to have found an unofficial alternative to xapp. I haven't started using it yet. Recently, while transferring photos through xapp, my camera ran out of battery, which led to me having to reselect the photos. I find some aspects of xapp's interaction design unreasonable. As a mobile developer, I plan to review your code and try using Kotlin Multiplatform to help build a cross-platform front end. I hope this aligns with the project's roadmap and look forward to contributing.