
Fragmented - Android Developer Podcast
The Fragmented Podcast is the leading Android developer podcast started by Kaushik Gopal & Donn Felker. Our goal is to help you become a better Android Developer through conversation & to capture the zeitgeist of Android development. We chat about topics such as Testing, Dependency Injection, Patterns and Practices, useful libraries, and much more. We will also be interviewing some of the top developers out there. Subscribe now and join us on the journey of becoming a better Android Developer.
Latest episodes

Jul 8, 2019 • 22min
168: Learning Kotlin: Lambda Expressions Part 2
In this episode, Donn continues his talks about Kotlin Lambda Expressions. He explains how you can use lambda expressions as function parameters and as return types for functions.
This is a very dense episode - if you get lost look at the code snippets below or view on them on fragmentedpodcast.com
class LogReader {
fun processFile(file: File, processLine: (String) -> Unit = {}) {
file.forEachLine {
println("Number of Chars: ${it.length}")
processLine(it)
println("Line Done Processing")
}
}
fun processFileWithHandlers(file: File, logHandler: LogHandler) {
file.forEachLine {
println("Start of Processing")
logHandler.handleLine().forEach { handler -> handler(it) }
println("Line Done Processing")
}
}
}
interface LogHandler {
fun handleLine(): List<(String) -> Unit>
}
val reader = LogReader()
val textFile = File("/Users/donnfelker/scratch/lorem.txt")
// Process with single lambda
reader.processFile(textFile, { println("First 10 Chars: ${it.substring(0..9)}") })
val logHandler = object : LogHandler {
override fun handleLine(): List<(String) -> Unit> {
return listOf<(String) -> Unit>(
{ line -> println("${line.substring(0, 1)}") },
{ line -> println("${line.substring(2, 4)}") },
{ line -> println("${line.substring(5, 10)}") }
)
}
}
// Process with multipe handlers via the logHandler
reader.processFileWithHandlers(textFile, logHandler)
Sponsors 🙏
sentry.io - Your code is broken. Let’s fix it together - https://sentry.io/for/android/
Contact
Discord chat or @fragmentedcast or our Youtube channel
@donnfelker and donnfelker (on Instagram)
@kaushikgopal and kaushikgopal (on Instagram)

Jul 1, 2019 • 50min
167: Clean Architecture with Joe Birch
Donn sits down with Buffer Android Lead, Joe Birch. Joe is a GDE for Android, Google Actions, Flutter and Google Pay. In this episode Donn and Joe talk about Clean Architecture, what it is, and why you might want to use it.
They break down the concept of what Clean Architecture is in a manner that is easy for even a beginner to understand.
Enjoy.
Shownotes
Caster.IO Course
[Uncle Bob Clean Arch]https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html
Buffer Clean Architecture BoilerPlate
Chord Assist Guitar
Get ahold of Joe:
Joe Birch Twitter
Joe Birch Instagram
Sponsors 🙏
sentry.io - Your code is broken. Let’s fix it together - https://sentry.io/for/android/
Contact
Discord chat or @fragmentedcast or our Youtube channel
@donnfelker and donnfelker (on Instagram)
@kaushikgopal and kaushikgopal (on Instagram)

Jun 24, 2019 • 45min
166: Cross platform development talk with Jesse Wilson
Kaushik decides to hit record on a skype call he has with friend of the show Jesse Wilson. They start off by discussing building features across different platforms today. Jesse talks about a clever mechanism of using javascript to change logic on the fly across the Square cash app, that's worked out pretty well. They then go on to discussing how one can try and converge across platforms in terms of business logic, architecture, naming etc. They then wind it down by discussing the state of Flutter, Kotlin multiplatform and reaching the promised land.
Enjoy.
Shownotes
objc.io
Kevin Galligan
Alec Strong
Egor Andreevich
Sponsors 🙏
Instabug
Instabug completely takes care of your beta testing and user feedback process so you can debug, fix, and improve your app quality faster. They're giving Fragmented listeners a special bonus when you go to instabug.com/fragmented - Signup for free, install the SDK, and you will get Instabug's brand new t-shirt
Contact
@jessewilson
@chrismlacy
@donnfelker and donnfelker (on Instagram)
@kaushikgopal and kaushikgopal (on Instagram)

