A while ago I saw this animation on /r/internetisbeautiful. I highly recommend you go check it out for yourself on your browser. It sure looks better in 60 fps and also way smoother in 120+ fps. Although there is nothing fancy going on, small details in the animation makes it quiet nice to watch. Naturally, I’ve decided to implement it using Jetpack Compose. I thought there would be fun challenges behind a simple animation like this when I dive into the implementation details. Initially my assumption was
Lifecycle Coroutine Extensions were introduced some time ago to ease the usage of coroutines in Android world. You can learn more about them here.
In this post, I’m going to assume the reader already has experimented with
lifecycleCoroutineScope in either at least one activity or fragment. Although the documentation gives quite good information about how to use these extension scopes, I find it’s a little mystical about how these extensions are actually implemented.
In this post, we are going to read the source code together and make sense of some coroutine concepts with cross-references to some other documentation that we…
Disclaimer: This article is written by a developer who have not yet migrated their fragments to Jetpack Navigation Component, therefore lack crucial experience in it. Although the author have researched the use-cases of Fragment Result within Navigation Component, some of the things that are discussed below may not hold in some unforeseen situations.
Fragment Result API was introduced in
Fragment artifact of
AndroidX with the version
1.3.0-alpha04 . Since then, it hasn’t received many changes to either its API or implementation detail. Its main goal was noted in the release notes:
Added support for passing results between two Fragments via…
It is not uncommon that once you run into an issue with Intrumentation Testing in Android, you’d feel like the loneliest person in the world. This might be an unforeseen effect of abundance of Android knowledge that exists on the Internet. Whatever you search for, there is always a StackOverflow answer or a Medium article that exactly describes what you need to do. However, this doesn’t hold for testing. My assumption is that this trend would hold in many other areas of Software Engineering. …
So far in this series we’ve achieved to play a video in a Composable. Through component dependencies, the video player also supported changing the source. Finally, the video player also returned media controls interface which allowed us to implement our own control buttons outside the player view. We are going to focus on adding a more sophisticated control unit in this article. Initially the plan was to also go over implementation of gestures in this article but it had changed to keep the article short and concise.
First of all, we want to include a…
This post has been edited after Beta release of Jetpack Compose.
Before we start with how to play a video in a composable view, we need to decide on a player class. It would be rather a huge undertaking to develop a player from scratch. In this project, we are only interested in UI side of things. That relieves us from individual frame rendering, remote data fetching, and state management of a classic media player.
This write-up is divided into 5 cohesive parts for better delivery. This post is about getting into Jetpack Compose for the first time and figuring out little details before moving onto more concrete implementations with clear goals. The link for next posts can be found at the bottom.
Jetpack Compose is a modern toolkit for building native Android UI. It’s based on the declarative programming model, so you can simply describe what your UI should look like, and Compose takes care of the rest — as app state changes, your UI automatically updates.
Incidents are the times where fast and reliable communication becomes the highest priority in a team. When not just minutes but seconds matter, an easy way to reach to responders may resolve an incident in a shorter time which potentially saves a company millions of dollars. That’s why Opsgenie had introduced a feature called Incident Command Center(ICC) back in January of 2018. This feature can be grossly summarized as a VoIP application with video support. Opsgenie has committed to improve and expand ICC beyond being just a quirk since its inception. …
We probably all remember the old(like 4 years ago?) days of Android development when the presentation layer was merged into Activity code. We had to include code snippets like below everytime a view manipulation was needed.
TextView mNameTextView = (TextView) findViewById(R.id.name_textview)
These type of lines that are enforced by the framework are called boilerplate and often their number is inversely correlated with readability of the code. Good news is that this problem has been addressed for a long time. ButterKnife might be considered the most successful 3rd party implementation of View Binding concept using annotations. …
Opsgenie@Atlassian / Android Engineer