I made my first Android app. Well, I didn’t write it from scratch, I took an open source camera app and just renamed and modified it a bit, and rebuilt it.
I called it Trax Cam.
It is a fork of Open Camera. The initial, test version of Trax Cam makes just two small improvements over Open Camera:
- improving the visual difference of the shutter buttons between video and photo mode, recording and not recording, by contrasting colour and style;
- not forgetting the zoom level when temporarily switching to another app and back, switching between photo and video modes, and the like.
Impressive? Is this everything you have ever wanted from a camera app? No, I didn’t think so. That’s not the point of it. Dear reader, it’s not for you. Not yet, anyway. Sorry!
Trax Cam is not yet intended as a product for ordinary users. Rather, the purpose of this project, at least initially, is as a learning exercise for me. The status of it, at the time of writing, is it is stable, being based on a stable version of Open Camera, and I am running it as my main camera app on two different phones, but I am not committing to making further fixes or updates. I might or might not continue developing or updating it. Switching to other projects will give me a broader and probably more useful learning experience.
Default Camera for /E/-OS
/e/-foundation‘s /e/-OS comes with OpenCamera as its default camera app. I had previously installed OpenCamera on my main LineageOS-powered phone, alongside the default LineageOS camera code-named ‘snap’.
I would sometimes switch between OpenCamera and ‘snap’. I like different things about them, mainly the range of options in OpenCamera and the simplicity of ‘snap’, with neither of them managing to bring the best possible combination, and both still having annoyances and room for improvement.
It was while evaluating /e/ that I noticed again several of the shortcomings of OpenCamera, and decided it could be time for me to do something about it. I had some ideas noted in my head, and have now written them down in a bug tracker.
Trax Cam Issues: https://lab.trax.im/trax.im/traxcam/-/issues . Issue #1 is Remember my zoom level , #2 is Boldly indicate photo/video/recording states (both still “open” as I am not satisfied that I have yet completed them as well as could be done), and I have opened several more.
At the same time, I discovered /e/-foundation is recruiting among other positions a Camera developer: “[You want] to make open source camera apps as good as high-end camera apps?” (If you are an “experienced (5+ years) Android developer”, check it out.) It’s good to see that /e/-foundation recognizes the need and seems to have some resources to tackle it.
In my opinion, one thing /e/ could do to encourage volunteer developers to develop OpenCamera (or another) in a useful direction for /e/ and other libre Android uses, would be to publish a road map or a prioritization of issues for what they consider needs to be done. I feel that projects providing a summary of what they want done is often missing and often a surprisingly effective driver in open source development. Developers tend to be quicker and more efficient at implementing something that is at least loosely specified (along with rationale to explain why) than creating something that they need to invent from scratch.
Comparing with Other Cameras
Besides OpenCamera and Lineage ‘snap’ I also briefly tried FreeDCam and OxygenOS camera (proprietary). Those each have some very slick UI designs which bear studying and would be nice to bring in. In particular, if I recall correctly they both use swipe to review the last and earlier taken pictures, which seems to me more intuitive and easier to use.
I noticed the OxygenOS camera used slick-looking rotary dials for analogue settings such as exposure compensation. I really liked this at first sight. In use, I found their behaviour a bit fussy and skiddy, easy to leave it on a random in-between value, hard to return quickly to the previously used value. It would be great if we could create something along those lines of analogue beauty, but with more positive and robust behaviour to set and leave a desired value. For example, I think it is common and so needs to be easy to switch between “auto” and the last used non-auto value. (Not just for camera controls, indeed, but for all kinds of settings in all apps.)
Available on My F-Droid App Store
You can try out Trax Cam if you like, even though it is not (currently) aimed at general use. https://fdroid.foad.me.uk/fdroid/repo/im.trax.cam_80.apk is a direct link to the installer file for my initial test version. It’s not published on Google Play store. You will need your “install from unknown sources” option enabled in Android settings.
I also put up my own F-Droid app store, and put Trax Cam up on it, so we can install it on phones through the f-droid app. This too is not currently intended for general end users. However, you are welcome to try it. First install the f-droid app (https://f-droid.org/), then add my repository’s URL (https://fdroid.foad.me.uk) under settings, repositories, add.
If you are unfamiliar with F-Droid, it comprises:
- an Open/Libre app store system by which anyone can set up and serve their own app repository, and anyone can browse and install apps from such repositories; and
- the F-Droid app, for browsing and installing apps from any such repositories; and
- a repository of Free/Libre apps for Android, which is the default repository that the F-Droid app connects to until you tell it about other ones.
Putting up my own app store is part of my ambition to support independent creation of free/libre software and self-owned services.