Jun 17, 2019 • 16min
165: Learning Kotlin: Lambda Expressions Part 1
In this episode, Donn talks about Kotlin Lambda Expressions. He explains the syntax and how to build a couple of simple lambda expressions with and without type inference and declaration. We wrap up with a small example of passing a small lambda with multiple values to a function. See the show notes below for more info. This is part 1 of a multi-part series on Lambda Expressions in Kotlin.
The basic syntax of a lambda expression:
val myLambda : Type = { argumentList -> codeBody }
The codeBody is the only section that is not optional.
Double lambda expression (doubles an integer) with type inference
val double = { number: Int -> number * 2 }
val result = double(4)
// result = 8 now
Double string multi-line lambda with type inference.
val doubleString = { number: Int ->
// codebody
val doubleResult = number * 2
doubleResult.toString()
// Kotlin knows this will return a string
}
Type declaration in a lambda
val myLambda: (String, Int) -> String = { str, int ->
"$str - ${int.toString()}" // "Donn - 32"
}
val result = myLambda("Donn", 32)
// result = "Donn - 32"
Preview of next week … passing a lambda to a function
fun doWork(name: String, favoriteNumber: Int, someLambda: (String, Int) -> String) {
// Do some processing, this is a contrived example
val repeatedString = "$name$name"
val result = someLambda(repeatedString, favoriteNumber)
println(result)
}
// Usage
doWork("Donn", 32) { str, int ->
val someNewValue = "$str is my parameter and so is $int"
someNewValue.length.toString() // this is returned
}
// '37' is printed via println
// Or use it like this, the lambda code body is what can change, this is where the power is at
doWork("Donn", 32) { name, count ->
var result = ""
for(i in 1..count) { result += "$name" }
result // this is returned
}
// loops over and concatinates "Donn" until the favorite number (aka count) is met.
// Output looks like: "DonnDonnDonnDonnDonnDonn..." and so on...

Jun 10, 2019 • 21min
164: Learning Kotlin: Sealed Classes
In this episode, you'll learn all about Kotlin Sealed classes. Donn walks you through what they are, how to create them, how to use data classes, objects and regular classes to create a restricted type hierarchy.
Kotlin Sealed Classes
Sponsors 🙏
sentry.io - Your code is broken. Let’s fix it together - https://sentry.io/for/android/
Contact
Discord chat or @fragmentedcast or our Youtube channel
@donnfelker and donnfelker (on Instagram)
@kaushikgopal and kaushikgopal (on Instagram)

Jun 3, 2019 • 39min
163: Parallelize Your Espresso Tests with Flank w/ Matt Runo
In this episode, Donn talks to Matt Runo about the Flank project. Using Flank you can run your Espresso test suite in parallel on Firebase Test Lab (FTL). This allows you to lower your feedback loop time and increase developer productivity and throughput. You'll learn all about Flank, how it works and how to get started in this episode.
Sponsors 🙏
sentry.io - Your code is broken. Let’s fix it together - https://sentry.io/for/android/
Contact
Discord chat or @fragmentedcast or our Youtube channel
@donnfelker and donnfelker (on Instagram)
@kaushikgopal and kaushikgopal (on Instagram)

May 27, 2019 • 53min
162: Catching up on Google IO 2019
Shownotes
Digital trends: Comparing Pixel 2, 3 and 3A
Google Activity tracking
Google Activity tracking Controls
Flutter for Web
New navigation paradigm in Android Q
What's new in Android Deveopment Tools - Torr's IO talk
Contact
Discord chat or @fragmentedcast or our Youtube channel
@donnfelker and donnfelker (on Instagram)
@kaushikgopal and kaushikgopal (on Instagram)
Sponsors 🙏
Instabug - Instabug is an SDK that completely takes care of your beta testing and user feedback process so you can debug, fix, and improve your app quality faster. Go to instabug.com/fragmented, signup, install the SDK, and you will get their brand new t-shirt and a 14-day free trial.

