KOTLIN
Getting Started with Kotlin
Kotlin Basics
Object-Oriented Code in Kotlin
Functions in Kotlin
Higher Order Functions and Functional Programming
Properties
Null Safety, Reflection, and Annotations
Generics
Data Classes
Collections
Testing in Kotlin
Concurrency
ANDROID
The Necessary Tools
Downloading and Installing Android Studio
Downloading Earlier SDK Versions
A Hardware Device
First Android Application
App Basics
Creating an Android Project
Navigating in Android Studio
Laying Out the UI
From Layout XML to View Objects
Wiring Up Widgets
Add a Listener to the TextView
Making Toasts
The Activity Lifecycle
Logging the Activity Lifecycle
Rotation and the Activity Lifecycle
Saving Data Across Rotation
Debugging Android Apps
Exceptions and Stack Traces
Android-Specific Debugging
Exploring the Layout Inspector
Exploring Allocation Tracking
Your Second Activity
Setting Up a Second Activity
Starting an Activity
Passing Data Between Activities
How Android Sees Your Activities
Android SDK Versions and Compatibility
Android SDK Versions
Compatibility and Android Programming
Using the Android Developer Documentation
Reporting the Build Version
UI Fragments and the Fragment Manager
The Need for UI Flexibility
Introducing Fragments
Starting SampleIntent
Hosting a UI Fragment
Creating a UI Fragment
Adding a UI Fragment to the FragmentManager
Application Architecture with Fragments
Fragments and the Support Library
Why Support Fragments Are Superior
Displaying Lists with RecyclerView
Singletons and centralized data storage
An Abstract Activity for Hosting a Fragment
RecyclerView, Adapter, and ViewHolder
Binding List Items
Responding to Presses
ListView and GridView
RecyclerView ViewTypes
Creating User Interfaces with Layouts and Widgets
Using the Graphical Layout Tool
Introducing ConstraintLayout
More on Layout Attributes
The Graphical Layout Tools and You
Using Fragment Arguments
Starting an Activity from a Fragment
Fragment Arguments
Reloading the List
Getting Results with Fragments
Efficient RecyclerView Reloading
Using View Pager
Creating SamplePagerActivity
FragmentStatePagerAdapter vs. FragmentPagerAdapter
How ViewPager Really Works
Laying Out Views in Code
Dialogs
Creating a DialogFragment
Passing Data Between Two Fragments
More Dialogs
A Responsive DialogFragment
The Toolbar
AppCompat
Menus
Enabling Hierarchical Navigation
An Alternative Action Item
Action Bar vs. Toolbar
SQLite Databases
Defining a Schema
Building Your Initial Database
Writing to the Database
Reading from the Database
More Databases
Implicit Intents
Using Implicit Intents
Taking Pictures with Intents
A Place for Your Photo
File Storage
Using a Camera Intent
Scaling and Displaying Bitmaps
Declaring Features
Efficient Thumbnail Load
Two-Pane Master-Detail Interfaces
Adding Layout Flexibility
Activity: Fragment Boss
More on Determining Device Size
Adding Swipe to Dismiss
Localization
Localizing Resources
Configuration Qualifiers
Testing Alternative Resources
Localizing Dates
Unit Testing and Audio Playback
Creating a SoundPool
Loading Sounds
Playing Sounds
Test Dependencies
Creating a Test Class
Setting Up Your Test
Writing Tests
Data Binding Callbacks
Unloading Sounds
Rotation and Object Continuity
Styles and Themes
Color Resources
Styles
Themes
Adding Theme Colors
Overriding Theme Attributes
Modifying Button Attributes
More on Style Inheritance
XML Drawables
Making Uniform Buttons
Shape Drawables
State List Drawables
Layer List Drawables
Mipmap Images
9-Patch Images
More About Intents and Tasks
Resolving an Implicit Intent
Creating Explicit Intents at Runtime
Tasks and the Back Stack
Processes vs. Tasks
Concurrent Documents
HTTP and Background Tasks
Creating PhotoGallery
Networking Basics
Using AsyncTask to Run on a Background Thread
You and Your Main Thread
Fetching JSON from Flickr
From AsyncTask Back to the Main Thread
Cleaning Up AsyncTasks
More on AsyncTask
Alternatives to AsyncTask
Gson
Loopers, Handlers, and HandlerThread
Preparing RecyclerView to Display Images
Downloading Lots of Small Things
Communicating with the Main Thread
Assembling a Background Thread
Messages and Message Handlers
AsyncTasks vs. Threads
Solving the Image Downloading Problem
Preloading and Caching
Search
Using SearchView
Simple Persistence with Shared Preferences
Background Services
Creating an IntentService
What Services Are For
Looking for New Results
Delayed Execution with AlarmManager
Controlling Your Alarm
Notifications
Service Details
JobScheduler and JobServices
Using JobService on Lollipop
Sync Adapters
Broadcast Intents
Regular Intents vs. Broadcast Intents
Receiving a System Broadcast: Waking Up on Boot
Filtering Foreground Notifications
Receivers and Long-Running Tasks
Local Events
Browsing the Web and WebView
Implicit Intents
WebView
Proper Rotation with WebView
Injecting JavaScript Objects
WebView Updates
Using the Back Button for Browser History
Supporting Non-HTTP Links
Custom Views and Touch Events
Setting Up the DragAndDraw Project
Creating a Custom View
Handling Touch Events
Rendering Inside onDraw(Canvas)
Rotating Boxes
Property Animation
Simple Property Animation
Playing Animators Together
Other Animation APIs
Locations and Play Services
Locations and Libraries
Play Services and Location Testing on Emulators
Setting Up Google Play Services
Using Google Play Services
Getting a Location Fix
Asking for Permission at Runtime
Find and Display an Image
Maps
Importing Play Services Maps
Getting a Maps API Key
Setting Up Your Map
Getting More Location Data
Working with Your Map
Material Design
Material Surfaces
Animation Tools
View Components