Image for post
Image for post

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.

Image for post
Image for post

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…


Image for post
Image for post

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. …


Image for post
Image for post
Controls overlay with a simple Play/Pause button

Part 1 ; Part 2

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.

Basic Control Buttons

First of all, we want to include a…


Image for post
Image for post
BetterVideoPlayer Preview, one of my earlier projects

This write-up is divided into 5 cohesive parts for better delivery. This post is the second in this series. It is about playing a video from a remote source by using Jetpack Compose. The link for other posts can be found at the bottom.

Deciding on a Player

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. …


Image for post
Image for post

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.

What is Jetpack Compose?

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.

Declarative UI frameworks took the web by…


Image for post
Image for post

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. …


DataBinding — Less Boilerplate

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. …


This is a part from my ongoing writing series on how I started working with blockchain. I think it deserves a special post because I probably will reference it in my future talks.

Famously, blockchain is the technology, design, algorithm that makes Bitcoin possible. Luckily, basic structure is loosely coupled to Bitcoin requirements, so that it has many use cases in various fields. Through out 2 years, many people asked me the same question, what is blockchain, again and again and my answer kept evolving. Current draft of my answer is as follows:

  • Think of a basic linked list.
  • In…


I was just about to start writing this blog when Medium editor warned me that Blockchain is not a recognized English word. Shame on you Medium!

About 2 years ago when I was in my junior year at Computer Science in Bilkent University, my friends suggested me to take the senior design project a year early and join their group. I thought to myself that this was a great chance to gain a rare experience in college. Also, this would mean clearing my senior year from many troubles. So, I agreed.

They had already decided on the supervisor and already…

Halil Ozercan

Opsgenie@Atlassian / Android Engineer

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store