May 20, 2019 • 59min
161: Machine Learning on Android with ML Kit and TensorFlow with Dan Jarvis
In this show, Donn talks with Dan Jarvis about Machine Learning on Android with ML Kit and Tensor flow.
They dive deep into what ML (Machine Learning) is, what you need to know as a developer and how to apply those things to build ML applications on Android.
They tal about what you can do on Android in regards to ML, model training and running the models on the device. You may be wondering if you should include the model in your app or if it should live on a server, that's discused as well and the reasons for it.
They wrap up the show with some examples of what you could build and some great resources to get you started.
Enjoy
Shownotes
What Can Machine Learning Do?
ML Kit
ML Kit Demo Video
ML Kit Quickstart
Image Labeling Example
Custom Models
How Does Prisma Work?
Cucumber Example
Tensorflow Demo Apps
Inside AI Newsletter
TensorFlow Lite
TensorFlow Lite (TF Dev Summit '19) - [VIDEO]
Custom On-Device ML Models with Learn2Compress
Microcontoller Support
Face Generation
DroidCon NYC Applied Tensorflow iN Android Apps
Sponsors 🙏
sentry.io - Your code is broken. Let’s fix it together - https://sentry.io/for/android/
Contact
Contact Dan Jarvis on LinkedIn, Medium or GitHub
Donn Felker - @donnfelker (Twitter) and donnfelker (Instagram)
Kaushik Gopal - @kaushikgopal (Twitter) and kaushikgopal (Instagram)
Fragmented on Twitter: @fragmentedcast
Our YouTube channel
Join thousands of other developers on our free chat server. Ask questions, answer questions, be part of the community at our The Fragmented Discord chat

May 13, 2019 • 12min
160: Increase App Engagement with Android Q
With the release of Android Q we now have the settings panel and all its glory. This panel, while most likely overlooked as a minor feature, is actually a diamond in the rough.
Why?
Simply because it's going to lower the abandonment rate of your app and increase the engagement of your app at the same time. Donn talks about this in depth in this episode.
Enjoy.
Shownotes
Android Q Features
Sponsors 🙏
sentry.io - Your code is broken. Let’s fix it together - https://sentry.io/for/android/
Contact
Discord chat or @fragmentedcast or our Youtube channel
@donnfelker and donnfelker (on Instagram)
@kaushikgopal and kaushikgopal (on Instagram)

May 6, 2019 • 52min
159: Improve Your App with the Android Material Components (feat. Cameron Ketcham & Connie Shi)
In this show, Donn and Kaushik talk to Cameron Ketcham and Connie Shi from the Android Material Components team at Google.
The Android Material Components are material designed components that you can easily drop into your application with just a few small tweaks. You get a bunch of fully built out material components, from the Android Material team at Google. From Chips, to Cards, to Buttons and much much more ... the goal is to enable you to build your application faster when using these components.
Donn and Kaushik talk to Cameraon and Connie about the components and how to use them in this episode.
Enjoy
Shownotes
Material.io Website
Android Material Components
Material Components GitHub
Tasks App
Developer Tutorials
AndroidDev Summit Talk
Material Theme Editor
Sponsors 🙏
sentry.io - Your code is broken. Let’s fix it together - https://sentry.io/for/android/
Contact
Contact Cameron and Connit at - GitHub Issues, StackOverflow
Donn Felker - @donnfelker (Twitter) and donnfelker (Instagram)
Kaushik Gopal - @kaushikgopal (Twitter) and kaushikgopal (Instagram)
Fragmented on Twitter: @fragmentedcast
Our YouTube channel
Join thousands of other developers on our free chat server. Ask questions, answer questions, be part of the community at our The Fragmented Discord chat