From bf3ff12c71a0e2538b2db1e8312ca6df4f4809fd Mon Sep 17 00:00:00 2001 From: Kevin Schildhorn Date: Fri, 25 Oct 2024 13:01:55 -0400 Subject: [PATCH] updating json --- shared/src/commonMain/resources/schedule.json | 17642 +++++++++++----- shared/src/commonMain/resources/speakers.json | 3918 +++- .../resources/sponsor_sessions.json | 6185 ++++-- 3 files changed, 20014 insertions(+), 7731 deletions(-) diff --git a/shared/src/commonMain/resources/schedule.json b/shared/src/commonMain/resources/schedule.json index 7c0ee62f..51e67758 100644 --- a/shared/src/commonMain/resources/schedule.json +++ b/shared/src/commonMain/resources/schedule.json @@ -1,24 +1,24 @@ [ { - "date": "2024-09-19T00:00:00", + "date": "2024-10-31T00:00:00", "isDefault": true, "rooms": [ { - "id": 49956, - "name": "Grand Ballroom 1", + "id": 49270, + "name": "Hangouts", "sessions": [ { - "id": "1f488259-530d-472b-a64e-e6bd821906f3", + "id": "26c67130-cbaa-40e1-8270-4daea240daa2", "title": "Registration & Check-In", "description": null, - "startsAt": "2024-09-19T07:30:00", - "endsAt": "2024-09-19T09:00:00", + "startsAt": "2024-10-31T07:45:00", + "endsAt": "2024-10-31T09:00:00", "isServiceSession": true, "isPlenumSession": true, "speakers": [], "categories": [], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 49270, + "room": "Hangouts", "liveUrl": null, "recordingUrl": null, "status": null, @@ -26,17 +26,17 @@ "isConfirmed": false }, { - "id": "4a9b5656-16e8-447d-b97a-83fc854b1b43", - "title": "Welcome", + "id": "f1e96bdd-8d47-4dd2-b814-1421662f1da1", + "title": "Welcome & Keynote", "description": null, - "startsAt": "2024-09-19T09:00:00", - "endsAt": "2024-09-19T09:15:00", + "startsAt": "2024-10-31T09:00:00", + "endsAt": "2024-10-31T09:10:00", "isServiceSession": true, "isPlenumSession": true, "speakers": [], "categories": [], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 49270, + "room": "Hangouts", "liveUrl": null, "recordingUrl": null, "status": null, @@ -44,51 +44,68 @@ "isConfirmed": false }, { - "id": "739401", - "title": "The Future of Android, Kotlin, and Everything", - "description": "Modern mobile and Android are a touch over 15 years old. Droidcon NYC 2024 is in its 10th year. Will we all look at some pictures? Of course! Maybe hear a few tips on running a conference.\r\n\r\nThen, it’s time to look forward.\r\n\r\nTech trends come and go. Some burn hot, then disappear. Some become essential. The web is essential. Mobile is essential. Whatever happens with mobile technology, the idea that mobile won’t be as, or more essential, 15 years from now is nonsense.\r\n\r\nHow mobile is developed and delivered is a different question altogether. This will be a talk about near-term tech possibilities, but not what mobile might look like in 15 years. I could speculate, and I'd be wrong. It will be a talk about how this community can shape that future, starting now.\r\n\r\nWhile the tech hype machine has hopped from one shiny concept to another, neither the web nor mobile has remained static. Far from it. We’re in a moment of change and opportunity. A very special moment for this community specifically. But the community is necessary to take advantage of it.", - "startsAt": "2024-09-19T09:15:00", - "endsAt": "2024-09-19T10:00:00", + "id": "731273", + "title": "Project Sparkles: how Compose is changing Android Studio", + "description": "We use Android Studio every day, and appreciate how its rich feature set makes our job easier. Most people know that Android Studio is built on the IntelliJ Platform, the same that underpins the popular IntelliJ IDEA from JetBrains, which has seen lasting success for over 20 years. It’s a solid, expansive, and by far the best foundation on which we could stand on to deliver Android-oriented goodies.\r\n\r\nHowever, some parts of the IntelliJ Platform show the signs of time; in particular its UI framework, Swing, is proving the most limiting, having been around for almost 30 years. Don’t get us wrong — it works, and the IDEs themselves prove you can ship complex UIs by using Swing on the IntelliJ Platform. But as we looked at how nice it is to develop UIs on Android by using Jetpack Compose, we thought: why don’t we do the same?\r\n\r\nEnter Project Sparkles, which aims at gradually introducing new high-quality, polished UI surfaces in Android Studio, developed in Compose for Desktop, with all the bells and whistles you can expect from a top-tier interface. In this talk, we’ll cover how Project Sparkles is impacting the development of Android Studio, addressing long-standing user feedback, and how we’re working together with other teams at Google and JetBrains to build a framework to make your favourite IDE even better and easier to understand.\r\n\r\nWe’ll demonstrate a few examples of features already shipping that are powered by Project Sparkles, explain what our goals and ambitions are, and even show some sneak peeks of things you may see in a future Studio version. UI enthusiasts, assemble!", + "startsAt": "2024-10-31T09:10:00", + "endsAt": "2024-10-31T10:00:00", "isServiceSession": false, "isPlenumSession": true, "speakers": [ { - "id": "9d2ecd4c-fd6e-444f-b80f-bd8ef04106ae", - "name": "Kevin Galligan" + "id": "e397fee8-078f-4694-8a1f-35b1d57f1fce", + "name": "Sebastiano Poggi" + }, + { + "id": "eb4483f1-306b-447d-9888-648ec0fc0018", + "name": "Chris Sinco" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254878, + "id": 264349, "name": "Introductory and overview" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254884, + "id": 264357, "name": "Keynote" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [], - "sort": 3 + "categoryItems": [ + { + "id": 264358, + "name": "Jetpack Compose" + }, + { + "id": 264379, + "name": "Android Studio" + }, + { + "id": 264390, + "name": "UI/UX" + } + ], + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 49270, + "room": "Hangouts", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -96,17 +113,17 @@ "isConfirmed": true }, { - "id": "798cf47a-e194-43ed-876e-fe7274c0a72d", + "id": "6cf72726-82b7-4eb4-8be1-93a3ecd92823", "title": "Break", "description": null, - "startsAt": "2024-09-19T10:00:00", - "endsAt": "2024-09-19T10:20:00", + "startsAt": "2024-10-31T10:00:00", + "endsAt": "2024-10-31T10:20:00", "isServiceSession": true, "isPlenumSession": true, "speakers": [], "categories": [], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 49270, + "room": "Hangouts", "liveUrl": null, "recordingUrl": null, "status": null, @@ -114,51 +131,60 @@ "isConfirmed": false }, { - "id": "722557", - "title": "Creating a Custom Compose Layout, Step-by-Step", - "description": "Building a custom layout in Jetpack Compose may seem intimidating, but it does not have to be. With an understanding of the tools available for custom layout, the phases of composition, and best practices for state management, anyone can create a powerful, beautiful custom layout.\r\n\r\nIn this talk, we will build a sophisticated schedule component step-by-step. This composable will include multiple display modes, theme-like encapsulation of styling and behaviors, scoped modifiers for easy customization, and even some animation.", - "startsAt": "2024-09-19T10:20:00", - "endsAt": "2024-09-19T11:00:00", + "id": "736883", + "title": "Optimizing Kotlin Code in Practice", + "description": "In this session we will look at a series of optimizations that were done in Jetpack Compose to learn how different types of optimizations can affect performance. These optimizations include code flow/algorithms, data structures, low-level bytecode optimizations, and memory optimizations. You will learn how to access and understand the bytecode and the machine code that your Kotlin code produces, so you can discover how to improve your applications on your own.", + "startsAt": "2024-10-31T10:20:00", + "endsAt": "2024-10-31T11:00:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "2d41d3fb-3321-4b47-a401-ae84a5de2423", - "name": "Huyen Tue Dao" + "id": "152f613f-841b-407d-9a65-3703ec2dfae2", + "name": "Romain Guy" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [], - "sort": 3 + "categoryItems": [ + { + "id": 264358, + "name": "Jetpack Compose" + }, + { + "id": 264359, + "name": "Kotlin" + } + ], + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 49270, + "room": "Hangouts", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -166,35 +192,17 @@ "isConfirmed": true }, { - "id": "d1d593f9-19a9-4819-8e01-9507be672f58", - "title": "Break", - "description": null, - "startsAt": "2024-09-19T11:00:00", - "endsAt": "2024-09-19T11:15:00", - "isServiceSession": true, - "isPlenumSession": true, - "speakers": [], - "categories": [], - "roomId": 49956, - "room": "Grand Ballroom 1", - "liveUrl": null, - "recordingUrl": null, - "status": null, - "isInformed": false, - "isConfirmed": false - }, - { - "id": "24579b25-f281-4c15-8db7-83eeb952975b", + "id": "29989aaa-e191-481d-bce4-3da2753edb6e", "title": "Break", "description": null, - "startsAt": "2024-09-19T11:55:00", - "endsAt": "2024-09-19T12:10:00", + "startsAt": "2024-10-31T11:00:00", + "endsAt": "2024-10-31T11:15:00", "isServiceSession": true, "isPlenumSession": true, "speakers": [], "categories": [], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 49270, + "room": "Hangouts", "liveUrl": null, "recordingUrl": null, "status": null, @@ -202,51 +210,68 @@ "isConfirmed": false }, { - "id": "726519", - "title": "Speed Trap Ahead – Avoiding Costly Security and Privacy Issues in SDK Integration", - "description": "Just as installing an engine into a car demands precision and attention to detail, integrating an SDK into an application requires consideration of security and privacy implications. Developers must ensure that the SDK seamlessly integrates with their codebase, prioritizing security protocols and privacy safeguards. The correct integration of the SDK with existing components is vital to mitigate potential vulnerabilities and uphold user privacy. In this turbocharged talk, we’ll cut straight to the finish line and give you the “so-what” to consider when integrating SDKs.", - "startsAt": "2024-09-19T12:10:00", - "endsAt": "2024-09-19T12:30:00", + "id": "742198", + "title": "Demystifying Code Signing", + "description": "All Android apps have to be code signed. This is performed either by the developer or through Google Play Signing. Despite this, code signing and the processes around it are shrouded in mystery.\r\n\r\nDrawing from lived experiences, this talk with cover:\r\n - What is a code signature?\r\n - Why do we need to sign in the first place?\r\n - Developer signing vs Google Play Signing\r\n - Security expectations vs reality\r\n - Going beyond signing", + "startsAt": "2024-10-31T11:15:00", + "endsAt": "2024-10-31T11:35:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "9b706079-0c5b-4d36-852a-4fbc3a271734", - "name": "Jonathan Seals" + "id": "f8c173b5-64f5-43e4-9f1c-ee44587b7691", + "name": "Neal Michie" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, - "name": "Intermediate" + "id": 264349, + "name": "Introductory and overview" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254881, + "id": 264353, "name": "Lightning talk" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [], - "sort": 3 + "categoryItems": [ + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264372, + "name": "Security" + }, + { + "id": 264377, + "name": "Modern Android Development" + }, + { + "id": 264379, + "name": "Android Studio" + } + ], + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 49270, + "room": "Hangouts", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -254,17 +279,17 @@ "isConfirmed": true }, { - "id": "0658f382-b827-40c2-8abf-bc914ff88d13", - "title": "Lunch", + "id": "9f104c35-655f-4d08-8752-1bddf514da82", + "title": "Break", "description": null, - "startsAt": "2024-09-19T12:30:00", - "endsAt": "2024-09-19T13:40:00", + "startsAt": "2024-10-31T11:35:00", + "endsAt": "2024-10-31T11:50:00", "isServiceSession": true, "isPlenumSession": true, "speakers": [], "categories": [], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 49270, + "room": "Hangouts", "liveUrl": null, "recordingUrl": null, "status": null, @@ -272,14 +297,18 @@ "isConfirmed": false }, { - "id": "721534", - "title": "Composing an API the *right* way", - "description": "Everyone who writes code using Jetpack Compose designs Composable functions and components all the time. In this talk, we'll take a look at some highlights from the official guidelines around designing Compose APIs. This will let us do a better job of building with Compose, from naming functions through ordering parameters to managing state correctly.", - "startsAt": "2024-09-19T13:40:00", - "endsAt": "2024-09-19T14:20:00", + "id": "729194", + "title": "What’s New in Compose Multiplatform - A Live Tour", + "description": "What if you could just… do iOS development? Kotlin and Compose Multiplatform make it possible!\r\n\r\nLive coding our way through the evergrowing ecosystem built by JetBrains, Google, and the wonderful Kotlin community, we’ll show you how you can pick and choose well-established tools and libraries that you already know from Android and use them to build cross-platform apps.\r\n\r\nThis includes the addition of new Jetpack libraries such as Navigation, ViewModel, Room, and more – and you don’t have to make any compromises when it comes to using platform capabilities, either! Using JetBrains Fleet throughout the demos, you’ll also see the tooling support you get when developing multiplatform applications.\r\n\r\nYou may not realize it yet, but you probably already know how to build apps with Compose Multiplatform – for Android, iOS, and beyond.", + "startsAt": "2024-10-31T11:50:00", + "endsAt": "2024-10-31T12:30:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ + { + "id": "a82c6942-6e2b-4d80-9883-0b84b932d6ef", + "name": "Sebastian Aigner" + }, { "id": "1916ae1c-96d7-480f-9eed-bf5dce444441", "name": "Márton Braun" @@ -287,49 +316,65 @@ ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, - "name": "Intermediate" + "id": 264349, + "name": "Introductory and overview" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254891, - "name": "Android" + "id": 264358, + "name": "Jetpack Compose" }, { - "id": 254892, + "id": 264359, "name": "Kotlin" }, { - "id": 254902, - "name": "UI/UX" + "id": 264361, + "name": "KMP" + }, + { + "id": 264364, + "name": "Compose" + }, + { + "id": 264380, + "name": "Tooling" + }, + { + "id": 264381, + "name": "Cross-Platform" + }, + { + "id": 264388, + "name": "Libraries" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 49270, + "room": "Hangouts", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -337,17 +382,17 @@ "isConfirmed": true }, { - "id": "17bb6612-d415-4897-8621-5b894259642e", - "title": "Break", + "id": "46932aef-14c0-4b86-80c3-50646e240b66", + "title": "Lunch", "description": null, - "startsAt": "2024-09-19T14:20:00", - "endsAt": "2024-09-19T14:35:00", + "startsAt": "2024-10-31T12:30:00", + "endsAt": "2024-10-31T13:40:00", "isServiceSession": true, "isPlenumSession": true, "speakers": [], "categories": [], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 49270, + "room": "Hangouts", "liveUrl": null, "recordingUrl": null, "status": null, @@ -355,60 +400,72 @@ "isConfirmed": false }, { - "id": "721533", - "title": "Kotlin Coroutine Mechanisms: Introduction to coroutine behavior through playful examples", - "description": "Sometimes you think you know coroutines and then after a while, you’re like “wait, do I really know coroutines?” . Inspired from \"Programming Android with Kotlin: Achieving Structured Concurrency with Coroutines\", this talks strengthens everyday coroutine understanding through playful explorations. We [the authors] always had sincere intentions with the book:\r\n\r\n\"While [coroutine] concepts are important if you want to master coroutines, you don’t have to understand everything right now to get started and be productive with coroutines.\" — Chapter 9: Coroutine concepts p. 127\r\n\r\nYou might be in beginning stages of learning Kotlin. Or maybe you’ve been using coroutines for a while and want to brush up, maybe you're a little burned from other talks: either way, you'll be looking at coroutines a little different by the end of this session!\r\n", - "startsAt": "2024-09-19T14:35:00", - "endsAt": "2024-09-19T15:15:00", + "id": "728763", + "title": "Tap it! Shake it! Fling it! Sheep it! - The Gesture Animations Dance!", + "description": "Let's have fun with animations, gestures and sensors!\r\n\r\nUsing Compose Multiplatform, we'll go over how to create animations using gestures and sensor events for Android & iOS. We'll cover some basics like how to get the device motion and position information, how to track gestures in the screen, and how you can combine them with animations to have fun! \r\n\r\nAfter this talk, you'll have a better understanding on how to use the sensor frameworks, how to make your own gesture effects, and how to create interesting animations in an easy way.\r\n\r\nKeep it fun, keep it animated!", + "startsAt": "2024-10-31T13:40:00", + "endsAt": "2024-10-31T14:20:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "a4d26fc1-9707-4c86-bc82-70b7ce05823c", - "name": "Amanda Hinchman-Dominguez" + "id": "94ba4fa4-aed7-482e-8096-f61090d5bb4d", + "name": "Nicole Terc" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254878, + "id": 264349, "name": "Introductory and overview" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254892, + "id": 264358, + "name": "Jetpack Compose" + }, + { + "id": 264359, "name": "Kotlin" }, { - "id": 254895, - "name": "Coroutines" + "id": 264364, + "name": "Compose" + }, + { + "id": 264384, + "name": "Android" + }, + { + "id": 264390, + "name": "UI/UX" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 49270, + "room": "Hangouts", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -416,17 +473,17 @@ "isConfirmed": true }, { - "id": "cb85a61c-8c10-407e-b31f-f022f4f6e45d", + "id": "2f36980d-7a9d-4899-8e0b-9e1de74805e0", "title": "Break", "description": null, - "startsAt": "2024-09-19T15:15:00", - "endsAt": "2024-09-19T15:30:00", + "startsAt": "2024-10-31T14:20:00", + "endsAt": "2024-10-31T14:35:00", "isServiceSession": true, "isPlenumSession": true, "speakers": [], "categories": [], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 49270, + "room": "Hangouts", "liveUrl": null, "recordingUrl": null, "status": null, @@ -434,72 +491,64 @@ "isConfirmed": false }, { - "id": "721559", - "title": "Plug and Play: Power Up DevX with Android Studio Plugins", - "description": "For most companies, developer tooling investments often lag behind direct user-facing codebase improvements. However, as a company grows, more engineers begin to contribute and the codebase gets more complex and mature, tooling becomes an essential part of maintaining and improving the developer experience at scale. Early tooling efforts often evolve into disparate collections of multilingual scripts, but what happens when we treat tooling and infra as a proper software project just like we would production code? Let’s explore how Reddit has made tooling a first-class citizen within our codebase by leveraging custom IntelliJ IDE Plugins to improve the developer experience and how your team can apply these concepts and learnings to your own projects.\r\n\r\nKey Takeaways: \r\n1. What is an IntelliJ Plugin and how can it help you build tooling to level-up your developer experience?\r\n2. What kinds of problems can IntelliJ plug-ins help solve, with Reddit-specific examples:\r\n a. Use Case: Using plugins to improve developer onboarding\r\n b. Use Case: Using plugins to keep developers informed and up-to-date\r\n c. Use Case: Using plugins to accelerate large migrations\r\n d. Use Case: Using plugins to reinforce opinionated design patterns\r\n3. What are some other opportunities for plug-ins and how to get started writing your own or leveraging those from others\r\n", - "startsAt": "2024-09-19T15:30:00", - "endsAt": "2024-09-19T16:10:00", + "id": "734739", + "title": "Video Editing on Android with Media3", + "description": "Learn how to use Media3 Editing libraries to edit, trim, concatenate and apply effects to video frames on Android. \r\nImplementing video editing has always been a challenge for Android developers. Media3 is a jetpack library that is meant to make video editing easy, performant and reliable. \r\nIn this session you will learn about Transformer APIs, how to apply effects and concatenate multiple media files. ", + "startsAt": "2024-10-31T14:35:00", + "endsAt": "2024-10-31T14:55:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "de68551c-a180-464b-95d8-1e41d02509a8", - "name": "Drew Heavner" + "id": "1c163a41-865b-4915-b032-ef4942e2f47c", + "name": "Kristina Simakova" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 264353, + "name": "Lightning talk" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254886, - "name": "Tooling" + "id": 264374, + "name": "API" }, { - "id": 254891, + "id": 264384, "name": "Android" }, { - "id": 254892, - "name": "Kotlin" - }, - { - "id": 254901, - "name": "Android Studio" - }, - { - "id": 254902, - "name": "UI/UX" + "id": 264388, + "name": "Libraries" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 49270, + "room": "Hangouts", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -507,17 +556,17 @@ "isConfirmed": true }, { - "id": "8feb94b1-f185-426d-84c2-42ba530dd2be", + "id": "b28b4077-1368-4b9a-9ea2-ebd718631283", "title": "Break", "description": null, - "startsAt": "2024-09-19T16:10:00", - "endsAt": "2024-09-19T16:25:00", + "startsAt": "2024-10-31T14:55:00", + "endsAt": "2024-10-31T15:10:00", "isServiceSession": true, "isPlenumSession": true, "speakers": [], "categories": [], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 49270, + "room": "Hangouts", "liveUrl": null, "recordingUrl": null, "status": null, @@ -525,51 +574,60 @@ "isConfirmed": false }, { - "id": "724064", - "title": "Writing your own Gradle Plugin: A Deep Dive", - "description": "Want to improve some aspect of your Gradle builds? Don't know how? \r\n\r\nIn this session, we'll talk about:\r\n* Configurations and why understanding them is important\r\n* The lifecycle of a Gradle build and how to architect your plugin around it\r\n* What a few well-known plugins do well and what we can learn from them\r\n\r\nWe'll also walk through an actual plugin I've written to solve a real problem.", - "startsAt": "2024-09-19T16:25:00", - "endsAt": "2024-09-19T17:05:00", + "id": "710572", + "title": "Rethinking Home - How testing techniques and code design reshaped the new Spotify Home feature", + "description": "Let's dive into the dynamic world of Spotify Home development, where scalability and excellency are key. In this talk we will learn about the relationship between good code design and testability. How these principles synergise to influence the new shape of core Home features. Moreover we will go through the value of different test types and learn insights on how to make code more testable as well as actionable strategies to enhance code design in general ", + "startsAt": "2024-10-31T15:10:00", + "endsAt": "2024-10-31T15:50:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "903c7a65-63f0-4244-8f8c-7ab8f7acae75", - "name": "John Rodriguez" + "id": "6ee5ee5a-1bdd-4c54-8178-fad51f86a78a", + "name": "Daniel Horowitz" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, - "name": "Intermediate" + "id": 264349, + "name": "Introductory and overview" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [], - "sort": 3 + "categoryItems": [ + { + "id": 264363, + "name": "Testing" + }, + { + "id": 264368, + "name": "Techniques & Guides" + } + ], + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 49270, + "room": "Hangouts", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -577,17 +635,17 @@ "isConfirmed": true }, { - "id": "96bdb210-9123-44e6-8b4a-f471dbf649ed", + "id": "5264a86b-3452-40bf-b481-44b538e30c10", "title": "Break", "description": null, - "startsAt": "2024-09-19T17:05:00", - "endsAt": "2024-09-19T17:20:00", + "startsAt": "2024-10-31T15:50:00", + "endsAt": "2024-10-31T16:05:00", "isServiceSession": true, "isPlenumSession": true, "speakers": [], "categories": [], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 49270, + "room": "Hangouts", "liveUrl": null, "recordingUrl": null, "status": null, @@ -595,80 +653,68 @@ "isConfirmed": false }, { - "id": "719914", - "title": "Mobile Developer Productivity Panel", - "description": "The panelists will discuss developer productivity, developer experience, tools, etc topics for large scale mobile applications. The panel will start with an introduction of the tech/tooling stack of their current organizations then dive into topics like Gen AI, measurement/metrics,\r\nremote development, forward looking innovation, roadmap, IDE, Tooling, Build, CI/CD. Panelists TBD\r\n\r\nTopics\r\n\r\n- What had the biggest impact on mobile Developer Experience in the last 24 months? \r\n\r\n- Remote development: how do you approach development environment consistency? What were the DPE/DevEx results from their investment in remote development? \r\n\r\n- How are you using AI in your infrastructure? \r\n\r\n- What are the IDE plugins and toolings that had the most impact on developer productivity \r\n\r\n- How are you measuring Developer Productivity? \r\n\r\n- How do you balance velocity vs quality? \r\n", - "startsAt": "2024-09-19T17:20:00", - "endsAt": "2024-09-19T18:00:00", + "id": "714221", + "title": "Jetpack Compose: Drawing without pain and recomposition", + "description": "This is a talk on recomposition in Jetpack Compose and the myths of too many calls it is followed by. I'll briefly explain the reasons behind recompositions and why they are not as problematic as they may seem. I have prepared numerous examples that illustrate how to minimize its occurrence.\r\n\r\nI'll share real-life situations we encountered during the redesign of our main screen. I'll delve step-by-step into how I optimized a particle animation without additional memory allocation and how we successfully reduced the number of recompositions on the screen. My practical guide on parameter tuning will be a great takeaway.", + "startsAt": "2024-10-31T16:05:00", + "endsAt": "2024-10-31T16:45:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "0983d15b-0efc-4d9a-918d-4021daee67ce", - "name": "Rooz SF" - }, - { - "id": "2c1f7fbb-3d9f-41fc-804a-9e1053e89256", - "name": "Kiki Chang" - }, - { - "id": "4a13d160-c8c3-4214-926f-24a5b15c78dd", - "name": "Jesse Wilson" + "id": "34b0d49b-00dd-4dc1-ac1c-6de040e8a5b9", + "name": "Vitalii Markus" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254885, - "name": "Panel Discussion" + "id": 264354, + "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254886, - "name": "Tooling" - }, - { - "id": 254887, - "name": "CI/CD" + "id": 264358, + "name": "Jetpack Compose" }, { - "id": 254894, - "name": "Testing" + "id": 264359, + "name": "Kotlin" }, { - "id": 254899, - "name": "Gradle" + "id": 264364, + "name": "Compose" }, { - "id": 254901, - "name": "Android Studio" + "id": 264384, + "name": "Android" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 49270, + "room": "Hangouts", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -676,85 +722,77 @@ "isConfirmed": true }, { - "id": "679855eb-bf43-49eb-906a-2a109955a5eb", - "title": "Party", + "id": "afa619be-3074-4ba1-8e3b-e61c3475d25a", + "title": "Break", "description": null, - "startsAt": "2024-09-19T18:00:00", - "endsAt": "2024-09-19T19:40:00", + "startsAt": "2024-10-31T16:45:00", + "endsAt": "2024-10-31T17:00:00", "isServiceSession": true, - "isPlenumSession": false, + "isPlenumSession": true, "speakers": [], "categories": [], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 49270, + "room": "Hangouts", "liveUrl": null, "recordingUrl": null, "status": null, "isInformed": false, "isConfirmed": false - } - ], - "hasOnlyPlenumSessions": false - }, - { - "id": 49957, - "name": "Grand Ballroom 2", - "sessions": [ + }, { - "id": "721723", - "title": "Unpacking Compose Multiplatform Accessibility", - "description": "In this talk, we will provide a comprehensive overview of the current state of accessibility in Compose Multiplatform. As an emerging UI framework in multiplatform development, understanding its accessibility features is critical for developers.\r\n\r\nWe will delve into the current accessibility capabilities of Compose Multiplatform, discuss its strengths and weaknesses, and provide practical strategies for leveraging its features to ensure the accessibility of your apps.", - "startsAt": "2024-09-19T10:20:00", - "endsAt": "2024-09-19T11:00:00", + "id": "771426", + "title": "#TheAndroidShow - Leadership Keynote", + "description": "Join members of the Android leadership team, including Matthew McCullough, Tor Norbye and Clara Bayarri for insights into what's new in Android", + "startsAt": "2024-10-31T17:00:00", + "endsAt": "2024-10-31T17:20:00", "isServiceSession": false, - "isPlenumSession": false, + "isPlenumSession": true, "speakers": [ { - "id": "fb25f3d5-103f-45ef-983a-414e583cea31", - "name": "Colin Marsch" + "id": "95ed3109-e7c3-41ff-a241-381c9fefb558", + "name": "Matthew McCullough" + }, + { + "id": "1932f921-2d6c-49e1-84b0-0d801cd2dbee", + "name": "Tor Norbye" + }, + { + "id": "4b613586-0a6e-45e9-b641-f855ceda4658", + "name": "Clara Bayarri" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, - "name": "Intermediate" + "id": 264349, + "name": "Introductory and overview" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 264357, + "name": "Keynote" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [ - { - "id": 254888, - "name": "Cross-Platform" - }, - { - "id": 254902, - "name": "UI/UX" - } - ], - "sort": 3 + "categoryItems": [], + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 49270, + "room": "Hangouts", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -762,60 +800,93 @@ "isConfirmed": true }, { - "id": "717904", - "title": "GC You Later, Allocator", - "description": "Memory management on Android is easy: the garbage collector does almost everything and LeakCanary handles the rest! But Kotlin/Multiplatform brings new challenges. Your new features could be blocked if Kotlin/Native leaks memory.\r\n\r\nIn this talk you’ll get a refresher on Android's garbage collector, and you’ll learn how Swift works without one. Once that groundwork is laid you’ll see how Kotlin/Native integrates these two models.\r\n\r\nWe’ll cover some memory management tools & techniques:\r\n\r\n - Using Xcode to see what’s leaking\r\n - Avoiding leaks when mixing Kotlin and Swift\r\n - Using PhantomReference to test memory bugs\r\n - How Kotlin inline classes compare to Valhalla’s primitive classes.\r\n\r\nIf you’d like to improve memory management in a multiplatform app, this talk is for you.\r\n", - "startsAt": "2024-09-19T11:15:00", - "endsAt": "2024-09-19T11:55:00", + "id": "103ac95c-d0ef-4dad-aeed-14e8261c947f", + "title": "Break", + "description": null, + "startsAt": "2024-10-31T17:20:00", + "endsAt": "2024-10-31T17:30:00", + "isServiceSession": true, + "isPlenumSession": true, + "speakers": [], + "categories": [], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false + }, + { + "id": "771431", + "title": "#TheAndroidShow - Panel Discussion", + "description": "Join moderator Florina Muntenescu and members of the Android Developer Relations team as they field questions on all the latest in Android development.", + "startsAt": "2024-10-31T17:30:00", + "endsAt": "2024-10-31T18:15:00", "isServiceSession": false, - "isPlenumSession": false, + "isPlenumSession": true, "speakers": [ { - "id": "4a13d160-c8c3-4214-926f-24a5b15c78dd", - "name": "Jesse Wilson" + "id": "752bc716-f1b8-45d4-b0a5-cfbc3402b68b", + "name": "Florina Muntenescu" + }, + { + "id": "1932f921-2d6c-49e1-84b0-0d801cd2dbee", + "name": "Tor Norbye" + }, + { + "id": "ef1c33eb-89e9-49f6-9abc-da8140988097", + "name": "Alex Vanyo" + }, + { + "id": "e04a04d0-c875-4f36-ae02-914ba87b5b32", + "name": "Rebecca Gutteridge" + }, + { + "id": "837dd36a-5782-49cc-8da5-3f7fc7e4da8a", + "name": "Kateryna Semenova" + }, + { + "id": "4b613586-0a6e-45e9-b641-f855ceda4658", + "name": "Clara Bayarri" + }, + { + "id": "95ed3109-e7c3-41ff-a241-381c9fefb558", + "name": "Matthew McCullough" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, - "name": "Intermediate" + "id": 264349, + "name": "Introductory and overview" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 303052, + "name": "Roundtable Discussion" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [ - { - "id": 254888, - "name": "Cross-Platform" - }, - { - "id": 254892, - "name": "Kotlin" - } - ], - "sort": 3 + "categoryItems": [], + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 49270, + "room": "Hangouts", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -823,56 +894,97 @@ "isConfirmed": true }, { - "id": "713028", - "title": "DevSecOps: Balancing development and security", - "description": "When companies want to produce a mobile app quickly and add in a security element, costs can escalate and the timeframe can elongate. But if organisations do not follow at least the minimum-security requirements, they can find themselves in a dire position.\r\n\r\nMoving forward, trust and accountability must be built into the product. As part of this, security architecture must move beyond the pen test and instead be baked into the process from the very beginning.\r\n\r\nDuring the session, Pat will take you through the mobile app threat landscape, examples of app attacks are taking place on mobile app and best practices of mobile application security, including: Application hardening (obfuscation and anti-tampering), security testing, cryptographic key protection, runtime threat visibility and protection with live demo and walkthrough.", - "startsAt": "2024-09-19T12:10:00", - "endsAt": "2024-09-19T12:30:00", + "id": "0e2cc89b-b559-4432-8df6-6e880873a92f", + "title": "Karaoke and Halloween Costume Party!", + "description": null, + "startsAt": "2024-10-31T18:15:00", + "endsAt": "2024-10-31T19:35:00", + "isServiceSession": true, + "isPlenumSession": true, + "speakers": [], + "categories": [], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false + } + ], + "hasOnlyPlenumSessions": false + }, + { + "id": 49271, + "name": "Glass", + "sessions": [ + { + "id": "731970", + "title": "Wireless protocols for the next generation IoT devices", + "description": "In an era where mobile apps and IoT devices are becoming increasingly interconnected, understanding the nuances of modern wireless protocols is crucial for software developers. This technical talk aims to delve into the latest advancements and practical applications of wireless communication technologies, including Bluetooth Low Energy (BLE), WiFi, Ultra-Wideband (UWB), Thread, LoRaWAN, and more. Learn when and how to use each protocol and their pros and cons. ", + "startsAt": "2024-10-31T10:20:00", + "endsAt": "2024-10-31T11:00:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "598701ca-2d07-4f10-9cef-b4467ca369eb", - "name": "Pat Shueh" + "id": "79823093-1b16-4a2b-b0a9-ea4cd25b92f5", + "name": "Erik Hellman" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, - "name": "Intermediate" + "id": 264351, + "name": "Advanced" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254881, - "name": "Lightning talk" + "id": 264354, + "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254900, - "name": "Security" + "id": 264369, + "name": "Other" + }, + { + "id": 264370, + "name": "IoT" + }, + { + "id": 264371, + "name": "Wearables" + }, + { + "id": 264381, + "name": "Cross-Platform" + }, + { + "id": 264384, + "name": "Android" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 49271, + "room": "Glass", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -880,64 +992,68 @@ "isConfirmed": true }, { - "id": "725795", - "title": "Using Rust in Your Next KMP App", - "description": "When building an app for KMP, Kotlin provides powerful features and tooling to enhance the developer experience. But sometimes it is necessary to go beyond what Kotlin offers.\r\n\r\nIn this talk, we will cover the process of using the Rust programming language as the core of an Android SDK, as well as the reasons why you might want to do this. We will also go over some of the speed bumps we encountered along the way while building the Ditto SDK for Android platforms.\r\n\r\nNo prior experience with Rust is necessary.", - "startsAt": "2024-09-19T13:40:00", - "endsAt": "2024-09-19T14:20:00", + "id": "735932", + "title": "Don't Build to Last: Strategies for Designing and Productionising Experiments", + "description": "Striking the right balance between rapid iteration and long-term feature quality can feel like an impossible task. In this session, we'll explore how to move fast without breaking things, and delve into the art of \"productionising\" experimental code.\r\n\r\nThe session will navigate the entire lifecycle of experimentation from an Android engineers perspective. You'll learn how to work with your data team to design high-quality experiments with tight feedback loops and how to effectively roll them out - whether that involves making new behaviour permanent or cleaning up the mess. This session offers practical insights for engineering teams looking to innovate quickly while maintaining a robust production environment.", + "startsAt": "2024-10-31T11:15:00", + "endsAt": "2024-10-31T11:35:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "6c6404df-420e-4dfc-acf7-a3418742afd6", - "name": "Ben Chatelain" + "id": "85f45c57-98a0-45e9-8a5f-ed6096e268b9", + "name": "Kate Moksina" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254880, - "name": "Advanced" + "id": 264350, + "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 264353, + "name": "Lightning talk" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254891, - "name": "Android" + "id": 264363, + "name": "Testing" }, { - "id": 254892, - "name": "Kotlin" + "id": 264368, + "name": "Techniques & Guides" }, { - "id": 254897, - "name": "Libraries" + "id": 264380, + "name": "Tooling" + }, + { + "id": 264384, + "name": "Android" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 49271, + "room": "Glass", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -945,60 +1061,60 @@ "isConfirmed": true }, { - "id": "720219", - "title": "Making the Big Kotlin Multiplatform Decision", - "description": "Why is adopting Kotlin Multiplatform Mobile not an easy decision to make? After all, it can potentially save a business millions of dollars by cutting down duplicate iOS and Android code and saving many developer hours. \r\n\r\nBut when you have large, complicated codebases and investment in a mobile organization with specific skill sets, it can be an expensive decision to put time and resources into shifting into KMM instead. It can be a hard decision to reverse, and a risky call to make. But it doesn't have to be!\r\n\r\nIn this talk I’ll lay out a decision-making framework to approach KMM adoption - not just from an engineering perspective, but a leadership one too. We’ll reference case studies and talk about: \r\n\r\n* Evaluating KMM for different kinds of projects - standard mobile codebases as well as those in custom frameworks like RIBS and Workflow\r\n* The important factors - build support for Android vs iOS, resourcing KMM expertise, and flexibility, all of which impact long-term risks and outcomes\r\n* Evaluating cultural support - what kind of teams and organizations are best set up for KMM success? \r\n* Finding the right engineering levers to make adoption more successful\r\n \r\nAt Square, I’ve had to make that call for my team, and I’ve worked with other teams that faced similar decisions. I’ll reference real learnings as we discuss wisely and successfully steering a team into new Kotlin waters. \r\n", - "startsAt": "2024-09-19T14:35:00", - "endsAt": "2024-09-19T15:15:00", + "id": "760426", + "title": "Enter the Metaverse: Android Apps on Meta Horizon OS", + "description": "Meta Horizon Store is open for business to mobile developers. Android developers can now port existing mobile apps, easily add spatial capabilities and publish them for Meta Quest headsets. Start building for the next computing platform to target new users, innovate with mixed reality and grow your audience. With new tooling like Meta Spatial SDK, you can combine the rich ecosystem of Android development and the unique capabilities of Meta Quest via accessible APIs, all while using the mobile development languages, tools, and libraries you’re already familiar with.", + "startsAt": "2024-10-31T11:50:00", + "endsAt": "2024-10-31T12:30:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "265b1a56-e32c-459d-8580-6d0d4ed5fc63", - "name": "Sumayyah Ahmed" + "id": "555e52b7-fcb6-49ea-81c7-d9b52cc4c7e9", + "name": "Jonathan Wendorf" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254880, - "name": "Advanced" + "id": 264349, + "name": "Introductory and overview" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254888, - "name": "Cross-Platform" + "id": 264383, + "name": "AR/VR" }, { - "id": 254891, + "id": 264384, "name": "Android" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 49271, + "room": "Glass", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -1006,64 +1122,60 @@ "isConfirmed": true }, { - "id": "689610", - "title": "Android, Compose, Multiplatform & Server - Inject them all with Koin", - "description": "Whether you're crafting a modern Android app with Jetpack Compose, extending your codebase across iOS and desktop environments through Kotlin Multiplatform, or even orchestrating layers of components on server side with Ktor, Koin emerges as the central integration platform.\r\n\r\nJoin me for this session through the wide Kotlin landscape and see how Koin, the well-known Kotlin dependency injection open-source framework, seamlessly integrates across the entire ecosystem.\r\n\r\nI propose to move from the basics of building on each platform, to step on injection patterns on your shared Kotlin code (Android, iOS, Compose …), as well as diving into server-side development.\r\n\r\nWe'll discuss upcoming features of Koin 4. Get ready for a great journey into the present and future of Kotlin development with Koin!", - "startsAt": "2024-09-19T15:30:00", - "endsAt": "2024-09-19T16:10:00", + "id": "716104", + "title": "Swift Cheatsheet for Android/Kotlin Developers", + "description": "Knowing common Swift patterns and how they translate to Kotlin can help us understand better what the code does. Whether to see how some feature is implemented on the neighbor platform, perform code reviews, review or write tech specifications/proposals, or work with Kotlin Multiplatform.\r\n\r\nWe will go over some of the basics of the Swift language and how it compares to Kotlin. Additionally, we will cover common patterns that you might find in a typical iOS project like optional bindings, dictionaries, extensions, structures, and protocols.\r\n\r\nLeave this talk confident you can read, understand, and review Swift/iOS code. It will also help you start with Kotlin Multiplatform where knowledge of Swift and SwiftUI is important.", + "startsAt": "2024-10-31T13:40:00", + "endsAt": "2024-10-31T14:20:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "66fbb80a-cd18-4ba1-931d-d070d060ab95", - "name": "Arnaud Giuliani" + "id": "c24d26ff-8a59-4954-b768-fcd09d8bb0a3", + "name": "Domen Lanišnik" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254878, + "id": 264349, "name": "Introductory and overview" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254888, - "name": "Cross-Platform" - }, - { - "id": 254891, - "name": "Android" + "id": 264359, + "name": "Kotlin" }, { - "id": 254892, - "name": "Kotlin" + "id": 264381, + "name": "Cross-Platform" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 49271, + "room": "Glass", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -1071,60 +1183,129 @@ "isConfirmed": true }, { - "id": "693921", - "title": "Navigation in a Multiplatform World: Choosing the Right Framework for your App", - "description": "Navigation in mobile, desktop, and web applications is such a fundamental part of how we structure our architecture. In order to both obtain functional clarity, and abstraction from platform level implementation.\r\n\r\nFor a long time, there have been options available specific to each platform, and even options part of the platform framework itself. Though it can be difficult to find the right option for platform-agnostic code, ensuring consistency. Some go one step further, providing an opinionated guide on how to architecture your application.\r\n\r\nIn this talk, I'll evaluate the options available, how they differ, and to what type of applications they are best suited. Including how to get started with them, and the best practice guidelines on how to get the most out of them, for your application.", - "startsAt": "2024-09-19T16:25:00", - "endsAt": "2024-09-19T17:05:00", + "id": "732898", + "title": "Your app could use a secondary screen!", + "description": "Learn how an Android application could be used in a desktop-style environment while leveraging a secondary screen. We'll go through some key technical aspects to consider while developing an enterprise-oriented application and how Zebra is helping the developers go beyond what Android already offers.\r\n\r\nKey takeaways:\r\n- How an Activity is getting Multi Window support\r\n- Lifecycle impacts while using the application on 2 screens\r\n- Working with DisplayManager APIs to launch your activity on a secondary screen", + "startsAt": "2024-10-31T14:35:00", + "endsAt": "2024-10-31T14:55:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "10659767-356c-4cd5-ba9c-12cec7a3ce79", - "name": "Ash Davies" + "id": "de4da391-af75-405b-8816-186c5d4e8fde", + "name": "Daniel Neamtu" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, - "name": "Intermediate" + "id": 264349, + "name": "Introductory and overview" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 264353, + "name": "Lightning talk" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254886, - "name": "Tooling" + "id": 264384, + "name": "Android" + } + ], + "sort": 4 + } + ], + "roomId": 49271, + "room": "Glass", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "id": "751161", + "title": "Designing scalable Compose APIs", + "description": "As more and more apps and teams migrate to Compose, it's important to establish clear guidelines for writing high-quality Compose code. This talk will cover best practices and guidelines for developing idiomatic Compose APIs, with topics such as how to think about and plan for your components, how to leverage Kotlin and naming conventions, and define a solid structure of your component, and finally how to verify and maintain these APIs. We'll discuss the rationale behind these guidelines and how they can help developers write code that is more scalable, performant, and consistent.", + "startsAt": "2024-10-31T15:10:00", + "endsAt": "2024-10-31T15:50:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "b5b73a2f-d57d-4a42-b787-a93f4ca9ba79", + "name": "Simona Milanovic" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264358, + "name": "Jetpack Compose" }, { - "id": 254892, + "id": 264359, "name": "Kotlin" + }, + { + "id": 264364, + "name": "Compose" + }, + { + "id": 264384, + "name": "Android" + }, + { + "id": 264390, + "name": "UI/UX" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 49271, + "room": "Glass", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -1132,60 +1313,76 @@ "isConfirmed": true }, { - "id": "721053", - "title": "When sharing isn’t caring: Using platform-specific code in Kotlin Multiplatform", - "description": "Sharing code across platforms is a wonderful superpower. But sometimes, sharing 100% of your codebase isn’t the goal. Maybe you’re migrating existing apps to multiplatform, maybe you have platform-specific libraries or APIs you want to interact with, or maybe your platforms need to do slightly different things.\r\n\r\nThe strength of Kotlin on every platform is not just sharing code, but also interop with the platform’s unique APIs. When building multiplatform apps, it pays to think not only about what code can be shared, but also about what code is better not shared, and how to move between them.\r\n\r\nUsing examples drawn from real-world projects, we’ll look at different strategies for architecting the shared and not-shared parts of your codebase, so you’re better prepared to handle those times when a platform-specific solution is the best one.", - "startsAt": "2024-09-19T17:20:00", - "endsAt": "2024-09-19T18:00:00", + "id": "708032", + "title": "DIY Server-Driven UI: Building Auto Trader's SDUI platform", + "description": "Join us as we take you through Auto Trader’s 4-year journey in crafting our hybrid Server-Driven UI framework (Composable) and the architecture that powers our mobile apps. We’ll delve into why we decided to build instead of buy, our choice of Kotlin and the designs that fuelled our success. From pitfalls to breakthroughs, this talk will be full of useful insights for anyone considering building SDUI themselves.\r\n\r\nYou should leave this talk with the following:\r\n- Insights into our approach to SDUI\r\n- Building with a small team without stopping feature work.\r\n- Kotlin and Android tech insights of the system.\r\n- How we're leveraging KMP to improve client logic.\r\n- 4 years of learnings, did we make the right choice?\r\n- Tips and tricks for anyone considering the same.", + "startsAt": "2024-10-31T16:05:00", + "endsAt": "2024-10-31T16:45:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "7a1d47f2-dfd1-4af1-b097-5c415f9b29c3", - "name": "Russell Wolf" + "id": "18ce6325-d3f4-4478-99d0-5683c4b924c2", + "name": "Jimmy Ray" + }, + { + "id": "0233c2ee-3bcd-4dee-9de5-c765b8c27cc0", + "name": "Harriet Taylor" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254888, - "name": "Cross-Platform" + "id": 264359, + "name": "Kotlin" }, { - "id": 254892, - "name": "Kotlin" + "id": 264361, + "name": "KMP" + }, + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264377, + "name": "Modern Android Development" + }, + { + "id": 264381, + "name": "Cross-Platform" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 49271, + "room": "Glass", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -1196,64 +1393,64 @@ "hasOnlyPlenumSessions": false }, { - "id": 49958, - "name": "Fountain Room", + "id": 49272, + "name": "Things", "sessions": [ { - "id": "722420", - "title": "Efficient Android Builds at Scale: Lessons from Pinterest", - "description": "Building Android apps in a large-scale environment brings several challenges that include maintaining build speeds, managing dependencies, and ensuring consistent and reliable builds across different environments. At Pinterest, these challenges are magnified by our expansive codebase and development team size. This session will explore: The scale we operate at Pinterest, an introduction to Gradle,\r\ninsights into Pinterest's project structuring, utilizing custom plugins to streamline builds and enforce consistency across all modules and a look at Pinterest's infrastructure setup.", - "startsAt": "2024-09-19T10:20:00", - "endsAt": "2024-09-19T11:00:00", + "id": "735950", + "title": "What's new in Android 15 Security?", + "description": "Audience: Android Developers\r\nLevel: Beginner/Intermediate (No previous security experience required)\r\n\r\nTalk Summary:\r\n\r\nIn \"What's New in Android 15 Security?\", we’ll guide Android developers through the essential security updates and restrictions introduced in Android 15. Starting with a brief recap of the key security changes from Android 14, we'll dive into the new restrictions and features in Android 15 that every developer should know:\r\n\r\n- Supporting Android 15’s Private Space: Discover how to enable your app for this new feature to enhance user privacy while managing the challenges of a new type of process termination.\r\n- New Mitigation for Task Hijacking: Explore the new security measures designed to prevent malicious background apps from bringing other apps to the foreground.\r\n- Safer Intents: Discover enhanced safeguards that make intents more secure and robust, minimizing the risk of data leaks and unauthorized access.\r\n- Further Foreground Service Restrictions: Understand the tightened restrictions on foreground services and how to adapt your app to comply.\r\n- Recap of Privacy Sandbox Updates: Review the Privacy Sandbox and its updates in Android 15, focusing on how these changes impact user data handling and ad targeting.\r\n\r\n\r\nKey Takeaways:\r\n- Overview of Security Changes: Gain a clear understanding of the security updates in Android 15 and their implications for app development.\r\n- Practical Compliance Tips: Learn actionable strategies to ensure your app remains compliant with the latest security restrictions when running and/or targeting Android 15.\r\n- Leverage New Features: Discover how to take advantage of Android 15’s new security features to improve your app’s security and promote user privacy.\r\n\r\nSpeaker Experience:\r\nWith over 10 years of experience as a Senior Android Developer, co-authoring the Android Security Cookbook, and delivering talks internationally on Android security, I bring a deep understanding of the platform's security evolution. This will be a fresh and engaging talk for Droidcon London 2024.", + "startsAt": "2024-10-31T10:20:00", + "endsAt": "2024-10-31T11:00:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "dab126dc-4467-4ada-a9bb-b888892e89f6", - "name": "David Chang" + "id": "8b008502-24e7-4af7-a7a8-d92a7e683271", + "name": "Scott Alexander-Bown" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254887, - "name": "CI/CD" + "id": 264372, + "name": "Security" }, { - "id": 254899, - "name": "Gradle" + "id": 264384, + "name": "Android" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49958, - "room": "Fountain Room", + "roomId": 49272, + "room": "Things", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -1261,60 +1458,64 @@ "isConfirmed": true }, { - "id": "719656", - "title": "Image Recognition, Object Detection, Model Evaluation and Customization with MediaPipe on Android", - "description": "Image Recognition, Object Detection and Model Evaluation with MediaPipe on Android\r\n\r\nMediaPipe is an open source, cross platform Machine Learning framework.\r\n\r\nIn this session we will learn how we can perform some common vision based tasks using MediaPipe on Android. We will also cover the following with real examples:\r\n\r\n1) Object Detection with MediaPipe on Android: Efficiently locate objects in real-time on Android devices using MediaPipe.\r\n2) Image Classification and Segmentation via MediaPipe on Android: Identify and categorize images accurately with MediaPipe's pre-trained models.\r\n3) Measuring the accuracy of models used to detect objects in images. \r\n4) Using MediaPipe Model Maker to train custom object detection models using your own data. ", - "startsAt": "2024-09-19T11:15:00", - "endsAt": "2024-09-19T11:55:00", + "id": "733188", + "title": "Improving App Performance With Custom Thread Pools", + "description": "In this presentation, I will discuss how to optimise the performance of an app by implementing a custom thread pool.\r\n\r\nThe audience will learn how to replace multiple thread pools created by libraries such as Coroutines, WorkManager, and OkHttp with a single, efficient custom thread pool. \r\n\r\nKey points include:\r\n\r\n1. Thread Pool Awareness: Understanding how various libraries create threads without awareness of existing threads and what the impact of that is on performance.\r\n\r\n2. Thread Pool Auditing: Demonstrating how to print to the LogCat a list of the currently running threads and showcasing a before and after.\r\n\r\n3. Performance Enhancement: Reducing RAM usage and improving startup times by consolidating thread pools.\r\n\r\n4. Custom Thread Pool Implementation: Demonstrating through code snippets how to create a Thread Pool and integrate it into OkHttp, Coroutines and WorkManager.\r\n\r\n5. Understanding The Differences Between Coroutines IO and Default Dispatchers: Using this knowledge to create a custom Thread Pool for IO work and CPU work.\r\n\r\nThis talk will provide concrete techniques for developers to enhance app performance, making it a standout topic for the conference.\r\n\r\nExperience Level:\r\n7 years experience as an Android Engineer, currently at Compare The Market for almost 4 years.\r\n\r\nI would rate myself as having intermediate knowledge on this topic, however it is a specialised topic.\r\n\r\nI have not given this talk anywhere, although I have presented this topic internally at Compare The Market.\r\n\r\nKeywords:\r\nasynchronous programming, thread pool, performance optimisation", + "startsAt": "2024-10-31T11:15:00", + "endsAt": "2024-10-31T11:35:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "a9033dbc-360f-4686-ab86-17a4a83be787", - "name": "Anant Chowdhary" + "id": "e841b549-a549-420e-ba73-3039c567a609", + "name": "Tin Novakovic" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, - "name": "Intermediate" + "id": 264351, + "name": "Advanced" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 264353, + "name": "Lightning talk" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254889, - "name": "AI/ML" + "id": 264369, + "name": "Other" }, { - "id": 254891, + "id": 264384, "name": "Android" + }, + { + "id": 264386, + "name": "Coroutines" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49958, - "room": "Fountain Room", + "roomId": 49272, + "room": "Things", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -1322,60 +1523,64 @@ "isConfirmed": true }, { - "id": "711768", - "title": "20 Nuggets in 20 Minutes – Get more from your CI", - "description": "For most of us, CI is a set-it-and-forget-it tool. It should churn through builds and tests without giving us any trouble. If this describes your experience: congratulations! You have a stable continuous integration practice.\r\n\r\nBut you can level up that CI pipeline. Together, we'll review a bunch of cool tools and creative setups that you can adopt in your own CI. These run the gamut from reducing wall-clock time, to lesser used static analysis, and handy optimizations.\r\n\r\nCome learn a thing or twenty about improving your team's developer experience, shipping faster, and identifying regressions early.", - "startsAt": "2024-09-19T12:10:00", - "endsAt": "2024-09-19T12:30:00", + "id": "736303", + "title": "Text in Compose: Beyond the Basics", + "description": "In this talk, we'll explore the intricacies of text rendering in Jetpack Compose. We'll delve into text layout and various text APIs to create visually appealing and interactive text-based interfaces.", + "startsAt": "2024-10-31T11:50:00", + "endsAt": "2024-10-31T12:30:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "6af9e2e9-6dff-4ee1-9bbf-c4f815969b9c", - "name": "Ben Boral" + "id": "d59b3a5b-f721-4356-a3e4-a2f86cb6fc50", + "name": "Anastasia Soboleva" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254881, - "name": "Lightning talk" + "id": 264354, + "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254887, - "name": "CI/CD" + "id": 264358, + "name": "Jetpack Compose" }, { - "id": 254899, - "name": "Gradle" + "id": 264364, + "name": "Compose" + }, + { + "id": 264377, + "name": "Modern Android Development" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49958, - "room": "Fountain Room", + "roomId": 49272, + "room": "Things", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -1383,68 +1588,60 @@ "isConfirmed": true }, { - "id": "671422", - "title": "How to make Kotlin compile 2x faster on a super large project?", - "description": "In this talk, we'll introduce 5 advanced optimizations, from easy to hard to existing Kotlin compilers which are related to cache rate improvement and cache reuse. One of the heavyweight optimizations we call the \"baseline kotlin cache\". As we all know, normally, any changes to a low-level module will make the parent module cache fingerprint change invalid. We solved this problem by turning the fuzzy cache of the compileKotlin task into an incremental record bin, and reducing the full build time of the TikTok app in any scenario to 50%! Those solutions from TikTok could help Kotlin module build 2x+ faster than it used to be. ", - "startsAt": "2024-09-19T13:40:00", - "endsAt": "2024-09-19T14:20:00", + "id": "748950", + "title": "How to Optimize, Validate and Deploy ML Models On Device", + "description": "In this workshop we address the common challenges faced by developers migrating AI workloads from the cloud to edge devices. Qualcomm aims to democratize AI at the edge, easing the transition to the edge by supporting familiar frameworks and data types. ​\r\n\r\nWe'll talk through why ML is best done on device and how to easily select a model for your use case, train (or fine-tune), and then compile for the device of your choice.\r\n\r\nWe'll walk through how to get started, iterate on your model and meet performance requirements to deploy on device! We'll show examples on how to optimize models and bundle the model into your application.", + "startsAt": "2024-10-31T13:40:00", + "endsAt": "2024-10-31T14:20:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "03c63012-49c4-44eb-af96-0f5360b0d187", - "name": "Ishan Khanna" + "id": "0730a976-72e0-42c9-a3b3-9317c06d7bbe", + "name": "Bhushan Sonawane" }, { - "id": "ed92b8fc-711a-48c7-a8e5-4255fb793ffa", - "name": "Pengwen Jiao" + "id": "b32c51bc-deaf-43a9-9715-099e5e18f692", + "name": "Meghan Stronach" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254880, - "name": "Advanced" + "id": 264349, + "name": "Introductory and overview" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 264355, + "name": "Workshop" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254886, - "name": "Tooling" - }, - { - "id": 254887, - "name": "CI/CD" - }, - { - "id": 254892, - "name": "Kotlin" + "id": 264382, + "name": "AI/ML" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49958, - "room": "Fountain Room", + "roomId": 49272, + "room": "Things", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -1452,68 +1649,60 @@ "isConfirmed": true }, { - "id": "717465", - "title": "Root causing memory growth with LeakCanary 3", - "description": "At Square, we scaled our LeakCanary usage over the last nine years by running it on all UI tests on every pull request, uploading leaks detected in debug builds, and triaging leaks weekly. This works: we fixed thousands of leaks (in our apps, third-party libraries, and the Android Framework), and we're now finding fewer and fewer new leaks!\r\n\r\nUnfortunately, we sometimes see the heap size grow over time without LeakCanary finding any issue. For example, constantly appending string logs to a collection would not trigger LeakCanary but would still lead to ANRs and OOMEs when the app eventually runs out of memory.\r\n\r\nInspired by the BLeak paper and the work of the Android Studio team, I built a new toolkit in LeakCanary that performs repeated heap dump diffs and detects objects with a constantly increasing number of outgoing edges (for example, a list that keeps growing).\r\n\r\nCome learn how this works; together, we can fix all the leaks!", - "startsAt": "2024-09-19T14:35:00", - "endsAt": "2024-09-19T15:15:00", + "id": "768482", + "title": "How to Optimize, Validate and Deploy ML Models On Device (Part II)", + "description": "We'll walk through the steps to bring your ML model on device. In this hands on section of the workshop we will demonstrate the end to end workflow for a sample use case, using Qualcomm AI Hub to optimize a model and deploy it on device. \r\n\r\nWe'll then help you get set up and walk through various examples on how to use Qualcomm AI Hub. The Qualcomm AI Hub team will be there to teach you the ins and outs, enabling you to use the platform and bring your ML use case on device quickly and easily.", + "startsAt": "2024-10-31T14:35:00", + "endsAt": "2024-10-31T14:55:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "a733fc42-dcb9-4107-9675-70335f2889e9", - "name": "Pierre-Yves Ricau" + "id": "0730a976-72e0-42c9-a3b3-9317c06d7bbe", + "name": "Bhushan Sonawane" + }, + { + "id": "b32c51bc-deaf-43a9-9715-099e5e18f692", + "name": "Meghan Stronach" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, - "name": "Intermediate" + "id": 264349, + "name": "Introductory and overview" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 264355, + "name": "Workshop" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254886, - "name": "Tooling" - }, - { - "id": 254887, - "name": "CI/CD" - }, - { - "id": 254891, - "name": "Android" - }, - { - "id": 254897, - "name": "Libraries" + "id": 264382, + "name": "AI/ML" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49958, - "room": "Fountain Room", + "roomId": 49272, + "room": "Things", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -1521,68 +1710,60 @@ "isConfirmed": true }, { - "id": "700494", - "title": "Ten things you heard about testing that might be wrong", - "description": "Testing became an essential part of Android development. Many conference talks have been given and even more best practices have been written. \r\n\r\nBut what if, as time evolved, some of the things we thought were true, changed?\r\n\r\nLet’s start questioning some of these in this talk:\r\n- Are flaky tests fixable?\r\n- Are mocks even harmful?\r\n- Is DI about testing?\r\n- Did we understand testing in isolation properly? \r\n- Is the test pyramid still valid?\r\n- Is Robolectric good or bad on Android?\r\n- And in times of AI, should we generate tests?\r\n\r\nCome and join my session to learn more!\r\n", - "startsAt": "2024-09-19T15:30:00", - "endsAt": "2024-09-19T16:10:00", + "id": "745796", + "title": "Securing Android: Tackling Advanced Threats and Enhancing App Security", + "description": "What threats are Android apps dealing with these days? In this talk, we will look at the latest security challenges and the best ways to keep your apps safe from new threats.\r\nWhen companies rush to release apps, they often skip important security steps, which can lead to higher costs and more risks. It's important to build security into your app from the beginning. We will discuss common risks for Android apps, how to handle them, and the challenges developers and security experts face when trying to protect code, keys, and data.\r\n\r\nKey Takeaways:\r\n\r\n* Get up to speed on the latest security threats specifically targeting Android apps.\r\n* Explore the latest advanced rooting technique such as Magisk and app instrumentation and the best way to protect your app.\r\n* Explore the differences between shrinking/minification and advanced techniques for obfuscation and anti-tampering, including cryptographic key protection.\r\n* Discover how to embed security throughout the development process to minimise risks and build resilient apps.\r\n\r\n\r\n", + "startsAt": "2024-10-31T15:10:00", + "endsAt": "2024-10-31T15:50:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "4d3a31b1-61e5-4a26-9ca3-c9f30e3eaa08", - "name": "Danny Preussler" + "id": "24eb82e3-3ea7-4b45-9ffb-d63cac580e88", + "name": "Mohamed Kerroumi" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254880, - "name": "Advanced" + "id": 264350, + "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254886, - "name": "Tooling" - }, - { - "id": 254887, - "name": "CI/CD" - }, - { - "id": 254894, - "name": "Testing" + "id": 264372, + "name": "Security" }, { - "id": 254903, - "name": "Firebase" + "id": 264384, + "name": "Android" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49958, - "room": "Fountain Room", + "roomId": 49272, + "room": "Things", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -1590,72 +1771,60 @@ "isConfirmed": true }, { - "id": "725385", - "title": "Monetizing Your Side Project to $1k in Monthly Revenue and Beyond", - "description": "Only ~17% of apps reach $1k in monthly revenue. Learn best practices on crossing $1k MRR and beyond from personal experience building two profitable apps and advice from other successful app founders.", - "startsAt": "2024-09-19T16:25:00", - "endsAt": "2024-09-19T17:05:00", + "id": "736123", + "title": "How we build Spotify for Android Automotive", + "description": "As the automotive industry embraces newer technologies and more mainstream software tech stacks, the in-car entertainment experience is rapidly evolving into a living room on wheels. In this session, we will take you on the journey of bringing Spotify to Android Automotive OS.\r\n\r\nIn this session, we will cover:\r\n\r\n* What is Android Automotive OS? Discover which car manufacturers and models are currently supported, and the different flavours of Android Automotive around!\r\n* Learn about the specific development challenges we faced while building Spotify for Android Automotive, including using Media Center templates to build features, adapting to diverse hardware, and challenging emulator setups.\r\n* Get insights into the unique aspects of releasing an app in the automotive ecosystem, from testing to ensure compliance with automotive standards to coordinating with car manufacturers for software updates.\r\n\r\nPlease join us to discover how we’re making the Spotify experience accessible, enjoyable and safe for drivers and passengers, and the innovative solutions we’ve developed to overcome the challenges of this cutting-edge platform. \r\n", + "startsAt": "2024-10-31T16:05:00", + "endsAt": "2024-10-31T16:45:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "0e4f3abe-cc6c-409a-8f34-e346f23c0cc4", - "name": "Jeffrey Bunn" + "id": "9c8384de-140e-47e4-aeb1-c85faf090fc8", + "name": "Danielle Vass" + }, + { + "id": "0aef86d4-a69b-4a82-bd8b-5ee05a3e421d", + "name": "Walid Tazout" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, - "name": "Intermediate" + "id": 264349, + "name": "Introductory and overview" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254888, - "name": "Cross-Platform" - }, - { - "id": 254891, + "id": 264384, "name": "Android" - }, - { - "id": 254893, - "name": "Design" - }, - { - "id": 254902, - "name": "UI/UX" - }, - { - "id": 254907, - "name": "Flutter" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49958, - "room": "Fountain Room", + "roomId": 49272, + "room": "Things", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -1666,64 +1835,68 @@ "hasOnlyPlenumSessions": false }, { - "id": 52283, - "name": "Sapphire Room", + "id": 53981, + "name": "Stadia", "sessions": [ { - "id": "713009", - "title": "Debugging in the Wild: Unleashing the Power of Remote Tooling", - "description": "We all strive to build flawless apps, but let's face it - bugs happen. And sometimes, those pesky bugs are elusive, only showing up in the unpredictable chaos of production. Limited tooling, the dreaded \"black box\" environment, and the pressure to fix it fast can be a developer's nightmare.\r\n\r\nThis talk will dive into real-world debugging challenges faced by mobile developers, sharing practical tips and techniques for effectively troubleshooting production issues with limited resources. You'll learn:\r\nBeyond the Crash Logs: Strategies for interpreting production data beyond the standard crash logs, including network requests, user behavior, and system metrics.\r\n\r\n\r\nLeveraging Log Collection Frameworks: Mastering the art of selectively collecting and analyzing relevant logs for crucial insights into the root cause of bugs.\r\n\r\n\r\nCreative Debugging Techniques: Discover unconventional approaches like remote logging, feature flags\r\n\r\n\r\nLessons Learned from the Reddit Android App: I'll share specific case studies of production bugs encountered on the Reddit app, highlighting the debugging challenges and the strategies used to successfully resolve them.\r\n\r\nBy the end of this talk, you'll have a toolkit of practical approaches to effectively debug production issues, even when working with limited resources. You'll leave feeling empowered to confidently face the \"wild\" and tame those elusive bugs!\r\n", - "startsAt": "2024-09-19T10:20:00", - "endsAt": "2024-09-19T11:00:00", + "id": "693733", + "title": "Hardware development with KMP and Compose Desktop", + "description": "Nowadays, Mobile software development focuses on efficient architecture, scalability and delightful UX. Those are quite important topics but sometimes we forget Mobile Development has its roots in Embedded Software Development, which was that branch of software development focused on running code on limited resource devices.\r\n\r\nBoth have diverged, one specialised in mobile apps for smartphones, while the other has transformed more into IoT, industrial and other types of solutions.\r\n\r\nThere was an attempt to bring both together with Android Things. It made Android app development skills transferable for hardware development, letting developers create apps with their existing knowledge and interact with the hardware through “high-level” driver APIs. Unfortunately, it was decommissioned by Google. \r\n\r\nWith the flourishing of technologies like KMP and Compose Desktop, the regular Android developer again has some transferable skills that can be used to develop apps for non-smartphone hardware. \r\n\r\nIn this session I will talk about how to develop a simple app for devices like the Raspberry Pi, covering details like interacting with GPIO, WIFI and Bluetooth communication as well as current issues and workarounds. ", + "startsAt": "2024-10-31T10:20:00", + "endsAt": "2024-10-31T11:00:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "699c8fd7-70f9-44df-85d2-abb6454cee07", - "name": "Eric Chiquillo" + "id": "95a6035d-1167-4cc1-9974-bc065a077893", + "name": "Enrique Ramírez" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254891, - "name": "Android" + "id": 264358, + "name": "Jetpack Compose" }, { - "id": 254894, - "name": "Testing" + "id": 264361, + "name": "KMP" + }, + { + "id": 264370, + "name": "IoT" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 52283, - "room": "Sapphire Room", + "roomId": 53981, + "room": "Stadia", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -1731,84 +1904,60 @@ "isConfirmed": true }, { - "id": "727677", - "title": "How to use Qualcomm AI Hub for On-Device AI models", - "description": "In this workshop we address the common challenges faced by developers migrating AI workloads from the cloud to edge devices. Qualcomm aims to democratize AI at the edge, easing the transition to the edge by supporting familiar frameworks and data types. ​\r\n\r\nIn this session, developers can follow along, gaining knowledge and tools to efficiently deploy optimized models on real devices using Qualcomm AI Hub. ​\r\n\r\nWe'll walk through how to get started using Qualcomm AI Hub, iterate on your model and meet performance requirements to deploy on device! We'll show examples on how to optimize models and bundle the downloadable target asset into your application.", - "startsAt": "2024-09-19T11:15:00", - "endsAt": "2024-09-19T11:55:00", + "id": "756181", + "title": "Fortify the Fort: Think outside the security", + "description": "Protection is deliberately included in everything you do with Android. Privacy is enabled through Android security. Like any other developer, you need to follow a shared responsibility security model, meaning your customers and users play an essential part in the overall security posture. This talk shows how a developer can follow simple guidelines to improve the application's security and stop unauthorised access.", + "startsAt": "2024-10-31T11:15:00", + "endsAt": "2024-10-31T11:35:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "b32c51bc-deaf-43a9-9715-099e5e18f692", - "name": "Meghan Stronach" - }, - { - "id": "a33ccc9b-d114-4ac4-9c4d-cc12c45478a8", - "name": "Shreya Jain" + "id": "4b141461-befd-4bd3-83c9-1c1f7599a9c6", + "name": "Goran Minov" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, - "name": "Intermediate" + "id": 264349, + "name": "Introductory and overview" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254883, - "name": "Workshop" + "id": 264353, + "name": "Lightning talk" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254886, - "name": "Tooling" - }, - { - "id": 254887, - "name": "CI/CD" - }, - { - "id": 254889, - "name": "AI/ML" - }, - { - "id": 254891, - "name": "Android" - }, - { - "id": 254894, - "name": "Testing" + "id": 264368, + "name": "Techniques & Guides" }, { - "id": 254901, - "name": "Android Studio" - }, - { - "id": 254905, - "name": "TensorFlow" + "id": 264372, + "name": "Security" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 52283, - "room": "Sapphire Room", + "roomId": 53981, + "room": "Stadia", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -1816,60 +1965,64 @@ "isConfirmed": true }, { - "id": "725412", - "title": "Accelerating On-Device AI Development with Qualcomm AI Hub", - "description": "Hey Android developers, ready to elevate your apps with on-device AI? Qualcomm's AI Hub is here to make your life easier streamlining your workflow in less than 5 minutes.\r\n \r\nAI Hub handles the complexity of model compilation and gets you to test performance in real Snapdragon or Qualcomm devices with just a few lines of code. It comes with a library of over 100 pre-optimized models, but don't worry - if you've got your own custom models, AI Hub has you covered and we keep your data private.\r\n \r\nThe best part? We're talking about AI that runs up to 4 times faster. That means smoother apps, better experiences for your users, and less battery drain. Whether you're building the next viral social media platform or advancing the capabilities of your existing app, Qualcomm AI Hub is your go-to for smarter, more efficient app development.\r\n \r\nJoin us to see how AI Hub can help you power on-device AI development.", - "startsAt": "2024-09-19T12:10:00", - "endsAt": "2024-09-19T12:30:00", + "id": "733000", + "title": "Exploring Android Accessibility Malware", + "description": "Join us in exploring two techniques Android malware uses, focusing on the dangerous combination of credential stuffing attacks and Accessibility Service abuse. We'll demonstrate how cybercriminals can exploit these vulnerabilities to launch large-scale attacks on user accounts across multiple applications.\r\nOur talk will walk you through:\r\n1. The mechanics of credential stuffing and how it exploits common user behaviors.\r\n2. How malware can abuse Android's Accessibility Service to automate malicious actions.\r\n3. A step-by-step demonstration of a proof-of-concept that combines these techniques.\r\n4. Clever methods cybercriminals use to conceal their activities from users.\r\n5. The broader implications of these threats for mobile app security.\r\n 1 of 3\r\nWe'll dive into why these attacks are increasingly prevalent and how they can be executed with alarming ease. By understanding the attacker's perspective, we aim to highlight the critical need for robust security measures in mobile applications. However, implementing such security measures can be challenging for developers, often requiring significant time, expertise, and resources. This is where innovative solutions become crucial. Recognizing this gap in mobile app security, Appdome provides comprehensive protection against these threats through zero-code integration, allowing developers to secure their mobile apps effortlessly.", + "startsAt": "2024-10-31T11:50:00", + "endsAt": "2024-10-31T12:30:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "d630dc15-c0c0-4f61-a490-ef993aafb2c3", - "name": "Siddhika Nevrekar" + "id": "36110e7b-c926-48ec-be43-b1a10e0641a0", + "name": "Gil Hartman" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254878, + "id": 264349, "name": "Introductory and overview" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254881, - "name": "Lightning talk" + "id": 264354, + "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254889, - "name": "AI/ML" + "id": 264365, + "name": "Accessibility" + }, + { + "id": 264372, + "name": "Security" }, { - "id": 254891, + "id": 264384, "name": "Android" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 52283, - "room": "Sapphire Room", + "roomId": 53981, + "room": "Stadia", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -1877,64 +2030,68 @@ "isConfirmed": true }, { - "id": "725870", - "title": "Why testing is also a developer's problem", - "description": "As the pace of development increases, completing testing in sprint becomes harder. The features to test are becoming more numerous and complicated. The testing backlog grows and begins to slow down the pace of innovation and application quality. Fortunately, mobile test automation is here to help make test development easier, faster, and better.​\r\n\r\nKey takeaways:​\r\n\r\n- Challenges Agile teams face testing Android applications​\r\n- Approaches to make testing a breeze and get back to developing great new applications​\r\n- Accelerating test creation with automation​\r\n- Using virtual and physical devices for easy setup and execution​\r\n- Get testing faster with zero-footprint authoring on the Tricentis Virtual Mobile Grid​\r\n- Reducing maintenance using ML and AI​", - "startsAt": "2024-09-19T13:40:00", - "endsAt": "2024-09-19T14:20:00", + "id": "725157", + "title": "Click-free releases & the making of a CLI app", + "description": "At TravelPerk, we've developed a tool that fully automates our release process, eliminating the need for human intervention. This was achieved using a lightweight Kotlin CLI app. In this talk, we'll provide an in-depth look at the design and implementation of this tool, and guide you through building your own Kotlin CLI app. Join me to explore the power of Kotlin and Gradle in creating robust, automated solutions.", + "startsAt": "2024-10-31T13:40:00", + "endsAt": "2024-10-31T14:20:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "1077aaba-731b-405f-92eb-2481a507a082", - "name": "Blake Reynolds" + "id": "3b1289fc-f706-4f8f-9061-c77e3e250223", + "name": "Adam Ahmed" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254878, - "name": "Introductory and overview" + "id": 264350, + "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254887, - "name": "CI/CD" + "id": 264359, + "name": "Kotlin" }, { - "id": 254889, - "name": "AI/ML" + "id": 264380, + "name": "Tooling" }, { - "id": 254894, - "name": "Testing" + "id": 264394, + "name": "CI/CD" + }, + { + "id": 264378, + "name": "Gradle" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 52283, - "room": "Sapphire Room", + "roomId": 53981, + "room": "Stadia", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -1942,84 +2099,64 @@ "isConfirmed": true }, { - "id": "727034", - "title": "Squash your hidden bugs using Microsoft Clarity", - "description": "Have you ever released a feature only to discover critical bugs in production? Are you curious about why your users are struggling with your new feature? Wondering why your customers are dropping off? With Clarity, you can find answers to all these questions at zero cost. Gain insights into user experiences, identify friction points, and uncover potential improvements through Clarity’s session recordings, heatmaps, AI insights, and more.", - "startsAt": "2024-09-19T14:35:00", - "endsAt": "2024-09-19T15:15:00", + "id": "734309", + "title": "Crafting Narratives: Shaping TalkBack with Compose Semantics", + "description": "\r\nThe focus of my talk will be on making modern, complex designs more intuitive for screen reader users using an empathetic approach . \u2028We will see how to create thoughtful and user-friendly narratives for accessibility by using Jetpack Compose semantics and optimizing the TalkBack experience.\r\n\r\nKey Takeaways:\r\n1. Creating Effective Narratives: Tips for simplifying complex UI elements.\r\n2. Testing Accessibility: Methods for validating and improving semantic changes.\r\n3. Designing for Complexity: Making complex UIs intuitive and accessible.\r\n4. Using Semantics Wisely: Enhancing accessibility with thoughtful design.\r\n", + "startsAt": "2024-10-31T14:35:00", + "endsAt": "2024-10-31T14:55:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "636dd7ea-e476-4289-a6e2-a7cbc116da62", - "name": "Ibrahim Radwan" + "id": "bcf3c75a-e105-41de-8891-53f6b673e58a", + "name": "Sachin Sapkale" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 264353, + "name": "Lightning talk" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254886, - "name": "Tooling" - }, - { - "id": 254888, - "name": "Cross-Platform" - }, - { - "id": 254889, - "name": "AI/ML" - }, - { - "id": 254891, - "name": "Android" - }, - { - "id": 254893, - "name": "Design" + "id": 264358, + "name": "Jetpack Compose" }, { - "id": 254894, + "id": 264363, "name": "Testing" }, { - "id": 254897, - "name": "Libraries" - }, - { - "id": 254902, - "name": "UI/UX" + "id": 264365, + "name": "Accessibility" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 52283, - "room": "Sapphire Room", + "roomId": 53981, + "room": "Stadia", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -2027,60 +2164,76 @@ "isConfirmed": true }, { - "id": "674849", - "title": "Personalizing Accessibility", - "description": "What should you do when users' accessibility needs conflict? For example, some users prefer more color contrast, while others require less contrast. To give a few examples, some might need labels to accompany icons, and for some, having too much text can make the app experience worse. Some love graphs and others have difficulty understanding what they represent and would need the same data in written format.\r\n\r\nOne way to tackle this problem is to allow users to personalize their app experience. In this talk, I will discuss different ways of personalization, including the opportunities and drawbacks. I will also give some actionable examples of how to let your users personalize their experience. After listening to this talk, you'll leave with actionable knowledge about providing a more accessible experience for your users via personalization.", - "startsAt": "2024-09-19T15:30:00", - "endsAt": "2024-09-19T16:10:00", + "id": "757989", + "title": "Rethinking Apps with Local-First Architecture", + "description": "Modern apps are expected to function flawlessly even in low-connectivity edge environments, but traditional centralized networking approaches often fall short. In this session, we’ll explore how we got here and where we’re headed, diving into the unique challenges of local-first architecture. We’ll look at some of the tough problems in this space and examine solutions that open new possibilities. By rethinking these aspects in your app, you can push the boundaries of what your app can do and create experiences that will amaze your users.", + "startsAt": "2024-10-31T15:10:00", + "endsAt": "2024-10-31T15:50:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "6a7b0ee2-2d50-42b7-8225-1df145d255ea", - "name": "Eeva-Jonna Panula" + "id": "da380fb8-c8ba-47e9-b224-26647296cff5", + "name": "Richard Das" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254891, - "name": "Android" + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264369, + "name": "Other" + }, + { + "id": 264377, + "name": "Modern Android Development" + }, + { + "id": 264381, + "name": "Cross-Platform" }, { - "id": 254902, + "id": 264388, + "name": "Libraries" + }, + { + "id": 264390, "name": "UI/UX" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 52283, - "room": "Sapphire Room", + "roomId": 53981, + "room": "Stadia", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -2088,51 +2241,68 @@ "isConfirmed": true }, { - "id": "735751", - "title": "Add Generative AI capabilities to your Android app", - "description": "Generative AI capabilities are coming on Android. Whether you want to run inference on-device to protect users privacy or use Gemini Pro’s advanced multimodal capabilities, there are multiple options to add GenAI capabilities to your Android app.\r\n\r\nIn this session we’ll review Google’s GenAI solutions for Android, how to integrate them to your application and some examples of successful integrations.", - "startsAt": "2024-09-19T16:25:00", - "endsAt": "2024-09-19T17:05:00", + "id": "732956", + "title": "Rewind and Resolve: A deep dive into building Session Replay for Android", + "description": "Understanding and debugging production issues can feel like solving a puzzle with missing pieces. We will dive deep into the journey of building a session replay feature for the Sentry Android SDK that helps developers capture those elusive bugs, respects user privacy, and maintains low overhead.\r\n\r\nIn this talk, we'll explore the technical aspects, including:\r\n\r\n- Taking screenshots of a Window\r\n- Redacting the screenshots to ensure no sensitive user data is leaked\r\n- Encoding the screenshots into a video\r\n- Collecting supporting data like breadcrumbs, network requests, logs, touches to improve debuggability\r\n- Maintaining low performance overhead while implementing all of the above.\r\n\r\nWe'll also demonstrate how our tool empowers Android engineers to gain actionable insights when solving errors, crashes, and ANRs.\r\n\r\nWhether you're an Android developer looking to improve your debugging toolkit or someone interested in the technical guts of the Android OS, the session will cover it all. Join us for a glimpse into the future of mobile debugging – it's a replay you won't want to miss!", + "startsAt": "2024-10-31T16:05:00", + "endsAt": "2024-10-31T16:45:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "ccce0dd7-87af-4bc7-9ae0-3cc5fd9cba2a", - "name": "Terence Zhang" + "id": "da013a11-7cb0-4b0d-a37e-e29ce98688e0", + "name": "Roman Zavarnitsyn" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, - "name": "Intermediate" + "id": 264351, + "name": "Advanced" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [], - "sort": 3 + "categoryItems": [ + { + "id": 264358, + "name": "Jetpack Compose" + }, + { + "id": 264380, + "name": "Tooling" + }, + { + "id": 264384, + "name": "Android" + }, + { + "id": 264388, + "name": "Libraries" + } + ], + "sort": 4 } ], - "roomId": 52283, - "room": "Sapphire Room", + "roomId": 53981, + "room": "Stadia", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -2141,117 +2311,5485 @@ } ], "hasOnlyPlenumSessions": false - } - ], - "timeSlots": [ + }, { - "slotStart": "07:30:00", - "rooms": [ + "id": 53982, + "name": "Nest", + "sessions": [ { - "id": 49956, - "name": "Grand Ballroom 1", - "session": { - "id": "1f488259-530d-472b-a64e-e6bd821906f3", - "title": "Registration & Check-In", - "description": null, - "startsAt": "2024-09-19T07:30:00", - "endsAt": "2024-09-19T09:00:00", - "isServiceSession": true, - "isPlenumSession": true, - "speakers": [], - "categories": [], - "roomId": 49956, - "room": "Grand Ballroom 1", + "id": "711892", + "title": "Gradle: The Build System That Loves To Hate You", + "description": "Come to hear a talk about dozens of foot guns in Gradle that can make you tear your hair out as you try to \"just make it work\", presented by someone who has stepped on most of the rakes. For example, did you know every call in groovy is using reflection?!\r\n\r\nAlong with the issues you will also learn about way to avoid it or at least minimize your risk of misery. After the talk you should have more confidence as you venture into the land of Gradle build.", + "startsAt": "2024-10-31T10:20:00", + "endsAt": "2024-10-31T11:00:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "8e2c2869-4beb-4868-8651-8567219ea947", + "name": "Aurimas Liutikas" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264380, + "name": "Tooling" + }, + { + "id": 264394, + "name": "CI/CD" + }, + { + "id": 264378, + "name": "Gradle" + } + ], + "sort": 4 + } + ], + "roomId": 53982, + "room": "Nest", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "id": "735282", + "title": "Securing the Unseen: Advanced Threats, Best Practices & Challenges in Mobile App Security", + "description": "In today's app-driven world, securing mobile applications is not just an afterthought—it's a critical component of the development process. This session at DroidCon London will take you deep into the mobile app security world, focusing on the latest threats that target mobile applications and the advanced techniques used to secure them.\r\n\r\nWe'll explore cutting-edge security practices that should be integrated throughout the app development lifecycle, from secure coding standards to app security and comprehensive threat modeling. You'll learn to identify and mitigate vulnerabilities before they become exploits, ensuring your applications are resilient against modern attacks.\r\n\r\nWe'll discuss key risks, security techniques and challenges app developers and security engineers face when trying to secure code, keys, and data effectively.\r\n\r\nThis session is designed for app developers, security professionals, and penetration testers who want to stay ahead of the curve in mobile app security. Join us to enhance your skills and ensure your apps are secure in the face of today's and tomorrow's threats.\r\n", + "startsAt": "2024-10-31T11:15:00", + "endsAt": "2024-10-31T11:35:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "eddfc3bb-2258-45f8-b4a6-50233932a2d2", + "name": "Mohamed Kerroumi" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264353, + "name": "Lightning talk" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264363, + "name": "Testing" + }, + { + "id": 264372, + "name": "Security" + }, + { + "id": 264382, + "name": "AI/ML" + } + ], + "sort": 4 + } + ], + "roomId": 53982, + "room": "Nest", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "id": "702107", + "title": "[REDACTED]: How to keep your app's secrets, secret", + "description": "Every app has secrets! These could be in many forms (no judgment here!) but in this talk, we'll focus on the most common use case of storing API keys or data in-app that we'd rather not make readily available to malicious actors.\r\n\r\nIn this talk, we'll look at answering one of the most asked questions in mobile security, \"How do I secure my API keys\" and ensure you have the knowledge and tools you need to do so.\r\n\r\nYou'll leave this talk with:\r\n- Actionable security best practices for securing your app\r\n- An idea of how to store API keys, at scale\r\n- Multiple examples of how to securely access your API keys\r\n- Some fun real-world examples of when things go wrong\r\n", + "startsAt": "2024-10-31T11:50:00", + "endsAt": "2024-10-31T12:30:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "f7ad854d-1167-4fab-be0a-2721cf6ae5f2", + "name": "Ed Holloway-George" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264369, + "name": "Other" + }, + { + "id": 264372, + "name": "Security" + }, + { + "id": 264384, + "name": "Android" + }, + { + "id": 264378, + "name": "Gradle" + } + ], + "sort": 4 + } + ], + "roomId": 53982, + "room": "Nest", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "id": "756374", + "title": "Tools that could help you to target newer SDK level and improve compatibility", + "description": "It could be a painful journey when developers update the app's target SDK level. There could be new APIs, deprecation of current APIs and gated or non-gated change. \r\n\r\nThis session will share major changes in Android 15, the common mistakes when targeting the latest version of Android, why developers should target the latest version as soon as possible, and what tools are available to help developers.", + "startsAt": "2024-10-31T13:40:00", + "endsAt": "2024-10-31T14:20:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "9079b8b4-be1f-4213-a446-6b2bdcad0c04", + "name": "Fung Lam" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264363, + "name": "Testing" + }, + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264384, + "name": "Android" + }, + { + "id": 264379, + "name": "Android Studio" + } + ], + "sort": 4 + } + ], + "roomId": 53982, + "room": "Nest", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "id": "736362", + "title": "Streamlining Android app development and release processes", + "description": "Building, testing and releasing Apps for Android is unique with it's own challenges.\r\n\r\nDuring this session we’ll walk through three ways to make building, testing and releasing apps faster and easier for your whole team. Specifically, we’ll look at these three key points:\r\n\r\nAutomating testing and debugging by using CI/CD best practices and out of the box integrations.\r\n\r\nDelivering faster green builds with Bitrise Build Cache. We’ll look at some benchmarks and some real world examples of optimizing the execution.\r\n\r\nFrom beta distribution to production rollout, what steps are there and how these can be optimised.\r\n\r\nBy the end of this talk you'll have an idea on how to take the next steps on your CI/CD journey.", + "startsAt": "2024-10-31T14:35:00", + "endsAt": "2024-10-31T14:55:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "3be14346-8241-4bd9-9a8e-6771276bc270", + "name": "Tamás Bazsonyi" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264353, + "name": "Lightning talk" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264380, + "name": "Tooling" + }, + { + "id": 264394, + "name": "CI/CD" + }, + { + "id": 264384, + "name": "Android" + }, + { + "id": 264378, + "name": "Gradle" + } + ], + "sort": 4 + } + ], + "roomId": 53982, + "room": "Nest", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "id": "709487", + "title": "Dynamic Flow, the Wise approach to server driven UI", + "description": "In this presentation I will talk about how we combined the expertise of Android, iOS and Web engineers to create a server driven UI solution using Kotlin Multi Platform (KMP). This approach has allowed Wise to efficiently scale our product and business, resulting in more than 500 unique native screens being generated by the backend. \r\n\r\nLearn how this project has empowered backend engineers, streamlined UI development process and enhanced cross-platform collaboration.", + "startsAt": "2024-10-31T15:10:00", + "endsAt": "2024-10-31T15:50:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "f5e37102-a8be-4e34-be47-b98329cd2a23", + "name": "Phellipe Silva" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264361, + "name": "KMP" + }, + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264381, + "name": "Cross-Platform" + } + ], + "sort": 4 + } + ], + "roomId": 53982, + "room": "Nest", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "id": "736493", + "title": "Asynchrony and the infinite conveyor belt: Advanced coroutines and flows", + "description": "Most likely, you already know how to use coroutines and flows. They're part of our everyday existence. But all too often we learn them through repetition and rote learning, rather than forging a meaningful understanding of what's happening deep down. \r\nSo:\r\n\r\n- What *really* happens when you mark a function as 'suspend'?\r\n- How come crazy things like infinite loops on the main thread are possible?\r\n- What's the magic link between coroutines and flows?\r\n- What, really, is a scope? A context? A job?\r\n\r\nAnd there's a satisfying conclusion, too! We find that everything is linked: the path that seems to add complexity, in fact takes us back full circle.", + "startsAt": "2024-10-31T16:05:00", + "endsAt": "2024-10-31T16:45:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "1fb7ac5d-d848-4d40-840e-d8ae38128ab4", + "name": "Tom Colvin" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264359, + "name": "Kotlin" + }, + { + "id": 264362, + "name": "Flow" + }, + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264377, + "name": "Modern Android Development" + }, + { + "id": 264384, + "name": "Android" + }, + { + "id": 264386, + "name": "Coroutines" + } + ], + "sort": 4 + } + ], + "roomId": 53982, + "room": "Nest", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + } + ], + "hasOnlyPlenumSessions": false + }, + { + "id": 54703, + "name": "Chromecast", + "sessions": [ + { + "id": "57d377d6-0328-445e-8212-70bacc1b8006", + "title": ".", + "description": null, + "startsAt": "2024-10-31T10:20:00", + "endsAt": "2024-10-31T11:00:00", + "isServiceSession": true, + "isPlenumSession": false, + "speakers": [], + "categories": [], + "roomId": 54703, + "room": "Chromecast", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false + }, + { + "id": "2167722e-e9a6-4cfd-8180-7436335316be", + "title": ".", + "description": null, + "startsAt": "2024-10-31T11:15:00", + "endsAt": "2024-10-31T11:35:00", + "isServiceSession": true, + "isPlenumSession": false, + "speakers": [], + "categories": [], + "roomId": 54703, + "room": "Chromecast", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false + }, + { + "id": "757537", + "title": "Roundtable: Mastering Release Management", + "description": "Teams of all sizes require release management processes that should ensure smooth delivery of app updates, while balancing the need for innovation with stability and user experience. Coordinating teams, managing release cycles, and mitigating risks while adapting to the Android ecosystem can be challenging. Join this open roundtable discussion to examine:\r\n•\tWhat are the biggest challenges in managing releases within the Android ecosystem, especially with the variety of devices and OS versions?\r\n•\tHow do you allow frequent releases while minimizing the toil of release management?\r\n•\tHow do you ensure a smooth release process while balancing the need for continuous innovation and feature updates?\r\n•\tWhat are some best practices for testing and quality assurance before rolling out an Android release to a large user base?\r\n•\tHow do you manage the potential impact of an unsuccessful or buggy release, and what steps are taken to mitigate such risks?\r\n•\tWhat role do user feedback and crash analytics play in refining subsequent Android releases?\r\n", + "startsAt": "2024-10-31T11:50:00", + "endsAt": "2024-10-31T12:30:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "3d4b5098-0829-4b34-b0bf-122ab126fdae", + "name": "Maria Neumayer" + }, + { + "id": "3b1289fc-f706-4f8f-9061-c77e3e250223", + "name": "Adam Ahmed" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 303052, + "name": "Roundtable Discussion" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54703, + "room": "Chromecast", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "id": "757518", + "title": "Roundtable: EM or IC? What’s Right for Me?", + "description": "Choosing between a career path as an engineering manager or an individual contributor is a pivotal decision for engineers as they advance in their careers. This choice often hinges on personal interests, leadership aspirations, and the desire for hands-on technical work. Let’s get together and discuss:\r\n•\tWhat are the key factors that developers should consider when deciding between becoming an engineering manager or staying on the individual contributor track?\r\n•\tHow can someone assess whether they have the necessary skills and mindset to transition into a management role?\r\n•\tWhat are the most significant challenges and rewards that come with each path—engineering management versus individual contribution?\r\n•\tHow can companies support employees who are undecided or want to explore both career paths simultaneously?\r\n", + "startsAt": "2024-10-31T13:40:00", + "endsAt": "2024-10-31T14:20:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "af079576-c7db-497a-990d-919fc2472e45", + "name": "Anastasia López" + }, + { + "id": "f40ca183-824d-43d9-9e63-ee0edb5aa307", + "name": "Ataul Munim" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 303052, + "name": "Roundtable Discussion" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54703, + "room": "Chromecast", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "id": "606a45c5-6e96-49d9-b146-808283235582", + "title": ".", + "description": null, + "startsAt": "2024-10-31T14:35:00", + "endsAt": "2024-10-31T14:55:00", + "isServiceSession": true, + "isPlenumSession": false, + "speakers": [], + "categories": [], + "roomId": 54703, + "room": "Chromecast", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false + }, + { + "id": "768515", + "title": "Kotlin by JetBrains, present and future", + "description": "Have a chat with Developer Advocates from JetBrains about anything Kotlin related on your mind. Language evolution, tooling, development practices, Kotlin Multiplatform and Compose Multiplatform... We're here for all of it!", + "startsAt": "2024-10-31T15:10:00", + "endsAt": "2024-10-31T15:50:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "1916ae1c-96d7-480f-9eed-bf5dce444441", + "name": "Márton Braun" + }, + { + "id": "a82c6942-6e2b-4d80-9883-0b84b932d6ef", + "name": "Sebastian Aigner" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 303052, + "name": "Roundtable Discussion" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54703, + "room": "Chromecast", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "id": "757517", + "title": "Roundtable: Community-Driven Development: How to Contribute to OSS", + "description": "Contributing to and maintaining open-source libraries in Android is a rewarding but challenging endeavor that benefits the developer community while enhancing personal skills. It involves code contributions, issue resolution, and ensuring the library remains stable and relevant over time. Join us as we have an open discussion about:\r\n•\tWhat motivated you to start contributing to or maintaining an open-source library in the Android ecosystem, or how do you get started?\r\n•\tWhat are the biggest challenges you face when maintaining an open-source project, particularly when managing contributions from other developers?\r\n•\tHow do you ensure that an open-source library remains compatible and up-to-date with new Android releases and API changes?\r\n•\tWhat are some best practices for encouraging meaningful contributions and fostering an active community around your open-source project?\r\n•\tHow do you balance the time commitment of maintaining an open-source library with other professional or personal responsibilities?\r\n", + "startsAt": "2024-10-31T16:05:00", + "endsAt": "2024-10-31T16:45:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "8730d40b-3fb7-450d-ab71-08c9dd81a48a", + "name": "Nicola Corti" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 303052, + "name": "Roundtable Discussion" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54703, + "room": "Chromecast", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + } + ], + "hasOnlyPlenumSessions": false + }, + { + "id": 54706, + "name": "Ask Android", + "sessions": [ + { + "id": "764303", + "title": "Ask Android! - Compose, KMP, Gemini in AS", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T10:20:00", + "endsAt": "2024-10-31T11:00:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "c16c95a9-0e07-4838-9cba-5d041aee4d14", + "name": "Rebecca Franks" + }, + { + "id": "e397fee8-078f-4694-8a1f-35b1d57f1fce", + "name": "Sebastiano Poggi" + }, + { + "id": "eb4483f1-306b-447d-9888-648ec0fc0018", + "name": "Chris Sinco" + }, + { + "id": "7280b9e7-ddf7-4cfb-b85b-1e998d851f66", + "name": "Marcello Galhardo" + }, + { + "id": "1dfe9bb5-d9bf-41a9-b7d6-dcfd7953e941", + "name": "Nick Butcher" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "id": "764328", + "title": "Ask Android! - Compose, KMP, Gemini in AS", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T11:00:00", + "endsAt": "2024-10-31T11:15:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "e04a04d0-c875-4f36-ae02-914ba87b5b32", + "name": "Rebecca Gutteridge" + }, + { + "id": "e397fee8-078f-4694-8a1f-35b1d57f1fce", + "name": "Sebastiano Poggi" + }, + { + "id": "eb4483f1-306b-447d-9888-648ec0fc0018", + "name": "Chris Sinco" + }, + { + "id": "7280b9e7-ddf7-4cfb-b85b-1e998d851f66", + "name": "Marcello Galhardo" + }, + { + "id": "1dfe9bb5-d9bf-41a9-b7d6-dcfd7953e941", + "name": "Nick Butcher" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "id": "764329", + "title": "Ask Android! - Compose, KMP, Gemini in AS", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T11:15:00", + "endsAt": "2024-10-31T11:35:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "e397fee8-078f-4694-8a1f-35b1d57f1fce", + "name": "Sebastiano Poggi" + }, + { + "id": "eb4483f1-306b-447d-9888-648ec0fc0018", + "name": "Chris Sinco" + }, + { + "id": "7280b9e7-ddf7-4cfb-b85b-1e998d851f66", + "name": "Marcello Galhardo" + }, + { + "id": "1dfe9bb5-d9bf-41a9-b7d6-dcfd7953e941", + "name": "Nick Butcher" + }, + { + "id": "e4292032-5462-494b-abfd-3898301476e2", + "name": "Rebecca Franks" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "id": "764330", + "title": "Ask Android! - Compose, KMP, Gemini in AS", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T11:35:00", + "endsAt": "2024-10-31T11:50:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "e397fee8-078f-4694-8a1f-35b1d57f1fce", + "name": "Sebastiano Poggi" + }, + { + "id": "eb4483f1-306b-447d-9888-648ec0fc0018", + "name": "Chris Sinco" + }, + { + "id": "7280b9e7-ddf7-4cfb-b85b-1e998d851f66", + "name": "Marcello Galhardo" + }, + { + "id": "1dfe9bb5-d9bf-41a9-b7d6-dcfd7953e941", + "name": "Nick Butcher" + }, + { + "id": "e4292032-5462-494b-abfd-3898301476e2", + "name": "Rebecca Franks" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "id": "764323", + "title": "Ask Android! - Compose, KMP, Gemini in AS (copy)", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T11:50:00", + "endsAt": "2024-10-31T12:30:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "e397fee8-078f-4694-8a1f-35b1d57f1fce", + "name": "Sebastiano Poggi" + }, + { + "id": "eb4483f1-306b-447d-9888-648ec0fc0018", + "name": "Chris Sinco" + }, + { + "id": "7280b9e7-ddf7-4cfb-b85b-1e998d851f66", + "name": "Marcello Galhardo" + }, + { + "id": "e4292032-5462-494b-abfd-3898301476e2", + "name": "Rebecca Franks" + }, + { + "id": "f4580454-6603-44a8-9fcd-e98fe6cc8981", + "name": "Matvei Malkov" + }, + { + "id": "b3baa5b6-3c85-4a36-97c5-9a252f887ae4", + "name": "Jelle Fresen" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "id": "764331", + "title": "Ask Android! - Compose, GenAI, WearOS", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T12:30:00", + "endsAt": "2024-10-31T13:40:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "e4292032-5462-494b-abfd-3898301476e2", + "name": "Rebecca Franks" + }, + { + "id": "f4580454-6603-44a8-9fcd-e98fe6cc8981", + "name": "Matvei Malkov" + }, + { + "id": "b3baa5b6-3c85-4a36-97c5-9a252f887ae4", + "name": "Jelle Fresen" + }, + { + "id": "837dd36a-5782-49cc-8da5-3f7fc7e4da8a", + "name": "Kateryna Semenova" + }, + { + "id": "31e8a089-eb2f-437c-ac09-bb55af17f934", + "name": "Donovan McMurray" + }, + { + "id": "2fb0b020-9fa9-49f1-b4a4-54f71dca57c5", + "name": "Kseniia Shumelchyk" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "id": "764343", + "title": "Ask Android! - Compose, GenAI, WearOS", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T13:40:00", + "endsAt": "2024-10-31T14:20:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "e34e8c09-ac65-4927-852e-ff2fc462afac", + "name": "Anton Beloglazov" + }, + { + "id": "7a8a22c6-5b01-4f0a-bc04-12d4ada5de21", + "name": "Jossi Wolf" + }, + { + "id": "b99dc2e2-df83-4045-a5cb-c4d7dea5db1e", + "name": "Halil Ozercan" + }, + { + "id": "837dd36a-5782-49cc-8da5-3f7fc7e4da8a", + "name": "Kateryna Semenova" + }, + { + "id": "2fb0b020-9fa9-49f1-b4a4-54f71dca57c5", + "name": "Kseniia Shumelchyk" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "id": "764345", + "title": "Ask Android! - Compose, GenAI, Platform", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T14:20:00", + "endsAt": "2024-10-31T14:35:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "7a8a22c6-5b01-4f0a-bc04-12d4ada5de21", + "name": "Jossi Wolf" + }, + { + "id": "b99dc2e2-df83-4045-a5cb-c4d7dea5db1e", + "name": "Halil Ozercan" + }, + { + "id": "e34e8c09-ac65-4927-852e-ff2fc462afac", + "name": "Anton Beloglazov" + }, + { + "id": "837dd36a-5782-49cc-8da5-3f7fc7e4da8a", + "name": "Kateryna Semenova" + }, + { + "id": "9079b8b4-be1f-4213-a446-6b2bdcad0c04", + "name": "Fung Lam" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "id": "764347", + "title": "Ask Android! - GenAI, Platform, Adaptive apps on all form factors", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T14:35:00", + "endsAt": "2024-10-31T14:55:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "81ee4554-4839-4192-9a74-ecb32dff2819", + "name": "Alex Vanyo" + }, + { + "id": "ecd35d14-91dc-4ce6-a6db-fd7a26424a36", + "name": "Chris Assigbe" + }, + { + "id": "837dd36a-5782-49cc-8da5-3f7fc7e4da8a", + "name": "Kateryna Semenova" + }, + { + "id": "9079b8b4-be1f-4213-a446-6b2bdcad0c04", + "name": "Fung Lam" + }, + { + "id": "e3b228b6-3b08-4edb-89dd-1a5625d9e4c2", + "name": "Francesco Romano" + }, + { + "id": "c83dc04e-7a0a-4cbc-9d73-10d08f18a68b", + "name": "Miguel Montemayor" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "id": "764350", + "title": "Ask Android! - Gen AI, Platform, Adaptive apps on all form factors", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T14:55:00", + "endsAt": "2024-10-31T15:10:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "327f56b4-c631-4489-9590-37bdfc856e3a", + "name": "Miguel Montemayor" + }, + { + "id": "ecd35d14-91dc-4ce6-a6db-fd7a26424a36", + "name": "Chris Assigbe" + }, + { + "id": "837dd36a-5782-49cc-8da5-3f7fc7e4da8a", + "name": "Kateryna Semenova" + }, + { + "id": "9079b8b4-be1f-4213-a446-6b2bdcad0c04", + "name": "Fung Lam" + }, + { + "id": "ef1c33eb-89e9-49f6-9abc-da8140988097", + "name": "Alex Vanyo" + }, + { + "id": "e3b228b6-3b08-4edb-89dd-1a5625d9e4c2", + "name": "Francesco Romano" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "id": "764353", + "title": "Ask Android! -GenAI, Platform, Adaptive apps on all form factors", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T15:10:00", + "endsAt": "2024-10-31T15:50:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "e2ad2515-5292-4deb-8ac6-6c7ea5be1543", + "name": "Rob Orgiu" + }, + { + "id": "f55e8e03-a341-4c8a-b4fc-a7e97f82db07", + "name": "Xiaodao Wu" + }, + { + "id": "837dd36a-5782-49cc-8da5-3f7fc7e4da8a", + "name": "Kateryna Semenova" + }, + { + "id": "9079b8b4-be1f-4213-a446-6b2bdcad0c04", + "name": "Fung Lam" + }, + { + "id": "56b04326-604d-4140-b159-f93574c86ccd", + "name": "Ran Nachmany" + }, + { + "id": "d7f1c9d9-d537-4240-864e-ba626457f534", + "name": "Satish Shende" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "id": "764351", + "title": "Ask Android! - WearOS, Media, Adaptive apps on all form factors", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T15:50:00", + "endsAt": "2024-10-31T16:05:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "c70d10a5-999c-4858-a39c-7326570cee91", + "name": "Ran Nachmany" + }, + { + "id": "1c163a41-865b-4915-b032-ef4942e2f47c", + "name": "Kristina Simakova" + }, + { + "id": "e2ad2515-5292-4deb-8ac6-6c7ea5be1543", + "name": "Rob Orgiu" + }, + { + "id": "2fb0b020-9fa9-49f1-b4a4-54f71dca57c5", + "name": "Kseniia Shumelchyk" + }, + { + "id": "f55e8e03-a341-4c8a-b4fc-a7e97f82db07", + "name": "Xiaodao Wu" + }, + { + "id": "d713390d-9628-412f-9778-9c45aeb6b13e", + "name": "Satish Shende" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "id": "764365", + "title": "Ask Android! - WearOS, Media, Adaptive apps on all form factors", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T16:05:00", + "endsAt": "2024-10-31T16:45:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "f89ea766-4af9-4b88-8842-ede574e4c648", + "name": "Paul Lammertsma" + }, + { + "id": "8b706c47-edbc-41e3-af85-3328b4134e57", + "name": "Ben Sagmoe" + }, + { + "id": "3b5772d2-d3d5-42fe-8015-8f7b0e09b472", + "name": "Thomas Weathers" + }, + { + "id": "c8229c07-b474-4044-af66-1c8da6779bc6", + "name": "Chiko Shimizu" + }, + { + "id": "1c163a41-865b-4915-b032-ef4942e2f47c", + "name": "Kristina Simakova" + }, + { + "id": "2fb0b020-9fa9-49f1-b4a4-54f71dca57c5", + "name": "Kseniia Shumelchyk" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "id": "764370", + "title": "Ask Android! - WearOS, Media, Adaptive apps on all form factors", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T16:45:00", + "endsAt": "2024-10-31T17:00:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "c8229c07-b474-4044-af66-1c8da6779bc6", + "name": "Chiko Shimizu" + }, + { + "id": "1c163a41-865b-4915-b032-ef4942e2f47c", + "name": "Kristina Simakova" + }, + { + "id": "8b706c47-edbc-41e3-af85-3328b4134e57", + "name": "Ben Sagmoe" + }, + { + "id": "2fb0b020-9fa9-49f1-b4a4-54f71dca57c5", + "name": "Kseniia Shumelchyk" + }, + { + "id": "f89ea766-4af9-4b88-8842-ede574e4c648", + "name": "Paul Lammertsma" + }, + { + "id": "3b5772d2-d3d5-42fe-8015-8f7b0e09b472", + "name": "Thomas Weathers" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + } + ], + "hasOnlyPlenumSessions": false + } + ], + "timeSlots": [ + { + "slotStart": "07:45:00", + "rooms": [ + { + "id": 49270, + "name": "Hangouts", + "session": { + "id": "26c67130-cbaa-40e1-8270-4daea240daa2", + "title": "Registration & Check-In", + "description": null, + "startsAt": "2024-10-31T07:45:00", + "endsAt": "2024-10-31T09:00:00", + "isServiceSession": true, + "isPlenumSession": true, + "speakers": [], + "categories": [], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false + }, + "index": 0 + } + ] + }, + { + "slotStart": "09:00:00", + "rooms": [ + { + "id": 49270, + "name": "Hangouts", + "session": { + "id": "f1e96bdd-8d47-4dd2-b814-1421662f1da1", + "title": "Welcome & Keynote", + "description": null, + "startsAt": "2024-10-31T09:00:00", + "endsAt": "2024-10-31T09:10:00", + "isServiceSession": true, + "isPlenumSession": true, + "speakers": [], + "categories": [], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false + }, + "index": 0 + } + ] + }, + { + "slotStart": "09:10:00", + "rooms": [ + { + "id": 49270, + "name": "Hangouts", + "session": { + "id": "731273", + "title": "Project Sparkles: how Compose is changing Android Studio", + "description": "We use Android Studio every day, and appreciate how its rich feature set makes our job easier. Most people know that Android Studio is built on the IntelliJ Platform, the same that underpins the popular IntelliJ IDEA from JetBrains, which has seen lasting success for over 20 years. It’s a solid, expansive, and by far the best foundation on which we could stand on to deliver Android-oriented goodies.\r\n\r\nHowever, some parts of the IntelliJ Platform show the signs of time; in particular its UI framework, Swing, is proving the most limiting, having been around for almost 30 years. Don’t get us wrong — it works, and the IDEs themselves prove you can ship complex UIs by using Swing on the IntelliJ Platform. But as we looked at how nice it is to develop UIs on Android by using Jetpack Compose, we thought: why don’t we do the same?\r\n\r\nEnter Project Sparkles, which aims at gradually introducing new high-quality, polished UI surfaces in Android Studio, developed in Compose for Desktop, with all the bells and whistles you can expect from a top-tier interface. In this talk, we’ll cover how Project Sparkles is impacting the development of Android Studio, addressing long-standing user feedback, and how we’re working together with other teams at Google and JetBrains to build a framework to make your favourite IDE even better and easier to understand.\r\n\r\nWe’ll demonstrate a few examples of features already shipping that are powered by Project Sparkles, explain what our goals and ambitions are, and even show some sneak peeks of things you may see in a future Studio version. UI enthusiasts, assemble!", + "startsAt": "2024-10-31T09:10:00", + "endsAt": "2024-10-31T10:00:00", + "isServiceSession": false, + "isPlenumSession": true, + "speakers": [ + { + "id": "e397fee8-078f-4694-8a1f-35b1d57f1fce", + "name": "Sebastiano Poggi" + }, + { + "id": "eb4483f1-306b-447d-9888-648ec0fc0018", + "name": "Chris Sinco" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264357, + "name": "Keynote" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264358, + "name": "Jetpack Compose" + }, + { + "id": 264379, + "name": "Android Studio" + }, + { + "id": 264390, + "name": "UI/UX" + } + ], + "sort": 4 + } + ], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 0 + } + ] + }, + { + "slotStart": "10:00:00", + "rooms": [ + { + "id": 49270, + "name": "Hangouts", + "session": { + "id": "6cf72726-82b7-4eb4-8be1-93a3ecd92823", + "title": "Break", + "description": null, + "startsAt": "2024-10-31T10:00:00", + "endsAt": "2024-10-31T10:20:00", + "isServiceSession": true, + "isPlenumSession": true, + "speakers": [], + "categories": [], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false + }, + "index": 0 + } + ] + }, + { + "slotStart": "10:20:00", + "rooms": [ + { + "id": 49270, + "name": "Hangouts", + "session": { + "id": "736883", + "title": "Optimizing Kotlin Code in Practice", + "description": "In this session we will look at a series of optimizations that were done in Jetpack Compose to learn how different types of optimizations can affect performance. These optimizations include code flow/algorithms, data structures, low-level bytecode optimizations, and memory optimizations. You will learn how to access and understand the bytecode and the machine code that your Kotlin code produces, so you can discover how to improve your applications on your own.", + "startsAt": "2024-10-31T10:20:00", + "endsAt": "2024-10-31T11:00:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "152f613f-841b-407d-9a65-3703ec2dfae2", + "name": "Romain Guy" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264358, + "name": "Jetpack Compose" + }, + { + "id": 264359, + "name": "Kotlin" + } + ], + "sort": 4 + } + ], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 0 + }, + { + "id": 49271, + "name": "Glass", + "session": { + "id": "731970", + "title": "Wireless protocols for the next generation IoT devices", + "description": "In an era where mobile apps and IoT devices are becoming increasingly interconnected, understanding the nuances of modern wireless protocols is crucial for software developers. This technical talk aims to delve into the latest advancements and practical applications of wireless communication technologies, including Bluetooth Low Energy (BLE), WiFi, Ultra-Wideband (UWB), Thread, LoRaWAN, and more. Learn when and how to use each protocol and their pros and cons. ", + "startsAt": "2024-10-31T10:20:00", + "endsAt": "2024-10-31T11:00:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "79823093-1b16-4a2b-b0a9-ea4cd25b92f5", + "name": "Erik Hellman" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264351, + "name": "Advanced" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264369, + "name": "Other" + }, + { + "id": 264370, + "name": "IoT" + }, + { + "id": 264371, + "name": "Wearables" + }, + { + "id": 264381, + "name": "Cross-Platform" + }, + { + "id": 264384, + "name": "Android" + } + ], + "sort": 4 + } + ], + "roomId": 49271, + "room": "Glass", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 1 + }, + { + "id": 49272, + "name": "Things", + "session": { + "id": "735950", + "title": "What's new in Android 15 Security?", + "description": "Audience: Android Developers\r\nLevel: Beginner/Intermediate (No previous security experience required)\r\n\r\nTalk Summary:\r\n\r\nIn \"What's New in Android 15 Security?\", we’ll guide Android developers through the essential security updates and restrictions introduced in Android 15. Starting with a brief recap of the key security changes from Android 14, we'll dive into the new restrictions and features in Android 15 that every developer should know:\r\n\r\n- Supporting Android 15’s Private Space: Discover how to enable your app for this new feature to enhance user privacy while managing the challenges of a new type of process termination.\r\n- New Mitigation for Task Hijacking: Explore the new security measures designed to prevent malicious background apps from bringing other apps to the foreground.\r\n- Safer Intents: Discover enhanced safeguards that make intents more secure and robust, minimizing the risk of data leaks and unauthorized access.\r\n- Further Foreground Service Restrictions: Understand the tightened restrictions on foreground services and how to adapt your app to comply.\r\n- Recap of Privacy Sandbox Updates: Review the Privacy Sandbox and its updates in Android 15, focusing on how these changes impact user data handling and ad targeting.\r\n\r\n\r\nKey Takeaways:\r\n- Overview of Security Changes: Gain a clear understanding of the security updates in Android 15 and their implications for app development.\r\n- Practical Compliance Tips: Learn actionable strategies to ensure your app remains compliant with the latest security restrictions when running and/or targeting Android 15.\r\n- Leverage New Features: Discover how to take advantage of Android 15’s new security features to improve your app’s security and promote user privacy.\r\n\r\nSpeaker Experience:\r\nWith over 10 years of experience as a Senior Android Developer, co-authoring the Android Security Cookbook, and delivering talks internationally on Android security, I bring a deep understanding of the platform's security evolution. This will be a fresh and engaging talk for Droidcon London 2024.", + "startsAt": "2024-10-31T10:20:00", + "endsAt": "2024-10-31T11:00:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "8b008502-24e7-4af7-a7a8-d92a7e683271", + "name": "Scott Alexander-Bown" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264372, + "name": "Security" + }, + { + "id": 264384, + "name": "Android" + } + ], + "sort": 4 + } + ], + "roomId": 49272, + "room": "Things", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 2 + }, + { + "id": 53981, + "name": "Stadia", + "session": { + "id": "693733", + "title": "Hardware development with KMP and Compose Desktop", + "description": "Nowadays, Mobile software development focuses on efficient architecture, scalability and delightful UX. Those are quite important topics but sometimes we forget Mobile Development has its roots in Embedded Software Development, which was that branch of software development focused on running code on limited resource devices.\r\n\r\nBoth have diverged, one specialised in mobile apps for smartphones, while the other has transformed more into IoT, industrial and other types of solutions.\r\n\r\nThere was an attempt to bring both together with Android Things. It made Android app development skills transferable for hardware development, letting developers create apps with their existing knowledge and interact with the hardware through “high-level” driver APIs. Unfortunately, it was decommissioned by Google. \r\n\r\nWith the flourishing of technologies like KMP and Compose Desktop, the regular Android developer again has some transferable skills that can be used to develop apps for non-smartphone hardware. \r\n\r\nIn this session I will talk about how to develop a simple app for devices like the Raspberry Pi, covering details like interacting with GPIO, WIFI and Bluetooth communication as well as current issues and workarounds. ", + "startsAt": "2024-10-31T10:20:00", + "endsAt": "2024-10-31T11:00:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "95a6035d-1167-4cc1-9974-bc065a077893", + "name": "Enrique Ramírez" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264358, + "name": "Jetpack Compose" + }, + { + "id": 264361, + "name": "KMP" + }, + { + "id": 264370, + "name": "IoT" + } + ], + "sort": 4 + } + ], + "roomId": 53981, + "room": "Stadia", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 3 + }, + { + "id": 53982, + "name": "Nest", + "session": { + "id": "711892", + "title": "Gradle: The Build System That Loves To Hate You", + "description": "Come to hear a talk about dozens of foot guns in Gradle that can make you tear your hair out as you try to \"just make it work\", presented by someone who has stepped on most of the rakes. For example, did you know every call in groovy is using reflection?!\r\n\r\nAlong with the issues you will also learn about way to avoid it or at least minimize your risk of misery. After the talk you should have more confidence as you venture into the land of Gradle build.", + "startsAt": "2024-10-31T10:20:00", + "endsAt": "2024-10-31T11:00:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "8e2c2869-4beb-4868-8651-8567219ea947", + "name": "Aurimas Liutikas" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264380, + "name": "Tooling" + }, + { + "id": 264394, + "name": "CI/CD" + }, + { + "id": 264378, + "name": "Gradle" + } + ], + "sort": 4 + } + ], + "roomId": 53982, + "room": "Nest", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 4 + }, + { + "id": 54703, + "name": "Chromecast", + "session": { + "id": "57d377d6-0328-445e-8212-70bacc1b8006", + "title": ".", + "description": null, + "startsAt": "2024-10-31T10:20:00", + "endsAt": "2024-10-31T11:00:00", + "isServiceSession": true, + "isPlenumSession": false, + "speakers": [], + "categories": [], + "roomId": 54703, + "room": "Chromecast", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false + }, + "index": 5 + }, + { + "id": 54706, + "name": "Ask Android", + "session": { + "id": "764303", + "title": "Ask Android! - Compose, KMP, Gemini in AS", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T10:20:00", + "endsAt": "2024-10-31T11:00:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "c16c95a9-0e07-4838-9cba-5d041aee4d14", + "name": "Rebecca Franks" + }, + { + "id": "e397fee8-078f-4694-8a1f-35b1d57f1fce", + "name": "Sebastiano Poggi" + }, + { + "id": "eb4483f1-306b-447d-9888-648ec0fc0018", + "name": "Chris Sinco" + }, + { + "id": "7280b9e7-ddf7-4cfb-b85b-1e998d851f66", + "name": "Marcello Galhardo" + }, + { + "id": "1dfe9bb5-d9bf-41a9-b7d6-dcfd7953e941", + "name": "Nick Butcher" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 6 + } + ] + }, + { + "slotStart": "11:00:00", + "rooms": [ + { + "id": 49270, + "name": "Hangouts", + "session": { + "id": "29989aaa-e191-481d-bce4-3da2753edb6e", + "title": "Break", + "description": null, + "startsAt": "2024-10-31T11:00:00", + "endsAt": "2024-10-31T11:15:00", + "isServiceSession": true, + "isPlenumSession": true, + "speakers": [], + "categories": [], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false + }, + "index": 0 + }, + { + "id": 54706, + "name": "Ask Android", + "session": { + "id": "764328", + "title": "Ask Android! - Compose, KMP, Gemini in AS", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T11:00:00", + "endsAt": "2024-10-31T11:15:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "e04a04d0-c875-4f36-ae02-914ba87b5b32", + "name": "Rebecca Gutteridge" + }, + { + "id": "e397fee8-078f-4694-8a1f-35b1d57f1fce", + "name": "Sebastiano Poggi" + }, + { + "id": "eb4483f1-306b-447d-9888-648ec0fc0018", + "name": "Chris Sinco" + }, + { + "id": "7280b9e7-ddf7-4cfb-b85b-1e998d851f66", + "name": "Marcello Galhardo" + }, + { + "id": "1dfe9bb5-d9bf-41a9-b7d6-dcfd7953e941", + "name": "Nick Butcher" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 6 + } + ] + }, + { + "slotStart": "11:15:00", + "rooms": [ + { + "id": 49270, + "name": "Hangouts", + "session": { + "id": "742198", + "title": "Demystifying Code Signing", + "description": "All Android apps have to be code signed. This is performed either by the developer or through Google Play Signing. Despite this, code signing and the processes around it are shrouded in mystery.\r\n\r\nDrawing from lived experiences, this talk with cover:\r\n - What is a code signature?\r\n - Why do we need to sign in the first place?\r\n - Developer signing vs Google Play Signing\r\n - Security expectations vs reality\r\n - Going beyond signing", + "startsAt": "2024-10-31T11:15:00", + "endsAt": "2024-10-31T11:35:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "f8c173b5-64f5-43e4-9f1c-ee44587b7691", + "name": "Neal Michie" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264353, + "name": "Lightning talk" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264372, + "name": "Security" + }, + { + "id": 264377, + "name": "Modern Android Development" + }, + { + "id": 264379, + "name": "Android Studio" + } + ], + "sort": 4 + } + ], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 0 + }, + { + "id": 49271, + "name": "Glass", + "session": { + "id": "735932", + "title": "Don't Build to Last: Strategies for Designing and Productionising Experiments", + "description": "Striking the right balance between rapid iteration and long-term feature quality can feel like an impossible task. In this session, we'll explore how to move fast without breaking things, and delve into the art of \"productionising\" experimental code.\r\n\r\nThe session will navigate the entire lifecycle of experimentation from an Android engineers perspective. You'll learn how to work with your data team to design high-quality experiments with tight feedback loops and how to effectively roll them out - whether that involves making new behaviour permanent or cleaning up the mess. This session offers practical insights for engineering teams looking to innovate quickly while maintaining a robust production environment.", + "startsAt": "2024-10-31T11:15:00", + "endsAt": "2024-10-31T11:35:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "85f45c57-98a0-45e9-8a5f-ed6096e268b9", + "name": "Kate Moksina" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264353, + "name": "Lightning talk" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264363, + "name": "Testing" + }, + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264380, + "name": "Tooling" + }, + { + "id": 264384, + "name": "Android" + } + ], + "sort": 4 + } + ], + "roomId": 49271, + "room": "Glass", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 1 + }, + { + "id": 49272, + "name": "Things", + "session": { + "id": "733188", + "title": "Improving App Performance With Custom Thread Pools", + "description": "In this presentation, I will discuss how to optimise the performance of an app by implementing a custom thread pool.\r\n\r\nThe audience will learn how to replace multiple thread pools created by libraries such as Coroutines, WorkManager, and OkHttp with a single, efficient custom thread pool. \r\n\r\nKey points include:\r\n\r\n1. Thread Pool Awareness: Understanding how various libraries create threads without awareness of existing threads and what the impact of that is on performance.\r\n\r\n2. Thread Pool Auditing: Demonstrating how to print to the LogCat a list of the currently running threads and showcasing a before and after.\r\n\r\n3. Performance Enhancement: Reducing RAM usage and improving startup times by consolidating thread pools.\r\n\r\n4. Custom Thread Pool Implementation: Demonstrating through code snippets how to create a Thread Pool and integrate it into OkHttp, Coroutines and WorkManager.\r\n\r\n5. Understanding The Differences Between Coroutines IO and Default Dispatchers: Using this knowledge to create a custom Thread Pool for IO work and CPU work.\r\n\r\nThis talk will provide concrete techniques for developers to enhance app performance, making it a standout topic for the conference.\r\n\r\nExperience Level:\r\n7 years experience as an Android Engineer, currently at Compare The Market for almost 4 years.\r\n\r\nI would rate myself as having intermediate knowledge on this topic, however it is a specialised topic.\r\n\r\nI have not given this talk anywhere, although I have presented this topic internally at Compare The Market.\r\n\r\nKeywords:\r\nasynchronous programming, thread pool, performance optimisation", + "startsAt": "2024-10-31T11:15:00", + "endsAt": "2024-10-31T11:35:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "e841b549-a549-420e-ba73-3039c567a609", + "name": "Tin Novakovic" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264351, + "name": "Advanced" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264353, + "name": "Lightning talk" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264369, + "name": "Other" + }, + { + "id": 264384, + "name": "Android" + }, + { + "id": 264386, + "name": "Coroutines" + } + ], + "sort": 4 + } + ], + "roomId": 49272, + "room": "Things", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 2 + }, + { + "id": 53981, + "name": "Stadia", + "session": { + "id": "756181", + "title": "Fortify the Fort: Think outside the security", + "description": "Protection is deliberately included in everything you do with Android. Privacy is enabled through Android security. Like any other developer, you need to follow a shared responsibility security model, meaning your customers and users play an essential part in the overall security posture. This talk shows how a developer can follow simple guidelines to improve the application's security and stop unauthorised access.", + "startsAt": "2024-10-31T11:15:00", + "endsAt": "2024-10-31T11:35:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "4b141461-befd-4bd3-83c9-1c1f7599a9c6", + "name": "Goran Minov" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264353, + "name": "Lightning talk" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264372, + "name": "Security" + } + ], + "sort": 4 + } + ], + "roomId": 53981, + "room": "Stadia", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 3 + }, + { + "id": 53982, + "name": "Nest", + "session": { + "id": "735282", + "title": "Securing the Unseen: Advanced Threats, Best Practices & Challenges in Mobile App Security", + "description": "In today's app-driven world, securing mobile applications is not just an afterthought—it's a critical component of the development process. This session at DroidCon London will take you deep into the mobile app security world, focusing on the latest threats that target mobile applications and the advanced techniques used to secure them.\r\n\r\nWe'll explore cutting-edge security practices that should be integrated throughout the app development lifecycle, from secure coding standards to app security and comprehensive threat modeling. You'll learn to identify and mitigate vulnerabilities before they become exploits, ensuring your applications are resilient against modern attacks.\r\n\r\nWe'll discuss key risks, security techniques and challenges app developers and security engineers face when trying to secure code, keys, and data effectively.\r\n\r\nThis session is designed for app developers, security professionals, and penetration testers who want to stay ahead of the curve in mobile app security. Join us to enhance your skills and ensure your apps are secure in the face of today's and tomorrow's threats.\r\n", + "startsAt": "2024-10-31T11:15:00", + "endsAt": "2024-10-31T11:35:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "eddfc3bb-2258-45f8-b4a6-50233932a2d2", + "name": "Mohamed Kerroumi" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264353, + "name": "Lightning talk" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264363, + "name": "Testing" + }, + { + "id": 264372, + "name": "Security" + }, + { + "id": 264382, + "name": "AI/ML" + } + ], + "sort": 4 + } + ], + "roomId": 53982, + "room": "Nest", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 4 + }, + { + "id": 54703, + "name": "Chromecast", + "session": { + "id": "2167722e-e9a6-4cfd-8180-7436335316be", + "title": ".", + "description": null, + "startsAt": "2024-10-31T11:15:00", + "endsAt": "2024-10-31T11:35:00", + "isServiceSession": true, + "isPlenumSession": false, + "speakers": [], + "categories": [], + "roomId": 54703, + "room": "Chromecast", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false + }, + "index": 5 + }, + { + "id": 54706, + "name": "Ask Android", + "session": { + "id": "764329", + "title": "Ask Android! - Compose, KMP, Gemini in AS", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T11:15:00", + "endsAt": "2024-10-31T11:35:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "e397fee8-078f-4694-8a1f-35b1d57f1fce", + "name": "Sebastiano Poggi" + }, + { + "id": "eb4483f1-306b-447d-9888-648ec0fc0018", + "name": "Chris Sinco" + }, + { + "id": "7280b9e7-ddf7-4cfb-b85b-1e998d851f66", + "name": "Marcello Galhardo" + }, + { + "id": "1dfe9bb5-d9bf-41a9-b7d6-dcfd7953e941", + "name": "Nick Butcher" + }, + { + "id": "e4292032-5462-494b-abfd-3898301476e2", + "name": "Rebecca Franks" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 6 + } + ] + }, + { + "slotStart": "11:35:00", + "rooms": [ + { + "id": 49270, + "name": "Hangouts", + "session": { + "id": "9f104c35-655f-4d08-8752-1bddf514da82", + "title": "Break", + "description": null, + "startsAt": "2024-10-31T11:35:00", + "endsAt": "2024-10-31T11:50:00", + "isServiceSession": true, + "isPlenumSession": true, + "speakers": [], + "categories": [], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false + }, + "index": 0 + }, + { + "id": 54706, + "name": "Ask Android", + "session": { + "id": "764330", + "title": "Ask Android! - Compose, KMP, Gemini in AS", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T11:35:00", + "endsAt": "2024-10-31T11:50:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "e397fee8-078f-4694-8a1f-35b1d57f1fce", + "name": "Sebastiano Poggi" + }, + { + "id": "eb4483f1-306b-447d-9888-648ec0fc0018", + "name": "Chris Sinco" + }, + { + "id": "7280b9e7-ddf7-4cfb-b85b-1e998d851f66", + "name": "Marcello Galhardo" + }, + { + "id": "1dfe9bb5-d9bf-41a9-b7d6-dcfd7953e941", + "name": "Nick Butcher" + }, + { + "id": "e4292032-5462-494b-abfd-3898301476e2", + "name": "Rebecca Franks" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 6 + } + ] + }, + { + "slotStart": "11:50:00", + "rooms": [ + { + "id": 49270, + "name": "Hangouts", + "session": { + "id": "729194", + "title": "What’s New in Compose Multiplatform - A Live Tour", + "description": "What if you could just… do iOS development? Kotlin and Compose Multiplatform make it possible!\r\n\r\nLive coding our way through the evergrowing ecosystem built by JetBrains, Google, and the wonderful Kotlin community, we’ll show you how you can pick and choose well-established tools and libraries that you already know from Android and use them to build cross-platform apps.\r\n\r\nThis includes the addition of new Jetpack libraries such as Navigation, ViewModel, Room, and more – and you don’t have to make any compromises when it comes to using platform capabilities, either! Using JetBrains Fleet throughout the demos, you’ll also see the tooling support you get when developing multiplatform applications.\r\n\r\nYou may not realize it yet, but you probably already know how to build apps with Compose Multiplatform – for Android, iOS, and beyond.", + "startsAt": "2024-10-31T11:50:00", + "endsAt": "2024-10-31T12:30:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "a82c6942-6e2b-4d80-9883-0b84b932d6ef", + "name": "Sebastian Aigner" + }, + { + "id": "1916ae1c-96d7-480f-9eed-bf5dce444441", + "name": "Márton Braun" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264358, + "name": "Jetpack Compose" + }, + { + "id": 264359, + "name": "Kotlin" + }, + { + "id": 264361, + "name": "KMP" + }, + { + "id": 264364, + "name": "Compose" + }, + { + "id": 264380, + "name": "Tooling" + }, + { + "id": 264381, + "name": "Cross-Platform" + }, + { + "id": 264388, + "name": "Libraries" + } + ], + "sort": 4 + } + ], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 0 + }, + { + "id": 49271, + "name": "Glass", + "session": { + "id": "760426", + "title": "Enter the Metaverse: Android Apps on Meta Horizon OS", + "description": "Meta Horizon Store is open for business to mobile developers. Android developers can now port existing mobile apps, easily add spatial capabilities and publish them for Meta Quest headsets. Start building for the next computing platform to target new users, innovate with mixed reality and grow your audience. With new tooling like Meta Spatial SDK, you can combine the rich ecosystem of Android development and the unique capabilities of Meta Quest via accessible APIs, all while using the mobile development languages, tools, and libraries you’re already familiar with.", + "startsAt": "2024-10-31T11:50:00", + "endsAt": "2024-10-31T12:30:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "555e52b7-fcb6-49ea-81c7-d9b52cc4c7e9", + "name": "Jonathan Wendorf" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264383, + "name": "AR/VR" + }, + { + "id": 264384, + "name": "Android" + } + ], + "sort": 4 + } + ], + "roomId": 49271, + "room": "Glass", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 1 + }, + { + "id": 49272, + "name": "Things", + "session": { + "id": "736303", + "title": "Text in Compose: Beyond the Basics", + "description": "In this talk, we'll explore the intricacies of text rendering in Jetpack Compose. We'll delve into text layout and various text APIs to create visually appealing and interactive text-based interfaces.", + "startsAt": "2024-10-31T11:50:00", + "endsAt": "2024-10-31T12:30:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "d59b3a5b-f721-4356-a3e4-a2f86cb6fc50", + "name": "Anastasia Soboleva" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264358, + "name": "Jetpack Compose" + }, + { + "id": 264364, + "name": "Compose" + }, + { + "id": 264377, + "name": "Modern Android Development" + } + ], + "sort": 4 + } + ], + "roomId": 49272, + "room": "Things", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 2 + }, + { + "id": 53981, + "name": "Stadia", + "session": { + "id": "733000", + "title": "Exploring Android Accessibility Malware", + "description": "Join us in exploring two techniques Android malware uses, focusing on the dangerous combination of credential stuffing attacks and Accessibility Service abuse. We'll demonstrate how cybercriminals can exploit these vulnerabilities to launch large-scale attacks on user accounts across multiple applications.\r\nOur talk will walk you through:\r\n1. The mechanics of credential stuffing and how it exploits common user behaviors.\r\n2. How malware can abuse Android's Accessibility Service to automate malicious actions.\r\n3. A step-by-step demonstration of a proof-of-concept that combines these techniques.\r\n4. Clever methods cybercriminals use to conceal their activities from users.\r\n5. The broader implications of these threats for mobile app security.\r\n 1 of 3\r\nWe'll dive into why these attacks are increasingly prevalent and how they can be executed with alarming ease. By understanding the attacker's perspective, we aim to highlight the critical need for robust security measures in mobile applications. However, implementing such security measures can be challenging for developers, often requiring significant time, expertise, and resources. This is where innovative solutions become crucial. Recognizing this gap in mobile app security, Appdome provides comprehensive protection against these threats through zero-code integration, allowing developers to secure their mobile apps effortlessly.", + "startsAt": "2024-10-31T11:50:00", + "endsAt": "2024-10-31T12:30:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "36110e7b-c926-48ec-be43-b1a10e0641a0", + "name": "Gil Hartman" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264365, + "name": "Accessibility" + }, + { + "id": 264372, + "name": "Security" + }, + { + "id": 264384, + "name": "Android" + } + ], + "sort": 4 + } + ], + "roomId": 53981, + "room": "Stadia", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 3 + }, + { + "id": 53982, + "name": "Nest", + "session": { + "id": "702107", + "title": "[REDACTED]: How to keep your app's secrets, secret", + "description": "Every app has secrets! These could be in many forms (no judgment here!) but in this talk, we'll focus on the most common use case of storing API keys or data in-app that we'd rather not make readily available to malicious actors.\r\n\r\nIn this talk, we'll look at answering one of the most asked questions in mobile security, \"How do I secure my API keys\" and ensure you have the knowledge and tools you need to do so.\r\n\r\nYou'll leave this talk with:\r\n- Actionable security best practices for securing your app\r\n- An idea of how to store API keys, at scale\r\n- Multiple examples of how to securely access your API keys\r\n- Some fun real-world examples of when things go wrong\r\n", + "startsAt": "2024-10-31T11:50:00", + "endsAt": "2024-10-31T12:30:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "f7ad854d-1167-4fab-be0a-2721cf6ae5f2", + "name": "Ed Holloway-George" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264369, + "name": "Other" + }, + { + "id": 264372, + "name": "Security" + }, + { + "id": 264384, + "name": "Android" + }, + { + "id": 264378, + "name": "Gradle" + } + ], + "sort": 4 + } + ], + "roomId": 53982, + "room": "Nest", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 4 + }, + { + "id": 54703, + "name": "Chromecast", + "session": { + "id": "757537", + "title": "Roundtable: Mastering Release Management", + "description": "Teams of all sizes require release management processes that should ensure smooth delivery of app updates, while balancing the need for innovation with stability and user experience. Coordinating teams, managing release cycles, and mitigating risks while adapting to the Android ecosystem can be challenging. Join this open roundtable discussion to examine:\r\n•\tWhat are the biggest challenges in managing releases within the Android ecosystem, especially with the variety of devices and OS versions?\r\n•\tHow do you allow frequent releases while minimizing the toil of release management?\r\n•\tHow do you ensure a smooth release process while balancing the need for continuous innovation and feature updates?\r\n•\tWhat are some best practices for testing and quality assurance before rolling out an Android release to a large user base?\r\n•\tHow do you manage the potential impact of an unsuccessful or buggy release, and what steps are taken to mitigate such risks?\r\n•\tWhat role do user feedback and crash analytics play in refining subsequent Android releases?\r\n", + "startsAt": "2024-10-31T11:50:00", + "endsAt": "2024-10-31T12:30:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "3d4b5098-0829-4b34-b0bf-122ab126fdae", + "name": "Maria Neumayer" + }, + { + "id": "3b1289fc-f706-4f8f-9061-c77e3e250223", + "name": "Adam Ahmed" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 303052, + "name": "Roundtable Discussion" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54703, + "room": "Chromecast", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 5 + }, + { + "id": 54706, + "name": "Ask Android", + "session": { + "id": "764323", + "title": "Ask Android! - Compose, KMP, Gemini in AS (copy)", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T11:50:00", + "endsAt": "2024-10-31T12:30:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "e397fee8-078f-4694-8a1f-35b1d57f1fce", + "name": "Sebastiano Poggi" + }, + { + "id": "eb4483f1-306b-447d-9888-648ec0fc0018", + "name": "Chris Sinco" + }, + { + "id": "7280b9e7-ddf7-4cfb-b85b-1e998d851f66", + "name": "Marcello Galhardo" + }, + { + "id": "e4292032-5462-494b-abfd-3898301476e2", + "name": "Rebecca Franks" + }, + { + "id": "f4580454-6603-44a8-9fcd-e98fe6cc8981", + "name": "Matvei Malkov" + }, + { + "id": "b3baa5b6-3c85-4a36-97c5-9a252f887ae4", + "name": "Jelle Fresen" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 6 + } + ] + }, + { + "slotStart": "12:30:00", + "rooms": [ + { + "id": 49270, + "name": "Hangouts", + "session": { + "id": "46932aef-14c0-4b86-80c3-50646e240b66", + "title": "Lunch", + "description": null, + "startsAt": "2024-10-31T12:30:00", + "endsAt": "2024-10-31T13:40:00", + "isServiceSession": true, + "isPlenumSession": true, + "speakers": [], + "categories": [], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false + }, + "index": 0 + }, + { + "id": 54706, + "name": "Ask Android", + "session": { + "id": "764331", + "title": "Ask Android! - Compose, GenAI, WearOS", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T12:30:00", + "endsAt": "2024-10-31T13:40:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "e4292032-5462-494b-abfd-3898301476e2", + "name": "Rebecca Franks" + }, + { + "id": "f4580454-6603-44a8-9fcd-e98fe6cc8981", + "name": "Matvei Malkov" + }, + { + "id": "b3baa5b6-3c85-4a36-97c5-9a252f887ae4", + "name": "Jelle Fresen" + }, + { + "id": "837dd36a-5782-49cc-8da5-3f7fc7e4da8a", + "name": "Kateryna Semenova" + }, + { + "id": "31e8a089-eb2f-437c-ac09-bb55af17f934", + "name": "Donovan McMurray" + }, + { + "id": "2fb0b020-9fa9-49f1-b4a4-54f71dca57c5", + "name": "Kseniia Shumelchyk" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 6 + } + ] + }, + { + "slotStart": "13:40:00", + "rooms": [ + { + "id": 49270, + "name": "Hangouts", + "session": { + "id": "728763", + "title": "Tap it! Shake it! Fling it! Sheep it! - The Gesture Animations Dance!", + "description": "Let's have fun with animations, gestures and sensors!\r\n\r\nUsing Compose Multiplatform, we'll go over how to create animations using gestures and sensor events for Android & iOS. We'll cover some basics like how to get the device motion and position information, how to track gestures in the screen, and how you can combine them with animations to have fun! \r\n\r\nAfter this talk, you'll have a better understanding on how to use the sensor frameworks, how to make your own gesture effects, and how to create interesting animations in an easy way.\r\n\r\nKeep it fun, keep it animated!", + "startsAt": "2024-10-31T13:40:00", + "endsAt": "2024-10-31T14:20:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "94ba4fa4-aed7-482e-8096-f61090d5bb4d", + "name": "Nicole Terc" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264358, + "name": "Jetpack Compose" + }, + { + "id": 264359, + "name": "Kotlin" + }, + { + "id": 264364, + "name": "Compose" + }, + { + "id": 264384, + "name": "Android" + }, + { + "id": 264390, + "name": "UI/UX" + } + ], + "sort": 4 + } + ], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 0 + }, + { + "id": 49271, + "name": "Glass", + "session": { + "id": "716104", + "title": "Swift Cheatsheet for Android/Kotlin Developers", + "description": "Knowing common Swift patterns and how they translate to Kotlin can help us understand better what the code does. Whether to see how some feature is implemented on the neighbor platform, perform code reviews, review or write tech specifications/proposals, or work with Kotlin Multiplatform.\r\n\r\nWe will go over some of the basics of the Swift language and how it compares to Kotlin. Additionally, we will cover common patterns that you might find in a typical iOS project like optional bindings, dictionaries, extensions, structures, and protocols.\r\n\r\nLeave this talk confident you can read, understand, and review Swift/iOS code. It will also help you start with Kotlin Multiplatform where knowledge of Swift and SwiftUI is important.", + "startsAt": "2024-10-31T13:40:00", + "endsAt": "2024-10-31T14:20:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "c24d26ff-8a59-4954-b768-fcd09d8bb0a3", + "name": "Domen Lanišnik" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264359, + "name": "Kotlin" + }, + { + "id": 264381, + "name": "Cross-Platform" + } + ], + "sort": 4 + } + ], + "roomId": 49271, + "room": "Glass", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 1 + }, + { + "id": 49272, + "name": "Things", + "session": { + "id": "748950", + "title": "How to Optimize, Validate and Deploy ML Models On Device", + "description": "In this workshop we address the common challenges faced by developers migrating AI workloads from the cloud to edge devices. Qualcomm aims to democratize AI at the edge, easing the transition to the edge by supporting familiar frameworks and data types. ​\r\n\r\nWe'll talk through why ML is best done on device and how to easily select a model for your use case, train (or fine-tune), and then compile for the device of your choice.\r\n\r\nWe'll walk through how to get started, iterate on your model and meet performance requirements to deploy on device! We'll show examples on how to optimize models and bundle the model into your application.", + "startsAt": "2024-10-31T13:40:00", + "endsAt": "2024-10-31T14:20:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "0730a976-72e0-42c9-a3b3-9317c06d7bbe", + "name": "Bhushan Sonawane" + }, + { + "id": "b32c51bc-deaf-43a9-9715-099e5e18f692", + "name": "Meghan Stronach" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264355, + "name": "Workshop" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264382, + "name": "AI/ML" + } + ], + "sort": 4 + } + ], + "roomId": 49272, + "room": "Things", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 2 + }, + { + "id": 53981, + "name": "Stadia", + "session": { + "id": "725157", + "title": "Click-free releases & the making of a CLI app", + "description": "At TravelPerk, we've developed a tool that fully automates our release process, eliminating the need for human intervention. This was achieved using a lightweight Kotlin CLI app. In this talk, we'll provide an in-depth look at the design and implementation of this tool, and guide you through building your own Kotlin CLI app. Join me to explore the power of Kotlin and Gradle in creating robust, automated solutions.", + "startsAt": "2024-10-31T13:40:00", + "endsAt": "2024-10-31T14:20:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "3b1289fc-f706-4f8f-9061-c77e3e250223", + "name": "Adam Ahmed" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264359, + "name": "Kotlin" + }, + { + "id": 264380, + "name": "Tooling" + }, + { + "id": 264394, + "name": "CI/CD" + }, + { + "id": 264378, + "name": "Gradle" + } + ], + "sort": 4 + } + ], + "roomId": 53981, + "room": "Stadia", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 3 + }, + { + "id": 53982, + "name": "Nest", + "session": { + "id": "756374", + "title": "Tools that could help you to target newer SDK level and improve compatibility", + "description": "It could be a painful journey when developers update the app's target SDK level. There could be new APIs, deprecation of current APIs and gated or non-gated change. \r\n\r\nThis session will share major changes in Android 15, the common mistakes when targeting the latest version of Android, why developers should target the latest version as soon as possible, and what tools are available to help developers.", + "startsAt": "2024-10-31T13:40:00", + "endsAt": "2024-10-31T14:20:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "9079b8b4-be1f-4213-a446-6b2bdcad0c04", + "name": "Fung Lam" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264363, + "name": "Testing" + }, + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264384, + "name": "Android" + }, + { + "id": 264379, + "name": "Android Studio" + } + ], + "sort": 4 + } + ], + "roomId": 53982, + "room": "Nest", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 4 + }, + { + "id": 54703, + "name": "Chromecast", + "session": { + "id": "757518", + "title": "Roundtable: EM or IC? What’s Right for Me?", + "description": "Choosing between a career path as an engineering manager or an individual contributor is a pivotal decision for engineers as they advance in their careers. This choice often hinges on personal interests, leadership aspirations, and the desire for hands-on technical work. Let’s get together and discuss:\r\n•\tWhat are the key factors that developers should consider when deciding between becoming an engineering manager or staying on the individual contributor track?\r\n•\tHow can someone assess whether they have the necessary skills and mindset to transition into a management role?\r\n•\tWhat are the most significant challenges and rewards that come with each path—engineering management versus individual contribution?\r\n•\tHow can companies support employees who are undecided or want to explore both career paths simultaneously?\r\n", + "startsAt": "2024-10-31T13:40:00", + "endsAt": "2024-10-31T14:20:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "af079576-c7db-497a-990d-919fc2472e45", + "name": "Anastasia López" + }, + { + "id": "f40ca183-824d-43d9-9e63-ee0edb5aa307", + "name": "Ataul Munim" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 303052, + "name": "Roundtable Discussion" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54703, + "room": "Chromecast", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 5 + }, + { + "id": 54706, + "name": "Ask Android", + "session": { + "id": "764343", + "title": "Ask Android! - Compose, GenAI, WearOS", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T13:40:00", + "endsAt": "2024-10-31T14:20:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "e34e8c09-ac65-4927-852e-ff2fc462afac", + "name": "Anton Beloglazov" + }, + { + "id": "7a8a22c6-5b01-4f0a-bc04-12d4ada5de21", + "name": "Jossi Wolf" + }, + { + "id": "b99dc2e2-df83-4045-a5cb-c4d7dea5db1e", + "name": "Halil Ozercan" + }, + { + "id": "837dd36a-5782-49cc-8da5-3f7fc7e4da8a", + "name": "Kateryna Semenova" + }, + { + "id": "2fb0b020-9fa9-49f1-b4a4-54f71dca57c5", + "name": "Kseniia Shumelchyk" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 6 + } + ] + }, + { + "slotStart": "14:20:00", + "rooms": [ + { + "id": 49270, + "name": "Hangouts", + "session": { + "id": "2f36980d-7a9d-4899-8e0b-9e1de74805e0", + "title": "Break", + "description": null, + "startsAt": "2024-10-31T14:20:00", + "endsAt": "2024-10-31T14:35:00", + "isServiceSession": true, + "isPlenumSession": true, + "speakers": [], + "categories": [], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false + }, + "index": 0 + }, + { + "id": 54706, + "name": "Ask Android", + "session": { + "id": "764345", + "title": "Ask Android! - Compose, GenAI, Platform", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T14:20:00", + "endsAt": "2024-10-31T14:35:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "7a8a22c6-5b01-4f0a-bc04-12d4ada5de21", + "name": "Jossi Wolf" + }, + { + "id": "b99dc2e2-df83-4045-a5cb-c4d7dea5db1e", + "name": "Halil Ozercan" + }, + { + "id": "e34e8c09-ac65-4927-852e-ff2fc462afac", + "name": "Anton Beloglazov" + }, + { + "id": "837dd36a-5782-49cc-8da5-3f7fc7e4da8a", + "name": "Kateryna Semenova" + }, + { + "id": "9079b8b4-be1f-4213-a446-6b2bdcad0c04", + "name": "Fung Lam" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 6 + } + ] + }, + { + "slotStart": "14:35:00", + "rooms": [ + { + "id": 49270, + "name": "Hangouts", + "session": { + "id": "734739", + "title": "Video Editing on Android with Media3", + "description": "Learn how to use Media3 Editing libraries to edit, trim, concatenate and apply effects to video frames on Android. \r\nImplementing video editing has always been a challenge for Android developers. Media3 is a jetpack library that is meant to make video editing easy, performant and reliable. \r\nIn this session you will learn about Transformer APIs, how to apply effects and concatenate multiple media files. ", + "startsAt": "2024-10-31T14:35:00", + "endsAt": "2024-10-31T14:55:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "1c163a41-865b-4915-b032-ef4942e2f47c", + "name": "Kristina Simakova" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264353, + "name": "Lightning talk" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264374, + "name": "API" + }, + { + "id": 264384, + "name": "Android" + }, + { + "id": 264388, + "name": "Libraries" + } + ], + "sort": 4 + } + ], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 0 + }, + { + "id": 49271, + "name": "Glass", + "session": { + "id": "732898", + "title": "Your app could use a secondary screen!", + "description": "Learn how an Android application could be used in a desktop-style environment while leveraging a secondary screen. We'll go through some key technical aspects to consider while developing an enterprise-oriented application and how Zebra is helping the developers go beyond what Android already offers.\r\n\r\nKey takeaways:\r\n- How an Activity is getting Multi Window support\r\n- Lifecycle impacts while using the application on 2 screens\r\n- Working with DisplayManager APIs to launch your activity on a secondary screen", + "startsAt": "2024-10-31T14:35:00", + "endsAt": "2024-10-31T14:55:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "de4da391-af75-405b-8816-186c5d4e8fde", + "name": "Daniel Neamtu" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264353, + "name": "Lightning talk" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264384, + "name": "Android" + } + ], + "sort": 4 + } + ], + "roomId": 49271, + "room": "Glass", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 1 + }, + { + "id": 49272, + "name": "Things", + "session": { + "id": "768482", + "title": "How to Optimize, Validate and Deploy ML Models On Device (Part II)", + "description": "We'll walk through the steps to bring your ML model on device. In this hands on section of the workshop we will demonstrate the end to end workflow for a sample use case, using Qualcomm AI Hub to optimize a model and deploy it on device. \r\n\r\nWe'll then help you get set up and walk through various examples on how to use Qualcomm AI Hub. The Qualcomm AI Hub team will be there to teach you the ins and outs, enabling you to use the platform and bring your ML use case on device quickly and easily.", + "startsAt": "2024-10-31T14:35:00", + "endsAt": "2024-10-31T14:55:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "0730a976-72e0-42c9-a3b3-9317c06d7bbe", + "name": "Bhushan Sonawane" + }, + { + "id": "b32c51bc-deaf-43a9-9715-099e5e18f692", + "name": "Meghan Stronach" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264355, + "name": "Workshop" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264382, + "name": "AI/ML" + } + ], + "sort": 4 + } + ], + "roomId": 49272, + "room": "Things", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 2 + }, + { + "id": 53981, + "name": "Stadia", + "session": { + "id": "734309", + "title": "Crafting Narratives: Shaping TalkBack with Compose Semantics", + "description": "\r\nThe focus of my talk will be on making modern, complex designs more intuitive for screen reader users using an empathetic approach . \u2028We will see how to create thoughtful and user-friendly narratives for accessibility by using Jetpack Compose semantics and optimizing the TalkBack experience.\r\n\r\nKey Takeaways:\r\n1. Creating Effective Narratives: Tips for simplifying complex UI elements.\r\n2. Testing Accessibility: Methods for validating and improving semantic changes.\r\n3. Designing for Complexity: Making complex UIs intuitive and accessible.\r\n4. Using Semantics Wisely: Enhancing accessibility with thoughtful design.\r\n", + "startsAt": "2024-10-31T14:35:00", + "endsAt": "2024-10-31T14:55:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "bcf3c75a-e105-41de-8891-53f6b673e58a", + "name": "Sachin Sapkale" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264353, + "name": "Lightning talk" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264358, + "name": "Jetpack Compose" + }, + { + "id": 264363, + "name": "Testing" + }, + { + "id": 264365, + "name": "Accessibility" + } + ], + "sort": 4 + } + ], + "roomId": 53981, + "room": "Stadia", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 3 + }, + { + "id": 53982, + "name": "Nest", + "session": { + "id": "736362", + "title": "Streamlining Android app development and release processes", + "description": "Building, testing and releasing Apps for Android is unique with it's own challenges.\r\n\r\nDuring this session we’ll walk through three ways to make building, testing and releasing apps faster and easier for your whole team. Specifically, we’ll look at these three key points:\r\n\r\nAutomating testing and debugging by using CI/CD best practices and out of the box integrations.\r\n\r\nDelivering faster green builds with Bitrise Build Cache. We’ll look at some benchmarks and some real world examples of optimizing the execution.\r\n\r\nFrom beta distribution to production rollout, what steps are there and how these can be optimised.\r\n\r\nBy the end of this talk you'll have an idea on how to take the next steps on your CI/CD journey.", + "startsAt": "2024-10-31T14:35:00", + "endsAt": "2024-10-31T14:55:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "3be14346-8241-4bd9-9a8e-6771276bc270", + "name": "Tamás Bazsonyi" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264353, + "name": "Lightning talk" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264380, + "name": "Tooling" + }, + { + "id": 264394, + "name": "CI/CD" + }, + { + "id": 264384, + "name": "Android" + }, + { + "id": 264378, + "name": "Gradle" + } + ], + "sort": 4 + } + ], + "roomId": 53982, + "room": "Nest", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 4 + }, + { + "id": 54703, + "name": "Chromecast", + "session": { + "id": "606a45c5-6e96-49d9-b146-808283235582", + "title": ".", + "description": null, + "startsAt": "2024-10-31T14:35:00", + "endsAt": "2024-10-31T14:55:00", + "isServiceSession": true, + "isPlenumSession": false, + "speakers": [], + "categories": [], + "roomId": 54703, + "room": "Chromecast", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false + }, + "index": 5 + }, + { + "id": 54706, + "name": "Ask Android", + "session": { + "id": "764347", + "title": "Ask Android! - GenAI, Platform, Adaptive apps on all form factors", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T14:35:00", + "endsAt": "2024-10-31T14:55:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "81ee4554-4839-4192-9a74-ecb32dff2819", + "name": "Alex Vanyo" + }, + { + "id": "ecd35d14-91dc-4ce6-a6db-fd7a26424a36", + "name": "Chris Assigbe" + }, + { + "id": "837dd36a-5782-49cc-8da5-3f7fc7e4da8a", + "name": "Kateryna Semenova" + }, + { + "id": "9079b8b4-be1f-4213-a446-6b2bdcad0c04", + "name": "Fung Lam" + }, + { + "id": "e3b228b6-3b08-4edb-89dd-1a5625d9e4c2", + "name": "Francesco Romano" + }, + { + "id": "c83dc04e-7a0a-4cbc-9d73-10d08f18a68b", + "name": "Miguel Montemayor" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 6 + } + ] + }, + { + "slotStart": "14:55:00", + "rooms": [ + { + "id": 49270, + "name": "Hangouts", + "session": { + "id": "b28b4077-1368-4b9a-9ea2-ebd718631283", + "title": "Break", + "description": null, + "startsAt": "2024-10-31T14:55:00", + "endsAt": "2024-10-31T15:10:00", + "isServiceSession": true, + "isPlenumSession": true, + "speakers": [], + "categories": [], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false + }, + "index": 0 + }, + { + "id": 54706, + "name": "Ask Android", + "session": { + "id": "764350", + "title": "Ask Android! - Gen AI, Platform, Adaptive apps on all form factors", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T14:55:00", + "endsAt": "2024-10-31T15:10:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "327f56b4-c631-4489-9590-37bdfc856e3a", + "name": "Miguel Montemayor" + }, + { + "id": "ecd35d14-91dc-4ce6-a6db-fd7a26424a36", + "name": "Chris Assigbe" + }, + { + "id": "837dd36a-5782-49cc-8da5-3f7fc7e4da8a", + "name": "Kateryna Semenova" + }, + { + "id": "9079b8b4-be1f-4213-a446-6b2bdcad0c04", + "name": "Fung Lam" + }, + { + "id": "ef1c33eb-89e9-49f6-9abc-da8140988097", + "name": "Alex Vanyo" + }, + { + "id": "e3b228b6-3b08-4edb-89dd-1a5625d9e4c2", + "name": "Francesco Romano" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 6 + } + ] + }, + { + "slotStart": "15:10:00", + "rooms": [ + { + "id": 49270, + "name": "Hangouts", + "session": { + "id": "710572", + "title": "Rethinking Home - How testing techniques and code design reshaped the new Spotify Home feature", + "description": "Let's dive into the dynamic world of Spotify Home development, where scalability and excellency are key. In this talk we will learn about the relationship between good code design and testability. How these principles synergise to influence the new shape of core Home features. Moreover we will go through the value of different test types and learn insights on how to make code more testable as well as actionable strategies to enhance code design in general ", + "startsAt": "2024-10-31T15:10:00", + "endsAt": "2024-10-31T15:50:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "6ee5ee5a-1bdd-4c54-8178-fad51f86a78a", + "name": "Daniel Horowitz" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264363, + "name": "Testing" + }, + { + "id": 264368, + "name": "Techniques & Guides" + } + ], + "sort": 4 + } + ], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 0 + }, + { + "id": 49271, + "name": "Glass", + "session": { + "id": "751161", + "title": "Designing scalable Compose APIs", + "description": "As more and more apps and teams migrate to Compose, it's important to establish clear guidelines for writing high-quality Compose code. This talk will cover best practices and guidelines for developing idiomatic Compose APIs, with topics such as how to think about and plan for your components, how to leverage Kotlin and naming conventions, and define a solid structure of your component, and finally how to verify and maintain these APIs. We'll discuss the rationale behind these guidelines and how they can help developers write code that is more scalable, performant, and consistent.", + "startsAt": "2024-10-31T15:10:00", + "endsAt": "2024-10-31T15:50:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "b5b73a2f-d57d-4a42-b787-a93f4ca9ba79", + "name": "Simona Milanovic" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264358, + "name": "Jetpack Compose" + }, + { + "id": 264359, + "name": "Kotlin" + }, + { + "id": 264364, + "name": "Compose" + }, + { + "id": 264384, + "name": "Android" + }, + { + "id": 264390, + "name": "UI/UX" + } + ], + "sort": 4 + } + ], + "roomId": 49271, + "room": "Glass", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 1 + }, + { + "id": 49272, + "name": "Things", + "session": { + "id": "745796", + "title": "Securing Android: Tackling Advanced Threats and Enhancing App Security", + "description": "What threats are Android apps dealing with these days? In this talk, we will look at the latest security challenges and the best ways to keep your apps safe from new threats.\r\nWhen companies rush to release apps, they often skip important security steps, which can lead to higher costs and more risks. It's important to build security into your app from the beginning. We will discuss common risks for Android apps, how to handle them, and the challenges developers and security experts face when trying to protect code, keys, and data.\r\n\r\nKey Takeaways:\r\n\r\n* Get up to speed on the latest security threats specifically targeting Android apps.\r\n* Explore the latest advanced rooting technique such as Magisk and app instrumentation and the best way to protect your app.\r\n* Explore the differences between shrinking/minification and advanced techniques for obfuscation and anti-tampering, including cryptographic key protection.\r\n* Discover how to embed security throughout the development process to minimise risks and build resilient apps.\r\n\r\n\r\n", + "startsAt": "2024-10-31T15:10:00", + "endsAt": "2024-10-31T15:50:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "24eb82e3-3ea7-4b45-9ffb-d63cac580e88", + "name": "Mohamed Kerroumi" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264372, + "name": "Security" + }, + { + "id": 264384, + "name": "Android" + } + ], + "sort": 4 + } + ], + "roomId": 49272, + "room": "Things", "liveUrl": null, "recordingUrl": null, - "status": null, - "isInformed": false, - "isConfirmed": false + "status": "Accepted", + "isInformed": true, + "isConfirmed": true }, - "index": 0 + "index": 2 + }, + { + "id": 53981, + "name": "Stadia", + "session": { + "id": "757989", + "title": "Rethinking Apps with Local-First Architecture", + "description": "Modern apps are expected to function flawlessly even in low-connectivity edge environments, but traditional centralized networking approaches often fall short. In this session, we’ll explore how we got here and where we’re headed, diving into the unique challenges of local-first architecture. We’ll look at some of the tough problems in this space and examine solutions that open new possibilities. By rethinking these aspects in your app, you can push the boundaries of what your app can do and create experiences that will amaze your users.", + "startsAt": "2024-10-31T15:10:00", + "endsAt": "2024-10-31T15:50:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "da380fb8-c8ba-47e9-b224-26647296cff5", + "name": "Richard Das" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264369, + "name": "Other" + }, + { + "id": 264377, + "name": "Modern Android Development" + }, + { + "id": 264381, + "name": "Cross-Platform" + }, + { + "id": 264388, + "name": "Libraries" + }, + { + "id": 264390, + "name": "UI/UX" + } + ], + "sort": 4 + } + ], + "roomId": 53981, + "room": "Stadia", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 3 + }, + { + "id": 53982, + "name": "Nest", + "session": { + "id": "709487", + "title": "Dynamic Flow, the Wise approach to server driven UI", + "description": "In this presentation I will talk about how we combined the expertise of Android, iOS and Web engineers to create a server driven UI solution using Kotlin Multi Platform (KMP). This approach has allowed Wise to efficiently scale our product and business, resulting in more than 500 unique native screens being generated by the backend. \r\n\r\nLearn how this project has empowered backend engineers, streamlined UI development process and enhanced cross-platform collaboration.", + "startsAt": "2024-10-31T15:10:00", + "endsAt": "2024-10-31T15:50:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "f5e37102-a8be-4e34-be47-b98329cd2a23", + "name": "Phellipe Silva" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264361, + "name": "KMP" + }, + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264381, + "name": "Cross-Platform" + } + ], + "sort": 4 + } + ], + "roomId": 53982, + "room": "Nest", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 4 + }, + { + "id": 54703, + "name": "Chromecast", + "session": { + "id": "768515", + "title": "Kotlin by JetBrains, present and future", + "description": "Have a chat with Developer Advocates from JetBrains about anything Kotlin related on your mind. Language evolution, tooling, development practices, Kotlin Multiplatform and Compose Multiplatform... We're here for all of it!", + "startsAt": "2024-10-31T15:10:00", + "endsAt": "2024-10-31T15:50:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "1916ae1c-96d7-480f-9eed-bf5dce444441", + "name": "Márton Braun" + }, + { + "id": "a82c6942-6e2b-4d80-9883-0b84b932d6ef", + "name": "Sebastian Aigner" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 303052, + "name": "Roundtable Discussion" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54703, + "room": "Chromecast", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 5 + }, + { + "id": 54706, + "name": "Ask Android", + "session": { + "id": "764353", + "title": "Ask Android! -GenAI, Platform, Adaptive apps on all form factors", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T15:10:00", + "endsAt": "2024-10-31T15:50:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "e2ad2515-5292-4deb-8ac6-6c7ea5be1543", + "name": "Rob Orgiu" + }, + { + "id": "f55e8e03-a341-4c8a-b4fc-a7e97f82db07", + "name": "Xiaodao Wu" + }, + { + "id": "837dd36a-5782-49cc-8da5-3f7fc7e4da8a", + "name": "Kateryna Semenova" + }, + { + "id": "9079b8b4-be1f-4213-a446-6b2bdcad0c04", + "name": "Fung Lam" + }, + { + "id": "56b04326-604d-4140-b159-f93574c86ccd", + "name": "Ran Nachmany" + }, + { + "id": "d7f1c9d9-d537-4240-864e-ba626457f534", + "name": "Satish Shende" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 6 } ] }, { - "slotStart": "09:00:00", + "slotStart": "15:50:00", "rooms": [ { - "id": 49956, - "name": "Grand Ballroom 1", + "id": 49270, + "name": "Hangouts", "session": { - "id": "4a9b5656-16e8-447d-b97a-83fc854b1b43", - "title": "Welcome", + "id": "5264a86b-3452-40bf-b481-44b538e30c10", + "title": "Break", "description": null, - "startsAt": "2024-09-19T09:00:00", - "endsAt": "2024-09-19T09:15:00", + "startsAt": "2024-10-31T15:50:00", + "endsAt": "2024-10-31T16:05:00", "isServiceSession": true, "isPlenumSession": true, "speakers": [], "categories": [], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false + }, + "index": 0 + }, + { + "id": 54706, + "name": "Ask Android", + "session": { + "id": "764351", + "title": "Ask Android! - WearOS, Media, Adaptive apps on all form factors", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T15:50:00", + "endsAt": "2024-10-31T16:05:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "c70d10a5-999c-4858-a39c-7326570cee91", + "name": "Ran Nachmany" + }, + { + "id": "1c163a41-865b-4915-b032-ef4942e2f47c", + "name": "Kristina Simakova" + }, + { + "id": "e2ad2515-5292-4deb-8ac6-6c7ea5be1543", + "name": "Rob Orgiu" + }, + { + "id": "2fb0b020-9fa9-49f1-b4a4-54f71dca57c5", + "name": "Kseniia Shumelchyk" + }, + { + "id": "f55e8e03-a341-4c8a-b4fc-a7e97f82db07", + "name": "Xiaodao Wu" + }, + { + "id": "d713390d-9628-412f-9778-9c45aeb6b13e", + "name": "Satish Shende" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", "liveUrl": null, "recordingUrl": null, - "status": null, - "isInformed": false, - "isConfirmed": false + "status": "Accepted", + "isInformed": true, + "isConfirmed": true }, - "index": 0 + "index": 6 } ] }, { - "slotStart": "09:15:00", + "slotStart": "16:05:00", "rooms": [ { - "id": 49956, - "name": "Grand Ballroom 1", + "id": 49270, + "name": "Hangouts", "session": { - "id": "739401", - "title": "The Future of Android, Kotlin, and Everything", - "description": "Modern mobile and Android are a touch over 15 years old. Droidcon NYC 2024 is in its 10th year. Will we all look at some pictures? Of course! Maybe hear a few tips on running a conference.\r\n\r\nThen, it’s time to look forward.\r\n\r\nTech trends come and go. Some burn hot, then disappear. Some become essential. The web is essential. Mobile is essential. Whatever happens with mobile technology, the idea that mobile won’t be as, or more essential, 15 years from now is nonsense.\r\n\r\nHow mobile is developed and delivered is a different question altogether. This will be a talk about near-term tech possibilities, but not what mobile might look like in 15 years. I could speculate, and I'd be wrong. It will be a talk about how this community can shape that future, starting now.\r\n\r\nWhile the tech hype machine has hopped from one shiny concept to another, neither the web nor mobile has remained static. Far from it. We’re in a moment of change and opportunity. A very special moment for this community specifically. But the community is necessary to take advantage of it.", - "startsAt": "2024-09-19T09:15:00", - "endsAt": "2024-09-19T10:00:00", + "id": "714221", + "title": "Jetpack Compose: Drawing without pain and recomposition", + "description": "This is a talk on recomposition in Jetpack Compose and the myths of too many calls it is followed by. I'll briefly explain the reasons behind recompositions and why they are not as problematic as they may seem. I have prepared numerous examples that illustrate how to minimize its occurrence.\r\n\r\nI'll share real-life situations we encountered during the redesign of our main screen. I'll delve step-by-step into how I optimized a particle animation without additional memory allocation and how we successfully reduced the number of recompositions on the screen. My practical guide on parameter tuning will be a great takeaway.", + "startsAt": "2024-10-31T16:05:00", + "endsAt": "2024-10-31T16:45:00", "isServiceSession": false, - "isPlenumSession": true, + "isPlenumSession": false, "speakers": [ { - "id": "9d2ecd4c-fd6e-444f-b80f-bd8ef04106ae", - "name": "Kevin Galligan" + "id": "34b0d49b-00dd-4dc1-ac1c-6de040e8a5b9", + "name": "Vitalii Markus" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254878, - "name": "Introductory and overview" + "id": 264350, + "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254884, - "name": "Keynote" + "id": 264354, + "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [], - "sort": 3 + "categoryItems": [ + { + "id": 264358, + "name": "Jetpack Compose" + }, + { + "id": 264359, + "name": "Kotlin" + }, + { + "id": 264364, + "name": "Compose" + }, + { + "id": 264384, + "name": "Android" + } + ], + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 49270, + "room": "Hangouts", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -2259,315 +7797,465 @@ "isConfirmed": true }, "index": 0 - } - ] - }, - { - "slotStart": "10:00:00", - "rooms": [ + }, { - "id": 49956, - "name": "Grand Ballroom 1", + "id": 49271, + "name": "Glass", "session": { - "id": "798cf47a-e194-43ed-876e-fe7274c0a72d", - "title": "Break", - "description": null, - "startsAt": "2024-09-19T10:00:00", - "endsAt": "2024-09-19T10:20:00", - "isServiceSession": true, - "isPlenumSession": true, - "speakers": [], - "categories": [], - "roomId": 49956, - "room": "Grand Ballroom 1", + "id": "708032", + "title": "DIY Server-Driven UI: Building Auto Trader's SDUI platform", + "description": "Join us as we take you through Auto Trader’s 4-year journey in crafting our hybrid Server-Driven UI framework (Composable) and the architecture that powers our mobile apps. We’ll delve into why we decided to build instead of buy, our choice of Kotlin and the designs that fuelled our success. From pitfalls to breakthroughs, this talk will be full of useful insights for anyone considering building SDUI themselves.\r\n\r\nYou should leave this talk with the following:\r\n- Insights into our approach to SDUI\r\n- Building with a small team without stopping feature work.\r\n- Kotlin and Android tech insights of the system.\r\n- How we're leveraging KMP to improve client logic.\r\n- 4 years of learnings, did we make the right choice?\r\n- Tips and tricks for anyone considering the same.", + "startsAt": "2024-10-31T16:05:00", + "endsAt": "2024-10-31T16:45:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "18ce6325-d3f4-4478-99d0-5683c4b924c2", + "name": "Jimmy Ray" + }, + { + "id": "0233c2ee-3bcd-4dee-9de5-c765b8c27cc0", + "name": "Harriet Taylor" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264359, + "name": "Kotlin" + }, + { + "id": 264361, + "name": "KMP" + }, + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264377, + "name": "Modern Android Development" + }, + { + "id": 264381, + "name": "Cross-Platform" + } + ], + "sort": 4 + } + ], + "roomId": 49271, + "room": "Glass", "liveUrl": null, "recordingUrl": null, - "status": null, - "isInformed": false, - "isConfirmed": false + "status": "Accepted", + "isInformed": true, + "isConfirmed": true }, - "index": 0 - } - ] - }, - { - "slotStart": "10:20:00", - "rooms": [ + "index": 1 + }, { - "id": 49956, - "name": "Grand Ballroom 1", + "id": 49272, + "name": "Things", "session": { - "id": "722557", - "title": "Creating a Custom Compose Layout, Step-by-Step", - "description": "Building a custom layout in Jetpack Compose may seem intimidating, but it does not have to be. With an understanding of the tools available for custom layout, the phases of composition, and best practices for state management, anyone can create a powerful, beautiful custom layout.\r\n\r\nIn this talk, we will build a sophisticated schedule component step-by-step. This composable will include multiple display modes, theme-like encapsulation of styling and behaviors, scoped modifiers for easy customization, and even some animation.", - "startsAt": "2024-09-19T10:20:00", - "endsAt": "2024-09-19T11:00:00", + "id": "736123", + "title": "How we build Spotify for Android Automotive", + "description": "As the automotive industry embraces newer technologies and more mainstream software tech stacks, the in-car entertainment experience is rapidly evolving into a living room on wheels. In this session, we will take you on the journey of bringing Spotify to Android Automotive OS.\r\n\r\nIn this session, we will cover:\r\n\r\n* What is Android Automotive OS? Discover which car manufacturers and models are currently supported, and the different flavours of Android Automotive around!\r\n* Learn about the specific development challenges we faced while building Spotify for Android Automotive, including using Media Center templates to build features, adapting to diverse hardware, and challenging emulator setups.\r\n* Get insights into the unique aspects of releasing an app in the automotive ecosystem, from testing to ensure compliance with automotive standards to coordinating with car manufacturers for software updates.\r\n\r\nPlease join us to discover how we’re making the Spotify experience accessible, enjoyable and safe for drivers and passengers, and the innovative solutions we’ve developed to overcome the challenges of this cutting-edge platform. \r\n", + "startsAt": "2024-10-31T16:05:00", + "endsAt": "2024-10-31T16:45:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "2d41d3fb-3321-4b47-a401-ae84a5de2423", - "name": "Huyen Tue Dao" + "id": "9c8384de-140e-47e4-aeb1-c85faf090fc8", + "name": "Danielle Vass" + }, + { + "id": "0aef86d4-a69b-4a82-bd8b-5ee05a3e421d", + "name": "Walid Tazout" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, - "name": "Intermediate" + "id": 264349, + "name": "Introductory and overview" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [], - "sort": 3 + "categoryItems": [ + { + "id": 264384, + "name": "Android" + } + ], + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 49272, + "room": "Things", "liveUrl": null, "recordingUrl": null, "status": "Accepted", "isInformed": true, "isConfirmed": true }, - "index": 0 + "index": 2 }, { - "id": 49957, - "name": "Grand Ballroom 2", + "id": 53981, + "name": "Stadia", "session": { - "id": "721723", - "title": "Unpacking Compose Multiplatform Accessibility", - "description": "In this talk, we will provide a comprehensive overview of the current state of accessibility in Compose Multiplatform. As an emerging UI framework in multiplatform development, understanding its accessibility features is critical for developers.\r\n\r\nWe will delve into the current accessibility capabilities of Compose Multiplatform, discuss its strengths and weaknesses, and provide practical strategies for leveraging its features to ensure the accessibility of your apps.", - "startsAt": "2024-09-19T10:20:00", - "endsAt": "2024-09-19T11:00:00", + "id": "732956", + "title": "Rewind and Resolve: A deep dive into building Session Replay for Android", + "description": "Understanding and debugging production issues can feel like solving a puzzle with missing pieces. We will dive deep into the journey of building a session replay feature for the Sentry Android SDK that helps developers capture those elusive bugs, respects user privacy, and maintains low overhead.\r\n\r\nIn this talk, we'll explore the technical aspects, including:\r\n\r\n- Taking screenshots of a Window\r\n- Redacting the screenshots to ensure no sensitive user data is leaked\r\n- Encoding the screenshots into a video\r\n- Collecting supporting data like breadcrumbs, network requests, logs, touches to improve debuggability\r\n- Maintaining low performance overhead while implementing all of the above.\r\n\r\nWe'll also demonstrate how our tool empowers Android engineers to gain actionable insights when solving errors, crashes, and ANRs.\r\n\r\nWhether you're an Android developer looking to improve your debugging toolkit or someone interested in the technical guts of the Android OS, the session will cover it all. Join us for a glimpse into the future of mobile debugging – it's a replay you won't want to miss!", + "startsAt": "2024-10-31T16:05:00", + "endsAt": "2024-10-31T16:45:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "fb25f3d5-103f-45ef-983a-414e583cea31", - "name": "Colin Marsch" + "id": "da013a11-7cb0-4b0d-a37e-e29ce98688e0", + "name": "Roman Zavarnitsyn" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, - "name": "Intermediate" + "id": 264351, + "name": "Advanced" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254888, - "name": "Cross-Platform" + "id": 264358, + "name": "Jetpack Compose" }, { - "id": 254902, - "name": "UI/UX" + "id": 264380, + "name": "Tooling" + }, + { + "id": 264384, + "name": "Android" + }, + { + "id": 264388, + "name": "Libraries" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 53981, + "room": "Stadia", "liveUrl": null, "recordingUrl": null, "status": "Accepted", "isInformed": true, "isConfirmed": true }, - "index": 1 + "index": 3 }, { - "id": 49958, - "name": "Fountain Room", + "id": 53982, + "name": "Nest", "session": { - "id": "722420", - "title": "Efficient Android Builds at Scale: Lessons from Pinterest", - "description": "Building Android apps in a large-scale environment brings several challenges that include maintaining build speeds, managing dependencies, and ensuring consistent and reliable builds across different environments. At Pinterest, these challenges are magnified by our expansive codebase and development team size. This session will explore: The scale we operate at Pinterest, an introduction to Gradle,\r\ninsights into Pinterest's project structuring, utilizing custom plugins to streamline builds and enforce consistency across all modules and a look at Pinterest's infrastructure setup.", - "startsAt": "2024-09-19T10:20:00", - "endsAt": "2024-09-19T11:00:00", + "id": "736493", + "title": "Asynchrony and the infinite conveyor belt: Advanced coroutines and flows", + "description": "Most likely, you already know how to use coroutines and flows. They're part of our everyday existence. But all too often we learn them through repetition and rote learning, rather than forging a meaningful understanding of what's happening deep down. \r\nSo:\r\n\r\n- What *really* happens when you mark a function as 'suspend'?\r\n- How come crazy things like infinite loops on the main thread are possible?\r\n- What's the magic link between coroutines and flows?\r\n- What, really, is a scope? A context? A job?\r\n\r\nAnd there's a satisfying conclusion, too! We find that everything is linked: the path that seems to add complexity, in fact takes us back full circle.", + "startsAt": "2024-10-31T16:05:00", + "endsAt": "2024-10-31T16:45:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "dab126dc-4467-4ada-a9bb-b888892e89f6", - "name": "David Chang" + "id": "1fb7ac5d-d848-4d40-840e-d8ae38128ab4", + "name": "Tom Colvin" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, - "name": "Intermediate" + "id": 264349, + "name": "Introductory and overview" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254887, - "name": "CI/CD" + "id": 264359, + "name": "Kotlin" }, { - "id": 254899, - "name": "Gradle" + "id": 264362, + "name": "Flow" + }, + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264377, + "name": "Modern Android Development" + }, + { + "id": 264384, + "name": "Android" + }, + { + "id": 264386, + "name": "Coroutines" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49958, - "room": "Fountain Room", + "roomId": 53982, + "room": "Nest", "liveUrl": null, "recordingUrl": null, "status": "Accepted", "isInformed": true, "isConfirmed": true }, - "index": 2 + "index": 4 }, { - "id": 52283, - "name": "Sapphire Room", + "id": 54703, + "name": "Chromecast", "session": { - "id": "713009", - "title": "Debugging in the Wild: Unleashing the Power of Remote Tooling", - "description": "We all strive to build flawless apps, but let's face it - bugs happen. And sometimes, those pesky bugs are elusive, only showing up in the unpredictable chaos of production. Limited tooling, the dreaded \"black box\" environment, and the pressure to fix it fast can be a developer's nightmare.\r\n\r\nThis talk will dive into real-world debugging challenges faced by mobile developers, sharing practical tips and techniques for effectively troubleshooting production issues with limited resources. You'll learn:\r\nBeyond the Crash Logs: Strategies for interpreting production data beyond the standard crash logs, including network requests, user behavior, and system metrics.\r\n\r\n\r\nLeveraging Log Collection Frameworks: Mastering the art of selectively collecting and analyzing relevant logs for crucial insights into the root cause of bugs.\r\n\r\n\r\nCreative Debugging Techniques: Discover unconventional approaches like remote logging, feature flags\r\n\r\n\r\nLessons Learned from the Reddit Android App: I'll share specific case studies of production bugs encountered on the Reddit app, highlighting the debugging challenges and the strategies used to successfully resolve them.\r\n\r\nBy the end of this talk, you'll have a toolkit of practical approaches to effectively debug production issues, even when working with limited resources. You'll leave feeling empowered to confidently face the \"wild\" and tame those elusive bugs!\r\n", - "startsAt": "2024-09-19T10:20:00", - "endsAt": "2024-09-19T11:00:00", + "id": "757517", + "title": "Roundtable: Community-Driven Development: How to Contribute to OSS", + "description": "Contributing to and maintaining open-source libraries in Android is a rewarding but challenging endeavor that benefits the developer community while enhancing personal skills. It involves code contributions, issue resolution, and ensuring the library remains stable and relevant over time. Join us as we have an open discussion about:\r\n•\tWhat motivated you to start contributing to or maintaining an open-source library in the Android ecosystem, or how do you get started?\r\n•\tWhat are the biggest challenges you face when maintaining an open-source project, particularly when managing contributions from other developers?\r\n•\tHow do you ensure that an open-source library remains compatible and up-to-date with new Android releases and API changes?\r\n•\tWhat are some best practices for encouraging meaningful contributions and fostering an active community around your open-source project?\r\n•\tHow do you balance the time commitment of maintaining an open-source library with other professional or personal responsibilities?\r\n", + "startsAt": "2024-10-31T16:05:00", + "endsAt": "2024-10-31T16:45:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "699c8fd7-70f9-44df-85d2-abb6454cee07", - "name": "Eric Chiquillo" + "id": "8730d40b-3fb7-450d-ab71-08c9dd81a48a", + "name": "Nicola Corti" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, - "name": "Intermediate" + "id": 264349, + "name": "Introductory and overview" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 303052, + "name": "Roundtable Discussion" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54703, + "room": "Chromecast", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 5 + }, + { + "id": 54706, + "name": "Ask Android", + "session": { + "id": "764365", + "title": "Ask Android! - WearOS, Media, Adaptive apps on all form factors", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T16:05:00", + "endsAt": "2024-10-31T16:45:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "f89ea766-4af9-4b88-8842-ede574e4c648", + "name": "Paul Lammertsma" + }, + { + "id": "8b706c47-edbc-41e3-af85-3328b4134e57", + "name": "Ben Sagmoe" + }, + { + "id": "3b5772d2-d3d5-42fe-8015-8f7b0e09b472", + "name": "Thomas Weathers" + }, + { + "id": "c8229c07-b474-4044-af66-1c8da6779bc6", + "name": "Chiko Shimizu" + }, + { + "id": "1c163a41-865b-4915-b032-ef4942e2f47c", + "name": "Kristina Simakova" + }, + { + "id": "2fb0b020-9fa9-49f1-b4a4-54f71dca57c5", + "name": "Kseniia Shumelchyk" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", "categoryItems": [ { - "id": 254891, - "name": "Android" - }, + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ { - "id": 254894, - "name": "Testing" + "id": 306233, + "name": "Office Hours" } ], - "sort": 3 + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 } ], - "roomId": 52283, - "room": "Sapphire Room", + "roomId": 54706, + "room": "Ask Android", "liveUrl": null, "recordingUrl": null, "status": "Accepted", "isInformed": true, "isConfirmed": true }, - "index": 3 + "index": 6 } ] }, { - "slotStart": "11:00:00", + "slotStart": "16:45:00", "rooms": [ { - "id": 49956, - "name": "Grand Ballroom 1", + "id": 49270, + "name": "Hangouts", "session": { - "id": "d1d593f9-19a9-4819-8e01-9507be672f58", + "id": "afa619be-3074-4ba1-8e3b-e61c3475d25a", "title": "Break", "description": null, - "startsAt": "2024-09-19T11:00:00", - "endsAt": "2024-09-19T11:15:00", + "startsAt": "2024-10-31T16:45:00", + "endsAt": "2024-10-31T17:00:00", "isServiceSession": true, "isPlenumSession": true, "speakers": [], "categories": [], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 49270, + "room": "Hangouts", "liveUrl": null, "recordingUrl": null, "status": null, @@ -2575,2086 +8263,2522 @@ "isConfirmed": false }, "index": 0 - } - ] - }, - { - "slotStart": "11:15:00", - "rooms": [ + }, { - "id": 49957, - "name": "Grand Ballroom 2", + "id": 54706, + "name": "Ask Android", "session": { - "id": "717904", - "title": "GC You Later, Allocator", - "description": "Memory management on Android is easy: the garbage collector does almost everything and LeakCanary handles the rest! But Kotlin/Multiplatform brings new challenges. Your new features could be blocked if Kotlin/Native leaks memory.\r\n\r\nIn this talk you’ll get a refresher on Android's garbage collector, and you’ll learn how Swift works without one. Once that groundwork is laid you’ll see how Kotlin/Native integrates these two models.\r\n\r\nWe’ll cover some memory management tools & techniques:\r\n\r\n - Using Xcode to see what’s leaking\r\n - Avoiding leaks when mixing Kotlin and Swift\r\n - Using PhantomReference to test memory bugs\r\n - How Kotlin inline classes compare to Valhalla’s primitive classes.\r\n\r\nIf you’d like to improve memory management in a multiplatform app, this talk is for you.\r\n", - "startsAt": "2024-09-19T11:15:00", - "endsAt": "2024-09-19T11:55:00", + "id": "764370", + "title": "Ask Android! - WearOS, Media, Adaptive apps on all form factors", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T16:45:00", + "endsAt": "2024-10-31T17:00:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "4a13d160-c8c3-4214-926f-24a5b15c78dd", - "name": "Jesse Wilson" + "id": "c8229c07-b474-4044-af66-1c8da6779bc6", + "name": "Chiko Shimizu" + }, + { + "id": "1c163a41-865b-4915-b032-ef4942e2f47c", + "name": "Kristina Simakova" + }, + { + "id": "8b706c47-edbc-41e3-af85-3328b4134e57", + "name": "Ben Sagmoe" + }, + { + "id": "2fb0b020-9fa9-49f1-b4a4-54f71dca57c5", + "name": "Kseniia Shumelchyk" + }, + { + "id": "f89ea766-4af9-4b88-8842-ede574e4c648", + "name": "Paul Lammertsma" + }, + { + "id": "3b5772d2-d3d5-42fe-8015-8f7b0e09b472", + "name": "Thomas Weathers" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 306233, + "name": "Office Hours" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [ - { - "id": 254888, - "name": "Cross-Platform" - }, - { - "id": 254892, - "name": "Kotlin" - } - ], - "sort": 3 + "categoryItems": [], + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 54706, + "room": "Ask Android", "liveUrl": null, "recordingUrl": null, "status": "Accepted", "isInformed": true, "isConfirmed": true }, - "index": 1 - }, + "index": 6 + } + ] + }, + { + "slotStart": "17:00:00", + "rooms": [ { - "id": 49958, - "name": "Fountain Room", + "id": 49270, + "name": "Hangouts", "session": { - "id": "719656", - "title": "Image Recognition, Object Detection, Model Evaluation and Customization with MediaPipe on Android", - "description": "Image Recognition, Object Detection and Model Evaluation with MediaPipe on Android\r\n\r\nMediaPipe is an open source, cross platform Machine Learning framework.\r\n\r\nIn this session we will learn how we can perform some common vision based tasks using MediaPipe on Android. We will also cover the following with real examples:\r\n\r\n1) Object Detection with MediaPipe on Android: Efficiently locate objects in real-time on Android devices using MediaPipe.\r\n2) Image Classification and Segmentation via MediaPipe on Android: Identify and categorize images accurately with MediaPipe's pre-trained models.\r\n3) Measuring the accuracy of models used to detect objects in images. \r\n4) Using MediaPipe Model Maker to train custom object detection models using your own data. ", - "startsAt": "2024-09-19T11:15:00", - "endsAt": "2024-09-19T11:55:00", + "id": "771426", + "title": "#TheAndroidShow - Leadership Keynote", + "description": "Join members of the Android leadership team, including Matthew McCullough, Tor Norbye and Clara Bayarri for insights into what's new in Android", + "startsAt": "2024-10-31T17:00:00", + "endsAt": "2024-10-31T17:20:00", "isServiceSession": false, - "isPlenumSession": false, + "isPlenumSession": true, "speakers": [ { - "id": "a9033dbc-360f-4686-ab86-17a4a83be787", - "name": "Anant Chowdhary" + "id": "95ed3109-e7c3-41ff-a241-381c9fefb558", + "name": "Matthew McCullough" + }, + { + "id": "1932f921-2d6c-49e1-84b0-0d801cd2dbee", + "name": "Tor Norbye" + }, + { + "id": "4b613586-0a6e-45e9-b641-f855ceda4658", + "name": "Clara Bayarri" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, - "name": "Intermediate" + "id": 264349, + "name": "Introductory and overview" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 264357, + "name": "Keynote" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [ - { - "id": 254889, - "name": "AI/ML" - }, - { - "id": 254891, - "name": "Android" - } - ], - "sort": 3 + "categoryItems": [], + "sort": 4 } ], - "roomId": 49958, - "room": "Fountain Room", + "roomId": 49270, + "room": "Hangouts", "liveUrl": null, "recordingUrl": null, "status": "Accepted", "isInformed": true, "isConfirmed": true }, - "index": 2 - }, + "index": 0 + } + ] + }, + { + "slotStart": "17:20:00", + "rooms": [ + { + "id": 49270, + "name": "Hangouts", + "session": { + "id": "103ac95c-d0ef-4dad-aeed-14e8261c947f", + "title": "Break", + "description": null, + "startsAt": "2024-10-31T17:20:00", + "endsAt": "2024-10-31T17:30:00", + "isServiceSession": true, + "isPlenumSession": true, + "speakers": [], + "categories": [], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false + }, + "index": 0 + } + ] + }, + { + "slotStart": "17:30:00", + "rooms": [ { - "id": 52283, - "name": "Sapphire Room", + "id": 49270, + "name": "Hangouts", "session": { - "id": "727677", - "title": "How to use Qualcomm AI Hub for On-Device AI models", - "description": "In this workshop we address the common challenges faced by developers migrating AI workloads from the cloud to edge devices. Qualcomm aims to democratize AI at the edge, easing the transition to the edge by supporting familiar frameworks and data types. ​\r\n\r\nIn this session, developers can follow along, gaining knowledge and tools to efficiently deploy optimized models on real devices using Qualcomm AI Hub. ​\r\n\r\nWe'll walk through how to get started using Qualcomm AI Hub, iterate on your model and meet performance requirements to deploy on device! We'll show examples on how to optimize models and bundle the downloadable target asset into your application.", - "startsAt": "2024-09-19T11:15:00", - "endsAt": "2024-09-19T11:55:00", + "id": "771431", + "title": "#TheAndroidShow - Panel Discussion", + "description": "Join moderator Florina Muntenescu and members of the Android Developer Relations team as they field questions on all the latest in Android development.", + "startsAt": "2024-10-31T17:30:00", + "endsAt": "2024-10-31T18:15:00", "isServiceSession": false, - "isPlenumSession": false, + "isPlenumSession": true, "speakers": [ { - "id": "b32c51bc-deaf-43a9-9715-099e5e18f692", - "name": "Meghan Stronach" + "id": "752bc716-f1b8-45d4-b0a5-cfbc3402b68b", + "name": "Florina Muntenescu" + }, + { + "id": "1932f921-2d6c-49e1-84b0-0d801cd2dbee", + "name": "Tor Norbye" + }, + { + "id": "ef1c33eb-89e9-49f6-9abc-da8140988097", + "name": "Alex Vanyo" + }, + { + "id": "e04a04d0-c875-4f36-ae02-914ba87b5b32", + "name": "Rebecca Gutteridge" + }, + { + "id": "837dd36a-5782-49cc-8da5-3f7fc7e4da8a", + "name": "Kateryna Semenova" + }, + { + "id": "4b613586-0a6e-45e9-b641-f855ceda4658", + "name": "Clara Bayarri" }, { - "id": "a33ccc9b-d114-4ac4-9c4d-cc12c45478a8", - "name": "Shreya Jain" + "id": "95ed3109-e7c3-41ff-a241-381c9fefb558", + "name": "Matthew McCullough" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, - "name": "Intermediate" + "id": 264349, + "name": "Introductory and overview" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254883, - "name": "Workshop" + "id": 303052, + "name": "Roundtable Discussion" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [ - { - "id": 254886, - "name": "Tooling" - }, - { - "id": 254887, - "name": "CI/CD" - }, - { - "id": 254889, - "name": "AI/ML" - }, - { - "id": 254891, - "name": "Android" - }, - { - "id": 254894, - "name": "Testing" - }, - { - "id": 254901, - "name": "Android Studio" - }, - { - "id": 254905, - "name": "TensorFlow" - } - ], - "sort": 3 + "categoryItems": [], + "sort": 4 } ], - "roomId": 52283, - "room": "Sapphire Room", + "roomId": 49270, + "room": "Hangouts", "liveUrl": null, "recordingUrl": null, "status": "Accepted", "isInformed": true, "isConfirmed": true }, - "index": 3 + "index": 0 } ] }, { - "slotStart": "11:55:00", + "slotStart": "18:15:00", "rooms": [ { - "id": 49956, - "name": "Grand Ballroom 1", - "session": { - "id": "24579b25-f281-4c15-8db7-83eeb952975b", - "title": "Break", - "description": null, - "startsAt": "2024-09-19T11:55:00", - "endsAt": "2024-09-19T12:10:00", - "isServiceSession": true, - "isPlenumSession": true, - "speakers": [], - "categories": [], - "roomId": 49956, - "room": "Grand Ballroom 1", - "liveUrl": null, - "recordingUrl": null, - "status": null, - "isInformed": false, - "isConfirmed": false - }, - "index": 0 - } - ] - }, - { - "slotStart": "12:10:00", - "rooms": [ + "id": 49270, + "name": "Hangouts", + "session": { + "id": "0e2cc89b-b559-4432-8df6-6e880873a92f", + "title": "Karaoke and Halloween Costume Party!", + "description": null, + "startsAt": "2024-10-31T18:15:00", + "endsAt": "2024-10-31T19:35:00", + "isServiceSession": true, + "isPlenumSession": true, + "speakers": [], + "categories": [], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false + }, + "index": 0 + } + ] + } + ] + }, + { + "date": "2024-11-01T00:00:00", + "isDefault": false, + "rooms": [ + { + "id": 49270, + "name": "Hangouts", + "sessions": [ + { + "id": "8586de07-b3e8-4ebe-8212-f54e5f817f7d", + "title": "Registration & Check-In", + "description": null, + "startsAt": "2024-11-01T08:20:00", + "endsAt": "2024-11-01T09:20:00", + "isServiceSession": true, + "isPlenumSession": true, + "speakers": [], + "categories": [], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false + }, + { + "id": "759067", + "title": "The Future of Android, Kotlin, and Everything", + "description": "Modern mobile and Android are a touch over 15 years old and Droidcon London 2024 is also in its 15th year. \r\n\r\nSo, it’s time to look forward.\r\n\r\nTech trends come and go. Some burn hot, then disappear. Some become essential. The web is essential. Mobile is essential. Whatever happens with mobile technology, the idea that mobile won’t be as, or more essential, 15 years from now is nonsense.\r\n\r\nHow mobile is developed and delivered is a different question altogether. This will be a talk about near-term tech possibilities, but not what mobile might look like in 15 years. I could speculate, and I'd be wrong. It will be a talk about how this community can shape that future, starting now.\r\n\r\nWhile the tech hype machine has hopped from one shiny concept to another, neither the web nor mobile has remained static. Far from it. We’re in a moment of change and opportunity. A very special moment for this community specifically. But the community is necessary to take advantage of it.", + "startsAt": "2024-11-01T09:20:00", + "endsAt": "2024-11-01T10:00:00", + "isServiceSession": false, + "isPlenumSession": true, + "speakers": [ + { + "id": "84a7e91b-e090-4d57-9eed-f3b9f277dc95", + "name": "Kevin Galligan" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264357, + "name": "Keynote" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "id": "6876a148-9098-4d59-809f-995afbb7b110", + "title": "Break", + "description": null, + "startsAt": "2024-11-01T10:00:00", + "endsAt": "2024-11-01T10:20:00", + "isServiceSession": true, + "isPlenumSession": true, + "speakers": [], + "categories": [], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false + }, + { + "id": "733921", + "title": "Effective App Monitoring in Production", + "description": "Your feature is complete and ready to be shipped to production. Now you can forget about it completely and move onto the next thing, right? Actually the fun begins when your feature reaches your users. Is your feature healthy? Are your users seeing any issues? Which ones? How many?\r\nIn this session, we’ll discuss how to monitor Android apps in production to ensure they stand resilient and ready for the challenges of the real world. \r\n\r\nIn this session, you’ll learn how to design and report relevant events that matter to you and your team. If you are introducing monitoring in your application, you will learn how to design a tracking strategy to effectively monitor the application health and debug any issue users experience. If you already have monitoring in place, you will see techniques on how to get visibility into the data through the definition of KPIs (Key Performance Indicators) and dashboards. We will also provide examples of common problems teams face when implementing constant monitoring like knowledge sharing, alerting, and escalating issues to other teams.\r\n\r\nYou’ll see from real world examples how to track, detect and address production issues before they escalate.\r\n\r\nLevel up your app observability, delight your users and deliver with confidence with these tips.", + "startsAt": "2024-11-01T10:20:00", + "endsAt": "2024-11-01T11:00:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "18c45d50-3e38-4933-a55b-8a833f850115", + "name": "Alejandra Stamato" + }, + { + "id": "084a1449-47c9-488c-b5b6-5b8534c45a23", + "name": "Mauro Frezza" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264358, + "name": "Jetpack Compose" + }, + { + "id": 264359, + "name": "Kotlin" + }, + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264377, + "name": "Modern Android Development" + }, + { + "id": 264384, + "name": "Android" + } + ], + "sort": 4 + } + ], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "id": "cfcf5ef1-b7f7-46c2-82e1-ff3002c842e1", + "title": "Break", + "description": null, + "startsAt": "2024-11-01T11:00:00", + "endsAt": "2024-11-01T11:15:00", + "isServiceSession": true, + "isPlenumSession": true, + "speakers": [], + "categories": [], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false + }, + { + "id": "736477", + "title": "Creating a Custom Compose Layout, Step-by-Step", + "description": "Building a custom layout in Jetpack Compose may seem intimidating, but it does not have to be. With an understanding of the tools available for custom layout, the phases of composition, and best practices for state management, anyone can create a powerful, beautiful custom layout.\r\n\r\nIn this talk, we will build a sophisticated schedule component step-by-step. This composable will include multiple display modes, theme-like encapsulation of styling and behaviors, scoped modifiers for easy customization, and even some animation.", + "startsAt": "2024-11-01T11:15:00", + "endsAt": "2024-11-01T11:55:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "2d41d3fb-3321-4b47-a401-ae84a5de2423", + "name": "Huyen Tue Dao" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264358, + "name": "Jetpack Compose" + } + ], + "sort": 4 + } + ], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "id": "2e322db2-0dcf-458b-9dc2-c6a62337a8e4", + "title": "Lunch", + "description": null, + "startsAt": "2024-11-01T11:55:00", + "endsAt": "2024-11-01T12:55:00", + "isServiceSession": true, + "isPlenumSession": true, + "speakers": [], + "categories": [], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false + }, { - "id": 49956, - "name": "Grand Ballroom 1", - "session": { - "id": "726519", - "title": "Speed Trap Ahead – Avoiding Costly Security and Privacy Issues in SDK Integration", - "description": "Just as installing an engine into a car demands precision and attention to detail, integrating an SDK into an application requires consideration of security and privacy implications. Developers must ensure that the SDK seamlessly integrates with their codebase, prioritizing security protocols and privacy safeguards. The correct integration of the SDK with existing components is vital to mitigate potential vulnerabilities and uphold user privacy. In this turbocharged talk, we’ll cut straight to the finish line and give you the “so-what” to consider when integrating SDKs.", - "startsAt": "2024-09-19T12:10:00", - "endsAt": "2024-09-19T12:30:00", - "isServiceSession": false, - "isPlenumSession": false, - "speakers": [ - { - "id": "9b706079-0c5b-4d36-852a-4fbc3a271734", - "name": "Jonathan Seals" - } - ], - "categories": [ - { - "id": 72054, - "name": "Level", - "categoryItems": [ - { - "id": 254879, - "name": "Intermediate" - } - ], - "sort": 0 - }, - { - "id": 72055, - "name": "Session format", - "categoryItems": [ - { - "id": 254881, - "name": "Lightning talk" - } - ], - "sort": 1 - }, - { - "id": 72056, - "name": "Tags", - "categoryItems": [], - "sort": 3 - } - ], - "roomId": 49956, - "room": "Grand Ballroom 1", - "liveUrl": null, - "recordingUrl": null, - "status": "Accepted", - "isInformed": true, - "isConfirmed": true - }, - "index": 0 + "id": "700387", + "title": "Mistakes you make using Kotlin Coroutines", + "description": "Kotlin Coroutines offer a powerful, yet deceptively simple solution for managing asynchronous tasks. However, their ease of use can sometimes lead us into unforeseen pitfalls. From unexpected cancellations to perpetually running operations, developers often encounter bewildering behaviors that can affect application performance and reliability. In this presentation, we'll dive deep into the common mistakes made while using Kotlin Coroutines. We'll explore why these issues arise, how to diagnose them, and, most importantly, how to resolve them effectively. Expect to walk away with advanced insights and practical strategies to harness the full potential of coroutines in your Kotlin applications, ensuring they're robust, efficient, and maintainable.", + "startsAt": "2024-11-01T12:55:00", + "endsAt": "2024-11-01T13:35:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "ef7c1115-d852-44b9-9f72-530ba7223c55", + "name": "Marcin Moskala" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264359, + "name": "Kotlin" + }, + { + "id": 264386, + "name": "Coroutines" + } + ], + "sort": 4 + } + ], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true }, { - "id": 49957, - "name": "Grand Ballroom 2", - "session": { - "id": "713028", - "title": "DevSecOps: Balancing development and security", - "description": "When companies want to produce a mobile app quickly and add in a security element, costs can escalate and the timeframe can elongate. But if organisations do not follow at least the minimum-security requirements, they can find themselves in a dire position.\r\n\r\nMoving forward, trust and accountability must be built into the product. As part of this, security architecture must move beyond the pen test and instead be baked into the process from the very beginning.\r\n\r\nDuring the session, Pat will take you through the mobile app threat landscape, examples of app attacks are taking place on mobile app and best practices of mobile application security, including: Application hardening (obfuscation and anti-tampering), security testing, cryptographic key protection, runtime threat visibility and protection with live demo and walkthrough.", - "startsAt": "2024-09-19T12:10:00", - "endsAt": "2024-09-19T12:30:00", - "isServiceSession": false, - "isPlenumSession": false, - "speakers": [ - { - "id": "598701ca-2d07-4f10-9cef-b4467ca369eb", - "name": "Pat Shueh" - } - ], - "categories": [ - { - "id": 72054, - "name": "Level", - "categoryItems": [ - { - "id": 254879, - "name": "Intermediate" - } - ], - "sort": 0 - }, - { - "id": 72055, - "name": "Session format", - "categoryItems": [ - { - "id": 254881, - "name": "Lightning talk" - } - ], - "sort": 1 - }, - { - "id": 72056, - "name": "Tags", - "categoryItems": [ - { - "id": 254900, - "name": "Security" - } - ], - "sort": 3 - } - ], - "roomId": 49957, - "room": "Grand Ballroom 2", - "liveUrl": null, - "recordingUrl": null, - "status": "Accepted", - "isInformed": true, - "isConfirmed": true - }, - "index": 1 + "id": "7370ab67-e2bb-4288-8de1-d5012f5278b2", + "title": "Break", + "description": null, + "startsAt": "2024-11-01T13:35:00", + "endsAt": "2024-11-01T13:50:00", + "isServiceSession": true, + "isPlenumSession": true, + "speakers": [], + "categories": [], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false }, { - "id": 49958, - "name": "Fountain Room", - "session": { - "id": "711768", - "title": "20 Nuggets in 20 Minutes – Get more from your CI", - "description": "For most of us, CI is a set-it-and-forget-it tool. It should churn through builds and tests without giving us any trouble. If this describes your experience: congratulations! You have a stable continuous integration practice.\r\n\r\nBut you can level up that CI pipeline. Together, we'll review a bunch of cool tools and creative setups that you can adopt in your own CI. These run the gamut from reducing wall-clock time, to lesser used static analysis, and handy optimizations.\r\n\r\nCome learn a thing or twenty about improving your team's developer experience, shipping faster, and identifying regressions early.", - "startsAt": "2024-09-19T12:10:00", - "endsAt": "2024-09-19T12:30:00", - "isServiceSession": false, - "isPlenumSession": false, - "speakers": [ - { - "id": "6af9e2e9-6dff-4ee1-9bbf-c4f815969b9c", - "name": "Ben Boral" - } - ], - "categories": [ - { - "id": 72054, - "name": "Level", - "categoryItems": [ - { - "id": 254879, - "name": "Intermediate" - } - ], - "sort": 0 - }, - { - "id": 72055, - "name": "Session format", - "categoryItems": [ - { - "id": 254881, - "name": "Lightning talk" - } - ], - "sort": 1 - }, - { - "id": 72056, - "name": "Tags", - "categoryItems": [ - { - "id": 254887, - "name": "CI/CD" - }, - { - "id": 254899, - "name": "Gradle" - } - ], - "sort": 3 - } - ], - "roomId": 49958, - "room": "Fountain Room", - "liveUrl": null, - "recordingUrl": null, - "status": "Accepted", - "isInformed": true, - "isConfirmed": true - }, - "index": 2 + "id": "733770", + "title": "User Initiated Data Transfer Jobs", + "description": "Google introduced a new api UIDT in Android 14 as an alternative to Work Manager and Foreground Services.\r\n\r\nA deep dive session into how your apps can run longer-duration, user-initiated transferring of data, such as downloading a file from a remote server using UIDT. With increasing restrictions on running Foreground Services it is very important to migrate your app's critical use cases to alternate API's. Android 14 applies strict rules on when you can run a Foreground Service & Android 15 is bringing 6 hours timeout to Foreground Services.\r\n\r\nWill share how specific use cases migrated to UIDT can lead to improved app performance.", + "startsAt": "2024-11-01T13:50:00", + "endsAt": "2024-11-01T14:30:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "edd46ee9-3e55-478c-8f27-c8f86ca77138", + "name": "Tushar Varshney" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264351, + "name": "Advanced" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264377, + "name": "Modern Android Development" + }, + { + "id": 264384, + "name": "Android" + } + ], + "sort": 4 + } + ], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true }, { - "id": 52283, - "name": "Sapphire Room", - "session": { - "id": "725412", - "title": "Accelerating On-Device AI Development with Qualcomm AI Hub", - "description": "Hey Android developers, ready to elevate your apps with on-device AI? Qualcomm's AI Hub is here to make your life easier streamlining your workflow in less than 5 minutes.\r\n \r\nAI Hub handles the complexity of model compilation and gets you to test performance in real Snapdragon or Qualcomm devices with just a few lines of code. It comes with a library of over 100 pre-optimized models, but don't worry - if you've got your own custom models, AI Hub has you covered and we keep your data private.\r\n \r\nThe best part? We're talking about AI that runs up to 4 times faster. That means smoother apps, better experiences for your users, and less battery drain. Whether you're building the next viral social media platform or advancing the capabilities of your existing app, Qualcomm AI Hub is your go-to for smarter, more efficient app development.\r\n \r\nJoin us to see how AI Hub can help you power on-device AI development.", - "startsAt": "2024-09-19T12:10:00", - "endsAt": "2024-09-19T12:30:00", - "isServiceSession": false, - "isPlenumSession": false, - "speakers": [ - { - "id": "d630dc15-c0c0-4f61-a490-ef993aafb2c3", - "name": "Siddhika Nevrekar" - } - ], - "categories": [ - { - "id": 72054, - "name": "Level", - "categoryItems": [ - { - "id": 254878, - "name": "Introductory and overview" - } - ], - "sort": 0 - }, - { - "id": 72055, - "name": "Session format", - "categoryItems": [ - { - "id": 254881, - "name": "Lightning talk" - } - ], - "sort": 1 - }, - { - "id": 72056, - "name": "Tags", - "categoryItems": [ - { - "id": 254889, - "name": "AI/ML" - }, - { - "id": 254891, - "name": "Android" - } - ], - "sort": 3 - } - ], - "roomId": 52283, - "room": "Sapphire Room", - "liveUrl": null, - "recordingUrl": null, - "status": "Accepted", - "isInformed": true, - "isConfirmed": true - }, - "index": 3 - } - ] - }, - { - "slotStart": "12:30:00", - "rooms": [ + "id": "2cf43443-53aa-439d-b2e3-b3cb3f96c326", + "title": "Break", + "description": null, + "startsAt": "2024-11-01T14:30:00", + "endsAt": "2024-11-01T14:50:00", + "isServiceSession": true, + "isPlenumSession": true, + "speakers": [], + "categories": [], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false + }, { - "id": 49956, - "name": "Grand Ballroom 1", - "session": { - "id": "0658f382-b827-40c2-8abf-bc914ff88d13", - "title": "Lunch", - "description": null, - "startsAt": "2024-09-19T12:30:00", - "endsAt": "2024-09-19T13:40:00", - "isServiceSession": true, - "isPlenumSession": true, - "speakers": [], - "categories": [], - "roomId": 49956, - "room": "Grand Ballroom 1", - "liveUrl": null, - "recordingUrl": null, - "status": null, - "isInformed": false, - "isConfirmed": false - }, - "index": 0 - } - ] - }, - { - "slotStart": "13:40:00", - "rooms": [ + "id": "693397", + "title": "Crime Scene InvestiGITor", + "description": "THERE HAS BEEN A MURDER!\r\n...\r\n(Or whatever the code version of a murder is... like breaking unit tests, a bug maybe?... I dunno!)\r\n\r\nTogether, we will learn how to become a professional and revered investiGITor, who will be able to sniff out and solve any version control offence with the ease and panache of a seasoned detective!\r\n\r\nVersion control software is often a mysterious black-box that we HAVE TO interact with in order to successfully collaborate with others. But what if it doesn't need to be a confusing & complicated enigma?\r\n\r\nYou will learn to probe into the dark recesses of Git and understand its inner workings by learning how to carry out many tasks that you will undoubtedly need to perform at some point in your career.\r\n\r\nFor example:\r\n* Ever needed to safely remove a secret that you accidentally stored in the repository?\r\n* Ever had your app break, not know why, and then needed to quickly hunt down the exact commit where a bug was introduced?\r\n* Ever needed to travel back in time, through history, to stop a crime before it even happens...(sort of)?\r\n\r\n...All these things and a bunch more useful & interesting, lesser-known ways to become a masterful git detective and truly understand the most important tool in a developer's arsenal.\r\n\r\nSo come have a little fun with me in this talk, bring the bugs to justice, solve the case of the naughty commit & become a hero by defending the integrity of your codebase!", + "startsAt": "2024-11-01T14:50:00", + "endsAt": "2024-11-01T15:30:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "5f8860b3-e669-4717-91bf-ddceb872fd55", + "name": "Benjamin Kadel" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264369, + "name": "Other" + }, + { + "id": 264380, + "name": "Tooling" + }, + { + "id": 264394, + "name": "CI/CD" + } + ], + "sort": 4 + } + ], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, { - "id": 49956, - "name": "Grand Ballroom 1", - "session": { - "id": "721534", - "title": "Composing an API the *right* way", - "description": "Everyone who writes code using Jetpack Compose designs Composable functions and components all the time. In this talk, we'll take a look at some highlights from the official guidelines around designing Compose APIs. This will let us do a better job of building with Compose, from naming functions through ordering parameters to managing state correctly.", - "startsAt": "2024-09-19T13:40:00", - "endsAt": "2024-09-19T14:20:00", - "isServiceSession": false, - "isPlenumSession": false, - "speakers": [ - { - "id": "1916ae1c-96d7-480f-9eed-bf5dce444441", - "name": "Márton Braun" - } - ], - "categories": [ - { - "id": 72054, - "name": "Level", - "categoryItems": [ - { - "id": 254879, - "name": "Intermediate" - } - ], - "sort": 0 - }, - { - "id": 72055, - "name": "Session format", - "categoryItems": [ - { - "id": 254882, - "name": "Session" - } - ], - "sort": 1 - }, - { - "id": 72056, - "name": "Tags", - "categoryItems": [ - { - "id": 254891, - "name": "Android" - }, - { - "id": 254892, - "name": "Kotlin" - }, - { - "id": 254902, - "name": "UI/UX" - } - ], - "sort": 3 - } - ], - "roomId": 49956, - "room": "Grand Ballroom 1", - "liveUrl": null, - "recordingUrl": null, - "status": "Accepted", - "isInformed": true, - "isConfirmed": true - }, - "index": 0 + "id": "c1cc8017-64f6-44c1-9c63-ac4116e75ea0", + "title": "Break", + "description": null, + "startsAt": "2024-11-01T15:30:00", + "endsAt": "2024-11-01T15:45:00", + "isServiceSession": true, + "isPlenumSession": true, + "speakers": [], + "categories": [], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false + }, + { + "id": "717692", + "title": "Level up your SDKs with KMP - no rewrite required!", + "description": "There are several compelling reasons to explore adding Kotlin Multiplatform (KMP) to your existing SDKs or libraries. The main one - to reduce development time and cut maintenance costs by having a single codebase for shared logic.\r\n\r\nBut what if you already have a suite of tried and tested native SDKs, and want to simply add KMP capabilities to broaden your audience, without impacting existing customers? Or perhaps you’re adding functionality on top of your SDKs and want to build it once instead of duplicating it in 2, 3, or 4 programming languages?\r\n\r\nI’ll share our experiences at PubNub with bringing three of our realtime messaging SDKs - TypeScript, Swift and JVM, under a unified KMP API. I’ll also show how this foundation then enabled us to build and ship a new Chat SDK on top, built with KMP from the ground up and targeting all 3 platforms.\r\n\r\nThe talk will cover the initial requirements phase, the architectural decisions, and the tradeoffs that we had to make to finally land on KMP as the chosen solution.\r\n\r\nWe'll then delve into practical code examples and solutions (as well as quite a few WTF moments!) that allowed us to build the Chat SDK without affecting our existing users, and even improved the quality and consistency of our native SDKs.\r\n\r\n", + "startsAt": "2024-11-01T15:45:00", + "endsAt": "2024-11-01T16:25:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "ffd6d0b9-9615-4f5a-9f58-6dcf3d4acb3b", + "name": "Wojtek Kaliciński" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264351, + "name": "Advanced" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264359, + "name": "Kotlin" + }, + { + "id": 264361, + "name": "KMP" + }, + { + "id": 264374, + "name": "API" + }, + { + "id": 264381, + "name": "Cross-Platform" + } + ], + "sort": 4 + } + ], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true }, { - "id": 49957, - "name": "Grand Ballroom 2", - "session": { - "id": "725795", - "title": "Using Rust in Your Next KMP App", - "description": "When building an app for KMP, Kotlin provides powerful features and tooling to enhance the developer experience. But sometimes it is necessary to go beyond what Kotlin offers.\r\n\r\nIn this talk, we will cover the process of using the Rust programming language as the core of an Android SDK, as well as the reasons why you might want to do this. We will also go over some of the speed bumps we encountered along the way while building the Ditto SDK for Android platforms.\r\n\r\nNo prior experience with Rust is necessary.", - "startsAt": "2024-09-19T13:40:00", - "endsAt": "2024-09-19T14:20:00", - "isServiceSession": false, - "isPlenumSession": false, - "speakers": [ - { - "id": "6c6404df-420e-4dfc-acf7-a3418742afd6", - "name": "Ben Chatelain" - } - ], - "categories": [ - { - "id": 72054, - "name": "Level", - "categoryItems": [ - { - "id": 254880, - "name": "Advanced" - } - ], - "sort": 0 - }, - { - "id": 72055, - "name": "Session format", - "categoryItems": [ - { - "id": 254882, - "name": "Session" - } - ], - "sort": 1 - }, - { - "id": 72056, - "name": "Tags", - "categoryItems": [ - { - "id": 254891, - "name": "Android" - }, - { - "id": 254892, - "name": "Kotlin" - }, - { - "id": 254897, - "name": "Libraries" - } - ], - "sort": 3 - } - ], - "roomId": 49957, - "room": "Grand Ballroom 2", - "liveUrl": null, - "recordingUrl": null, - "status": "Accepted", - "isInformed": true, - "isConfirmed": true - }, - "index": 1 + "id": "059a58e3-50b1-4a62-8377-7263b7ca960f", + "title": "Break", + "description": null, + "startsAt": "2024-11-01T16:25:00", + "endsAt": "2024-11-01T16:40:00", + "isServiceSession": true, + "isPlenumSession": true, + "speakers": [], + "categories": [], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false }, { - "id": 49958, - "name": "Fountain Room", - "session": { - "id": "671422", - "title": "How to make Kotlin compile 2x faster on a super large project?", - "description": "In this talk, we'll introduce 5 advanced optimizations, from easy to hard to existing Kotlin compilers which are related to cache rate improvement and cache reuse. One of the heavyweight optimizations we call the \"baseline kotlin cache\". As we all know, normally, any changes to a low-level module will make the parent module cache fingerprint change invalid. We solved this problem by turning the fuzzy cache of the compileKotlin task into an incremental record bin, and reducing the full build time of the TikTok app in any scenario to 50%! Those solutions from TikTok could help Kotlin module build 2x+ faster than it used to be. ", - "startsAt": "2024-09-19T13:40:00", - "endsAt": "2024-09-19T14:20:00", - "isServiceSession": false, - "isPlenumSession": false, - "speakers": [ - { - "id": "03c63012-49c4-44eb-af96-0f5360b0d187", - "name": "Ishan Khanna" - }, - { - "id": "ed92b8fc-711a-48c7-a8e5-4255fb793ffa", - "name": "Pengwen Jiao" - } - ], - "categories": [ - { - "id": 72054, - "name": "Level", - "categoryItems": [ - { - "id": 254880, - "name": "Advanced" - } - ], - "sort": 0 - }, - { - "id": 72055, - "name": "Session format", - "categoryItems": [ - { - "id": 254882, - "name": "Session" - } - ], - "sort": 1 - }, - { - "id": 72056, - "name": "Tags", - "categoryItems": [ - { - "id": 254886, - "name": "Tooling" - }, - { - "id": 254887, - "name": "CI/CD" - }, - { - "id": 254892, - "name": "Kotlin" - } - ], - "sort": 3 - } - ], - "roomId": 49958, - "room": "Fountain Room", - "liveUrl": null, - "recordingUrl": null, - "status": "Accepted", - "isInformed": true, - "isConfirmed": true - }, - "index": 2 + "id": "732470", + "title": "Exploring Kotlin Symbol Processing: A Practical Guide", + "description": "In this session we’ll dive into the world of Kotlin Symbol Processing (KSP). This session aims to provide an introduction to KSP and its benefits compared to the Kotlin Annotation Processing Tool (KAPT).\r\n\r\nThe practical portion of this talk will guide you through the process of creating annotation definitions and implementing a symbol processor. We will demonstrate the usage of KSP API and KotlinPoet for generating Kotlin files, providing you with a hands-on experience of working with KSP. Furthermore, we will demonstrate how to use KSP in multiplatform projects.\r\n\r\nBy the end of this talk, you will walk away with a solid understanding of Kotlin Symbol Processing, and practical knowledge on how to leverage KSP in your development workflow.", + "startsAt": "2024-11-01T16:40:00", + "endsAt": "2024-11-01T17:20:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "f589d95b-8262-4337-b6c8-78b4701afa3a", + "name": "Dean Djermanović" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264359, + "name": "Kotlin" + } + ], + "sort": 4 + } + ], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true }, { - "id": 52283, - "name": "Sapphire Room", - "session": { - "id": "725870", - "title": "Why testing is also a developer's problem", - "description": "As the pace of development increases, completing testing in sprint becomes harder. The features to test are becoming more numerous and complicated. The testing backlog grows and begins to slow down the pace of innovation and application quality. Fortunately, mobile test automation is here to help make test development easier, faster, and better.​\r\n\r\nKey takeaways:​\r\n\r\n- Challenges Agile teams face testing Android applications​\r\n- Approaches to make testing a breeze and get back to developing great new applications​\r\n- Accelerating test creation with automation​\r\n- Using virtual and physical devices for easy setup and execution​\r\n- Get testing faster with zero-footprint authoring on the Tricentis Virtual Mobile Grid​\r\n- Reducing maintenance using ML and AI​", - "startsAt": "2024-09-19T13:40:00", - "endsAt": "2024-09-19T14:20:00", - "isServiceSession": false, - "isPlenumSession": false, - "speakers": [ - { - "id": "1077aaba-731b-405f-92eb-2481a507a082", - "name": "Blake Reynolds" - } - ], - "categories": [ - { - "id": 72054, - "name": "Level", - "categoryItems": [ - { - "id": 254878, - "name": "Introductory and overview" - } - ], - "sort": 0 - }, - { - "id": 72055, - "name": "Session format", - "categoryItems": [ - { - "id": 254882, - "name": "Session" - } - ], - "sort": 1 - }, - { - "id": 72056, - "name": "Tags", - "categoryItems": [ - { - "id": 254887, - "name": "CI/CD" - }, - { - "id": 254889, - "name": "AI/ML" - }, - { - "id": 254894, - "name": "Testing" - } - ], - "sort": 3 - } - ], - "roomId": 52283, - "room": "Sapphire Room", - "liveUrl": null, - "recordingUrl": null, - "status": "Accepted", - "isInformed": true, - "isConfirmed": true - }, - "index": 3 + "id": "c9009c93-af8c-4487-ae2f-253f17acea6a", + "title": "See you next year!", + "description": null, + "startsAt": "2024-11-01T17:20:00", + "endsAt": "2024-11-01T17:30:00", + "isServiceSession": true, + "isPlenumSession": true, + "speakers": [], + "categories": [], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false } - ] + ], + "hasOnlyPlenumSessions": false }, { - "slotStart": "14:20:00", - "rooms": [ + "id": 49271, + "name": "Glass", + "sessions": [ + { + "id": "696374", + "title": "AndroidX Lifecycle's Path to Multiplatform", + "description": "We’ve recently converted the AndroidX Lifecycle libraries (ViewModel, Lifecycle Runtime, and Compose support) to Kotlin multi-platform (KMP). Join this session to learn more about how this process went, what the real-world challenges of maintaining API backward compatibility are, what lessons we learned from working around KMP limitations, and insights to guide you in migrating your own libraries to KMP.", + "startsAt": "2024-11-01T10:20:00", + "endsAt": "2024-11-01T11:00:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "7280b9e7-ddf7-4cfb-b85b-1e998d851f66", + "name": "Marcello Galhardo" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264351, + "name": "Advanced" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264369, + "name": "Other" + }, + { + "id": 264381, + "name": "Cross-Platform" + }, + { + "id": 264384, + "name": "Android" + }, + { + "id": 264388, + "name": "Libraries" + } + ], + "sort": 4 + } + ], + "roomId": 49271, + "room": "Glass", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, { - "id": 49956, - "name": "Grand Ballroom 1", - "session": { - "id": "17bb6612-d415-4897-8621-5b894259642e", - "title": "Break", - "description": null, - "startsAt": "2024-09-19T14:20:00", - "endsAt": "2024-09-19T14:35:00", - "isServiceSession": true, - "isPlenumSession": true, - "speakers": [], - "categories": [], - "roomId": 49956, - "room": "Grand Ballroom 1", - "liveUrl": null, - "recordingUrl": null, - "status": null, - "isInformed": false, - "isConfirmed": false - }, - "index": 0 - } - ] - }, - { - "slotStart": "14:35:00", - "rooms": [ + "id": "747072", + "title": "Scalable Testing Strategies", + "description": "It's very easy to have too many tests and lose track of what kind of feedback each one brings. Moreover, testing on multiple devices can get expensive, both in terms of CI cost and lost productivity waiting for tests to pass. In this talk we'll talk about how the testing pyramid has evolved because of new requirements and features that need to be tested, such as multiple form factors, new configuration changes, Jetpack Compose, screenshot testing, etc.", + "startsAt": "2024-11-01T11:15:00", + "endsAt": "2024-11-01T11:55:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "578f244d-fe79-4759-a84f-63dfbefbd06d", + "name": "Jose Alcérreca" + }, + { + "id": "532dc16d-b69d-4f68-aa49-fe9878b0b52f", + "name": "Adarsh Fernando" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264363, + "name": "Testing" + }, + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264394, + "name": "CI/CD" + }, + { + "id": 264384, + "name": "Android" + } + ], + "sort": 4 + } + ], + "roomId": 49271, + "room": "Glass", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, { - "id": 49956, - "name": "Grand Ballroom 1", - "session": { - "id": "721533", - "title": "Kotlin Coroutine Mechanisms: Introduction to coroutine behavior through playful examples", - "description": "Sometimes you think you know coroutines and then after a while, you’re like “wait, do I really know coroutines?” . Inspired from \"Programming Android with Kotlin: Achieving Structured Concurrency with Coroutines\", this talks strengthens everyday coroutine understanding through playful explorations. We [the authors] always had sincere intentions with the book:\r\n\r\n\"While [coroutine] concepts are important if you want to master coroutines, you don’t have to understand everything right now to get started and be productive with coroutines.\" — Chapter 9: Coroutine concepts p. 127\r\n\r\nYou might be in beginning stages of learning Kotlin. Or maybe you’ve been using coroutines for a while and want to brush up, maybe you're a little burned from other talks: either way, you'll be looking at coroutines a little different by the end of this session!\r\n", - "startsAt": "2024-09-19T14:35:00", - "endsAt": "2024-09-19T15:15:00", - "isServiceSession": false, - "isPlenumSession": false, - "speakers": [ - { - "id": "a4d26fc1-9707-4c86-bc82-70b7ce05823c", - "name": "Amanda Hinchman-Dominguez" - } - ], - "categories": [ - { - "id": 72054, - "name": "Level", - "categoryItems": [ - { - "id": 254878, - "name": "Introductory and overview" - } - ], - "sort": 0 - }, - { - "id": 72055, - "name": "Session format", - "categoryItems": [ - { - "id": 254882, - "name": "Session" - } - ], - "sort": 1 - }, - { - "id": 72056, - "name": "Tags", - "categoryItems": [ - { - "id": 254892, - "name": "Kotlin" - }, - { - "id": 254895, - "name": "Coroutines" - } - ], - "sort": 3 - } - ], - "roomId": 49956, - "room": "Grand Ballroom 1", - "liveUrl": null, - "recordingUrl": null, - "status": "Accepted", - "isInformed": true, - "isConfirmed": true - }, - "index": 0 + "id": "736513", + "title": "A Snapshot Preview of Paparazzi 2.0", + "description": "Since last Droidcon NYC, Paparazzi has seen continued increased adoption across the Android community!\r\n\r\nIn this session, we'll discuss:\r\n* why pixel perfection is challenging af\r\n* image encoding and why we chose APNG for animations\r\n* why Google's publishing of layoutlib is great for the community\r\n* ...and more!\r\n\r\nWe'll also give a sneak peek to what's coming in 2.0, as well as why we're excited about it and you should be too!", + "startsAt": "2024-11-01T12:55:00", + "endsAt": "2024-11-01T13:35:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "903c7a65-63f0-4244-8f8c-7ab8f7acae75", + "name": "John Rodriguez" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264359, + "name": "Kotlin" + }, + { + "id": 264363, + "name": "Testing" + }, + { + "id": 264380, + "name": "Tooling" + } + ], + "sort": 4 + } + ], + "roomId": 49271, + "room": "Glass", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true }, { - "id": 49957, - "name": "Grand Ballroom 2", - "session": { - "id": "720219", - "title": "Making the Big Kotlin Multiplatform Decision", - "description": "Why is adopting Kotlin Multiplatform Mobile not an easy decision to make? After all, it can potentially save a business millions of dollars by cutting down duplicate iOS and Android code and saving many developer hours. \r\n\r\nBut when you have large, complicated codebases and investment in a mobile organization with specific skill sets, it can be an expensive decision to put time and resources into shifting into KMM instead. It can be a hard decision to reverse, and a risky call to make. But it doesn't have to be!\r\n\r\nIn this talk I’ll lay out a decision-making framework to approach KMM adoption - not just from an engineering perspective, but a leadership one too. We’ll reference case studies and talk about: \r\n\r\n* Evaluating KMM for different kinds of projects - standard mobile codebases as well as those in custom frameworks like RIBS and Workflow\r\n* The important factors - build support for Android vs iOS, resourcing KMM expertise, and flexibility, all of which impact long-term risks and outcomes\r\n* Evaluating cultural support - what kind of teams and organizations are best set up for KMM success? \r\n* Finding the right engineering levers to make adoption more successful\r\n \r\nAt Square, I’ve had to make that call for my team, and I’ve worked with other teams that faced similar decisions. I’ll reference real learnings as we discuss wisely and successfully steering a team into new Kotlin waters. \r\n", - "startsAt": "2024-09-19T14:35:00", - "endsAt": "2024-09-19T15:15:00", - "isServiceSession": false, - "isPlenumSession": false, - "speakers": [ - { - "id": "265b1a56-e32c-459d-8580-6d0d4ed5fc63", - "name": "Sumayyah Ahmed" - } - ], - "categories": [ - { - "id": 72054, - "name": "Level", - "categoryItems": [ - { - "id": 254880, - "name": "Advanced" - } - ], - "sort": 0 - }, - { - "id": 72055, - "name": "Session format", - "categoryItems": [ - { - "id": 254882, - "name": "Session" - } - ], - "sort": 1 - }, - { - "id": 72056, - "name": "Tags", - "categoryItems": [ - { - "id": 254888, - "name": "Cross-Platform" - }, - { - "id": 254891, - "name": "Android" - } - ], - "sort": 3 - } - ], - "roomId": 49957, - "room": "Grand Ballroom 2", - "liveUrl": null, - "recordingUrl": null, - "status": "Accepted", - "isInformed": true, - "isConfirmed": true - }, - "index": 1 + "id": "734509", + "title": "Building State Holders in Compose with Molecule: A New Approach to Reusable UI Components", + "description": "Are your ViewModels exponentially growing out of control as they manage the state for each of your Composables? This talk introduces Molecule, a new library for creating state holders in Jetpack Compose. We’ll explore how Molecule can simplify presentation state management in Compose, allowing for more flexible and scalable UI development. Attendees will learn how to implement Molecule in their projects and understand its advantages over traditional state management approaches as well as some of the drawbacks to this approach.", + "startsAt": "2024-11-01T13:50:00", + "endsAt": "2024-11-01T14:30:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "6624cb6c-7fc4-4495-a87f-8060e88d7d18", + "name": "Jack Adams" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264358, + "name": "Jetpack Compose" + }, + { + "id": 264362, + "name": "Flow" + }, + { + "id": 264364, + "name": "Compose" + }, + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264388, + "name": "Libraries" + } + ], + "sort": 4 + } + ], + "roomId": 49271, + "room": "Glass", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true }, { - "id": 49958, - "name": "Fountain Room", - "session": { - "id": "717465", - "title": "Root causing memory growth with LeakCanary 3", - "description": "At Square, we scaled our LeakCanary usage over the last nine years by running it on all UI tests on every pull request, uploading leaks detected in debug builds, and triaging leaks weekly. This works: we fixed thousands of leaks (in our apps, third-party libraries, and the Android Framework), and we're now finding fewer and fewer new leaks!\r\n\r\nUnfortunately, we sometimes see the heap size grow over time without LeakCanary finding any issue. For example, constantly appending string logs to a collection would not trigger LeakCanary but would still lead to ANRs and OOMEs when the app eventually runs out of memory.\r\n\r\nInspired by the BLeak paper and the work of the Android Studio team, I built a new toolkit in LeakCanary that performs repeated heap dump diffs and detects objects with a constantly increasing number of outgoing edges (for example, a list that keeps growing).\r\n\r\nCome learn how this works; together, we can fix all the leaks!", - "startsAt": "2024-09-19T14:35:00", - "endsAt": "2024-09-19T15:15:00", - "isServiceSession": false, - "isPlenumSession": false, - "speakers": [ - { - "id": "a733fc42-dcb9-4107-9675-70335f2889e9", - "name": "Pierre-Yves Ricau" - } - ], - "categories": [ - { - "id": 72054, - "name": "Level", - "categoryItems": [ - { - "id": 254879, - "name": "Intermediate" - } - ], - "sort": 0 - }, - { - "id": 72055, - "name": "Session format", - "categoryItems": [ - { - "id": 254882, - "name": "Session" - } - ], - "sort": 1 - }, - { - "id": 72056, - "name": "Tags", - "categoryItems": [ - { - "id": 254886, - "name": "Tooling" - }, - { - "id": 254887, - "name": "CI/CD" - }, - { - "id": 254891, - "name": "Android" - }, - { - "id": 254897, - "name": "Libraries" - } - ], - "sort": 3 - } - ], - "roomId": 49958, - "room": "Fountain Room", - "liveUrl": null, - "recordingUrl": null, - "status": "Accepted", - "isInformed": true, - "isConfirmed": true - }, - "index": 2 + "id": "720685", + "title": "Why is adaptive layout a nightmare?", + "description": "Dive into the captivating realm of Android UI development in this session where we will share in-depth expertise on designing versatile user interfaces. Together, we will explore the complex challenges of organizing and building UI components, providing unique insights into crafting seamless user experiences across a variety of devices such as phones, foldables, and tablets.\r\n\r\nWhile Google advocates for the use of adaptive layout, we will unveil the often underestimated nuances, shed practical light on overcoming obstacles you’ll meet down the road and help you create truly adaptive Android applications.", + "startsAt": "2024-11-01T14:50:00", + "endsAt": "2024-11-01T15:30:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "6520ad1e-8c4e-45c1-b34d-91ca73db27fe", + "name": "Gerard Paligot" + }, + { + "id": "81f9ecbf-c08c-48c7-850f-1e79e1439867", + "name": "David Ta" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264358, + "name": "Jetpack Compose" + }, + { + "id": 264359, + "name": "Kotlin" + }, + { + "id": 264364, + "name": "Compose" + }, + { + "id": 264367, + "name": "Foldables" + }, + { + "id": 264377, + "name": "Modern Android Development" + }, + { + "id": 264384, + "name": "Android" + }, + { + "id": 264390, + "name": "UI/UX" + } + ], + "sort": 4 + } + ], + "roomId": 49271, + "room": "Glass", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true }, { - "id": 52283, - "name": "Sapphire Room", - "session": { - "id": "727034", - "title": "Squash your hidden bugs using Microsoft Clarity", - "description": "Have you ever released a feature only to discover critical bugs in production? Are you curious about why your users are struggling with your new feature? Wondering why your customers are dropping off? With Clarity, you can find answers to all these questions at zero cost. Gain insights into user experiences, identify friction points, and uncover potential improvements through Clarity’s session recordings, heatmaps, AI insights, and more.", - "startsAt": "2024-09-19T14:35:00", - "endsAt": "2024-09-19T15:15:00", - "isServiceSession": false, - "isPlenumSession": false, - "speakers": [ - { - "id": "636dd7ea-e476-4289-a6e2-a7cbc116da62", - "name": "Ibrahim Radwan" - } - ], - "categories": [ - { - "id": 72054, - "name": "Level", - "categoryItems": [ - { - "id": 254879, - "name": "Intermediate" - } - ], - "sort": 0 - }, - { - "id": 72055, - "name": "Session format", - "categoryItems": [ - { - "id": 254882, - "name": "Session" - } - ], - "sort": 1 - }, - { - "id": 72056, - "name": "Tags", - "categoryItems": [ - { - "id": 254886, - "name": "Tooling" - }, - { - "id": 254888, - "name": "Cross-Platform" - }, - { - "id": 254889, - "name": "AI/ML" - }, - { - "id": 254891, - "name": "Android" - }, - { - "id": 254893, - "name": "Design" - }, - { - "id": 254894, - "name": "Testing" - }, - { - "id": 254897, - "name": "Libraries" - }, - { - "id": 254902, - "name": "UI/UX" - } - ], - "sort": 3 - } - ], - "roomId": 52283, - "room": "Sapphire Room", - "liveUrl": null, - "recordingUrl": null, - "status": "Accepted", - "isInformed": true, - "isConfirmed": true - }, - "index": 3 + "id": "730918", + "title": "Upgrading Meta's Kotlin Infrastructure to K2: A Migration Journey", + "description": "In this talk, we will share our experience migrating Meta's Kotlin infrastructure from K1 to K2. We will discuss the challenges we faced during the migration process, including differences in error handling between K1 and K2, and how we overcame them. We will also cover the process of migrating compiler plugins, including overview of plugins we migrated and the solutions we implemented to overcome challenges. Finally, we will discuss our experience with the KSP2.0 migration.\r\nThis talk will provide valuable insights for developers and teams considering a migration to K2, as well as those interested in learning more about the challenges and solutions involved in large-scale migrations.\r\n\r\nKeywords: K2, Kotlin 2.0, Kotlin compiler plugins", + "startsAt": "2024-11-01T15:45:00", + "endsAt": "2024-11-01T16:25:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "33801296-8d41-4df0-b729-c0461afa1be2", + "name": "Ruslan Latypov" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264351, + "name": "Advanced" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264359, + "name": "Kotlin" + }, + { + "id": 264374, + "name": "API" + }, + { + "id": 264380, + "name": "Tooling" + } + ], + "sort": 4 + } + ], + "roomId": 49271, + "room": "Glass", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "id": "735915", + "title": "Android driver - application of Android device in RC vehicle development", + "description": "TL;DR: This talk will showcase development of remote controlled vehicle with Android powered device as its central unit. \r\n\r\n... and now long version:\r\nStudents and researches around the world often struggle in early stages of development of robotics and hardware projects. The reason? High cost and connection difficulties of all the sensors and effectors for Arduinos, Raspberry Pi's or whatever platform they do choose. All of them have a solution right in their hands - or their pockets - and that is with almost no additional costs. \r\n\r\nBy enabling Android device to act as a part, or center, of embedded system you can unlock vast variety or its capabilities - ones that would cost hundreds of dollars to purchase and dozens of hours to connect & set up. Some of them are:\r\n- LTE access to Internet\r\n- WiFi & bluetooth connectivity\r\n- screen, speakers, microphone, LED light\r\n- accelerometer, gyroscope\r\n- multiple cameras\r\n- biometric sensors\r\nNot to mention higher level of services they offer through countless libraries ready to be used by developers.\r\n\r\n-> By the end of this talk, attendees will discover an innovative & easy way to use Android powered devices to cut down costs of prototyping hardware projects, especially as proposed, by building RC vehicle. ", + "startsAt": "2024-11-01T16:40:00", + "endsAt": "2024-11-01T17:20:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "58038e33-703e-497c-9f47-3624e36418e8", + "name": "Tomasz Słuszniak" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264366, + "name": "Modularization" + }, + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264369, + "name": "Other" + }, + { + "id": 264370, + "name": "IoT" + }, + { + "id": 264384, + "name": "Android" + } + ], + "sort": 4 + } + ], + "roomId": 49271, + "room": "Glass", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true } - ] + ], + "hasOnlyPlenumSessions": false }, { - "slotStart": "15:15:00", - "rooms": [ + "id": 49272, + "name": "Things", + "sessions": [ { - "id": 49956, - "name": "Grand Ballroom 1", - "session": { - "id": "cb85a61c-8c10-407e-b31f-f022f4f6e45d", - "title": "Break", - "description": null, - "startsAt": "2024-09-19T15:15:00", - "endsAt": "2024-09-19T15:30:00", - "isServiceSession": true, - "isPlenumSession": true, - "speakers": [], - "categories": [], - "roomId": 49956, - "room": "Grand Ballroom 1", - "liveUrl": null, - "recordingUrl": null, - "status": null, - "isInformed": false, - "isConfirmed": false - }, - "index": 0 - } - ] - }, - { - "slotStart": "15:30:00", - "rooms": [ + "id": "696208", + "title": "Deep Dive into the Compose Compiler", + "description": "Have you ever wondered how the slot table is implemented in Compose? How are groups generated? What's the magic behind skipping, and how can you peek inside a slot table? The Slot table implementation was updated recently for performance. This talk takes a deep dive into the Jetpack Compose compiler internals, with a special focus on answering these questions and exploring the implementation details of the slot table. We'll go beyond the basics, uncovering how the compiler is structured and tested. This knowledge will empower you to understand, contribute to, or even build your own tools on top of it. Whether you're a curious developer or aspiring plugin contributor, get ready to fully understand the Jetpack Compose Compiler.", + "startsAt": "2024-11-01T10:20:00", + "endsAt": "2024-11-01T11:00:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "a79f3682-df5c-40e4-8aa8-1b6eaa7bdeec", + "name": "Mohit Sarveiya" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264351, + "name": "Advanced" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264358, + "name": "Jetpack Compose" + }, + { + "id": 264359, + "name": "Kotlin" + }, + { + "id": 264361, + "name": "KMP" + }, + { + "id": 264364, + "name": "Compose" + }, + { + "id": 264380, + "name": "Tooling" + }, + { + "id": 264384, + "name": "Android" + } + ], + "sort": 4 + } + ], + "roomId": 49272, + "room": "Things", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, { - "id": 49956, - "name": "Grand Ballroom 1", - "session": { - "id": "721559", - "title": "Plug and Play: Power Up DevX with Android Studio Plugins", - "description": "For most companies, developer tooling investments often lag behind direct user-facing codebase improvements. However, as a company grows, more engineers begin to contribute and the codebase gets more complex and mature, tooling becomes an essential part of maintaining and improving the developer experience at scale. Early tooling efforts often evolve into disparate collections of multilingual scripts, but what happens when we treat tooling and infra as a proper software project just like we would production code? Let’s explore how Reddit has made tooling a first-class citizen within our codebase by leveraging custom IntelliJ IDE Plugins to improve the developer experience and how your team can apply these concepts and learnings to your own projects.\r\n\r\nKey Takeaways: \r\n1. What is an IntelliJ Plugin and how can it help you build tooling to level-up your developer experience?\r\n2. What kinds of problems can IntelliJ plug-ins help solve, with Reddit-specific examples:\r\n a. Use Case: Using plugins to improve developer onboarding\r\n b. Use Case: Using plugins to keep developers informed and up-to-date\r\n c. Use Case: Using plugins to accelerate large migrations\r\n d. Use Case: Using plugins to reinforce opinionated design patterns\r\n3. What are some other opportunities for plug-ins and how to get started writing your own or leveraging those from others\r\n", - "startsAt": "2024-09-19T15:30:00", - "endsAt": "2024-09-19T16:10:00", - "isServiceSession": false, - "isPlenumSession": false, - "speakers": [ - { - "id": "de68551c-a180-464b-95d8-1e41d02509a8", - "name": "Drew Heavner" - } - ], - "categories": [ - { - "id": 72054, - "name": "Level", - "categoryItems": [ - { - "id": 254879, - "name": "Intermediate" - } - ], - "sort": 0 - }, - { - "id": 72055, - "name": "Session format", - "categoryItems": [ - { - "id": 254882, - "name": "Session" - } - ], - "sort": 1 - }, - { - "id": 72056, - "name": "Tags", - "categoryItems": [ - { - "id": 254886, - "name": "Tooling" - }, - { - "id": 254891, - "name": "Android" - }, - { - "id": 254892, - "name": "Kotlin" - }, - { - "id": 254901, - "name": "Android Studio" - }, - { - "id": 254902, - "name": "UI/UX" - } - ], - "sort": 3 - } - ], - "roomId": 49956, - "room": "Grand Ballroom 1", - "liveUrl": null, - "recordingUrl": null, - "status": "Accepted", - "isInformed": true, - "isConfirmed": true - }, - "index": 0 + "id": "735816", + "title": "Developing Trusted Applications for Trusted Execution Environments and vTEEs", + "description": "In today's mobile-first world, security is paramount. Join us in this engaging session where we introduce vTEE, a groundbreaking concept designed to embed advanced security into mobile applications. This session will demonstrate how vTEE allows developers to create their own Trusted Execution Environments (TEEs) directly within their apps, ensuring that sensitive data remains protected. Additionally, learn how our global award-winning open-source project, jCardSim, simplifies the prototyping and development of trusted applications, accelerating your journey towards secure, scalable, and innovative app experiences. Get ready to supercharge your app security with ease and flexibility!", + "startsAt": "2024-11-01T11:15:00", + "endsAt": "2024-11-01T11:55:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "d7e7d278-a645-42c5-b337-c793a5b5bd79", + "name": "Mikhail Dudarev" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264351, + "name": "Advanced" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264372, + "name": "Security" + }, + { + "id": 264381, + "name": "Cross-Platform" + }, + { + "id": 264384, + "name": "Android" + } + ], + "sort": 4 + } + ], + "roomId": 49272, + "room": "Things", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true }, { - "id": 49957, - "name": "Grand Ballroom 2", - "session": { - "id": "689610", - "title": "Android, Compose, Multiplatform & Server - Inject them all with Koin", - "description": "Whether you're crafting a modern Android app with Jetpack Compose, extending your codebase across iOS and desktop environments through Kotlin Multiplatform, or even orchestrating layers of components on server side with Ktor, Koin emerges as the central integration platform.\r\n\r\nJoin me for this session through the wide Kotlin landscape and see how Koin, the well-known Kotlin dependency injection open-source framework, seamlessly integrates across the entire ecosystem.\r\n\r\nI propose to move from the basics of building on each platform, to step on injection patterns on your shared Kotlin code (Android, iOS, Compose …), as well as diving into server-side development.\r\n\r\nWe'll discuss upcoming features of Koin 4. Get ready for a great journey into the present and future of Kotlin development with Koin!", - "startsAt": "2024-09-19T15:30:00", - "endsAt": "2024-09-19T16:10:00", - "isServiceSession": false, - "isPlenumSession": false, - "speakers": [ - { - "id": "66fbb80a-cd18-4ba1-931d-d070d060ab95", - "name": "Arnaud Giuliani" - } - ], - "categories": [ - { - "id": 72054, - "name": "Level", - "categoryItems": [ - { - "id": 254878, - "name": "Introductory and overview" - } - ], - "sort": 0 - }, - { - "id": 72055, - "name": "Session format", - "categoryItems": [ - { - "id": 254882, - "name": "Session" - } - ], - "sort": 1 - }, - { - "id": 72056, - "name": "Tags", - "categoryItems": [ - { - "id": 254888, - "name": "Cross-Platform" - }, - { - "id": 254891, - "name": "Android" - }, - { - "id": 254892, - "name": "Kotlin" - } - ], - "sort": 3 - } - ], - "roomId": 49957, - "room": "Grand Ballroom 2", - "liveUrl": null, - "recordingUrl": null, - "status": "Accepted", - "isInformed": true, - "isConfirmed": true - }, - "index": 1 + "id": "731650", + "title": "Elevated Dependency Injection: Going Beyond the Basics with Custom Hilt Components", + "description": "Hilt/Dagger is a popular and powerful building block in Modern Android Development. Its benefits include reduced boilerplate and compile-time magic to ensure runtime safety and performance. \r\n\r\nBy default, Hilt provides basic components, such as Singleton, Activity, or ViewModel. \r\nIt is also extensible, allowing you to create additional components for more complex use cases. \r\n\r\nHere at Patreon, building a custom UserComponent tied to a user session has improved our codebase immensely by reducing boilerplate, increasing code safety, and making it easier to cancel work when a user logs out.\r\n\r\nThis talk will focus on the ins and outs of custom components and some simple but non-obvious techniques that we’ve used to make them nicely integrate into our app!\r\n\r\nHighlights of the talk will include:\r\n\r\n- Custom components and when you should use them\r\n- The beautiful synergy of dagger components and coroutine scopes\r\n- Overcoming the limitations of Dagger’s single inheritance and Hilt’s fixed component hierarchy\r\n- Providing easy access to bindings in `@HiltViewModel` and `@HiltAndroidTest` classes\r\n- A case study of Patreon’s `UserComponent`", + "startsAt": "2024-11-01T12:55:00", + "endsAt": "2024-11-01T13:35:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "1caff1f9-9594-4ce8-a031-ed1ba2201d13", + "name": "Steven Kideckel" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264377, + "name": "Modern Android Development" + }, + { + "id": 264384, + "name": "Android" + }, + { + "id": 264387, + "name": "Dagger" + } + ], + "sort": 4 + } + ], + "roomId": 49272, + "room": "Things", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true }, { - "id": 49958, - "name": "Fountain Room", - "session": { - "id": "700494", - "title": "Ten things you heard about testing that might be wrong", - "description": "Testing became an essential part of Android development. Many conference talks have been given and even more best practices have been written. \r\n\r\nBut what if, as time evolved, some of the things we thought were true, changed?\r\n\r\nLet’s start questioning some of these in this talk:\r\n- Are flaky tests fixable?\r\n- Are mocks even harmful?\r\n- Is DI about testing?\r\n- Did we understand testing in isolation properly? \r\n- Is the test pyramid still valid?\r\n- Is Robolectric good or bad on Android?\r\n- And in times of AI, should we generate tests?\r\n\r\nCome and join my session to learn more!\r\n", - "startsAt": "2024-09-19T15:30:00", - "endsAt": "2024-09-19T16:10:00", - "isServiceSession": false, - "isPlenumSession": false, - "speakers": [ - { - "id": "4d3a31b1-61e5-4a26-9ca3-c9f30e3eaa08", - "name": "Danny Preussler" - } - ], - "categories": [ - { - "id": 72054, - "name": "Level", - "categoryItems": [ - { - "id": 254880, - "name": "Advanced" - } - ], - "sort": 0 - }, - { - "id": 72055, - "name": "Session format", - "categoryItems": [ - { - "id": 254882, - "name": "Session" - } - ], - "sort": 1 - }, - { - "id": 72056, - "name": "Tags", - "categoryItems": [ - { - "id": 254886, - "name": "Tooling" - }, - { - "id": 254887, - "name": "CI/CD" - }, - { - "id": 254894, - "name": "Testing" - }, - { - "id": 254903, - "name": "Firebase" - } - ], - "sort": 3 - } - ], - "roomId": 49958, - "room": "Fountain Room", - "liveUrl": null, - "recordingUrl": null, - "status": "Accepted", - "isInformed": true, - "isConfirmed": true - }, - "index": 2 + "id": "736447", + "title": "You don't have to run it locally! How to run your emulators in the cloud.", + "description": "Probably every Android engineer has tried running Android Emulator on their laptops. Many companies have experience running Android Emulators in CI pipelines for testing. But what does it take to run a highly interactive emulator in the cloud? Why would one need to run an emulator in the cloud?\r\n\r\nAt Uber we know how to build Cloud Development Environments. And now we expanded into Android Emulator space. Providing our engineers with zero setup emulators. \r\n\r\nWe'll walk you through all the moving parts of the emulator setup in a dev environment that sparks joy. Share the challenges we had and opportunities we discovered.", + "startsAt": "2024-11-01T13:50:00", + "endsAt": "2024-11-01T14:30:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "695e56a6-62a8-496b-9082-8cc4dadec337", + "name": "Petras Vičiūnas" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264380, + "name": "Tooling" + }, + { + "id": 264394, + "name": "CI/CD" + } + ], + "sort": 4 + } + ], + "roomId": 49272, + "room": "Things", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true }, { - "id": 52283, - "name": "Sapphire Room", - "session": { - "id": "674849", - "title": "Personalizing Accessibility", - "description": "What should you do when users' accessibility needs conflict? For example, some users prefer more color contrast, while others require less contrast. To give a few examples, some might need labels to accompany icons, and for some, having too much text can make the app experience worse. Some love graphs and others have difficulty understanding what they represent and would need the same data in written format.\r\n\r\nOne way to tackle this problem is to allow users to personalize their app experience. In this talk, I will discuss different ways of personalization, including the opportunities and drawbacks. I will also give some actionable examples of how to let your users personalize their experience. After listening to this talk, you'll leave with actionable knowledge about providing a more accessible experience for your users via personalization.", - "startsAt": "2024-09-19T15:30:00", - "endsAt": "2024-09-19T16:10:00", - "isServiceSession": false, - "isPlenumSession": false, - "speakers": [ - { - "id": "6a7b0ee2-2d50-42b7-8225-1df145d255ea", - "name": "Eeva-Jonna Panula" - } - ], - "categories": [ - { - "id": 72054, - "name": "Level", - "categoryItems": [ - { - "id": 254879, - "name": "Intermediate" - } - ], - "sort": 0 - }, - { - "id": 72055, - "name": "Session format", - "categoryItems": [ - { - "id": 254882, - "name": "Session" - } - ], - "sort": 1 - }, - { - "id": 72056, - "name": "Tags", - "categoryItems": [ - { - "id": 254891, - "name": "Android" - }, - { - "id": 254902, - "name": "UI/UX" - } - ], - "sort": 3 - } - ], - "roomId": 52283, - "room": "Sapphire Room", - "liveUrl": null, - "recordingUrl": null, - "status": "Accepted", - "isInformed": true, - "isConfirmed": true - }, - "index": 3 - } - ] - }, - { - "slotStart": "16:10:00", - "rooms": [ + "id": "734218", + "title": "Why WhatsApp uses ListView", + "description": "Using outdated ListView on one of the most used screens screens sounds outrageous. Will talk about technical and organisational reasons why and how WhatsApp still uses ListView and what are the challenges preventing migration. ", + "startsAt": "2024-11-01T14:50:00", + "endsAt": "2024-11-01T15:30:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "e11a53fd-1cfb-4930-9dfa-42187e94d869", + "name": "Hadi Tok" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264360, + "name": "Soft Skills" + }, + { + "id": 264384, + "name": "Android" + } + ], + "sort": 4 + } + ], + "roomId": 49272, + "room": "Things", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "id": "731808", + "title": "Streamlining Permission Request in Jetpack Compose", + "description": "Managing Android permission requests often involve considerable boilerplate code, and while Jetpack Compose offers many advantages, it has not simplified this aspect. It can add complexity if not properly designed. This talk will demonstrate an efficient method for creating a reusable Android permission request flow with minimal boilerplate using Jetpack Compose. By the end of this session, you will learn how to implement a reusable permission request handler for single and multiple permissions. Additionally, you'll discover how to provide custom permission rationale messages and design a custom permission request UI with minimal boilerplates, enhancing developer experience and application usability.\r\n\r\nKey Takeaways\r\n1. Understanding Permission Management in Android: A quick overview of the challenges in handling permission requests within the context of Android development.\r\n\r\n2. Identifying Boilerplate in Permission Requests: Examination of the typical boilerplate code associated with permission requests in Jetpack Compose.\r\n\r\n3. Efficient Permission Handling: Step-by-step guide on creating a reusable permission request handler for single and multiple permissions.\r\n\r\n4. Customization Techniques: How to implement custom permission rationale messages and design custom UI components for permission requests.", + "startsAt": "2024-11-01T15:45:00", + "endsAt": "2024-11-01T16:25:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "3b95e79a-0e6b-4fcd-b44e-023fa3dfd7cd", + "name": "Mayowa Egbewunmi" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264358, + "name": "Jetpack Compose" + } + ], + "sort": 4 + } + ], + "roomId": 49272, + "room": "Things", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, { - "id": 49956, - "name": "Grand Ballroom 1", - "session": { - "id": "8feb94b1-f185-426d-84c2-42ba530dd2be", - "title": "Break", - "description": null, - "startsAt": "2024-09-19T16:10:00", - "endsAt": "2024-09-19T16:25:00", - "isServiceSession": true, - "isPlenumSession": true, - "speakers": [], - "categories": [], - "roomId": 49956, - "room": "Grand Ballroom 1", - "liveUrl": null, - "recordingUrl": null, - "status": null, - "isInformed": false, - "isConfirmed": false - }, - "index": 0 + "id": "734441", + "title": "A journey in Android's BLE world", + "description": "Working with BLE on Android could be overwhelming, there are a lot of OSS libraries to pick from, different permissions to be declared, and sometimes different behaviors depending on the Android version and device.\r\n\r\nThis talk aims to make order between what's available out there: we'll start from the basics of how BLE works, climbing the ladder and going more high-level examining tools and libraries using Kotlin features to simplify observing data and freeing up unused resources, including an exploration of latest JetPack library AndroidX Bluetooth.\r\n\r\nYou'll find real-life scenarios, examples, and strange issues you may encounter (along with even stranger fixes).\r\n\r\nWhether you plan to integrate a BLE device in your app, improve the existing code to be more expressive and use modern libraries, or even only scan for Bluetooth beacons, follow me on this journey in the BLE world.", + "startsAt": "2024-11-01T16:40:00", + "endsAt": "2024-11-01T17:20:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "8253d551-1437-4a3e-b4f4-56bf73373109", + "name": "Paolo Rotolo" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264359, + "name": "Kotlin" + }, + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264374, + "name": "API" + }, + { + "id": 264377, + "name": "Modern Android Development" + }, + { + "id": 264388, + "name": "Libraries" + } + ], + "sort": 4 + } + ], + "roomId": 49272, + "room": "Things", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true } - ] + ], + "hasOnlyPlenumSessions": false }, { - "slotStart": "16:25:00", - "rooms": [ + "id": 53981, + "name": "Stadia", + "sessions": [ { - "id": 49956, - "name": "Grand Ballroom 1", - "session": { - "id": "724064", - "title": "Writing your own Gradle Plugin: A Deep Dive", - "description": "Want to improve some aspect of your Gradle builds? Don't know how? \r\n\r\nIn this session, we'll talk about:\r\n* Configurations and why understanding them is important\r\n* The lifecycle of a Gradle build and how to architect your plugin around it\r\n* What a few well-known plugins do well and what we can learn from them\r\n\r\nWe'll also walk through an actual plugin I've written to solve a real problem.", - "startsAt": "2024-09-19T16:25:00", - "endsAt": "2024-09-19T17:05:00", - "isServiceSession": false, - "isPlenumSession": false, - "speakers": [ - { - "id": "903c7a65-63f0-4244-8f8c-7ab8f7acae75", - "name": "John Rodriguez" - } - ], - "categories": [ - { - "id": 72054, - "name": "Level", - "categoryItems": [ - { - "id": 254879, - "name": "Intermediate" - } - ], - "sort": 0 - }, - { - "id": 72055, - "name": "Session format", - "categoryItems": [ - { - "id": 254882, - "name": "Session" - } - ], - "sort": 1 - }, - { - "id": 72056, - "name": "Tags", - "categoryItems": [], - "sort": 3 - } - ], - "roomId": 49956, - "room": "Grand Ballroom 1", - "liveUrl": null, - "recordingUrl": null, - "status": "Accepted", - "isInformed": true, - "isConfirmed": true - }, - "index": 0 + "id": "720892", + "title": "Seamless mobile real-time communication with WebRTC", + "description": "The WebRTC project allows developers to build smooth voice and video communication solutions by facilitating the transmission of data between peers.\r\nDuring this talk, we will explore the details of the WebRTC project, including its design principles, functionalities, and how it transforms communications for many web and mobile apps. \r\nFinally, we will create a simple mobile application in Kotlin Multiplatform using WebRTC so you will want to start a business and become a billionaire. \r\n", + "startsAt": "2024-11-01T10:20:00", + "endsAt": "2024-11-01T11:00:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "4674e36f-50f8-4ffb-a486-679d730c759e", + "name": "Renaud Mathieu" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264359, + "name": "Kotlin" + }, + { + "id": 264364, + "name": "Compose" + }, + { + "id": 264388, + "name": "Libraries" + } + ], + "sort": 4 + } + ], + "roomId": 53981, + "room": "Stadia", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true }, { - "id": 49957, - "name": "Grand Ballroom 2", - "session": { - "id": "693921", - "title": "Navigation in a Multiplatform World: Choosing the Right Framework for your App", - "description": "Navigation in mobile, desktop, and web applications is such a fundamental part of how we structure our architecture. In order to both obtain functional clarity, and abstraction from platform level implementation.\r\n\r\nFor a long time, there have been options available specific to each platform, and even options part of the platform framework itself. Though it can be difficult to find the right option for platform-agnostic code, ensuring consistency. Some go one step further, providing an opinionated guide on how to architecture your application.\r\n\r\nIn this talk, I'll evaluate the options available, how they differ, and to what type of applications they are best suited. Including how to get started with them, and the best practice guidelines on how to get the most out of them, for your application.", - "startsAt": "2024-09-19T16:25:00", - "endsAt": "2024-09-19T17:05:00", - "isServiceSession": false, - "isPlenumSession": false, - "speakers": [ - { - "id": "10659767-356c-4cd5-ba9c-12cec7a3ce79", - "name": "Ash Davies" - } - ], - "categories": [ - { - "id": 72054, - "name": "Level", - "categoryItems": [ - { - "id": 254879, - "name": "Intermediate" - } - ], - "sort": 0 - }, - { - "id": 72055, - "name": "Session format", - "categoryItems": [ - { - "id": 254882, - "name": "Session" - } - ], - "sort": 1 - }, - { - "id": 72056, - "name": "Tags", - "categoryItems": [ - { - "id": 254886, - "name": "Tooling" - }, - { - "id": 254892, - "name": "Kotlin" - } - ], - "sort": 3 - } - ], - "roomId": 49957, - "room": "Grand Ballroom 2", - "liveUrl": null, - "recordingUrl": null, - "status": "Accepted", - "isInformed": true, - "isConfirmed": true - }, - "index": 1 + "id": "722874", + "title": "From realtime CameraX filters to General Purpose GPU computing in simple steps", + "description": "Did you ever think that that the computational complexity of image processing is comparable to that of AI training, and both tasks use GPUs?\r\n\r\nModern phones have powerful GPUs that are typically used for photo, graphics and image processing which naturally brings us to OpenGL and Vulkan C++ APIs.\r\n\r\nLuckily, on Android we have OpenGL Java bindings, so we don't need to dive into C++. And combined with the CameraX effects API, we can build advanced filters for the camera. What is more, mobile GPUs are also not limited to these types of tasks and can be used for general purpose computing, even the ones completely unrelated to graphics.\r\n\r\nIn this session I will show you how to set up and write your own shaders for real-time image processing with CameraX. I will also show you how to make a step forward and use shaders for general purpose GPU computing, so that you can take advantage of the GPU power.\r\n\r\nCome to this talk and learn how to harness the computing power of your phone's GPU!", + "startsAt": "2024-11-01T11:15:00", + "endsAt": "2024-11-01T11:55:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "892ec2dc-5b2e-45fb-9393-ff1407ebebe7", + "name": "Konstantin Zolotov" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264369, + "name": "Other" + }, + { + "id": 264384, + "name": "Android" + }, + { + "id": 264388, + "name": "Libraries" + } + ], + "sort": 4 + } + ], + "roomId": 53981, + "room": "Stadia", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true }, { - "id": 49958, - "name": "Fountain Room", - "session": { - "id": "725385", - "title": "Monetizing Your Side Project to $1k in Monthly Revenue and Beyond", - "description": "Only ~17% of apps reach $1k in monthly revenue. Learn best practices on crossing $1k MRR and beyond from personal experience building two profitable apps and advice from other successful app founders.", - "startsAt": "2024-09-19T16:25:00", - "endsAt": "2024-09-19T17:05:00", - "isServiceSession": false, - "isPlenumSession": false, - "speakers": [ - { - "id": "0e4f3abe-cc6c-409a-8f34-e346f23c0cc4", - "name": "Jeffrey Bunn" - } - ], - "categories": [ - { - "id": 72054, - "name": "Level", - "categoryItems": [ - { - "id": 254879, - "name": "Intermediate" - } - ], - "sort": 0 - }, - { - "id": 72055, - "name": "Session format", - "categoryItems": [ - { - "id": 254882, - "name": "Session" - } - ], - "sort": 1 - }, - { - "id": 72056, - "name": "Tags", - "categoryItems": [ - { - "id": 254888, - "name": "Cross-Platform" - }, - { - "id": 254891, - "name": "Android" - }, - { - "id": 254893, - "name": "Design" - }, - { - "id": 254902, - "name": "UI/UX" - }, - { - "id": 254907, - "name": "Flutter" - } - ], - "sort": 3 - } - ], - "roomId": 49958, - "room": "Fountain Room", - "liveUrl": null, - "recordingUrl": null, - "status": "Accepted", - "isInformed": true, - "isConfirmed": true - }, - "index": 2 + "id": "700492", + "title": "Ten things you heard about testing that might be wrong", + "description": "Testing became an essential part of Android development. Many conference talks have been given and even more best practices have been written. \r\n\r\nBut what if, as time evolved, some of the things we thought were true, changed?\r\n\r\nLet’s start questioning some of these in this talk:\r\n- Are flaky tests fixable?\r\n- Are mocks even harmful?\r\n- Is DI about testing?\r\n- Did we understand testing in isolation properly? \r\n- Is the test pyramid still valid?\r\n- Is Robolectric good or bad on Android?\r\n- And in times of AI, should we generate tests?\r\n\r\nCome and join my session to learn more!\r\n", + "startsAt": "2024-11-01T12:55:00", + "endsAt": "2024-11-01T13:35:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "4d3a31b1-61e5-4a26-9ca3-c9f30e3eaa08", + "name": "Danny Preussler" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264351, + "name": "Advanced" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264363, + "name": "Testing" + } + ], + "sort": 4 + } + ], + "roomId": 53981, + "room": "Stadia", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true }, { - "id": 52283, - "name": "Sapphire Room", - "session": { - "id": "735751", - "title": "Add Generative AI capabilities to your Android app", - "description": "Generative AI capabilities are coming on Android. Whether you want to run inference on-device to protect users privacy or use Gemini Pro’s advanced multimodal capabilities, there are multiple options to add GenAI capabilities to your Android app.\r\n\r\nIn this session we’ll review Google’s GenAI solutions for Android, how to integrate them to your application and some examples of successful integrations.", - "startsAt": "2024-09-19T16:25:00", - "endsAt": "2024-09-19T17:05:00", - "isServiceSession": false, - "isPlenumSession": false, - "speakers": [ - { - "id": "ccce0dd7-87af-4bc7-9ae0-3cc5fd9cba2a", - "name": "Terence Zhang" - } - ], - "categories": [ - { - "id": 72054, - "name": "Level", - "categoryItems": [ - { - "id": 254879, - "name": "Intermediate" - } - ], - "sort": 0 - }, - { - "id": 72055, - "name": "Session format", - "categoryItems": [ - { - "id": 254882, - "name": "Session" - } - ], - "sort": 1 - }, - { - "id": 72056, - "name": "Tags", - "categoryItems": [], - "sort": 3 - } - ], - "roomId": 52283, - "room": "Sapphire Room", - "liveUrl": null, - "recordingUrl": null, - "status": "Accepted", - "isInformed": true, - "isConfirmed": true - }, - "index": 3 - } - ] - }, - { - "slotStart": "17:05:00", - "rooms": [ + "id": "734664", + "title": "Cutting-Edge-to-Edge in Android 15: Using Previews and Testing in Jetpack Compose to Manage Insets.", + "description": "With the advent of Android 15, edge-to-edge design has become the default configuration. Consequently, applications must be capable of accommodating window insets, including the system status bar and navigation bar, as well as supporting drawing under display cutouts and other system UI elements. This presentation will address the most prevalent challenges encountered when supporting such a diverse range of UI configurations. Additionally, it will illustrate how to utilize Android previews and testing with Jetpack Compose to effectively navigate this complexity and guarantee an optimal user experience across all scenarios.", + "startsAt": "2024-11-01T13:50:00", + "endsAt": "2024-11-01T14:30:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "257fcb0c-cc84-4892-a1f1-54985071e0a6", + "name": "Timo Drick" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264358, + "name": "Jetpack Compose" + }, + { + "id": 264363, + "name": "Testing" + }, + { + "id": 264384, + "name": "Android" + } + ], + "sort": 4 + } + ], + "roomId": 53981, + "room": "Stadia", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, { - "id": 49956, - "name": "Grand Ballroom 1", - "session": { - "id": "96bdb210-9123-44e6-8b4a-f471dbf649ed", - "title": "Break", - "description": null, - "startsAt": "2024-09-19T17:05:00", - "endsAt": "2024-09-19T17:20:00", - "isServiceSession": true, - "isPlenumSession": true, - "speakers": [], - "categories": [], - "roomId": 49956, - "room": "Grand Ballroom 1", - "liveUrl": null, - "recordingUrl": null, - "status": null, - "isInformed": false, - "isConfirmed": false - }, - "index": 0 - } - ] - }, - { - "slotStart": "17:20:00", - "rooms": [ + "id": "741888", + "title": "Monetizing Your Side Project to $1k in Monthly Revenue and Beyond", + "description": "Only ~17% of apps reach $1k in monthly revenue. Learn best practices on crossing $1k MRR and beyond from personal experience building two profitable apps and advice from other successful app founders.", + "startsAt": "2024-11-01T14:50:00", + "endsAt": "2024-11-01T15:30:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "0e4f3abe-cc6c-409a-8f34-e346f23c0cc4", + "name": "Jeffrey Bunn" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264360, + "name": "Soft Skills" + }, + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264369, + "name": "Other" + }, + { + "id": 264381, + "name": "Cross-Platform" + } + ], + "sort": 4 + } + ], + "roomId": 53981, + "room": "Stadia", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, { - "id": 49956, - "name": "Grand Ballroom 1", - "session": { - "id": "719914", - "title": "Mobile Developer Productivity Panel", - "description": "The panelists will discuss developer productivity, developer experience, tools, etc topics for large scale mobile applications. The panel will start with an introduction of the tech/tooling stack of their current organizations then dive into topics like Gen AI, measurement/metrics,\r\nremote development, forward looking innovation, roadmap, IDE, Tooling, Build, CI/CD. Panelists TBD\r\n\r\nTopics\r\n\r\n- What had the biggest impact on mobile Developer Experience in the last 24 months? \r\n\r\n- Remote development: how do you approach development environment consistency? What were the DPE/DevEx results from their investment in remote development? \r\n\r\n- How are you using AI in your infrastructure? \r\n\r\n- What are the IDE plugins and toolings that had the most impact on developer productivity \r\n\r\n- How are you measuring Developer Productivity? \r\n\r\n- How do you balance velocity vs quality? \r\n", - "startsAt": "2024-09-19T17:20:00", - "endsAt": "2024-09-19T18:00:00", - "isServiceSession": false, - "isPlenumSession": false, - "speakers": [ - { - "id": "0983d15b-0efc-4d9a-918d-4021daee67ce", - "name": "Rooz SF" - }, - { - "id": "2c1f7fbb-3d9f-41fc-804a-9e1053e89256", - "name": "Kiki Chang" - }, - { - "id": "4a13d160-c8c3-4214-926f-24a5b15c78dd", - "name": "Jesse Wilson" - } - ], - "categories": [ - { - "id": 72054, - "name": "Level", - "categoryItems": [ - { - "id": 254879, - "name": "Intermediate" - } - ], - "sort": 0 - }, - { - "id": 72055, - "name": "Session format", - "categoryItems": [ - { - "id": 254885, - "name": "Panel Discussion" - } - ], - "sort": 1 - }, - { - "id": 72056, - "name": "Tags", - "categoryItems": [ - { - "id": 254886, - "name": "Tooling" - }, - { - "id": 254887, - "name": "CI/CD" - }, - { - "id": 254894, - "name": "Testing" - }, - { - "id": 254899, - "name": "Gradle" - }, - { - "id": 254901, - "name": "Android Studio" - } - ], - "sort": 3 - } - ], - "roomId": 49956, - "room": "Grand Ballroom 1", - "liveUrl": null, - "recordingUrl": null, - "status": "Accepted", - "isInformed": true, - "isConfirmed": true - }, - "index": 0 + "id": "735413", + "title": "Let's build a performance measuring tool from scratch", + "description": "Did you know you can measure the performance of production apps? Android is based on Linux, so that gives us a lot of power!\r\nThrough live-coding, let's have fun exploring system files, low-level events and the Android source code to see how we can gather metrics (FPS, CPU, RAM) on your favourite apps!\r\nYou'll gain more insights on how Android work under the hood and why measuring performance can be crucial but complex.", + "startsAt": "2024-11-01T15:45:00", + "endsAt": "2024-11-01T16:25:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "ae4dc258-34a6-462c-b778-807da7d25de4", + "name": "Alexandre Moureaux" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264351, + "name": "Advanced" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264380, + "name": "Tooling" + } + ], + "sort": 4 + } + ], + "roomId": 53981, + "room": "Stadia", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true }, { - "id": 49957, - "name": "Grand Ballroom 2", - "session": { - "id": "721053", - "title": "When sharing isn’t caring: Using platform-specific code in Kotlin Multiplatform", - "description": "Sharing code across platforms is a wonderful superpower. But sometimes, sharing 100% of your codebase isn’t the goal. Maybe you’re migrating existing apps to multiplatform, maybe you have platform-specific libraries or APIs you want to interact with, or maybe your platforms need to do slightly different things.\r\n\r\nThe strength of Kotlin on every platform is not just sharing code, but also interop with the platform’s unique APIs. When building multiplatform apps, it pays to think not only about what code can be shared, but also about what code is better not shared, and how to move between them.\r\n\r\nUsing examples drawn from real-world projects, we’ll look at different strategies for architecting the shared and not-shared parts of your codebase, so you’re better prepared to handle those times when a platform-specific solution is the best one.", - "startsAt": "2024-09-19T17:20:00", - "endsAt": "2024-09-19T18:00:00", - "isServiceSession": false, - "isPlenumSession": false, - "speakers": [ - { - "id": "7a1d47f2-dfd1-4af1-b097-5c415f9b29c3", - "name": "Russell Wolf" - } - ], - "categories": [ - { - "id": 72054, - "name": "Level", - "categoryItems": [ - { - "id": 254879, - "name": "Intermediate" - } - ], - "sort": 0 - }, - { - "id": 72055, - "name": "Session format", - "categoryItems": [ - { - "id": 254882, - "name": "Session" - } - ], - "sort": 1 - }, - { - "id": 72056, - "name": "Tags", - "categoryItems": [ - { - "id": 254888, - "name": "Cross-Platform" - }, - { - "id": 254892, - "name": "Kotlin" - } - ], - "sort": 3 - } - ], - "roomId": 49957, - "room": "Grand Ballroom 2", - "liveUrl": null, - "recordingUrl": null, - "status": "Accepted", - "isInformed": true, - "isConfirmed": true - }, - "index": 1 + "id": "706060", + "title": "Overcoming Unsecurities in WebViews", + "description": "Is your relationship with WebViews healthy? Sometimes you can't avoid the need to display web content in your app. It can be a functionality that you need to release quickly and it's already implemented by web devs in your team. It can be just a Terms and Conditions page you need to show. Often the reason for putting these into WebViews is that the latest version must be displayed without requiring an app update.\r\n\r\nSo web content tends to make its way into many apps. It's not obvious that by adding a single WebView, you can open up your app for abuse by malicious actors. Google made steady progress in making WebViews more secure by default but often you can't stop supporting those old, vulnerable OS versions. Ultimately it's your responsibility to secure your WebViews and the default settings are not always right. This talk aims to help with that while also highlighting security issues that lurk in those seemingly simple yet quite complex APIs.\r\n\r\nYou would learn the importance of always sanitizing inputs and restricting capabilities to what is actually needed. If you want to take one piece of advice from the talk, you should use more modern APIs like Custom Tabs, JavaScript Engine, or AndroidX's WebView variant.", + "startsAt": "2024-11-01T16:40:00", + "endsAt": "2024-11-01T17:20:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "6b808c1f-836d-4349-9585-a89355dfb8d0", + "name": "Balázs Gerlei" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264372, + "name": "Security" + } + ], + "sort": 4 + } + ], + "roomId": 53981, + "room": "Stadia", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true } - ] + ], + "hasOnlyPlenumSessions": false }, { - "slotStart": "18:00:00", - "rooms": [ - { - "id": 49956, - "name": "Grand Ballroom 1", - "session": { - "id": "679855eb-bf43-49eb-906a-2a109955a5eb", - "title": "Party", - "description": null, - "startsAt": "2024-09-19T18:00:00", - "endsAt": "2024-09-19T19:40:00", - "isServiceSession": true, - "isPlenumSession": false, - "speakers": [], - "categories": [], - "roomId": 49956, - "room": "Grand Ballroom 1", - "liveUrl": null, - "recordingUrl": null, - "status": null, - "isInformed": false, - "isConfirmed": false - }, - "index": 0 - } - ] - } - ] - }, - { - "date": "2024-09-20T00:00:00", - "isDefault": false, - "rooms": [ - { - "id": 49956, - "name": "Grand Ballroom 1", + "id": 53982, + "name": "Nest", "sessions": [ { - "id": "56875a23-df88-4260-9b03-d792d545de07", - "title": "Registration & Check-In", - "description": null, - "startsAt": "2024-09-20T08:20:00", - "endsAt": "2024-09-20T09:20:00", - "isServiceSession": true, - "isPlenumSession": true, - "speakers": [], - "categories": [], - "roomId": 49956, - "room": "Grand Ballroom 1", + "id": "731303", + "title": "Embracing 16 KB Page Sizes in Android - Boosting Performance", + "description": "Enhance app performance by adopting 16 KB page sizes introduced in Android 15, mandatory for Google Play uploads starting in 2025. In this session, I will cover the why and how behind 16 KB page size modifications through four parts: (1) Performance Boosts: Speed up app boot and launch times with 16 KB page size, (2) Impact Assessment: Evaluate how the 16 KB page size will affect your app, (3) Code Alignment: Align your code and binaries with the 16 KB page size requirement, and (4) Testing Strategies: Test and ensure your app is compliant with specific techniques. Get ahead of the curve by learning to adapt your app to the 16 KB page size requirement, ensuring superior performance and compliance ahead of the 2025 mandate.", + "startsAt": "2024-11-01T10:20:00", + "endsAt": "2024-11-01T11:00:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "84335047-a7cd-437e-986f-1d6b6df31072", + "name": "Chrystian Vieyra Cortes" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264380, + "name": "Tooling" + } + ], + "sort": 4 + } + ], + "roomId": 53982, + "room": "Nest", "liveUrl": null, "recordingUrl": null, - "status": null, - "isInformed": false, - "isConfirmed": false + "status": "Accepted", + "isInformed": true, + "isConfirmed": true }, { - "id": "696196", - "title": "Deep Dive into the Compose Compiler", - "description": "Have you ever wondered how the slot table is implemented in Compose? How are groups generated? What's the magic behind skipping, and how can you peek inside a slot table? The Slot table implementation was updated recently for performance. This talk takes a deep dive into the Jetpack Compose compiler internals, with a special focus on answering these questions and exploring the implementation details of the slot table. We'll go beyond the basics, uncovering how the compiler is structured and tested. This knowledge will empower you to understand, contribute to, or even build your own tools on top of it. Whether you're a curious developer or aspiring plugin contributor, get ready to fully understand the Jetpack Compose Compiler.", - "startsAt": "2024-09-20T09:20:00", - "endsAt": "2024-09-20T10:00:00", + "id": "711918", + "title": "Personalizing Accessibility", + "description": "What should you do when users' accessibility needs conflict? For example, some users prefer more color contrast, while others require less contrast. To give a few examples, some might need labels to accompany icons, and for some, having too much text can make the app experience worse. Some love graphs and others have difficulty understanding what they represent and would need the same data in written format.\r\n\r\nOne way to tackle this problem is to allow users to personalize their app experience. In this talk, I will discuss different ways of personalization, including the opportunities and drawbacks. I will also give some actionable examples of how to let your users personalize their experience. After listening to this talk, you'll leave with actionable knowledge about providing a more accessible experience for your users via personalization.", + "startsAt": "2024-11-01T11:15:00", + "endsAt": "2024-11-01T11:55:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "a79f3682-df5c-40e4-8aa8-1b6eaa7bdeec", - "name": "Mohit Sarveiya" + "id": "6a7b0ee2-2d50-42b7-8225-1df145d255ea", + "name": "Eeva-Jonna Panula" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254880, - "name": "Advanced" + "id": 264350, + "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254886, - "name": "Tooling" - }, - { - "id": 254891, - "name": "Android" - }, - { - "id": 254892, - "name": "Kotlin" + "id": 264358, + "name": "Jetpack Compose" }, { - "id": 254894, - "name": "Testing" + "id": 264365, + "name": "Accessibility" }, { - "id": 254897, - "name": "Libraries" + "id": 264368, + "name": "Techniques & Guides" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 53982, + "room": "Nest", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -4662,78 +10786,80 @@ "isConfirmed": true }, { - "id": "870bcf3a-3c64-40aa-a3a0-6039030033b1", - "title": "Break", - "description": null, - "startsAt": "2024-09-20T10:00:00", - "endsAt": "2024-09-20T10:20:00", - "isServiceSession": true, - "isPlenumSession": true, - "speakers": [], - "categories": [], - "roomId": 49956, - "room": "Grand Ballroom 1", - "liveUrl": null, - "recordingUrl": null, - "status": null, - "isInformed": false, - "isConfirmed": false - }, - { - "id": "719280", - "title": "Declarative APIs for Declarative UIs: Designing Media Friendly Jetpack Compose Components", - "description": "As we consume more content on our devices, it's more important than ever to provide delightful user experiences for media across different navigation destinations, panes within those destinations, and devices and form factors those panes span.\r\n\r\nThis talk will:\r\n\r\nOutline clear selection criteria for what APIs to use in the data and UI layers when building an image serving pipeline in a Jetpack Compose app, along with clear examples of the effect of these choices.\r\n\r\nUnderscore the importance of the kinds of architectural logic in the UI layer (UI logic and business logic) in relation to producing and displaying rich media (pictures and videos) in apps in Jetpack Compose.\r\n\r\nWalk through common user experiences that can be taken to the next level of continuity and immersion with Jetpack Compose by following the principles previously outlined. Examples include shared element transitions and its permutations in list - detail flows across various screen sizes and form factors.", - "startsAt": "2024-09-20T10:20:00", - "endsAt": "2024-09-20T11:00:00", + "id": "735538", + "title": "Unblocking The Main Thread: Solving ANRs and Frozen Frames", + "description": "In the realm of Android development, the main thread is our stage, but too often, it becomes a battleground where performance issues arise, leading to ANRs, frozen frames, and sluggish Uls. As we strive for excellence in user experience, understanding and optimizing the main thread becomes essential to prevent these common performance bottlenecks.\r\n\r\nWe have strategies and best practices for keeping the main thread uncluttered. We'll examine the root causes of performance issues and techniques for monitoring and improving main thread health as well as app performance.\r\n\r\nIn this talk, participants will walk away with practical knowledge on enhancing app performance by mastering the main thread. We'll share proven approaches to eliminate real-life ANRs and frozen frames to build apps that deliver butter smooth experience.", + "startsAt": "2024-11-01T12:55:00", + "endsAt": "2024-11-01T13:35:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "0990c055-9a74-45f9-9f5a-10e2d9196649", - "name": "Tunji Dahunsi" + "id": "9a7f5add-ce7a-49a3-ab3d-f3c4484453e8", + "name": "Sinan Kozak" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, - "name": "Intermediate" + "id": 264351, + "name": "Advanced" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254891, + "id": 264358, + "name": "Jetpack Compose" + }, + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264377, + "name": "Modern Android Development" + }, + { + "id": 264380, + "name": "Tooling" + }, + { + "id": 264384, "name": "Android" }, { - "id": 254902, - "name": "UI/UX" + "id": 264379, + "name": "Android Studio" + }, + { + "id": 264391, + "name": "Firebase" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 53982, + "room": "Nest", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -4741,90 +10867,64 @@ "isConfirmed": true }, { - "id": "44c6e8b1-ee16-454a-814d-fbc46826264a", - "title": "Break", - "description": null, - "startsAt": "2024-09-20T11:00:00", - "endsAt": "2024-09-20T11:15:00", - "isServiceSession": true, - "isPlenumSession": true, - "speakers": [], - "categories": [], - "roomId": 49956, - "room": "Grand Ballroom 1", - "liveUrl": null, - "recordingUrl": null, - "status": null, - "isInformed": false, - "isConfirmed": false - }, - { - "id": "722122", - "title": "Modern Paging at Scale: StoreX + Compose", - "description": "Pagination in large-scale mobile applications presents unique challenges. This talk, presented by engineers from Uber and TikTok, introduces StoreX Paging, the Mobile Native Foundation’s KMP solution.\r\n\r\nWe’ll dive deep into StoreX Paging’s architecture, built on unidirectional data flow, Store, Molecule, and Compose. We’ll discuss the results of our preliminary performance benchmarks. We’ll explore new concepts like an “updating item” for independent updates and an “operation pipeline” for on-the-fly data transformations, setting StoreX apart from traditional paging libraries.\r\n\r\nThe talk will cover StoreX Paging’s core APIs and customization points, including launch effects, middleware, side effects, and adaptive fetching strategies. We’ll share implementation details of our default fetching strategy and Compose Runtime integration, demonstrating how we’ve optimized memory management for large datasets. Finally, we’ll discuss performance benchmarking approaches and real-world applications of StoreX Paging at TikTok.", - "startsAt": "2024-09-20T11:15:00", - "endsAt": "2024-09-20T11:55:00", + "id": "704275", + "title": "The state of code coverage for Kotlin", + "description": "Nowadays it’s not anymore a question whether we want to write tests or not. Writing unit tests is not “nice-to-have” it’s an essential part of our everyday job. While that’s already a great step forward, how can we be sure our tests are actually testing something. To check this we all use code coverage tools.\r\n\r\nIn this presentation you will learn how code coverage for Kotlin works, which tools we can use and what are the challenges and limitations of various approaches. You will learn the difference between line, instruction and condition coverage and how to read and interpret coverage results in Kotlin.\r\n\r\nIn the last part of this presentation we will cover the future for Kotlin Code Coverage, what is missing and what can be improved in the future.", + "startsAt": "2024-11-01T13:50:00", + "endsAt": "2024-11-01T14:30:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "370405c2-9e0a-4dca-bcdd-fa300cf4cc2f", - "name": "Matt Ramotar" + "id": "eeb25beb-5d37-4fb7-acac-170357a1d89b", + "name": "Marharyta Nedzelska" }, { - "id": "03c63012-49c4-44eb-af96-0f5360b0d187", - "name": "Ishan Khanna" + "id": "d2ddc9e3-35b6-44a9-8daa-144d89cabaff", + "name": "Evgeny Mandrikov" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254880, - "name": "Advanced" + "id": 264350, + "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254888, - "name": "Cross-Platform" - }, - { - "id": 254892, + "id": 264359, "name": "Kotlin" }, { - "id": 254895, - "name": "Coroutines" - }, - { - "id": 254897, - "name": "Libraries" + "id": 264363, + "name": "Testing" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 53982, + "room": "Nest", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -4832,82 +10932,60 @@ "isConfirmed": true }, { - "id": "93a2c0f8-c300-4025-8ceb-a5ff4773177a", - "title": "Break", - "description": null, - "startsAt": "2024-09-20T11:55:00", - "endsAt": "2024-09-20T12:10:00", - "isServiceSession": true, - "isPlenumSession": true, - "speakers": [], - "categories": [], - "roomId": 49956, - "room": "Grand Ballroom 1", - "liveUrl": null, - "recordingUrl": null, - "status": null, - "isInformed": false, - "isConfirmed": false - }, - { - "id": "720754", - "title": "Building Modern Responsive Widgets with Jetpack Glance", - "description": "In this lightning talk, we’ll explore how to get started with building responsive widgets using Jetpack Glance, a modern toolkit designed to simplify and enhance the widget development experience on Android. We’ll discuss the key differences between Jetpack Glance and RemoteViews, providing a clear pathway for migrating existing widgets to this new framework. Learn how to leverage the strengths of both Jetpack Glance and RemoteViews simultaneously, ensuring a smooth transition and backward compatibility. Additionally, we'll cover best practices for testing your widgets to ensure they perform flawlessly on a wide range of devices. Join us to discover how Jetpack Glance can revolutionize your approach to building widgets on Android.", - "startsAt": "2024-09-20T12:10:00", - "endsAt": "2024-09-20T12:30:00", + "id": "719034", + "title": "Navigation in a Multiplatform World: Choosing the Right Framework for your App", + "description": "Navigation in mobile, desktop, and web applications is such a fundamental part of how we structure our architecture. In order to both obtain functional clarity, and abstraction from platform level implementation.\r\n\r\nFor a long time, there have been options available specific to each platform, and even options part of the platform framework itself. Though it can be difficult to find the right option for platform-agnostic code, ensuring consistency. Some go one step further, providing an opinionated guide on how to architecture your application.\r\n\r\nIn this talk, I'll evaluate the options available, how they differ, and to what type of applications they are best suited. Including how to get started with them, and the best practice guidelines on how to get the most out of them, for your application.", + "startsAt": "2024-11-01T14:50:00", + "endsAt": "2024-11-01T15:30:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "910f395b-9d2b-4f7d-8ab4-c4008bd9f0c4", - "name": "Jonathan Petit-Frere" + "id": "10659767-356c-4cd5-ba9c-12cec7a3ce79", + "name": "Ash Davies" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254878, - "name": "Introductory and overview" + "id": 264351, + "name": "Advanced" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254881, - "name": "Lightning talk" + "id": 264354, + "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254891, - "name": "Android" - }, - { - "id": 254892, + "id": 264359, "name": "Kotlin" }, { - "id": 254897, - "name": "Libraries" + "id": 264380, + "name": "Tooling" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 53982, + "room": "Nest", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -4915,69 +10993,68 @@ "isConfirmed": true }, { - "id": "f48d711a-2db1-44c1-9dcc-7561744354f8", - "title": "Lunch", - "description": null, - "startsAt": "2024-09-20T12:30:00", - "endsAt": "2024-09-20T13:40:00", - "isServiceSession": true, - "isPlenumSession": true, - "speakers": [], - "categories": [], - "roomId": 49956, - "room": "Grand Ballroom 1", - "liveUrl": null, - "recordingUrl": null, - "status": null, - "isInformed": false, - "isConfirmed": false - }, - { - "id": "706390", - "title": "Building a performant and privacy-conscious screen capture library for Compose", - "description": "User feedback and crash reports often fall short in providing a complete understanding of user behavior and bug causes. Supplementing these reports with a series of screen captures depicting the user journey can prove invaluable for any comprehensive analysis.\r\n\r\nLearn about a novel approach for implementing a screen capture library that is safe to run in production:\r\n✅ Does not impact app responsiveness\r\n✅ Requires minimal disk and network usage\r\n✅ Respects user privacy\r\n\r\nEven though this is reasonably trivial to do for standard Android views, Jetpack Compose introduces a unique set of challenges for external libraries to efficiently observe the view hierarchy and react to recomposition changes. Join us as we dig deep into the strategies used to overcome these obstacles in this session.", - "startsAt": "2024-09-20T13:40:00", - "endsAt": "2024-09-20T14:20:00", + "id": "709201", + "title": "Passwordless Future !!", + "description": "Passwords: no one likes them.\r\n\r\nWith so many requirements—capital letters, numbers, symbols—and the challenge of remembering a strong one, passwords often become more of a hassle than a security measure. Even the most complex passwords can be vulnerable to hackers who can guess, steal, or trick you into revealing them.\r\n\r\nThankfully, a better solution exists, which we will explore in today’s session: Passkeys.\r\n\r\nWhat You'll Learn:\r\n- An introduction to Passkeys and the primary reasons for their implementation.\r\n- Integration of Passkeys and demos into Android apps using the credential API.\r\n- How users can sign in to apps and websites using biometric sensors (fingerprint or facial recognition), PINs, or patterns, creating a seamless sign-in experience that eliminates the need for usernames or passwords.\r\n- Best practices for implementing Passkeys in your applications to maximize both security and user convenience.\r\n- Case studies and examples of successful Passkey integration in real-world applications.\r\n\r\nTarget Audience:\r\nThis talk is ideal for mobile developers of all levels who are interested in:\r\n- Smoothing the login experience for their users across various platforms.\r\n- Enhancing security for their apps.\r\n- Staying ahead with modern authentication methods to improve user retention and satisfaction.", + "startsAt": "2024-11-01T15:45:00", + "endsAt": "2024-11-01T16:25:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "7d34e53f-e477-4218-9f03-cc372425ac0e", - "name": "Miguel Juarez Lopez" + "id": "0037b354-6bd4-46e3-b1e6-d84916eea0d6", + "name": "Ayushi Gupta" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [], - "sort": 3 + "categoryItems": [ + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264377, + "name": "Modern Android Development" + }, + { + "id": 264384, + "name": "Android" + }, + { + "id": 264385, + "name": "Design" + } + ], + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 53982, + "room": "Nest", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -4985,82 +11062,76 @@ "isConfirmed": true }, { - "id": "a1c70ab9-f9dd-4fd9-bbae-06cbf0320e3a", - "title": "Break", + "id": "2823786d-8670-4816-801e-9579b16c87cc", + "title": "Coming Soon!", "description": null, - "startsAt": "2024-09-20T14:20:00", - "endsAt": "2024-09-20T14:35:00", + "startsAt": "2024-11-01T16:40:00", + "endsAt": "2024-11-01T17:20:00", "isServiceSession": true, - "isPlenumSession": true, + "isPlenumSession": false, "speakers": [], "categories": [], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 53982, + "room": "Nest", "liveUrl": null, "recordingUrl": null, "status": null, "isInformed": false, "isConfirmed": false - }, + } + ], + "hasOnlyPlenumSessions": false + }, + { + "id": 54703, + "name": "Chromecast", + "sessions": [ { - "id": "725067", - "title": "Cross-platform Animations with Rive", - "description": "Learn how Duolingo builds cross platform animated features with Rive. We'll introduce Rive, some of its applications across Duolingo for Android, and how to use Rive - including Compose interaction!", - "startsAt": "2024-09-20T14:35:00", - "endsAt": "2024-09-20T14:55:00", + "id": "757520", + "title": "Roundtable: Keeping Up With Android – How to Stay Relevant", + "description": "\r\nIn the fast-paced world of Android development, staying current and continually honing your skills is essential for career growth and relevance. With constant advancements, new tools, libraries and APIs emerging…it can be easy to feel overwhelmed, have FOMO and feel like you are being left behind. In this roundtable we’ll discuss:\r\n - How do you prioritize what new technologies or trends to focus on?\r\n - What are some effective strategies or habits you use to continually hone your skills while balancing a busy work schedule?\r\n - How do you assess whether a new technology is worth investing time and energy into learning?\r\n - Can you share any resources, communities, or platforms that have been particularly helpful in staying up to date?\r\n - How do you prevent burnout?\r\n", + "startsAt": "2024-11-01T10:20:00", + "endsAt": "2024-11-01T11:00:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "8d1c299e-adc3-4c21-a461-5fbd43cba26e", - "name": "Judy Lin" + "id": "b849afbd-1240-40e1-82ea-5660d3dca93b", + "name": "Neil Hutchison" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254878, + "id": 264349, "name": "Introductory and overview" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254881, - "name": "Lightning talk" + "id": 303052, + "name": "Roundtable Discussion" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [ - { - "id": 254888, - "name": "Cross-Platform" - }, - { - "id": 254897, - "name": "Libraries" - }, - { - "id": 254902, - "name": "UI/UX" - } - ], - "sort": 3 + "categoryItems": [], + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 54703, + "room": "Chromecast", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -5068,78 +11139,51 @@ "isConfirmed": true }, { - "id": "76768ccf-becd-41f5-8034-2be3145f839a", - "title": "Break", - "description": null, - "startsAt": "2024-09-20T14:55:00", - "endsAt": "2024-09-20T15:25:00", - "isServiceSession": true, - "isPlenumSession": true, - "speakers": [], - "categories": [], - "roomId": 49956, - "room": "Grand Ballroom 1", - "liveUrl": null, - "recordingUrl": null, - "status": null, - "isInformed": false, - "isConfirmed": false - }, - { - "id": "722149", - "title": "Building a Compose-idiomatic CameraX Viewfinder: A Deep Dive", - "description": "The CameraX library offers powerful tools for building camera features in Android apps, but its integration with Jetpack Compose can be challenging. In this session we'll retrace our steps in creating a Compose-idiomatic Composable for the CameraX Viewfinder.\r\n\r\n- CameraX already has a view based PreviewView, we'll talk about the limitations of wrapping it with AndroidView.\r\n\r\n- Discuss the benefits of a Compose-first approach for seamless UI integration, state management, and a more natural development experience.\r\n\r\n- What it means to make a Compose idiomatic Composable\r\n\r\n- Dive into the complexities of aligning the Compose coordinate space with the CameraX coordinate space using the CoordinateTransformer", - "startsAt": "2024-09-20T15:25:00", - "endsAt": "2024-09-20T16:05:00", + "id": "760569", + "title": "Roundtable: KMP & CMP - Yes we can!...but....", + "description": "KMP with native UI and KMP with CMP are both amazing technically. However, there is no guidance for how these technologies should be applied to production situations. All new tech goes through a maturing phase.\r\n\r\nJoin this roundtable to discuss the promise and pitfalls of KMP and CMP and how the community can deliver on the amazing potential.", + "startsAt": "2024-11-01T11:15:00", + "endsAt": "2024-11-01T11:55:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "74839782-d3e1-4b61-9fdc-6b1507a46012", - "name": "Yasith Vidanaarachchi" + "id": "84a7e91b-e090-4d57-9eed-f3b9f277dc95", + "name": "Kevin Galligan" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254880, + "id": 264351, "name": "Advanced" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 303052, + "name": "Roundtable Discussion" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [ - { - "id": 254891, - "name": "Android" - }, - { - "id": 254892, - "name": "Kotlin" - } - ], - "sort": 3 + "categoryItems": [], + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 54703, + "room": "Chromecast", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -5147,17 +11191,71 @@ "isConfirmed": true }, { - "id": "fe829dc7-2f0c-4007-ba3b-3730c72ce533", - "title": "Break", - "description": null, - "startsAt": "2024-09-20T16:05:00", - "endsAt": "2024-09-20T16:20:00", + "id": "74a094cd-2f41-4906-8427-7c720694b385", + "title": "T3 Engineering Leadership Summit (Separate Ticket Required)", + "description": "https://www.t3-summit.com/t3-london", + "startsAt": "2024-11-01T12:55:00", + "endsAt": "2024-11-01T13:35:00", "isServiceSession": true, - "isPlenumSession": true, + "isPlenumSession": false, + "speakers": [], + "categories": [], + "roomId": 54703, + "room": "Chromecast", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false + }, + { + "id": "00e42524-0d24-448a-b3e6-8dc57352c3d7", + "title": "T3 Engineering Leadership Summit (Separate Ticket Required)", + "description": "https://www.t3-summit.com/t3-london", + "startsAt": "2024-11-01T13:50:00", + "endsAt": "2024-11-01T14:30:00", + "isServiceSession": true, + "isPlenumSession": false, + "speakers": [], + "categories": [], + "roomId": 54703, + "room": "Chromecast", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false + }, + { + "id": "f431dc83-3136-4892-8c38-b289aac3710f", + "title": "T3 Engineering Leadership Summit (Separate Ticket Required)", + "description": "https://www.t3-summit.com/t3-london", + "startsAt": "2024-11-01T14:50:00", + "endsAt": "2024-11-01T15:30:00", + "isServiceSession": true, + "isPlenumSession": false, + "speakers": [], + "categories": [], + "roomId": 54703, + "room": "Chromecast", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false + }, + { + "id": "e4ce5c39-ca56-4b02-854f-ad4c89ea88da", + "title": "T3 Engineering Leadership Summit (Separate Ticket Required)", + "description": "https://www.t3-summit.com/t3-london", + "startsAt": "2024-11-01T15:45:00", + "endsAt": "2024-11-01T16:25:00", + "isServiceSession": true, + "isPlenumSession": false, "speakers": [], "categories": [], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 54703, + "room": "Chromecast", "liveUrl": null, "recordingUrl": null, "status": null, @@ -5165,132 +11263,168 @@ "isConfirmed": false }, { - "id": "716782", - "title": "Lost in the Weeds - Exploring Navigation Libraries for Compose", - "description": "One of the most interesting and confusing parts of apps today is navigation. There seems to be so many different ways to go about it: Is it a side effect of your UI layer, is it modeled in the state somehow? Also where do transitions and animations fit in? \r\n\r\nThis fact hasn't changed for Compose-first apps, and I REALLY wanna know the best way to add navigation into my apps.\r\n\r\nIn this talk we'll explore the concept navigation in detail and build our mental model of what navigation in compose is. Then we'll explore three libraries that try and solve navigation in very different ways:\r\n\r\n- Jetpack Navigation\r\n- Appyx\r\n- Circuit\r\n\r\nBy the end, you will be equipped with the knowledge to create the best and most compelling navigation experiences for your own apps.", - "startsAt": "2024-09-20T16:20:00", - "endsAt": "2024-09-20T17:00:00", + "id": "4e3e8d41-d83c-4f91-8742-bf75d4b54436", + "title": "T3 Engineering Leadership Summit (Separate Ticket Required)", + "description": "https://www.t3-summit.com/t3-london", + "startsAt": "2024-11-01T16:40:00", + "endsAt": "2024-11-01T17:20:00", + "isServiceSession": true, + "isPlenumSession": false, + "speakers": [], + "categories": [], + "roomId": 54703, + "room": "Chromecast", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false + } + ], + "hasOnlyPlenumSessions": false + }, + { + "id": 54706, + "name": "Ask Android", + "sessions": [ + { + "id": "764372", + "title": "Ask Android! - Gen AI, Media, Adaptive apps on all form factors", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T10:00:00", + "endsAt": "2024-11-01T10:20:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "7eca8832-05ec-44c0-b8cd-f8aa72fcf1a3", - "name": "Rikin Marfatia" + "id": "e2ad2515-5292-4deb-8ac6-6c7ea5be1543", + "name": "Rob Orgiu" + }, + { + "id": "1c163a41-865b-4915-b032-ef4942e2f47c", + "name": "Kristina Simakova" + }, + { + "id": "837dd36a-5782-49cc-8da5-3f7fc7e4da8a", + "name": "Kateryna Semenova" + }, + { + "id": "ef1c33eb-89e9-49f6-9abc-da8140988097", + "name": "Alex Vanyo" + }, + { + "id": "56b04326-604d-4140-b159-f93574c86ccd", + "name": "Ran Nachmany" + }, + { + "id": "c83dc04e-7a0a-4cbc-9d73-10d08f18a68b", + "name": "Miguel Montemayor" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], - "sort": 0 - }, - { - "id": 72055, - "name": "Session format", - "categoryItems": [ - { - "id": 254882, - "name": "Session" - } - ], - "sort": 1 - }, - { - "id": 72056, - "name": "Tags", - "categoryItems": [ - { - "id": 254891, - "name": "Android" - }, - { - "id": 254892, - "name": "Kotlin" - }, + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ { - "id": 254893, - "name": "Design" + "id": 306233, + "name": "Office Hours" } ], - "sort": 3 + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 54706, + "room": "Ask Android", "liveUrl": null, "recordingUrl": null, "status": "Accepted", "isInformed": true, "isConfirmed": true - } - ], - "hasOnlyPlenumSessions": false - }, - { - "id": 49957, - "name": "Grand Ballroom 2", - "sessions": [ + }, { - "id": "721860", - "title": "Building an ML-powered Android Livestreaming App", - "description": "This presentation explores the application of computer vision and machine learning models for real-time video and audio processing. We'll demonstrate how this technology can enable the creation of a whole new category of live-streaming applications. \r\n\r\nDeveloping a video conferencing application has historically been fairly complex. We will start with a brief overview of the Livekit open-source APIs, showcasing how to build a simple and intuitive video streaming Android application. \r\n\r\nNext, we will explore integrating various ML-powered agents into the experience. We will also illustrate how to use reactive programming techniques to create easily understandable and modifiable multi-stage processing pipelines.\r\n\r\nLooking forward to exploring this exciting and innovative topic with you!", - "startsAt": "2024-09-20T09:20:00", - "endsAt": "2024-09-20T10:00:00", + "id": "764376", + "title": "Ask Android! - Gen AI, Media, Adaptive apps on all form factors", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T10:20:00", + "endsAt": "2024-11-01T11:00:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "878ec0bb-f4d7-4b83-a9af-ff6e359a35dc", - "name": "Etienne Caron" + "id": "e2ad2515-5292-4deb-8ac6-6c7ea5be1543", + "name": "Rob Orgiu" + }, + { + "id": "f55e8e03-a341-4c8a-b4fc-a7e97f82db07", + "name": "Xiaodao Wu" + }, + { + "id": "1c163a41-865b-4915-b032-ef4942e2f47c", + "name": "Kristina Simakova" + }, + { + "id": "8b706c47-edbc-41e3-af85-3328b4134e57", + "name": "Ben Sagmoe" + }, + { + "id": "837dd36a-5782-49cc-8da5-3f7fc7e4da8a", + "name": "Kateryna Semenova" + }, + { + "id": "d7f1c9d9-d537-4240-864e-ba626457f534", + "name": "Satish Shende" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 306233, + "name": "Office Hours" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [ - { - "id": 254889, - "name": "AI/ML" - }, - { - "id": 254891, - "name": "Android" - } - ], - "sort": 3 + "categoryItems": [], + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 54706, + "room": "Ask Android", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -5298,56 +11432,67 @@ "isConfirmed": true }, { - "id": "721825", - "title": "Advancing Beyond Staff: A Mobile Engineer’s Journey in Big Tech", - "description": "Achieving promotion as a software engineer in big tech is a rare feat, with ascension to staff level and beyond being even more elusive. While many engineers aspire to reach these higher echelons, few truly understand the profound shift in responsibilities that accompany such roles. Misalignment in expectations can lead to significant struggles in these new positions, especially for specialists like mobile engineers, who face unique hurdles when advancing beyond senior roles without broadening their expertise.\r\n\r\nIn this talk, we will demystify the path to post-terminal levels, using Uber as a case study. We will outline what it takes to operate at these advanced stages, setting realistic expectations, and providing actionable examples and recommendations for those aiming to climb the career ladder. The discussion will also address the specific challenges faced by specialized engineers and propose strategies to overcome them.\r\n\r\nAttendees will leave equipped with practical tools to steer their career growth, a clearer understanding of the dynamics at higher levels, and a refined perspective on their long-term career objectives.\r\n", - "startsAt": "2024-09-20T10:20:00", - "endsAt": "2024-09-20T11:00:00", + "id": "764378", + "title": "Ask Android! - Gen AI, Media, Adaptive apps on all form factors", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T11:00:00", + "endsAt": "2024-11-01T11:15:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "6a3de662-ef86-4c62-bb68-2f7ebe607f76", - "name": "Ty Smith" + "id": "1c163a41-865b-4915-b032-ef4942e2f47c", + "name": "Kristina Simakova" + }, + { + "id": "837dd36a-5782-49cc-8da5-3f7fc7e4da8a", + "name": "Kateryna Semenova" + }, + { + "id": "391191b2-1d5c-4784-875b-00edf4d065cc", + "name": "Chris Assigbe" + }, + { + "id": "c83dc04e-7a0a-4cbc-9d73-10d08f18a68b", + "name": "Miguel Montemayor" + }, + { + "id": "c70d10a5-999c-4858-a39c-7326570cee91", + "name": "Ran Nachmany" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254878, - "name": "Introductory and overview" + "id": 264350, + "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 306233, + "name": "Office Hours" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [ - { - "id": 254891, - "name": "Android" - } - ], - "sort": 3 + "categoryItems": [], + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 54706, + "room": "Ask Android", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -5355,60 +11500,71 @@ "isConfirmed": true }, { - "id": "722292", - "title": "K2 compiler in production", - "description": "Sergei will talk about the K2 Kotlin compiler and its use in production environments. K2 is a new addition to the Kotlin compiler toolchain that is designed to improve the performance and efficiency of Kotlin compilation. Although still relatively new, K2 is a powerful tool for Kotlin developers who want to build fast, efficient, and reliable applications. In this talk, we will explore the benefits of using K2 in production environments and discuss how it can help improve the performance of your Kotlin builds. We will discuss the impact of K2 on clean and incremental build speeds and share independent benchmarks from a relatively large codebase at Meta.", - "startsAt": "2024-09-20T11:15:00", - "endsAt": "2024-09-20T11:55:00", + "id": "764381", + "title": "Ask Android! -GenAI, Media, Adaptive apps on all form factors", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T11:15:00", + "endsAt": "2024-11-01T11:55:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "8466c9d8-0d23-41da-a283-80632a241057", - "name": "Sergei Rybalkin" + "id": "c8229c07-b474-4044-af66-1c8da6779bc6", + "name": "Chiko Shimizu" + }, + { + "id": "f89ea766-4af9-4b88-8842-ede574e4c648", + "name": "Paul Lammertsma" + }, + { + "id": "3b5772d2-d3d5-42fe-8015-8f7b0e09b472", + "name": "Thomas Weathers" + }, + { + "id": "837dd36a-5782-49cc-8da5-3f7fc7e4da8a", + "name": "Kateryna Semenova" + }, + { + "id": "ef1c33eb-89e9-49f6-9abc-da8140988097", + "name": "Alex Vanyo" + }, + { + "id": "1c163a41-865b-4915-b032-ef4942e2f47c", + "name": "Kristina Simakova" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 306233, + "name": "Office Hours" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [ - { - "id": 254891, - "name": "Android" - }, - { - "id": 254892, - "name": "Kotlin" - } - ], - "sort": 3 + "categoryItems": [], + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 54706, + "room": "Ask Android", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -5416,68 +11572,71 @@ "isConfirmed": true }, { - "id": "671488", - "title": "How we automated code maintenance and you can too!", - "description": "Let's face it: as developers, we dedicate a third of our time to code maintenance, which includes tasks such as upgrading dependencies, addressing security vulnerabilities, and removing obsolete code. This is tedious and repetitive. Neglecting regular maintenance can lead to costly outcomes, including unexpected crashes and it makes the codebase more difficult to understand and evolve.\r\n\r\nHowever, automation of these tasks is not always straightforward. Existing tools such as security scanners, feature flag systems warn you about the issues or obsolete code but fall short of automatically rectifying these problems. Tools that upgrade dependencies merely increase the version number, leaving engineers to handle any API compatibility issues. Automating code changes is hard, and the polyglot nature of modern development makes it harder.\r\n\r\nIn this talk, we will delve into code rewriting techniques such as pattern matching, program analysis, and AI. We will illustrate how we leveraged the complementing power of these tools to generate over 1800 automated pull requests, eliminating or refactoring more than 500,000 lines of code. In this talk, you will also learn how to harness the power of these tools to drive down tech debt, ensuring your apps are not only functional but also future-proof.", - "startsAt": "2024-09-20T12:10:00", - "endsAt": "2024-09-20T12:30:00", + "id": "764391", + "title": "Ask Android! - Compose, Media, Platform", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T11:55:00", + "endsAt": "2024-11-01T12:55:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "a09470ca-e749-4fe1-94cd-03e1d82a596d", - "name": "Gautam Korlam" + "id": "e34e8c09-ac65-4927-852e-ff2fc462afac", + "name": "Anton Beloglazov" + }, + { + "id": "b99dc2e2-df83-4045-a5cb-c4d7dea5db1e", + "name": "Halil Ozercan" + }, + { + "id": "9079b8b4-be1f-4213-a446-6b2bdcad0c04", + "name": "Fung Lam" }, { - "id": "98e9d194-970d-4836-b451-0c7f62663c37", - "name": "Lazaro Clapp" + "id": "e4292032-5462-494b-abfd-3898301476e2", + "name": "Rebecca Franks" + }, + { + "id": "b3baa5b6-3c85-4a36-97c5-9a252f887ae4", + "name": "Jelle Fresen" + }, + { + "id": "1c163a41-865b-4915-b032-ef4942e2f47c", + "name": "Kristina Simakova" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254881, - "name": "Lightning talk" + "id": 306233, + "name": "Office Hours" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [ - { - "id": 254886, - "name": "Tooling" - }, - { - "id": 254889, - "name": "AI/ML" - }, - { - "id": 254900, - "name": "Security" - } - ], - "sort": 3 + "categoryItems": [], + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 54706, + "room": "Ask Android", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -5485,68 +11644,71 @@ "isConfirmed": true }, { - "id": "718114", - "title": "Declarative Gradle on Android", - "description": "Declarative Gradle is a project that targets better isolation of concern and expressing any build clearly and understandably. It is our key initiative towards improving the developer experience and maintainability of Gradle projects. Declarative Gradle will feature first class support for the Android ecosystem including AGP, KGP, and Android Studio integration.\r\n\r\nIn this presentation, we will discuss the current state of Declarative Gradle for Android development. We will preview the proposed configuration language, examples of Android projects, and integration with Android Studio. We will discuss our future plans and the Declarative Gradle roadmap. We are seeking early feedback from Android software developers.", - "startsAt": "2024-09-20T13:40:00", - "endsAt": "2024-09-20T14:20:00", + "id": "764396", + "title": "Ask Android! - Compose, Media, Platform", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T12:55:00", + "endsAt": "2024-11-01T13:35:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "dc1c88ef-dbfd-4b41-a567-7ce8e7645420", - "name": "Inaki Villar" + "id": "b99dc2e2-df83-4045-a5cb-c4d7dea5db1e", + "name": "Halil Ozercan" + }, + { + "id": "e34e8c09-ac65-4927-852e-ff2fc462afac", + "name": "Anton Beloglazov" + }, + { + "id": "9079b8b4-be1f-4213-a446-6b2bdcad0c04", + "name": "Fung Lam" + }, + { + "id": "e4292032-5462-494b-abfd-3898301476e2", + "name": "Rebecca Franks" + }, + { + "id": "b3baa5b6-3c85-4a36-97c5-9a252f887ae4", + "name": "Jelle Fresen" }, { - "id": "89694c9d-5de0-4f39-a50a-ed48d6eb56ca", - "name": "Nelson Osacky" + "id": "1c163a41-865b-4915-b032-ef4942e2f47c", + "name": "Kristina Simakova" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 306233, + "name": "Office Hours" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [ - { - "id": 254886, - "name": "Tooling" - }, - { - "id": 254891, - "name": "Android" - }, - { - "id": 254899, - "name": "Gradle" - } - ], - "sort": 3 + "categoryItems": [], + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 54706, + "room": "Ask Android", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -5554,64 +11716,63 @@ "isConfirmed": true }, { - "id": "721974", - "title": "\"Bundle\" Up and Save: Powering Room with Bundled SQLite", - "description": "As part of the Room KMP release, a less known library was significantly updated to support Room KMP, androidx.sqlite. The library was transformed to be beyond a simple backwards compatible Jetpack library for the Android platform. Via its new 'driver' APIs, it offers the building blocks to create low-level integrations that enables Room to communicate with the desired SQL engine. This lighting talk will go through the APIs, what it enables; such as Bundled SQLite, and how you could use it in your Android applications to provide extra functionality that the platform or Room does not offer out of the box.", - "startsAt": "2024-09-20T14:35:00", - "endsAt": "2024-09-20T14:55:00", + "id": "764397", + "title": "Ask Android! - Compose, WearOS, Platform", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T13:35:00", + "endsAt": "2024-11-01T13:50:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "695a18df-c473-408f-bdfb-b0c594c8c50d", - "name": "Daniel Santiago Rivera" + "id": "2fb0b020-9fa9-49f1-b4a4-54f71dca57c5", + "name": "Kseniia Shumelchyk" + }, + { + "id": "1dfe9bb5-d9bf-41a9-b7d6-dcfd7953e941", + "name": "Nick Butcher" + }, + { + "id": "e4292032-5462-494b-abfd-3898301476e2", + "name": "Rebecca Franks" + }, + { + "id": "9079b8b4-be1f-4213-a446-6b2bdcad0c04", + "name": "Fung Lam" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254881, - "name": "Lightning talk" + "id": 306233, + "name": "Office Hours" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [ - { - "id": 254891, - "name": "Android" - }, - { - "id": 254892, - "name": "Kotlin" - }, - { - "id": 254897, - "name": "Libraries" - } - ], - "sort": 3 + "categoryItems": [], + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 54706, + "room": "Ask Android", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -5619,60 +11780,63 @@ "isConfirmed": true }, { - "id": "721789", - "title": "How we boosted ExoPlayer performance by 30%", - "description": "Video has become an integral part of our lives, and we are witnessing a significant rise in the integration of video content within Android apps. Reddit is not an exception: we have more than 20 video surfaces in our app.\r\n\r\nIn this talk, I'll share our journey of improving video rendering by 30% over the last 6 months and approaches that go beyond what is documented.\r\n\r\nWe'll discuss:\r\n- Video metrics and what's important there\r\n- Lifecycle and challenges\r\n- Single instance of player vs PlayerPool\r\n- SurfaceView vs TextureView performance\r\n- ViewPool and AndroidView pitfalls with Jetpack Compose\r\n- Potential problems with caching\r\n\r\nEverything that will be mentioned is validated through real production scenarios and confirmed in efficiency by A/B tests on millions of Daily Active Users in the Reddit app.", - "startsAt": "2024-09-20T15:25:00", - "endsAt": "2024-09-20T16:05:00", + "id": "764398", + "title": "Ask Android! - Compose, WearOS, Platform", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T13:50:00", + "endsAt": "2024-11-01T14:30:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "61cc0eba-ac00-414b-9cf7-5525040a4bdd", - "name": "Alexey Bykov" + "id": "2fb0b020-9fa9-49f1-b4a4-54f71dca57c5", + "name": "Kseniia Shumelchyk" + }, + { + "id": "1dfe9bb5-d9bf-41a9-b7d6-dcfd7953e941", + "name": "Nick Butcher" + }, + { + "id": "e4292032-5462-494b-abfd-3898301476e2", + "name": "Rebecca Franks" + }, + { + "id": "9079b8b4-be1f-4213-a446-6b2bdcad0c04", + "name": "Fung Lam" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 306233, + "name": "Office Hours" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [ - { - "id": 254891, - "name": "Android" - }, - { - "id": 254892, - "name": "Kotlin" - } - ], - "sort": 3 + "categoryItems": [], + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 54706, + "room": "Ask Android", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -5680,136 +11844,131 @@ "isConfirmed": true }, { - "id": "721070", - "title": "Building an AR app with Compose & OpenGL ES", - "description": "In this talk, we'll demystify the workings of AR experiences, from the fundamentals of OpenGL rendering to the pivotal role of ARCore. Discover how AR applications, while seemingly different from traditional virtual experiences, share many underlying principles to any other virtual experience, whether it's a 3D video game or your favorite virtual reality adventure.\r\n\r\nThrough practical demonstrations, you'll gain a comprehensive understanding of computer graphics with OpenGL ES and how to render an AR experience. By the end of the session, you'll walk away equipped with the knowledge to build your own AR apps using Android’s native tools: Jetpack Compose and OpenGL.", - "startsAt": "2024-09-20T16:20:00", - "endsAt": "2024-09-20T17:00:00", + "id": "764399", + "title": "Ask Android! - Compose, WearOS, Platform", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T14:30:00", + "endsAt": "2024-11-01T14:50:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "4c3a9dd5-8b56-4f32-8cb6-a450510221bf", - "name": "Pau Guillamon" + "id": "2fb0b020-9fa9-49f1-b4a4-54f71dca57c5", + "name": "Kseniia Shumelchyk" + }, + { + "id": "1dfe9bb5-d9bf-41a9-b7d6-dcfd7953e941", + "name": "Nick Butcher" + }, + { + "id": "9079b8b4-be1f-4213-a446-6b2bdcad0c04", + "name": "Fung Lam" + }, + { + "id": "c16c95a9-0e07-4838-9cba-5d041aee4d14", + "name": "Rebecca Franks" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 306233, + "name": "Office Hours" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [ - { - "id": 254890, - "name": "AR/VR" - }, - { - "id": 254891, - "name": "Android" - } - ], - "sort": 3 + "categoryItems": [], + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 54706, + "room": "Ask Android", "liveUrl": null, "recordingUrl": null, "status": "Accepted", "isInformed": true, "isConfirmed": true - } - ], - "hasOnlyPlenumSessions": false - }, - { - "id": 49958, - "name": "Fountain Room", - "sessions": [ + }, { - "id": "724063", - "title": "A Snapshot Preview of Paparazzi 2.0", - "description": "Since last Droidcon NYC, Paparazzi has seen continued increased adoption across the Android community!\r\n\r\nIn this session, we'll discuss:\r\n* why pixel perfection is challenging af\r\n* image encoding and why we chose APNG for animations\r\n* why Google's publishing of layoutlib is great for the community\r\n* ...and more!\r\n\r\nWe'll also give a sneak peek to what's coming in 2.0, as well as why we're excited about it and you should be too!", - "startsAt": "2024-09-20T09:20:00", - "endsAt": "2024-09-20T10:00:00", + "id": "764400", + "title": "Ask Android! - Compose, WearOS, Platform", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T14:50:00", + "endsAt": "2024-11-01T15:30:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "903c7a65-63f0-4244-8f8c-7ab8f7acae75", - "name": "John Rodriguez" + "id": "b99dc2e2-df83-4045-a5cb-c4d7dea5db1e", + "name": "Halil Ozercan" + }, + { + "id": "2fb0b020-9fa9-49f1-b4a4-54f71dca57c5", + "name": "Kseniia Shumelchyk" + }, + { + "id": "9079b8b4-be1f-4213-a446-6b2bdcad0c04", + "name": "Fung Lam" + }, + { + "id": "b5b73a2f-d57d-4a42-b787-a93f4ca9ba79", + "name": "Simona Milanovic" + }, + { + "id": "b3baa5b6-3c85-4a36-97c5-9a252f887ae4", + "name": "Jelle Fresen" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 306233, + "name": "Office Hours" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [ - { - "id": 254886, - "name": "Tooling" - }, - { - "id": 254891, - "name": "Android" - }, - { - "id": 254893, - "name": "Design" - }, - { - "id": 254894, - "name": "Testing" - } - ], - "sort": 3 + "categoryItems": [], + "sort": 4 } ], - "roomId": 49958, - "room": "Fountain Room", + "roomId": 54706, + "room": "Ask Android", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -5817,64 +11976,67 @@ "isConfirmed": true }, { - "id": "720896", - "title": "SKIE: Narrow the gap between Kotlin and Swift", - "description": "A well-designed KMP library can be used on iOS like any other native framework. However, by default it behaves like an Objective-C framework and loses many modern language features that we're used to in both Kotlin and Swift.\r\n\r\nIn this session, we'll look at the features of SKIE, how to enable it for your multiplatform project, and how to make the most of it. We'll also look at some of the lesser known features that aren't quite documented yet.\r\n\r\nLearn how you can use Kotlin language features that would normally be unavailable for your Swift code and make your code safer.", - "startsAt": "2024-09-20T10:20:00", - "endsAt": "2024-09-20T11:00:00", + "id": "764404", + "title": "Ask Android! - Compose, Gemini in AS, KMP", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T15:30:00", + "endsAt": "2024-11-01T15:45:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "969813cd-0231-4310-9c61-745967bd94c5", - "name": "Tadeas Kriz" + "id": "b99dc2e2-df83-4045-a5cb-c4d7dea5db1e", + "name": "Halil Ozercan" + }, + { + "id": "b5b73a2f-d57d-4a42-b787-a93f4ca9ba79", + "name": "Simona Milanovic" + }, + { + "id": "b3baa5b6-3c85-4a36-97c5-9a252f887ae4", + "name": "Jelle Fresen" + }, + { + "id": "7280b9e7-ddf7-4cfb-b85b-1e998d851f66", + "name": "Marcello Galhardo" + }, + { + "id": "eb4483f1-306b-447d-9888-648ec0fc0018", + "name": "Chris Sinco" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254878, - "name": "Introductory and overview" + "id": 264350, + "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 306233, + "name": "Office Hours" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [ - { - "id": 254886, - "name": "Tooling" - }, - { - "id": 254888, - "name": "Cross-Platform" - }, - { - "id": 254892, - "name": "Kotlin" - } - ], - "sort": 3 + "categoryItems": [], + "sort": 4 } ], - "roomId": 49958, - "room": "Fountain Room", + "roomId": 54706, + "room": "Ask Android", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -5882,68 +12044,67 @@ "isConfirmed": true }, { - "id": "722175", - "title": "Extending kotlin-inject for fun & profit", - "description": "Kotlin-inject is a dependency injection framework for Kotlin Multiplatform. It verifies the dependency graph during compilaton and generates the necessary code to instantiate the object graph at runtime. It offers a similar feature set as Dagger 2 without the limitation of being tied to the JVM and Android only. \r\n\r\nThis talk will offer a short introduction to kotlin-inject and discuss its benefits and downsides and how the framework scales in large, modularized code bases. To close some of the gaps and solve project specific use cases KSP and custom code generators will be used to extend the framework and to give us features similar to the ones Anvil provides for Dagger 2. These practical examples serve as an introduction and blueprint into the meta-programming world to reduce boilerplate and simplify patterns in your code base.", - "startsAt": "2024-09-20T11:15:00", - "endsAt": "2024-09-20T11:55:00", + "id": "764406", + "title": "Ask Android! - Compose, Gemini in AS, KMP", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T15:45:00", + "endsAt": "2024-11-01T16:25:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "646237bf-ccc5-43fa-a659-0b361b08d651", - "name": "Ralf Wondratschek" + "id": "7a8a22c6-5b01-4f0a-bc04-12d4ada5de21", + "name": "Jossi Wolf" + }, + { + "id": "b5b73a2f-d57d-4a42-b787-a93f4ca9ba79", + "name": "Simona Milanovic" + }, + { + "id": "7280b9e7-ddf7-4cfb-b85b-1e998d851f66", + "name": "Marcello Galhardo" + }, + { + "id": "eb4483f1-306b-447d-9888-648ec0fc0018", + "name": "Chris Sinco" + }, + { + "id": "f4580454-6603-44a8-9fcd-e98fe6cc8981", + "name": "Matvei Malkov" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 306233, + "name": "Office Hours" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [ - { - "id": 254892, - "name": "Kotlin" - }, - { - "id": 254896, - "name": "Dagger" - }, - { - "id": 254897, - "name": "Libraries" - }, - { - "id": 254904, - "name": "Modularization" - } - ], - "sort": 3 + "categoryItems": [], + "sort": 4 } ], - "roomId": 49958, - "room": "Fountain Room", + "roomId": 54706, + "room": "Ask Android", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -5951,68 +12112,67 @@ "isConfirmed": true }, { - "id": "721044", - "title": "Mobile App Security : Threat Landscape : Attack & Defend, Defend & Monitor, Monitor & Respond", - "description": "The Mobile Threat Landscape is increasing rapidly and Software Engineering and Product Owners are scrambling to close security gaps. This lightning talk will introduce you to the Top Mobile Attacks, OWASP Top Ten Mobile Vulnerabilities as well as Tools and Techniques to make your applications compliant with Cybersecurity Standards like California Consumer Privacy Act.", - "startsAt": "2024-09-20T12:10:00", - "endsAt": "2024-09-20T12:30:00", + "id": "764408", + "title": "Ask Android! - Compose, Gemini in AS, KMP", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T16:25:00", + "endsAt": "2024-11-01T16:40:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "4990e3a2-c183-44c2-8aec-ff76ac75af8e", - "name": "Keir Storrie" + "id": "7a8a22c6-5b01-4f0a-bc04-12d4ada5de21", + "name": "Jossi Wolf" + }, + { + "id": "b5b73a2f-d57d-4a42-b787-a93f4ca9ba79", + "name": "Simona Milanovic" + }, + { + "id": "7280b9e7-ddf7-4cfb-b85b-1e998d851f66", + "name": "Marcello Galhardo" + }, + { + "id": "eb4483f1-306b-447d-9888-648ec0fc0018", + "name": "Chris Sinco" + }, + { + "id": "f4580454-6603-44a8-9fcd-e98fe6cc8981", + "name": "Matvei Malkov" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254878, - "name": "Introductory and overview" + "id": 264350, + "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254881, - "name": "Lightning talk" + "id": 306233, + "name": "Office Hours" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [ - { - "id": 254886, - "name": "Tooling" - }, - { - "id": 254887, - "name": "CI/CD" - }, - { - "id": 254889, - "name": "AI/ML" - }, - { - "id": 254900, - "name": "Security" - } - ], - "sort": 3 + "categoryItems": [], + "sort": 4 } ], - "roomId": 49958, - "room": "Fountain Room", + "roomId": 54706, + "room": "Ask Android", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -6020,732 +12180,1394 @@ "isConfirmed": true }, { - "id": "732937", - "title": "Build adaptive apps with Jetpack Compose", - "description": "In this workshop you will learn how to build adaptive apps for phones, tablets, and foldables, and how they enhance reachability with Jetpack Compose. You will also learn best practices for using Material 3 components and theming. You will explore how to use and think about adaptability when using Jetpack Compose. You build an application, called Reply, that shows you how to implement adaptability for all kinds of screens, and how adaptability and reachability work together to give users an optimal experience.", - "startsAt": "2024-09-20T13:40:00", - "endsAt": "2024-09-20T14:20:00", + "id": "764409", + "title": "Ask Android! - Compose, Gemini in AS, KMP", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T16:40:00", + "endsAt": "2024-11-01T17:20:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "327f56b4-c631-4489-9590-37bdfc856e3a", - "name": "Miguel Montemayor" + "id": "7a8a22c6-5b01-4f0a-bc04-12d4ada5de21", + "name": "Jossi Wolf" + }, + { + "id": "b5b73a2f-d57d-4a42-b787-a93f4ca9ba79", + "name": "Simona Milanovic" + }, + { + "id": "7280b9e7-ddf7-4cfb-b85b-1e998d851f66", + "name": "Marcello Galhardo" + }, + { + "id": "eb4483f1-306b-447d-9888-648ec0fc0018", + "name": "Chris Sinco" + }, + { + "id": "f4580454-6603-44a8-9fcd-e98fe6cc8981", + "name": "Matvei Malkov" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254883, - "name": "Workshop" + "id": 306233, + "name": "Office Hours" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [ - { - "id": 254891, - "name": "Android" - } - ], - "sort": 3 + "categoryItems": [], + "sort": 4 } ], - "roomId": 49958, - "room": "Fountain Room", + "roomId": 54706, + "room": "Ask Android", "liveUrl": null, "recordingUrl": null, "status": "Accepted", "isInformed": true, "isConfirmed": true + } + ], + "hasOnlyPlenumSessions": false + } + ], + "timeSlots": [ + { + "slotStart": "08:20:00", + "rooms": [ + { + "id": 49270, + "name": "Hangouts", + "session": { + "id": "8586de07-b3e8-4ebe-8212-f54e5f817f7d", + "title": "Registration & Check-In", + "description": null, + "startsAt": "2024-11-01T08:20:00", + "endsAt": "2024-11-01T09:20:00", + "isServiceSession": true, + "isPlenumSession": true, + "speakers": [], + "categories": [], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false + }, + "index": 0 + } + ] + }, + { + "slotStart": "09:20:00", + "rooms": [ + { + "id": 49270, + "name": "Hangouts", + "session": { + "id": "759067", + "title": "The Future of Android, Kotlin, and Everything", + "description": "Modern mobile and Android are a touch over 15 years old and Droidcon London 2024 is also in its 15th year. \r\n\r\nSo, it’s time to look forward.\r\n\r\nTech trends come and go. Some burn hot, then disappear. Some become essential. The web is essential. Mobile is essential. Whatever happens with mobile technology, the idea that mobile won’t be as, or more essential, 15 years from now is nonsense.\r\n\r\nHow mobile is developed and delivered is a different question altogether. This will be a talk about near-term tech possibilities, but not what mobile might look like in 15 years. I could speculate, and I'd be wrong. It will be a talk about how this community can shape that future, starting now.\r\n\r\nWhile the tech hype machine has hopped from one shiny concept to another, neither the web nor mobile has remained static. Far from it. We’re in a moment of change and opportunity. A very special moment for this community specifically. But the community is necessary to take advantage of it.", + "startsAt": "2024-11-01T09:20:00", + "endsAt": "2024-11-01T10:00:00", + "isServiceSession": false, + "isPlenumSession": true, + "speakers": [ + { + "id": "84a7e91b-e090-4d57-9eed-f3b9f277dc95", + "name": "Kevin Galligan" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264357, + "name": "Keynote" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 0 + } + ] + }, + { + "slotStart": "10:00:00", + "rooms": [ + { + "id": 49270, + "name": "Hangouts", + "session": { + "id": "6876a148-9098-4d59-809f-995afbb7b110", + "title": "Break", + "description": null, + "startsAt": "2024-11-01T10:00:00", + "endsAt": "2024-11-01T10:20:00", + "isServiceSession": true, + "isPlenumSession": true, + "speakers": [], + "categories": [], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false + }, + "index": 0 + }, + { + "id": 54706, + "name": "Ask Android", + "session": { + "id": "764372", + "title": "Ask Android! - Gen AI, Media, Adaptive apps on all form factors", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T10:00:00", + "endsAt": "2024-11-01T10:20:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "e2ad2515-5292-4deb-8ac6-6c7ea5be1543", + "name": "Rob Orgiu" + }, + { + "id": "1c163a41-865b-4915-b032-ef4942e2f47c", + "name": "Kristina Simakova" + }, + { + "id": "837dd36a-5782-49cc-8da5-3f7fc7e4da8a", + "name": "Kateryna Semenova" + }, + { + "id": "ef1c33eb-89e9-49f6-9abc-da8140988097", + "name": "Alex Vanyo" + }, + { + "id": "56b04326-604d-4140-b159-f93574c86ccd", + "name": "Ran Nachmany" + }, + { + "id": "c83dc04e-7a0a-4cbc-9d73-10d08f18a68b", + "name": "Miguel Montemayor" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 6 + } + ] + }, + { + "slotStart": "10:20:00", + "rooms": [ + { + "id": 49270, + "name": "Hangouts", + "session": { + "id": "733921", + "title": "Effective App Monitoring in Production", + "description": "Your feature is complete and ready to be shipped to production. Now you can forget about it completely and move onto the next thing, right? Actually the fun begins when your feature reaches your users. Is your feature healthy? Are your users seeing any issues? Which ones? How many?\r\nIn this session, we’ll discuss how to monitor Android apps in production to ensure they stand resilient and ready for the challenges of the real world. \r\n\r\nIn this session, you’ll learn how to design and report relevant events that matter to you and your team. If you are introducing monitoring in your application, you will learn how to design a tracking strategy to effectively monitor the application health and debug any issue users experience. If you already have monitoring in place, you will see techniques on how to get visibility into the data through the definition of KPIs (Key Performance Indicators) and dashboards. We will also provide examples of common problems teams face when implementing constant monitoring like knowledge sharing, alerting, and escalating issues to other teams.\r\n\r\nYou’ll see from real world examples how to track, detect and address production issues before they escalate.\r\n\r\nLevel up your app observability, delight your users and deliver with confidence with these tips.", + "startsAt": "2024-11-01T10:20:00", + "endsAt": "2024-11-01T11:00:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "18c45d50-3e38-4933-a55b-8a833f850115", + "name": "Alejandra Stamato" + }, + { + "id": "084a1449-47c9-488c-b5b6-5b8534c45a23", + "name": "Mauro Frezza" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264358, + "name": "Jetpack Compose" + }, + { + "id": 264359, + "name": "Kotlin" + }, + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264377, + "name": "Modern Android Development" + }, + { + "id": 264384, + "name": "Android" + } + ], + "sort": 4 + } + ], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 0 + }, + { + "id": 49271, + "name": "Glass", + "session": { + "id": "696374", + "title": "AndroidX Lifecycle's Path to Multiplatform", + "description": "We’ve recently converted the AndroidX Lifecycle libraries (ViewModel, Lifecycle Runtime, and Compose support) to Kotlin multi-platform (KMP). Join this session to learn more about how this process went, what the real-world challenges of maintaining API backward compatibility are, what lessons we learned from working around KMP limitations, and insights to guide you in migrating your own libraries to KMP.", + "startsAt": "2024-11-01T10:20:00", + "endsAt": "2024-11-01T11:00:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "7280b9e7-ddf7-4cfb-b85b-1e998d851f66", + "name": "Marcello Galhardo" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264351, + "name": "Advanced" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264369, + "name": "Other" + }, + { + "id": 264381, + "name": "Cross-Platform" + }, + { + "id": 264384, + "name": "Android" + }, + { + "id": 264388, + "name": "Libraries" + } + ], + "sort": 4 + } + ], + "roomId": 49271, + "room": "Glass", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 1 }, { - "id": "720124", - "title": "Sneaky SDKs: Things You Didn't Know Third-Party SDKs Could Do", - "description": "In the world of Android development, third-party SDKs are both a curse and a blessing. They offer essential functionalities, saving us from reinventing the wheel, but they can also introduce unexpected behaviors and vulnerabilities. This talk will uncover a few hidden powers of low level Android APIs and demonstrate how they can be both helpful and harmful.", - "startsAt": "2024-09-20T14:35:00", - "endsAt": "2024-09-20T14:55:00", - "isServiceSession": false, - "isPlenumSession": false, - "speakers": [ - { - "id": "71373c0f-53e8-4020-8d16-1bdfe603c3c7", - "name": "Markus Hintersteiner" - } - ], - "categories": [ - { - "id": 72054, - "name": "Level", - "categoryItems": [ - { - "id": 254879, - "name": "Intermediate" - } - ], - "sort": 0 - }, - { - "id": 72055, - "name": "Session format", - "categoryItems": [ - { - "id": 254881, - "name": "Lightning talk" - } - ], - "sort": 1 - }, - { - "id": 72056, - "name": "Tags", - "categoryItems": [ - { - "id": 254891, - "name": "Android" - } - ], - "sort": 3 - } - ], - "roomId": 49958, - "room": "Fountain Room", - "liveUrl": null, - "recordingUrl": null, - "status": "Accepted", - "isInformed": true, - "isConfirmed": true + "id": 49272, + "name": "Things", + "session": { + "id": "696208", + "title": "Deep Dive into the Compose Compiler", + "description": "Have you ever wondered how the slot table is implemented in Compose? How are groups generated? What's the magic behind skipping, and how can you peek inside a slot table? The Slot table implementation was updated recently for performance. This talk takes a deep dive into the Jetpack Compose compiler internals, with a special focus on answering these questions and exploring the implementation details of the slot table. We'll go beyond the basics, uncovering how the compiler is structured and tested. This knowledge will empower you to understand, contribute to, or even build your own tools on top of it. Whether you're a curious developer or aspiring plugin contributor, get ready to fully understand the Jetpack Compose Compiler.", + "startsAt": "2024-11-01T10:20:00", + "endsAt": "2024-11-01T11:00:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "a79f3682-df5c-40e4-8aa8-1b6eaa7bdeec", + "name": "Mohit Sarveiya" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264351, + "name": "Advanced" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264358, + "name": "Jetpack Compose" + }, + { + "id": 264359, + "name": "Kotlin" + }, + { + "id": 264361, + "name": "KMP" + }, + { + "id": 264364, + "name": "Compose" + }, + { + "id": 264380, + "name": "Tooling" + }, + { + "id": 264384, + "name": "Android" + } + ], + "sort": 4 + } + ], + "roomId": 49272, + "room": "Things", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 2 }, { - "id": "721657", - "title": "Hue-manize Your Android Apps: Develop for Color Blindness", - "description": "Have you ever wondered how your Android app appears to someone with color blindness or low vision? We will share firsthand how inaccessible apps impact daily life. In this talk, we'll delve into the world of visual impairments, drawing from Sam's personal experience and offering practical strategies to ensure your apps are accessible to all users.\r\n\r\nWe'll uncover common pitfalls, learn how to diagnose issues with tools like Accessibility Scanner and leverage Android’s built-in tools to simulate various vision conditions. You'll leave equipped with the knowledge and tools needed to make visual accessibility a natural part of your Android development workflow.\r\n", - "startsAt": "2024-09-20T15:25:00", - "endsAt": "2024-09-20T16:05:00", - "isServiceSession": false, - "isPlenumSession": false, - "speakers": [ - { - "id": "598e1141-ce68-4cb2-8e9d-d8c9f5add09c", - "name": "Matt McKenna" - }, - { - "id": "bcd8a1a5-2160-421c-89b8-cb0bf3751bc9", - "name": "Sam Greenberg" - } - ], - "categories": [ - { - "id": 72054, - "name": "Level", - "categoryItems": [ - { - "id": 254878, - "name": "Introductory and overview" - } - ], - "sort": 0 - }, - { - "id": 72055, - "name": "Session format", - "categoryItems": [ - { - "id": 254882, - "name": "Session" - } - ], - "sort": 1 - }, - { - "id": 72056, - "name": "Tags", - "categoryItems": [ - { - "id": 254891, - "name": "Android" - }, - { - "id": 254893, - "name": "Design" - }, - { - "id": 254901, - "name": "Android Studio" - }, - { - "id": 254902, - "name": "UI/UX" - } - ], - "sort": 3 - } - ], - "roomId": 49958, - "room": "Fountain Room", - "liveUrl": null, - "recordingUrl": null, - "status": "Accepted", - "isInformed": true, - "isConfirmed": true + "id": 53981, + "name": "Stadia", + "session": { + "id": "720892", + "title": "Seamless mobile real-time communication with WebRTC", + "description": "The WebRTC project allows developers to build smooth voice and video communication solutions by facilitating the transmission of data between peers.\r\nDuring this talk, we will explore the details of the WebRTC project, including its design principles, functionalities, and how it transforms communications for many web and mobile apps. \r\nFinally, we will create a simple mobile application in Kotlin Multiplatform using WebRTC so you will want to start a business and become a billionaire. \r\n", + "startsAt": "2024-11-01T10:20:00", + "endsAt": "2024-11-01T11:00:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "4674e36f-50f8-4ffb-a486-679d730c759e", + "name": "Renaud Mathieu" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264359, + "name": "Kotlin" + }, + { + "id": 264364, + "name": "Compose" + }, + { + "id": 264388, + "name": "Libraries" + } + ], + "sort": 4 + } + ], + "roomId": 53981, + "room": "Stadia", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 3 + }, + { + "id": 53982, + "name": "Nest", + "session": { + "id": "731303", + "title": "Embracing 16 KB Page Sizes in Android - Boosting Performance", + "description": "Enhance app performance by adopting 16 KB page sizes introduced in Android 15, mandatory for Google Play uploads starting in 2025. In this session, I will cover the why and how behind 16 KB page size modifications through four parts: (1) Performance Boosts: Speed up app boot and launch times with 16 KB page size, (2) Impact Assessment: Evaluate how the 16 KB page size will affect your app, (3) Code Alignment: Align your code and binaries with the 16 KB page size requirement, and (4) Testing Strategies: Test and ensure your app is compliant with specific techniques. Get ahead of the curve by learning to adapt your app to the 16 KB page size requirement, ensuring superior performance and compliance ahead of the 2025 mandate.", + "startsAt": "2024-11-01T10:20:00", + "endsAt": "2024-11-01T11:00:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "84335047-a7cd-437e-986f-1d6b6df31072", + "name": "Chrystian Vieyra Cortes" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264380, + "name": "Tooling" + } + ], + "sort": 4 + } + ], + "roomId": 53982, + "room": "Nest", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 4 }, { - "id": "719602", - "title": "A Skeptic's Guide to Generative AI in the SDLC", - "description": "Hallucinations, non-deterministic results, and continents-worth of energy consumption--these problems have no real solution. We're stuck with them. How can we factor these uncertainties into the productivity gains we get from the tools? What if a 30% productivity gain is as good as we get? I will cover the promises, the realities, and the current/future states of Generative AI. We will acknowledge the unmovable realities getting in the way of the unstoppable fantasies, and help you separate the benefits from the grift.", - "startsAt": "2024-09-20T16:20:00", - "endsAt": "2024-09-20T17:00:00", - "isServiceSession": false, - "isPlenumSession": false, - "speakers": [ - { - "id": "ee461055-a7e0-418a-b4b9-59803a0814fc", - "name": "Marcus Merrell" - } - ], - "categories": [ - { - "id": 72054, - "name": "Level", - "categoryItems": [ - { - "id": 254879, - "name": "Intermediate" - } - ], - "sort": 0 - }, - { - "id": 72055, - "name": "Session format", - "categoryItems": [ - { - "id": 254882, - "name": "Session" - } - ], - "sort": 1 - }, - { - "id": 72056, - "name": "Tags", - "categoryItems": [ - { - "id": 254889, - "name": "AI/ML" - } - ], - "sort": 3 - } - ], - "roomId": 49958, - "room": "Fountain Room", - "liveUrl": null, - "recordingUrl": null, - "status": "Accepted", - "isInformed": true, - "isConfirmed": true + "id": 54703, + "name": "Chromecast", + "session": { + "id": "757520", + "title": "Roundtable: Keeping Up With Android – How to Stay Relevant", + "description": "\r\nIn the fast-paced world of Android development, staying current and continually honing your skills is essential for career growth and relevance. With constant advancements, new tools, libraries and APIs emerging…it can be easy to feel overwhelmed, have FOMO and feel like you are being left behind. In this roundtable we’ll discuss:\r\n - How do you prioritize what new technologies or trends to focus on?\r\n - What are some effective strategies or habits you use to continually hone your skills while balancing a busy work schedule?\r\n - How do you assess whether a new technology is worth investing time and energy into learning?\r\n - Can you share any resources, communities, or platforms that have been particularly helpful in staying up to date?\r\n - How do you prevent burnout?\r\n", + "startsAt": "2024-11-01T10:20:00", + "endsAt": "2024-11-01T11:00:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "b849afbd-1240-40e1-82ea-5660d3dca93b", + "name": "Neil Hutchison" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 303052, + "name": "Roundtable Discussion" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54703, + "room": "Chromecast", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 5 + }, + { + "id": 54706, + "name": "Ask Android", + "session": { + "id": "764376", + "title": "Ask Android! - Gen AI, Media, Adaptive apps on all form factors", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T10:20:00", + "endsAt": "2024-11-01T11:00:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "e2ad2515-5292-4deb-8ac6-6c7ea5be1543", + "name": "Rob Orgiu" + }, + { + "id": "f55e8e03-a341-4c8a-b4fc-a7e97f82db07", + "name": "Xiaodao Wu" + }, + { + "id": "1c163a41-865b-4915-b032-ef4942e2f47c", + "name": "Kristina Simakova" + }, + { + "id": "8b706c47-edbc-41e3-af85-3328b4134e57", + "name": "Ben Sagmoe" + }, + { + "id": "837dd36a-5782-49cc-8da5-3f7fc7e4da8a", + "name": "Kateryna Semenova" + }, + { + "id": "d7f1c9d9-d537-4240-864e-ba626457f534", + "name": "Satish Shende" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 6 } - ], - "hasOnlyPlenumSessions": false + ] }, { - "id": 52283, - "name": "Sapphire Room", - "sessions": [ + "slotStart": "11:00:00", + "rooms": [ { - "id": "720376", - "title": "Scaling Android Development without a Monorepo", - "description": "As mobile startups grow into medium sized companies, it's not always possible to have a monorepo. In this talk, we'll discuss how some strategies and tooling can help us ship and manage an Android app across a large number of repositories. We'll also discuss some of the problems we run into and how we can solve them.\r\n\r\nWe'll discuss topics such as:\r\n- binary compatibility - why it's important and how we handle it (especially when a bump in a shared library might cause a crash in a completely different part of the app).\r\n- tooling to understand changes to the dependency tree (what version changes occurred, what versions are behind, and catching these at CI).\r\n- sharing Gradle build plugins to make life easier. \r\n- code generation strategies to share code between Android and iOS.\r\n- and more\r\n\r\nWe’ll also discuss a high level of the architectural decisions that allow adding or removing major pieces of functionality through just adding or removing a dependency to the Gradle script, and how this architecture gives us some neat advantages along the way.", - "startsAt": "2024-09-20T09:20:00", - "endsAt": "2024-09-20T10:00:00", - "isServiceSession": false, - "isPlenumSession": false, - "speakers": [ - { - "id": "16656dd2-a23b-42d1-8cb8-c9a1e593dd6c", - "name": "Ahmed El-Helw" - }, - { - "id": "5574663f-8366-4445-a2db-789474c8ef55", - "name": "Abdulahi Osoble" - } - ], - "categories": [ - { - "id": 72054, - "name": "Level", - "categoryItems": [ - { - "id": 254880, - "name": "Advanced" - } - ], - "sort": 0 - }, - { - "id": 72055, - "name": "Session format", - "categoryItems": [ - { - "id": 254882, - "name": "Session" - } - ], - "sort": 1 - }, - { - "id": 72056, - "name": "Tags", - "categoryItems": [ - { - "id": 254886, - "name": "Tooling" - }, - { - "id": 254887, - "name": "CI/CD" - }, - { - "id": 254891, - "name": "Android" - }, - { - "id": 254892, - "name": "Kotlin" - }, - { - "id": 254897, - "name": "Libraries" - }, - { - "id": 254904, - "name": "Modularization" - } - ], - "sort": 3 - } - ], - "roomId": 52283, - "room": "Sapphire Room", - "liveUrl": null, - "recordingUrl": null, - "status": "Accepted", - "isInformed": true, - "isConfirmed": true + "id": 49270, + "name": "Hangouts", + "session": { + "id": "cfcf5ef1-b7f7-46c2-82e1-ff3002c842e1", + "title": "Break", + "description": null, + "startsAt": "2024-11-01T11:00:00", + "endsAt": "2024-11-01T11:15:00", + "isServiceSession": true, + "isPlenumSession": true, + "speakers": [], + "categories": [], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false + }, + "index": 0 }, { - "id": "706110", - "title": "Composing ViewModels: Breaking ViewModels into smaller self-contained UI models", - "description": "In early times of Android development we used to have big activities. All view and business logic were being written in activities. Then fragments were introduced so that activities started to become leaner. Then several architectural patterns have started to appear in the Android scene: MVP, MVVM, MVI, etc. While all these were happening, ViewModel like classes started to get bigger and bigger. They have become the new big activities. However, we haven't often considered splitting view models into manageable self-contained granular ones.\r\n\r\nViews are composable and they can be composed to build bigger views. What about introducing smaller ViewModels, namely UI models, and using them to build composable UI models/View Models? \r\n\r\nIn this talk, we will introduce the micro-feature architecture that leverages granular UI models. We'll demonstrate how this approach enables us to create leaner UI hosts by breaking down view models into smaller, self-contained logical UI models. Moreover, we'll explore the distinctions between a UI model and a Jetpack ViewModel. \r\n\r\nWe'll delve into the advantages offered by micro-feature architecture, particularly in terms of single responsibility, composability, reusability, and testability. \r\n\r\nBy the end of the talk, you'll have a comprehensive understanding of how adopting this architecture can significantly enhance your development process and empower you to build high-quality, scalable applications which has highly dynamic contextual screens. \r\n\r\nMicro-feature architecture is used in several screens of 2 big apps in production which are now being used by 10M+ users. We will be also sharing our learnings about using this approach in these apps. ", - "startsAt": "2024-09-20T10:20:00", - "endsAt": "2024-09-20T11:00:00", - "isServiceSession": false, - "isPlenumSession": false, - "speakers": [ - { - "id": "5c3850ee-778a-4904-bd52-a3927ec54dc6", - "name": "Hakan Bagci" - } - ], - "categories": [ - { - "id": 72054, - "name": "Level", - "categoryItems": [ - { - "id": 254879, - "name": "Intermediate" - } - ], - "sort": 0 - }, - { - "id": 72055, - "name": "Session format", - "categoryItems": [ - { - "id": 254882, - "name": "Session" - } - ], - "sort": 1 - }, - { - "id": 72056, - "name": "Tags", - "categoryItems": [], - "sort": 3 - } - ], - "roomId": 52283, - "room": "Sapphire Room", - "liveUrl": null, - "recordingUrl": null, - "status": "Accepted", - "isInformed": true, - "isConfirmed": true + "id": 54706, + "name": "Ask Android", + "session": { + "id": "764378", + "title": "Ask Android! - Gen AI, Media, Adaptive apps on all form factors", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T11:00:00", + "endsAt": "2024-11-01T11:15:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "1c163a41-865b-4915-b032-ef4942e2f47c", + "name": "Kristina Simakova" + }, + { + "id": "837dd36a-5782-49cc-8da5-3f7fc7e4da8a", + "name": "Kateryna Semenova" + }, + { + "id": "391191b2-1d5c-4784-875b-00edf4d065cc", + "name": "Chris Assigbe" + }, + { + "id": "c83dc04e-7a0a-4cbc-9d73-10d08f18a68b", + "name": "Miguel Montemayor" + }, + { + "id": "c70d10a5-999c-4858-a39c-7326570cee91", + "name": "Ran Nachmany" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 6 + } + ] + }, + { + "slotStart": "11:15:00", + "rooms": [ + { + "id": 49270, + "name": "Hangouts", + "session": { + "id": "736477", + "title": "Creating a Custom Compose Layout, Step-by-Step", + "description": "Building a custom layout in Jetpack Compose may seem intimidating, but it does not have to be. With an understanding of the tools available for custom layout, the phases of composition, and best practices for state management, anyone can create a powerful, beautiful custom layout.\r\n\r\nIn this talk, we will build a sophisticated schedule component step-by-step. This composable will include multiple display modes, theme-like encapsulation of styling and behaviors, scoped modifiers for easy customization, and even some animation.", + "startsAt": "2024-11-01T11:15:00", + "endsAt": "2024-11-01T11:55:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "2d41d3fb-3321-4b47-a401-ae84a5de2423", + "name": "Huyen Tue Dao" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264358, + "name": "Jetpack Compose" + } + ], + "sort": 4 + } + ], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 0 }, { - "id": "721651", - "title": "Coroutines Internals: How The Sausage is Made", - "description": "This talk is for the curious developer who uses coroutines and wants to understand their inner workings. What does it mean to be a lightweight thread? How are suspensions implemented? What is the role of the compiler in the process? \r\n\r\nWe'll talk about continuations, thread management, integration points with Android, and we'll even re-implement common suspendable functions. This will be a deep dive, expect to read code, some of which was not meant for most developers to see. ", - "startsAt": "2024-09-20T11:15:00", - "endsAt": "2024-09-20T11:55:00", - "isServiceSession": false, - "isPlenumSession": false, - "speakers": [ - { - "id": "c6489aef-00e1-476b-a58a-000f3b05bb95", - "name": "Philippe Breault" - } - ], - "categories": [ - { - "id": 72054, - "name": "Level", - "categoryItems": [ - { - "id": 254879, - "name": "Intermediate" - } - ], - "sort": 0 - }, - { - "id": 72055, - "name": "Session format", - "categoryItems": [ - { - "id": 254882, - "name": "Session" - } - ], - "sort": 1 - }, - { - "id": 72056, - "name": "Tags", - "categoryItems": [ - { - "id": 254892, - "name": "Kotlin" - }, - { - "id": 254895, - "name": "Coroutines" - } - ], - "sort": 3 - } - ], - "roomId": 52283, - "room": "Sapphire Room", - "liveUrl": null, - "recordingUrl": null, - "status": "Accepted", - "isInformed": true, - "isConfirmed": true + "id": 49271, + "name": "Glass", + "session": { + "id": "747072", + "title": "Scalable Testing Strategies", + "description": "It's very easy to have too many tests and lose track of what kind of feedback each one brings. Moreover, testing on multiple devices can get expensive, both in terms of CI cost and lost productivity waiting for tests to pass. In this talk we'll talk about how the testing pyramid has evolved because of new requirements and features that need to be tested, such as multiple form factors, new configuration changes, Jetpack Compose, screenshot testing, etc.", + "startsAt": "2024-11-01T11:15:00", + "endsAt": "2024-11-01T11:55:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "578f244d-fe79-4759-a84f-63dfbefbd06d", + "name": "Jose Alcérreca" + }, + { + "id": "532dc16d-b69d-4f68-aa49-fe9878b0b52f", + "name": "Adarsh Fernando" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264363, + "name": "Testing" + }, + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264394, + "name": "CI/CD" + }, + { + "id": 264384, + "name": "Android" + } + ], + "sort": 4 + } + ], + "roomId": 49271, + "room": "Glass", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 1 }, { - "id": "716138", - "title": "Mobile Wallet Technology - Harnessing Apple VAS and Google Smart TAP for Innovative App Development", - "description": "In this session, we delve into the dynamic landscape of digital wallet technology and explore how Zebra Value Added Services (VAS) can revolutionize your applications. We provide an overview of the technology, potential use cases and details of how your android applications can take advantage of both Apple VAS and Google Wallet technologies ", - "startsAt": "2024-09-20T12:10:00", - "endsAt": "2024-09-20T12:30:00", - "isServiceSession": false, - "isPlenumSession": false, - "speakers": [ - { - "id": "f50b0148-337b-4213-b22a-48b8681e7486", - "name": "Marek Trusinski" - } - ], - "categories": [ - { - "id": 72054, - "name": "Level", - "categoryItems": [ - { - "id": 254878, - "name": "Introductory and overview" - } - ], - "sort": 0 - }, - { - "id": 72055, - "name": "Session format", - "categoryItems": [ - { - "id": 254881, - "name": "Lightning talk" - } - ], - "sort": 1 - }, - { - "id": 72056, - "name": "Tags", - "categoryItems": [], - "sort": 3 - } - ], - "roomId": 52283, - "room": "Sapphire Room", - "liveUrl": null, - "recordingUrl": null, - "status": "Accepted", - "isInformed": true, - "isConfirmed": true + "id": 49272, + "name": "Things", + "session": { + "id": "735816", + "title": "Developing Trusted Applications for Trusted Execution Environments and vTEEs", + "description": "In today's mobile-first world, security is paramount. Join us in this engaging session where we introduce vTEE, a groundbreaking concept designed to embed advanced security into mobile applications. This session will demonstrate how vTEE allows developers to create their own Trusted Execution Environments (TEEs) directly within their apps, ensuring that sensitive data remains protected. Additionally, learn how our global award-winning open-source project, jCardSim, simplifies the prototyping and development of trusted applications, accelerating your journey towards secure, scalable, and innovative app experiences. Get ready to supercharge your app security with ease and flexibility!", + "startsAt": "2024-11-01T11:15:00", + "endsAt": "2024-11-01T11:55:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "d7e7d278-a645-42c5-b337-c793a5b5bd79", + "name": "Mikhail Dudarev" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264351, + "name": "Advanced" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264372, + "name": "Security" + }, + { + "id": 264381, + "name": "Cross-Platform" + }, + { + "id": 264384, + "name": "Android" + } + ], + "sort": 4 + } + ], + "roomId": 49272, + "room": "Things", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 2 }, { - "id": "702926", - "title": "Math and Modeling for Camera Developers", - "description": "Abstract: \r\nModern cameras are sophisticated devices that rely on a combination of intricate hardware and complex software algorithms to produce high-quality images. Understanding the underlying mathematics and modeling techniques is crucial for camera developers to optimize performance, correct imperfections, and deliver exceptional image quality. The Camera2 API exposes many of these details and developers would benefit significantly by knowing how to work with them.\r\n\r\nThis talk will delve into :\r\n - Camera intrinsics and extrinsics, which describe the geometric relationship between the camera and the scene.\r\n- Lens distortion correction using the Brown-Conrady model.\r\n- Meaning of various maps exposed in the Camera2 API such as hot pixel map, lens shading map\r\n- and more\r\n\r\nTarget Audience:\r\n\r\nAndroid developers seeking to build or enhance camera-centric applications. Especially those who are building apps seeking to use cameras on Android to understand the world around them, eg: AR based apps\r\n\r\nTakeaways:\r\nBy the end of the talk you will have a good understanding of the mathematical models needed to process images captured by your Android device's camera and use them for innovative applications. \r\n\r\n", - "startsAt": "2024-09-20T13:40:00", - "endsAt": "2024-09-20T14:20:00", - "isServiceSession": false, - "isPlenumSession": false, - "speakers": [ - { - "id": "1d0d817a-c0aa-4ca5-9d21-ad67fac74a81", - "name": "Jayant Chowdhary" - }, - { - "id": "1eae811c-9c84-4516-b13f-92397d260ded", - "name": "Kailiang Chen" - }, - { - "id": "5b1f8159-fd45-4e94-b4a9-a6632c462ebb", - "name": "Avichal Rakesh" - } - ], - "categories": [ - { - "id": 72054, - "name": "Level", - "categoryItems": [ - { - "id": 254880, - "name": "Advanced" - } - ], - "sort": 0 - }, - { - "id": 72055, - "name": "Session format", - "categoryItems": [ - { - "id": 254882, - "name": "Session" - } - ], - "sort": 1 - }, - { - "id": 72056, - "name": "Tags", - "categoryItems": [ - { - "id": 254888, - "name": "Cross-Platform" - }, - { - "id": 254890, - "name": "AR/VR" - }, - { - "id": 254891, - "name": "Android" - } - ], - "sort": 3 - } - ], - "roomId": 52283, - "room": "Sapphire Room", - "liveUrl": null, - "recordingUrl": null, - "status": "Accepted", - "isInformed": true, - "isConfirmed": true + "id": 53981, + "name": "Stadia", + "session": { + "id": "722874", + "title": "From realtime CameraX filters to General Purpose GPU computing in simple steps", + "description": "Did you ever think that that the computational complexity of image processing is comparable to that of AI training, and both tasks use GPUs?\r\n\r\nModern phones have powerful GPUs that are typically used for photo, graphics and image processing which naturally brings us to OpenGL and Vulkan C++ APIs.\r\n\r\nLuckily, on Android we have OpenGL Java bindings, so we don't need to dive into C++. And combined with the CameraX effects API, we can build advanced filters for the camera. What is more, mobile GPUs are also not limited to these types of tasks and can be used for general purpose computing, even the ones completely unrelated to graphics.\r\n\r\nIn this session I will show you how to set up and write your own shaders for real-time image processing with CameraX. I will also show you how to make a step forward and use shaders for general purpose GPU computing, so that you can take advantage of the GPU power.\r\n\r\nCome to this talk and learn how to harness the computing power of your phone's GPU!", + "startsAt": "2024-11-01T11:15:00", + "endsAt": "2024-11-01T11:55:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "892ec2dc-5b2e-45fb-9393-ff1407ebebe7", + "name": "Konstantin Zolotov" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264369, + "name": "Other" + }, + { + "id": 264384, + "name": "Android" + }, + { + "id": 264388, + "name": "Libraries" + } + ], + "sort": 4 + } + ], + "roomId": 53981, + "room": "Stadia", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 3 }, { - "id": "693098", - "title": "The Critical Need for More Android Mentors", - "description": "Android Development can be considered an untraditional software discipline. While many young professionals are drawn to trendy positions like AI and Blockchain Engineering or traditional roles such as Backend and Web Development, Mobile is becoming less and less popular in the modern workspace. Many universities do not adequately educate for these roles, so it is up to us to inspire younger engineers to join our field. This session will overview the history of mobile development as a professional career, and the current position of the role amongst others. It will also discuss the benefits of becoming a mentor, and I'll share some incredibly rewarding moments and lessons I've taken from my time teaching Android.", - "startsAt": "2024-09-20T14:35:00", - "endsAt": "2024-09-20T14:55:00", - "isServiceSession": false, - "isPlenumSession": false, - "speakers": [ - { - "id": "45f252dd-d465-4a2f-ade2-a405d8ff73d0", - "name": "Dan Peluso" - } - ], - "categories": [ - { - "id": 72054, - "name": "Level", - "categoryItems": [ - { - "id": 254878, - "name": "Introductory and overview" - } - ], - "sort": 0 - }, - { - "id": 72055, - "name": "Session format", - "categoryItems": [ - { - "id": 254881, - "name": "Lightning talk" - } - ], - "sort": 1 - }, - { - "id": 72056, - "name": "Tags", - "categoryItems": [ - { - "id": 254891, - "name": "Android" - }, - { - "id": 254892, - "name": "Kotlin" - } - ], - "sort": 3 - } - ], - "roomId": 52283, - "room": "Sapphire Room", - "liveUrl": null, - "recordingUrl": null, - "status": "Accepted", - "isInformed": true, - "isConfirmed": true + "id": 53982, + "name": "Nest", + "session": { + "id": "711918", + "title": "Personalizing Accessibility", + "description": "What should you do when users' accessibility needs conflict? For example, some users prefer more color contrast, while others require less contrast. To give a few examples, some might need labels to accompany icons, and for some, having too much text can make the app experience worse. Some love graphs and others have difficulty understanding what they represent and would need the same data in written format.\r\n\r\nOne way to tackle this problem is to allow users to personalize their app experience. In this talk, I will discuss different ways of personalization, including the opportunities and drawbacks. I will also give some actionable examples of how to let your users personalize their experience. After listening to this talk, you'll leave with actionable knowledge about providing a more accessible experience for your users via personalization.", + "startsAt": "2024-11-01T11:15:00", + "endsAt": "2024-11-01T11:55:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "6a7b0ee2-2d50-42b7-8225-1df145d255ea", + "name": "Eeva-Jonna Panula" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264358, + "name": "Jetpack Compose" + }, + { + "id": 264365, + "name": "Accessibility" + }, + { + "id": 264368, + "name": "Techniques & Guides" + } + ], + "sort": 4 + } + ], + "roomId": 53982, + "room": "Nest", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 4 }, { - "id": "716832", - "title": "Compose Multiplatform on iOS: On the Road to Stable", - "description": "Compose Multiplatform on iOS is in Beta, making it the perfect time to start giving it a try! Let’s take a closer look at what the team at JetBrains has done to get here, and have an exclusive look at the subjects we’re getting ready as we move toward a stable release!\r\n\r\nThat includes the ecosystem – well-established Jetpack libraries such as Navigation, ViewModel, DataStore, Lifecycle, and even Room are now available in Kotlin Multiplatform projects. Through practical examples, we’ll explore how building well-architected cross-platform apps with Kotlin is easier than ever.\r\n\r\nIn multiple live demos, we’ll see how the new common APIs can be used in practice, how they fit smoothly into Compose Multiplatform, and how they integrate naturally with iOS. We’ll also see some of the tooling improvements we at JetBrains are making around previews, common resources, and more.\r\n\r\nCompose Multiplatform brings your established skill set to new platforms. And it’s ready for you to start building – on iOS, Android, and beyond!", - "startsAt": "2024-09-20T15:25:00", - "endsAt": "2024-09-20T16:05:00", - "isServiceSession": false, - "isPlenumSession": false, - "speakers": [ - { - "id": "a82c6942-6e2b-4d80-9883-0b84b932d6ef", - "name": "Sebastian Aigner" - } - ], - "categories": [ - { - "id": 72054, - "name": "Level", - "categoryItems": [ - { - "id": 254878, - "name": "Introductory and overview" - } - ], - "sort": 0 - }, - { - "id": 72055, - "name": "Session format", - "categoryItems": [ - { - "id": 254882, - "name": "Session" - } - ], - "sort": 1 - }, - { - "id": 72056, - "name": "Tags", - "categoryItems": [ - { - "id": 254886, - "name": "Tooling" - }, - { - "id": 254888, - "name": "Cross-Platform" - }, - { - "id": 254891, - "name": "Android" - }, - { - "id": 254892, - "name": "Kotlin" - }, - { - "id": 254897, - "name": "Libraries" - } - ], - "sort": 3 - } - ], - "roomId": 52283, - "room": "Sapphire Room", - "liveUrl": null, - "recordingUrl": null, - "status": "Accepted", - "isInformed": true, - "isConfirmed": true + "id": 54703, + "name": "Chromecast", + "session": { + "id": "760569", + "title": "Roundtable: KMP & CMP - Yes we can!...but....", + "description": "KMP with native UI and KMP with CMP are both amazing technically. However, there is no guidance for how these technologies should be applied to production situations. All new tech goes through a maturing phase.\r\n\r\nJoin this roundtable to discuss the promise and pitfalls of KMP and CMP and how the community can deliver on the amazing potential.", + "startsAt": "2024-11-01T11:15:00", + "endsAt": "2024-11-01T11:55:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "84a7e91b-e090-4d57-9eed-f3b9f277dc95", + "name": "Kevin Galligan" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264351, + "name": "Advanced" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 303052, + "name": "Roundtable Discussion" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54703, + "room": "Chromecast", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 5 + }, + { + "id": 54706, + "name": "Ask Android", + "session": { + "id": "764381", + "title": "Ask Android! -GenAI, Media, Adaptive apps on all form factors", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T11:15:00", + "endsAt": "2024-11-01T11:55:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "c8229c07-b474-4044-af66-1c8da6779bc6", + "name": "Chiko Shimizu" + }, + { + "id": "f89ea766-4af9-4b88-8842-ede574e4c648", + "name": "Paul Lammertsma" + }, + { + "id": "3b5772d2-d3d5-42fe-8015-8f7b0e09b472", + "name": "Thomas Weathers" + }, + { + "id": "837dd36a-5782-49cc-8da5-3f7fc7e4da8a", + "name": "Kateryna Semenova" + }, + { + "id": "ef1c33eb-89e9-49f6-9abc-da8140988097", + "name": "Alex Vanyo" + }, + { + "id": "1c163a41-865b-4915-b032-ef4942e2f47c", + "name": "Kristina Simakova" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 6 } - ], - "hasOnlyPlenumSessions": false - } - ], - "timeSlots": [ + ] + }, { - "slotStart": "08:20:00", + "slotStart": "11:55:00", "rooms": [ { - "id": 49956, - "name": "Grand Ballroom 1", + "id": 49270, + "name": "Hangouts", "session": { - "id": "56875a23-df88-4260-9b03-d792d545de07", - "title": "Registration & Check-In", + "id": "2e322db2-0dcf-458b-9dc2-c6a62337a8e4", + "title": "Lunch", "description": null, - "startsAt": "2024-09-20T08:20:00", - "endsAt": "2024-09-20T09:20:00", + "startsAt": "2024-11-01T11:55:00", + "endsAt": "2024-11-01T12:55:00", "isServiceSession": true, "isPlenumSession": true, "speakers": [], "categories": [], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 49270, + "room": "Hangouts", "liveUrl": null, "recordingUrl": null, "status": null, @@ -6753,336 +13575,563 @@ "isConfirmed": false }, "index": 0 + }, + { + "id": 54706, + "name": "Ask Android", + "session": { + "id": "764391", + "title": "Ask Android! - Compose, Media, Platform", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T11:55:00", + "endsAt": "2024-11-01T12:55:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "e34e8c09-ac65-4927-852e-ff2fc462afac", + "name": "Anton Beloglazov" + }, + { + "id": "b99dc2e2-df83-4045-a5cb-c4d7dea5db1e", + "name": "Halil Ozercan" + }, + { + "id": "9079b8b4-be1f-4213-a446-6b2bdcad0c04", + "name": "Fung Lam" + }, + { + "id": "e4292032-5462-494b-abfd-3898301476e2", + "name": "Rebecca Franks" + }, + { + "id": "b3baa5b6-3c85-4a36-97c5-9a252f887ae4", + "name": "Jelle Fresen" + }, + { + "id": "1c163a41-865b-4915-b032-ef4942e2f47c", + "name": "Kristina Simakova" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 6 } ] }, { - "slotStart": "09:20:00", + "slotStart": "12:55:00", "rooms": [ { - "id": 49956, - "name": "Grand Ballroom 1", + "id": 49270, + "name": "Hangouts", "session": { - "id": "696196", - "title": "Deep Dive into the Compose Compiler", - "description": "Have you ever wondered how the slot table is implemented in Compose? How are groups generated? What's the magic behind skipping, and how can you peek inside a slot table? The Slot table implementation was updated recently for performance. This talk takes a deep dive into the Jetpack Compose compiler internals, with a special focus on answering these questions and exploring the implementation details of the slot table. We'll go beyond the basics, uncovering how the compiler is structured and tested. This knowledge will empower you to understand, contribute to, or even build your own tools on top of it. Whether you're a curious developer or aspiring plugin contributor, get ready to fully understand the Jetpack Compose Compiler.", - "startsAt": "2024-09-20T09:20:00", - "endsAt": "2024-09-20T10:00:00", + "id": "700387", + "title": "Mistakes you make using Kotlin Coroutines", + "description": "Kotlin Coroutines offer a powerful, yet deceptively simple solution for managing asynchronous tasks. However, their ease of use can sometimes lead us into unforeseen pitfalls. From unexpected cancellations to perpetually running operations, developers often encounter bewildering behaviors that can affect application performance and reliability. In this presentation, we'll dive deep into the common mistakes made while using Kotlin Coroutines. We'll explore why these issues arise, how to diagnose them, and, most importantly, how to resolve them effectively. Expect to walk away with advanced insights and practical strategies to harness the full potential of coroutines in your Kotlin applications, ensuring they're robust, efficient, and maintainable.", + "startsAt": "2024-11-01T12:55:00", + "endsAt": "2024-11-01T13:35:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "a79f3682-df5c-40e4-8aa8-1b6eaa7bdeec", - "name": "Mohit Sarveiya" + "id": "ef7c1115-d852-44b9-9f72-530ba7223c55", + "name": "Marcin Moskala" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254880, - "name": "Advanced" + "id": 264350, + "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254886, - "name": "Tooling" + "id": 264359, + "name": "Kotlin" }, { - "id": 254891, - "name": "Android" - }, + "id": 264386, + "name": "Coroutines" + } + ], + "sort": 4 + } + ], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 0 + }, + { + "id": 49271, + "name": "Glass", + "session": { + "id": "736513", + "title": "A Snapshot Preview of Paparazzi 2.0", + "description": "Since last Droidcon NYC, Paparazzi has seen continued increased adoption across the Android community!\r\n\r\nIn this session, we'll discuss:\r\n* why pixel perfection is challenging af\r\n* image encoding and why we chose APNG for animations\r\n* why Google's publishing of layoutlib is great for the community\r\n* ...and more!\r\n\r\nWe'll also give a sneak peek to what's coming in 2.0, as well as why we're excited about it and you should be too!", + "startsAt": "2024-11-01T12:55:00", + "endsAt": "2024-11-01T13:35:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "903c7a65-63f0-4244-8f8c-7ab8f7acae75", + "name": "John Rodriguez" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ { - "id": 254892, + "id": 264359, "name": "Kotlin" }, { - "id": 254894, + "id": 264363, "name": "Testing" }, { - "id": 254897, - "name": "Libraries" + "id": 264380, + "name": "Tooling" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 49271, + "room": "Glass", "liveUrl": null, "recordingUrl": null, "status": "Accepted", "isInformed": true, "isConfirmed": true }, - "index": 0 + "index": 1 }, { - "id": 49957, - "name": "Grand Ballroom 2", + "id": 49272, + "name": "Things", "session": { - "id": "721860", - "title": "Building an ML-powered Android Livestreaming App", - "description": "This presentation explores the application of computer vision and machine learning models for real-time video and audio processing. We'll demonstrate how this technology can enable the creation of a whole new category of live-streaming applications. \r\n\r\nDeveloping a video conferencing application has historically been fairly complex. We will start with a brief overview of the Livekit open-source APIs, showcasing how to build a simple and intuitive video streaming Android application. \r\n\r\nNext, we will explore integrating various ML-powered agents into the experience. We will also illustrate how to use reactive programming techniques to create easily understandable and modifiable multi-stage processing pipelines.\r\n\r\nLooking forward to exploring this exciting and innovative topic with you!", - "startsAt": "2024-09-20T09:20:00", - "endsAt": "2024-09-20T10:00:00", + "id": "731650", + "title": "Elevated Dependency Injection: Going Beyond the Basics with Custom Hilt Components", + "description": "Hilt/Dagger is a popular and powerful building block in Modern Android Development. Its benefits include reduced boilerplate and compile-time magic to ensure runtime safety and performance. \r\n\r\nBy default, Hilt provides basic components, such as Singleton, Activity, or ViewModel. \r\nIt is also extensible, allowing you to create additional components for more complex use cases. \r\n\r\nHere at Patreon, building a custom UserComponent tied to a user session has improved our codebase immensely by reducing boilerplate, increasing code safety, and making it easier to cancel work when a user logs out.\r\n\r\nThis talk will focus on the ins and outs of custom components and some simple but non-obvious techniques that we’ve used to make them nicely integrate into our app!\r\n\r\nHighlights of the talk will include:\r\n\r\n- Custom components and when you should use them\r\n- The beautiful synergy of dagger components and coroutine scopes\r\n- Overcoming the limitations of Dagger’s single inheritance and Hilt’s fixed component hierarchy\r\n- Providing easy access to bindings in `@HiltViewModel` and `@HiltAndroidTest` classes\r\n- A case study of Patreon’s `UserComponent`", + "startsAt": "2024-11-01T12:55:00", + "endsAt": "2024-11-01T13:35:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "878ec0bb-f4d7-4b83-a9af-ff6e359a35dc", - "name": "Etienne Caron" + "id": "1caff1f9-9594-4ce8-a031-ed1ba2201d13", + "name": "Steven Kideckel" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254889, - "name": "AI/ML" + "id": 264377, + "name": "Modern Android Development" }, { - "id": 254891, + "id": 264384, "name": "Android" + }, + { + "id": 264387, + "name": "Dagger" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 49272, + "room": "Things", "liveUrl": null, "recordingUrl": null, "status": "Accepted", "isInformed": true, "isConfirmed": true }, - "index": 1 + "index": 2 + }, + { + "id": 53981, + "name": "Stadia", + "session": { + "id": "700492", + "title": "Ten things you heard about testing that might be wrong", + "description": "Testing became an essential part of Android development. Many conference talks have been given and even more best practices have been written. \r\n\r\nBut what if, as time evolved, some of the things we thought were true, changed?\r\n\r\nLet’s start questioning some of these in this talk:\r\n- Are flaky tests fixable?\r\n- Are mocks even harmful?\r\n- Is DI about testing?\r\n- Did we understand testing in isolation properly? \r\n- Is the test pyramid still valid?\r\n- Is Robolectric good or bad on Android?\r\n- And in times of AI, should we generate tests?\r\n\r\nCome and join my session to learn more!\r\n", + "startsAt": "2024-11-01T12:55:00", + "endsAt": "2024-11-01T13:35:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "4d3a31b1-61e5-4a26-9ca3-c9f30e3eaa08", + "name": "Danny Preussler" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264351, + "name": "Advanced" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264363, + "name": "Testing" + } + ], + "sort": 4 + } + ], + "roomId": 53981, + "room": "Stadia", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 3 }, { - "id": 49958, - "name": "Fountain Room", + "id": 53982, + "name": "Nest", "session": { - "id": "724063", - "title": "A Snapshot Preview of Paparazzi 2.0", - "description": "Since last Droidcon NYC, Paparazzi has seen continued increased adoption across the Android community!\r\n\r\nIn this session, we'll discuss:\r\n* why pixel perfection is challenging af\r\n* image encoding and why we chose APNG for animations\r\n* why Google's publishing of layoutlib is great for the community\r\n* ...and more!\r\n\r\nWe'll also give a sneak peek to what's coming in 2.0, as well as why we're excited about it and you should be too!", - "startsAt": "2024-09-20T09:20:00", - "endsAt": "2024-09-20T10:00:00", + "id": "735538", + "title": "Unblocking The Main Thread: Solving ANRs and Frozen Frames", + "description": "In the realm of Android development, the main thread is our stage, but too often, it becomes a battleground where performance issues arise, leading to ANRs, frozen frames, and sluggish Uls. As we strive for excellence in user experience, understanding and optimizing the main thread becomes essential to prevent these common performance bottlenecks.\r\n\r\nWe have strategies and best practices for keeping the main thread uncluttered. We'll examine the root causes of performance issues and techniques for monitoring and improving main thread health as well as app performance.\r\n\r\nIn this talk, participants will walk away with practical knowledge on enhancing app performance by mastering the main thread. We'll share proven approaches to eliminate real-life ANRs and frozen frames to build apps that deliver butter smooth experience.", + "startsAt": "2024-11-01T12:55:00", + "endsAt": "2024-11-01T13:35:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "903c7a65-63f0-4244-8f8c-7ab8f7acae75", - "name": "John Rodriguez" + "id": "9a7f5add-ce7a-49a3-ab3d-f3c4484453e8", + "name": "Sinan Kozak" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, - "name": "Intermediate" + "id": 264351, + "name": "Advanced" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254886, + "id": 264358, + "name": "Jetpack Compose" + }, + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264377, + "name": "Modern Android Development" + }, + { + "id": 264380, "name": "Tooling" }, { - "id": 254891, + "id": 264384, "name": "Android" }, { - "id": 254893, - "name": "Design" + "id": 264379, + "name": "Android Studio" }, { - "id": 254894, - "name": "Testing" + "id": 264391, + "name": "Firebase" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49958, - "room": "Fountain Room", + "roomId": 53982, + "room": "Nest", "liveUrl": null, "recordingUrl": null, "status": "Accepted", "isInformed": true, "isConfirmed": true }, - "index": 2 + "index": 4 + }, + { + "id": 54703, + "name": "Chromecast", + "session": { + "id": "74a094cd-2f41-4906-8427-7c720694b385", + "title": "T3 Engineering Leadership Summit (Separate Ticket Required)", + "description": "https://www.t3-summit.com/t3-london", + "startsAt": "2024-11-01T12:55:00", + "endsAt": "2024-11-01T13:35:00", + "isServiceSession": true, + "isPlenumSession": false, + "speakers": [], + "categories": [], + "roomId": 54703, + "room": "Chromecast", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false + }, + "index": 5 }, { - "id": 52283, - "name": "Sapphire Room", + "id": 54706, + "name": "Ask Android", "session": { - "id": "720376", - "title": "Scaling Android Development without a Monorepo", - "description": "As mobile startups grow into medium sized companies, it's not always possible to have a monorepo. In this talk, we'll discuss how some strategies and tooling can help us ship and manage an Android app across a large number of repositories. We'll also discuss some of the problems we run into and how we can solve them.\r\n\r\nWe'll discuss topics such as:\r\n- binary compatibility - why it's important and how we handle it (especially when a bump in a shared library might cause a crash in a completely different part of the app).\r\n- tooling to understand changes to the dependency tree (what version changes occurred, what versions are behind, and catching these at CI).\r\n- sharing Gradle build plugins to make life easier. \r\n- code generation strategies to share code between Android and iOS.\r\n- and more\r\n\r\nWe’ll also discuss a high level of the architectural decisions that allow adding or removing major pieces of functionality through just adding or removing a dependency to the Gradle script, and how this architecture gives us some neat advantages along the way.", - "startsAt": "2024-09-20T09:20:00", - "endsAt": "2024-09-20T10:00:00", + "id": "764396", + "title": "Ask Android! - Compose, Media, Platform", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T12:55:00", + "endsAt": "2024-11-01T13:35:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "16656dd2-a23b-42d1-8cb8-c9a1e593dd6c", - "name": "Ahmed El-Helw" + "id": "b99dc2e2-df83-4045-a5cb-c4d7dea5db1e", + "name": "Halil Ozercan" + }, + { + "id": "e34e8c09-ac65-4927-852e-ff2fc462afac", + "name": "Anton Beloglazov" + }, + { + "id": "9079b8b4-be1f-4213-a446-6b2bdcad0c04", + "name": "Fung Lam" + }, + { + "id": "e4292032-5462-494b-abfd-3898301476e2", + "name": "Rebecca Franks" + }, + { + "id": "b3baa5b6-3c85-4a36-97c5-9a252f887ae4", + "name": "Jelle Fresen" }, { - "id": "5574663f-8366-4445-a2db-789474c8ef55", - "name": "Abdulahi Osoble" + "id": "1c163a41-865b-4915-b032-ef4942e2f47c", + "name": "Kristina Simakova" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254880, - "name": "Advanced" + "id": 264350, + "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 306233, + "name": "Office Hours" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [ - { - "id": 254886, - "name": "Tooling" - }, - { - "id": 254887, - "name": "CI/CD" - }, - { - "id": 254891, - "name": "Android" - }, - { - "id": 254892, - "name": "Kotlin" - }, - { - "id": 254897, - "name": "Libraries" - }, - { - "id": 254904, - "name": "Modularization" - } - ], - "sort": 3 + "categoryItems": [], + "sort": 4 } ], - "roomId": 52283, - "room": "Sapphire Room", + "roomId": 54706, + "room": "Ask Android", "liveUrl": null, "recordingUrl": null, "status": "Accepted", "isInformed": true, "isConfirmed": true }, - "index": 3 + "index": 6 } ] }, { - "slotStart": "10:00:00", + "slotStart": "13:35:00", "rooms": [ { - "id": 49956, - "name": "Grand Ballroom 1", + "id": 49270, + "name": "Hangouts", "session": { - "id": "870bcf3a-3c64-40aa-a3a0-6039030033b1", + "id": "7370ab67-e2bb-4288-8de1-d5012f5278b2", "title": "Break", "description": null, - "startsAt": "2024-09-20T10:00:00", - "endsAt": "2024-09-20T10:20:00", + "startsAt": "2024-11-01T13:35:00", + "endsAt": "2024-11-01T13:50:00", "isServiceSession": true, "isPlenumSession": true, "speakers": [], "categories": [], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 49270, + "room": "Hangouts", "liveUrl": null, "recordingUrl": null, "status": null, @@ -7090,70 +14139,139 @@ "isConfirmed": false }, "index": 0 + }, + { + "id": 54706, + "name": "Ask Android", + "session": { + "id": "764397", + "title": "Ask Android! - Compose, WearOS, Platform", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T13:35:00", + "endsAt": "2024-11-01T13:50:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "2fb0b020-9fa9-49f1-b4a4-54f71dca57c5", + "name": "Kseniia Shumelchyk" + }, + { + "id": "1dfe9bb5-d9bf-41a9-b7d6-dcfd7953e941", + "name": "Nick Butcher" + }, + { + "id": "e4292032-5462-494b-abfd-3898301476e2", + "name": "Rebecca Franks" + }, + { + "id": "9079b8b4-be1f-4213-a446-6b2bdcad0c04", + "name": "Fung Lam" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + "index": 6 } ] }, { - "slotStart": "10:20:00", + "slotStart": "13:50:00", "rooms": [ { - "id": 49956, - "name": "Grand Ballroom 1", + "id": 49270, + "name": "Hangouts", "session": { - "id": "719280", - "title": "Declarative APIs for Declarative UIs: Designing Media Friendly Jetpack Compose Components", - "description": "As we consume more content on our devices, it's more important than ever to provide delightful user experiences for media across different navigation destinations, panes within those destinations, and devices and form factors those panes span.\r\n\r\nThis talk will:\r\n\r\nOutline clear selection criteria for what APIs to use in the data and UI layers when building an image serving pipeline in a Jetpack Compose app, along with clear examples of the effect of these choices.\r\n\r\nUnderscore the importance of the kinds of architectural logic in the UI layer (UI logic and business logic) in relation to producing and displaying rich media (pictures and videos) in apps in Jetpack Compose.\r\n\r\nWalk through common user experiences that can be taken to the next level of continuity and immersion with Jetpack Compose by following the principles previously outlined. Examples include shared element transitions and its permutations in list - detail flows across various screen sizes and form factors.", - "startsAt": "2024-09-20T10:20:00", - "endsAt": "2024-09-20T11:00:00", + "id": "733770", + "title": "User Initiated Data Transfer Jobs", + "description": "Google introduced a new api UIDT in Android 14 as an alternative to Work Manager and Foreground Services.\r\n\r\nA deep dive session into how your apps can run longer-duration, user-initiated transferring of data, such as downloading a file from a remote server using UIDT. With increasing restrictions on running Foreground Services it is very important to migrate your app's critical use cases to alternate API's. Android 14 applies strict rules on when you can run a Foreground Service & Android 15 is bringing 6 hours timeout to Foreground Services.\r\n\r\nWill share how specific use cases migrated to UIDT can lead to improved app performance.", + "startsAt": "2024-11-01T13:50:00", + "endsAt": "2024-11-01T14:30:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "0990c055-9a74-45f9-9f5a-10e2d9196649", - "name": "Tunji Dahunsi" + "id": "edd46ee9-3e55-478c-8f27-c8f86ca77138", + "name": "Tushar Varshney" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, - "name": "Intermediate" + "id": 264351, + "name": "Advanced" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254891, - "name": "Android" + "id": 264377, + "name": "Modern Android Development" }, { - "id": 254902, - "name": "UI/UX" + "id": 264384, + "name": "Android" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 49270, + "room": "Hangouts", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -7163,59 +14281,75 @@ "index": 0 }, { - "id": 49957, - "name": "Grand Ballroom 2", + "id": 49271, + "name": "Glass", "session": { - "id": "721825", - "title": "Advancing Beyond Staff: A Mobile Engineer’s Journey in Big Tech", - "description": "Achieving promotion as a software engineer in big tech is a rare feat, with ascension to staff level and beyond being even more elusive. While many engineers aspire to reach these higher echelons, few truly understand the profound shift in responsibilities that accompany such roles. Misalignment in expectations can lead to significant struggles in these new positions, especially for specialists like mobile engineers, who face unique hurdles when advancing beyond senior roles without broadening their expertise.\r\n\r\nIn this talk, we will demystify the path to post-terminal levels, using Uber as a case study. We will outline what it takes to operate at these advanced stages, setting realistic expectations, and providing actionable examples and recommendations for those aiming to climb the career ladder. The discussion will also address the specific challenges faced by specialized engineers and propose strategies to overcome them.\r\n\r\nAttendees will leave equipped with practical tools to steer their career growth, a clearer understanding of the dynamics at higher levels, and a refined perspective on their long-term career objectives.\r\n", - "startsAt": "2024-09-20T10:20:00", - "endsAt": "2024-09-20T11:00:00", + "id": "734509", + "title": "Building State Holders in Compose with Molecule: A New Approach to Reusable UI Components", + "description": "Are your ViewModels exponentially growing out of control as they manage the state for each of your Composables? This talk introduces Molecule, a new library for creating state holders in Jetpack Compose. We’ll explore how Molecule can simplify presentation state management in Compose, allowing for more flexible and scalable UI development. Attendees will learn how to implement Molecule in their projects and understand its advantages over traditional state management approaches as well as some of the drawbacks to this approach.", + "startsAt": "2024-11-01T13:50:00", + "endsAt": "2024-11-01T14:30:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "6a3de662-ef86-4c62-bb68-2f7ebe607f76", - "name": "Ty Smith" + "id": "6624cb6c-7fc4-4495-a87f-8060e88d7d18", + "name": "Jack Adams" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254878, + "id": 264349, "name": "Introductory and overview" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254891, - "name": "Android" + "id": 264358, + "name": "Jetpack Compose" + }, + { + "id": 264362, + "name": "Flow" + }, + { + "id": 264364, + "name": "Compose" + }, + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264388, + "name": "Libraries" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 49271, + "room": "Glass", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -7225,67 +14359,63 @@ "index": 1 }, { - "id": 49958, - "name": "Fountain Room", + "id": 49272, + "name": "Things", "session": { - "id": "720896", - "title": "SKIE: Narrow the gap between Kotlin and Swift", - "description": "A well-designed KMP library can be used on iOS like any other native framework. However, by default it behaves like an Objective-C framework and loses many modern language features that we're used to in both Kotlin and Swift.\r\n\r\nIn this session, we'll look at the features of SKIE, how to enable it for your multiplatform project, and how to make the most of it. We'll also look at some of the lesser known features that aren't quite documented yet.\r\n\r\nLearn how you can use Kotlin language features that would normally be unavailable for your Swift code and make your code safer.", - "startsAt": "2024-09-20T10:20:00", - "endsAt": "2024-09-20T11:00:00", + "id": "736447", + "title": "You don't have to run it locally! How to run your emulators in the cloud.", + "description": "Probably every Android engineer has tried running Android Emulator on their laptops. Many companies have experience running Android Emulators in CI pipelines for testing. But what does it take to run a highly interactive emulator in the cloud? Why would one need to run an emulator in the cloud?\r\n\r\nAt Uber we know how to build Cloud Development Environments. And now we expanded into Android Emulator space. Providing our engineers with zero setup emulators. \r\n\r\nWe'll walk you through all the moving parts of the emulator setup in a dev environment that sparks joy. Share the challenges we had and opportunities we discovered.", + "startsAt": "2024-11-01T13:50:00", + "endsAt": "2024-11-01T14:30:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "969813cd-0231-4310-9c61-745967bd94c5", - "name": "Tadeas Kriz" + "id": "695e56a6-62a8-496b-9082-8cc4dadec337", + "name": "Petras Vičiūnas" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254878, - "name": "Introductory and overview" + "id": 264350, + "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254886, + "id": 264380, "name": "Tooling" }, { - "id": 254888, - "name": "Cross-Platform" - }, - { - "id": 254892, - "name": "Kotlin" + "id": 264394, + "name": "CI/CD" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49958, - "room": "Fountain Room", + "roomId": 49272, + "room": "Things", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -7295,54 +14425,67 @@ "index": 2 }, { - "id": 52283, - "name": "Sapphire Room", + "id": 53981, + "name": "Stadia", "session": { - "id": "706110", - "title": "Composing ViewModels: Breaking ViewModels into smaller self-contained UI models", - "description": "In early times of Android development we used to have big activities. All view and business logic were being written in activities. Then fragments were introduced so that activities started to become leaner. Then several architectural patterns have started to appear in the Android scene: MVP, MVVM, MVI, etc. While all these were happening, ViewModel like classes started to get bigger and bigger. They have become the new big activities. However, we haven't often considered splitting view models into manageable self-contained granular ones.\r\n\r\nViews are composable and they can be composed to build bigger views. What about introducing smaller ViewModels, namely UI models, and using them to build composable UI models/View Models? \r\n\r\nIn this talk, we will introduce the micro-feature architecture that leverages granular UI models. We'll demonstrate how this approach enables us to create leaner UI hosts by breaking down view models into smaller, self-contained logical UI models. Moreover, we'll explore the distinctions between a UI model and a Jetpack ViewModel. \r\n\r\nWe'll delve into the advantages offered by micro-feature architecture, particularly in terms of single responsibility, composability, reusability, and testability. \r\n\r\nBy the end of the talk, you'll have a comprehensive understanding of how adopting this architecture can significantly enhance your development process and empower you to build high-quality, scalable applications which has highly dynamic contextual screens. \r\n\r\nMicro-feature architecture is used in several screens of 2 big apps in production which are now being used by 10M+ users. We will be also sharing our learnings about using this approach in these apps. ", - "startsAt": "2024-09-20T10:20:00", - "endsAt": "2024-09-20T11:00:00", + "id": "734664", + "title": "Cutting-Edge-to-Edge in Android 15: Using Previews and Testing in Jetpack Compose to Manage Insets.", + "description": "With the advent of Android 15, edge-to-edge design has become the default configuration. Consequently, applications must be capable of accommodating window insets, including the system status bar and navigation bar, as well as supporting drawing under display cutouts and other system UI elements. This presentation will address the most prevalent challenges encountered when supporting such a diverse range of UI configurations. Additionally, it will illustrate how to utilize Android previews and testing with Jetpack Compose to effectively navigate this complexity and guarantee an optimal user experience across all scenarios.", + "startsAt": "2024-11-01T13:50:00", + "endsAt": "2024-11-01T14:30:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "5c3850ee-778a-4904-bd52-a3927ec54dc6", - "name": "Hakan Bagci" + "id": "257fcb0c-cc84-4892-a1f1-54985071e0a6", + "name": "Timo Drick" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [], - "sort": 3 + "categoryItems": [ + { + "id": 264358, + "name": "Jetpack Compose" + }, + { + "id": 264363, + "name": "Testing" + }, + { + "id": 264384, + "name": "Android" + } + ], + "sort": 4 } ], - "roomId": 52283, - "room": "Sapphire Room", + "roomId": 53981, + "room": "Stadia", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -7350,1791 +14493,1820 @@ "isConfirmed": true }, "index": 3 - } - ] - }, - { - "slotStart": "11:00:00", - "rooms": [ - { - "id": 49956, - "name": "Grand Ballroom 1", - "session": { - "id": "44c6e8b1-ee16-454a-814d-fbc46826264a", - "title": "Break", - "description": null, - "startsAt": "2024-09-20T11:00:00", - "endsAt": "2024-09-20T11:15:00", - "isServiceSession": true, - "isPlenumSession": true, - "speakers": [], - "categories": [], - "roomId": 49956, - "room": "Grand Ballroom 1", - "liveUrl": null, - "recordingUrl": null, - "status": null, - "isInformed": false, - "isConfirmed": false - }, - "index": 0 - } - ] - }, - { - "slotStart": "11:15:00", - "rooms": [ + }, { - "id": 49956, - "name": "Grand Ballroom 1", + "id": 53982, + "name": "Nest", "session": { - "id": "722122", - "title": "Modern Paging at Scale: StoreX + Compose", - "description": "Pagination in large-scale mobile applications presents unique challenges. This talk, presented by engineers from Uber and TikTok, introduces StoreX Paging, the Mobile Native Foundation’s KMP solution.\r\n\r\nWe’ll dive deep into StoreX Paging’s architecture, built on unidirectional data flow, Store, Molecule, and Compose. We’ll discuss the results of our preliminary performance benchmarks. We’ll explore new concepts like an “updating item” for independent updates and an “operation pipeline” for on-the-fly data transformations, setting StoreX apart from traditional paging libraries.\r\n\r\nThe talk will cover StoreX Paging’s core APIs and customization points, including launch effects, middleware, side effects, and adaptive fetching strategies. We’ll share implementation details of our default fetching strategy and Compose Runtime integration, demonstrating how we’ve optimized memory management for large datasets. Finally, we’ll discuss performance benchmarking approaches and real-world applications of StoreX Paging at TikTok.", - "startsAt": "2024-09-20T11:15:00", - "endsAt": "2024-09-20T11:55:00", + "id": "704275", + "title": "The state of code coverage for Kotlin", + "description": "Nowadays it’s not anymore a question whether we want to write tests or not. Writing unit tests is not “nice-to-have” it’s an essential part of our everyday job. While that’s already a great step forward, how can we be sure our tests are actually testing something. To check this we all use code coverage tools.\r\n\r\nIn this presentation you will learn how code coverage for Kotlin works, which tools we can use and what are the challenges and limitations of various approaches. You will learn the difference between line, instruction and condition coverage and how to read and interpret coverage results in Kotlin.\r\n\r\nIn the last part of this presentation we will cover the future for Kotlin Code Coverage, what is missing and what can be improved in the future.", + "startsAt": "2024-11-01T13:50:00", + "endsAt": "2024-11-01T14:30:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "370405c2-9e0a-4dca-bcdd-fa300cf4cc2f", - "name": "Matt Ramotar" + "id": "eeb25beb-5d37-4fb7-acac-170357a1d89b", + "name": "Marharyta Nedzelska" }, { - "id": "03c63012-49c4-44eb-af96-0f5360b0d187", - "name": "Ishan Khanna" + "id": "d2ddc9e3-35b6-44a9-8daa-144d89cabaff", + "name": "Evgeny Mandrikov" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254880, - "name": "Advanced" + "id": 264350, + "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254888, - "name": "Cross-Platform" - }, - { - "id": 254892, + "id": 264359, "name": "Kotlin" }, { - "id": 254895, - "name": "Coroutines" - }, - { - "id": 254897, - "name": "Libraries" + "id": 264363, + "name": "Testing" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 53982, + "room": "Nest", "liveUrl": null, "recordingUrl": null, "status": "Accepted", "isInformed": true, "isConfirmed": true }, - "index": 0 + "index": 4 + }, + { + "id": 54703, + "name": "Chromecast", + "session": { + "id": "00e42524-0d24-448a-b3e6-8dc57352c3d7", + "title": "T3 Engineering Leadership Summit (Separate Ticket Required)", + "description": "https://www.t3-summit.com/t3-london", + "startsAt": "2024-11-01T13:50:00", + "endsAt": "2024-11-01T14:30:00", + "isServiceSession": true, + "isPlenumSession": false, + "speakers": [], + "categories": [], + "roomId": 54703, + "room": "Chromecast", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false + }, + "index": 5 }, { - "id": 49957, - "name": "Grand Ballroom 2", + "id": 54706, + "name": "Ask Android", "session": { - "id": "722292", - "title": "K2 compiler in production", - "description": "Sergei will talk about the K2 Kotlin compiler and its use in production environments. K2 is a new addition to the Kotlin compiler toolchain that is designed to improve the performance and efficiency of Kotlin compilation. Although still relatively new, K2 is a powerful tool for Kotlin developers who want to build fast, efficient, and reliable applications. In this talk, we will explore the benefits of using K2 in production environments and discuss how it can help improve the performance of your Kotlin builds. We will discuss the impact of K2 on clean and incremental build speeds and share independent benchmarks from a relatively large codebase at Meta.", - "startsAt": "2024-09-20T11:15:00", - "endsAt": "2024-09-20T11:55:00", + "id": "764398", + "title": "Ask Android! - Compose, WearOS, Platform", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T13:50:00", + "endsAt": "2024-11-01T14:30:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "8466c9d8-0d23-41da-a283-80632a241057", - "name": "Sergei Rybalkin" + "id": "2fb0b020-9fa9-49f1-b4a4-54f71dca57c5", + "name": "Kseniia Shumelchyk" + }, + { + "id": "1dfe9bb5-d9bf-41a9-b7d6-dcfd7953e941", + "name": "Nick Butcher" + }, + { + "id": "e4292032-5462-494b-abfd-3898301476e2", + "name": "Rebecca Franks" + }, + { + "id": "9079b8b4-be1f-4213-a446-6b2bdcad0c04", + "name": "Fung Lam" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 306233, + "name": "Office Hours" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [ - { - "id": 254891, - "name": "Android" - }, - { - "id": 254892, - "name": "Kotlin" - } - ], - "sort": 3 + "categoryItems": [], + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 54706, + "room": "Ask Android", "liveUrl": null, "recordingUrl": null, "status": "Accepted", "isInformed": true, "isConfirmed": true }, - "index": 1 + "index": 6 + } + ] + }, + { + "slotStart": "14:30:00", + "rooms": [ + { + "id": 49270, + "name": "Hangouts", + "session": { + "id": "2cf43443-53aa-439d-b2e3-b3cb3f96c326", + "title": "Break", + "description": null, + "startsAt": "2024-11-01T14:30:00", + "endsAt": "2024-11-01T14:50:00", + "isServiceSession": true, + "isPlenumSession": true, + "speakers": [], + "categories": [], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false + }, + "index": 0 }, { - "id": 49958, - "name": "Fountain Room", + "id": 54706, + "name": "Ask Android", "session": { - "id": "722175", - "title": "Extending kotlin-inject for fun & profit", - "description": "Kotlin-inject is a dependency injection framework for Kotlin Multiplatform. It verifies the dependency graph during compilaton and generates the necessary code to instantiate the object graph at runtime. It offers a similar feature set as Dagger 2 without the limitation of being tied to the JVM and Android only. \r\n\r\nThis talk will offer a short introduction to kotlin-inject and discuss its benefits and downsides and how the framework scales in large, modularized code bases. To close some of the gaps and solve project specific use cases KSP and custom code generators will be used to extend the framework and to give us features similar to the ones Anvil provides for Dagger 2. These practical examples serve as an introduction and blueprint into the meta-programming world to reduce boilerplate and simplify patterns in your code base.", - "startsAt": "2024-09-20T11:15:00", - "endsAt": "2024-09-20T11:55:00", + "id": "764399", + "title": "Ask Android! - Compose, WearOS, Platform", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T14:30:00", + "endsAt": "2024-11-01T14:50:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "646237bf-ccc5-43fa-a659-0b361b08d651", - "name": "Ralf Wondratschek" + "id": "2fb0b020-9fa9-49f1-b4a4-54f71dca57c5", + "name": "Kseniia Shumelchyk" + }, + { + "id": "1dfe9bb5-d9bf-41a9-b7d6-dcfd7953e941", + "name": "Nick Butcher" + }, + { + "id": "9079b8b4-be1f-4213-a446-6b2bdcad0c04", + "name": "Fung Lam" + }, + { + "id": "c16c95a9-0e07-4838-9cba-5d041aee4d14", + "name": "Rebecca Franks" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 306233, + "name": "Office Hours" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [ - { - "id": 254892, - "name": "Kotlin" - }, - { - "id": 254896, - "name": "Dagger" - }, - { - "id": 254897, - "name": "Libraries" - }, - { - "id": 254904, - "name": "Modularization" - } - ], - "sort": 3 + "categoryItems": [], + "sort": 4 } ], - "roomId": 49958, - "room": "Fountain Room", + "roomId": 54706, + "room": "Ask Android", "liveUrl": null, "recordingUrl": null, "status": "Accepted", "isInformed": true, "isConfirmed": true }, - "index": 2 - }, + "index": 6 + } + ] + }, + { + "slotStart": "14:50:00", + "rooms": [ { - "id": 52283, - "name": "Sapphire Room", + "id": 49270, + "name": "Hangouts", "session": { - "id": "721651", - "title": "Coroutines Internals: How The Sausage is Made", - "description": "This talk is for the curious developer who uses coroutines and wants to understand their inner workings. What does it mean to be a lightweight thread? How are suspensions implemented? What is the role of the compiler in the process? \r\n\r\nWe'll talk about continuations, thread management, integration points with Android, and we'll even re-implement common suspendable functions. This will be a deep dive, expect to read code, some of which was not meant for most developers to see. ", - "startsAt": "2024-09-20T11:15:00", - "endsAt": "2024-09-20T11:55:00", + "id": "693397", + "title": "Crime Scene InvestiGITor", + "description": "THERE HAS BEEN A MURDER!\r\n...\r\n(Or whatever the code version of a murder is... like breaking unit tests, a bug maybe?... I dunno!)\r\n\r\nTogether, we will learn how to become a professional and revered investiGITor, who will be able to sniff out and solve any version control offence with the ease and panache of a seasoned detective!\r\n\r\nVersion control software is often a mysterious black-box that we HAVE TO interact with in order to successfully collaborate with others. But what if it doesn't need to be a confusing & complicated enigma?\r\n\r\nYou will learn to probe into the dark recesses of Git and understand its inner workings by learning how to carry out many tasks that you will undoubtedly need to perform at some point in your career.\r\n\r\nFor example:\r\n* Ever needed to safely remove a secret that you accidentally stored in the repository?\r\n* Ever had your app break, not know why, and then needed to quickly hunt down the exact commit where a bug was introduced?\r\n* Ever needed to travel back in time, through history, to stop a crime before it even happens...(sort of)?\r\n\r\n...All these things and a bunch more useful & interesting, lesser-known ways to become a masterful git detective and truly understand the most important tool in a developer's arsenal.\r\n\r\nSo come have a little fun with me in this talk, bring the bugs to justice, solve the case of the naughty commit & become a hero by defending the integrity of your codebase!", + "startsAt": "2024-11-01T14:50:00", + "endsAt": "2024-11-01T15:30:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "c6489aef-00e1-476b-a58a-000f3b05bb95", - "name": "Philippe Breault" + "id": "5f8860b3-e669-4717-91bf-ddceb872fd55", + "name": "Benjamin Kadel" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254892, - "name": "Kotlin" + "id": 264368, + "name": "Techniques & Guides" }, { - "id": 254895, - "name": "Coroutines" + "id": 264369, + "name": "Other" + }, + { + "id": 264380, + "name": "Tooling" + }, + { + "id": 264394, + "name": "CI/CD" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 52283, - "room": "Sapphire Room", + "roomId": 49270, + "room": "Hangouts", "liveUrl": null, "recordingUrl": null, "status": "Accepted", "isInformed": true, "isConfirmed": true }, - "index": 3 - } - ] - }, - { - "slotStart": "11:55:00", - "rooms": [ - { - "id": 49956, - "name": "Grand Ballroom 1", - "session": { - "id": "93a2c0f8-c300-4025-8ceb-a5ff4773177a", - "title": "Break", - "description": null, - "startsAt": "2024-09-20T11:55:00", - "endsAt": "2024-09-20T12:10:00", - "isServiceSession": true, - "isPlenumSession": true, - "speakers": [], - "categories": [], - "roomId": 49956, - "room": "Grand Ballroom 1", - "liveUrl": null, - "recordingUrl": null, - "status": null, - "isInformed": false, - "isConfirmed": false - }, "index": 0 - } - ] - }, - { - "slotStart": "12:10:00", - "rooms": [ + }, { - "id": 49956, - "name": "Grand Ballroom 1", + "id": 49271, + "name": "Glass", "session": { - "id": "720754", - "title": "Building Modern Responsive Widgets with Jetpack Glance", - "description": "In this lightning talk, we’ll explore how to get started with building responsive widgets using Jetpack Glance, a modern toolkit designed to simplify and enhance the widget development experience on Android. We’ll discuss the key differences between Jetpack Glance and RemoteViews, providing a clear pathway for migrating existing widgets to this new framework. Learn how to leverage the strengths of both Jetpack Glance and RemoteViews simultaneously, ensuring a smooth transition and backward compatibility. Additionally, we'll cover best practices for testing your widgets to ensure they perform flawlessly on a wide range of devices. Join us to discover how Jetpack Glance can revolutionize your approach to building widgets on Android.", - "startsAt": "2024-09-20T12:10:00", - "endsAt": "2024-09-20T12:30:00", + "id": "720685", + "title": "Why is adaptive layout a nightmare?", + "description": "Dive into the captivating realm of Android UI development in this session where we will share in-depth expertise on designing versatile user interfaces. Together, we will explore the complex challenges of organizing and building UI components, providing unique insights into crafting seamless user experiences across a variety of devices such as phones, foldables, and tablets.\r\n\r\nWhile Google advocates for the use of adaptive layout, we will unveil the often underestimated nuances, shed practical light on overcoming obstacles you’ll meet down the road and help you create truly adaptive Android applications.", + "startsAt": "2024-11-01T14:50:00", + "endsAt": "2024-11-01T15:30:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "910f395b-9d2b-4f7d-8ab4-c4008bd9f0c4", - "name": "Jonathan Petit-Frere" + "id": "6520ad1e-8c4e-45c1-b34d-91ca73db27fe", + "name": "Gerard Paligot" + }, + { + "id": "81f9ecbf-c08c-48c7-850f-1e79e1439867", + "name": "David Ta" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254878, + "id": 264349, "name": "Introductory and overview" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254881, - "name": "Lightning talk" + "id": 264354, + "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254891, - "name": "Android" + "id": 264358, + "name": "Jetpack Compose" }, { - "id": 254892, + "id": 264359, "name": "Kotlin" }, { - "id": 254897, - "name": "Libraries" + "id": 264364, + "name": "Compose" + }, + { + "id": 264367, + "name": "Foldables" + }, + { + "id": 264377, + "name": "Modern Android Development" + }, + { + "id": 264384, + "name": "Android" + }, + { + "id": 264390, + "name": "UI/UX" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 49271, + "room": "Glass", "liveUrl": null, "recordingUrl": null, "status": "Accepted", "isInformed": true, "isConfirmed": true }, - "index": 0 + "index": 1 }, { - "id": 49957, - "name": "Grand Ballroom 2", + "id": 49272, + "name": "Things", "session": { - "id": "671488", - "title": "How we automated code maintenance and you can too!", - "description": "Let's face it: as developers, we dedicate a third of our time to code maintenance, which includes tasks such as upgrading dependencies, addressing security vulnerabilities, and removing obsolete code. This is tedious and repetitive. Neglecting regular maintenance can lead to costly outcomes, including unexpected crashes and it makes the codebase more difficult to understand and evolve.\r\n\r\nHowever, automation of these tasks is not always straightforward. Existing tools such as security scanners, feature flag systems warn you about the issues or obsolete code but fall short of automatically rectifying these problems. Tools that upgrade dependencies merely increase the version number, leaving engineers to handle any API compatibility issues. Automating code changes is hard, and the polyglot nature of modern development makes it harder.\r\n\r\nIn this talk, we will delve into code rewriting techniques such as pattern matching, program analysis, and AI. We will illustrate how we leveraged the complementing power of these tools to generate over 1800 automated pull requests, eliminating or refactoring more than 500,000 lines of code. In this talk, you will also learn how to harness the power of these tools to drive down tech debt, ensuring your apps are not only functional but also future-proof.", - "startsAt": "2024-09-20T12:10:00", - "endsAt": "2024-09-20T12:30:00", + "id": "734218", + "title": "Why WhatsApp uses ListView", + "description": "Using outdated ListView on one of the most used screens screens sounds outrageous. Will talk about technical and organisational reasons why and how WhatsApp still uses ListView and what are the challenges preventing migration. ", + "startsAt": "2024-11-01T14:50:00", + "endsAt": "2024-11-01T15:30:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "a09470ca-e749-4fe1-94cd-03e1d82a596d", - "name": "Gautam Korlam" - }, - { - "id": "98e9d194-970d-4836-b451-0c7f62663c37", - "name": "Lazaro Clapp" + "id": "e11a53fd-1cfb-4930-9dfa-42187e94d869", + "name": "Hadi Tok" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254881, - "name": "Lightning talk" + "id": 264354, + "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254886, - "name": "Tooling" - }, - { - "id": 254889, - "name": "AI/ML" + "id": 264360, + "name": "Soft Skills" }, { - "id": 254900, - "name": "Security" + "id": 264384, + "name": "Android" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 49272, + "room": "Things", "liveUrl": null, "recordingUrl": null, "status": "Accepted", "isInformed": true, "isConfirmed": true }, - "index": 1 + "index": 2 }, { - "id": 49958, - "name": "Fountain Room", + "id": 53981, + "name": "Stadia", "session": { - "id": "721044", - "title": "Mobile App Security : Threat Landscape : Attack & Defend, Defend & Monitor, Monitor & Respond", - "description": "The Mobile Threat Landscape is increasing rapidly and Software Engineering and Product Owners are scrambling to close security gaps. This lightning talk will introduce you to the Top Mobile Attacks, OWASP Top Ten Mobile Vulnerabilities as well as Tools and Techniques to make your applications compliant with Cybersecurity Standards like California Consumer Privacy Act.", - "startsAt": "2024-09-20T12:10:00", - "endsAt": "2024-09-20T12:30:00", + "id": "741888", + "title": "Monetizing Your Side Project to $1k in Monthly Revenue and Beyond", + "description": "Only ~17% of apps reach $1k in monthly revenue. Learn best practices on crossing $1k MRR and beyond from personal experience building two profitable apps and advice from other successful app founders.", + "startsAt": "2024-11-01T14:50:00", + "endsAt": "2024-11-01T15:30:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "4990e3a2-c183-44c2-8aec-ff76ac75af8e", - "name": "Keir Storrie" + "id": "0e4f3abe-cc6c-409a-8f34-e346f23c0cc4", + "name": "Jeffrey Bunn" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254878, - "name": "Introductory and overview" + "id": 264350, + "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254881, - "name": "Lightning talk" + "id": 264354, + "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254886, - "name": "Tooling" + "id": 264360, + "name": "Soft Skills" }, { - "id": 254887, - "name": "CI/CD" + "id": 264368, + "name": "Techniques & Guides" }, { - "id": 254889, - "name": "AI/ML" + "id": 264369, + "name": "Other" }, { - "id": 254900, - "name": "Security" + "id": 264381, + "name": "Cross-Platform" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49958, - "room": "Fountain Room", + "roomId": 53981, + "room": "Stadia", "liveUrl": null, "recordingUrl": null, "status": "Accepted", "isInformed": true, "isConfirmed": true }, - "index": 2 + "index": 3 }, { - "id": 52283, - "name": "Sapphire Room", + "id": 53982, + "name": "Nest", "session": { - "id": "716138", - "title": "Mobile Wallet Technology - Harnessing Apple VAS and Google Smart TAP for Innovative App Development", - "description": "In this session, we delve into the dynamic landscape of digital wallet technology and explore how Zebra Value Added Services (VAS) can revolutionize your applications. We provide an overview of the technology, potential use cases and details of how your android applications can take advantage of both Apple VAS and Google Wallet technologies ", - "startsAt": "2024-09-20T12:10:00", - "endsAt": "2024-09-20T12:30:00", + "id": "719034", + "title": "Navigation in a Multiplatform World: Choosing the Right Framework for your App", + "description": "Navigation in mobile, desktop, and web applications is such a fundamental part of how we structure our architecture. In order to both obtain functional clarity, and abstraction from platform level implementation.\r\n\r\nFor a long time, there have been options available specific to each platform, and even options part of the platform framework itself. Though it can be difficult to find the right option for platform-agnostic code, ensuring consistency. Some go one step further, providing an opinionated guide on how to architecture your application.\r\n\r\nIn this talk, I'll evaluate the options available, how they differ, and to what type of applications they are best suited. Including how to get started with them, and the best practice guidelines on how to get the most out of them, for your application.", + "startsAt": "2024-11-01T14:50:00", + "endsAt": "2024-11-01T15:30:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "f50b0148-337b-4213-b22a-48b8681e7486", - "name": "Marek Trusinski" + "id": "10659767-356c-4cd5-ba9c-12cec7a3ce79", + "name": "Ash Davies" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254878, - "name": "Introductory and overview" + "id": 264351, + "name": "Advanced" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254881, - "name": "Lightning talk" + "id": 264354, + "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [], - "sort": 3 + "categoryItems": [ + { + "id": 264359, + "name": "Kotlin" + }, + { + "id": 264380, + "name": "Tooling" + } + ], + "sort": 4 } ], - "roomId": 52283, - "room": "Sapphire Room", + "roomId": 53982, + "room": "Nest", "liveUrl": null, "recordingUrl": null, "status": "Accepted", "isInformed": true, "isConfirmed": true }, - "index": 3 - } - ] - }, - { - "slotStart": "12:30:00", - "rooms": [ + "index": 4 + }, { - "id": 49956, - "name": "Grand Ballroom 1", + "id": 54703, + "name": "Chromecast", "session": { - "id": "f48d711a-2db1-44c1-9dcc-7561744354f8", - "title": "Lunch", - "description": null, - "startsAt": "2024-09-20T12:30:00", - "endsAt": "2024-09-20T13:40:00", + "id": "f431dc83-3136-4892-8c38-b289aac3710f", + "title": "T3 Engineering Leadership Summit (Separate Ticket Required)", + "description": "https://www.t3-summit.com/t3-london", + "startsAt": "2024-11-01T14:50:00", + "endsAt": "2024-11-01T15:30:00", "isServiceSession": true, - "isPlenumSession": true, + "isPlenumSession": false, "speakers": [], "categories": [], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 54703, + "room": "Chromecast", "liveUrl": null, "recordingUrl": null, "status": null, "isInformed": false, "isConfirmed": false }, - "index": 0 - } - ] - }, - { - "slotStart": "13:40:00", - "rooms": [ + "index": 5 + }, { - "id": 49956, - "name": "Grand Ballroom 1", + "id": 54706, + "name": "Ask Android", "session": { - "id": "706390", - "title": "Building a performant and privacy-conscious screen capture library for Compose", - "description": "User feedback and crash reports often fall short in providing a complete understanding of user behavior and bug causes. Supplementing these reports with a series of screen captures depicting the user journey can prove invaluable for any comprehensive analysis.\r\n\r\nLearn about a novel approach for implementing a screen capture library that is safe to run in production:\r\n✅ Does not impact app responsiveness\r\n✅ Requires minimal disk and network usage\r\n✅ Respects user privacy\r\n\r\nEven though this is reasonably trivial to do for standard Android views, Jetpack Compose introduces a unique set of challenges for external libraries to efficiently observe the view hierarchy and react to recomposition changes. Join us as we dig deep into the strategies used to overcome these obstacles in this session.", - "startsAt": "2024-09-20T13:40:00", - "endsAt": "2024-09-20T14:20:00", + "id": "764400", + "title": "Ask Android! - Compose, WearOS, Platform", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T14:50:00", + "endsAt": "2024-11-01T15:30:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "7d34e53f-e477-4218-9f03-cc372425ac0e", - "name": "Miguel Juarez Lopez" + "id": "b99dc2e2-df83-4045-a5cb-c4d7dea5db1e", + "name": "Halil Ozercan" + }, + { + "id": "2fb0b020-9fa9-49f1-b4a4-54f71dca57c5", + "name": "Kseniia Shumelchyk" + }, + { + "id": "9079b8b4-be1f-4213-a446-6b2bdcad0c04", + "name": "Fung Lam" + }, + { + "id": "b5b73a2f-d57d-4a42-b787-a93f4ca9ba79", + "name": "Simona Milanovic" + }, + { + "id": "b3baa5b6-3c85-4a36-97c5-9a252f887ae4", + "name": "Jelle Fresen" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 306233, + "name": "Office Hours" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [], - "sort": 3 + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 54706, + "room": "Ask Android", "liveUrl": null, "recordingUrl": null, "status": "Accepted", "isInformed": true, "isConfirmed": true }, + "index": 6 + } + ] + }, + { + "slotStart": "15:30:00", + "rooms": [ + { + "id": 49270, + "name": "Hangouts", + "session": { + "id": "c1cc8017-64f6-44c1-9c63-ac4116e75ea0", + "title": "Break", + "description": null, + "startsAt": "2024-11-01T15:30:00", + "endsAt": "2024-11-01T15:45:00", + "isServiceSession": true, + "isPlenumSession": true, + "speakers": [], + "categories": [], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false + }, "index": 0 }, { - "id": 49957, - "name": "Grand Ballroom 2", + "id": 54706, + "name": "Ask Android", "session": { - "id": "718114", - "title": "Declarative Gradle on Android", - "description": "Declarative Gradle is a project that targets better isolation of concern and expressing any build clearly and understandably. It is our key initiative towards improving the developer experience and maintainability of Gradle projects. Declarative Gradle will feature first class support for the Android ecosystem including AGP, KGP, and Android Studio integration.\r\n\r\nIn this presentation, we will discuss the current state of Declarative Gradle for Android development. We will preview the proposed configuration language, examples of Android projects, and integration with Android Studio. We will discuss our future plans and the Declarative Gradle roadmap. We are seeking early feedback from Android software developers.", - "startsAt": "2024-09-20T13:40:00", - "endsAt": "2024-09-20T14:20:00", + "id": "764404", + "title": "Ask Android! - Compose, Gemini in AS, KMP", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T15:30:00", + "endsAt": "2024-11-01T15:45:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "dc1c88ef-dbfd-4b41-a567-7ce8e7645420", - "name": "Inaki Villar" + "id": "b99dc2e2-df83-4045-a5cb-c4d7dea5db1e", + "name": "Halil Ozercan" }, { - "id": "89694c9d-5de0-4f39-a50a-ed48d6eb56ca", - "name": "Nelson Osacky" - } - ], - "categories": [ - { - "id": 72054, - "name": "Level", - "categoryItems": [ - { - "id": 254879, - "name": "Intermediate" - } - ], - "sort": 0 + "id": "b5b73a2f-d57d-4a42-b787-a93f4ca9ba79", + "name": "Simona Milanovic" }, { - "id": 72055, - "name": "Session format", - "categoryItems": [ - { - "id": 254882, - "name": "Session" - } - ], - "sort": 1 + "id": "b3baa5b6-3c85-4a36-97c5-9a252f887ae4", + "name": "Jelle Fresen" }, { - "id": 72056, - "name": "Tags", - "categoryItems": [ - { - "id": 254886, - "name": "Tooling" - }, - { - "id": 254891, - "name": "Android" - }, - { - "id": 254899, - "name": "Gradle" - } - ], - "sort": 3 - } - ], - "roomId": 49957, - "room": "Grand Ballroom 2", - "liveUrl": null, - "recordingUrl": null, - "status": "Accepted", - "isInformed": true, - "isConfirmed": true - }, - "index": 1 - }, - { - "id": 49958, - "name": "Fountain Room", - "session": { - "id": "732937", - "title": "Build adaptive apps with Jetpack Compose", - "description": "In this workshop you will learn how to build adaptive apps for phones, tablets, and foldables, and how they enhance reachability with Jetpack Compose. You will also learn best practices for using Material 3 components and theming. You will explore how to use and think about adaptability when using Jetpack Compose. You build an application, called Reply, that shows you how to implement adaptability for all kinds of screens, and how adaptability and reachability work together to give users an optimal experience.", - "startsAt": "2024-09-20T13:40:00", - "endsAt": "2024-09-20T14:20:00", - "isServiceSession": false, - "isPlenumSession": false, - "speakers": [ + "id": "7280b9e7-ddf7-4cfb-b85b-1e998d851f66", + "name": "Marcello Galhardo" + }, { - "id": "327f56b4-c631-4489-9590-37bdfc856e3a", - "name": "Miguel Montemayor" + "id": "eb4483f1-306b-447d-9888-648ec0fc0018", + "name": "Chris Sinco" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254883, - "name": "Workshop" + "id": 306233, + "name": "Office Hours" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [ - { - "id": 254891, - "name": "Android" - } - ], - "sort": 3 + "categoryItems": [], + "sort": 4 } ], - "roomId": 49958, - "room": "Fountain Room", + "roomId": 54706, + "room": "Ask Android", "liveUrl": null, "recordingUrl": null, "status": "Accepted", "isInformed": true, "isConfirmed": true }, - "index": 2 - }, + "index": 6 + } + ] + }, + { + "slotStart": "15:45:00", + "rooms": [ { - "id": 52283, - "name": "Sapphire Room", + "id": 49270, + "name": "Hangouts", "session": { - "id": "702926", - "title": "Math and Modeling for Camera Developers", - "description": "Abstract: \r\nModern cameras are sophisticated devices that rely on a combination of intricate hardware and complex software algorithms to produce high-quality images. Understanding the underlying mathematics and modeling techniques is crucial for camera developers to optimize performance, correct imperfections, and deliver exceptional image quality. The Camera2 API exposes many of these details and developers would benefit significantly by knowing how to work with them.\r\n\r\nThis talk will delve into :\r\n - Camera intrinsics and extrinsics, which describe the geometric relationship between the camera and the scene.\r\n- Lens distortion correction using the Brown-Conrady model.\r\n- Meaning of various maps exposed in the Camera2 API such as hot pixel map, lens shading map\r\n- and more\r\n\r\nTarget Audience:\r\n\r\nAndroid developers seeking to build or enhance camera-centric applications. Especially those who are building apps seeking to use cameras on Android to understand the world around them, eg: AR based apps\r\n\r\nTakeaways:\r\nBy the end of the talk you will have a good understanding of the mathematical models needed to process images captured by your Android device's camera and use them for innovative applications. \r\n\r\n", - "startsAt": "2024-09-20T13:40:00", - "endsAt": "2024-09-20T14:20:00", + "id": "717692", + "title": "Level up your SDKs with KMP - no rewrite required!", + "description": "There are several compelling reasons to explore adding Kotlin Multiplatform (KMP) to your existing SDKs or libraries. The main one - to reduce development time and cut maintenance costs by having a single codebase for shared logic.\r\n\r\nBut what if you already have a suite of tried and tested native SDKs, and want to simply add KMP capabilities to broaden your audience, without impacting existing customers? Or perhaps you’re adding functionality on top of your SDKs and want to build it once instead of duplicating it in 2, 3, or 4 programming languages?\r\n\r\nI’ll share our experiences at PubNub with bringing three of our realtime messaging SDKs - TypeScript, Swift and JVM, under a unified KMP API. I’ll also show how this foundation then enabled us to build and ship a new Chat SDK on top, built with KMP from the ground up and targeting all 3 platforms.\r\n\r\nThe talk will cover the initial requirements phase, the architectural decisions, and the tradeoffs that we had to make to finally land on KMP as the chosen solution.\r\n\r\nWe'll then delve into practical code examples and solutions (as well as quite a few WTF moments!) that allowed us to build the Chat SDK without affecting our existing users, and even improved the quality and consistency of our native SDKs.\r\n\r\n", + "startsAt": "2024-11-01T15:45:00", + "endsAt": "2024-11-01T16:25:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "1d0d817a-c0aa-4ca5-9d21-ad67fac74a81", - "name": "Jayant Chowdhary" - }, - { - "id": "1eae811c-9c84-4516-b13f-92397d260ded", - "name": "Kailiang Chen" - }, - { - "id": "5b1f8159-fd45-4e94-b4a9-a6632c462ebb", - "name": "Avichal Rakesh" + "id": "ffd6d0b9-9615-4f5a-9f58-6dcf3d4acb3b", + "name": "Wojtek Kaliciński" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254880, + "id": 264351, "name": "Advanced" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254888, - "name": "Cross-Platform" + "id": 264359, + "name": "Kotlin" }, { - "id": 254890, - "name": "AR/VR" + "id": 264361, + "name": "KMP" }, { - "id": 254891, - "name": "Android" + "id": 264374, + "name": "API" + }, + { + "id": 264381, + "name": "Cross-Platform" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 52283, - "room": "Sapphire Room", + "roomId": 49270, + "room": "Hangouts", "liveUrl": null, "recordingUrl": null, "status": "Accepted", "isInformed": true, "isConfirmed": true }, - "index": 3 - } - ] - }, - { - "slotStart": "14:20:00", - "rooms": [ - { - "id": 49956, - "name": "Grand Ballroom 1", - "session": { - "id": "a1c70ab9-f9dd-4fd9-bbae-06cbf0320e3a", - "title": "Break", - "description": null, - "startsAt": "2024-09-20T14:20:00", - "endsAt": "2024-09-20T14:35:00", - "isServiceSession": true, - "isPlenumSession": true, - "speakers": [], - "categories": [], - "roomId": 49956, - "room": "Grand Ballroom 1", - "liveUrl": null, - "recordingUrl": null, - "status": null, - "isInformed": false, - "isConfirmed": false - }, "index": 0 - } - ] - }, - { - "slotStart": "14:35:00", - "rooms": [ + }, { - "id": 49956, - "name": "Grand Ballroom 1", + "id": 49271, + "name": "Glass", "session": { - "id": "725067", - "title": "Cross-platform Animations with Rive", - "description": "Learn how Duolingo builds cross platform animated features with Rive. We'll introduce Rive, some of its applications across Duolingo for Android, and how to use Rive - including Compose interaction!", - "startsAt": "2024-09-20T14:35:00", - "endsAt": "2024-09-20T14:55:00", + "id": "730918", + "title": "Upgrading Meta's Kotlin Infrastructure to K2: A Migration Journey", + "description": "In this talk, we will share our experience migrating Meta's Kotlin infrastructure from K1 to K2. We will discuss the challenges we faced during the migration process, including differences in error handling between K1 and K2, and how we overcame them. We will also cover the process of migrating compiler plugins, including overview of plugins we migrated and the solutions we implemented to overcome challenges. Finally, we will discuss our experience with the KSP2.0 migration.\r\nThis talk will provide valuable insights for developers and teams considering a migration to K2, as well as those interested in learning more about the challenges and solutions involved in large-scale migrations.\r\n\r\nKeywords: K2, Kotlin 2.0, Kotlin compiler plugins", + "startsAt": "2024-11-01T15:45:00", + "endsAt": "2024-11-01T16:25:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "8d1c299e-adc3-4c21-a461-5fbd43cba26e", - "name": "Judy Lin" + "id": "33801296-8d41-4df0-b729-c0461afa1be2", + "name": "Ruslan Latypov" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254878, - "name": "Introductory and overview" + "id": 264351, + "name": "Advanced" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254881, - "name": "Lightning talk" + "id": 264354, + "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254888, - "name": "Cross-Platform" + "id": 264359, + "name": "Kotlin" }, { - "id": 254897, - "name": "Libraries" + "id": 264374, + "name": "API" }, { - "id": 254902, - "name": "UI/UX" + "id": 264380, + "name": "Tooling" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 49271, + "room": "Glass", "liveUrl": null, "recordingUrl": null, "status": "Accepted", "isInformed": true, "isConfirmed": true }, - "index": 0 + "index": 1 }, { - "id": 49957, - "name": "Grand Ballroom 2", + "id": 49272, + "name": "Things", "session": { - "id": "721974", - "title": "\"Bundle\" Up and Save: Powering Room with Bundled SQLite", - "description": "As part of the Room KMP release, a less known library was significantly updated to support Room KMP, androidx.sqlite. The library was transformed to be beyond a simple backwards compatible Jetpack library for the Android platform. Via its new 'driver' APIs, it offers the building blocks to create low-level integrations that enables Room to communicate with the desired SQL engine. This lighting talk will go through the APIs, what it enables; such as Bundled SQLite, and how you could use it in your Android applications to provide extra functionality that the platform or Room does not offer out of the box.", - "startsAt": "2024-09-20T14:35:00", - "endsAt": "2024-09-20T14:55:00", + "id": "731808", + "title": "Streamlining Permission Request in Jetpack Compose", + "description": "Managing Android permission requests often involve considerable boilerplate code, and while Jetpack Compose offers many advantages, it has not simplified this aspect. It can add complexity if not properly designed. This talk will demonstrate an efficient method for creating a reusable Android permission request flow with minimal boilerplate using Jetpack Compose. By the end of this session, you will learn how to implement a reusable permission request handler for single and multiple permissions. Additionally, you'll discover how to provide custom permission rationale messages and design a custom permission request UI with minimal boilerplates, enhancing developer experience and application usability.\r\n\r\nKey Takeaways\r\n1. Understanding Permission Management in Android: A quick overview of the challenges in handling permission requests within the context of Android development.\r\n\r\n2. Identifying Boilerplate in Permission Requests: Examination of the typical boilerplate code associated with permission requests in Jetpack Compose.\r\n\r\n3. Efficient Permission Handling: Step-by-step guide on creating a reusable permission request handler for single and multiple permissions.\r\n\r\n4. Customization Techniques: How to implement custom permission rationale messages and design custom UI components for permission requests.", + "startsAt": "2024-11-01T15:45:00", + "endsAt": "2024-11-01T16:25:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "695a18df-c473-408f-bdfb-b0c594c8c50d", - "name": "Daniel Santiago Rivera" + "id": "3b95e79a-0e6b-4fcd-b44e-023fa3dfd7cd", + "name": "Mayowa Egbewunmi" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254881, - "name": "Lightning talk" + "id": 264354, + "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254891, - "name": "Android" - }, - { - "id": 254892, - "name": "Kotlin" - }, - { - "id": 254897, - "name": "Libraries" + "id": 264358, + "name": "Jetpack Compose" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 49272, + "room": "Things", "liveUrl": null, "recordingUrl": null, "status": "Accepted", "isInformed": true, "isConfirmed": true }, - "index": 1 + "index": 2 }, { - "id": 49958, - "name": "Fountain Room", + "id": 53981, + "name": "Stadia", "session": { - "id": "720124", - "title": "Sneaky SDKs: Things You Didn't Know Third-Party SDKs Could Do", - "description": "In the world of Android development, third-party SDKs are both a curse and a blessing. They offer essential functionalities, saving us from reinventing the wheel, but they can also introduce unexpected behaviors and vulnerabilities. This talk will uncover a few hidden powers of low level Android APIs and demonstrate how they can be both helpful and harmful.", - "startsAt": "2024-09-20T14:35:00", - "endsAt": "2024-09-20T14:55:00", + "id": "735413", + "title": "Let's build a performance measuring tool from scratch", + "description": "Did you know you can measure the performance of production apps? Android is based on Linux, so that gives us a lot of power!\r\nThrough live-coding, let's have fun exploring system files, low-level events and the Android source code to see how we can gather metrics (FPS, CPU, RAM) on your favourite apps!\r\nYou'll gain more insights on how Android work under the hood and why measuring performance can be crucial but complex.", + "startsAt": "2024-11-01T15:45:00", + "endsAt": "2024-11-01T16:25:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "71373c0f-53e8-4020-8d16-1bdfe603c3c7", - "name": "Markus Hintersteiner" + "id": "ae4dc258-34a6-462c-b778-807da7d25de4", + "name": "Alexandre Moureaux" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, - "name": "Intermediate" + "id": 264351, + "name": "Advanced" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254881, - "name": "Lightning talk" + "id": 264354, + "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254891, - "name": "Android" + "id": 264380, + "name": "Tooling" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49958, - "room": "Fountain Room", + "roomId": 53981, + "room": "Stadia", "liveUrl": null, "recordingUrl": null, "status": "Accepted", "isInformed": true, "isConfirmed": true }, - "index": 2 + "index": 3 }, { - "id": 52283, - "name": "Sapphire Room", + "id": 53982, + "name": "Nest", "session": { - "id": "693098", - "title": "The Critical Need for More Android Mentors", - "description": "Android Development can be considered an untraditional software discipline. While many young professionals are drawn to trendy positions like AI and Blockchain Engineering or traditional roles such as Backend and Web Development, Mobile is becoming less and less popular in the modern workspace. Many universities do not adequately educate for these roles, so it is up to us to inspire younger engineers to join our field. This session will overview the history of mobile development as a professional career, and the current position of the role amongst others. It will also discuss the benefits of becoming a mentor, and I'll share some incredibly rewarding moments and lessons I've taken from my time teaching Android.", - "startsAt": "2024-09-20T14:35:00", - "endsAt": "2024-09-20T14:55:00", + "id": "709201", + "title": "Passwordless Future !!", + "description": "Passwords: no one likes them.\r\n\r\nWith so many requirements—capital letters, numbers, symbols—and the challenge of remembering a strong one, passwords often become more of a hassle than a security measure. Even the most complex passwords can be vulnerable to hackers who can guess, steal, or trick you into revealing them.\r\n\r\nThankfully, a better solution exists, which we will explore in today’s session: Passkeys.\r\n\r\nWhat You'll Learn:\r\n- An introduction to Passkeys and the primary reasons for their implementation.\r\n- Integration of Passkeys and demos into Android apps using the credential API.\r\n- How users can sign in to apps and websites using biometric sensors (fingerprint or facial recognition), PINs, or patterns, creating a seamless sign-in experience that eliminates the need for usernames or passwords.\r\n- Best practices for implementing Passkeys in your applications to maximize both security and user convenience.\r\n- Case studies and examples of successful Passkey integration in real-world applications.\r\n\r\nTarget Audience:\r\nThis talk is ideal for mobile developers of all levels who are interested in:\r\n- Smoothing the login experience for their users across various platforms.\r\n- Enhancing security for their apps.\r\n- Staying ahead with modern authentication methods to improve user retention and satisfaction.", + "startsAt": "2024-11-01T15:45:00", + "endsAt": "2024-11-01T16:25:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "45f252dd-d465-4a2f-ade2-a405d8ff73d0", - "name": "Dan Peluso" + "id": "0037b354-6bd4-46e3-b1e6-d84916eea0d6", + "name": "Ayushi Gupta" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254878, - "name": "Introductory and overview" + "id": 264350, + "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254881, - "name": "Lightning talk" + "id": 264354, + "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254891, + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264377, + "name": "Modern Android Development" + }, + { + "id": 264384, "name": "Android" }, { - "id": 254892, - "name": "Kotlin" + "id": 264385, + "name": "Design" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 52283, - "room": "Sapphire Room", + "roomId": 53982, + "room": "Nest", "liveUrl": null, "recordingUrl": null, "status": "Accepted", "isInformed": true, "isConfirmed": true }, - "index": 3 - } - ] - }, - { - "slotStart": "14:55:00", - "rooms": [ + "index": 4 + }, { - "id": 49956, - "name": "Grand Ballroom 1", + "id": 54703, + "name": "Chromecast", "session": { - "id": "76768ccf-becd-41f5-8034-2be3145f839a", - "title": "Break", - "description": null, - "startsAt": "2024-09-20T14:55:00", - "endsAt": "2024-09-20T15:25:00", + "id": "e4ce5c39-ca56-4b02-854f-ad4c89ea88da", + "title": "T3 Engineering Leadership Summit (Separate Ticket Required)", + "description": "https://www.t3-summit.com/t3-london", + "startsAt": "2024-11-01T15:45:00", + "endsAt": "2024-11-01T16:25:00", "isServiceSession": true, - "isPlenumSession": true, + "isPlenumSession": false, "speakers": [], "categories": [], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 54703, + "room": "Chromecast", "liveUrl": null, "recordingUrl": null, "status": null, "isInformed": false, "isConfirmed": false }, - "index": 0 - } - ] - }, - { - "slotStart": "15:25:00", - "rooms": [ + "index": 5 + }, { - "id": 49956, - "name": "Grand Ballroom 1", + "id": 54706, + "name": "Ask Android", "session": { - "id": "722149", - "title": "Building a Compose-idiomatic CameraX Viewfinder: A Deep Dive", - "description": "The CameraX library offers powerful tools for building camera features in Android apps, but its integration with Jetpack Compose can be challenging. In this session we'll retrace our steps in creating a Compose-idiomatic Composable for the CameraX Viewfinder.\r\n\r\n- CameraX already has a view based PreviewView, we'll talk about the limitations of wrapping it with AndroidView.\r\n\r\n- Discuss the benefits of a Compose-first approach for seamless UI integration, state management, and a more natural development experience.\r\n\r\n- What it means to make a Compose idiomatic Composable\r\n\r\n- Dive into the complexities of aligning the Compose coordinate space with the CameraX coordinate space using the CoordinateTransformer", - "startsAt": "2024-09-20T15:25:00", - "endsAt": "2024-09-20T16:05:00", + "id": "764406", + "title": "Ask Android! - Compose, Gemini in AS, KMP", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T15:45:00", + "endsAt": "2024-11-01T16:25:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "74839782-d3e1-4b61-9fdc-6b1507a46012", - "name": "Yasith Vidanaarachchi" + "id": "7a8a22c6-5b01-4f0a-bc04-12d4ada5de21", + "name": "Jossi Wolf" + }, + { + "id": "b5b73a2f-d57d-4a42-b787-a93f4ca9ba79", + "name": "Simona Milanovic" + }, + { + "id": "7280b9e7-ddf7-4cfb-b85b-1e998d851f66", + "name": "Marcello Galhardo" + }, + { + "id": "eb4483f1-306b-447d-9888-648ec0fc0018", + "name": "Chris Sinco" + }, + { + "id": "f4580454-6603-44a8-9fcd-e98fe6cc8981", + "name": "Matvei Malkov" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254880, - "name": "Advanced" + "id": 264350, + "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 306233, + "name": "Office Hours" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [ - { - "id": 254891, - "name": "Android" - }, - { - "id": 254892, - "name": "Kotlin" - } - ], - "sort": 3 + "categoryItems": [], + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 54706, + "room": "Ask Android", "liveUrl": null, "recordingUrl": null, "status": "Accepted", "isInformed": true, "isConfirmed": true }, + "index": 6 + } + ] + }, + { + "slotStart": "16:25:00", + "rooms": [ + { + "id": 49270, + "name": "Hangouts", + "session": { + "id": "059a58e3-50b1-4a62-8377-7263b7ca960f", + "title": "Break", + "description": null, + "startsAt": "2024-11-01T16:25:00", + "endsAt": "2024-11-01T16:40:00", + "isServiceSession": true, + "isPlenumSession": true, + "speakers": [], + "categories": [], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false + }, "index": 0 }, { - "id": 49957, - "name": "Grand Ballroom 2", + "id": 54706, + "name": "Ask Android", "session": { - "id": "721789", - "title": "How we boosted ExoPlayer performance by 30%", - "description": "Video has become an integral part of our lives, and we are witnessing a significant rise in the integration of video content within Android apps. Reddit is not an exception: we have more than 20 video surfaces in our app.\r\n\r\nIn this talk, I'll share our journey of improving video rendering by 30% over the last 6 months and approaches that go beyond what is documented.\r\n\r\nWe'll discuss:\r\n- Video metrics and what's important there\r\n- Lifecycle and challenges\r\n- Single instance of player vs PlayerPool\r\n- SurfaceView vs TextureView performance\r\n- ViewPool and AndroidView pitfalls with Jetpack Compose\r\n- Potential problems with caching\r\n\r\nEverything that will be mentioned is validated through real production scenarios and confirmed in efficiency by A/B tests on millions of Daily Active Users in the Reddit app.", - "startsAt": "2024-09-20T15:25:00", - "endsAt": "2024-09-20T16:05:00", + "id": "764408", + "title": "Ask Android! - Compose, Gemini in AS, KMP", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T16:25:00", + "endsAt": "2024-11-01T16:40:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "61cc0eba-ac00-414b-9cf7-5525040a4bdd", - "name": "Alexey Bykov" + "id": "7a8a22c6-5b01-4f0a-bc04-12d4ada5de21", + "name": "Jossi Wolf" + }, + { + "id": "b5b73a2f-d57d-4a42-b787-a93f4ca9ba79", + "name": "Simona Milanovic" + }, + { + "id": "7280b9e7-ddf7-4cfb-b85b-1e998d851f66", + "name": "Marcello Galhardo" + }, + { + "id": "eb4483f1-306b-447d-9888-648ec0fc0018", + "name": "Chris Sinco" + }, + { + "id": "f4580454-6603-44a8-9fcd-e98fe6cc8981", + "name": "Matvei Malkov" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 306233, + "name": "Office Hours" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [ - { - "id": 254891, - "name": "Android" - }, - { - "id": 254892, - "name": "Kotlin" - } - ], - "sort": 3 + "categoryItems": [], + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 54706, + "room": "Ask Android", "liveUrl": null, "recordingUrl": null, "status": "Accepted", "isInformed": true, "isConfirmed": true }, - "index": 1 - }, + "index": 6 + } + ] + }, + { + "slotStart": "16:40:00", + "rooms": [ { - "id": 49958, - "name": "Fountain Room", + "id": 49270, + "name": "Hangouts", "session": { - "id": "721657", - "title": "Hue-manize Your Android Apps: Develop for Color Blindness", - "description": "Have you ever wondered how your Android app appears to someone with color blindness or low vision? We will share firsthand how inaccessible apps impact daily life. In this talk, we'll delve into the world of visual impairments, drawing from Sam's personal experience and offering practical strategies to ensure your apps are accessible to all users.\r\n\r\nWe'll uncover common pitfalls, learn how to diagnose issues with tools like Accessibility Scanner and leverage Android’s built-in tools to simulate various vision conditions. You'll leave equipped with the knowledge and tools needed to make visual accessibility a natural part of your Android development workflow.\r\n", - "startsAt": "2024-09-20T15:25:00", - "endsAt": "2024-09-20T16:05:00", + "id": "732470", + "title": "Exploring Kotlin Symbol Processing: A Practical Guide", + "description": "In this session we’ll dive into the world of Kotlin Symbol Processing (KSP). This session aims to provide an introduction to KSP and its benefits compared to the Kotlin Annotation Processing Tool (KAPT).\r\n\r\nThe practical portion of this talk will guide you through the process of creating annotation definitions and implementing a symbol processor. We will demonstrate the usage of KSP API and KotlinPoet for generating Kotlin files, providing you with a hands-on experience of working with KSP. Furthermore, we will demonstrate how to use KSP in multiplatform projects.\r\n\r\nBy the end of this talk, you will walk away with a solid understanding of Kotlin Symbol Processing, and practical knowledge on how to leverage KSP in your development workflow.", + "startsAt": "2024-11-01T16:40:00", + "endsAt": "2024-11-01T17:20:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "598e1141-ce68-4cb2-8e9d-d8c9f5add09c", - "name": "Matt McKenna" - }, - { - "id": "bcd8a1a5-2160-421c-89b8-cb0bf3751bc9", - "name": "Sam Greenberg" + "id": "f589d95b-8262-4337-b6c8-78b4701afa3a", + "name": "Dean Djermanović" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254878, - "name": "Introductory and overview" + "id": 264350, + "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254891, - "name": "Android" - }, - { - "id": 254893, - "name": "Design" - }, - { - "id": 254901, - "name": "Android Studio" - }, - { - "id": 254902, - "name": "UI/UX" + "id": 264359, + "name": "Kotlin" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49958, - "room": "Fountain Room", + "roomId": 49270, + "room": "Hangouts", "liveUrl": null, "recordingUrl": null, "status": "Accepted", "isInformed": true, "isConfirmed": true }, - "index": 2 + "index": 0 }, { - "id": 52283, - "name": "Sapphire Room", + "id": 49271, + "name": "Glass", "session": { - "id": "716832", - "title": "Compose Multiplatform on iOS: On the Road to Stable", - "description": "Compose Multiplatform on iOS is in Beta, making it the perfect time to start giving it a try! Let’s take a closer look at what the team at JetBrains has done to get here, and have an exclusive look at the subjects we’re getting ready as we move toward a stable release!\r\n\r\nThat includes the ecosystem – well-established Jetpack libraries such as Navigation, ViewModel, DataStore, Lifecycle, and even Room are now available in Kotlin Multiplatform projects. Through practical examples, we’ll explore how building well-architected cross-platform apps with Kotlin is easier than ever.\r\n\r\nIn multiple live demos, we’ll see how the new common APIs can be used in practice, how they fit smoothly into Compose Multiplatform, and how they integrate naturally with iOS. We’ll also see some of the tooling improvements we at JetBrains are making around previews, common resources, and more.\r\n\r\nCompose Multiplatform brings your established skill set to new platforms. And it’s ready for you to start building – on iOS, Android, and beyond!", - "startsAt": "2024-09-20T15:25:00", - "endsAt": "2024-09-20T16:05:00", + "id": "735915", + "title": "Android driver - application of Android device in RC vehicle development", + "description": "TL;DR: This talk will showcase development of remote controlled vehicle with Android powered device as its central unit. \r\n\r\n... and now long version:\r\nStudents and researches around the world often struggle in early stages of development of robotics and hardware projects. The reason? High cost and connection difficulties of all the sensors and effectors for Arduinos, Raspberry Pi's or whatever platform they do choose. All of them have a solution right in their hands - or their pockets - and that is with almost no additional costs. \r\n\r\nBy enabling Android device to act as a part, or center, of embedded system you can unlock vast variety or its capabilities - ones that would cost hundreds of dollars to purchase and dozens of hours to connect & set up. Some of them are:\r\n- LTE access to Internet\r\n- WiFi & bluetooth connectivity\r\n- screen, speakers, microphone, LED light\r\n- accelerometer, gyroscope\r\n- multiple cameras\r\n- biometric sensors\r\nNot to mention higher level of services they offer through countless libraries ready to be used by developers.\r\n\r\n-> By the end of this talk, attendees will discover an innovative & easy way to use Android powered devices to cut down costs of prototyping hardware projects, especially as proposed, by building RC vehicle. ", + "startsAt": "2024-11-01T16:40:00", + "endsAt": "2024-11-01T17:20:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "a82c6942-6e2b-4d80-9883-0b84b932d6ef", - "name": "Sebastian Aigner" + "id": "58038e33-703e-497c-9f47-3624e36418e8", + "name": "Tomasz Słuszniak" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254878, - "name": "Introductory and overview" + "id": 264350, + "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254886, - "name": "Tooling" + "id": 264366, + "name": "Modularization" }, { - "id": 254888, - "name": "Cross-Platform" + "id": 264368, + "name": "Techniques & Guides" }, { - "id": 254891, - "name": "Android" + "id": 264369, + "name": "Other" }, { - "id": 254892, - "name": "Kotlin" + "id": 264370, + "name": "IoT" }, { - "id": 254897, - "name": "Libraries" + "id": 264384, + "name": "Android" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 52283, - "room": "Sapphire Room", + "roomId": 49271, + "room": "Glass", "liveUrl": null, "recordingUrl": null, "status": "Accepted", "isInformed": true, "isConfirmed": true }, - "index": 3 - } - ] - }, - { - "slotStart": "16:05:00", - "rooms": [ - { - "id": 49956, - "name": "Grand Ballroom 1", - "session": { - "id": "fe829dc7-2f0c-4007-ba3b-3730c72ce533", - "title": "Break", - "description": null, - "startsAt": "2024-09-20T16:05:00", - "endsAt": "2024-09-20T16:20:00", - "isServiceSession": true, - "isPlenumSession": true, - "speakers": [], - "categories": [], - "roomId": 49956, - "room": "Grand Ballroom 1", - "liveUrl": null, - "recordingUrl": null, - "status": null, - "isInformed": false, - "isConfirmed": false - }, - "index": 0 - } - ] - }, - { - "slotStart": "16:20:00", - "rooms": [ + "index": 1 + }, { - "id": 49956, - "name": "Grand Ballroom 1", + "id": 49272, + "name": "Things", "session": { - "id": "716782", - "title": "Lost in the Weeds - Exploring Navigation Libraries for Compose", - "description": "One of the most interesting and confusing parts of apps today is navigation. There seems to be so many different ways to go about it: Is it a side effect of your UI layer, is it modeled in the state somehow? Also where do transitions and animations fit in? \r\n\r\nThis fact hasn't changed for Compose-first apps, and I REALLY wanna know the best way to add navigation into my apps.\r\n\r\nIn this talk we'll explore the concept navigation in detail and build our mental model of what navigation in compose is. Then we'll explore three libraries that try and solve navigation in very different ways:\r\n\r\n- Jetpack Navigation\r\n- Appyx\r\n- Circuit\r\n\r\nBy the end, you will be equipped with the knowledge to create the best and most compelling navigation experiences for your own apps.", - "startsAt": "2024-09-20T16:20:00", - "endsAt": "2024-09-20T17:00:00", + "id": "734441", + "title": "A journey in Android's BLE world", + "description": "Working with BLE on Android could be overwhelming, there are a lot of OSS libraries to pick from, different permissions to be declared, and sometimes different behaviors depending on the Android version and device.\r\n\r\nThis talk aims to make order between what's available out there: we'll start from the basics of how BLE works, climbing the ladder and going more high-level examining tools and libraries using Kotlin features to simplify observing data and freeing up unused resources, including an exploration of latest JetPack library AndroidX Bluetooth.\r\n\r\nYou'll find real-life scenarios, examples, and strange issues you may encounter (along with even stranger fixes).\r\n\r\nWhether you plan to integrate a BLE device in your app, improve the existing code to be more expressive and use modern libraries, or even only scan for Bluetooth beacons, follow me on this journey in the BLE world.", + "startsAt": "2024-11-01T16:40:00", + "endsAt": "2024-11-01T17:20:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "7eca8832-05ec-44c0-b8cd-f8aa72fcf1a3", - "name": "Rikin Marfatia" + "id": "8253d551-1437-4a3e-b4f4-56bf73373109", + "name": "Paolo Rotolo" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254891, - "name": "Android" + "id": 264359, + "name": "Kotlin" }, { - "id": 254892, - "name": "Kotlin" + "id": 264368, + "name": "Techniques & Guides" }, { - "id": 254893, - "name": "Design" + "id": 264374, + "name": "API" + }, + { + "id": 264377, + "name": "Modern Android Development" + }, + { + "id": 264388, + "name": "Libraries" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 49272, + "room": "Things", "liveUrl": null, "recordingUrl": null, "status": "Accepted", "isInformed": true, "isConfirmed": true }, - "index": 0 + "index": 2 }, { - "id": 49957, - "name": "Grand Ballroom 2", + "id": 53981, + "name": "Stadia", "session": { - "id": "721070", - "title": "Building an AR app with Compose & OpenGL ES", - "description": "In this talk, we'll demystify the workings of AR experiences, from the fundamentals of OpenGL rendering to the pivotal role of ARCore. Discover how AR applications, while seemingly different from traditional virtual experiences, share many underlying principles to any other virtual experience, whether it's a 3D video game or your favorite virtual reality adventure.\r\n\r\nThrough practical demonstrations, you'll gain a comprehensive understanding of computer graphics with OpenGL ES and how to render an AR experience. By the end of the session, you'll walk away equipped with the knowledge to build your own AR apps using Android’s native tools: Jetpack Compose and OpenGL.", - "startsAt": "2024-09-20T16:20:00", - "endsAt": "2024-09-20T17:00:00", + "id": "706060", + "title": "Overcoming Unsecurities in WebViews", + "description": "Is your relationship with WebViews healthy? Sometimes you can't avoid the need to display web content in your app. It can be a functionality that you need to release quickly and it's already implemented by web devs in your team. It can be just a Terms and Conditions page you need to show. Often the reason for putting these into WebViews is that the latest version must be displayed without requiring an app update.\r\n\r\nSo web content tends to make its way into many apps. It's not obvious that by adding a single WebView, you can open up your app for abuse by malicious actors. Google made steady progress in making WebViews more secure by default but often you can't stop supporting those old, vulnerable OS versions. Ultimately it's your responsibility to secure your WebViews and the default settings are not always right. This talk aims to help with that while also highlighting security issues that lurk in those seemingly simple yet quite complex APIs.\r\n\r\nYou would learn the importance of always sanitizing inputs and restricting capabilities to what is actually needed. If you want to take one piece of advice from the talk, you should use more modern APIs like Custom Tabs, JavaScript Engine, or AndroidX's WebView variant.", + "startsAt": "2024-11-01T16:40:00", + "endsAt": "2024-11-01T17:20:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "4c3a9dd5-8b56-4f32-8cb6-a450510221bf", - "name": "Pau Guillamon" + "id": "6b808c1f-836d-4349-9585-a89355dfb8d0", + "name": "Balázs Gerlei" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254890, - "name": "AR/VR" + "id": 264368, + "name": "Techniques & Guides" }, { - "id": 254891, - "name": "Android" + "id": 264372, + "name": "Security" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 53981, + "room": "Stadia", "liveUrl": null, "recordingUrl": null, "status": "Accepted", "isInformed": true, "isConfirmed": true }, - "index": 1 + "index": 3 + }, + { + "id": 53982, + "name": "Nest", + "session": { + "id": "2823786d-8670-4816-801e-9579b16c87cc", + "title": "Coming Soon!", + "description": null, + "startsAt": "2024-11-01T16:40:00", + "endsAt": "2024-11-01T17:20:00", + "isServiceSession": true, + "isPlenumSession": false, + "speakers": [], + "categories": [], + "roomId": 53982, + "room": "Nest", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false + }, + "index": 4 + }, + { + "id": 54703, + "name": "Chromecast", + "session": { + "id": "4e3e8d41-d83c-4f91-8742-bf75d4b54436", + "title": "T3 Engineering Leadership Summit (Separate Ticket Required)", + "description": "https://www.t3-summit.com/t3-london", + "startsAt": "2024-11-01T16:40:00", + "endsAt": "2024-11-01T17:20:00", + "isServiceSession": true, + "isPlenumSession": false, + "speakers": [], + "categories": [], + "roomId": 54703, + "room": "Chromecast", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false + }, + "index": 5 }, { - "id": 49958, - "name": "Fountain Room", + "id": 54706, + "name": "Ask Android", "session": { - "id": "719602", - "title": "A Skeptic's Guide to Generative AI in the SDLC", - "description": "Hallucinations, non-deterministic results, and continents-worth of energy consumption--these problems have no real solution. We're stuck with them. How can we factor these uncertainties into the productivity gains we get from the tools? What if a 30% productivity gain is as good as we get? I will cover the promises, the realities, and the current/future states of Generative AI. We will acknowledge the unmovable realities getting in the way of the unstoppable fantasies, and help you separate the benefits from the grift.", - "startsAt": "2024-09-20T16:20:00", - "endsAt": "2024-09-20T17:00:00", + "id": "764409", + "title": "Ask Android! - Compose, Gemini in AS, KMP", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T16:40:00", + "endsAt": "2024-11-01T17:20:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "ee461055-a7e0-418a-b4b9-59803a0814fc", - "name": "Marcus Merrell" + "id": "7a8a22c6-5b01-4f0a-bc04-12d4ada5de21", + "name": "Jossi Wolf" + }, + { + "id": "b5b73a2f-d57d-4a42-b787-a93f4ca9ba79", + "name": "Simona Milanovic" + }, + { + "id": "7280b9e7-ddf7-4cfb-b85b-1e998d851f66", + "name": "Marcello Galhardo" + }, + { + "id": "eb4483f1-306b-447d-9888-648ec0fc0018", + "name": "Chris Sinco" + }, + { + "id": "f4580454-6603-44a8-9fcd-e98fe6cc8981", + "name": "Matvei Malkov" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 306233, + "name": "Office Hours" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [ - { - "id": 254889, - "name": "AI/ML" - } - ], - "sort": 3 + "categoryItems": [], + "sort": 4 } ], - "roomId": 49958, - "room": "Fountain Room", + "roomId": 54706, + "room": "Ask Android", "liveUrl": null, "recordingUrl": null, "status": "Accepted", "isInformed": true, "isConfirmed": true }, - "index": 2 + "index": 6 + } + ] + }, + { + "slotStart": "17:20:00", + "rooms": [ + { + "id": 49270, + "name": "Hangouts", + "session": { + "id": "c9009c93-af8c-4487-ae2f-253f17acea6a", + "title": "See you next year!", + "description": null, + "startsAt": "2024-11-01T17:20:00", + "endsAt": "2024-11-01T17:30:00", + "isServiceSession": true, + "isPlenumSession": true, + "speakers": [], + "categories": [], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": null, + "isInformed": false, + "isConfirmed": false + }, + "index": 0 } ] } ] } -] +] \ No newline at end of file diff --git a/shared/src/commonMain/resources/speakers.json b/shared/src/commonMain/resources/speakers.json index 0946ad78..5c9cb134 100644 --- a/shared/src/commonMain/resources/speakers.json +++ b/shared/src/commonMain/resources/speakers.json @@ -1,38 +1,67 @@ [ { - "id": "5574663f-8366-4445-a2db-789474c8ef55", - "firstName": "Abdulahi", - "lastName": "Osoble", - "fullName": "Abdulahi Osoble", - "bio": "A senior software engineer working at Careem as part of the Food android team", - "tagLine": "Senior Software Engineer @Careem", - "profilePicture": "https://sessionize.com/image/9420-400o400o1-NkRE8mssLxDH63ocDiN4ot.png", + "id": "3b1289fc-f706-4f8f-9061-c77e3e250223", + "firstName": "Adam", + "lastName": "Ahmed", + "fullName": "Adam Ahmed", + "bio": "Senior Android, mediocre cyclist, amateur home cook, and coffee nerd. He/Him 🌱", + "tagLine": "Senior Android Engineer", + "profilePicture": "https://sessionize.com/image/b0eb-400o400o1-LcDqwm1AJ7ChjgJ1yQYFiC.jpg", "sessions": [ { - "id": 720376, - "name": "Scaling Android Development without a Monorepo" + "id": 757537, + "name": "Roundtable: Mastering Release Management" + }, + { + "id": 725157, + "name": "Click-free releases & the making of a CLI app" } ], "isTopSpeaker": false, "links": [ { - "title": "Twitter", - "url": "https://twitter.com/abdulahi_osoble", + "title": "X (Twitter)", + "url": "https://twitter.com/oheyadam", "linkType": "Twitter" }, { "title": "LinkedIn", - "url": "https://www.linkedin.com/in/abdulahi-osoble-126a70115/", + "url": "https://www.linkedin.com/in/oheyadam", "linkType": "LinkedIn" }, { "title": "Blog", - "url": "https://www.kadirkid.dev/", + "url": "https://oheyadam.medium.com", "linkType": "Blog" }, { "title": "Company Website", - "url": "https://www.careem.com/", + "url": "https://www.travelperk.com/", + "linkType": "Company_Website" + } + ], + "questionAnswers": [], + "categories": [] + }, + { + "id": "532dc16d-b69d-4f68-aa49-fe9878b0b52f", + "firstName": "Adarsh", + "lastName": "Fernando", + "fullName": "Adarsh Fernando", + "bio": "Adarsh is a Senior Product Manager on Android Studio, focusing on the code editor, debugger, device access, Google service integrations, and testing.", + "tagLine": "Google", + "profilePicture": "https://sessionize.com/image/3dde-400o400o1-e7bdf209-26ed-4e56-bbc9-8fcd0b9b5eea.jpg", + "sessions": [ + { + "id": 747072, + "name": "Scalable Testing Strategies" + } + ], + "isTopSpeaker": false, + "links": [ + { + "title": "Company Website", + "url": "http://d.android.com", "linkType": "Company_Website" } ], @@ -40,114 +69,135 @@ "categories": [] }, { - "id": "16656dd2-a23b-42d1-8cb8-c9a1e593dd6c", - "firstName": "Ahmed", - "lastName": "El-Helw", - "fullName": "Ahmed El-Helw", - "bio": "Ahmed is a Principal Mobile Engineer. Ahmed helped architect and build Careem's SuperApp, worked on UI Infrastructure at Facebook, and worked on the Android apps for Twitter and Evernote.", - "tagLine": "Principal Mobile Engineer", - "profilePicture": "https://sessionize.com/image/3172-400o400o1-d2-a23b-42d1-8cb8-c9a1e593dd6c.bac72641-fdfa-45ac-ab5f-54830c5cf2dc.jpeg", + "id": "18c45d50-3e38-4933-a55b-8a833f850115", + "firstName": "Alejandra", + "lastName": "Stamato", + "fullName": "Alejandra Stamato", + "bio": "Alejandra is an Android software engineer and TL at HubSpot. Formerly Android Developer Relations Engineer at Google for Jetpack Compose (2021-2023). She's worked for multiple apps in the past, gathering a tenure of ~10 years in the industry.", + "tagLine": "Tech Lead, HubSpot", + "profilePicture": "https://sessionize.com/image/df22-400o400o1-J6h16BQL9QPP8ftbpFxgrp.png", "sessions": [ { - "id": 720376, - "name": "Scaling Android Development without a Monorepo" + "id": 733921, + "name": "Effective App Monitoring in Production" } ], "isTopSpeaker": false, "links": [ { "title": "X (Twitter)", - "url": "https://twitter.com/ahmedre", + "url": "https://twitter.com/astamatok", "linkType": "Twitter" }, { "title": "LinkedIn", - "url": "https://www.linkedin.com/in/ahmedre/", + "url": "https://www.linkedin.com/in/alejandra-stamato/", "linkType": "LinkedIn" }, { "title": "Blog", - "url": "https://helw.dev", + "url": "https://www.linkedin.com/in/alejandra-stamato/", "linkType": "Blog" + }, + { + "title": "Company Website", + "url": "https://www.hubspot.com/", + "linkType": "Company_Website" } ], "questionAnswers": [], "categories": [] }, { - "id": "61cc0eba-ac00-414b-9cf7-5525040a4bdd", - "firstName": "Alexey", - "lastName": "Bykov", - "fullName": "Alexey Bykov", - "bio": "I’m Alexey, Senior Android Software Engineer & Android GDE based in London.\r\nCurrently I work at Reddit where where I'm improving video experience on the main android app. \r\n\r\nFor most of my career, I have been working with large products with millions of active users. I got into\r\nsoftware development thanks to people who are actively sharing knowledge through blog posts and free\r\ncourses. This is why I spend a lot of my spare time sharing content with the community, and I sincerely enjoy it. \r\nOver these years, I have given dozens of talks and written over 20 articles about Android.\r\n\r\nPassionate about Kotlin, functional programming, Jetpack Compose, UI testing and Gradle.", - "tagLine": "Senior Software Engineer at Reddit & Android GDE", - "profilePicture": "https://sessionize.com/image/e12e-400o400o1-TNHJiaSSQXeC11Kjyt43eK.jpg", + "id": "81ee4554-4839-4192-9a74-ecb32dff2819", + "firstName": "Alex", + "lastName": "Vanyo", + "fullName": "Alex Vanyo", + "bio": "I'm an Android developer with a love of details. As a Developer Relations Engineer, I'm trying to improve APIs, write samples and share knowledge so that everyone can create polished, testable and beautiful apps. My currently focuses are on Jetpack Compose for large screens and Wear.", + "tagLine": "Android Developer Relations Engineer @ Google", + "profilePicture": "https://sessionize.com/image/b85b-400o400o1-n3DMwB2jY2nA2Kyrorew13.jpg", "sessions": [ { - "id": 721789, - "name": "How we boosted ExoPlayer performance by 30%" + "id": 764347, + "name": "Ask Android! - GenAI, Platform, Adaptive apps on all form factors" } ], "isTopSpeaker": false, "links": [ { - "title": "X (Twitter)", - "url": "https://twitter.com/nonewsss", + "title": "Twitter", + "url": "https://twitter.com/alex_vanyo", "linkType": "Twitter" }, { "title": "LinkedIn", - "url": "https://uk.linkedin.com/in/alexeybykov", + "url": "https://www.linkedin.com/in/alexvanyo/", "linkType": "LinkedIn" + } + ], + "questionAnswers": [], + "categories": [] + }, + { + "id": "ef1c33eb-89e9-49f6-9abc-da8140988097", + "firstName": "Alex", + "lastName": "Vanyo", + "fullName": "Alex Vanyo", + "bio": null, + "tagLine": "Developer Relations Engineer on Android", + "profilePicture": "https://sessionize.com/image/aba8-400o400o1-NMeqfRJDBGc7y2i6XgMPX2.jpg", + "sessions": [ + { + "id": 764350, + "name": "Ask Android! - Gen AI, Platform, Adaptive apps on all form factors" }, { - "title": "Blog", - "url": "https://medium.com/@nonewss", - "linkType": "Blog" + "id": 771431, + "name": "#TheAndroidShow - Panel Discussion" }, { - "title": "Company Website", - "url": "https://www.reddit.com/", - "linkType": "Company_Website" + "id": 764372, + "name": "Ask Android! - Gen AI, Media, Adaptive apps on all form factors" + }, + { + "id": 764381, + "name": "Ask Android! -GenAI, Media, Adaptive apps on all form factors" } ], + "isTopSpeaker": false, + "links": [], "questionAnswers": [], "categories": [] }, { - "id": "a4d26fc1-9707-4c86-bc82-70b7ce05823c", - "firstName": "Amanda", - "lastName": "Hinchman-Dominguez", - "fullName": "Amanda Hinchman-Dominguez", - "bio": "Amanda Hinchman-Dominguez is an Android Engineer specializing in Android and Kotlin. Currently, her primary focus is research on Kotlin meta-programming and maintaining the Arrow open-source library. As an active participant in the Kotlin community, Amanda organizes the Chicago KUG, writes tech blogs, and contributes to a variety of OSS projects. In her spare time, she practices hot yoga and enjoys hanging out with her three parakeets.", - "tagLine": "Android Engineer @ Groupon, Kotlin GDE", - "profilePicture": "https://sessionize.com/image/22fa-400o400o1-c1-9707-4c86-bc82-70b7ce05823c.9dae897a-cd7e-430c-b9d8-971958f18fa3.jpg", + "id": "ae4dc258-34a6-462c-b778-807da7d25de4", + "firstName": "Alexandre", + "lastName": "Moureaux", + "fullName": "Alexandre Moureaux", + "bio": "Alex has been developing mobile apps for the past 8 years, previously with React Native and more recently with Compose & Flutter as well. He’s obsessed with performance and created Flashlight 🔦, a lighthouse for mobile apps. He truly believes it's our responsibility to develop performant apps, as one way to fight against climate change!", + "tagLine": "Performance Expert at Theodo Apps", + "profilePicture": "https://sessionize.com/image/38d9-400o400o1-58-34a6-462c-b778-807da7d25de4.c4417a84-7a42-487e-846b-9fdb6542db5d.jpeg", "sessions": [ { - "id": 721533, - "name": "Kotlin Coroutine Mechanisms: Introduction to coroutine behavior through playful examples" + "id": 735413, + "name": "Let's build a performance measuring tool from scratch" } ], "isTopSpeaker": false, "links": [ { "title": "X (Twitter)", - "url": "https://twitter.com/hinchman_amanda", + "url": "https://twitter.com/almouro", "linkType": "Twitter" }, { "title": "LinkedIn", - "url": "https://www.linkedin.com/in/amanda-hinchman-dominguez-4190a7a4", + "url": "https://www.linkedin.com/in/alexandremoureaux", "linkType": "LinkedIn" }, - { - "title": "Blog", - "url": "https://medium.com/@hinchman-amanda", - "linkType": "Blog" - }, { "title": "Company Website", - "url": "https://www.adyen.com/", + "url": "https://apps.theodo.tech/", "linkType": "Company_Website" } ], @@ -155,67 +205,87 @@ "categories": [] }, { - "id": "a9033dbc-360f-4686-ab86-17a4a83be787", - "firstName": "Anant", - "lastName": "Chowdhary", - "fullName": "Anant Chowdhary", - "bio": "Anant is a Software Engineer at Google, working on bringing AI based dubbing to YouTube. Having worked on Google Lens, Video Publishing Infrastructure at Facebook (Meta) and Physical Stores Tech at Amazon, he has a wealth of experience in Distributed Systems and Applied Machine Learning.", - "tagLine": "Google", - "profilePicture": "https://sessionize.com/image/2f44-400o400o1-PdfVzkLBQ6f1M3zYGtkzwG.jpg", + "id": "af079576-c7db-497a-990d-919fc2472e45", + "firstName": "Anastasia", + "lastName": "López", + "fullName": "Anastasia López", + "bio": "From crafting Android apps to leading engineering teams, Anastasia blends her passion for Android development with her expertise as a seasoned Engineering Manager.", + "tagLine": "Engineering Manager", + "profilePicture": "https://sessionize.com/image/b31b-400o400o1-76-c7db-497a-990d-919fc2472e45.8933491f-ac5c-4745-acec-e85b5aacc2d9.jpg", "sessions": [ { - "id": 719656, - "name": "Image Recognition, Object Detection, Model Evaluation and Customization with MediaPipe on Android" + "id": 757518, + "name": "Roundtable: EM or IC? What’s Right for Me?" } ], "isTopSpeaker": false, "links": [ + { + "title": "Twitter", + "url": "https://twitter.com/AnastasiaLopezD", + "linkType": "Twitter" + }, { "title": "LinkedIn", - "url": "https://www.linkedin.com/in/anantchowdhary/", + "url": "https://www.linkedin.com/in/anastasia-lopez-418b6225/", "linkType": "LinkedIn" + }, + { + "title": "Company Website", + "url": "https://www.expedia.co.uk/", + "linkType": "Company_Website" } ], "questionAnswers": [], "categories": [] }, { - "id": "66fbb80a-cd18-4ba1-931d-d070d060ab95", - "firstName": "Arnaud", - "lastName": "Giuliani", - "fullName": "Arnaud Giuliani", - "bio": "Arnaud is a seasoned software developer with over 15 years of experience. He specializes as a Senior Android developer while maintaining proficiency in backend development, catering to both large corporations and startups. Since 2016, he has been an active speaker on various topics such as Kotlin, Android Architecture, and Koin. Arnaud was recognized as a Google Developer Expert for Kotlin in 2020.\r\n\r\nIn 2017, Arnaud initiated the development of Koin (https://insert-koin.io), a lightweight dependency injection framework for Kotlin. By the end of 2022, he co-founded Kotzilla, a company aimed at spearheading Saas and open-source software development for software architecture.", - "tagLine": "Co-founder of Kotzilla - Koin Project Lead - Kotlin GDE", - "profilePicture": "https://sessionize.com/image/3b0c-400o400o1-0a-cd18-4ba1-931d-d070d060ab95.277e5b69-b91f-444c-acd0-cd915945822e.jpg", + "id": "d59b3a5b-f721-4356-a3e4-a2f86cb6fc50", + "firstName": "Anastasia", + "lastName": "Soboleva", + "fullName": "Anastasia Soboleva", + "bio": "Anastasia has worked on Jetpack Compose for a few years now focusing on text and accessibility.", + "tagLine": "Software engineer at Google", + "profilePicture": "https://sessionize.com/image/cd66-400o400o1-4mADg2nqsz4ryysCJFFdFj.jpg", "sessions": [ { - "id": 689610, - "name": "Android, Compose, Multiplatform & Server - Inject them all with Koin" + "id": 736303, + "name": "Text in Compose: Beyond the Basics" } ], "isTopSpeaker": false, - "links": [ + "links": [], + "questionAnswers": [], + "categories": [] + }, + { + "id": "e34e8c09-ac65-4927-852e-ff2fc462afac", + "firstName": "Anton", + "lastName": "Beloglazov", + "fullName": "Anton Beloglazov", + "bio": "Anton has recently joined the Jetpack Compose team at Google, previously working on the Google App for Android for several years.", + "tagLine": "Software Engineer – Google", + "profilePicture": "https://sessionize.com/image/93b0-400o400o1-3z6EVrcWxXZcSYrxSD4p97.jpg", + "sessions": [ { - "title": "X (Twitter)", - "url": "https://twitter.com/arnogiu", - "linkType": "Twitter" + "id": 764343, + "name": "Ask Android! - Compose, GenAI, WearOS" }, { - "title": "LinkedIn", - "url": "https://linkedin.com/in/arnaud-giuliani-0b2b73b", - "linkType": "LinkedIn" + "id": 764345, + "name": "Ask Android! - Compose, GenAI, Platform" }, { - "title": "Blog", - "url": "https://blog.kotzilla.io", - "linkType": "Blog" + "id": 764391, + "name": "Ask Android! - Compose, Media, Platform" }, { - "title": "Company Website", - "url": "https://www.kotzilla.io/", - "linkType": "Company_Website" + "id": 764396, + "name": "Ask Android! - Compose, Media, Platform" } ], + "isTopSpeaker": false, + "links": [], "questionAnswers": [], "categories": [] }, @@ -225,11 +295,11 @@ "lastName": "Davies", "fullName": "Ash Davies", "bio": "Google Developer Expert for Android and Kotlin, enthusiastic public speaker, senior engineer, Kotlin aficionado, Multiplatform manipulator, prolific facilitator of cute cat photographs, spends more time travelling than working (he/him)", - "tagLine": "Senior Android Developer at SumUp", + "tagLine": "Senior Android Developer", "profilePicture": "https://sessionize.com/image/29f9-400o400o1-Vcm3WTHo4f6iT85wrGnmfc.jpg", "sessions": [ { - "id": 693921, + "id": 719034, "name": "Navigation in a Multiplatform World: Choosing the Right Framework for your App" } ], @@ -260,43 +330,74 @@ "categories": [] }, { - "id": "5b1f8159-fd45-4e94-b4a9-a6632c462ebb", - "firstName": "Avichal", - "lastName": "Rakesh", - "fullName": "Avichal Rakesh", - "bio": "I am a software engineer on the Android Camera Team and focuses on building camera APIs that allow apps to leverage the latest hardware and software. ", - "tagLine": "Software Engineer, Google", - "profilePicture": "https://sessionize.com/image/470d-400o400o1-4JTfiib1jwLxH9H4JkdVWZ.jpg", + "id": "f40ca183-824d-43d9-9e63-ee0edb5aa307", + "firstName": "Ataul", + "lastName": "Munim", + "fullName": "Ataul Munim", + "bio": "Ataul is an Android developer based near London, UK. He joined the Google Developers Experts programme in 2016 with a specialisation in accessibility and inclusive design on Android, and is currently working at Kraken Technologies with Octopus Energy as a mobile lead and manager.", + "tagLine": "Mobile Lead/EM at Octopus Energy", + "profilePicture": "https://sessionize.com/image/f596-400o400o1-95ArqBvH3isArv8Xwnjvw7.jpg", "sessions": [ { - "id": 702926, - "name": "Math and Modeling for Camera Developers" + "id": 757518, + "name": "Roundtable: EM or IC? What’s Right for Me?" } ], "isTopSpeaker": false, - "links": [], + "links": [ + { + "title": "Twitter", + "url": "https://twitter.com/ataulm", + "linkType": "Twitter" + }, + { + "title": "LinkedIn", + "url": "https://www.linkedin.com/in/ataulm/", + "linkType": "LinkedIn" + }, + { + "title": "Blog", + "url": "https://ataulm.com", + "linkType": "Blog" + }, + { + "title": "Company Website", + "url": "https://monzo.com/", + "linkType": "Company_Website" + } + ], "questionAnswers": [], "categories": [] }, { - "id": "6af9e2e9-6dff-4ee1-9bbf-c4f815969b9c", - "firstName": "Ben", - "lastName": "Boral", - "fullName": "Ben Boral", - "bio": "Ben is an expert in the application of automation strategies across all stages of the DevOps lifecycle in mobile apps. Originally inspired by the techniques described in Jez Humble’s book, “Continuous Delivery,” Ben has since helped dozens of mobile engineering organizations achieve automation nirvana. He is currently a senior solutions engineer at Bitrise.io.", - "tagLine": "Senior Solutions Engineer, Bitrise.io", - "profilePicture": "https://sessionize.com/image/b56c-400o400o1-MrnS3RWu7iWLeL2vxjWBLK.JPG", + "id": "8e2c2869-4beb-4868-8651-8567219ea947", + "firstName": "Aurimas", + "lastName": "Liutikas", + "fullName": "Aurimas Liutikas", + "bio": "Aurimas is a software engineer at Google working on AndroidX libraries. The need to write efficient code has been instilled in him through his work on Chrome for Android, and later Android OS itself. This drive continued when taking on the build and test infrastructure for AndroidX - one of the largest set of open source libraries built using Gradle. Aurimas enjoys doing talks, blog posts, and generally pushing the Gradle ecosystem forward.", + "tagLine": "Software Engineer at Google / Gradle Fellow", + "profilePicture": "https://sessionize.com/image/60da-400o400o1-MFJXsV41DKtQAUwir77pyQ.jpg", "sessions": [ { - "id": 711768, - "name": "20 Nuggets in 20 Minutes – Get more from your CI" + "id": 711892, + "name": "Gradle: The Build System That Loves To Hate You" } ], "isTopSpeaker": false, "links": [ + { + "title": "LinkedIn", + "url": "https://www.linkedin.com/in/liutikas", + "linkType": "LinkedIn" + }, + { + "title": "Blog", + "url": "https://www.liutikas.net/blog-posts", + "linkType": "Blog" + }, { "title": "Company Website", - "url": "https://bitrise.io", + "url": "https://www.google.com", "linkType": "Company_Website" } ], @@ -304,39 +405,49 @@ "categories": [] }, { - "id": "6c6404df-420e-4dfc-acf7-a3418742afd6", - "firstName": "Ben", - "lastName": "Chatelain", - "fullName": "Ben Chatelain", - "bio": "Ben is a seasoned Senior SDK Engineer at Ditto where he has been instrumental in developing SDKs for Android, Swift, .NET, and spearheading the creation of new SDKs for Java, Xamarin, and visionOS. Prior to joining Ditto, he amassed nearly thirteen years of experience at Kaiser Permanente as a Chief iOS Engineer and Software Development Lead, focusing on developing iOS and Android apps, leading a team of library developers, managing app distribution, and pioneering the analysis of electronic medical record data to enhance care quality and efficiency.", - "tagLine": "Senior Engineer, Android SDKs @ Ditto", - "profilePicture": "https://sessionize.com/image/8659-400o400o1-47L9CRcJ1pEgVw43zNQueD.jpg", + "id": "0037b354-6bd4-46e3-b1e6-d84916eea0d6", + "firstName": "Ayushi", + "lastName": "Gupta", + "fullName": "Ayushi Gupta", + "bio": "With my coding skills, I specialize in crafting diverse application solutions for Android mobile and TV platforms. My goal is to innovate and overcome any obstacles in our fast-paced, ever-evolving world.\r\nDriven by a passion for problem-solving, I eagerly accept challenges and strive to deliver impactful solutions. Let's connect and collaborate to find innovative solutions together", + "tagLine": "GDE Firebase, WTM Ambassador,Senior Android Engineer @Zalando, ", + "profilePicture": "https://sessionize.com/image/961b-400o400o1-wob3DCgQ1sgwMkZDHMnoNG.jpeg", "sessions": [ { - "id": 725795, - "name": "Using Rust in Your Next KMP App" + "id": 709201, + "name": "Passwordless Future !!" } ], "isTopSpeaker": false, "links": [ { "title": "X (Twitter)", - "url": "https://twitter.com/phatblat", + "url": "https://twitter.com/DroidyAyu", "linkType": "Twitter" }, { "title": "LinkedIn", - "url": "https://www.linkedin.com/in/benchatelain/", + "url": "https://www.linkedin.com/in/ayushi-gupta-a37368125/", "linkType": "LinkedIn" }, + { + "title": "Facebook", + "url": "https://www.facebook.com/ayushi2225/", + "linkType": "Facebook" + }, + { + "title": "Instagram", + "url": "https://www.instagram.com/ayushigupta_22/", + "linkType": "Instagram" + }, { "title": "Blog", - "url": "https://phatbl.at", + "url": "https://www.ayushig.com/blog", "linkType": "Blog" }, { "title": "Company Website", - "url": "https://ditto.live", + "url": "https://www.zalando.de/damen-home/", "linkType": "Company_Website" } ], @@ -344,69 +455,102 @@ "categories": [] }, { - "id": "1077aaba-731b-405f-92eb-2481a507a082", - "firstName": "Blake", - "lastName": "Reynolds", - "fullName": "Blake Reynolds", - "bio": "Blake Reynolds is a Solution Architect for the DevOps team products at Tricentis. With a background in QA across multiple industries, he helps teams adopt test automation to streamline workflows, increase efficiency, and improve software quality.", - "tagLine": "Solution Architect, Tricentis", - "profilePicture": "https://sessionize.com/image/59ab-400o400o1-TqZzoKvEujrTHxyMbdWAxV.jpg", + "id": "6b808c1f-836d-4349-9585-a89355dfb8d0", + "firstName": "Balázs", + "lastName": "Gerlei", + "fullName": "Balázs Gerlei", + "bio": "Balázs is a software engineer skilled in software architectural design, mobile security, effective product development and agile methodologies. His passion is creating intuitive, experience-focused user interfaces. He is always hungry for more knowledge and happy to share what he learns with others. He likes mentoring and being an enabler in a team. He is a co-organizer of the Android Budapest meetup group. Outside of work he enjoys cycling, photography, cars and coffee.", + "tagLine": "Senior Mobile Software Engineer @ Nevis Security", + "profilePicture": "https://sessionize.com/image/578f-400o400o1-431603bd-753a-4e59-9fe6-4ed52e29e22e.jpg", "sessions": [ { - "id": 725870, - "name": "Why testing is also a developer's problem" + "id": 706060, + "name": "Overcoming Unsecurities in WebViews" } ], "isTopSpeaker": false, "links": [ + { + "title": "X (Twitter)", + "url": "https://twitter.com/balazsgerlei", + "linkType": "Twitter" + }, { "title": "LinkedIn", - "url": "https://www.linkedin.com/in/serlanger/", + "url": "https://hu.linkedin.com/in/balazs-gerlei", "linkType": "LinkedIn" + } + ], + "questionAnswers": [], + "categories": [] + }, + { + "id": "8b706c47-edbc-41e3-af85-3328b4134e57", + "firstName": "Ben", + "lastName": "Sagmoe", + "fullName": "Ben Sagmoe", + "bio": "Ben is a Developer Relations Engineer at Google covering the Android for Cars Space (Android Auto and Android Automotive OS). In the past, he has spoken at the Android Developer Summit and Google I/O connect events.", + "tagLine": "Developer Relations Engineer, Google", + "profilePicture": "https://sessionize.com/image/f693-400o400o1-V5FxHkv47YeFNkZP7YoCgi.jpg", + "sessions": [ + { + "id": 764365, + "name": "Ask Android! - WearOS, Media, Adaptive apps on all form factors" }, { - "title": "Company Website", - "url": "https://www.tricentis.com/solutions/mobile-testing", - "linkType": "Company_Website" + "id": 764370, + "name": "Ask Android! - WearOS, Media, Adaptive apps on all form factors" + }, + { + "id": 764376, + "name": "Ask Android! - Gen AI, Media, Adaptive apps on all form factors" + } + ], + "isTopSpeaker": false, + "links": [ + { + "title": "LinkedIn", + "url": "https://www.linkedin.com/in/bsagmoe/", + "linkType": "LinkedIn" } ], "questionAnswers": [], "categories": [] }, { - "id": "fb25f3d5-103f-45ef-983a-414e583cea31", - "firstName": "Colin", - "lastName": "Marsch", - "fullName": "Colin Marsch", - "bio": "I’m an Android engineer working at Cash App. In my free time, I like to travel and explore the world, read and run.", - "tagLine": "Android Engineer at Cash App", - "profilePicture": "https://sessionize.com/image/14c8-400o400o1-AriDqMNqjPwS2QK23Ks8s.jpg", + "id": "5f8860b3-e669-4717-91bf-ddceb872fd55", + "firstName": "Benjamin", + "lastName": "Kadel", + "fullName": "Benjamin Kadel", + "bio": "Developer, Presenter/Teacher, Open source advocate, Ultimate frisbee player & Board game hoarder.\r\nI love the fact that I get to code for a living, but I am also incredibly passionate about sharing, collaborating and helping others on their dev journey!\r\nI also have a growing YouTube channel (youtube.com/benkadel), where I try to make entertaining & educational content about programming, the tech industry and specific tutorials to breakdown complex topics.\r\nI adore presenting, story-telling and just generally engaging with an audience. If I am able to make life, even just a little brighter for someone then I have succeeded!", + "tagLine": "Principal Platform Engineer for Android at Babbel", + "profilePicture": "https://sessionize.com/image/fef1-400o400o1-L7RptkTbWuBP7ayp4xBbN6.jpg", "sessions": [ { - "id": 721723, - "name": "Unpacking Compose Multiplatform Accessibility" + "id": 693397, + "name": "Crime Scene InvestiGITor" } ], "isTopSpeaker": false, "links": [ { "title": "X (Twitter)", - "url": "https://twitter.com/colinmarsch", + "url": "https://twitter.com/Ben_Kadel", "linkType": "Twitter" }, { "title": "LinkedIn", - "url": "https://www.linkedin.com/in/colinmarsch/", + "url": "https://uk.linkedin.com/in/benkadel", "linkType": "LinkedIn" }, { "title": "Blog", - "url": "https://colinmarsch.me/", + "url": "https://kardelio.github.io/", "linkType": "Blog" }, { "title": "Company Website", - "url": "https://cash.app/", + "url": "https://www.babbel.com/", "linkType": "Company_Website" } ], @@ -414,34 +558,43 @@ "categories": [] }, { - "id": "45f252dd-d465-4a2f-ade2-a405d8ff73d0", - "firstName": "Dan", - "lastName": "Peluso", - "fullName": "Dan Peluso", - "bio": "Dan Peluso has been a mobile engineer since he's been coding, and is currently working for Peloton doing Android work. On the side, he is a local musician and active member of the Google Development community, and enjoys making Flutter web apps both personally and professionally. ", - "tagLine": "Android Engineer @ Klaviyo and GDG Organizer", - "profilePicture": "https://sessionize.com/image/2c0b-400o400o1-3WSZhenJPtnWMkdY7kqeEc.jpg", + "id": "0730a976-72e0-42c9-a3b3-9317c06d7bbe", + "firstName": "Bhushan", + "lastName": "Sonawane", + "fullName": "Bhushan Sonawane", + "bio": "Bhushan has optimized and deployed more than 1000s of AI models on-device on iOS and Android ecosystem.\r\nCurrently, He is building AI Hub at Qualcomm to make on-device journey on Android and Snapdragon platform as seamless as possible.\r\nPreviously, he worked on Apple on CoreML framework and helped deployed various system and developer use cases. He also worked at Nvidia in GPU compiler focusing on optimizing code generation for CUDA and graphics load (e.g. Nintendo and Nvidia Shield).", + "tagLine": "Staff ML Engineer, Qualcomm", + "profilePicture": "https://sessionize.com/image/647c-400o400o1-PReFokhoaxSZx9Zgv8b9nE.jpg", "sessions": [ { - "id": 693098, - "name": "The Critical Need for More Android Mentors" + "id": 748950, + "name": "How to Optimize, Validate and Deploy ML Models On Device" + }, + { + "id": 768482, + "name": "How to Optimize, Validate and Deploy ML Models On Device (Part II)" } ], "isTopSpeaker": false, "links": [ + { + "title": "X (Twitter)", + "url": "https://x.com/bhushan23s", + "linkType": "Twitter" + }, { "title": "LinkedIn", - "url": "https://www.linkedin.com/in/pelusodan/", + "url": "https://www.linkedin.com/in/bhushansonawane/", "linkType": "LinkedIn" }, { "title": "Blog", - "url": "https://peluso.dev/#/", + "url": "https://bhushansonawane.com/", "linkType": "Blog" }, { "title": "Company Website", - "url": "https://www.onepeloton.com/", + "url": "https://www.qualcomm.com/", "linkType": "Company_Website" } ], @@ -449,64 +602,65 @@ "categories": [] }, { - "id": "695a18df-c473-408f-bdfb-b0c594c8c50d", - "firstName": "Daniel", - "lastName": "Santiago Rivera", - "fullName": "Daniel Santiago Rivera", - "bio": "Me gustan los video juegos... y programar. Flag of Puerto Rico", - "tagLine": "Google", - "profilePicture": "https://sessionize.com/image/0a9c-400o400o1-DrMqkmtyjtvdAY88xDcWJ5.jpg", + "id": "c8229c07-b474-4044-af66-1c8da6779bc6", + "firstName": "Chiko", + "lastName": "Shimizu", + "fullName": "Chiko Shimizu", + "bio": "Chiko is an Android Developer Relation Engineer at Google, focusing on apps on fascinating surfaces. ", + "tagLine": "Developer Relation Engineer, Android, Google", + "profilePicture": "https://sessionize.com/image/96d8-400o400o1-NtevfpPvBn9sRDfYBgxdKE.jpg", "sessions": [ { - "id": 721974, - "name": "\"Bundle\" Up and Save: Powering Room with Bundled SQLite" - } - ], - "isTopSpeaker": false, - "links": [ + "id": 764365, + "name": "Ask Android! - WearOS, Media, Adaptive apps on all form factors" + }, { - "title": "X (Twitter)", - "url": "https://twitter.com/danyaguacate", - "linkType": "Twitter" + "id": 764370, + "name": "Ask Android! - WearOS, Media, Adaptive apps on all form factors" + }, + { + "id": 764381, + "name": "Ask Android! -GenAI, Media, Adaptive apps on all form factors" } ], + "isTopSpeaker": false, + "links": [], "questionAnswers": [], "categories": [] }, { - "id": "4d3a31b1-61e5-4a26-9ca3-c9f30e3eaa08", - "firstName": "Danny", - "lastName": "Preussler", - "fullName": "Danny Preussler", - "bio": "Danny built mobile applications for companies like Viacom, Groupon, eBay and Alcatel. He is a Google Developer Expert for Android and Kotlin. Before there was Android he was already active in the Blackberry development community.", - "tagLine": "Android Lead @ Soundcloud", - "profilePicture": "https://sessionize.com/image/1f23-400o400o1-b1-61e5-4a26-9ca3-c9f30e3eaa08.3e7b5602-cf0d-4f47-b510-f789a00b4cbf.png", + "id": "ecd35d14-91dc-4ce6-a6db-fd7a26424a36", + "firstName": "Chris", + "lastName": "Assigbe", + "fullName": "Chris Assigbe", + "bio": "Chris is a Developer Relations Engineer on the Android team.\r\nHe is passionate about technology and its intersection with society advancement. \r\nHe is also a huge home automation nerd and can be found tinkering with a new more advanced automation on the weekends.", + "tagLine": "Android Developer Relations Engineer @ Google", + "profilePicture": "https://sessionize.com/image/16b1-400o400o1-WZgwsfPGwJ3DkFnZCfvjtG.jpg", "sessions": [ { - "id": 700494, - "name": "Ten things you heard about testing that might be wrong" + "id": 764347, + "name": "Ask Android! - GenAI, Platform, Adaptive apps on all form factors" + }, + { + "id": 764350, + "name": "Ask Android! - Gen AI, Platform, Adaptive apps on all form factors" } ], "isTopSpeaker": false, "links": [ { - "title": "X (Twitter)", - "url": "https://twitter.com/PreusslerBerlin", + "title": "Twitter", + "url": "https://twitter.com/cka_assi", "linkType": "Twitter" }, { "title": "LinkedIn", - "url": "https://www.linkedin.com/in/danny-preussler-557a3b79/", + "url": "https://www.linkedin.com/in/chris-koffi-assigbe-07777424/", "linkType": "LinkedIn" }, - { - "title": "Blog", - "url": "https://medium.com/@dpreussler", - "linkType": "Blog" - }, { "title": "Company Website", - "url": "http://www.soundcloud.com", + "url": "https://google.com", "linkType": "Company_Website" } ], @@ -514,64 +668,89 @@ "categories": [] }, { - "id": "dab126dc-4467-4ada-a9bb-b888892e89f6", - "firstName": "David", - "lastName": "Chang", - "fullName": "David Chang", - "bio": "David has been an Android developer for 10 years and spent the last 6 years working in the developer productivity space at Dropbox and currently at Pinterest.", - "tagLine": "Staff Software Engineer", - "profilePicture": "https://sessionize.com/image/ab2c-400o400o1-78i5ukNBCtsb9NtQk4LrYa.png", + "id": "391191b2-1d5c-4784-875b-00edf4d065cc", + "firstName": "Chris", + "lastName": "Assigbe", + "fullName": "Chris Assigbe", + "bio": null, + "tagLine": "Android Developer Relations Engineer at Google", + "profilePicture": "https://sessionize.com/image/7f8b-400o400o1-EeD2rbvys4TkahpNW3icpi.jpg", "sessions": [ { - "id": 722420, - "name": "Efficient Android Builds at Scale: Lessons from Pinterest" + "id": 764378, + "name": "Ask Android! - Gen AI, Media, Adaptive apps on all form factors" } ], "isTopSpeaker": false, - "links": [ - { - "title": "LinkedIn", - "url": "https://www.linkedin.com/in/changd24/", - "linkType": "LinkedIn" - } - ], + "links": [], "questionAnswers": [], "categories": [] }, { - "id": "de68551c-a180-464b-95d8-1e41d02509a8", - "firstName": "Drew", - "lastName": "Heavner", - "fullName": "Drew Heavner", - "bio": "Android Platform @ Reddit. Passion for all things Android especially in emerging technologies like Anvil and Jetpack Compose. Outside of work I enjoy spending time with my wife and our dog, Violet, as well as cycling and weightlifting.", - "tagLine": "Staff Software Engineer @ Reddit", - "profilePicture": "https://sessionize.com/image/0bd6-400o400o1-Sw1HfT5o7KAPnHgHq4LycQ.jpeg", + "id": "eb4483f1-306b-447d-9888-648ec0fc0018", + "firstName": "Chris", + "lastName": "Sinco", + "fullName": "Chris Sinco", + "bio": "Chris is the UX Design Lead for Android Developer tools. He has a passion for creating elegant developer experiences. Prior to Google, he worked on VS Code and Hololens at Microsoft.", + "tagLine": "UX Design Lead @ Google", + "profilePicture": "https://sessionize.com/image/3b04-400o400o1-f1-306b-447d-9888-648ec0fc0018.f1f8f009-2f22-403f-9d74-9ebe5d474da9.jpg", "sessions": [ { - "id": 721559, - "name": "Plug and Play: Power Up DevX with Android Studio Plugins" + "id": 731273, + "name": "Project Sparkles: how Compose is changing Android Studio" + }, + { + "id": 764303, + "name": "Ask Android! - Compose, KMP, Gemini in AS" + }, + { + "id": 764328, + "name": "Ask Android! - Compose, KMP, Gemini in AS" + }, + { + "id": 764329, + "name": "Ask Android! - Compose, KMP, Gemini in AS" + }, + { + "id": 764330, + "name": "Ask Android! - Compose, KMP, Gemini in AS" + }, + { + "id": 764323, + "name": "Ask Android! - Compose, KMP, Gemini in AS (copy)" + }, + { + "id": 764404, + "name": "Ask Android! - Compose, Gemini in AS, KMP" + }, + { + "id": 764406, + "name": "Ask Android! - Compose, Gemini in AS, KMP" + }, + { + "id": 764408, + "name": "Ask Android! - Compose, Gemini in AS, KMP" + }, + { + "id": 764409, + "name": "Ask Android! - Compose, Gemini in AS, KMP" } ], "isTopSpeaker": false, "links": [ { - "title": "X (Twitter)", - "url": "https://twitter.com/R0ADKLL", + "title": "Twitter", + "url": "https://twitter.com/csinco", "linkType": "Twitter" }, - { - "title": "LinkedIn", - "url": "https://www.linkedin.com/in/drew-heavner/", - "linkType": "LinkedIn" - }, { "title": "Blog", - "url": "https://www.reddit.com/r/RedditEng/", + "url": "https://csinco.com", "linkType": "Blog" }, { "title": "Company Website", - "url": "https://www.redditinc.com/", + "url": "https://developer.android.com", "linkType": "Company_Website" } ], @@ -579,99 +758,102 @@ "categories": [] }, { - "id": "6a7b0ee2-2d50-42b7-8225-1df145d255ea", - "firstName": "Eeva-Jonna", - "lastName": "Panula", - "fullName": "Eeva-Jonna Panula", - "bio": "Eeva-Jonna, or Eevis, is an accessibility specialist and senior Android developer. She is also Android GDE and Women Techmakers Ambassador. Her passion is to share knowledge, and she speaks and writes a blog. When she is not doing that, she explores the beautiful Finnish nature either by foot or kayak.", - "tagLine": "Accessibility Specialist, Senior Android Developer at Oura", - "profilePicture": "https://sessionize.com/image/e5e5-400o400o1-RfQXdwRMaH1AhiTJwe1a77.png", + "id": "84335047-a7cd-437e-986f-1d6b6df31072", + "firstName": "Chrystian", + "lastName": "Vieyra Cortes", + "fullName": "Chrystian Vieyra Cortes", + "bio": "Chrystian Vieyra is an Android and iOS app developer with a specialty in visualizing sensor data. He recently transitioned to be an engineering manager at Comcast. Born in Celaya, Mexico, he immigrated to the United States to complete his B.S. in Computer Science from Western Illinois University. Chrystian resides in Washington, DC.", + "tagLine": "Engineering Manager", + "profilePicture": "https://sessionize.com/image/e02a-400o400o1-Y27vRVQocc9Y4yhBoqSAEy.jpg", "sessions": [ { - "id": 674849, - "name": "Personalizing Accessibility" + "id": 731303, + "name": "Embracing 16 KB Page Sizes in Android - Boosting Performance" } ], "isTopSpeaker": false, "links": [ + { + "title": "X (Twitter)", + "url": "https://twitter.com/chrystianv1", + "linkType": "Twitter" + }, { "title": "LinkedIn", - "url": "https://linkedin.com/in/eevajonna", + "url": "https://www.linkedin.com/in/chrystian-vieyra-4aa1406/", "linkType": "LinkedIn" }, { "title": "Blog", - "url": "https://eevis.codes/blog", + "url": "https://www.vieyrasoftware.net/blog", "linkType": "Blog" + }, + { + "title": "Company Website", + "url": "https://www.xfinity.com/", + "linkType": "Company_Website" } ], "questionAnswers": [], "categories": [] }, { - "id": "699c8fd7-70f9-44df-85d2-abb6454cee07", - "firstName": "Eric", - "lastName": "Chiquillo", - "fullName": "Eric Chiquillo", - "bio": "Spent the last four years as Android engineer on Ads at Reddit. Did some bluetooth stuff before that to help find your lost stuff.", - "tagLine": "Staff Engineer @ Reddit", - "profilePicture": "https://sessionize.com/image/8bcb-400o400o1-fQJpB8XyG1SHBAr6ZysBPp.jpg", + "id": "4b613586-0a6e-45e9-b641-f855ceda4658", + "firstName": "Clara", + "lastName": "Bayarri", + "fullName": "Clara Bayarri", + "bio": null, + "tagLine": "Engineering Manager - Google", + "profilePicture": "https://sessionize.com/image/a223-400o400o1-PnXFpX838sUVUza8x8KdsB.jpg", "sessions": [ { - "id": 713009, - "name": "Debugging in the Wild: Unleashing the Power of Remote Tooling" - } - ], - "isTopSpeaker": false, - "links": [ + "id": 771426, + "name": "#TheAndroidShow - Leadership Keynote" + }, { - "title": "LinkedIn", - "url": "https://www.linkedin.com/in/eric-chiquillo-6237b938", - "linkType": "LinkedIn" + "id": 771431, + "name": "#TheAndroidShow - Panel Discussion" } ], + "isTopSpeaker": false, + "links": [], "questionAnswers": [], "categories": [] }, { - "id": "878ec0bb-f4d7-4b83-a9af-ff6e359a35dc", - "firstName": "Etienne", - "lastName": "Caron", - "fullName": "Etienne Caron", - "bio": "Etienne started his career as a back-end developer and pivoted to mobile development in the early 2010s. He worked on all tiers (server, web, mobile, and embedded) of large-scale software platforms and is currently a freelance software development consultant. \r\n\r\n- Developer on the Nina™ Mobile speech recognition SDK for Nuance Communications\r\n- Android team lead on TrueKey™ password management app for Intel / McAfee.\r\n- Senior Android developer on Hatchful™ Logo Maker, Shopify.\r\n- Staff developer for e-commerce store management application, Shopify.\r\n\r\nSince pivoting to mobile development, Etienne has been an active community member and regularly devotes his time to mentoring startups, developers and students in the space. He lives in Montreal with his wife and daughter and speaks French and English fluently. ", - "tagLine": "Freelance Software Developer / Consultant", - "profilePicture": "https://sessionize.com/image/666e-400o400o1-3XyABod1tzM94rrtZk4Mpg.png", + "id": "6ee5ee5a-1bdd-4c54-8178-fad51f86a78a", + "firstName": "Daniel", + "lastName": "Horowitz", + "fullName": "Daniel Horowitz", + "bio": "I'm software crafter passionate about mobile tech and AI.\r\n\r\nM.Sc. in Artificial Intelligence at Universidad Politecnica de Catalunia (Barcelona) and Android Architect/Team leader. Working on Android development since 2011", + "tagLine": "Android @ Spotify", + "profilePicture": "https://sessionize.com/image/4af9-400o400o1-136a8c8e-6cd5-47df-b9d6-aecdf4176121.jpg", "sessions": [ { - "id": 721860, - "name": "Building an ML-powered Android Livestreaming App" + "id": 710572, + "name": "Rethinking Home - How testing techniques and code design reshaped the new Spotify Home feature" } ], "isTopSpeaker": false, "links": [ { "title": "X (Twitter)", - "url": "https://twitter.com/kanawish", + "url": "https://twitter.com/horowitzd", "linkType": "Twitter" }, { "title": "LinkedIn", - "url": "https://www.linkedin.com/in/etcaron", + "url": "https://www.linkedin.com/in/danihorowitz/", "linkType": "LinkedIn" }, - { - "title": "Instagram", - "url": "https://www.instagram.com/kanawish/", - "linkType": "Instagram" - }, { "title": "Blog", - "url": "https://kanawish.com", + "url": "https://danielhorowitz.io", "linkType": "Blog" }, { "title": "Company Website", - "url": "https://kanastruk.com", + "url": "https://spotify.com", "linkType": "Company_Website" } ], @@ -679,39 +861,34 @@ "categories": [] }, { - "id": "a09470ca-e749-4fe1-94cd-03e1d82a596d", - "firstName": "Gautam", - "lastName": "Korlam", - "fullName": "Gautam Korlam", - "bio": "Gautam is a Co-Founder at Gitar where he is building the modern software development platform – tools that offer a magical developer experience supercharged by advanced code analysis and AI. Gitar's mission is to enable efficient and reliable development at scale, empowering developers to do the best work of their careers. Previously, he was a Principal Engineer on Uber’s Developer Platform Team. He is passionate about tools to improve developer experience in large codebases. He has spoken about a wide variety of topics around Monorepos, Build systems, CI & CD at scale etc.", - "tagLine": "Co-Founder, Gitar", - "profilePicture": "https://sessionize.com/image/e1f4-400o400o1-RVdW4UuUpN7ZsWAcL3fo7u.jpg", + "id": "de4da391-af75-405b-8816-186c5d4e8fde", + "firstName": "Daniel", + "lastName": "Neamtu", + "fullName": "Daniel Neamtu", + "bio": "Daniel Neamtu is the EMEA Developer Advocate for Zebra Technologies.\r\n\r\nDaniel has a good Android Development experience with over 6 years of work on APPs and Modding/Custom ROMs projects.\r\nHe understands and is passionate about helping the developers improving their skills and getting the most out of it.", + "tagLine": "Developer Advocate", + "profilePicture": "https://sessionize.com/image/e662-400o400o1-Knzz3ERhXW1uUVcCTpHj5w.jpg", "sessions": [ { - "id": 671488, - "name": "How we automated code maintenance and you can too!" + "id": 732898, + "name": "Your app could use a secondary screen!" } ], "isTopSpeaker": false, "links": [ { - "title": "Twitter", - "url": "https://twitter.com/kageiit", + "title": "X (Twitter)", + "url": "https://twitter.com/nilac_", "linkType": "Twitter" }, { "title": "LinkedIn", - "url": "https://www.linkedin.com/in/gautamkorlam/", + "url": "https://www.linkedin.com/in/nilac/", "linkType": "LinkedIn" }, - { - "title": "Blog", - "url": "https://gitar.co/blog", - "linkType": "Blog" - }, { "title": "Company Website", - "url": "https://gitar.co/", + "url": "https://www.zebra.com/gb/en.html", "linkType": "Company_Website" } ], @@ -719,34 +896,39 @@ "categories": [] }, { - "id": "5c3850ee-778a-4904-bd52-a3927ec54dc6", - "firstName": "Hakan", - "lastName": "Bagci", - "fullName": "Hakan Bagci", - "bio": "Hakan Bagci is an Android Principal Engineer at Delivery Hero, a food delivery company. He started Android development in 2012 and has 17 years of software development experience. He got his PhD degree in Computer Engineering. After leaving academic path, he has become a passionate Mobile Engineer and published 10+ small sized indie mobile games to both Android and iOS platforms. ", - "tagLine": "Delivery Hero, Principal Android Engineer", - "profilePicture": "https://sessionize.com/image/3ce4-400o400o1-S4Rn9nA6xWx5u5ahPXLEQ6.jpg", + "id": "9c8384de-140e-47e4-aeb1-c85faf090fc8", + "firstName": "Danielle", + "lastName": "Vass", + "fullName": "Danielle Vass", + "bio": "Danielle is an experienced mobile developer and has contributed to several Android and iOS apps and SDKs, for employers and her own personal projects. She is passionate about helping to improve diversity and inclusion in the technology industry and has run many activities for children and adults to learn to code.", + "tagLine": "de-velopment", + "profilePicture": "https://sessionize.com/image/9743-400o400o1-DrNzd82APp1kgSrmaTj61Q.jpeg", "sessions": [ { - "id": 706110, - "name": "Composing ViewModels: Breaking ViewModels into smaller self-contained UI models" + "id": 736123, + "name": "How we build Spotify for Android Automotive" } ], "isTopSpeaker": false, "links": [ { "title": "X (Twitter)", - "url": "https://twitter.com/hknbgcdev", + "url": "https://twitter.com/de_velopment", "linkType": "Twitter" }, { "title": "LinkedIn", - "url": "https://www.linkedin.com/in/hkn-bgc", + "url": "https://www.linkedin.com/in/daniellevass/", "linkType": "LinkedIn" }, + { + "title": "Blog", + "url": "https://danielle.ai/", + "linkType": "Blog" + }, { "title": "Company Website", - "url": "https://www.deliveryhero.com/", + "url": "http://www.de-velopment.com/", "linkType": "Company_Website" } ], @@ -754,44 +936,39 @@ "categories": [] }, { - "id": "2d41d3fb-3321-4b47-a401-ae84a5de2423", - "firstName": "Huyen Tue", - "lastName": "Dao", - "fullName": "Huyen Tue Dao", - "bio": "Huyen Tue Dao is an Android developer and Google Developer Expert for Android and Kotlin. She previously worked as an Android developer at Trello and Adobe. Huyen also co-hosts the \"Android Faithful,\" an Android ecosystem enthusiast sister podcast of the Daily Tech News Show.\r\n\r\nHuyen lives in Denver, CO, though she is often found in the DC Metro area. When not programming, she is moving (kettlebells, HIIT, dance, yoga, strength) and gaming (video, board, card, mobile, anything).", - "tagLine": "Randomly Typing | Android + Kotlin Google Developer Expert ", - "profilePicture": "https://sessionize.com/image/65aa-400o400o1-n2AHF6pBXM6ML5n55i7UE9.jpg", - "sessions": [ - { - "id": 722557, - "name": "Creating a Custom Compose Layout, Step-by-Step" - } + "id": "4d3a31b1-61e5-4a26-9ca3-c9f30e3eaa08", + "firstName": "Danny", + "lastName": "Preussler", + "fullName": "Danny Preussler", + "bio": "Danny built mobile applications for companies like Viacom, Groupon, eBay and Alcatel. He is a Google Developer Expert for Android and Kotlin. Before there was Android he was already active in the Blackberry development community.", + "tagLine": "Android Lead @ Soundcloud", + "profilePicture": "https://sessionize.com/image/b921-400o400o1-KQg41ScvicfHUFfnJxgvmA.jpg", + "sessions": [ + { + "id": 700492, + "name": "Ten things you heard about testing that might be wrong" + } ], - "isTopSpeaker": true, + "isTopSpeaker": false, "links": [ { "title": "X (Twitter)", - "url": "https://twitter.com/queencodemonkey", + "url": "https://twitter.com/PreusslerBerlin", "linkType": "Twitter" }, { "title": "LinkedIn", - "url": "https://www.linkedin.com/in/huyentuedao", + "url": "https://www.linkedin.com/in/danny-preussler-557a3b79/", "linkType": "LinkedIn" }, - { - "title": "Instagram", - "url": "https://instagram.com/queencodemonkey", - "linkType": "Instagram" - }, { "title": "Blog", - "url": "https://www.randomlytyping.com/", + "url": "https://medium.com/@dpreussler", "linkType": "Blog" }, { "title": "Company Website", - "url": "https://www.randomlytyping.com", + "url": "http://www.soundcloud.com", "linkType": "Company_Website" } ], @@ -799,24 +976,34 @@ "categories": [] }, { - "id": "636dd7ea-e476-4289-a6e2-a7cbc116da62", - "firstName": "Ibrahim", - "lastName": "Radwan", - "fullName": "Ibrahim Radwan", - "bio": "After joining Microsoft four years ago, I have worked on various projects. My journey with Clarity began with the data management team, but I later shifted my focus to developing the Clarity mobile SDKs. Our primary objective is to assist application developers in gaining insights into their end users' behavior.", - "tagLine": "Senior Software Engineer @ Microsoft", - "profilePicture": "https://sessionize.com/image/528e-400o400o1-Ex8B4pNZUJj8SZP7EzUAvC.jpg", + "id": "81f9ecbf-c08c-48c7-850f-1e79e1439867", + "firstName": "David", + "lastName": "Ta", + "fullName": "David Ta", + "bio": "Staff Software Engineer at Decathlon · GDG Nantes Android Lead · AndroidMakers by droidcon Staff · Watercolorist", + "tagLine": "Staff Software Engineer at Decathlon · GDG Nantes Android Lead", + "profilePicture": "https://sessionize.com/image/6b18-400o400o1-ffkvKCN7FtT2fJ2Cp8UEZ8.png", "sessions": [ { - "id": 727034, - "name": "Squash your hidden bugs using Microsoft Clarity" + "id": 720685, + "name": "Why is adaptive layout a nightmare?" } ], "isTopSpeaker": false, "links": [ + { + "title": "Twitter", + "url": "https://twitter.com/Smoochibi", + "linkType": "Twitter" + }, + { + "title": "LinkedIn", + "url": "https://www.linkedin.com/in/david-ta-63524b53/", + "linkType": "LinkedIn" + }, { "title": "Company Website", - "url": "https://www.microsoft.com/", + "url": "https://www.decathlon.com", "linkType": "Company_Website" } ], @@ -824,29 +1011,34 @@ "categories": [] }, { - "id": "dc1c88ef-dbfd-4b41-a567-7ce8e7645420", - "firstName": "Inaki", - "lastName": "Villar", - "fullName": "Inaki Villar", - "bio": "Inaki Villar is a Solutions Engineer on Gradle Enterprise team, and he is based in Los Angeles.\r\nIn this role, Inaki is working on providing solutions and optimizations for Clients of Gradle Enterprise in Gradle/Maven builds. Before this role, Inaki was focused on Android and Build performance for other companies like Tinder, Agoda, Synchronous, Ryanair and Ideaknow.\r\nOriginally from Mallorca, Spain. He enjoys watching real football and water activities.", - "tagLine": "gradle, solutions engineer", - "profilePicture": "https://sessionize.com/image/04ca-400o400o1-ce26baee-4c32-43be-b3a8-fba3a3fe77ee.jpg", + "id": "f589d95b-8262-4337-b6c8-78b4701afa3a", + "firstName": "Dean", + "lastName": "Djermanović", + "fullName": "Dean Djermanović", + "bio": "Dean is an Android Engineer based in Zagreb, Croatia. He has been working with Android for 7 years. He's currently employed at Endava. Previously, Dean was part of FIVE, a company recognized as a Google Developers Certified Agency in 2018, which was later acquired by Endava. He's an active member of the Android community. He's been a part of the kodeco.com tutorial team for 5 years where he ​​contributed to three Android book projects and numerous tutorials. He also participates as a speaker at tech conferences and local tech meetups. In his free time, he loves biking, and working out in the gym.", + "tagLine": "Android Engineer at Endava", + "profilePicture": "https://sessionize.com/image/2864-400o400o1-osD3u84jvVv4WzyNQir7N.jpg", "sessions": [ { - "id": 718114, - "name": "Declarative Gradle on Android" + "id": 732470, + "name": "Exploring Kotlin Symbol Processing: A Practical Guide" } ], "isTopSpeaker": false, "links": [ { - "title": "Twitter", - "url": "https://twitter.com/inyaki_mwc", + "title": "X (Twitter)", + "url": "https://twitter.com/dean_95_", "linkType": "Twitter" }, + { + "title": "LinkedIn", + "url": "https://www.linkedin.com/in/deandjermanovic/", + "linkType": "LinkedIn" + }, { "title": "Company Website", - "url": "https://gradle.com", + "url": "https://five.agency/", "linkType": "Company_Website" } ], @@ -854,186 +1046,163 @@ "categories": [] }, { - "id": "03c63012-49c4-44eb-af96-0f5360b0d187", - "firstName": "Ishan", - "lastName": "Khanna", - "fullName": "Ishan Khanna", - "bio": "Ishan is a passionate product enthusiast and self-taught developer who loves open source technologies, tech conferences, and hackathons.\r\n\r\nHe is currently leading the Mobile Infrastructure team for TikTok in the US. Prior to that he worked at Tinder, Getaround, Booking.com, and Inshorts.\r\n\r\nHe is also a PMC member at Apache Fineract Project and a Maintenaner at Mifos Initiative. He successfully graduated as a Google Summer of Code Intern in 2014 under Mifos and in 2015 under XMPP Standards Foundation and has been mentoring students at Google Summer of Code ever since.", - "tagLine": "Tech Lead, Mobile Infrastructure @ TikTok", - "profilePicture": "https://sessionize.com/image/c57d-400o400o1-XjiMcrSyNa38cPT5WqRYUh.png", + "id": "c24d26ff-8a59-4954-b768-fcd09d8bb0a3", + "firstName": "Domen", + "lastName": "Lanišnik", + "fullName": "Domen Lanišnik", + "bio": "Experienced Senior Android Engineer with over 9 years of experience developing large-scale mobile applications. Currently working as an Android Engineer at Lyft. Actively contributing to the developer community through technical blog posts, mentoring, and talks.", + "tagLine": "Senior Android Developer, Lyft", + "profilePicture": "https://sessionize.com/image/7daa-400o400o1-EZxytWtcJrC8eyrxcvNopQ.jpg", "sessions": [ { - "id": 671422, - "name": "How to make Kotlin compile 2x faster on a super large project?" - }, - { - "id": 722122, - "name": "Modern Paging at Scale: StoreX + Compose" + "id": 716104, + "name": "Swift Cheatsheet for Android/Kotlin Developers" } ], "isTopSpeaker": false, "links": [ { "title": "X (Twitter)", - "url": "https://twitter.com/@droidchef", + "url": "https://twitter.com/DomenLanisnik", "linkType": "Twitter" }, { "title": "LinkedIn", - "url": "https://www.linkedin.com/in/droidchef/", + "url": "https://www.linkedin.com/in/domenlanisnik/", "linkType": "LinkedIn" }, { "title": "Blog", - "url": "https://blog.droidchef.dev", + "url": "https://medium.com/@domen.lanisnik", "linkType": "Blog" - }, - { - "title": "Company Website", - "url": "https://www.tiktok.com/", - "linkType": "Company_Website" } ], "questionAnswers": [], "categories": [] }, { - "id": "1d0d817a-c0aa-4ca5-9d21-ad67fac74a81", - "firstName": "Jayant", - "lastName": "Chowdhary", - "fullName": "Jayant Chowdhary", - "bio": "Jayant Chowdhary is a Software engineer on the Android Camera team at Google. He focuses on building camera apis to leverage the latest hardware and software features.", - "tagLine": "Jayant Chowdhary, Software Engineer, Google", - "profilePicture": "https://sessionize.com/image/360f-400o400o1-SMAhZfUXSnXTfhGAGvnzLj.jpg", + "id": "31e8a089-eb2f-437c-ac09-bb55af17f934", + "firstName": "Donovan", + "lastName": "McMurray", + "fullName": "Donovan McMurray", + "bio": null, + "tagLine": "Developer Relations Engineer", + "profilePicture": "https://sessionize.com/image/c438-400o400o1-hYZVULJxP25W4tzy4rgArU.jpg", "sessions": [ { - "id": 702926, - "name": "Math and Modeling for Camera Developers" + "id": 764331, + "name": "Ask Android! - Compose, GenAI, WearOS" } ], "isTopSpeaker": false, - "links": [ - { - "title": "X (Twitter)", - "url": "https://twitter.com/jayantc11", - "linkType": "Twitter" - }, - { - "title": "LinkedIn", - "url": "https://www.linkedin.com/in/jayant-chowdhary/", - "linkType": "LinkedIn" - } - ], + "links": [], "questionAnswers": [], "categories": [] }, { - "id": "0e4f3abe-cc6c-409a-8f34-e346f23c0cc4", - "firstName": "Jeffrey", - "lastName": "Bunn", - "fullName": "Jeffrey Bunn", - "bio": "I'm the co-founder of Clearful, an award-winning multi-platform digital journal for personal growth, and Mealime, a top meal-planning app that was acquired in 2018. Alongside my wife Maria, we create consumer products that enrich lives. I also support developers at RevenueCat, the top app monetization platform.", - "tagLine": "Co-Founder of Clearful and Mealime & Support Engineer at RevenueCat", - "profilePicture": "https://sessionize.com/image/ee03-400o400o1-pyJXN76ig64L6grc7BHKmh.png", + "id": "f7ad854d-1167-4fab-be0a-2721cf6ae5f2", + "firstName": "Ed", + "lastName": "Holloway-George", + "fullName": "Ed Holloway-George", + "bio": "Ed Holloway-George is an Android Developer and Google Developer Expert originally from Oxford, UK but now currently residing in Nottingham, UK.\r\n\r\nAn Android developer for over 10 years; Ed now works for ASOS as a Lead Developer having previously worked on well-known applications such as National Trust, My Oxfam, Snoop, Carling Tap and many more.\r\n\r\nIn his spare time, Ed can be found tweeting and posting pictures of his dog.", + "tagLine": "Lead Android Developer @ ASOS | Android GDE", + "profilePicture": "https://sessionize.com/image/f620-400o400o1-Suu1CSFCXHg2BNnxnvBxHE.png", "sessions": [ { - "id": 725385, - "name": "Monetizing Your Side Project to $1k in Monthly Revenue and Beyond" + "id": 702107, + "name": "[REDACTED]: How to keep your app's secrets, secret" } ], "isTopSpeaker": false, "links": [ { "title": "X (Twitter)", - "url": "https://twitter.com/jeffreybunn", + "url": "https://twitter.com/Sp4ghettiCode", "linkType": "Twitter" }, { "title": "LinkedIn", - "url": "https://linkedin.com/in/jeffrey-bunn", + "url": "https://www.linkedin.com/in/edgeorge", "linkType": "LinkedIn" }, { "title": "Blog", - "url": "https://www.jeffreybunn.com/", + "url": "https://spght.dev", "linkType": "Blog" + }, + { + "title": "Company Website", + "url": "https://spght.dev", + "linkType": "Company_Website" } ], "questionAnswers": [], "categories": [] }, { - "id": "4a13d160-c8c3-4214-926f-24a5b15c78dd", - "firstName": "Jesse", - "lastName": "Wilson", - "fullName": "Jesse Wilson", - "bio": "Programming, inclusivity, sustainability, & 🦕. he/him.", - "tagLine": "Cash App", - "profilePicture": "https://sessionize.com/image/5e71-400o400o1-anxCtrFtxrNbzANyUnJV9a.jpg", + "id": "6a7b0ee2-2d50-42b7-8225-1df145d255ea", + "firstName": "Eeva-Jonna", + "lastName": "Panula", + "fullName": "Eeva-Jonna Panula", + "bio": "Eeva-Jonna, or Eevis, is an accessibility specialist and senior Android developer. She is also Android GDE and Women Techmakers Ambassador. Her passion is to share knowledge, and she speaks and writes a blog. When she is not doing that, she explores the beautiful Finnish nature either by foot or kayak.", + "tagLine": "Accessibility Specialist, Senior Android Developer at ŌURA", + "profilePicture": "https://sessionize.com/image/5730-400o400o1-SVVjQhkgm8NTQhUofxixAd.png", "sessions": [ { - "id": 717904, - "name": "GC You Later, Allocator" - }, - { - "id": 719914, - "name": "Mobile Developer Productivity Panel" + "id": 711918, + "name": "Personalizing Accessibility" } ], - "isTopSpeaker": true, + "isTopSpeaker": false, "links": [ { - "title": "X (Twitter)", - "url": "https://twitter.com/jessewilson", - "linkType": "Twitter" + "title": "LinkedIn", + "url": "https://linkedin.com/in/eevajonna", + "linkType": "LinkedIn" }, { "title": "Blog", - "url": "https://publicobject.com/", + "url": "https://eevis.codes/blog", "linkType": "Blog" - }, - { - "title": "Company Website", - "url": "https://cash.app/", - "linkType": "Company_Website" } ], "questionAnswers": [], "categories": [] }, { - "id": "903c7a65-63f0-4244-8f8c-7ab8f7acae75", - "firstName": "John", - "lastName": "Rodriguez", - "fullName": "John Rodriguez", - "bio": "John is an Android engineer who previously worked on Cash App and Square's Point-of-Sale and Developer SDK teams. He is the lead maintainer for Paparazzi and has contributed to LeakCanary, Picasso and Wire.", - "tagLine": "Android and Developer Productivity", - "profilePicture": "https://sessionize.com/image/852a-400o400o1-Qguf3YC74ywpVgGWVkEbMm.png", + "id": "95a6035d-1167-4cc1-9974-bc065a077893", + "firstName": "Enrique", + "lastName": "Ramírez", + "fullName": "Enrique Ramírez", + "bio": "Android dev old enough to remember ActionBarSherlock", + "tagLine": "Software Engineer at Tesco", + "profilePicture": "https://sessionize.com/image/e416-400o400o1-5d-1167-4cc1-9974-bc065a077893.a1abe602-5198-4b6d-bea4-3be389382316.jpeg", "sessions": [ { - "id": 724063, - "name": "A Snapshot Preview of Paparazzi 2.0" - }, - { - "id": 724064, - "name": "Writing your own Gradle Plugin: A Deep Dive" + "id": 693733, + "name": "Hardware development with KMP and Compose Desktop" } ], "isTopSpeaker": false, "links": [ { "title": "X (Twitter)", - "url": "https://twitter.com/jrodbx", + "url": "https://twitter.com/kikermo", "linkType": "Twitter" }, { "title": "LinkedIn", - "url": "https://www.linkedin.com/in/jrodbx/", + "url": "https://www.linkedin.com/in/enrique-ramirez-77464342/", "linkType": "LinkedIn" }, + { + "title": "Blog", + "url": "https://medium.com/@enriqueramrezmanzaneda", + "linkType": "Blog" + }, { "title": "Company Website", - "url": "https://duolingo.com/", + "url": "https://www.tesco.com/", "linkType": "Company_Website" } ], @@ -1041,29 +1210,39 @@ "categories": [] }, { - "id": "910f395b-9d2b-4f7d-8ab4-c4008bd9f0c4", - "firstName": "Jonathan", - "lastName": "Petit-Frere", - "fullName": "Jonathan Petit-Frere", - "bio": "Jonathan is a Software Engineer at Netflix working on Growth Experiences on Android. ", - "tagLine": "Software Engineer, Android at Netflix", - "profilePicture": "https://sessionize.com/image/165e-400o400o1-VhEosWjWcLoUofW6dYAcqC.jpg", + "id": "79823093-1b16-4a2b-b0a9-ea4cd25b92f5", + "firstName": "Erik", + "lastName": "Hellman", + "fullName": "Erik Hellman", + "bio": "With more than 25 years of writing software, and 16 working on Android in various forms, Erik has plenty of experience to share. He lives and works as a freelanced software developer from his home in Stockholm, Sweden. When he's not working he is unsuccessfully trying to herd his two cats or trying to figure out how to maintain his house.", + "tagLine": "Freelance software engineer", + "profilePicture": "https://sessionize.com/image/d66a-400o400o1-93-1b16-4a2b-b0a9-ea4cd25b92f5.4cc61ad2-1d12-4dab-81b4-6c2818bbe6de.jpg", "sessions": [ { - "id": 720754, - "name": "Building Modern Responsive Widgets with Jetpack Glance" + "id": 731970, + "name": "Wireless protocols for the next generation IoT devices" } ], "isTopSpeaker": false, "links": [ + { + "title": "X (Twitter)", + "url": "https://twitter.com/ErikHellman", + "linkType": "Twitter" + }, { "title": "LinkedIn", - "url": "https://www.linkedin.com/in/jonathan-petit-frere-45814591/", + "url": "https://www.linkedin.com/in/erikhelllman/", "linkType": "LinkedIn" }, + { + "title": "Blog", + "url": "https://www.hellsoft.se", + "linkType": "Blog" + }, { "title": "Company Website", - "url": "http://netflix.com", + "url": "https://hellsoft.se/", "linkType": "Company_Website" } ], @@ -1071,29 +1250,34 @@ "categories": [] }, { - "id": "9b706079-0c5b-4d36-852a-4fbc3a271734", - "firstName": "Jonathan", - "lastName": "Seals", - "fullName": "Jonathan Seals", - "bio": "Jonathan is a highly skilled professional with a diverse background in military service, law enforcement, and cybersecurity. With a strong foundation in security practices and extensive experience in mobile application security analysis.\r\n\r\nHaving served 5 years in the Marine Corps as a helicopter crew chief, including a deployment to Afghanistan, Jonathan developed a strong work ethic, discipline, and a commitment to excellence. Following his military service, he transitioned to a career in law enforcement, where he spent 7 years working on various cases and specialized in digital forensics. Jonathan's expertise in analyzing digital evidence and uncovering critical information played a pivotal role in solving cases across all levels.\r\n\r\nDriven by a passion for cybersecurity, Jonathan pursued further education and obtained his CompTIA Security+ certification. He is also currently pursuing a bachelor’s degree in cybersecurity to expand his knowledge and skills in the field. In 2021, Jonathan joined NowSecure as a Mobile Application Security Analyst, where he conducts rigorous testing of applications and contribute to special projects.\r\n\r\nWith a deep understanding of security protocols, emerging threats, and industry best practices, Jonathan possesses the ability to identify vulnerabilities, conduct comprehensive security assessments, and provide actionable recommendations to enhance the security posture of mobile applications. His technical proficiency in utilizing various security tools and technologies ensures thorough penetration testing and effective risk mitigation.\r\n\r\nOutside of their professional endeavors, Jonathan remains committed to continuous learning and staying up-to-date with the latest trends and advancements in the field of mobile application security. \r\n\r\nWith a solid foundation built on his military service, law enforcement background, and extensive knowledge in cybersecurity, Jonathan brings a unique perspective and a wealth of experience to every project he undertakes. His dedication, integrity, and commitment to excellence make him a valuable asset in protecting organizations against mobile application security threats.\r\n", - "tagLine": "NowSecure, Mobile Application Security Analyst", - "profilePicture": "https://sessionize.com/image/76f4-400o400o1-Gc7gntzZTpjKEx1c5ozUyn.jpg", + "id": "d2ddc9e3-35b6-44a9-8daa-144d89cabaff", + "firstName": "Evgeny", + "lastName": "Mandrikov", + "fullName": "Evgeny Mandrikov", + "bio": "Evgeny is a contributor to various open source projects, including OpenJDK, and a speaker at international conferences and JUGs. He is also one of the project leads of widely adopted code coverage library for Java and Kotlin - JaCoCo, and the award-winning EclEmma project at the Eclipse Foundation that integrates JaCoCo into Eclipse. In his day job at Sonar he develops SonarQube’s static source code analysis for languages such as Java, Kotlin, C, and C++.", + "tagLine": "Software Gardener, Language Team Technical Leader @SonarSource", + "profilePicture": "https://sessionize.com/image/6f13-400o400o1-fWhP66qq2SDdw33AoPHXsD.jpg", "sessions": [ { - "id": 726519, - "name": "Speed Trap Ahead – Avoiding Costly Security and Privacy Issues in SDK Integration" + "id": 704275, + "name": "The state of code coverage for Kotlin" } ], "isTopSpeaker": false, "links": [ + { + "title": "Twitter", + "url": "https://twitter.com/_Godin_", + "linkType": "Twitter" + }, { "title": "LinkedIn", - "url": "https://www.linkedin.com/in/jonathan-s-062922122?utm_source=share&utm_campaign=share_via&utm_content=profile&utm_medium=ios_app", + "url": "https://linkedin.com/in/mandrikov", "linkType": "LinkedIn" }, { "title": "Company Website", - "url": "https://www.nowsecure.com/", + "url": "https://sonarsource.com/", "linkType": "Company_Website" } ], @@ -1101,47 +1285,40 @@ "categories": [] }, { - "id": "8d1c299e-adc3-4c21-a461-5fbd43cba26e", - "firstName": "Judy", - "lastName": "Lin", - "fullName": "Judy Lin", - "bio": "Judy lives in Brooklyn and loves her dog Mr Jones.", - "tagLine": "Senior Software Engineer at Duolingo", - "profilePicture": "https://sessionize.com/image/9b80-400o400o1-9c3qzpHwbM3fUW85emW28X.png", + "id": "752bc716-f1b8-45d4-b0a5-cfbc3402b68b", + "firstName": "Florina", + "lastName": "Muntenescu", + "fullName": "Florina Muntenescu", + "bio": null, + "tagLine": "Engineering Manager @ Google", + "profilePicture": "https://sessionize.com/image/e6c6-400o400o1-QBFfoB8esF3yB3Qm1aVZKG.jpg", "sessions": [ { - "id": 725067, - "name": "Cross-platform Animations with Rive" + "id": 771431, + "name": "#TheAndroidShow - Panel Discussion" } ], "isTopSpeaker": false, - "links": [ - { - "title": "X (Twitter)", - "url": "https://twitter.com/judy__lin", - "linkType": "Twitter" - }, - { - "title": "LinkedIn", - "url": "https://www.linkedin.com/in/judy--lin/", - "linkType": "LinkedIn" - } - ], + "links": [], "questionAnswers": [], "categories": [] }, { - "id": "1eae811c-9c84-4516-b13f-92397d260ded", - "firstName": "Kailiang", - "lastName": "Chen", - "fullName": "Kailiang Chen", - "bio": "I work on Android Camera Platform team at Google and focus on building camera APIs and features.", - "tagLine": "Software Engineer, Google", - "profilePicture": "https://sessionize.com/image/7976-400o400o1-SkbeFBazEeHGormrSX2TuH.png", + "id": "e3b228b6-3b08-4edb-89dd-1a5625d9e4c2", + "firstName": "Francesco", + "lastName": "Romano", + "fullName": "Francesco Romano", + "bio": null, + "tagLine": "Developer Relations Engineer", + "profilePicture": "https://sessionize.com/image/8e65-400o400o1-ajN8q372RqsRcnkzkKrCdF.jpg", "sessions": [ { - "id": 702926, - "name": "Math and Modeling for Camera Developers" + "id": 764347, + "name": "Ask Android! - GenAI, Platform, Adaptive apps on all form factors" + }, + { + "id": 764350, + "name": "Ask Android! - Gen AI, Platform, Adaptive apps on all form factors" } ], "isTopSpeaker": false, @@ -1150,34 +1327,74 @@ "categories": [] }, { - "id": "4990e3a2-c183-44c2-8aec-ff76ac75af8e", - "firstName": "Keir", - "lastName": "Storrie", - "fullName": "Keir Storrie", - "bio": "Keir Storrie is a 28 year veteran Software Engineer, Reverse Engineer and White Hat Hacker, specialising in Mobile App Protection , Extended Threat Defence Expert. Programmning in Android Java, Kotlin, C/C++, Python and R", - "tagLine": "Verimatrix - Extended Threat Defence Expert", - "profilePicture": "https://sessionize.com/image/0212-400o400o1-GQjYd7W193Nt8ZxFqKH5Yt.png", + "id": "9079b8b4-be1f-4213-a446-6b2bdcad0c04", + "firstName": "Fung", + "lastName": "Lam", + "fullName": "Fung Lam", + "bio": "Fung is a Developer Relations Engineer in Android. He focuses on App Compatibility for more than 5 years, helping Android Developers to make their apps ready for the future releases of Android.", + "tagLine": "Developer Relations Engineer, Google", + "profilePicture": "https://sessionize.com/image/85c5-400o400o1-YZexnpvkTSr3zmwvrNqPa6.jpg", "sessions": [ { - "id": 721044, - "name": "Mobile App Security : Threat Landscape : Attack & Defend, Defend & Monitor, Monitor & Respond" + "id": 756374, + "name": "Tools that could help you to target newer SDK level and improve compatibility" + }, + { + "id": 764345, + "name": "Ask Android! - Compose, GenAI, Platform" + }, + { + "id": 764347, + "name": "Ask Android! - GenAI, Platform, Adaptive apps on all form factors" + }, + { + "id": 764350, + "name": "Ask Android! - Gen AI, Platform, Adaptive apps on all form factors" + }, + { + "id": 764353, + "name": "Ask Android! -GenAI, Platform, Adaptive apps on all form factors" + }, + { + "id": 764391, + "name": "Ask Android! - Compose, Media, Platform" + }, + { + "id": 764396, + "name": "Ask Android! - Compose, Media, Platform" + }, + { + "id": 764397, + "name": "Ask Android! - Compose, WearOS, Platform" + }, + { + "id": 764398, + "name": "Ask Android! - Compose, WearOS, Platform" + }, + { + "id": 764399, + "name": "Ask Android! - Compose, WearOS, Platform" + }, + { + "id": 764400, + "name": "Ask Android! - Compose, WearOS, Platform" } ], "isTopSpeaker": false, "links": [ { "title": "LinkedIn", - "url": "https://www.linkedin.com/in/keirstorrie/", + "url": "https://www.linkedin.com/in/lamchofung/", "linkType": "LinkedIn" }, { - "title": "Blog", - "url": "https://www.verimatrix.com/cybersecurity/vmx-labs/", - "linkType": "Blog" + "title": "Instagram", + "url": "https://www.instagram.com/androidfung", + "linkType": "Instagram" }, { "title": "Company Website", - "url": "https://verimatrix.com", + "url": "https://d.android.com", "linkType": "Company_Website" } ], @@ -1185,39 +1402,39 @@ "categories": [] }, { - "id": "9d2ecd4c-fd6e-444f-b80f-bd8ef04106ae", - "firstName": "Kevin", - "lastName": "Galligan", - "fullName": "Kevin Galligan", - "bio": "Technology Partner at Touchlab. Kotlin Foundation Ecosystem Committee member. Kotlin GDE, open source contributor, and conference speaker. Helping define the future of Kotlin Multiplatform, and technology platforms in general.", - "tagLine": "Touchlab Technology Partner", - "profilePicture": "https://sessionize.com/image/987c-400o400o1-VugR6knWf4WNiwjVHFsQdq.jpg", + "id": "6520ad1e-8c4e-45c1-b34d-91ca73db27fe", + "firstName": "Gerard", + "lastName": "Paligot", + "fullName": "Gerard Paligot", + "bio": "Father and husband · Google Developer Expert for Android · Mobile Staff Engineer at Decathlon · GDG Lille (Android), FRAUG and Devfest Lille organizer · Disney Fan!", + "tagLine": "Decathlon, Mobile Staff Engineer", + "profilePicture": "https://sessionize.com/image/c5a4-400o400o1-sqz6c5v3xty7GXR2UD1HiR.png", "sessions": [ { - "id": 739401, - "name": "The Future of Android, Kotlin, and Everything" + "id": 720685, + "name": "Why is adaptive layout a nightmare?" } ], - "isTopSpeaker": true, + "isTopSpeaker": false, "links": [ { "title": "X (Twitter)", - "url": "https://twitter.com/kpgalligan", + "url": "https://twitter.com/GerardPaligot", "linkType": "Twitter" }, { "title": "LinkedIn", - "url": "https://www.linkedin.com/in/kpgalligan/", + "url": "https://www.linkedin.com/in/gpaligot/", "linkType": "LinkedIn" }, { "title": "Blog", - "url": "https://touchlab.co/blog", + "url": "https://gerard.paligot.com/", "linkType": "Blog" }, { "title": "Company Website", - "url": "https://touchlab.co/", + "url": "https://digital.decathlon.net/", "linkType": "Company_Website" } ], @@ -1225,83 +1442,54 @@ "categories": [] }, { - "id": "2c1f7fbb-3d9f-41fc-804a-9e1053e89256", - "firstName": "Kiki", - "lastName": "Chang", - "fullName": "Kiki Chang", - "bio": "Kiki is currently on the Android Platform team at Audible. She is passionate about the mobile developer productivity space.", - "tagLine": "Software Engineer at Audible ", - "profilePicture": "https://sessionize.com/image/eb59-400o400o1-G3ZKQKJCf2NqfMyr23V4aG.jpg", - "sessions": [ - { - "id": 719914, - "name": "Mobile Developer Productivity Panel" - } - ], - "isTopSpeaker": false, - "links": [], - "questionAnswers": [], - "categories": [] - }, - { - "id": "98e9d194-970d-4836-b451-0c7f62663c37", - "firstName": "Lazaro", - "lastName": "Clapp", - "fullName": "Lazaro Clapp", - "bio": "Lazaro is a founding engineer at Gitar, working on program analysis and refactoring tools. He is broadly interested in program analysis tooling, including static analysis tools and fast dynamic instrumentation frameworks. Before Gitar, he was one of the initial members of Uber's Programming Systems Group, where he built various components of Uber's static analysis tooling strategy, particularly around null safety. He has been a maintainer for various open source projects related to static analysis, including NullAway, NilAway, Piranha, and RxThreadEffectChecker. He is also a member of the JSpecify effort to standardize Java annotations for static analysis. He hold a Ph.D. in Computer Science from Stanford University, where he worked primarily on security analysis of Android applications.", - "tagLine": "Founding Software Engineer at Gitar", - "profilePicture": "https://sessionize.com/image/2548-400o400o1-Rrxy39XpnMGQBRpFLbnLRc.jpg", + "id": "36110e7b-c926-48ec-be43-b1a10e0641a0", + "firstName": "Gil", + "lastName": "Hartman", + "fullName": "Gil Hartman", + "bio": "Mobile Security Engineer with 12+ years of hands-on experience, now leading Appdome Engineering into improving our unified mobile app defense platform", + "tagLine": "VP Engineering, Appdome", + "profilePicture": "https://sessionize.com/image/a7b3-400o400o1-J1SGxaJW2bmavbxsdPmizG.png", "sessions": [ { - "id": 671488, - "name": "How we automated code maintenance and you can too!" + "id": 733000, + "name": "Exploring Android Accessibility Malware" } ], "isTopSpeaker": false, "links": [ { "title": "LinkedIn", - "url": "https://www.linkedin.com/in/lazaro-clapp-95720247/", + "url": "https://www.linkedin.com/in/gil-hartman/", "linkType": "LinkedIn" - }, - { - "title": "Blog", - "url": "https://gitar.co/blog", - "linkType": "Blog" - }, - { - "title": "Company Website", - "url": "https://gitar.co/", - "linkType": "Company_Website" } ], "questionAnswers": [], "categories": [] }, { - "id": "ee461055-a7e0-418a-b4b9-59803a0814fc", - "firstName": "Marcus", - "lastName": "Merrell", - "fullName": "Marcus Merrell", - "bio": "Marcus Merrell is the Senior Director of Technology Strategy at Sauce Labs. With a background in test automation architecture, release management, CI/CD, cloud software and container management, Marcus leads the partner program and works closely with customers to evaluate and iterate on the services offered by Sauce Labs. He is also experienced in analytics and marketing automation.", - "tagLine": "Senior Director of Technology Strategy, Sauce Labs", - "profilePicture": "https://sessionize.com/image/edb4-400o400o1-hVeBTo5Lo8ugyUxpfvoQRa.jpeg", + "id": "4b141461-befd-4bd3-83c9-1c1f7599a9c6", + "firstName": "Goran", + "lastName": "Minov", + "fullName": "Goran Minov", + "bio": "Goran Minov is a native Macedonian currently living in London (UK), holding a Master of information science in the area of software engineering. He is a Technical Team Lead at Okta and is passionate about Android, cloud technologies and infrastructure engineering.", + "tagLine": "Technical Team Lead @Okta", + "profilePicture": "https://sessionize.com/image/98d0-400o400o1-aGC4JhZ85aShjAmY4TNPT2.jpg", "sessions": [ { - "id": 719602, - "name": "A Skeptic's Guide to Generative AI in the SDLC" + "id": 756181, + "name": "Fortify the Fort: Think outside the security" } ], "isTopSpeaker": false, "links": [ { "title": "X (Twitter)", - "url": "https://twitter.com/mmerrell", + "url": "https://twitter.com/lineargs", "linkType": "Twitter" }, { "title": "LinkedIn", - "url": "https://www.linkedin.com/in/marcus-merrell-285266/", + "url": "https://www.linkedin.com/in/lineargs/", "linkType": "LinkedIn" } ], @@ -1309,29 +1497,39 @@ "categories": [] }, { - "id": "f50b0148-337b-4213-b22a-48b8681e7486", - "firstName": "Marek", - "lastName": "Trusinski", - "fullName": "Marek Trusinski", - "bio": "Technical lead and key engineer for NFC, Access Control, UWB and Payment technology at Zebra Technologies. Responsible for all Near-field communication and RF technology hardware and software design and development including Smart Cards, Secure Element and Wallet technology. Recipient of multiple US granted and pending patents. ", - "tagLine": "Zebra Technologies, Fellow Engineer, Solutions Architect ", - "profilePicture": "https://sessionize.com/image/d617-400o400o1-Pwz16bcAdYSyPwQi7MDCYt.jpg", + "id": "e11a53fd-1cfb-4930-9dfa-42187e94d869", + "firstName": "Hadi", + "lastName": "Tok", + "fullName": "Hadi Tok", + "bio": "Hadi Develops Android Applications since Android 1.6 Donut and very passionate about it. Developed a handful of Android applications since then with a variety of technical challenges. Hadi currently works at WhatsApp with interest in UI performance. ", + "tagLine": "Android GDE, Software Engineer at WhatsApp", + "profilePicture": "https://sessionize.com/image/365d-400o400o1-M6bTfdGhZo9z73ngPM9Wyg.jpg", "sessions": [ { - "id": 716138, - "name": "Mobile Wallet Technology - Harnessing Apple VAS and Google Smart TAP for Innovative App Development" + "id": 734218, + "name": "Why WhatsApp uses ListView" } ], "isTopSpeaker": false, "links": [ + { + "title": "X (Twitter)", + "url": "https://twitter.com/hadi_tok", + "linkType": "Twitter" + }, { "title": "LinkedIn", - "url": "https://www.linkedin.com/in/marek-trusinski-12b36913/", + "url": "https://www.linkedin.com/in/haditok/", "linkType": "LinkedIn" }, + { + "title": "Blog", + "url": "https://medium.com/@oshamahue", + "linkType": "Blog" + }, { "title": "Company Website", - "url": "https://www.zebra.com/", + "url": "https://whatsapp.com", "linkType": "Company_Website" } ], @@ -1339,124 +1537,119 @@ "categories": [] }, { - "id": "71373c0f-53e8-4020-8d16-1bdfe603c3c7", - "firstName": "Markus", - "lastName": "Hintersteiner", - "fullName": "Markus Hintersteiner", - "bio": "Making Android apps crash less", - "tagLine": "Mobile @ sentry.io", - "profilePicture": "https://sessionize.com/image/1606-400o400o1-skaaNCWH7T33yLNdHUfk2S.jpg", + "id": "b99dc2e2-df83-4045-a5cb-c4d7dea5db1e", + "firstName": "Halil", + "lastName": "Ozercan", + "fullName": "Halil Ozercan", + "bio": "Halil Ozercan works in the Compose Text team, mainly focusing on Text APIs like TextFields, text styling, and performance. ", + "tagLine": "Software Engineer – Google", + "profilePicture": "https://sessionize.com/image/1546-400o400o1-ZNPXNnev2CFeRRhbZXANk.jpg", "sessions": [ { - "id": 720124, - "name": "Sneaky SDKs: Things You Didn't Know Third-Party SDKs Could Do" - } - ], - "isTopSpeaker": false, - "links": [ + "id": 764343, + "name": "Ask Android! - Compose, GenAI, WearOS" + }, { - "title": "X (Twitter)", - "url": "https://twitter.com/markushi_", - "linkType": "Twitter" + "id": 764345, + "name": "Ask Android! - Compose, GenAI, Platform" }, { - "title": "LinkedIn", - "url": "https://www.linkedin.com/in/markus-hintersteiner-344b5b73/", - "linkType": "LinkedIn" + "id": 764391, + "name": "Ask Android! - Compose, Media, Platform" }, { - "title": "Blog", - "url": "https://markushintersteiner.at/", - "linkType": "Blog" + "id": 764396, + "name": "Ask Android! - Compose, Media, Platform" }, { - "title": "Company Website", - "url": "https://sentry.io", - "linkType": "Company_Website" + "id": 764400, + "name": "Ask Android! - Compose, WearOS, Platform" + }, + { + "id": 764404, + "name": "Ask Android! - Compose, Gemini in AS, KMP" + } + ], + "isTopSpeaker": false, + "links": [ + { + "title": "X (Twitter)", + "url": "https://twitter.com/halilozercan", + "linkType": "Twitter" } ], "questionAnswers": [], "categories": [] }, { - "id": "1916ae1c-96d7-480f-9eed-bf5dce444441", - "firstName": "Márton", - "lastName": "Braun", - "fullName": "Márton Braun", - "bio": "Márton is a Kotlin Developer Advocate at JetBrains, working on making Kotlin Multiplatform awesome. Passionate about education, he's a guest lecturer at the Budapest University of Technology and Economics.\r\n\r\nHe’s been contributing to the community through writing, speaking, and open source libraries since his university days. He is a Google Developer Expert for Android and Kotlin, and a co-organizer of Android Budapest and Android Worldwide.", - "tagLine": "Developer Advocate at JetBrains", - "profilePicture": "https://sessionize.com/image/e76e-400o400o1-48Xecw4YZ8eXv2jhaMBiqP.png", + "id": "0233c2ee-3bcd-4dee-9de5-c765b8c27cc0", + "firstName": "Harriet", + "lastName": "Taylor", + "fullName": "Harriet Taylor", + "bio": "As a seasoned app developer with over 7 years experience, Harriet has been integral in the creation of the android app for the UK's top automotive market place, Auto Trader. With a masters degree in electronic engineering and a focus on innovation, she specialises in user-centric solutions and proof of concepts, both client and server side, using Java & Kotlin. She is dedicated to promoting diversity in technology, particularly empowering women in tech through advocacy and inclusive environments.", + "tagLine": "Senior Android Developer at Auto Trader UK", + "profilePicture": "https://sessionize.com/image/3e50-400o400o1-WsfviTcEnysbcncgX5Qwze.jpg", "sessions": [ { - "id": 721534, - "name": "Composing an API the *right* way" + "id": 708032, + "name": "DIY Server-Driven UI: Building Auto Trader's SDUI platform" } ], "isTopSpeaker": false, "links": [ - { - "title": "X (Twitter)", - "url": "https://twitter.com/zsmb13", - "linkType": "Twitter" - }, { "title": "LinkedIn", - "url": "https://www.linkedin.com/in/zsmb13/", + "url": "https://www.linkedin.com/in/harriettaylor93/", "linkType": "LinkedIn" }, { "title": "Blog", - "url": "https://zsmb.co/", + "url": "https://linktr.ee/HarrietInTech", "linkType": "Blog" - }, - { - "title": "Company Website", - "url": "https://www.jetbrains.com/", - "linkType": "Company_Website" } ], "questionAnswers": [], "categories": [] }, { - "id": "598e1141-ce68-4cb2-8e9d-d8c9f5add09c", - "firstName": "Matt", - "lastName": "McKenna", - "fullName": "Matt McKenna", - "bio": "Matt (he/him) is a Software engineer specializing in Android. He is passionate about people, podcasts and always learning. Currently he works on SDKs at Square and enjoys well designed architecture and meaningful UIs.\r\n\r\nHis journey into Android has been fueled by fostering open discussions with other engineers, a passion for helping others through technology, and many midnight espressos. \r\n\r\nAfter hours, Matt likes to convince his friends that boardgames are not dead.", - "tagLine": "Android at Square, Android GDE", - "profilePicture": "https://sessionize.com/image/a9bc-400o400o1-nCyA3JnGSQwZckqKTmCMUQ.png", + "id": "2d41d3fb-3321-4b47-a401-ae84a5de2423", + "firstName": "Huyen Tue", + "lastName": "Dao", + "fullName": "Huyen Tue Dao", + "bio": "Huyen Tue Dao is an Android developer and Google Developer Expert for Android and Kotlin. She previously worked as an Android developer at Trello and Adobe. Huyen also co-hosts the \"Android Faithful\" podcast as part of the Daily Tech News Show network.\r\n\r\nHuyen lives in Denver, CO though is often found in the DC Metro area. When not programming, she is moving (kettlebells, HIIT, dance, yoga, strength) and gaming (video, board, card, mobile, anything).", + "tagLine": "Randomly Typing | Android + Kotlin Google Developer Expert ", + "profilePicture": "https://sessionize.com/image/65aa-400o400o1-n2AHF6pBXM6ML5n55i7UE9.jpg", "sessions": [ { - "id": 721657, - "name": "Hue-manize Your Android Apps: Develop for Color Blindness" + "id": 736477, + "name": "Creating a Custom Compose Layout, Step-by-Step" } ], - "isTopSpeaker": true, + "isTopSpeaker": false, "links": [ { "title": "X (Twitter)", - "url": "https://twitter.com/himattm", + "url": "https://twitter.com/queencodemonkey", "linkType": "Twitter" }, { "title": "LinkedIn", - "url": "https://www.linkedin.com/in/himattm/", + "url": "https://www.linkedin.com/in/huyentuedao", "linkType": "LinkedIn" }, { "title": "Instagram", - "url": "https://www.instagram.com/himattm/", + "url": "https://instagram.com/queencodemonkey", "linkType": "Instagram" }, { "title": "Blog", - "url": "https://blog.mmckenna.me", + "url": "https://www.randomlytyping.com/", "linkType": "Blog" }, { "title": "Company Website", - "url": "https://block.xyz/", + "url": "https://www.randomlytyping.com", "linkType": "Company_Website" } ], @@ -1464,39 +1657,1233 @@ "categories": [] }, { - "id": "370405c2-9e0a-4dca-bcdd-fa300cf4cc2f", - "firstName": "Matt", - "lastName": "Ramotar", - "fullName": "Matt Ramotar", - "bio": "Senior software engineer at Uber. Authored Store5, maintain Store under the Mobile Native Foundation. Presented at Droidcon SF 2023. Funded by The Kotlin Foundation. Podcast guest on JetBrains' Talking Kotlin. Outside of work: skiing, hiking, playing with my dog Tag.", - "tagLine": "Senior Software Engineer at Uber", - "profilePicture": "https://sessionize.com/image/1a34-400o400o1-TWucncSoXfghdhsDo6mWQX.png", + "id": "6624cb6c-7fc4-4495-a87f-8060e88d7d18", + "firstName": "Jack", + "lastName": "Adams", + "fullName": "Jack Adams", + "bio": "I’m a Senior Android Engineer at Trainline, with 4 years experience in Android development. I’m passionate about building scalable architectures and processes to enable building apps within large teams. Outside of work, I enjoy Muay Thai and chess as well as keeping up with the latest news in the rocket industry.", + "tagLine": "Senion Android Engineer at Trainline", + "profilePicture": "https://sessionize.com/image/c46b-400o400o1-7GgvUJAM5wAcFiyrHLAzdc.jpg", "sessions": [ { - "id": 722122, - "name": "Modern Paging at Scale: StoreX + Compose" + "id": 734509, + "name": "Building State Holders in Compose with Molecule: A New Approach to Reusable UI Components" } ], "isTopSpeaker": false, "links": [ - { - "title": "X (Twitter)", - "url": "https://www.twitter.com/mattramotar", - "linkType": "Twitter" - }, { "title": "LinkedIn", - "url": "https://www.linkedin.com/in/mramotar/", + "url": "https://www.linkedin.com/in/jack-adams-444874220", "linkType": "LinkedIn" - }, - { - "title": "Blog", - "url": "https://matt.ramotar.xyz", - "linkType": "Blog" - }, - { - "title": "Company Website", - "url": "https://www.uber.com/", + } + ], + "questionAnswers": [], + "categories": [] + }, + { + "id": "0e4f3abe-cc6c-409a-8f34-e346f23c0cc4", + "firstName": "Jeffrey", + "lastName": "Bunn", + "fullName": "Jeffrey Bunn", + "bio": "I'm the co-founder of Clearful, an award-winning multi-platform digital journal for personal growth, and Mealime, a top meal-planning app that was acquired in 2018. Alongside my wife Maria, we create consumer products that enrich lives. I also support developers at RevenueCat, the top app monetization platform.", + "tagLine": "Co-Founder of Clearful and Mealime & Support Engineer at RevenueCat", + "profilePicture": "https://sessionize.com/image/ee03-400o400o1-pyJXN76ig64L6grc7BHKmh.png", + "sessions": [ + { + "id": 741888, + "name": "Monetizing Your Side Project to $1k in Monthly Revenue and Beyond" + } + ], + "isTopSpeaker": false, + "links": [ + { + "title": "X (Twitter)", + "url": "https://twitter.com/jeffreybunn", + "linkType": "Twitter" + }, + { + "title": "LinkedIn", + "url": "https://linkedin.com/in/jeffrey-bunn", + "linkType": "LinkedIn" + }, + { + "title": "Blog", + "url": "https://www.jeffreybunn.com/", + "linkType": "Blog" + } + ], + "questionAnswers": [], + "categories": [] + }, + { + "id": "b3baa5b6-3c85-4a36-97c5-9a252f887ae4", + "firstName": "Jelle", + "lastName": "Fresen", + "fullName": "Jelle Fresen", + "bio": null, + "tagLine": "Software Engineer at Google", + "profilePicture": "https://sessionize.com/image/3fde-400o400o1-D3Mpe62o9gxTLBYCzNUcmH.jpg", + "sessions": [ + { + "id": 764323, + "name": "Ask Android! - Compose, KMP, Gemini in AS (copy)" + }, + { + "id": 764331, + "name": "Ask Android! - Compose, GenAI, WearOS" + }, + { + "id": 764391, + "name": "Ask Android! - Compose, Media, Platform" + }, + { + "id": 764396, + "name": "Ask Android! - Compose, Media, Platform" + }, + { + "id": 764400, + "name": "Ask Android! - Compose, WearOS, Platform" + }, + { + "id": 764404, + "name": "Ask Android! - Compose, Gemini in AS, KMP" + } + ], + "isTopSpeaker": false, + "links": [], + "questionAnswers": [], + "categories": [] + }, + { + "id": "18ce6325-d3f4-4478-99d0-5683c4b924c2", + "firstName": "Jimmy", + "lastName": "Ray", + "fullName": "Jimmy Ray", + "bio": "Jimmy, a Principal Software Engineer at Auto Trader, started developing software around 20 years ago and has led teams to build Android apps for over a decade. He is passionate about frameworks, engines, and APIs, clean code and software craftsmanship, driving personal development and growth and having fun doing it. \r\n\r\nJimmy began speaking in 2016 after a long time of attending events and networking. He's presented to various audiences, from meet-ups to large conference talks. Whatever the talk, expect it to be relaxed, humorous, and informative.", + "tagLine": "Principal Android Developer at Auto Trader UK", + "profilePicture": "https://sessionize.com/image/5a01-400o400o1-MouqB96CzuM222BcwB8Akq.jpg", + "sessions": [ + { + "id": 708032, + "name": "DIY Server-Driven UI: Building Auto Trader's SDUI platform" + } + ], + "isTopSpeaker": false, + "links": [ + { + "title": "LinkedIn", + "url": "https://www.linkedin.com/in/jimmyrayuk/", + "linkType": "LinkedIn" + }, + { + "title": "Company Website", + "url": "https://www.autotrader.co.uk", + "linkType": "Company_Website" + } + ], + "questionAnswers": [], + "categories": [] + }, + { + "id": "903c7a65-63f0-4244-8f8c-7ab8f7acae75", + "firstName": "John", + "lastName": "Rodriguez", + "fullName": "John Rodriguez", + "bio": "John is an Android engineer @ Duolingo, who previously worked on Cash App and Square's Point-of-Sale and Developer SDK teams. He is the lead maintainer for Paparazzi and has contributed to LeakCanary, Picasso and Wire.", + "tagLine": "Android and Developer Productivity", + "profilePicture": "https://sessionize.com/image/852a-400o400o1-Qguf3YC74ywpVgGWVkEbMm.png", + "sessions": [ + { + "id": 736513, + "name": "A Snapshot Preview of Paparazzi 2.0" + } + ], + "isTopSpeaker": false, + "links": [ + { + "title": "X (Twitter)", + "url": "https://twitter.com/jrodbx", + "linkType": "Twitter" + }, + { + "title": "LinkedIn", + "url": "https://www.linkedin.com/in/jrodbx/", + "linkType": "LinkedIn" + }, + { + "title": "Company Website", + "url": "https://duolingo.com/", + "linkType": "Company_Website" + } + ], + "questionAnswers": [], + "categories": [] + }, + { + "id": "555e52b7-fcb6-49ea-81c7-d9b52cc4c7e9", + "firstName": "Jonathan", + "lastName": "Wendorf", + "fullName": "Jonathan Wendorf", + "bio": "Jonathan is a Partner Engineer at Meta, supporting partners in building spatial apps for Meta Horizon OS.", + "tagLine": "Reality Labs Partner Engineer, Meta", + "profilePicture": "https://sessionize.com/image/b83a-400o400o1-BcZ3Hf3xoNCANekaHM6Fji.png", + "sessions": [ + { + "id": 760426, + "name": "Enter the Metaverse: Android Apps on Meta Horizon OS" + } + ], + "isTopSpeaker": false, + "links": [ + { + "title": "LinkedIn", + "url": "https://www.linkedin.com/in/jkwendorf/", + "linkType": "LinkedIn" + } + ], + "questionAnswers": [], + "categories": [] + }, + { + "id": "578f244d-fe79-4759-a84f-63dfbefbd06d", + "firstName": "Jose", + "lastName": "Alcérreca", + "fullName": "Jose Alcérreca", + "bio": "Jose is a Developer Relations Engineer working on Android, trying to make Architecture and Testing effortless for developers.", + "tagLine": "Android Developer Relations Engineer at Google", + "profilePicture": "https://sessionize.com/image/a272-400o400o1-nmCkbJM5cwpA536gxVbzp2.jpg", + "sessions": [ + { + "id": 747072, + "name": "Scalable Testing Strategies" + } + ], + "isTopSpeaker": false, + "links": [ + { + "title": "X (Twitter)", + "url": "https://twitter.com/ppvi", + "linkType": "Twitter" + }, + { + "title": "LinkedIn", + "url": "https://www.linkedin.com/in/jose-alc%C3%A9rreca-01490bb/", + "linkType": "LinkedIn" + }, + { + "title": "Company Website", + "url": "https://d.android.com", + "linkType": "Company_Website" + } + ], + "questionAnswers": [], + "categories": [] + }, + { + "id": "7a8a22c6-5b01-4f0a-bc04-12d4ada5de21", + "firstName": "Jossi", + "lastName": "Wolf", + "fullName": "Jossi Wolf", + "bio": "Jossi is a Software Engineer working on Jetpack Compose.", + "tagLine": "Working on Compose @Google.", + "profilePicture": "https://sessionize.com/image/5133-400o400o1-fovpVfBDWPMUpKnm33APCJ.png", + "sessions": [ + { + "id": 764343, + "name": "Ask Android! - Compose, GenAI, WearOS" + }, + { + "id": 764345, + "name": "Ask Android! - Compose, GenAI, Platform" + }, + { + "id": 764406, + "name": "Ask Android! - Compose, Gemini in AS, KMP" + }, + { + "id": 764408, + "name": "Ask Android! - Compose, Gemini in AS, KMP" + }, + { + "id": 764409, + "name": "Ask Android! - Compose, Gemini in AS, KMP" + } + ], + "isTopSpeaker": false, + "links": [], + "questionAnswers": [], + "categories": [] + }, + { + "id": "85f45c57-98a0-45e9-8a5f-ed6096e268b9", + "firstName": "Kate", + "lastName": "Moksina", + "fullName": "Kate Moksina", + "bio": "Kate has been the sole Android engineer on the Growth team for Monzo Business for the past two years. The team's primary focus is on driving product-led growth through rapid experimentation, while ensuring the high quality people expect of Monzo. Over this period, Kate has contributed to the development of a referral program, the introduction of business savings interest rates, and improvements to the signup process.\r\n\r\nBefore joining Monzo, Kate has worked as a software engineer across various industries, including retail and airlines.", + "tagLine": "Android Engineer for Monzo Business", + "profilePicture": "https://sessionize.com/image/5379-400o400o1-Pqr6usMGqM1fFSfU7gQM9k.jpg", + "sessions": [ + { + "id": 735932, + "name": "Don't Build to Last: Strategies for Designing and Productionising Experiments" + } + ], + "isTopSpeaker": false, + "links": [], + "questionAnswers": [], + "categories": [] + }, + { + "id": "837dd36a-5782-49cc-8da5-3f7fc7e4da8a", + "firstName": "Kateryna", + "lastName": "Semenova", + "fullName": "Kateryna Semenova", + "bio": null, + "tagLine": "Sr. Developer Relations Engineer at Google", + "profilePicture": "https://sessionize.com/image/5517-400o400o1-hZzhLvRyPDGmKBX17yG2Q3.jpg", + "sessions": [ + { + "id": 764331, + "name": "Ask Android! - Compose, GenAI, WearOS" + }, + { + "id": 764343, + "name": "Ask Android! - Compose, GenAI, WearOS" + }, + { + "id": 764345, + "name": "Ask Android! - Compose, GenAI, Platform" + }, + { + "id": 764347, + "name": "Ask Android! - GenAI, Platform, Adaptive apps on all form factors" + }, + { + "id": 764350, + "name": "Ask Android! - Gen AI, Platform, Adaptive apps on all form factors" + }, + { + "id": 764353, + "name": "Ask Android! -GenAI, Platform, Adaptive apps on all form factors" + }, + { + "id": 771431, + "name": "#TheAndroidShow - Panel Discussion" + }, + { + "id": 764372, + "name": "Ask Android! - Gen AI, Media, Adaptive apps on all form factors" + }, + { + "id": 764376, + "name": "Ask Android! - Gen AI, Media, Adaptive apps on all form factors" + }, + { + "id": 764378, + "name": "Ask Android! - Gen AI, Media, Adaptive apps on all form factors" + }, + { + "id": 764381, + "name": "Ask Android! -GenAI, Media, Adaptive apps on all form factors" + } + ], + "isTopSpeaker": false, + "links": [], + "questionAnswers": [], + "categories": [] + }, + { + "id": "84a7e91b-e090-4d57-9eed-f3b9f277dc95", + "firstName": "Kevin", + "lastName": "Galligan", + "fullName": "Kevin Galligan", + "bio": "Technology Partner at Touchlab. Kotlin Foundation Ecosystem Committee member. Kotlin GDE, open source contributor, and conference speaker. Helping define the future of Kotlin Multiplatform, and technology platforms in general.", + "tagLine": "Touchlab Technology Partner", + "profilePicture": "https://sessionize.com/image/f487-400o400o1-P6rRPbjNN4Avc7ddBwBGkh.jpg", + "sessions": [ + { + "id": 759067, + "name": "The Future of Android, Kotlin, and Everything" + }, + { + "id": 760569, + "name": "Roundtable: KMP & CMP - Yes we can!...but...." + } + ], + "isTopSpeaker": false, + "links": [], + "questionAnswers": [], + "categories": [] + }, + { + "id": "892ec2dc-5b2e-45fb-9393-ff1407ebebe7", + "firstName": "Konstantin", + "lastName": "Zolotov", + "fullName": "Konstantin Zolotov", + "bio": "Got into Android by rooting, patching and flashing custom firmwares somewhen around Android Gingerbread.\r\nWorked in product teams since 2014 and joined a core team at Bumble in 2022 to make other developers happy.", + "tagLine": "Senior Android Engineer @ Bumble", + "profilePicture": "https://sessionize.com/image/9262-400o400o1-aYVP29WmKPu1Et9gzwGRYL.jpg", + "sessions": [ + { + "id": 722874, + "name": "From realtime CameraX filters to General Purpose GPU computing in simple steps" + } + ], + "isTopSpeaker": false, + "links": [ + { + "title": "LinkedIn", + "url": "https://www.linkedin.com/in/konstantin-zolotov-563b3968", + "linkType": "LinkedIn" + }, + { + "title": "Company Website", + "url": "https://bumble.com", + "linkType": "Company_Website" + } + ], + "questionAnswers": [], + "categories": [] + }, + { + "id": "1c163a41-865b-4915-b032-ef4942e2f47c", + "firstName": "Kristina", + "lastName": "Simakova", + "fullName": "Kristina Simakova", + "bio": "Kristina is an Engineering Manager at Google. She is managing Android Media Editing team. The team is working on Media3 Editing", + "tagLine": "Software Engineering Manager @ Google | Android Media Editing", + "profilePicture": "https://sessionize.com/image/a502-400o400o1-nHrPafgjqkDURHAam5xcVD.jpg", + "sessions": [ + { + "id": 734739, + "name": "Video Editing on Android with Media3" + }, + { + "id": 764351, + "name": "Ask Android! - WearOS, Media, Adaptive apps on all form factors" + }, + { + "id": 764365, + "name": "Ask Android! - WearOS, Media, Adaptive apps on all form factors" + }, + { + "id": 764370, + "name": "Ask Android! - WearOS, Media, Adaptive apps on all form factors" + }, + { + "id": 764372, + "name": "Ask Android! - Gen AI, Media, Adaptive apps on all form factors" + }, + { + "id": 764376, + "name": "Ask Android! - Gen AI, Media, Adaptive apps on all form factors" + }, + { + "id": 764378, + "name": "Ask Android! - Gen AI, Media, Adaptive apps on all form factors" + }, + { + "id": 764381, + "name": "Ask Android! -GenAI, Media, Adaptive apps on all form factors" + }, + { + "id": 764391, + "name": "Ask Android! - Compose, Media, Platform" + }, + { + "id": 764396, + "name": "Ask Android! - Compose, Media, Platform" + } + ], + "isTopSpeaker": false, + "links": [ + { + "title": "X (Twitter)", + "url": "https://x.com/KristiSimakova", + "linkType": "Twitter" + }, + { + "title": "LinkedIn", + "url": "https://www.linkedin.com/in/ksimakova/", + "linkType": "LinkedIn" + } + ], + "questionAnswers": [], + "categories": [] + }, + { + "id": "2fb0b020-9fa9-49f1-b4a4-54f71dca57c5", + "firstName": "Kseniia", + "lastName": "Shumelchyk", + "fullName": "Kseniia Shumelchyk", + "bio": "Kseniia is a Developer Relations Engineer on the Android team at Google, helping developers to design and build great apps for Wear OS.\r\n\r\nPrior to joining Google, Kseniia worked as a full-time Android engineer and was a Google Developer Expert for Android.", + "tagLine": "Engineering Manager @ Google, Android Developer Relations", + "profilePicture": "https://sessionize.com/image/70b6-400o400o1-DXh7tbhXiMNCb3uHdg6hCa.jpg", + "sessions": [ + { + "id": 764331, + "name": "Ask Android! - Compose, GenAI, WearOS" + }, + { + "id": 764343, + "name": "Ask Android! - Compose, GenAI, WearOS" + }, + { + "id": 764351, + "name": "Ask Android! - WearOS, Media, Adaptive apps on all form factors" + }, + { + "id": 764365, + "name": "Ask Android! - WearOS, Media, Adaptive apps on all form factors" + }, + { + "id": 764370, + "name": "Ask Android! - WearOS, Media, Adaptive apps on all form factors" + }, + { + "id": 764397, + "name": "Ask Android! - Compose, WearOS, Platform" + }, + { + "id": 764398, + "name": "Ask Android! - Compose, WearOS, Platform" + }, + { + "id": 764399, + "name": "Ask Android! - Compose, WearOS, Platform" + }, + { + "id": 764400, + "name": "Ask Android! - Compose, WearOS, Platform" + } + ], + "isTopSpeaker": false, + "links": [ + { + "title": "X (Twitter)", + "url": "https://x.com/kseniiaS", + "linkType": "Twitter" + }, + { + "title": "LinkedIn", + "url": "https://uk.linkedin.com/in/kseniiashumelchyk", + "linkType": "LinkedIn" + }, + { + "title": "Blog", + "url": "https://d.android.com/wear", + "linkType": "Blog" + }, + { + "title": "Company Website", + "url": "https://d.android.com/wear", + "linkType": "Company_Website" + } + ], + "questionAnswers": [], + "categories": [] + }, + { + "id": "7280b9e7-ddf7-4cfb-b85b-1e998d851f66", + "firstName": "Marcello", + "lastName": "Galhardo", + "fullName": "Marcello Galhardo", + "bio": "Marcello is a seasoned software engineer with over 10 years of experience across web, backend, desktop, and Android development. Having worked in diverse teams at Quandoo, N26, and Delivery Hero, he has contributed to apps with millions of international users.\r\n\r\nCurrently, he works at the AndroidX Architecture Components Team at Google in London, having previously contributed to the SystemUI Team. ", + "tagLine": "Software Engineer", + "profilePicture": "https://sessionize.com/image/e8e9-400o400o1-fsmB2WdNXHRxntPonKJRhn.jpg", + "sessions": [ + { + "id": 764303, + "name": "Ask Android! - Compose, KMP, Gemini in AS" + }, + { + "id": 764328, + "name": "Ask Android! - Compose, KMP, Gemini in AS" + }, + { + "id": 764329, + "name": "Ask Android! - Compose, KMP, Gemini in AS" + }, + { + "id": 764330, + "name": "Ask Android! - Compose, KMP, Gemini in AS" + }, + { + "id": 764323, + "name": "Ask Android! - Compose, KMP, Gemini in AS (copy)" + }, + { + "id": 696374, + "name": "AndroidX Lifecycle's Path to Multiplatform" + }, + { + "id": 764404, + "name": "Ask Android! - Compose, Gemini in AS, KMP" + }, + { + "id": 764406, + "name": "Ask Android! - Compose, Gemini in AS, KMP" + }, + { + "id": 764408, + "name": "Ask Android! - Compose, Gemini in AS, KMP" + }, + { + "id": 764409, + "name": "Ask Android! - Compose, Gemini in AS, KMP" + } + ], + "isTopSpeaker": false, + "links": [ + { + "title": "X (Twitter)", + "url": "https://twitter.com/marcellogalhard", + "linkType": "Twitter" + }, + { + "title": "LinkedIn", + "url": "https://linkedin.com/in/marcellogalhardo", + "linkType": "LinkedIn" + }, + { + "title": "Blog", + "url": "https://marcellogalhardo.dev/", + "linkType": "Blog" + }, + { + "title": "Company Website", + "url": "https://marcellogalhardo.dev/", + "linkType": "Company_Website" + } + ], + "questionAnswers": [], + "categories": [] + }, + { + "id": "ef7c1115-d852-44b9-9f72-530ba7223c55", + "firstName": "Marcin", + "lastName": "Moskala", + "fullName": "Marcin Moskala", + "bio": "Marcin Moskala is an experienced developer and Kotlin trainer. He is the founder of the Kt. Academy, an official JetBrains partner for Kotlin training, author of the books Effective Kotlin, Kotlin Coroutines, and Android Development with Kotlin. He is also the main author of influential articles about Kotlin and a speaker invited to many programming conferences.", + "tagLine": "Developer during the day, author at night, trainer at Kt. Academy", + "profilePicture": "https://sessionize.com/image/af65-400o400o1-3FjkVzve3a6N6W5Qdawkwk.jpg", + "sessions": [ + { + "id": 700387, + "name": "Mistakes you make using Kotlin Coroutines" + } + ], + "isTopSpeaker": false, + "links": [ + { + "title": "X (Twitter)", + "url": "https://twitter.com/marcinmoskala", + "linkType": "Twitter" + }, + { + "title": "Blog", + "url": "https://blog.kotlin-academy.com/", + "linkType": "Blog" + }, + { + "title": "Company Website", + "url": "https://kt.academy/", + "linkType": "Company_Website" + } + ], + "questionAnswers": [], + "categories": [] + }, + { + "id": "eeb25beb-5d37-4fb7-acac-170357a1d89b", + "firstName": "Marharyta", + "lastName": "Nedzelska", + "fullName": "Marharyta Nedzelska", + "bio": "Margarita is a big Kotlin fan and Kotlin GDE. Knows both conference sides: speaking and organizing. Organized a KUG in her native city Kyiv because she believes in Knowledge Sharing and Collective Intelligence. For her everyday job, she's building Static Code Analysis tools for Java/Kotlin/Scala and other languages.", + "tagLine": "Staff Software Engineer @ Sonar", + "profilePicture": "https://sessionize.com/image/0b1a-400o400o1-e2ba4bc2-bed9-4217-ab0b-2a5b2eb895b1.jpg", + "sessions": [ + { + "id": 704275, + "name": "The state of code coverage for Kotlin" + } + ], + "isTopSpeaker": false, + "links": [ + { + "title": "X (Twitter)", + "url": "https://twitter.com/jMargaritaN", + "linkType": "Twitter" + }, + { + "title": "LinkedIn", + "url": "https://www.linkedin.com/in/marharyta-nedzelska-521806bb", + "linkType": "LinkedIn" + }, + { + "title": "Company Website", + "url": "https://www.sonarsource.com/", + "linkType": "Company_Website" + } + ], + "questionAnswers": [], + "categories": [] + }, + { + "id": "3d4b5098-0829-4b34-b0bf-122ab126fdae", + "firstName": "Maria", + "lastName": "Neumayer", + "fullName": "Maria Neumayer", + "bio": "Maria Neumayer is a Principal Software Engineer currently working at Skyscanner. She’s been working as an engineer since 2010, with a focus on Android. She's an Austrian living in London, previously worked at various small to medium sized companies including Deliveroo, Citymapper and Path.", + "tagLine": "Principal Software Engineer at Skyscanner", + "profilePicture": "https://sessionize.com/image/d345-400o400o1-3wPpJqnGuqemU7jynSggGb.jpg", + "sessions": [ + { + "id": 757537, + "name": "Roundtable: Mastering Release Management" + } + ], + "isTopSpeaker": false, + "links": [ + { + "title": "Twitter", + "url": "http://twitter.com/marianeum", + "linkType": "Twitter" + }, + { + "title": "LinkedIn", + "url": "https://www.linkedin.com/in/marianeumayer/", + "linkType": "LinkedIn" + }, + { + "title": "Blog", + "url": "https://medium.com/@marianeum", + "linkType": "Blog" + } + ], + "questionAnswers": [], + "categories": [] + }, + { + "id": "1916ae1c-96d7-480f-9eed-bf5dce444441", + "firstName": "Márton", + "lastName": "Braun", + "fullName": "Márton Braun", + "bio": "Márton is a Kotlin Developer Advocate at JetBrains, working on making Kotlin Multiplatform awesome. Passionate about education, he's a guest lecturer at the Budapest University of Technology and Economics.\r\n\r\nHe’s been contributing to the community through writing, speaking, and open source libraries since his university days. He is a Google Developer Expert for Android and Kotlin, and a co-organizer of Android Budapest and Android Worldwide.", + "tagLine": "Developer Advocate at JetBrains", + "profilePicture": "https://sessionize.com/image/e76e-400o400o1-48Xecw4YZ8eXv2jhaMBiqP.png", + "sessions": [ + { + "id": 729194, + "name": "What’s New in Compose Multiplatform - A Live Tour" + }, + { + "id": 768515, + "name": "Kotlin by JetBrains, present and future" + } + ], + "isTopSpeaker": false, + "links": [ + { + "title": "X (Twitter)", + "url": "https://twitter.com/zsmb13", + "linkType": "Twitter" + }, + { + "title": "LinkedIn", + "url": "https://www.linkedin.com/in/zsmb13/", + "linkType": "LinkedIn" + }, + { + "title": "Blog", + "url": "https://zsmb.co/", + "linkType": "Blog" + }, + { + "title": "Company Website", + "url": "https://www.jetbrains.com/", + "linkType": "Company_Website" + } + ], + "questionAnswers": [], + "categories": [] + }, + { + "id": "95ed3109-e7c3-41ff-a241-381c9fefb558", + "firstName": "Matthew", + "lastName": "McCullough", + "fullName": "Matthew McCullough", + "bio": "Helping create great Android developer experiences", + "tagLine": "VP of Product, Android Developer - Google", + "profilePicture": "https://sessionize.com/image/abdf-400o400o1-9YAG1qVuMZspDaunBSV1bg.png", + "sessions": [ + { + "id": 771426, + "name": "#TheAndroidShow - Leadership Keynote" + }, + { + "id": 771431, + "name": "#TheAndroidShow - Panel Discussion" + } + ], + "isTopSpeaker": false, + "links": [], + "questionAnswers": [], + "categories": [] + }, + { + "id": "f4580454-6603-44a8-9fcd-e98fe6cc8981", + "firstName": "Matvei", + "lastName": "Malkov", + "fullName": "Matvei Malkov", + "bio": null, + "tagLine": "Software Engineer – Google", + "profilePicture": "https://sessionize.com/image/e4fa-400o400o1-hXE89Nj2H8qTyZustibY9v.jpg", + "sessions": [ + { + "id": 764323, + "name": "Ask Android! - Compose, KMP, Gemini in AS (copy)" + }, + { + "id": 764331, + "name": "Ask Android! - Compose, GenAI, WearOS" + }, + { + "id": 764406, + "name": "Ask Android! - Compose, Gemini in AS, KMP" + }, + { + "id": 764408, + "name": "Ask Android! - Compose, Gemini in AS, KMP" + }, + { + "id": 764409, + "name": "Ask Android! - Compose, Gemini in AS, KMP" + } + ], + "isTopSpeaker": false, + "links": [], + "questionAnswers": [], + "categories": [] + }, + { + "id": "084a1449-47c9-488c-b5b6-5b8534c45a23", + "firstName": "Mauro", + "lastName": "Frezza", + "fullName": "Mauro Frezza", + "bio": "10+ years of experience in Android\r\nFocusing on reliability best practices and DDD development.", + "tagLine": "Senior Software Engineer at Hubspot", + "profilePicture": "https://sessionize.com/image/7af0-400o400o1-3cj5xLSu6y4FwLVq418mG8.jpg", + "sessions": [ + { + "id": 733921, + "name": "Effective App Monitoring in Production" + } + ], + "isTopSpeaker": false, + "links": [ + { + "title": "X (Twitter)", + "url": "https://twitter.com/maurofrezza", + "linkType": "Twitter" + }, + { + "title": "LinkedIn", + "url": "https://de.linkedin.com/in/maurofrezzadeveloper", + "linkType": "LinkedIn" + }, + { + "title": "Blog", + "url": "https://medium.com/@maurofrezza", + "linkType": "Blog" + } + ], + "questionAnswers": [], + "categories": [] + }, + { + "id": "3b95e79a-0e6b-4fcd-b44e-023fa3dfd7cd", + "firstName": "Mayowa", + "lastName": "Egbewunmi", + "fullName": "Mayowa Egbewunmi", + "bio": "Mayowa Egbewunmi is an Android Engineer with over 8 years of development experience; cutting across the Fintech, Telecom, Education and Data sourcing industry. I currently work with Premise Data as a Staff Android Engineer, where my everyday experience involves leading and developing new product initiatives for data collection. With over 4.5millions data contributors using our app in over 40 languages, I am privileged to have led the development of some of our complex data capture initiatives like video capture, audio capture and location constrained capture. Over the last 4 years with Premise Data, I have tackled tough engineering challenges not limited to Architecture, Localization, Security, Hardware Compatibility, Data Synchronization, A/B Testing, App Tracing/Analytics, CI/CD and App Monitoring.\r\n\r\nMy passion is in developing life-changing engineering products using cutting edge technologies with growth and scalability at the core of its engineering. \r\n\r\nIn my spare time, I enjoy watching Football and YouTube.", + "tagLine": "Premise Data, Staff Android Engineer.", + "profilePicture": "https://sessionize.com/image/d83c-400o400o1-sy3mGsMfRa9vH5F1Wan6m6.jpg", + "sessions": [ + { + "id": 731808, + "name": "Streamlining Permission Request in Jetpack Compose" + } + ], + "isTopSpeaker": false, + "links": [ + { + "title": "X (Twitter)", + "url": "https://twitter.com/talk2mayor30", + "linkType": "Twitter" + }, + { + "title": "LinkedIn", + "url": "https://www.linkedin.com/in/mayowa-egbewunmi-6b045474/", + "linkType": "LinkedIn" + }, + { + "title": "Blog", + "url": "https://techmayor.xyz", + "linkType": "Blog" + } + ], + "questionAnswers": [], + "categories": [] + }, + { + "id": "b32c51bc-deaf-43a9-9715-099e5e18f692", + "firstName": "Meghan", + "lastName": "Stronach", + "fullName": "Meghan Stronach", + "bio": "Meghan is a PM on Qualcomm AI Hub. Born and raised in the Toronto area, she graduated from the University of Waterloo in Management Engineering and has spent her time at companies of various sizes, from big (Apple, Qualcomm) to small startups. She enjoys working with teams of various sizes, ensuring the most effective decision is made, and talking with customers to learn their roadblocks of adopting ML on device. ", + "tagLine": "Qualcomm AI Hub Program Manager", + "profilePicture": "https://sessionize.com/image/54ae-400o400o1-DaRfy7tQ6D8f2gf6fJifUq.png", + "sessions": [ + { + "id": 748950, + "name": "How to Optimize, Validate and Deploy ML Models On Device" + }, + { + "id": 768482, + "name": "How to Optimize, Validate and Deploy ML Models On Device (Part II)" + } + ], + "isTopSpeaker": false, + "links": [ + { + "title": "LinkedIn", + "url": "https://www.linkedin.com/in/mestrona/", + "linkType": "LinkedIn" + }, + { + "title": "Company Website", + "url": "https://aihub.qualcomm.com", + "linkType": "Company_Website" + } + ], + "questionAnswers": [], + "categories": [] + }, + { + "id": "327f56b4-c631-4489-9590-37bdfc856e3a", + "firstName": "Miguel", + "lastName": "Montemayor", + "fullName": "Miguel Montemayor", + "bio": "Developer Relations Engineer at Google working on tablets, foldables, and stylus.", + "tagLine": "Google, Developer Relations Engineer", + "profilePicture": "https://sessionize.com/image/a27c-400o400o1-Up8GrNeGUFEuC8mvsENRDw.jpg", + "sessions": [ + { + "id": 764350, + "name": "Ask Android! - Gen AI, Platform, Adaptive apps on all form factors" + } + ], + "isTopSpeaker": false, + "links": [ + { + "title": "X (Twitter)", + "url": "https://x.com/migmontemayor", + "linkType": "Twitter" + } + ], + "questionAnswers": [], + "categories": [] + }, + { + "id": "c83dc04e-7a0a-4cbc-9d73-10d08f18a68b", + "firstName": "Miguel", + "lastName": "Montemayor", + "fullName": "Miguel Montemayor", + "bio": null, + "tagLine": "Developer Relations Engineer at Google", + "profilePicture": "https://sessionize.com/image/83b0-400o400o1-XWKwCHiFfrpX391G6vgSyR.jpg", + "sessions": [ + { + "id": 764347, + "name": "Ask Android! - GenAI, Platform, Adaptive apps on all form factors" + }, + { + "id": 764372, + "name": "Ask Android! - Gen AI, Media, Adaptive apps on all form factors" + }, + { + "id": 764378, + "name": "Ask Android! - Gen AI, Media, Adaptive apps on all form factors" + } + ], + "isTopSpeaker": false, + "links": [], + "questionAnswers": [], + "categories": [] + }, + { + "id": "d7e7d278-a645-42c5-b337-c793a5b5bd79", + "firstName": "Mikhail", + "lastName": "Dudarev", + "fullName": "Mikhail Dudarev", + "bio": "Mikhail Dudarev is the CTO and co-founder of Licel. He has more than 25 years experience in building and scaling cutting edge tech solutions. He is the creator of one of the first internet banking solutions that was used by 200 banks in total. \r\nAfter starting out as a student working on aeronautical control systems, he moved into the banking industry to design cryptographic hardware and software used for mobile payments, eventually becoming an architect of mobile banking solutions.\r\nMikhail’s expertise in Java, cryptography, and smart card technologies provided the foundations for Licel’s first product, jCardSim, and later the creation of both Stringer Java Obfuscator and DexProtector.", + "tagLine": "CTO of Licel", + "profilePicture": "https://sessionize.com/image/871c-400o400o1-9eZJxjNKgUP1asBXqfMHuG.png", + "sessions": [ + { + "id": 735816, + "name": "Developing Trusted Applications for Trusted Execution Environments and vTEEs" + } + ], + "isTopSpeaker": false, + "links": [ + { + "title": "X (Twitter)", + "url": "https://x.com/MikhailDudarev", + "linkType": "Twitter" + }, + { + "title": "Company Website", + "url": "https://licelus.com", + "linkType": "Company_Website" + } + ], + "questionAnswers": [], + "categories": [] + }, + { + "id": "24eb82e3-3ea7-4b45-9ffb-d63cac580e88", + "firstName": "Mohamed", + "lastName": "Kerroumi", + "fullName": "Mohamed Kerroumi", + "bio": "Mohamed is a technical security expert at Zimperium, within the Customer Success team he advise and support customers across EMEA region for their Mobile Application Protection Suite, he has over 18 years of experience around mobile security, Trusted Execution Environment (TEE) and embedded security and helped many large customers secure their applications such as: banking, mobile payments, Identity, messaging and more.\r\n", + "tagLine": "Zimperium - Solutions Architect", + "profilePicture": "https://sessionize.com/image/f507-400o400o1-9A4bijb6d2LSzVdsnyREM7.jpg", + "sessions": [ + { + "id": 745796, + "name": "Securing Android: Tackling Advanced Threats and Enhancing App Security" + } + ], + "isTopSpeaker": false, + "links": [], + "questionAnswers": [], + "categories": [] + }, + { + "id": "eddfc3bb-2258-45f8-b4a6-50233932a2d2", + "firstName": "Mohamed ", + "lastName": "Kerroumi", + "fullName": "Mohamed Kerroumi", + "bio": "Mohamed Kerroumi is a seasoned mobile app security expert with extensive experience in the tech industry. He has held pivotal roles such as Senior Solutions Architect, Field Applications Engineer across Europe and North America, and R&D Senior Security Engineer at leading companies like Zimperium, Thales, and Intertrust. His expertise spans mobile security solutions, application architecture, and advanced security engineering, making him a key player in the development and implementation of secure mobile technologies globally.", + "tagLine": "Mobile App Security Expert", + "profilePicture": "https://sessionize.com/image/9108-400o400o1-S97pzRz99jVgxSD27aFzur.png", + "sessions": [ + { + "id": 735282, + "name": "Securing the Unseen: Advanced Threats, Best Practices & Challenges in Mobile App Security" + } + ], + "isTopSpeaker": false, + "links": [ + { + "title": "LinkedIn", + "url": "https://www.linkedin.com/in/krishna-vishnubhotla", + "linkType": "LinkedIn" + }, + { + "title": "Blog", + "url": "https://www.zimperium.com/blog/mobile-banking-malware-regulation-stress-adaptive-security/", + "linkType": "Blog" + }, + { + "title": "Company Website", + "url": "https://www.zimperium.com", + "linkType": "Company_Website" + } + ], + "questionAnswers": [], + "categories": [] + }, + { + "id": "a79f3682-df5c-40e4-8aa8-1b6eaa7bdeec", + "firstName": "Mohit", + "lastName": "Sarveiya", + "fullName": "Mohit Sarveiya", + "bio": "Mohit Sarveiya is a Google Developer Expert in Kotlin and Android. Prior to building Android apps, he was a Backend Engineer. He was an early adopter of Kotlin and absolutely loves the language. He has given many talks and workshops on Kotlin.", + "tagLine": "Google Developers Expert Kotlin & Android", + "profilePicture": "https://sessionize.com/image/27b5-400o400o1-KVK4kvFitPjesss8TcUTR3.png", + "sessions": [ + { + "id": 696208, + "name": "Deep Dive into the Compose Compiler" + } + ], + "isTopSpeaker": false, + "links": [ + { + "title": "X (Twitter)", + "url": "https://twitter.com/heyitsmohit", + "linkType": "Twitter" + }, + { + "title": "Blog", + "url": "https://codingwithmohit.com/", + "linkType": "Blog" + }, + { + "title": "Company Website", + "url": "https://codingwithmohit.com/", + "linkType": "Company_Website" + } + ], + "questionAnswers": [], + "categories": [] + }, + { + "id": "f8c173b5-64f5-43e4-9f1c-ee44587b7691", + "firstName": "Neal", + "lastName": "Michie", + "fullName": "Neal Michie", + "bio": "Neal Michie is Director of Product Management at PACE Anti-Piracy. He believes security should be a top concern for all applications, advocating that it is not just a defensive measure but key to building long term engagement and growth. Neal brings more than two decades of mobile development experience of which more than half has been dedicated to building highly secure mobile solutions, including the first to be fully certified by both Mastercard and Visa.", + "tagLine": "PACE Anti-Piracy, Director of Product Management", + "profilePicture": "https://sessionize.com/image/27a2-400o400o1-pFZomRTw4MxznaYSxjZU6U.jpg", + "sessions": [ + { + "id": 742198, + "name": "Demystifying Code Signing" + } + ], + "isTopSpeaker": false, + "links": [ + { + "title": "X (Twitter)", + "url": "https://twitter.com/nealmichie", + "linkType": "Twitter" + }, + { + "title": "LinkedIn", + "url": "https://www.linkedin.com/in/neal-michie-59365863/", + "linkType": "LinkedIn" + }, + { + "title": "Blog", + "url": "https://paceap.com/resources/articles/", + "linkType": "Blog" + }, + { + "title": "Company Website", + "url": "https://paceap.com", + "linkType": "Company_Website" + } + ], + "questionAnswers": [], + "categories": [] + }, + { + "id": "b849afbd-1240-40e1-82ea-5660d3dca93b", + "firstName": "Neil", + "lastName": "Hutchison", + "fullName": "Neil Hutchison", + "bio": "Neil has been working away in London building Android apps for almost a decade, currently working at Toyota Connected on their companion apps. Previously he hosted Londroid and GDG Devfest LDN, among other adhoc events. Always an advocate for the Android community in London and globally.", + "tagLine": "Senior Android Engineer @ Toyota Connected Europe", + "profilePicture": "https://sessionize.com/image/e432-400o400o1-89ca7382-3ee3-4fac-ab0c-7d373c1a3c9d.jpg", + "sessions": [ + { + "id": 757520, + "name": "Roundtable: Keeping Up With Android – How to Stay Relevant" + } + ], + "isTopSpeaker": false, + "links": [ + { + "title": "LinkedIn", + "url": "https://www.linkedin.com/in/neil-hutchison-04609682/", + "linkType": "LinkedIn" + } + ], + "questionAnswers": [], + "categories": [] + }, + { + "id": "1dfe9bb5-d9bf-41a9-b7d6-dcfd7953e941", + "firstName": "Nick", + "lastName": "Butcher", + "fullName": "Nick Butcher", + "bio": null, + "tagLine": "Jetpack Compose Product Manager", + "profilePicture": "https://sessionize.com/image/2424-400o400o1-BWig3xpwFS3x4825k89RxN.jpg", + "sessions": [ + { + "id": 764303, + "name": "Ask Android! - Compose, KMP, Gemini in AS" + }, + { + "id": 764328, + "name": "Ask Android! - Compose, KMP, Gemini in AS" + }, + { + "id": 764329, + "name": "Ask Android! - Compose, KMP, Gemini in AS" + }, + { + "id": 764330, + "name": "Ask Android! - Compose, KMP, Gemini in AS" + }, + { + "id": 764397, + "name": "Ask Android! - Compose, WearOS, Platform" + }, + { + "id": 764398, + "name": "Ask Android! - Compose, WearOS, Platform" + }, + { + "id": 764399, + "name": "Ask Android! - Compose, WearOS, Platform" + } + ], + "isTopSpeaker": false, + "links": [], + "questionAnswers": [], + "categories": [] + }, + { + "id": "8730d40b-3fb7-450d-ab71-08c9dd81a48a", + "firstName": "Nicola", + "lastName": "Corti", + "fullName": "Nicola Corti", + "bio": "Nicola Corti is a Google Developer Expert for Kotlin. He has been working with the language since before version 1.0, and he is the maintainer of several open-source libraries and tools for mobile developers.\r\n\r\nHe's currently working in the React Native Core team at Meta, building one of the most popular cross-platform mobile framework. \r\n\r\nFurthermore, he is an active member of the developer community. \r\nHis involvement goes from speaking at international conferences to being a member of CFP committees and supporting developer communities across Europe.\r\n\r\nIn his free time, he also loves baking, podcasting, and running.", + "tagLine": "Kotlin GDE - Android @ React", + "profilePicture": "https://sessionize.com/image/2c35-400o400o1-0b-3fb7-450d-ab71-08c9dd81a48a.14d46ff0-032b-4678-8d21-f712d4a97457.jpeg", + "sessions": [ + { + "id": 757517, + "name": "Roundtable: Community-Driven Development: How to Contribute to OSS" + } + ], + "isTopSpeaker": false, + "links": [ + { + "title": "X (Twitter)", + "url": "https://twitter.com/cortinico", + "linkType": "Twitter" + }, + { + "title": "LinkedIn", + "url": "https://linkedin.com/in/cortinico", + "linkType": "LinkedIn" + }, + { + "title": "Blog", + "url": "http://ncorti.com", + "linkType": "Blog" + }, + { + "title": "Company Website", + "url": "https://www.reactnative.dev", "linkType": "Company_Website" } ], @@ -1504,29 +2891,278 @@ "categories": [] }, { - "id": "b32c51bc-deaf-43a9-9715-099e5e18f692", - "firstName": "Meghan", - "lastName": "Stronach", - "fullName": "Meghan Stronach", - "bio": "Meghan is a PM on Qualcomm AI Hub. Born and raised in the Toronto area, she graduated from the University of Waterloo in Management Engineering and has spent her time at companies of various sizes. She enjoys working with teams ensuring the most effective decision is made, and talking with customers to unblock their adoption of ML on device. ", - "tagLine": "Qualcomm AI Hub Program Manager", - "profilePicture": "https://sessionize.com/image/54ae-400o400o1-DaRfy7tQ6D8f2gf6fJifUq.png", + "id": "94ba4fa4-aed7-482e-8096-f61090d5bb4d", + "firstName": "Nicole", + "lastName": "Terc", + "fullName": "Nicole Terc", + "bio": "Android GDE, Boardgame lover, videogame addict and origami enthusiast, Nicole self taught herself to code and has been fooling around with the Android ecosystem for more than 10 years. She has participated in a diverse variety of projects for several clients around the world, including video streaming, news, social media and public transport applications. Regardless of what the current adventures have taken her, she loves finding time to play with new things and share her experience :)", + "tagLine": "Android Tech Lead @ HubSpot", + "profilePicture": "https://sessionize.com/image/ac6b-400o400o1-G9xcJMvyiQXy5uEyUthvFx.jpg", "sessions": [ { - "id": 727677, - "name": "How to use Qualcomm AI Hub for On-Device AI models" + "id": 728763, + "name": "Tap it! Shake it! Fling it! Sheep it! - The Gesture Animations Dance!" } ], "isTopSpeaker": false, "links": [ + { + "title": "X (Twitter)", + "url": "https://twitter.com/nicole_terc", + "linkType": "Twitter" + }, { "title": "LinkedIn", - "url": "https://www.linkedin.com/in/mestrona/", + "url": "https://www.linkedin.com/in/nicoleterc/", "linkType": "LinkedIn" }, + { + "title": "Blog", + "url": "https://github.com/nicole-terc", + "linkType": "Blog" + }, { "title": "Company Website", - "url": "https://aihub.qualcomm.com", + "url": "https://www.hubspot.com/", + "linkType": "Company_Website" + } + ], + "questionAnswers": [], + "categories": [] + }, + { + "id": "8253d551-1437-4a3e-b4f4-56bf73373109", + "firstName": "Paolo", + "lastName": "Rotolo", + "fullName": "Paolo Rotolo", + "bio": "I've been fascinated by computers and software since I was young: at 12 I discovered the open-source world, joined the Ubuntu Community and started my journey in the software development magic. \r\nAndroid developer since 2013 when I bought my first Android phone. I immediately fell in love with the platform and started developing some projects like Numix and libraries like AppIntro and then bringing that passion to work.\r\nCurrently working at Blinkist in Berlin.", + "tagLine": "Android Developer @ Blinkist", + "profilePicture": "https://sessionize.com/image/f7ab-400o400o1-QzhppnJNfomm63LvD9aVkr.jpg", + "sessions": [ + { + "id": 734441, + "name": "A journey in Android's BLE world" + } + ], + "isTopSpeaker": false, + "links": [ + { + "title": "X (Twitter)", + "url": "https://twitter.com/paolorotolo", + "linkType": "Twitter" + }, + { + "title": "LinkedIn", + "url": "https://www.linkedin.com/in/paolorotolo/", + "linkType": "LinkedIn" + }, + { + "title": "Instagram", + "url": "https://www.instagram.com/_paolorotolo_/", + "linkType": "Instagram" + }, + { + "title": "Blog", + "url": "https://paolorotolo.medium.com/", + "linkType": "Blog" + }, + { + "title": "Company Website", + "url": "http://blinkist.com/", + "linkType": "Company_Website" + } + ], + "questionAnswers": [], + "categories": [] + }, + { + "id": "f89ea766-4af9-4b88-8842-ede574e4c648", + "firstName": "Paul", + "lastName": "Lammertsma", + "fullName": "Paul Lammertsma", + "bio": "Paul supports developers with Android integrations at Google as a Developer Relations Engineer and has been passionate about building amazing Android experiences since its early days.", + "tagLine": "Developer Relations Engineer, Android", + "profilePicture": "https://sessionize.com/image/27fa-400o400o1-NGyC1Cgp5F1nK2XuxBbGFB.jpg", + "sessions": [ + { + "id": 764365, + "name": "Ask Android! - WearOS, Media, Adaptive apps on all form factors" + }, + { + "id": 764370, + "name": "Ask Android! - WearOS, Media, Adaptive apps on all form factors" + }, + { + "id": 764381, + "name": "Ask Android! -GenAI, Media, Adaptive apps on all form factors" + } + ], + "isTopSpeaker": false, + "links": [ + { + "title": "X (Twitter)", + "url": "https://twitter.com/officesunshine", + "linkType": "Twitter" + }, + { + "title": "LinkedIn", + "url": "https://www.linkedin.com/in/paullammertsma/", + "linkType": "LinkedIn" + } + ], + "questionAnswers": [], + "categories": [] + }, + { + "id": "695e56a6-62a8-496b-9082-8cc4dadec337", + "firstName": "Petras", + "lastName": "Vičiūnas", + "fullName": "Petras Vičiūnas", + "bio": "Focused on making engineers lives easier by improving developer workflows and tools. While I’m relatively new to the Android space, I’m excited to learn more at Droidcon.", + "tagLine": "Uber, Software Engineer II", + "profilePicture": "https://sessionize.com/image/eb2f-400o400o1-QbQY9HNbyFQ4H1Z6rnP7LE.jpg", + "sessions": [ + { + "id": 736447, + "name": "You don't have to run it locally! How to run your emulators in the cloud." + } + ], + "isTopSpeaker": false, + "links": [ + { + "title": "LinkedIn", + "url": "https://www.linkedin.com/in/petras-viciunas/", + "linkType": "LinkedIn" + } + ], + "questionAnswers": [], + "categories": [] + }, + { + "id": "f5e37102-a8be-4e34-be47-b98329cd2a23", + "firstName": "Phellipe", + "lastName": "Silva", + "fullName": "Phellipe Silva", + "bio": "My name is Phellipe, I am a senior Android engineer with more than 10 years of experience building Android apps. I am currently based in London and working @Wise, a fintech with millions of active users. Our mission is to make international money transfers cheap, fair, and simple. Among my favourite topics I can mention automated testing, career progression and server driven UI.", + "tagLine": "Senior Android Engineer @Wise", + "profilePicture": "https://sessionize.com/image/46f3-400o400o1-JzupkvSpziyA27WGbVmUFk.jpg", + "sessions": [ + { + "id": 709487, + "name": "Dynamic Flow, the Wise approach to server driven UI" + } + ], + "isTopSpeaker": false, + "links": [ + { + "title": "LinkedIn", + "url": "https://www.linkedin.com/in/phellipeafsilva", + "linkType": "LinkedIn" + } + ], + "questionAnswers": [], + "categories": [] + }, + { + "id": "56b04326-604d-4140-b159-f93574c86ccd", + "firstName": "Ran", + "lastName": "Nachmany", + "fullName": "Ran Nachmany", + "bio": null, + "tagLine": "Developer Relations Engineer at Google", + "profilePicture": "https://sessionize.com/image/b66b-400o400o1-S1DfV4mNMFp7Xe43xsriNP.jpg", + "sessions": [ + { + "id": 764353, + "name": "Ask Android! -GenAI, Platform, Adaptive apps on all form factors" + }, + { + "id": 764372, + "name": "Ask Android! - Gen AI, Media, Adaptive apps on all form factors" + } + ], + "isTopSpeaker": false, + "links": [], + "questionAnswers": [], + "categories": [] + }, + { + "id": "c70d10a5-999c-4858-a39c-7326570cee91", + "firstName": "Ran ", + "lastName": "Nachmany", + "fullName": "Ran Nachmany", + "bio": "Ran compiled his first code when he was 6 and has been moving bits since.", + "tagLine": "Developer Relation Engineer, Android. ", + "profilePicture": "https://sessionize.com/image/dd07-400o400o1-3b3d7366-75f0-462a-9c47-26621a990848.jpg", + "sessions": [ + { + "id": 764351, + "name": "Ask Android! - WearOS, Media, Adaptive apps on all form factors" + }, + { + "id": 764378, + "name": "Ask Android! - Gen AI, Media, Adaptive apps on all form factors" + } + ], + "isTopSpeaker": false, + "links": [ + { + "title": "Twitter", + "url": "https://twitter.com/shed2k", + "linkType": "Twitter" + }, + { + "title": "LinkedIn", + "url": "https://www.linkedin.com/in/rannachmany/", + "linkType": "LinkedIn" + }, + { + "title": "Company Website", + "url": "http://www.google.com", + "linkType": "Company_Website" + } + ], + "questionAnswers": [], + "categories": [] + }, + { + "id": "c16c95a9-0e07-4838-9cba-5d041aee4d14", + "firstName": "Rebecca", + "lastName": "Franks", + "fullName": "Rebecca Franks", + "bio": "Developer Relations Engineer at Google on the Jetpack Compose team. ", + "tagLine": "Developer Relations Engineer at Google", + "profilePicture": "https://sessionize.com/image/dce8-400o400o1-Hiy1N2ZrkGQSLJ557LRgzz.png", + "sessions": [ + { + "id": 764303, + "name": "Ask Android! - Compose, KMP, Gemini in AS" + }, + { + "id": 764399, + "name": "Ask Android! - Compose, WearOS, Platform" + } + ], + "isTopSpeaker": false, + "links": [ + { + "title": "Twitter", + "url": "https://twitter.com/riggaroo", + "linkType": "Twitter" + }, + { + "title": "LinkedIn", + "url": "https://www.linkedin.com/in/rebeccafranks/", + "linkType": "LinkedIn" + }, + { + "title": "Blog", + "url": "https://riggaroo.dev", + "linkType": "Blog" + }, + { + "title": "Company Website", + "url": "https://developer.android.com", "linkType": "Company_Website" } ], @@ -1534,39 +3170,120 @@ "categories": [] }, { - "id": "7d34e53f-e477-4218-9f03-cc372425ac0e", - "firstName": "Miguel", - "lastName": "Juarez Lopez", - "fullName": "Miguel Juarez Lopez", - "bio": "ex-Microsoft, ex-Lyft, Miguel now leads the engineering team at bitdrift.io, where he is building the next-generation of mobile observability tools. He previously led Lyft's resilience teams and helped scale their infrastructure to support their vast mobile fleet. Miguel has been writing software for 15+ years.", - "tagLine": "Founding Engineer at bitdrift.io", - "profilePicture": "https://sessionize.com/image/09c6-400o400o1-LmSuouTSDtm8MU6YgWNAsp.jpg", + "id": "e4292032-5462-494b-abfd-3898301476e2", + "firstName": "Rebecca", + "lastName": "Franks", + "fullName": "Rebecca Franks", + "bio": null, + "tagLine": "Senior Android Developer Relations Engineer", + "profilePicture": "https://sessionize.com/image/3eab-400o400o1-JaamjSb59JumfXLBFqRe2Z.jpg", + "sessions": [ + { + "id": 764329, + "name": "Ask Android! - Compose, KMP, Gemini in AS" + }, + { + "id": 764330, + "name": "Ask Android! - Compose, KMP, Gemini in AS" + }, + { + "id": 764323, + "name": "Ask Android! - Compose, KMP, Gemini in AS (copy)" + }, + { + "id": 764331, + "name": "Ask Android! - Compose, GenAI, WearOS" + }, + { + "id": 764391, + "name": "Ask Android! - Compose, Media, Platform" + }, + { + "id": 764396, + "name": "Ask Android! - Compose, Media, Platform" + }, + { + "id": 764397, + "name": "Ask Android! - Compose, WearOS, Platform" + }, + { + "id": 764398, + "name": "Ask Android! - Compose, WearOS, Platform" + } + ], + "isTopSpeaker": false, + "links": [], + "questionAnswers": [], + "categories": [] + }, + { + "id": "e04a04d0-c875-4f36-ae02-914ba87b5b32", + "firstName": "Rebecca", + "lastName": "Gutteridge", + "fullName": "Rebecca Gutteridge", + "bio": "Rebecca is a Staff Developer Relations Engineer at Google, leading the Android System UI platform team and Compose Adaptive team. She spends her time in the intersection of engineering and design; and works on helping developers create beautiful UIs and creating high quality apps. \r\n", + "tagLine": "Developer Relations Engineer", + "profilePicture": "https://sessionize.com/image/9824-400o400o1-MRWirm23XHsu3vRvBGV9Hc.jpg", + "sessions": [ + { + "id": 764328, + "name": "Ask Android! - Compose, KMP, Gemini in AS" + }, + { + "id": 771431, + "name": "#TheAndroidShow - Panel Discussion" + } + ], + "isTopSpeaker": false, + "links": [ + { + "title": "Twitter", + "url": "https://twitter.com/_BexSG_", + "linkType": "Twitter" + }, + { + "title": "LinkedIn", + "url": "https://www.linkedin.com/in/rebecca-gutteridge", + "linkType": "LinkedIn" + } + ], + "questionAnswers": [], + "categories": [] + }, + { + "id": "4674e36f-50f8-4ffb-a486-679d730c759e", + "firstName": "Renaud", + "lastName": "Mathieu", + "fullName": "Renaud Mathieu", + "bio": "Organizer GDG Paris Android.", + "tagLine": "Freelance Android", + "profilePicture": "https://sessionize.com/image/f3b9-400o400o1-2952bcff-8886-47d8-911d-b70321f9b768.jpg", "sessions": [ { - "id": 706390, - "name": "Building a performant and privacy-conscious screen capture library for Compose" + "id": 720892, + "name": "Seamless mobile real-time communication with WebRTC" } ], "isTopSpeaker": false, "links": [ { "title": "X (Twitter)", - "url": "https://x.com/bitdriftio", + "url": "https://twitter.com/renaud_mathieu", "linkType": "Twitter" }, { "title": "LinkedIn", - "url": "https://www.linkedin.com/in/migueljuarez/", + "url": "https://www.linkedin.com/in/renaudmathieu1/", "linkType": "LinkedIn" }, { "title": "Blog", - "url": "https://medium.com/@murki", + "url": "https://renaudmathieu.com", "linkType": "Blog" }, { "title": "Company Website", - "url": "https://bitdrift.io/", + "url": "https://renaudmathieu.com", "linkType": "Company_Website" } ], @@ -1574,53 +3291,39 @@ "categories": [] }, { - "id": "327f56b4-c631-4489-9590-37bdfc856e3a", - "firstName": "Miguel", - "lastName": "Montemayor", - "fullName": "Miguel Montemayor", - "bio": "Developer Relations Engineer at Google working on Android TV, Google TV, tablets, and foldables.", - "tagLine": "Google, Developer Relations Engineer", - "profilePicture": "https://sessionize.com/image/02d9-400o400o1-Pv1XLuf3hPZVQYccPJfTP1.jpg", - "sessions": [ - { - "id": 732937, - "name": "Build adaptive apps with Jetpack Compose" - } - ], - "isTopSpeaker": false, - "links": [], - "questionAnswers": [], - "categories": [] - }, - { - "id": "a79f3682-df5c-40e4-8aa8-1b6eaa7bdeec", - "firstName": "Mohit", - "lastName": "Sarveiya", - "fullName": "Mohit Sarveiya", - "bio": "Mohit Sarveiya is a Google Developer Expert in Kotlin and Android. Prior to building Android apps, he was a Backend Engineer. He was an early adopter of Kotlin and absolutely loves the language. He has given many talks and workshops on Kotlin.", - "tagLine": "Google Developers Expert Kotlin & Android", - "profilePicture": "https://sessionize.com/image/27b5-400o400o1-KVK4kvFitPjesss8TcUTR3.png", + "id": "da380fb8-c8ba-47e9-b224-26647296cff5", + "firstName": "Richard", + "lastName": "Das", + "fullName": "Richard Das", + "bio": "With over 20 years experience in software engineering, product design & management, Richard has worked with some of the world’s most recognized brands to transform their business, build products customers love, and empower teams to do their best work. As Product Lead at Apple’s Enterprise Design Lab, he guided teams to create innovative, user-focused products. At Deloitte he helped scale the Mobile team and deliver solutions across public and private sector. Now at Ditto, he helps customers scale innovative, real-time solutions that drive their businesses.", + "tagLine": "Leading teams to build Apps customers love", + "profilePicture": "https://sessionize.com/image/ea4b-400o400o1-XJgZjbq6YPAdcfDhCfGU59.jpg", "sessions": [ { - "id": 696196, - "name": "Deep Dive into the Compose Compiler" + "id": 757989, + "name": "Rethinking Apps with Local-First Architecture" } ], "isTopSpeaker": false, "links": [ { "title": "X (Twitter)", - "url": "https://twitter.com/heyitsmohit", + "url": "https://x.com/richarddas", "linkType": "Twitter" }, + { + "title": "LinkedIn", + "url": "https://linkedin.com/in/richarddas", + "linkType": "LinkedIn" + }, { "title": "Blog", - "url": "https://codingwithmohit.com/", + "url": "https://richarddas.com", "linkType": "Blog" }, { "title": "Company Website", - "url": "https://codingwithmohit.com/", + "url": "https://ditto.live", "linkType": "Company_Website" } ], @@ -1628,79 +3331,70 @@ "categories": [] }, { - "id": "89694c9d-5de0-4f39-a50a-ed48d6eb56ca", - "firstName": "Nelson", - "lastName": "Osacky", - "fullName": "Nelson Osacky", - "bio": "Former Square in San Francisco. Former SoundCloud in Berlin. Now speeding up builds around the world at Gradle.", - "tagLine": "Lead Solutions Engineer at Gradle", - "profilePicture": "https://sessionize.com/image/768d-400o400o1-LwWQapfqBG4M3xK56t7wUK.jpg", + "id": "e2ad2515-5292-4deb-8ac6-6c7ea5be1543", + "firstName": "Rob", + "lastName": "Orgiu", + "fullName": "Rob Orgiu", + "bio": "Roberto è uno sviluppatore Android che viaggia molto. Gli piace scattare fotografie e visitare posti nuovi.", + "tagLine": "Developer Relations Engineer @ Google", + "profilePicture": "https://sessionize.com/image/e3a5-400o400o1-Xng3TgUHQGPahwUV2Am3SX.jpg", "sessions": [ { - "id": 718114, - "name": "Declarative Gradle on Android" - } - ], - "isTopSpeaker": false, - "links": [ - { - "title": "X (Twitter)", - "url": "https://twitter.com/nellyspageli", - "linkType": "Twitter" + "id": 764353, + "name": "Ask Android! -GenAI, Platform, Adaptive apps on all form factors" }, { - "title": "LinkedIn", - "url": "https://www.linkedin.com/in/nosacky", - "linkType": "LinkedIn" + "id": 764351, + "name": "Ask Android! - WearOS, Media, Adaptive apps on all form factors" }, { - "title": "Blog", - "url": "https://osacky.com", - "linkType": "Blog" + "id": 764372, + "name": "Ask Android! - Gen AI, Media, Adaptive apps on all form factors" }, { - "title": "Company Website", - "url": "https://gradle.com", - "linkType": "Company_Website" + "id": 764376, + "name": "Ask Android! - Gen AI, Media, Adaptive apps on all form factors" } ], + "isTopSpeaker": false, + "links": [], "questionAnswers": [], "categories": [] }, { - "id": "598701ca-2d07-4f10-9cef-b4467ca369eb", - "firstName": "Pat", - "lastName": "Shueh", - "fullName": "Pat Shueh", - "bio": "Pat, a passionate technology evangelist and Product Management of Mobile App Security at Zimperium, empowers businesses across the region to fortify their mobile defenses.\r\n\r\nBased in Singapore, Pat draws upon his 25+ years of diverse experience in development, operations, and consulting to advise and collaborate with enterprises. He expertly guides them in safeguarding their mobile devices and mission-critical apps against an evolving landscape of sophisticated mobile threats across four key layers: device, network, application, and phishing.\r\n\r\nDriven by a profound understanding of the mobile security landscape, Pat champions Zimperium's cutting-edge solutions, helping organizations across the globe build robust mobile security postures that protect their valuable data, assets, and reputations.", - "tagLine": "VP Product Management, Mobile App Security", - "profilePicture": "https://sessionize.com/image/e2f6-400o400o1-EWNvL8bMd9gBX7kpQJ4hFr.jpg", + "id": "152f613f-841b-407d-9a65-3703ec2dfae2", + "firstName": "Romain", + "lastName": "Guy", + "fullName": "Romain Guy", + "bio": "Romain manages the Android Toolkit team. The team's projects included AndroidX/Jetpack, the UI toolkit, Kotlin support and graphics.", + "tagLine": "Android Toolkit", + "profilePicture": "https://sessionize.com/image/6615-400o400o1-d068ae37-2e0e-49bd-a4be-b376a32367a8.jpg", "sessions": [ { - "id": 713028, - "name": "DevSecOps: Balancing development and security" + "id": 736883, + "name": "Optimizing Kotlin Code in Practice" } ], "isTopSpeaker": false, "links": [ { "title": "X (Twitter)", - "url": "https://twitter.com/i/flow/login?redirect_after_login=%2Fzimperium", + "url": "http://twitter.com/romainguy", "linkType": "Twitter" }, { "title": "LinkedIn", - "url": "https://www.linkedin.com/in/patshueh/", + "url": "https://www.linkedin.com/in/romainguy/", "linkType": "LinkedIn" }, { "title": "Blog", - "url": "https://www.zimperium.com/blog/", + "url": "https://www.curious-creature.com", "linkType": "Blog" }, { "title": "Company Website", - "url": "https://www.zimperium.com/", + "url": "http://www.google.com", "linkType": "Company_Website" } ], @@ -1708,34 +3402,29 @@ "categories": [] }, { - "id": "4c3a9dd5-8b56-4f32-8cb6-a450510221bf", - "firstName": "Pau", - "lastName": "Guillamon", - "fullName": "Pau Guillamon", - "bio": "Originally from a city near Barcelona, Spain, Pau started his programming journey slightly before attending university in 2007. After obtaining his degree in Computer Science, he spent the first 6 years of his career in Spain, where he steered his career towards mobile and graphics programming. One of his projects included porting a C++ and OpenGL-based custom UI engine, originally designed for PDAs, to Android’s NativeActivity.\r\n\r\nin 2019, he joined TeamViewer and relocated to Stuttgart, Germany, where he has resided ever since. At TeamViewer, he has implemented a custom AR rendering pipeline optimized for video streaming. Additionally, he collaborated closely with Google to implement the Depth API in TeamViewer Assist AR.\r\n\r\nHis focus on mobile graphics programming has allowed him to drive innovation in various domains. He has become the go-to person for topics related to AR and rendering on Android.", - "tagLine": "Senior Software Engineer, TeamViewer", - "profilePicture": "https://sessionize.com/image/b4d7-400o400o1-wgn8shZd7tGMuuPL1XHFHG.jpg", + "id": "da013a11-7cb0-4b0d-a37e-e29ce98688e0", + "firstName": "Roman", + "lastName": "Zavarnitsyn", + "fullName": "Roman Zavarnitsyn", + "bio": "Builds, infrastructure, CI, SDKs, bytecode", + "tagLine": "Mobile @ sentry.io", + "profilePicture": "https://sessionize.com/image/d0e5-400o400o1-NsU2wXhnTYvi7B4JZV4Wqr.jpg", "sessions": [ { - "id": 721070, - "name": "Building an AR app with Compose & OpenGL ES" + "id": 732956, + "name": "Rewind and Resolve: A deep dive into building Session Replay for Android" } ], "isTopSpeaker": false, "links": [ { "title": "X (Twitter)", - "url": "https://x.com/pau_guillamon", + "url": "https://x.com/romtsn", "linkType": "Twitter" }, - { - "title": "LinkedIn", - "url": "https://www.linkedin.com/in/pau-guillamon-20913a50/", - "linkType": "LinkedIn" - }, { "title": "Company Website", - "url": "https://www.teamviewer.com", + "url": "https://sentry.io/", "linkType": "Company_Website" } ], @@ -1743,24 +3432,24 @@ "categories": [] }, { - "id": "ed92b8fc-711a-48c7-a8e5-4255fb793ffa", - "firstName": "Pengwen", - "lastName": "Jiao", - "fullName": "Pengwen Jiao", - "bio": "He's now work as the leader of TikTok global Android efficiency & US Mobile Infrastructure team, aim's to improve TikTok's engineering architecture design and development efficiency. \r\n\r\nWith 5 years experience on optimizing Gradle/AGP build process, IDE productivity enhancement. Also play the role as major maintainer of the private folk of the compilation toolchain and moving forward to MonoRepo based on high performance compiler, the build speed and local dev experience of the TikTok has been greatly improved.\r\n\r\nLove contribute to open source and free programming, former administrator and contributor to the arch linux cn official forums. Contributor to Android Gradle plugin and Gradle.", - "tagLine": "Tech Lead, Mobile Infrastructure @ TikTok", - "profilePicture": "https://sessionize.com/image/ed9a-400o400o1-UpSeB2TbPNwghWcVSAEK5E.jpg", + "id": "33801296-8d41-4df0-b729-c0461afa1be2", + "firstName": "Ruslan", + "lastName": "Latypov", + "fullName": "Ruslan Latypov", + "bio": "I am a Software Engineer at Meta, where I have been working for the past 4.5 years on various parts of Mobile Infrastructure. For the past 1.5 years my primary focus has been on migrating Meta's Kotlin infrastructure to K2. ", + "tagLine": "Software Engineer, Meta", + "profilePicture": "https://sessionize.com/image/d7f4-400o400o1-pVapLj4gzVxz1TAj5WNnqv.jpg", "sessions": [ { - "id": 671422, - "name": "How to make Kotlin compile 2x faster on a super large project?" + "id": 730918, + "name": "Upgrading Meta's Kotlin Infrastructure to K2: A Migration Journey" } ], "isTopSpeaker": false, "links": [ { "title": "LinkedIn", - "url": "https://www.linkedin.com/in/pengwenjiao", + "url": "https://www.linkedin.com/in/ruslan-latypov-sd/", "linkType": "LinkedIn" } ], @@ -1768,129 +3457,145 @@ "categories": [] }, { - "id": "c6489aef-00e1-476b-a58a-000f3b05bb95", - "firstName": "Philippe", - "lastName": "Breault", - "fullName": "Philippe Breault", - "bio": "Phil is a Staff Engineer at American Express with a passion for Android development since 2010. He has worked on a wide variety of Android apps for banks, newspapers, startups, television providers, and more. Phil is the maintainer of the ADB Idea plugin for Android Studio, a former Google Developer Expert, and the co-organizer of the first and only edition of Droidcon Montréal.", - "tagLine": "Staff Engineer @ American Express", - "profilePicture": "https://sessionize.com/image/296d-400o400o1-sSX4WXwLkQuA4DnVhZ7uj3.jpg", + "id": "bcf3c75a-e105-41de-8891-53f6b673e58a", + "firstName": "Sachin", + "lastName": "Sapkale", + "fullName": "Sachin Sapkale", + "bio": "I’m a Senior Software Engineer at NewDay Cards Ltd in London, with 11 years of Android development experience across fintech, sports, medical, education, and value-added sectors. Moving to the UK with my family two years ago has been an exciting chapter, deepening my focus on mobile app development and helping me approach projects with more empathy to empower users.\r\nOutside of work, I enjoy cooking and playing table tennis!", + "tagLine": "Senior Software Engineer, NewDay", + "profilePicture": "https://sessionize.com/image/0d5c-400o400o1-9DxDSCGh7AeSsYsAP7sfdN.png", "sessions": [ { - "id": 721651, - "name": "Coroutines Internals: How The Sausage is Made" + "id": 734309, + "name": "Crafting Narratives: Shaping TalkBack with Compose Semantics" } ], "isTopSpeaker": false, "links": [ - { - "title": "X (Twitter)", - "url": "https://twitter.com/pbreault", - "linkType": "Twitter" - }, { "title": "LinkedIn", - "url": "https://ca.linkedin.com/in/philippe-breault-9b82289", + "url": "https://www.linkedin.com/in/sachin-sapkale-76482070", "linkType": "LinkedIn" - }, - { - "title": "Company Website", - "url": "https://americanexpress.com/", - "linkType": "Company_Website" } ], "questionAnswers": [], "categories": [] }, { - "id": "a733fc42-dcb9-4107-9675-70335f2889e9", - "firstName": "Pierre-Yves", - "lastName": "Ricau", - "fullName": "Pierre-Yves Ricau", - "bio": "I live in San Francisco, I enjoy being with my family, rollerblading, baking and reading sci-fi.", - "tagLine": "L8 Android Engineer at Square", - "profilePicture": "https://sessionize.com/image/2bfc-400o400o1-42-dcb9-4107-9675-70335f2889e9.676d3ed7-f28a-449d-92f7-25b8dffa8196.jpg", + "id": "d713390d-9628-412f-9778-9c45aeb6b13e", + "firstName": "Satish", + "lastName": "Shende", + "fullName": "Satish Shende", + "bio": "Satish is a part of android dev rel team @ google. Satish advocates and help developers optimized for for Large screens , TV and Auto.", + "tagLine": "Android Engineer - Dev Rel Android", + "profilePicture": "https://sessionize.com/image/bce5-400o400o1-swTpvQe47BUCXbGfT8766W.jpg", "sessions": [ { - "id": 717465, - "name": "Root causing memory growth with LeakCanary 3" + "id": 764351, + "name": "Ask Android! - WearOS, Media, Adaptive apps on all form factors" } ], - "isTopSpeaker": true, - "links": [ + "isTopSpeaker": false, + "links": [], + "questionAnswers": [], + "categories": [] + }, + { + "id": "d7f1c9d9-d537-4240-864e-ba626457f534", + "firstName": "Satish", + "lastName": "Shende", + "fullName": "Satish Shende", + "bio": null, + "tagLine": "Android Engineer - Dev Rel Android", + "profilePicture": "https://sessionize.com/image/bce5-400o400o1-swTpvQe47BUCXbGfT8766W.jpg", + "sessions": [ { - "title": "X (Twitter)", - "url": "http://twitter.com/Piwai", - "linkType": "Twitter" + "id": 764353, + "name": "Ask Android! -GenAI, Platform, Adaptive apps on all form factors" }, { - "title": "Blog", - "url": "https://hashnode.com/@py", - "linkType": "Blog" + "id": 764376, + "name": "Ask Android! - Gen AI, Media, Adaptive apps on all form factors" } ], + "isTopSpeaker": false, + "links": [], "questionAnswers": [], "categories": [] }, { - "id": "646237bf-ccc5-43fa-a659-0b361b08d651", - "firstName": "Ralf", - "lastName": "Wondratschek", - "fullName": "Ralf Wondratschek", - "bio": "Ralf is a principal engineer at Amazon and helps simplify the delivery process of millions of packages. This includes providing a platform for internal and external partners to integrate their features, shipping applications for vehicles and other form factors and making the whole delivery process safer. \r\n\r\nPrior to Amazon Ralf led the feature sandboxing initiative at Square. He created and maintains several open-source projects on Github like Anvil. Anvil makes dependency injection with Dagger 2 easier and is used by many other companies like Tonal, Slack, Dropbox and Snap.", - "tagLine": "Principal Engineer at Amazon", - "profilePicture": "https://sessionize.com/image/c456-400o400o1-dd98533c-fbc1-45da-998f-53a6da1d5cf4.jpg", + "id": "8b008502-24e7-4af7-a7a8-d92a7e683271", + "firstName": "Scott", + "lastName": "Alexander-Bown", + "fullName": "Scott Alexander-Bown", + "bio": "Senior Android Engineer and author with deep knowledge of Android and passion for mobile security. Loves trail running, Mexican food and Belgium beer. Founder of SWmobile meetup group based in Bristol/Bath. https://www.meetup.com/swmobile/", + "tagLine": "Senior Andriod Engineer", + "profilePicture": "https://sessionize.com/image/0dad-400o400o1-SLQAA9vfH8h1EhsW4zzsWt.jpg", "sessions": [ { - "id": 722175, - "name": "Extending kotlin-inject for fun & profit" + "id": 735950, + "name": "What's new in Android 15 Security?" } ], "isTopSpeaker": false, "links": [ + { + "title": "LinkedIn", + "url": "https://www.linkedin.com/in/scottyab", + "linkType": "LinkedIn" + }, { "title": "Blog", - "url": "https://ralf-wondratschek.com/", + "url": "https://scottyab.com", "linkType": "Blog" + }, + { + "title": "Company Website", + "url": "https://scottyab.com", + "linkType": "Company_Website" } ], "questionAnswers": [], "categories": [] }, { - "id": "7eca8832-05ec-44c0-b8cd-f8aa72fcf1a3", - "firstName": "Rikin", - "lastName": "Marfatia", - "fullName": "Rikin Marfatia", - "bio": "I'm an Android developer who wants to build better Android apps and snowboard as much as possible. ", - "tagLine": "Android Imposter @ Pinterest", - "profilePicture": "https://sessionize.com/image/9b5f-400o400o1-ByGWYgRJPSa9gLyEdGZkB5.jpg", + "id": "a82c6942-6e2b-4d80-9883-0b84b932d6ef", + "firstName": "Sebastian", + "lastName": "Aigner", + "fullName": "Sebastian Aigner", + "bio": "As a Kotlin and Compose Multiplatform Developer Advocate at JetBrains, Sebastian spends a lot of time thinking about how technology can advance and inspire people. When he first tried Kotlin, it was love at first sight. He is one of the hosts of the Talking Kotlin podcast, and creates videos for the official Kotlin YouTube channel. Sebastian loves to develop networked applications, uses Kotlin on a variety of platforms, and passionately tinkers on his programs until late into the night.", + "tagLine": "Developer Advocate at JetBrains", + "profilePicture": "https://sessionize.com/image/2ef9-400o400o1-XGxKBoqZvxxQxosrZHQHTT.png", "sessions": [ { - "id": 716782, - "name": "Lost in the Weeds - Exploring Navigation Libraries for Compose" + "id": 729194, + "name": "What’s New in Compose Multiplatform - A Live Tour" + }, + { + "id": 768515, + "name": "Kotlin by JetBrains, present and future" } ], "isTopSpeaker": false, "links": [ { "title": "X (Twitter)", - "url": "https://twitter.com/heyrikin", + "url": "https://twitter.com/sebi_io", "linkType": "Twitter" }, { "title": "LinkedIn", - "url": "https://www.linkedin.com/in/rikinmarfatia/", + "url": "https://www.linkedin.com/in/sebastian-aigner/", "linkType": "LinkedIn" }, { "title": "Blog", - "url": "https://dev.to/heyrikin", + "url": "http://sebi.io", "linkType": "Blog" }, { "title": "Company Website", - "url": "https://www.supergooey.dev", + "url": "https://www.jetbrains.com/", "linkType": "Company_Website" } ], @@ -1898,39 +3603,59 @@ "categories": [] }, { - "id": "0983d15b-0efc-4d9a-918d-4021daee67ce", - "firstName": "Rooz", - "lastName": "SF", - "fullName": "Rooz SF", - "bio": "Rooz has been a part of the Gradle customer support team helping large Android apps with their shipping-software-at-scale challenges. Rooz is also the one of the co-organizers of the San Francisco Android GDG, Gradle Summit, and the host of DevProdEng (DPE) Showdown.", - "tagLine": "Android Dev Rel at Gradle", - "profilePicture": "https://sessionize.com/image/7abc-400o400o1-wNYJNcNs8oGBqhSkn6qvhj.jpg", + "id": "e397fee8-078f-4694-8a1f-35b1d57f1fce", + "firstName": "Sebastiano", + "lastName": "Poggi", + "fullName": "Sebastiano Poggi", + "bio": "Emerging from the foggy plains of northern Italy 🇮🇹 after working at a smartwatch startup, Sebastiano moved with his curls to London 🇬🇧 💂 to do great things at AKQA and then Novoda. After a few years at JetBrains, he's now joined Google and is in Italy once again 🇮🇹. He really wishes he had more time to write technical articles on his blog, but he's live coding on Twitch in the meantime on https://codewiththeitalians.it", + "tagLine": "UX Engineer at Google working on Android Developer UX", + "profilePicture": "https://sessionize.com/image/ff9e-400o400o1-BPpvfRRxNbAKepJruufHDH.jpg", "sessions": [ { - "id": 719914, - "name": "Mobile Developer Productivity Panel" + "id": 731273, + "name": "Project Sparkles: how Compose is changing Android Studio" + }, + { + "id": 764303, + "name": "Ask Android! - Compose, KMP, Gemini in AS" + }, + { + "id": 764328, + "name": "Ask Android! - Compose, KMP, Gemini in AS" + }, + { + "id": 764329, + "name": "Ask Android! - Compose, KMP, Gemini in AS" + }, + { + "id": 764330, + "name": "Ask Android! - Compose, KMP, Gemini in AS" + }, + { + "id": 764323, + "name": "Ask Android! - Compose, KMP, Gemini in AS (copy)" } ], "isTopSpeaker": false, "links": [ { "title": "X (Twitter)", - "url": "https://twitter.com/djrooz", + "url": "https://twitter.com/seebrock3r", "linkType": "Twitter" }, { "title": "LinkedIn", - "url": "https://www.linkedin.com/in/roozmohazzabi/", + "url": "https://www.linkedin.com/in/sebastianopoggi", "linkType": "LinkedIn" }, { "title": "Blog", - "url": "https://gradle.com/blog/", + "url": "https://blog.sebastiano.dev", "linkType": "Blog" }, { "title": "Company Website", - "url": "https://www.Gradle.com", + "url": "https://sebastiano.dev/", "linkType": "Company_Website" } ], @@ -1938,83 +3663,94 @@ "categories": [] }, { - "id": "7a1d47f2-dfd1-4af1-b097-5c415f9b29c3", - "firstName": "Russell", - "lastName": "Wolf", - "fullName": "Russell Wolf", - "bio": "Russell started his first Kotlin Multiplatform project the day after it was possible to share code between JVM and Kotlin/Native. He is the author and maintainer of Multiplatform Settings, a key-value storage library which was one of the earliest mobile multiplatform libraries available. He loves finding new ways to connect with this community and help people and organizations use this technology. ", - "tagLine": "Kotlin Multiplatform Developer", - "profilePicture": "https://sessionize.com/image/7091-400o400o1-f2-dfd1-4af1-b097-5c415f9b29c3.eadbc841-6bf0-46f0-9940-e4c6ba646137.png", + "id": "b5b73a2f-d57d-4a42-b787-a93f4ca9ba79", + "firstName": "Simona", + "lastName": "Milanovic", + "fullName": "Simona Milanovic", + "bio": "Simona Milanovic works at Google as an Android Developer Relations Engineer, as part of the Jetpack Compose team. Before joining Google, Simona worked as an Android Dev in a variety of different industries - retail, transportation, banking, automotive & online dating. Aside from work, she loves to travel, read, organise stuff (😬), play music & video games and spend time with her 4 fluffy pets.", + "tagLine": "Android Developer Relations Engineer @Google", + "profilePicture": "https://sessionize.com/image/ffb6-400o400o1-J2sMoXmDyVkv2JJ6ka71hz.png", "sessions": [ { - "id": 721053, - "name": "When sharing isn’t caring: Using platform-specific code in Kotlin Multiplatform" + "id": 751161, + "name": "Designing scalable Compose APIs" + }, + { + "id": 764400, + "name": "Ask Android! - Compose, WearOS, Platform" + }, + { + "id": 764404, + "name": "Ask Android! - Compose, Gemini in AS, KMP" + }, + { + "id": 764406, + "name": "Ask Android! - Compose, Gemini in AS, KMP" + }, + { + "id": 764408, + "name": "Ask Android! - Compose, Gemini in AS, KMP" + }, + { + "id": 764409, + "name": "Ask Android! - Compose, Gemini in AS, KMP" } ], "isTopSpeaker": false, "links": [ { "title": "X (Twitter)", - "url": "https://twitter.com/RussHWolf", + "url": "https://twitter.com/anomisSi", "linkType": "Twitter" - } - ], - "questionAnswers": [], - "categories": [] - }, - { - "id": "bcd8a1a5-2160-421c-89b8-cb0bf3751bc9", - "firstName": "Sam", - "lastName": "Greenberg", - "fullName": "Sam Greenberg", - "bio": "Senior Software Developer at Capital One", - "tagLine": "Senior Software Developer at Capital One", - "profilePicture": "https://sessionize.com/image/2def-400o400o1-nAESpoHUHXPybzc4U6TQCx.jpg", - "sessions": [ + }, + { + "title": "LinkedIn", + "url": "https://www.linkedin.com/in/anomis/", + "linkType": "LinkedIn" + }, { - "id": 721657, - "name": "Hue-manize Your Android Apps: Develop for Color Blindness" + "title": "Blog", + "url": "https://medium.com/@anomisSi", + "linkType": "Blog" } ], - "isTopSpeaker": false, - "links": [], "questionAnswers": [], "categories": [] }, { - "id": "a82c6942-6e2b-4d80-9883-0b84b932d6ef", - "firstName": "Sebastian", - "lastName": "Aigner", - "fullName": "Sebastian Aigner", - "bio": "As a Kotlin and Compose Multiplatform Developer Advocate at JetBrains, Sebastian spends a lot of time thinking about how technology can advance and inspire people. When he first tried Kotlin, it was love at first sight. He is one of the hosts of the Talking Kotlin podcast, and creates videos for the official Kotlin YouTube channel. Sebastian loves to develop networked applications, uses Kotlin on a variety of platforms, and passionately tinkers on his programs until late into the night.", - "tagLine": "Developer Advocate at JetBrains", - "profilePicture": "https://sessionize.com/image/2ef9-400o400o1-XGxKBoqZvxxQxosrZHQHTT.png", + "id": "9a7f5add-ce7a-49a3-ab3d-f3c4484453e8", + "firstName": "Sinan", + "lastName": "Kozak", + "fullName": "Sinan Kozak", + "bio": "Sinan is an Android GDE and he works as Staff Engineer at Delivery Hero, food delivery company. He has been working with Android since 2011 and has 11 years of professional experience with software development. He is passionate about Kotlin and loves to contribute open-source.", + "tagLine": "Android Staff Engineer - Delivery Hero", + "profilePicture": "https://sessionize.com/image/eb46-400o400o1-SPKGk1Vse2mophBVWYhs2c.jpg", "sessions": [ { - "id": 716832, - "name": "Compose Multiplatform on iOS: On the Road to Stable" + "id": 735538, + "name": "Unblocking The Main Thread: Solving ANRs and Frozen Frames" } ], - "isTopSpeaker": true, + "isTopSpeaker": false, "links": [ { "title": "X (Twitter)", - "url": "https://twitter.com/sebi_io", + "url": "https://twitter.com/snnkzk", "linkType": "Twitter" }, { "title": "LinkedIn", - "url": "https://www.linkedin.com/in/sebastian-aigner/", + "url": "https://www.linkedin.com/in/sinankozak/", "linkType": "LinkedIn" }, { "title": "Blog", - "url": "http://sebi.io", + "url": "https://sinankozak.medium.com/", "linkType": "Blog" }, { "title": "Company Website", - "url": "https://www.jetbrains.com/", + "url": "https://www.deliveryhero.com/", "linkType": "Company_Website" } ], @@ -2022,39 +3758,29 @@ "categories": [] }, { - "id": "8466c9d8-0d23-41da-a283-80632a241057", - "firstName": "Sergei", - "lastName": "Rybalkin", - "fullName": "Sergei Rybalkin", - "bio": "Sergei works with JVM-based languages for more than 10 years. At Meta he is adopting and optimising Kotlin for Android. Before joining Facebook Sergei worked on Kotlin adoption for server side and frameworks at Alibaba Group.", - "tagLine": "Kotlin @ Meta", - "profilePicture": "https://sessionize.com/image/ffe1-400o400o1-wsXPDku78WyuH8dgTMEjA7.jpg", + "id": "1caff1f9-9594-4ce8-a031-ed1ba2201d13", + "firstName": "Steven", + "lastName": "Kideckel", + "fullName": "Steven Kideckel", + "bio": "Steven has over 10 years experience working on Android apps, from small startups to Google, and now Patreon. Originally from Canada, he now lives in the New York area with his wife and two cats.", + "tagLine": "Staff Software Engineer at Patreon", + "profilePicture": "https://sessionize.com/image/ab0f-400o400o1-KKUzCzjjD9gpyGYY8XFXxn.jpg", "sessions": [ { - "id": 722292, - "name": "K2 compiler in production" + "id": 731650, + "name": "Elevated Dependency Injection: Going Beyond the Basics with Custom Hilt Components" } ], "isTopSpeaker": false, "links": [ - { - "title": "X (Twitter)", - "url": "https://twitter.com/lightdelay", - "linkType": "Twitter" - }, { "title": "LinkedIn", - "url": "https://www.linkedin.com/in/rybalkinsergey/", + "url": "https://www.linkedin.com/in/steven-kideckel-0448a346/", "linkType": "LinkedIn" }, - { - "title": "Blog", - "url": "https://twitter.com/lightdelay", - "linkType": "Blog" - }, { "title": "Company Website", - "url": "https://facebook.com/", + "url": "https://www.patreon.com/", "linkType": "Company_Website" } ], @@ -2062,42 +3788,65 @@ "categories": [] }, { - "id": "a33ccc9b-d114-4ac4-9c4d-cc12c45478a8", - "firstName": "Shreya", - "lastName": "Jain", - "fullName": "Shreya Jain", - "bio": "Worked at Apple and Qualcomm on enabling incredible user experiences using machine learning on-device. ", - "tagLine": "Machine Learning Engineer, Qualcomm AI Hub", - "profilePicture": "https://sessionize.com/image/adf5-400o400o1-LF1R3RbJxSWRG6bosS2w95.png", + "id": "3be14346-8241-4bd9-9a8e-6771276bc270", + "firstName": "Tamás", + "lastName": "Bazsonyi", + "fullName": "Tamás Bazsonyi", + "bio": "Tamas Bazsonyi is a member of the Solutions Engineering team at Bitrise working with customers in the EMEA region to implement CI/CD pipelines successfully that help them during their day-to-day jobs. During his career he’s been working as a Full Stack Developer, QA Engineer and also jumping into mobile app development. Some of his favourite topics are Test Automation and Automation in general.\r\n", + "tagLine": "Solutions Engineer @ Bitrise", + "profilePicture": "https://sessionize.com/image/617a-400o400o1-SkVDLSGbDnPvvdXC2rsYxj.jpg", "sessions": [ { - "id": 727677, - "name": "How to use Qualcomm AI Hub for On-Device AI models" + "id": 736362, + "name": "Streamlining Android app development and release processes" } ], "isTopSpeaker": false, "links": [ + { + "title": "X (Twitter)", + "url": "https://twitter.com/bazscsa", + "linkType": "Twitter" + }, { "title": "LinkedIn", - "url": "https://www.linkedin.com/in/shreya-j-b8252793/", + "url": "https://www.linkedin.com/in/tamasbazsonyi/", "linkType": "LinkedIn" + }, + { + "title": "Blog", + "url": "https://bitrise.io/blog", + "linkType": "Blog" + }, + { + "title": "Company Website", + "url": "https://www.bitrise.io/", + "linkType": "Company_Website" } ], "questionAnswers": [], "categories": [] }, { - "id": "d630dc15-c0c0-4f61-a490-ef993aafb2c3", - "firstName": "Siddhika", - "lastName": "Nevrekar", - "fullName": "Siddhika Nevrekar", - "bio": "Siddhika leads Qualcomm AI Hub and is instrumental in bridging the gap of bringing models from cloud on to Qualcomm & Snapdragon based platform devices. ", - "tagLine": "Sr Director, Qualcomm AI Hub", - "profilePicture": "https://sessionize.com/image/dbd6-400o400o1-UYDK73hHwk5iC7homgQkQr.png", + "id": "3b5772d2-d3d5-42fe-8015-8f7b0e09b472", + "firstName": "Thomas", + "lastName": "Weathers", + "fullName": "Thomas Weathers", + "bio": "Thomas is a Developer Relations Engineer at Google focusing on Android development for Cars!", + "tagLine": "Developer Relations Engineer, Google", + "profilePicture": "https://sessionize.com/image/acf2-400o400o1-BF9PnBBgFN81pKFk7XFrdo.jpg", "sessions": [ { - "id": 725412, - "name": "Accelerating On-Device AI Development with Qualcomm AI Hub" + "id": 764365, + "name": "Ask Android! - WearOS, Media, Adaptive apps on all form factors" + }, + { + "id": 764370, + "name": "Ask Android! - WearOS, Media, Adaptive apps on all form factors" + }, + { + "id": 764381, + "name": "Ask Android! -GenAI, Media, Adaptive apps on all form factors" } ], "isTopSpeaker": false, @@ -2106,74 +3855,109 @@ "categories": [] }, { - "id": "265b1a56-e32c-459d-8580-6d0d4ed5fc63", - "firstName": "Sumayyah", - "lastName": "Ahmed", - "fullName": "Sumayyah Ahmed", - "bio": "Sumayyah has been building Android apps since 2013, and still loves it! She likes digging deep into how Android works, and how to keep production codebases flexible, scalable, and clean. In fact, she spends a lot of time building talks around those exact topics. She currently works at Square, leading engineering teams and thinking about architecture. ", - "tagLine": "Android Tech Lead at Square", - "profilePicture": "https://sessionize.com/image/e736-400o400o1-0949bc8a-30dd-421d-8781-40cc5f77346f.jpg", + "id": "257fcb0c-cc84-4892-a1f1-54985071e0a6", + "firstName": "Timo", + "lastName": "Drick", + "fullName": "Timo Drick", + "bio": "Timo is the Android Lead developer at Seven Principles Mobility GmbH since 2015. He has been working with Android since 2010 and was one of the first adopters of Jetpack Compose.\r\n", + "tagLine": "Lead Android developer at Seven Principles Mobility GmbH", + "profilePicture": "https://sessionize.com/image/1f21-400o400o1-w15eX7WfB1n3dofjoyDoPu.jpg", "sessions": [ { - "id": 720219, - "name": "Making the Big Kotlin Multiplatform Decision" + "id": 734664, + "name": "Cutting-Edge-to-Edge in Android 15: Using Previews and Testing in Jetpack Compose to Manage Insets." } ], - "isTopSpeaker": true, + "isTopSpeaker": false, "links": [ { "title": "X (Twitter)", - "url": "https://twitter.com/SumayyahAhmed13", + "url": "https://twitter.com/appsonair", "linkType": "Twitter" }, { "title": "LinkedIn", - "url": "https://www.linkedin.com/in/sumayyah-ahmed/", + "url": "https://www.linkedin.com/in/timo-drick-75a10360", "linkType": "LinkedIn" }, { "title": "Blog", - "url": "https://sumayyah.github.io/", + "url": "https://medium.com/@timo_86166", "linkType": "Blog" + }, + { + "title": "Company Website", + "url": "https://7p-mobility.com", + "linkType": "Company_Website" + } + ], + "questionAnswers": [], + "categories": [] + }, + { + "id": "e841b549-a549-420e-ba73-3039c567a609", + "firstName": "Tin", + "lastName": "Novakovic", + "fullName": "Tin Novakovic", + "bio": "I'm Tin, a self taught Android Engineer currently at Compare The Market, I'm a lover of Compose, Coroutines and multi-platform technologies.\r\n\r\nMy career wouldn't have started without an open tech community and that's why I'm here, to give back to a community that has given me so much.", + "tagLine": "Compare The Market, Android Engineer", + "profilePicture": "https://sessionize.com/image/13ea-400o400o1-EVEhEbzLsMfx3Tx7Hrb3cp.png", + "sessions": [ + { + "id": 733188, + "name": "Improving App Performance With Custom Thread Pools" + } + ], + "isTopSpeaker": false, + "links": [ + { + "title": "LinkedIn", + "url": "https://www.linkedin.com/in/tinnova/", + "linkType": "LinkedIn" + }, + { + "title": "Company Website", + "url": "https://www.comparethemarket.com/", + "linkType": "Company_Website" } ], "questionAnswers": [], "categories": [] }, { - "id": "969813cd-0231-4310-9c61-745967bd94c5", - "firstName": "Tadeas", - "lastName": "Kriz", - "fullName": "Tadeas Kriz", - "bio": "Tadeas is a Senior Mobile Developer at Touchlab, experimenting with Kotlin compiler plugins. Began as a PHP developer, moving to .NET desktop apps later on. Finally landing in mobile development with Android first and then falling in love with iOS. Fortunately, Kotlin Multiplatform happened, opening the path to doing both mobile platforms.", - "tagLine": "Senior Kotlin Developer at Touchlab", - "profilePicture": "https://sessionize.com/image/8dd1-400o400o1-RW6sTdV194VWGAsCKa7PYE.jpg", + "id": "1fb7ac5d-d848-4d40-840e-d8ae38128ab4", + "firstName": "Tom", + "lastName": "Colvin", + "fullName": "Tom Colvin", + "bio": "Tom Colvin is CTO of Apptaura, the app development specialists; and founder of Conseal Security, the mobile app security experts. He has been a developer for over 20 years and worked with Android since Cupcake. He is a Google Developer Expert in Android.", + "tagLine": "Android GDE, CTO at Apptaura", + "profilePicture": "https://sessionize.com/image/e21e-400o400o1-UbVs97PLcfGWSoCh1JGpp5.jpg", "sessions": [ { - "id": 720896, - "name": "SKIE: Narrow the gap between Kotlin and Swift" + "id": 736493, + "name": "Asynchrony and the infinite conveyor belt: Advanced coroutines and flows" } ], "isTopSpeaker": false, "links": [ { "title": "X (Twitter)", - "url": "https://twitter.com/TadeasKriz", + "url": "https://twitter.com/tdcolvin", "linkType": "Twitter" }, { "title": "LinkedIn", - "url": "https://www.linkedin.com/in/tadeaskriz/", + "url": "https://www.linkedin.com/in/tdcolvin/", "linkType": "LinkedIn" }, { "title": "Blog", - "url": "https://tadeaskriz.com", + "url": "https://medium.com/@tdcolvin", "linkType": "Blog" }, { "title": "Company Website", - "url": "https://touchlab.co", + "url": "https://www.apptaura.com", "linkType": "Company_Website" } ], @@ -2181,24 +3965,24 @@ "categories": [] }, { - "id": "ccce0dd7-87af-4bc7-9ae0-3cc5fd9cba2a", - "firstName": "Terence", - "lastName": "Zhang", - "fullName": "Terence Zhang", - "bio": "Terence is a Developer Relations engineer at Google. His primary focus is to help developers build privacy-focused apps on Android. Before joining Google, he was a software engineer on Microsoft Azure. He holds a Bachelor of Science degree in Computer Science from the University of Southern California. Outside of work he enjoys traveling and cooking up a storm.", - "tagLine": "Developer Relations Engineer at Google", - "profilePicture": "https://sessionize.com/image/d605-400o400o1-KbGXoRejsHiW444FDJ5Va.jpg", + "id": "58038e33-703e-497c-9f47-3624e36418e8", + "firstName": "Tomasz", + "lastName": "Słuszniak", + "fullName": "Tomasz Słuszniak", + "bio": "Tomasz is an experienced Android developer. Brought up on multiple smaller projects of his own, he learned quite a variety of skills. He has taken part in multiple hackathons across Europe, proving his ability to quickly learn and adapt by often scoring top places - and that is how once he was introduced to IoT, for which he has a great enthusiasm since then. Having his startup-like mindset he was a member of Enactus organisation and Google for Startups member at Google Campus in Warsaw.\r\nCurrently in his free time he attempts to join the realms of IoT and Android, as well as tries to contribute to some open source ideas. \r\nOn the other side - big coffee lover, always experimenting with brewing or roasting his own coffee.", + "tagLine": "Android developer by day, IoT enthusiast by night", + "profilePicture": "https://sessionize.com/image/f046-400o400o1-7f8g7J6J2uVj6UyRTd9Hmz.jpg", "sessions": [ { - "id": 735751, - "name": "Add Generative AI capabilities to your Android app" + "id": 735915, + "name": "Android driver - application of Android device in RC vehicle development" } ], "isTopSpeaker": false, "links": [ { "title": "LinkedIn", - "url": "https://www.linkedin.com/in/zhehaozhang1997/", + "url": "https://www.linkedin.com/in/tomasz-sluszniak/", "linkType": "LinkedIn" } ], @@ -2206,39 +3990,57 @@ "categories": [] }, { - "id": "0990c055-9a74-45f9-9f5a-10e2d9196649", - "firstName": "Tunji", - "lastName": "Dahunsi", - "fullName": "Tunji Dahunsi", - "bio": "Tj is a software engineer on the media foundations team at AirBnb. He's previously spent 3 years reasearching architecture and testing for Android apps in relation to jetpack compose on the Android Developer Relations team at Google.", - "tagLine": "Software Engineer", - "profilePicture": "https://sessionize.com/image/343d-400o400o1-RvSJp3tofZGgq8fq7Q84Aq.jpg", + "id": "1932f921-2d6c-49e1-84b0-0d801cd2dbee", + "firstName": "Tor", + "lastName": "Norbye", + "fullName": "Tor Norbye", + "bio": null, + "tagLine": "Engineering Director at Google", + "profilePicture": "https://sessionize.com/image/a2f5-400o400o1-Uju83YBpinHo2t15pNnkCj.jpg", "sessions": [ { - "id": 719280, - "name": "Declarative APIs for Declarative UIs: Designing Media Friendly Jetpack Compose Components" + "id": 771426, + "name": "#TheAndroidShow - Leadership Keynote" + }, + { + "id": 771431, + "name": "#TheAndroidShow - Panel Discussion" } ], "isTopSpeaker": false, - "links": [ + "links": [], + "questionAnswers": [], + "categories": [] + }, + { + "id": "edd46ee9-3e55-478c-8f27-c8f86ca77138", + "firstName": "Tushar", + "lastName": "Varshney", + "fullName": "Tushar Varshney", + "bio": "Tushar is working as Android Partner Engineer in Meta working with Google Android Partnerships and Android OS Readiness across Meta's family of apps. Prior to Meta Tushar has been building android apps for last 8 years. ", + "tagLine": "Android Engineer- Meta", + "profilePicture": "https://sessionize.com/image/2402-400o400o1-TXyrFETVGEJfzCvKaSo3Jx.jpg", + "sessions": [ { - "title": "X (Twitter)", - "url": "https://twitter.com/Tunji_D", - "linkType": "Twitter" - }, + "id": 733770, + "name": "User Initiated Data Transfer Jobs" + } + ], + "isTopSpeaker": false, + "links": [ { "title": "LinkedIn", - "url": "https://www.linkedin.com/in/tunji-dahunsi", + "url": "https://www.linkedin.com/in/varshneytushar/", "linkType": "LinkedIn" }, { "title": "Blog", - "url": "https://medium.com/@Tunji_D", + "url": "https://android-developers.googleblog.com/2024/03/android-14-meta-early-adoption-enhanced-user-experience.html", "linkType": "Blog" }, { "title": "Company Website", - "url": "https://www.airbnb.com/", + "url": "https://www.meta.com/", "linkType": "Company_Website" } ], @@ -2246,39 +4048,34 @@ "categories": [] }, { - "id": "6a3de662-ef86-4c62-bb68-2f7ebe607f76", - "firstName": "Ty", - "lastName": "Smith", - "fullName": "Ty Smith", - "bio": "Ty is a Principal Engineer at Uber in Platform engineering and is the chairman of Uber's Open-Source program. He's focused on developer productivity and strives to help engineers ship fast high-quality products. He has a passion for AI, dev tools, frameworks, mobile apps, and open-source. He co-chairs the Mobile Native Foundation and is a Google Developer Expert for Android and Kotlin. He gives regular conference presentations, works on open-source, writes, and organizes community events. He is an angel investor, startup advisor, and a limited partner in several venture capital groups. Ty has been at Uber for 8 years and prior he worked at Twitter as a lead on Fabric developer tools, Evernote, cofounded a startup, and worked at a variety of smaller startups and consulting firms", - "tagLine": "Principal Engineer at Uber, Platform Engineering", - "profilePicture": "https://sessionize.com/image/b693-400o400o1-YapSn4nbXFLtK5vNm8KKrA.jpg", + "id": "34b0d49b-00dd-4dc1-ac1c-6de040e8a5b9", + "firstName": "Vitalii", + "lastName": "Markus", + "fullName": "Vitalii Markus", + "bio": "Hey, I'm Vitalii, an Android Engineer at Flo Health Inc. We're building \"The #1 women's health app worldwide with 60 million monthly active users.\" I'm working in the Health Monitor team, responsible for providing our customers with the most relevant information about their health, symptoms, and patterns.\r\nLiving in Barcelona provides an excellent opportunity for an active lifestyle and many outdoor activities. I usually play tennis and beach volleyball with our IT community; sometimes, we hike in the beautiful places of Catalonia; in our free time, we enjoy local restaurants and craft breweries and discuss new trends in IT.\r\nThe rest of the time, I usually spend time with my family, kid, and 8-kilos cat.", + "tagLine": "Android Engineer @ Flo Health Inc.", + "profilePicture": "https://sessionize.com/image/a8d6-400o400o1-QtWKx2F3qzuiD6f1THAgkk.jpg", "sessions": [ { - "id": 721825, - "name": "Advancing Beyond Staff: A Mobile Engineer’s Journey in Big Tech" + "id": 714221, + "name": "Jetpack Compose: Drawing without pain and recomposition" } ], - "isTopSpeaker": true, + "isTopSpeaker": false, "links": [ { "title": "X (Twitter)", - "url": "http://twitter.com/tsmith", + "url": "https://twitter.com/vit_ius", "linkType": "Twitter" }, { "title": "LinkedIn", - "url": "https://linkedin.com/in/tyvsmith", + "url": "https://www.linkedin.com/in/vitalii-markus/", "linkType": "LinkedIn" }, - { - "title": "Blog", - "url": "https://tysmith.me", - "linkType": "Blog" - }, { "title": "Company Website", - "url": "https://uber.com", + "url": "https://flo.health/", "linkType": "Company_Website" } ], @@ -2286,29 +4083,92 @@ "categories": [] }, { - "id": "74839782-d3e1-4b61-9fdc-6b1507a46012", - "firstName": "Yasith", - "lastName": "Vidanaarachchi", - "fullName": "Yasith Vidanaarachchi", - "bio": "Yasith is a Software Engineer on the Android Camera Platform team working on CameraX with a focus on supporting modern Android practices. Before joining the Android Platform team, he worked on Android apps at various Google teams, at Meta, and at Amazon.", - "tagLine": "Google, Sofware Engineer - CameraX", - "profilePicture": "https://sessionize.com/image/4ba4-400o400o1-3ccpUGS7XwS78FQTezgd44.jpg", + "id": "0aef86d4-a69b-4a82-bd8b-5ee05a3e421d", + "firstName": "Walid", + "lastName": "Tazout", + "fullName": "Walid Tazout", + "bio": "Embedded Software Engineer with a passion for tech in cars.", + "tagLine": "QA Engineer @ Spotify", + "profilePicture": "https://sessionize.com/image/0b80-400o400o1-aSgVqUyMfcyLmF1nUyLNqr.jpg", + "sessions": [ + { + "id": 736123, + "name": "How we build Spotify for Android Automotive" + } + ], + "isTopSpeaker": false, + "links": [ + { + "title": "LinkedIn", + "url": "https://www.linkedin.com/in/tazout-walid/", + "linkType": "LinkedIn" + } + ], + "questionAnswers": [], + "categories": [] + }, + { + "id": "ffd6d0b9-9615-4f5a-9f58-6dcf3d4acb3b", + "firstName": "Wojtek", + "lastName": "Kaliciński", + "fullName": "Wojtek Kaliciński", + "bio": "I'm currently a software engineer on the PubNub SDK team, working on modernizing our JVM SDKs and introducing KMP into our codebase, with a focus on improving both internal and external developer experience. Previously I spent 8 years on the Android team at Google, advocating for and building developer tools and APIs for Android developers.", + "tagLine": "Software Engineer @ PubNub", + "profilePicture": "https://sessionize.com/image/664b-400o400o1-pnyiWWFGB3cNzvGworqTLU.jpg", + "sessions": [ + { + "id": 717692, + "name": "Level up your SDKs with KMP - no rewrite required!" + } + ], + "isTopSpeaker": false, + "links": [ + { + "title": "X (Twitter)", + "url": "https://twitter.com/wkalic", + "linkType": "Twitter" + } + ], + "questionAnswers": [], + "categories": [] + }, + { + "id": "f55e8e03-a341-4c8a-b4fc-a7e97f82db07", + "firstName": "Xiaodao", + "lastName": "Wu", + "fullName": "Xiaodao Wu", + "bio": "Android Large Screen, Activity Embedding, Android OEM", + "tagLine": "Google, Android Developer Relation Engineer", + "profilePicture": "https://sessionize.com/image/caa3-400o400o1-whudwDLLLXycC5awV2eUG8.jpg", "sessions": [ { - "id": 722149, - "name": "Building a Compose-idiomatic CameraX Viewfinder: A Deep Dive" + "id": 764353, + "name": "Ask Android! -GenAI, Platform, Adaptive apps on all form factors" + }, + { + "id": 764351, + "name": "Ask Android! - WearOS, Media, Adaptive apps on all form factors" + }, + { + "id": 764376, + "name": "Ask Android! - Gen AI, Media, Adaptive apps on all form factors" } ], "isTopSpeaker": false, "links": [ + { + "title": "X (Twitter)", + "url": "https://x.com/XiaodaoWu", + "linkType": "Twitter" + }, { "title": "LinkedIn", - "url": "https://www.linkedin.com/in/yasithv/", + "url": "https://www.linkedin.com/in/xiaodao-wu/", "linkType": "LinkedIn" }, { "title": "Company Website", - "url": "https://google.com", + "url": "https://www.google.com", "linkType": "Company_Website" } ], diff --git a/shared/src/commonMain/resources/sponsor_sessions.json b/shared/src/commonMain/resources/sponsor_sessions.json index d958548b..431dcff4 100644 --- a/shared/src/commonMain/resources/sponsor_sessions.json +++ b/shared/src/commonMain/resources/sponsor_sessions.json @@ -5,51 +5,68 @@ "sessions": [ { "questionAnswers": [], - "id": "739401", - "title": "The Future of Android, Kotlin, and Everything", - "description": "Modern mobile and Android are a touch over 15 years old. Droidcon NYC 2024 is in its 10th year. Will we all look at some pictures? Of course! Maybe hear a few tips on running a conference.\r\n\r\nThen, it’s time to look forward.\r\n\r\nTech trends come and go. Some burn hot, then disappear. Some become essential. The web is essential. Mobile is essential. Whatever happens with mobile technology, the idea that mobile won’t be as, or more essential, 15 years from now is nonsense.\r\n\r\nHow mobile is developed and delivered is a different question altogether. This will be a talk about near-term tech possibilities, but not what mobile might look like in 15 years. I could speculate, and I'd be wrong. It will be a talk about how this community can shape that future, starting now.\r\n\r\nWhile the tech hype machine has hopped from one shiny concept to another, neither the web nor mobile has remained static. Far from it. We’re in a moment of change and opportunity. A very special moment for this community specifically. But the community is necessary to take advantage of it.", - "startsAt": "2024-09-19T09:15:00", - "endsAt": "2024-09-19T10:00:00", + "id": "731273", + "title": "Project Sparkles: how Compose is changing Android Studio", + "description": "We use Android Studio every day, and appreciate how its rich feature set makes our job easier. Most people know that Android Studio is built on the IntelliJ Platform, the same that underpins the popular IntelliJ IDEA from JetBrains, which has seen lasting success for over 20 years. It’s a solid, expansive, and by far the best foundation on which we could stand on to deliver Android-oriented goodies.\r\n\r\nHowever, some parts of the IntelliJ Platform show the signs of time; in particular its UI framework, Swing, is proving the most limiting, having been around for almost 30 years. Don’t get us wrong — it works, and the IDEs themselves prove you can ship complex UIs by using Swing on the IntelliJ Platform. But as we looked at how nice it is to develop UIs on Android by using Jetpack Compose, we thought: why don’t we do the same?\r\n\r\nEnter Project Sparkles, which aims at gradually introducing new high-quality, polished UI surfaces in Android Studio, developed in Compose for Desktop, with all the bells and whistles you can expect from a top-tier interface. In this talk, we’ll cover how Project Sparkles is impacting the development of Android Studio, addressing long-standing user feedback, and how we’re working together with other teams at Google and JetBrains to build a framework to make your favourite IDE even better and easier to understand.\r\n\r\nWe’ll demonstrate a few examples of features already shipping that are powered by Project Sparkles, explain what our goals and ambitions are, and even show some sneak peeks of things you may see in a future Studio version. UI enthusiasts, assemble!", + "startsAt": "2024-10-31T09:10:00", + "endsAt": "2024-10-31T10:00:00", "isServiceSession": false, "isPlenumSession": true, "speakers": [ { - "id": "9d2ecd4c-fd6e-444f-b80f-bd8ef04106ae", - "name": "Kevin Galligan" + "id": "e397fee8-078f-4694-8a1f-35b1d57f1fce", + "name": "Sebastiano Poggi" + }, + { + "id": "eb4483f1-306b-447d-9888-648ec0fc0018", + "name": "Chris Sinco" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254878, + "id": 264349, "name": "Introductory and overview" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254884, + "id": 264357, "name": "Keynote" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [], - "sort": 3 + "categoryItems": [ + { + "id": 264358, + "name": "Jetpack Compose" + }, + { + "id": 264379, + "name": "Android Studio" + }, + { + "id": 264390, + "name": "UI/UX" + } + ], + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 49270, + "room": "Hangouts", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -58,51 +75,60 @@ }, { "questionAnswers": [], - "id": "722557", - "title": "Creating a Custom Compose Layout, Step-by-Step", - "description": "Building a custom layout in Jetpack Compose may seem intimidating, but it does not have to be. With an understanding of the tools available for custom layout, the phases of composition, and best practices for state management, anyone can create a powerful, beautiful custom layout.\r\n\r\nIn this talk, we will build a sophisticated schedule component step-by-step. This composable will include multiple display modes, theme-like encapsulation of styling and behaviors, scoped modifiers for easy customization, and even some animation.", - "startsAt": "2024-09-19T10:20:00", - "endsAt": "2024-09-19T11:00:00", + "id": "736883", + "title": "Optimizing Kotlin Code in Practice", + "description": "In this session we will look at a series of optimizations that were done in Jetpack Compose to learn how different types of optimizations can affect performance. These optimizations include code flow/algorithms, data structures, low-level bytecode optimizations, and memory optimizations. You will learn how to access and understand the bytecode and the machine code that your Kotlin code produces, so you can discover how to improve your applications on your own.", + "startsAt": "2024-10-31T10:20:00", + "endsAt": "2024-10-31T11:00:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "2d41d3fb-3321-4b47-a401-ae84a5de2423", - "name": "Huyen Tue Dao" + "id": "152f613f-841b-407d-9a65-3703ec2dfae2", + "name": "Romain Guy" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [], - "sort": 3 + "categoryItems": [ + { + "id": 264358, + "name": "Jetpack Compose" + }, + { + "id": 264359, + "name": "Kotlin" + } + ], + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 49270, + "room": "Hangouts", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -111,60 +137,72 @@ }, { "questionAnswers": [], - "id": "721723", - "title": "Unpacking Compose Multiplatform Accessibility", - "description": "In this talk, we will provide a comprehensive overview of the current state of accessibility in Compose Multiplatform. As an emerging UI framework in multiplatform development, understanding its accessibility features is critical for developers.\r\n\r\nWe will delve into the current accessibility capabilities of Compose Multiplatform, discuss its strengths and weaknesses, and provide practical strategies for leveraging its features to ensure the accessibility of your apps.", - "startsAt": "2024-09-19T10:20:00", - "endsAt": "2024-09-19T11:00:00", + "id": "731970", + "title": "Wireless protocols for the next generation IoT devices", + "description": "In an era where mobile apps and IoT devices are becoming increasingly interconnected, understanding the nuances of modern wireless protocols is crucial for software developers. This technical talk aims to delve into the latest advancements and practical applications of wireless communication technologies, including Bluetooth Low Energy (BLE), WiFi, Ultra-Wideband (UWB), Thread, LoRaWAN, and more. Learn when and how to use each protocol and their pros and cons. ", + "startsAt": "2024-10-31T10:20:00", + "endsAt": "2024-10-31T11:00:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "fb25f3d5-103f-45ef-983a-414e583cea31", - "name": "Colin Marsch" + "id": "79823093-1b16-4a2b-b0a9-ea4cd25b92f5", + "name": "Erik Hellman" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, - "name": "Intermediate" + "id": 264351, + "name": "Advanced" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254888, + "id": 264369, + "name": "Other" + }, + { + "id": 264370, + "name": "IoT" + }, + { + "id": 264371, + "name": "Wearables" + }, + { + "id": 264381, "name": "Cross-Platform" }, { - "id": 254902, - "name": "UI/UX" + "id": 264384, + "name": "Android" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 49271, + "room": "Glass", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -173,60 +211,60 @@ }, { "questionAnswers": [], - "id": "722420", - "title": "Efficient Android Builds at Scale: Lessons from Pinterest", - "description": "Building Android apps in a large-scale environment brings several challenges that include maintaining build speeds, managing dependencies, and ensuring consistent and reliable builds across different environments. At Pinterest, these challenges are magnified by our expansive codebase and development team size. This session will explore: The scale we operate at Pinterest, an introduction to Gradle,\r\ninsights into Pinterest's project structuring, utilizing custom plugins to streamline builds and enforce consistency across all modules and a look at Pinterest's infrastructure setup.", - "startsAt": "2024-09-19T10:20:00", - "endsAt": "2024-09-19T11:00:00", + "id": "735950", + "title": "What's new in Android 15 Security?", + "description": "Audience: Android Developers\r\nLevel: Beginner/Intermediate (No previous security experience required)\r\n\r\nTalk Summary:\r\n\r\nIn \"What's New in Android 15 Security?\", we’ll guide Android developers through the essential security updates and restrictions introduced in Android 15. Starting with a brief recap of the key security changes from Android 14, we'll dive into the new restrictions and features in Android 15 that every developer should know:\r\n\r\n- Supporting Android 15’s Private Space: Discover how to enable your app for this new feature to enhance user privacy while managing the challenges of a new type of process termination.\r\n- New Mitigation for Task Hijacking: Explore the new security measures designed to prevent malicious background apps from bringing other apps to the foreground.\r\n- Safer Intents: Discover enhanced safeguards that make intents more secure and robust, minimizing the risk of data leaks and unauthorized access.\r\n- Further Foreground Service Restrictions: Understand the tightened restrictions on foreground services and how to adapt your app to comply.\r\n- Recap of Privacy Sandbox Updates: Review the Privacy Sandbox and its updates in Android 15, focusing on how these changes impact user data handling and ad targeting.\r\n\r\n\r\nKey Takeaways:\r\n- Overview of Security Changes: Gain a clear understanding of the security updates in Android 15 and their implications for app development.\r\n- Practical Compliance Tips: Learn actionable strategies to ensure your app remains compliant with the latest security restrictions when running and/or targeting Android 15.\r\n- Leverage New Features: Discover how to take advantage of Android 15’s new security features to improve your app’s security and promote user privacy.\r\n\r\nSpeaker Experience:\r\nWith over 10 years of experience as a Senior Android Developer, co-authoring the Android Security Cookbook, and delivering talks internationally on Android security, I bring a deep understanding of the platform's security evolution. This will be a fresh and engaging talk for Droidcon London 2024.", + "startsAt": "2024-10-31T10:20:00", + "endsAt": "2024-10-31T11:00:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "dab126dc-4467-4ada-a9bb-b888892e89f6", - "name": "David Chang" + "id": "8b008502-24e7-4af7-a7a8-d92a7e683271", + "name": "Scott Alexander-Bown" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254887, - "name": "CI/CD" + "id": 264372, + "name": "Security" }, { - "id": 254899, - "name": "Gradle" + "id": 264384, + "name": "Android" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49958, - "room": "Fountain Room", + "roomId": 49272, + "room": "Things", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -235,60 +273,64 @@ }, { "questionAnswers": [], - "id": "713009", - "title": "Debugging in the Wild: Unleashing the Power of Remote Tooling", - "description": "We all strive to build flawless apps, but let's face it - bugs happen. And sometimes, those pesky bugs are elusive, only showing up in the unpredictable chaos of production. Limited tooling, the dreaded \"black box\" environment, and the pressure to fix it fast can be a developer's nightmare.\r\n\r\nThis talk will dive into real-world debugging challenges faced by mobile developers, sharing practical tips and techniques for effectively troubleshooting production issues with limited resources. You'll learn:\r\nBeyond the Crash Logs: Strategies for interpreting production data beyond the standard crash logs, including network requests, user behavior, and system metrics.\r\n\r\n\r\nLeveraging Log Collection Frameworks: Mastering the art of selectively collecting and analyzing relevant logs for crucial insights into the root cause of bugs.\r\n\r\n\r\nCreative Debugging Techniques: Discover unconventional approaches like remote logging, feature flags\r\n\r\n\r\nLessons Learned from the Reddit Android App: I'll share specific case studies of production bugs encountered on the Reddit app, highlighting the debugging challenges and the strategies used to successfully resolve them.\r\n\r\nBy the end of this talk, you'll have a toolkit of practical approaches to effectively debug production issues, even when working with limited resources. You'll leave feeling empowered to confidently face the \"wild\" and tame those elusive bugs!\r\n", - "startsAt": "2024-09-19T10:20:00", - "endsAt": "2024-09-19T11:00:00", + "id": "693733", + "title": "Hardware development with KMP and Compose Desktop", + "description": "Nowadays, Mobile software development focuses on efficient architecture, scalability and delightful UX. Those are quite important topics but sometimes we forget Mobile Development has its roots in Embedded Software Development, which was that branch of software development focused on running code on limited resource devices.\r\n\r\nBoth have diverged, one specialised in mobile apps for smartphones, while the other has transformed more into IoT, industrial and other types of solutions.\r\n\r\nThere was an attempt to bring both together with Android Things. It made Android app development skills transferable for hardware development, letting developers create apps with their existing knowledge and interact with the hardware through “high-level” driver APIs. Unfortunately, it was decommissioned by Google. \r\n\r\nWith the flourishing of technologies like KMP and Compose Desktop, the regular Android developer again has some transferable skills that can be used to develop apps for non-smartphone hardware. \r\n\r\nIn this session I will talk about how to develop a simple app for devices like the Raspberry Pi, covering details like interacting with GPIO, WIFI and Bluetooth communication as well as current issues and workarounds. ", + "startsAt": "2024-10-31T10:20:00", + "endsAt": "2024-10-31T11:00:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "699c8fd7-70f9-44df-85d2-abb6454cee07", - "name": "Eric Chiquillo" + "id": "95a6035d-1167-4cc1-9974-bc065a077893", + "name": "Enrique Ramírez" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254891, - "name": "Android" + "id": 264358, + "name": "Jetpack Compose" }, { - "id": 254894, - "name": "Testing" + "id": 264361, + "name": "KMP" + }, + { + "id": 264370, + "name": "IoT" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 52283, - "room": "Sapphire Room", + "roomId": 53981, + "room": "Stadia", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -297,60 +339,64 @@ }, { "questionAnswers": [], - "id": "717904", - "title": "GC You Later, Allocator", - "description": "Memory management on Android is easy: the garbage collector does almost everything and LeakCanary handles the rest! But Kotlin/Multiplatform brings new challenges. Your new features could be blocked if Kotlin/Native leaks memory.\r\n\r\nIn this talk you’ll get a refresher on Android's garbage collector, and you’ll learn how Swift works without one. Once that groundwork is laid you’ll see how Kotlin/Native integrates these two models.\r\n\r\nWe’ll cover some memory management tools & techniques:\r\n\r\n - Using Xcode to see what’s leaking\r\n - Avoiding leaks when mixing Kotlin and Swift\r\n - Using PhantomReference to test memory bugs\r\n - How Kotlin inline classes compare to Valhalla’s primitive classes.\r\n\r\nIf you’d like to improve memory management in a multiplatform app, this talk is for you.\r\n", - "startsAt": "2024-09-19T11:15:00", - "endsAt": "2024-09-19T11:55:00", + "id": "711892", + "title": "Gradle: The Build System That Loves To Hate You", + "description": "Come to hear a talk about dozens of foot guns in Gradle that can make you tear your hair out as you try to \"just make it work\", presented by someone who has stepped on most of the rakes. For example, did you know every call in groovy is using reflection?!\r\n\r\nAlong with the issues you will also learn about way to avoid it or at least minimize your risk of misery. After the talk you should have more confidence as you venture into the land of Gradle build.", + "startsAt": "2024-10-31T10:20:00", + "endsAt": "2024-10-31T11:00:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "4a13d160-c8c3-4214-926f-24a5b15c78dd", - "name": "Jesse Wilson" + "id": "8e2c2869-4beb-4868-8651-8567219ea947", + "name": "Aurimas Liutikas" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254888, - "name": "Cross-Platform" + "id": 264380, + "name": "Tooling" }, { - "id": 254892, - "name": "Kotlin" + "id": 264394, + "name": "CI/CD" + }, + { + "id": 264378, + "name": "Gradle" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 53982, + "room": "Nest", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -359,60 +405,67 @@ }, { "questionAnswers": [], - "id": "719656", - "title": "Image Recognition, Object Detection, Model Evaluation and Customization with MediaPipe on Android", - "description": "Image Recognition, Object Detection and Model Evaluation with MediaPipe on Android\r\n\r\nMediaPipe is an open source, cross platform Machine Learning framework.\r\n\r\nIn this session we will learn how we can perform some common vision based tasks using MediaPipe on Android. We will also cover the following with real examples:\r\n\r\n1) Object Detection with MediaPipe on Android: Efficiently locate objects in real-time on Android devices using MediaPipe.\r\n2) Image Classification and Segmentation via MediaPipe on Android: Identify and categorize images accurately with MediaPipe's pre-trained models.\r\n3) Measuring the accuracy of models used to detect objects in images. \r\n4) Using MediaPipe Model Maker to train custom object detection models using your own data. ", - "startsAt": "2024-09-19T11:15:00", - "endsAt": "2024-09-19T11:55:00", + "id": "764303", + "title": "Ask Android! - Compose, KMP, Gemini in AS", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T10:20:00", + "endsAt": "2024-10-31T11:00:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "a9033dbc-360f-4686-ab86-17a4a83be787", - "name": "Anant Chowdhary" + "id": "c16c95a9-0e07-4838-9cba-5d041aee4d14", + "name": "Rebecca Franks" + }, + { + "id": "e397fee8-078f-4694-8a1f-35b1d57f1fce", + "name": "Sebastiano Poggi" + }, + { + "id": "eb4483f1-306b-447d-9888-648ec0fc0018", + "name": "Chris Sinco" + }, + { + "id": "7280b9e7-ddf7-4cfb-b85b-1e998d851f66", + "name": "Marcello Galhardo" + }, + { + "id": "1dfe9bb5-d9bf-41a9-b7d6-dcfd7953e941", + "name": "Nick Butcher" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 306233, + "name": "Office Hours" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [ - { - "id": 254889, - "name": "AI/ML" - }, - { - "id": 254891, - "name": "Android" - } - ], - "sort": 3 + "categoryItems": [], + "sort": 4 } ], - "roomId": 49958, - "room": "Fountain Room", + "roomId": 54706, + "room": "Ask Android", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -421,84 +474,67 @@ }, { "questionAnswers": [], - "id": "727034", - "title": "Squash your hidden bugs using Microsoft Clarity", - "description": "Have you ever released a feature only to discover critical bugs in production? Are you curious about why your users are struggling with your new feature? Wondering why your customers are dropping off? With Clarity, you can find answers to all these questions at zero cost. Gain insights into user experiences, identify friction points, and uncover potential improvements through Clarity’s session recordings, heatmaps, AI insights, and more.", - "startsAt": "2024-09-19T11:15:00", - "endsAt": "2024-09-19T11:55:00", + "id": "764328", + "title": "Ask Android! - Compose, KMP, Gemini in AS", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T11:00:00", + "endsAt": "2024-10-31T11:15:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "636dd7ea-e476-4289-a6e2-a7cbc116da62", - "name": "Ibrahim Radwan" + "id": "e04a04d0-c875-4f36-ae02-914ba87b5b32", + "name": "Rebecca Gutteridge" + }, + { + "id": "e397fee8-078f-4694-8a1f-35b1d57f1fce", + "name": "Sebastiano Poggi" + }, + { + "id": "eb4483f1-306b-447d-9888-648ec0fc0018", + "name": "Chris Sinco" + }, + { + "id": "7280b9e7-ddf7-4cfb-b85b-1e998d851f66", + "name": "Marcello Galhardo" + }, + { + "id": "1dfe9bb5-d9bf-41a9-b7d6-dcfd7953e941", + "name": "Nick Butcher" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 306233, + "name": "Office Hours" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [ - { - "id": 254886, - "name": "Tooling" - }, - { - "id": 254888, - "name": "Cross-Platform" - }, - { - "id": 254889, - "name": "AI/ML" - }, - { - "id": 254891, - "name": "Android" - }, - { - "id": 254893, - "name": "Design" - }, - { - "id": 254894, - "name": "Testing" - }, - { - "id": 254897, - "name": "Libraries" - }, - { - "id": 254902, - "name": "UI/UX" - } - ], - "sort": 3 + "categoryItems": [], + "sort": 4 } ], - "roomId": 52283, - "room": "Sapphire Room", + "roomId": 54706, + "room": "Ask Android", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -507,51 +543,68 @@ }, { "questionAnswers": [], - "id": "726519", - "title": "Speed Trap Ahead – Avoiding Costly Security and Privacy Issues in SDK Integration", - "description": "Just as installing an engine into a car demands precision and attention to detail, integrating an SDK into an application requires consideration of security and privacy implications. Developers must ensure that the SDK seamlessly integrates with their codebase, prioritizing security protocols and privacy safeguards. The correct integration of the SDK with existing components is vital to mitigate potential vulnerabilities and uphold user privacy. In this turbocharged talk, we’ll cut straight to the finish line and give you the “so-what” to consider when integrating SDKs.", - "startsAt": "2024-09-19T12:10:00", - "endsAt": "2024-09-19T12:30:00", + "id": "742198", + "title": "Demystifying Code Signing", + "description": "All Android apps have to be code signed. This is performed either by the developer or through Google Play Signing. Despite this, code signing and the processes around it are shrouded in mystery.\r\n\r\nDrawing from lived experiences, this talk with cover:\r\n - What is a code signature?\r\n - Why do we need to sign in the first place?\r\n - Developer signing vs Google Play Signing\r\n - Security expectations vs reality\r\n - Going beyond signing", + "startsAt": "2024-10-31T11:15:00", + "endsAt": "2024-10-31T11:35:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "9b706079-0c5b-4d36-852a-4fbc3a271734", - "name": "Jonathan Seals" + "id": "f8c173b5-64f5-43e4-9f1c-ee44587b7691", + "name": "Neal Michie" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, - "name": "Intermediate" + "id": 264349, + "name": "Introductory and overview" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254881, + "id": 264353, "name": "Lightning talk" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [], - "sort": 3 + "categoryItems": [ + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264372, + "name": "Security" + }, + { + "id": 264377, + "name": "Modern Android Development" + }, + { + "id": 264379, + "name": "Android Studio" + } + ], + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 49270, + "room": "Hangouts", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -560,56 +613,68 @@ }, { "questionAnswers": [], - "id": "713028", - "title": "DevSecOps: Balancing development and security", - "description": "When companies want to produce a mobile app quickly and add in a security element, costs can escalate and the timeframe can elongate. But if organisations do not follow at least the minimum-security requirements, they can find themselves in a dire position.\r\n\r\nMoving forward, trust and accountability must be built into the product. As part of this, security architecture must move beyond the pen test and instead be baked into the process from the very beginning.\r\n\r\nDuring the session, Pat will take you through the mobile app threat landscape, examples of app attacks are taking place on mobile app and best practices of mobile application security, including: Application hardening (obfuscation and anti-tampering), security testing, cryptographic key protection, runtime threat visibility and protection with live demo and walkthrough.", - "startsAt": "2024-09-19T12:10:00", - "endsAt": "2024-09-19T12:30:00", + "id": "735932", + "title": "Don't Build to Last: Strategies for Designing and Productionising Experiments", + "description": "Striking the right balance between rapid iteration and long-term feature quality can feel like an impossible task. In this session, we'll explore how to move fast without breaking things, and delve into the art of \"productionising\" experimental code.\r\n\r\nThe session will navigate the entire lifecycle of experimentation from an Android engineers perspective. You'll learn how to work with your data team to design high-quality experiments with tight feedback loops and how to effectively roll them out - whether that involves making new behaviour permanent or cleaning up the mess. This session offers practical insights for engineering teams looking to innovate quickly while maintaining a robust production environment.", + "startsAt": "2024-10-31T11:15:00", + "endsAt": "2024-10-31T11:35:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "598701ca-2d07-4f10-9cef-b4467ca369eb", - "name": "Pat Shueh" + "id": "85f45c57-98a0-45e9-8a5f-ed6096e268b9", + "name": "Kate Moksina" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254881, + "id": 264353, "name": "Lightning talk" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254900, - "name": "Security" + "id": 264363, + "name": "Testing" + }, + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264380, + "name": "Tooling" + }, + { + "id": 264384, + "name": "Android" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 49271, + "room": "Glass", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -618,60 +683,64 @@ }, { "questionAnswers": [], - "id": "711768", - "title": "20 Nuggets in 20 Minutes – Get more from your CI", - "description": "For most of us, CI is a set-it-and-forget-it tool. It should churn through builds and tests without giving us any trouble. If this describes your experience: congratulations! You have a stable continuous integration practice.\r\n\r\nBut you can level up that CI pipeline. Together, we'll review a bunch of cool tools and creative setups that you can adopt in your own CI. These run the gamut from reducing wall-clock time, to lesser used static analysis, and handy optimizations.\r\n\r\nCome learn a thing or twenty about improving your team's developer experience, shipping faster, and identifying regressions early.", - "startsAt": "2024-09-19T12:10:00", - "endsAt": "2024-09-19T12:30:00", + "id": "733188", + "title": "Improving App Performance With Custom Thread Pools", + "description": "In this presentation, I will discuss how to optimise the performance of an app by implementing a custom thread pool.\r\n\r\nThe audience will learn how to replace multiple thread pools created by libraries such as Coroutines, WorkManager, and OkHttp with a single, efficient custom thread pool. \r\n\r\nKey points include:\r\n\r\n1. Thread Pool Awareness: Understanding how various libraries create threads without awareness of existing threads and what the impact of that is on performance.\r\n\r\n2. Thread Pool Auditing: Demonstrating how to print to the LogCat a list of the currently running threads and showcasing a before and after.\r\n\r\n3. Performance Enhancement: Reducing RAM usage and improving startup times by consolidating thread pools.\r\n\r\n4. Custom Thread Pool Implementation: Demonstrating through code snippets how to create a Thread Pool and integrate it into OkHttp, Coroutines and WorkManager.\r\n\r\n5. Understanding The Differences Between Coroutines IO and Default Dispatchers: Using this knowledge to create a custom Thread Pool for IO work and CPU work.\r\n\r\nThis talk will provide concrete techniques for developers to enhance app performance, making it a standout topic for the conference.\r\n\r\nExperience Level:\r\n7 years experience as an Android Engineer, currently at Compare The Market for almost 4 years.\r\n\r\nI would rate myself as having intermediate knowledge on this topic, however it is a specialised topic.\r\n\r\nI have not given this talk anywhere, although I have presented this topic internally at Compare The Market.\r\n\r\nKeywords:\r\nasynchronous programming, thread pool, performance optimisation", + "startsAt": "2024-10-31T11:15:00", + "endsAt": "2024-10-31T11:35:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "6af9e2e9-6dff-4ee1-9bbf-c4f815969b9c", - "name": "Ben Boral" + "id": "e841b549-a549-420e-ba73-3039c567a609", + "name": "Tin Novakovic" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, - "name": "Intermediate" + "id": 264351, + "name": "Advanced" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254881, + "id": 264353, "name": "Lightning talk" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254887, - "name": "CI/CD" + "id": 264369, + "name": "Other" }, { - "id": 254899, - "name": "Gradle" + "id": 264384, + "name": "Android" + }, + { + "id": 264386, + "name": "Coroutines" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49958, - "room": "Fountain Room", + "roomId": 49272, + "room": "Things", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -680,60 +749,60 @@ }, { "questionAnswers": [], - "id": "725412", - "title": "Accelerating On-Device AI Development with Qualcomm AI Hub", - "description": "Hey Android developers, ready to elevate your apps with on-device AI? Qualcomm's AI Hub is here to make your life easier streamlining your workflow in less than 5 minutes.\r\n \r\nAI Hub handles the complexity of model compilation and gets you to test performance in real Snapdragon or Qualcomm devices with just a few lines of code. It comes with a library of over 100 pre-optimized models, but don't worry - if you've got your own custom models, AI Hub has you covered and we keep your data private.\r\n \r\nThe best part? We're talking about AI that runs up to 4 times faster. That means smoother apps, better experiences for your users, and less battery drain. Whether you're building the next viral social media platform or advancing the capabilities of your existing app, Qualcomm AI Hub is your go-to for smarter, more efficient app development.\r\n \r\nJoin us to see how AI Hub can help you power on-device AI development.", - "startsAt": "2024-09-19T12:10:00", - "endsAt": "2024-09-19T12:30:00", + "id": "756181", + "title": "Fortify the Fort: Think outside the security", + "description": "Protection is deliberately included in everything you do with Android. Privacy is enabled through Android security. Like any other developer, you need to follow a shared responsibility security model, meaning your customers and users play an essential part in the overall security posture. This talk shows how a developer can follow simple guidelines to improve the application's security and stop unauthorised access.", + "startsAt": "2024-10-31T11:15:00", + "endsAt": "2024-10-31T11:35:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "d630dc15-c0c0-4f61-a490-ef993aafb2c3", - "name": "Siddhika Nevrekar" + "id": "4b141461-befd-4bd3-83c9-1c1f7599a9c6", + "name": "Goran Minov" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254878, + "id": 264349, "name": "Introductory and overview" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254881, + "id": 264353, "name": "Lightning talk" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254889, - "name": "AI/ML" + "id": 264368, + "name": "Techniques & Guides" }, { - "id": 254891, - "name": "Android" + "id": 264372, + "name": "Security" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 52283, - "room": "Sapphire Room", + "roomId": 53981, + "room": "Stadia", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -742,64 +811,64 @@ }, { "questionAnswers": [], - "id": "721534", - "title": "Composing an API the *right* way", - "description": "Everyone who writes code using Jetpack Compose designs Composable functions and components all the time. In this talk, we'll take a look at some highlights from the official guidelines around designing Compose APIs. This will let us do a better job of building with Compose, from naming functions through ordering parameters to managing state correctly.", - "startsAt": "2024-09-19T13:40:00", - "endsAt": "2024-09-19T14:20:00", + "id": "735282", + "title": "Securing the Unseen: Advanced Threats, Best Practices & Challenges in Mobile App Security", + "description": "In today's app-driven world, securing mobile applications is not just an afterthought—it's a critical component of the development process. This session at DroidCon London will take you deep into the mobile app security world, focusing on the latest threats that target mobile applications and the advanced techniques used to secure them.\r\n\r\nWe'll explore cutting-edge security practices that should be integrated throughout the app development lifecycle, from secure coding standards to app security and comprehensive threat modeling. You'll learn to identify and mitigate vulnerabilities before they become exploits, ensuring your applications are resilient against modern attacks.\r\n\r\nWe'll discuss key risks, security techniques and challenges app developers and security engineers face when trying to secure code, keys, and data effectively.\r\n\r\nThis session is designed for app developers, security professionals, and penetration testers who want to stay ahead of the curve in mobile app security. Join us to enhance your skills and ensure your apps are secure in the face of today's and tomorrow's threats.\r\n", + "startsAt": "2024-10-31T11:15:00", + "endsAt": "2024-10-31T11:35:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "1916ae1c-96d7-480f-9eed-bf5dce444441", - "name": "Márton Braun" + "id": "eddfc3bb-2258-45f8-b4a6-50233932a2d2", + "name": "Mohamed Kerroumi" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, - "name": "Intermediate" + "id": 264349, + "name": "Introductory and overview" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 264353, + "name": "Lightning talk" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254891, - "name": "Android" + "id": 264363, + "name": "Testing" }, { - "id": 254892, - "name": "Kotlin" + "id": 264372, + "name": "Security" }, { - "id": 254902, - "name": "UI/UX" + "id": 264382, + "name": "AI/ML" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 53982, + "room": "Nest", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -808,64 +877,67 @@ }, { "questionAnswers": [], - "id": "725795", - "title": "Using Rust in Your Next KMP App", - "description": "When building an app for KMP, Kotlin provides powerful features and tooling to enhance the developer experience. But sometimes it is necessary to go beyond what Kotlin offers.\r\n\r\nIn this talk, we will cover the process of using the Rust programming language as the core of an Android SDK, as well as the reasons why you might want to do this. We will also go over some of the speed bumps we encountered along the way while building the Ditto SDK for Android platforms.\r\n\r\nNo prior experience with Rust is necessary.", - "startsAt": "2024-09-19T13:40:00", - "endsAt": "2024-09-19T14:20:00", + "id": "764329", + "title": "Ask Android! - Compose, KMP, Gemini in AS", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T11:15:00", + "endsAt": "2024-10-31T11:35:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "6c6404df-420e-4dfc-acf7-a3418742afd6", - "name": "Ben Chatelain" + "id": "e397fee8-078f-4694-8a1f-35b1d57f1fce", + "name": "Sebastiano Poggi" + }, + { + "id": "eb4483f1-306b-447d-9888-648ec0fc0018", + "name": "Chris Sinco" + }, + { + "id": "7280b9e7-ddf7-4cfb-b85b-1e998d851f66", + "name": "Marcello Galhardo" + }, + { + "id": "1dfe9bb5-d9bf-41a9-b7d6-dcfd7953e941", + "name": "Nick Butcher" + }, + { + "id": "e4292032-5462-494b-abfd-3898301476e2", + "name": "Rebecca Franks" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254880, - "name": "Advanced" + "id": 264350, + "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 306233, + "name": "Office Hours" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [ - { - "id": 254891, - "name": "Android" - }, - { - "id": 254892, - "name": "Kotlin" - }, - { - "id": 254897, - "name": "Libraries" - } - ], - "sort": 3 + "categoryItems": [], + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 54706, + "room": "Ask Android", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -874,68 +946,67 @@ }, { "questionAnswers": [], - "id": "671422", - "title": "How to make Kotlin compile 2x faster on a super large project?", - "description": "In this talk, we'll introduce 5 advanced optimizations, from easy to hard to existing Kotlin compilers which are related to cache rate improvement and cache reuse. One of the heavyweight optimizations we call the \"baseline kotlin cache\". As we all know, normally, any changes to a low-level module will make the parent module cache fingerprint change invalid. We solved this problem by turning the fuzzy cache of the compileKotlin task into an incremental record bin, and reducing the full build time of the TikTok app in any scenario to 50%! Those solutions from TikTok could help Kotlin module build 2x+ faster than it used to be. ", - "startsAt": "2024-09-19T13:40:00", - "endsAt": "2024-09-19T14:20:00", + "id": "764330", + "title": "Ask Android! - Compose, KMP, Gemini in AS", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T11:35:00", + "endsAt": "2024-10-31T11:50:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "03c63012-49c4-44eb-af96-0f5360b0d187", - "name": "Ishan Khanna" + "id": "e397fee8-078f-4694-8a1f-35b1d57f1fce", + "name": "Sebastiano Poggi" + }, + { + "id": "eb4483f1-306b-447d-9888-648ec0fc0018", + "name": "Chris Sinco" + }, + { + "id": "7280b9e7-ddf7-4cfb-b85b-1e998d851f66", + "name": "Marcello Galhardo" + }, + { + "id": "1dfe9bb5-d9bf-41a9-b7d6-dcfd7953e941", + "name": "Nick Butcher" }, { - "id": "ed92b8fc-711a-48c7-a8e5-4255fb793ffa", - "name": "Pengwen Jiao" + "id": "e4292032-5462-494b-abfd-3898301476e2", + "name": "Rebecca Franks" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254880, - "name": "Advanced" + "id": 264350, + "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 306233, + "name": "Office Hours" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [ - { - "id": 254886, - "name": "Tooling" - }, - { - "id": 254887, - "name": "CI/CD" - }, - { - "id": 254892, - "name": "Kotlin" - } - ], - "sort": 3 + "categoryItems": [], + "sort": 4 } ], - "roomId": 49958, - "room": "Fountain Room", + "roomId": 54706, + "room": "Ask Android", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -944,68 +1015,84 @@ }, { "questionAnswers": [], - "id": "725870", - "title": "Why testing is also a developer's problem", - "description": "As the pace of development increases, completing testing in sprint becomes harder. The features to test are becoming more numerous and complicated. The testing backlog grows and begins to slow down the pace of innovation and application quality. Fortunately, mobile test automation is here to help make test development easier, faster, and better.​\r\n\r\nKey takeaways:​\r\n\r\n- Challenges Agile teams face testing Android applications​\r\n- Approaches to make testing a breeze and get back to developing great new applications​\r\n- Accelerating test creation with automation​\r\n- Using virtual and physical devices for easy setup and execution​\r\n- Get testing faster with zero-footprint authoring on the Tricentis Virtual Mobile Grid​\r\n- Reducing maintenance using ML and AI​", - "startsAt": "2024-09-19T13:40:00", - "endsAt": "2024-09-19T14:20:00", + "id": "729194", + "title": "What’s New in Compose Multiplatform - A Live Tour", + "description": "What if you could just… do iOS development? Kotlin and Compose Multiplatform make it possible!\r\n\r\nLive coding our way through the evergrowing ecosystem built by JetBrains, Google, and the wonderful Kotlin community, we’ll show you how you can pick and choose well-established tools and libraries that you already know from Android and use them to build cross-platform apps.\r\n\r\nThis includes the addition of new Jetpack libraries such as Navigation, ViewModel, Room, and more – and you don’t have to make any compromises when it comes to using platform capabilities, either! Using JetBrains Fleet throughout the demos, you’ll also see the tooling support you get when developing multiplatform applications.\r\n\r\nYou may not realize it yet, but you probably already know how to build apps with Compose Multiplatform – for Android, iOS, and beyond.", + "startsAt": "2024-10-31T11:50:00", + "endsAt": "2024-10-31T12:30:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "1077aaba-731b-405f-92eb-2481a507a082", - "name": "Blake Reynolds" + "id": "a82c6942-6e2b-4d80-9883-0b84b932d6ef", + "name": "Sebastian Aigner" }, { - "id": "8b0744c3-a112-4c95-afc8-92fd3610f661", - "name": "Blake Reynolds" + "id": "1916ae1c-96d7-480f-9eed-bf5dce444441", + "name": "Márton Braun" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254878, + "id": 264349, "name": "Introductory and overview" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254887, - "name": "CI/CD" + "id": 264358, + "name": "Jetpack Compose" }, { - "id": 254889, - "name": "AI/ML" + "id": 264359, + "name": "Kotlin" }, { - "id": 254894, - "name": "Testing" + "id": 264361, + "name": "KMP" + }, + { + "id": 264364, + "name": "Compose" + }, + { + "id": 264380, + "name": "Tooling" + }, + { + "id": 264381, + "name": "Cross-Platform" + }, + { + "id": 264388, + "name": "Libraries" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 52283, - "room": "Sapphire Room", + "roomId": 49270, + "room": "Hangouts", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -1014,60 +1101,60 @@ }, { "questionAnswers": [], - "id": "721533", - "title": "Kotlin Coroutine Mechanisms: Introduction to coroutine behavior through playful examples", - "description": "Sometimes you think you know coroutines and then after a while, you’re like “wait, do I really know coroutines?” . Inspired from \"Programming Android with Kotlin: Achieving Structured Concurrency with Coroutines\", this talks strengthens everyday coroutine understanding through playful explorations. We [the authors] always had sincere intentions with the book:\r\n\r\n\"While [coroutine] concepts are important if you want to master coroutines, you don’t have to understand everything right now to get started and be productive with coroutines.\" — Chapter 9: Coroutine concepts p. 127\r\n\r\nYou might be in beginning stages of learning Kotlin. Or maybe you’ve been using coroutines for a while and want to brush up, maybe you're a little burned from other talks: either way, you'll be looking at coroutines a little different by the end of this session!\r\n", - "startsAt": "2024-09-19T14:35:00", - "endsAt": "2024-09-19T15:15:00", + "id": "760426", + "title": "Enter the Metaverse: Android Apps on Meta Horizon OS", + "description": "Meta Horizon Store is open for business to mobile developers. Android developers can now port existing mobile apps, easily add spatial capabilities and publish them for Meta Quest headsets. Start building for the next computing platform to target new users, innovate with mixed reality and grow your audience. With new tooling like Meta Spatial SDK, you can combine the rich ecosystem of Android development and the unique capabilities of Meta Quest via accessible APIs, all while using the mobile development languages, tools, and libraries you’re already familiar with.", + "startsAt": "2024-10-31T11:50:00", + "endsAt": "2024-10-31T12:30:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "a4d26fc1-9707-4c86-bc82-70b7ce05823c", - "name": "Amanda Hinchman-Dominguez" + "id": "555e52b7-fcb6-49ea-81c7-d9b52cc4c7e9", + "name": "Jonathan Wendorf" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254878, + "id": 264349, "name": "Introductory and overview" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254892, - "name": "Kotlin" + "id": 264383, + "name": "AR/VR" }, { - "id": 254895, - "name": "Coroutines" + "id": 264384, + "name": "Android" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 49271, + "room": "Glass", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -1076,60 +1163,64 @@ }, { "questionAnswers": [], - "id": "720219", - "title": "Making the Big Kotlin Multiplatform Decision", - "description": "Why is adopting Kotlin Multiplatform Mobile not an easy decision to make? After all, it can potentially save a business millions of dollars by cutting down duplicate iOS and Android code and saving many developer hours. \r\n\r\nBut when you have large, complicated codebases and investment in a mobile organization with specific skill sets, it can be an expensive decision to put time and resources into shifting into KMM instead. It can be a hard decision to reverse, and a risky call to make. But it doesn't have to be!\r\n\r\nIn this talk I’ll lay out a decision-making framework to approach KMM adoption - not just from an engineering perspective, but a leadership one too. We’ll reference case studies and talk about: \r\n\r\n* Evaluating KMM for different kinds of projects - standard mobile codebases as well as those in custom frameworks like RIBS and Workflow\r\n* The important factors - build support for Android vs iOS, resourcing KMM expertise, and flexibility, all of which impact long-term risks and outcomes\r\n* Evaluating cultural support - what kind of teams and organizations are best set up for KMM success? \r\n* Finding the right engineering levers to make adoption more successful\r\n \r\nAt Square, I’ve had to make that call for my team, and I’ve worked with other teams that faced similar decisions. I’ll reference real learnings as we discuss wisely and successfully steering a team into new Kotlin waters. \r\n", - "startsAt": "2024-09-19T14:35:00", - "endsAt": "2024-09-19T15:15:00", + "id": "736303", + "title": "Text in Compose: Beyond the Basics", + "description": "In this talk, we'll explore the intricacies of text rendering in Jetpack Compose. We'll delve into text layout and various text APIs to create visually appealing and interactive text-based interfaces.", + "startsAt": "2024-10-31T11:50:00", + "endsAt": "2024-10-31T12:30:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "265b1a56-e32c-459d-8580-6d0d4ed5fc63", - "name": "Sumayyah Ahmed" + "id": "d59b3a5b-f721-4356-a3e4-a2f86cb6fc50", + "name": "Anastasia Soboleva" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254880, - "name": "Advanced" + "id": 264350, + "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254888, - "name": "Cross-Platform" + "id": 264358, + "name": "Jetpack Compose" }, { - "id": 254891, - "name": "Android" + "id": 264364, + "name": "Compose" + }, + { + "id": 264377, + "name": "Modern Android Development" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 49272, + "room": "Things", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -1138,68 +1229,64 @@ }, { "questionAnswers": [], - "id": "717465", - "title": "Root causing memory growth with LeakCanary 3", - "description": "At Square, we scaled our LeakCanary usage over the last nine years by running it on all UI tests on every pull request, uploading leaks detected in debug builds, and triaging leaks weekly. This works: we fixed thousands of leaks (in our apps, third-party libraries, and the Android Framework), and we're now finding fewer and fewer new leaks!\r\n\r\nUnfortunately, we sometimes see the heap size grow over time without LeakCanary finding any issue. For example, constantly appending string logs to a collection would not trigger LeakCanary but would still lead to ANRs and OOMEs when the app eventually runs out of memory.\r\n\r\nInspired by the BLeak paper and the work of the Android Studio team, I built a new toolkit in LeakCanary that performs repeated heap dump diffs and detects objects with a constantly increasing number of outgoing edges (for example, a list that keeps growing).\r\n\r\nCome learn how this works; together, we can fix all the leaks!", - "startsAt": "2024-09-19T14:35:00", - "endsAt": "2024-09-19T15:15:00", + "id": "733000", + "title": "Exploring Android Accessibility Malware", + "description": "Join us in exploring two techniques Android malware uses, focusing on the dangerous combination of credential stuffing attacks and Accessibility Service abuse. We'll demonstrate how cybercriminals can exploit these vulnerabilities to launch large-scale attacks on user accounts across multiple applications.\r\nOur talk will walk you through:\r\n1. The mechanics of credential stuffing and how it exploits common user behaviors.\r\n2. How malware can abuse Android's Accessibility Service to automate malicious actions.\r\n3. A step-by-step demonstration of a proof-of-concept that combines these techniques.\r\n4. Clever methods cybercriminals use to conceal their activities from users.\r\n5. The broader implications of these threats for mobile app security.\r\n 1 of 3\r\nWe'll dive into why these attacks are increasingly prevalent and how they can be executed with alarming ease. By understanding the attacker's perspective, we aim to highlight the critical need for robust security measures in mobile applications. However, implementing such security measures can be challenging for developers, often requiring significant time, expertise, and resources. This is where innovative solutions become crucial. Recognizing this gap in mobile app security, Appdome provides comprehensive protection against these threats through zero-code integration, allowing developers to secure their mobile apps effortlessly.", + "startsAt": "2024-10-31T11:50:00", + "endsAt": "2024-10-31T12:30:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "a733fc42-dcb9-4107-9675-70335f2889e9", - "name": "Pierre-Yves Ricau" + "id": "36110e7b-c926-48ec-be43-b1a10e0641a0", + "name": "Gil Hartman" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, - "name": "Intermediate" + "id": 264349, + "name": "Introductory and overview" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254886, - "name": "Tooling" + "id": 264365, + "name": "Accessibility" }, { - "id": 254887, - "name": "CI/CD" + "id": 264372, + "name": "Security" }, { - "id": 254891, + "id": 264384, "name": "Android" - }, - { - "id": 254897, - "name": "Libraries" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49958, - "room": "Fountain Room", + "roomId": 53981, + "room": "Stadia", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -1208,84 +1295,68 @@ }, { "questionAnswers": [], - "id": "727677", - "title": "How to use Qualcomm AI Hub for On-Device AI models", - "description": "In this workshop we address the common challenges faced by developers migrating AI workloads from the cloud to edge devices. Qualcomm aims to democratize AI at the edge, easing the transition to the edge by supporting familiar frameworks and data types. ​\r\n\r\nIn this session, developers can follow along, gaining knowledge and tools to efficiently deploy optimized models on real devices using Qualcomm AI Hub. ​\r\n\r\nWe'll walk through how to get started using Qualcomm AI Hub, iterate on your model and meet performance requirements to deploy on device! We'll show examples on how to optimize models and bundle the downloadable target asset into your application.", - "startsAt": "2024-09-19T14:35:00", - "endsAt": "2024-09-19T15:15:00", + "id": "702107", + "title": "[REDACTED]: How to keep your app's secrets, secret", + "description": "Every app has secrets! These could be in many forms (no judgment here!) but in this talk, we'll focus on the most common use case of storing API keys or data in-app that we'd rather not make readily available to malicious actors.\r\n\r\nIn this talk, we'll look at answering one of the most asked questions in mobile security, \"How do I secure my API keys\" and ensure you have the knowledge and tools you need to do so.\r\n\r\nYou'll leave this talk with:\r\n- Actionable security best practices for securing your app\r\n- An idea of how to store API keys, at scale\r\n- Multiple examples of how to securely access your API keys\r\n- Some fun real-world examples of when things go wrong\r\n", + "startsAt": "2024-10-31T11:50:00", + "endsAt": "2024-10-31T12:30:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "b32c51bc-deaf-43a9-9715-099e5e18f692", - "name": "Meghan Stronach" - }, - { - "id": "a33ccc9b-d114-4ac4-9c4d-cc12c45478a8", - "name": "Shreya Jain" + "id": "f7ad854d-1167-4fab-be0a-2721cf6ae5f2", + "name": "Ed Holloway-George" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254883, - "name": "Workshop" + "id": 264354, + "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254886, - "name": "Tooling" - }, - { - "id": 254887, - "name": "CI/CD" + "id": 264369, + "name": "Other" }, { - "id": 254889, - "name": "AI/ML" + "id": 264372, + "name": "Security" }, { - "id": 254891, + "id": 264384, "name": "Android" }, { - "id": 254894, - "name": "Testing" - }, - { - "id": 254901, - "name": "Android Studio" - }, - { - "id": 254905, - "name": "TensorFlow" + "id": 264378, + "name": "Gradle" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 52283, - "room": "Sapphire Room", + "roomId": 53982, + "room": "Nest", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -1294,72 +1365,275 @@ }, { "questionAnswers": [], - "id": "721559", - "title": "Plug and Play: Power Up DevX with Android Studio Plugins", - "description": "For most companies, developer tooling investments often lag behind direct user-facing codebase improvements. However, as a company grows, more engineers begin to contribute and the codebase gets more complex and mature, tooling becomes an essential part of maintaining and improving the developer experience at scale. Early tooling efforts often evolve into disparate collections of multilingual scripts, but what happens when we treat tooling and infra as a proper software project just like we would production code? Let’s explore how Reddit has made tooling a first-class citizen within our codebase by leveraging custom IntelliJ IDE Plugins to improve the developer experience and how your team can apply these concepts and learnings to your own projects.\r\n\r\nKey Takeaways: \r\n1. What is an IntelliJ Plugin and how can it help you build tooling to level-up your developer experience?\r\n2. What kinds of problems can IntelliJ plug-ins help solve, with Reddit-specific examples:\r\n a. Use Case: Using plugins to improve developer onboarding\r\n b. Use Case: Using plugins to keep developers informed and up-to-date\r\n c. Use Case: Using plugins to accelerate large migrations\r\n d. Use Case: Using plugins to reinforce opinionated design patterns\r\n3. What are some other opportunities for plug-ins and how to get started writing your own or leveraging those from others\r\n", - "startsAt": "2024-09-19T15:30:00", - "endsAt": "2024-09-19T16:10:00", + "id": "757537", + "title": "Roundtable: Mastering Release Management", + "description": "Teams of all sizes require release management processes that should ensure smooth delivery of app updates, while balancing the need for innovation with stability and user experience. Coordinating teams, managing release cycles, and mitigating risks while adapting to the Android ecosystem can be challenging. Join this open roundtable discussion to examine:\r\n•\tWhat are the biggest challenges in managing releases within the Android ecosystem, especially with the variety of devices and OS versions?\r\n•\tHow do you allow frequent releases while minimizing the toil of release management?\r\n•\tHow do you ensure a smooth release process while balancing the need for continuous innovation and feature updates?\r\n•\tWhat are some best practices for testing and quality assurance before rolling out an Android release to a large user base?\r\n•\tHow do you manage the potential impact of an unsuccessful or buggy release, and what steps are taken to mitigate such risks?\r\n•\tWhat role do user feedback and crash analytics play in refining subsequent Android releases?\r\n", + "startsAt": "2024-10-31T11:50:00", + "endsAt": "2024-10-31T12:30:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "de68551c-a180-464b-95d8-1e41d02509a8", - "name": "Drew Heavner" + "id": "3d4b5098-0829-4b34-b0bf-122ab126fdae", + "name": "Maria Neumayer" + }, + { + "id": "3b1289fc-f706-4f8f-9061-c77e3e250223", + "name": "Adam Ahmed" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 303052, + "name": "Roundtable Discussion" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54703, + "room": "Chromecast", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "764323", + "title": "Ask Android! - Compose, KMP, Gemini in AS (copy)", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T11:50:00", + "endsAt": "2024-10-31T12:30:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "e397fee8-078f-4694-8a1f-35b1d57f1fce", + "name": "Sebastiano Poggi" + }, + { + "id": "eb4483f1-306b-447d-9888-648ec0fc0018", + "name": "Chris Sinco" + }, + { + "id": "7280b9e7-ddf7-4cfb-b85b-1e998d851f66", + "name": "Marcello Galhardo" + }, + { + "id": "e4292032-5462-494b-abfd-3898301476e2", + "name": "Rebecca Franks" + }, + { + "id": "f4580454-6603-44a8-9fcd-e98fe6cc8981", + "name": "Matvei Malkov" + }, + { + "id": "b3baa5b6-3c85-4a36-97c5-9a252f887ae4", + "name": "Jelle Fresen" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "764331", + "title": "Ask Android! - Compose, GenAI, WearOS", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T12:30:00", + "endsAt": "2024-10-31T13:40:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "e4292032-5462-494b-abfd-3898301476e2", + "name": "Rebecca Franks" + }, + { + "id": "f4580454-6603-44a8-9fcd-e98fe6cc8981", + "name": "Matvei Malkov" + }, + { + "id": "b3baa5b6-3c85-4a36-97c5-9a252f887ae4", + "name": "Jelle Fresen" + }, + { + "id": "837dd36a-5782-49cc-8da5-3f7fc7e4da8a", + "name": "Kateryna Semenova" + }, + { + "id": "31e8a089-eb2f-437c-ac09-bb55af17f934", + "name": "Donovan McMurray" + }, + { + "id": "2fb0b020-9fa9-49f1-b4a4-54f71dca57c5", + "name": "Kseniia Shumelchyk" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "728763", + "title": "Tap it! Shake it! Fling it! Sheep it! - The Gesture Animations Dance!", + "description": "Let's have fun with animations, gestures and sensors!\r\n\r\nUsing Compose Multiplatform, we'll go over how to create animations using gestures and sensor events for Android & iOS. We'll cover some basics like how to get the device motion and position information, how to track gestures in the screen, and how you can combine them with animations to have fun! \r\n\r\nAfter this talk, you'll have a better understanding on how to use the sensor frameworks, how to make your own gesture effects, and how to create interesting animations in an easy way.\r\n\r\nKeep it fun, keep it animated!", + "startsAt": "2024-10-31T13:40:00", + "endsAt": "2024-10-31T14:20:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "94ba4fa4-aed7-482e-8096-f61090d5bb4d", + "name": "Nicole Terc" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254886, - "name": "Tooling" + "id": 264358, + "name": "Jetpack Compose" }, { - "id": 254891, - "name": "Android" + "id": 264359, + "name": "Kotlin" }, { - "id": 254892, - "name": "Kotlin" + "id": 264364, + "name": "Compose" }, { - "id": 254901, - "name": "Android Studio" + "id": 264384, + "name": "Android" }, { - "id": 254902, + "id": 264390, "name": "UI/UX" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 49270, + "room": "Hangouts", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -1368,64 +1642,122 @@ }, { "questionAnswers": [], - "id": "689610", - "title": "Android, Compose, Multiplatform & Server - Inject them all with Koin", - "description": "Whether you're crafting a modern Android app with Jetpack Compose, extending your codebase across iOS and desktop environments through Kotlin Multiplatform, or even orchestrating layers of components on server side with Ktor, Koin emerges as the central integration platform.\r\n\r\nJoin me for this session through the wide Kotlin landscape and see how Koin, the well-known Kotlin dependency injection open-source framework, seamlessly integrates across the entire ecosystem.\r\n\r\nI propose to move from the basics of building on each platform, to step on injection patterns on your shared Kotlin code (Android, iOS, Compose …), as well as diving into server-side development.\r\n\r\nWe'll discuss upcoming features of Koin 4. Get ready for a great journey into the present and future of Kotlin development with Koin!", - "startsAt": "2024-09-19T15:30:00", - "endsAt": "2024-09-19T16:10:00", + "id": "716104", + "title": "Swift Cheatsheet for Android/Kotlin Developers", + "description": "Knowing common Swift patterns and how they translate to Kotlin can help us understand better what the code does. Whether to see how some feature is implemented on the neighbor platform, perform code reviews, review or write tech specifications/proposals, or work with Kotlin Multiplatform.\r\n\r\nWe will go over some of the basics of the Swift language and how it compares to Kotlin. Additionally, we will cover common patterns that you might find in a typical iOS project like optional bindings, dictionaries, extensions, structures, and protocols.\r\n\r\nLeave this talk confident you can read, understand, and review Swift/iOS code. It will also help you start with Kotlin Multiplatform where knowledge of Swift and SwiftUI is important.", + "startsAt": "2024-10-31T13:40:00", + "endsAt": "2024-10-31T14:20:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "66fbb80a-cd18-4ba1-931d-d070d060ab95", - "name": "Arnaud Giuliani" + "id": "c24d26ff-8a59-4954-b768-fcd09d8bb0a3", + "name": "Domen Lanišnik" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254878, + "id": 264349, "name": "Introductory and overview" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254888, - "name": "Cross-Platform" + "id": 264359, + "name": "Kotlin" }, { - "id": 254891, - "name": "Android" - }, + "id": 264381, + "name": "Cross-Platform" + } + ], + "sort": 4 + } + ], + "roomId": 49271, + "room": "Glass", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "748950", + "title": "How to Optimize, Validate and Deploy ML Models On Device", + "description": "In this workshop we address the common challenges faced by developers migrating AI workloads from the cloud to edge devices. Qualcomm aims to democratize AI at the edge, easing the transition to the edge by supporting familiar frameworks and data types. ​\r\n\r\nWe'll talk through why ML is best done on device and how to easily select a model for your use case, train (or fine-tune), and then compile for the device of your choice.\r\n\r\nWe'll walk through how to get started, iterate on your model and meet performance requirements to deploy on device! We'll show examples on how to optimize models and bundle the model into your application.", + "startsAt": "2024-10-31T13:40:00", + "endsAt": "2024-10-31T14:20:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "0730a976-72e0-42c9-a3b3-9317c06d7bbe", + "name": "Bhushan Sonawane" + }, + { + "id": "b32c51bc-deaf-43a9-9715-099e5e18f692", + "name": "Meghan Stronach" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ { - "id": 254892, - "name": "Kotlin" + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264355, + "name": "Workshop" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264382, + "name": "AI/ML" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 49272, + "room": "Things", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -1434,68 +1766,68 @@ }, { "questionAnswers": [], - "id": "700494", - "title": "Ten things you heard about testing that might be wrong", - "description": "Testing became an essential part of Android development. Many conference talks have been given and even more best practices have been written. \r\n\r\nBut what if, as time evolved, some of the things we thought were true, changed?\r\n\r\nLet’s start questioning some of these in this talk:\r\n- Are flaky tests fixable?\r\n- Are mocks even harmful?\r\n- Is DI about testing?\r\n- Did we understand testing in isolation properly? \r\n- Is the test pyramid still valid?\r\n- Is Robolectric good or bad on Android?\r\n- And in times of AI, should we generate tests?\r\n\r\nCome and join my session to learn more!\r\n", - "startsAt": "2024-09-19T15:30:00", - "endsAt": "2024-09-19T16:10:00", + "id": "725157", + "title": "Click-free releases & the making of a CLI app", + "description": "At TravelPerk, we've developed a tool that fully automates our release process, eliminating the need for human intervention. This was achieved using a lightweight Kotlin CLI app. In this talk, we'll provide an in-depth look at the design and implementation of this tool, and guide you through building your own Kotlin CLI app. Join me to explore the power of Kotlin and Gradle in creating robust, automated solutions.", + "startsAt": "2024-10-31T13:40:00", + "endsAt": "2024-10-31T14:20:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "4d3a31b1-61e5-4a26-9ca3-c9f30e3eaa08", - "name": "Danny Preussler" + "id": "3b1289fc-f706-4f8f-9061-c77e3e250223", + "name": "Adam Ahmed" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254880, - "name": "Advanced" + "id": 264350, + "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254886, - "name": "Tooling" + "id": 264359, + "name": "Kotlin" }, { - "id": 254887, - "name": "CI/CD" + "id": 264380, + "name": "Tooling" }, { - "id": 254894, - "name": "Testing" + "id": 264394, + "name": "CI/CD" }, { - "id": 254903, - "name": "Firebase" + "id": 264378, + "name": "Gradle" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49958, - "room": "Fountain Room", + "roomId": 53981, + "room": "Stadia", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -1504,60 +1836,68 @@ }, { "questionAnswers": [], - "id": "674849", - "title": "Personalizing Accessibility", - "description": "What should you do when users' accessibility needs conflict? For example, some users prefer more color contrast, while others require less contrast. To give a few examples, some might need labels to accompany icons, and for some, having too much text can make the app experience worse. Some love graphs and others have difficulty understanding what they represent and would need the same data in written format.\r\n\r\nOne way to tackle this problem is to allow users to personalize their app experience. In this talk, I will discuss different ways of personalization, including the opportunities and drawbacks. I will also give some actionable examples of how to let your users personalize their experience. After listening to this talk, you'll leave with actionable knowledge about providing a more accessible experience for your users via personalization.", - "startsAt": "2024-09-19T15:30:00", - "endsAt": "2024-09-19T16:10:00", + "id": "756374", + "title": "Tools that could help you to target newer SDK level and improve compatibility", + "description": "It could be a painful journey when developers update the app's target SDK level. There could be new APIs, deprecation of current APIs and gated or non-gated change. \r\n\r\nThis session will share major changes in Android 15, the common mistakes when targeting the latest version of Android, why developers should target the latest version as soon as possible, and what tools are available to help developers.", + "startsAt": "2024-10-31T13:40:00", + "endsAt": "2024-10-31T14:20:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "6a7b0ee2-2d50-42b7-8225-1df145d255ea", - "name": "Eeva-Jonna Panula" + "id": "9079b8b4-be1f-4213-a446-6b2bdcad0c04", + "name": "Fung Lam" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254891, + "id": 264363, + "name": "Testing" + }, + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264384, "name": "Android" }, { - "id": 254902, - "name": "UI/UX" + "id": 264379, + "name": "Android Studio" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 52283, - "room": "Sapphire Room", + "roomId": 53982, + "room": "Nest", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -1566,51 +1906,55 @@ }, { "questionAnswers": [], - "id": "724064", - "title": "Writing your own Gradle Plugin: A Deep Dive", - "description": "Want to improve some aspect of your Gradle builds? Don't know how? \r\n\r\nIn this session, we'll talk about:\r\n* Configurations and why understanding them is important\r\n* The lifecycle of a Gradle build and how to architect your plugin around it\r\n* What a few well-known plugins do well and what we can learn from them\r\n\r\nWe'll also walk through an actual plugin I've written to solve a real problem.", - "startsAt": "2024-09-19T16:25:00", - "endsAt": "2024-09-19T17:05:00", + "id": "757518", + "title": "Roundtable: EM or IC? What’s Right for Me?", + "description": "Choosing between a career path as an engineering manager or an individual contributor is a pivotal decision for engineers as they advance in their careers. This choice often hinges on personal interests, leadership aspirations, and the desire for hands-on technical work. Let’s get together and discuss:\r\n•\tWhat are the key factors that developers should consider when deciding between becoming an engineering manager or staying on the individual contributor track?\r\n•\tHow can someone assess whether they have the necessary skills and mindset to transition into a management role?\r\n•\tWhat are the most significant challenges and rewards that come with each path—engineering management versus individual contribution?\r\n•\tHow can companies support employees who are undecided or want to explore both career paths simultaneously?\r\n", + "startsAt": "2024-10-31T13:40:00", + "endsAt": "2024-10-31T14:20:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "903c7a65-63f0-4244-8f8c-7ab8f7acae75", - "name": "John Rodriguez" + "id": "af079576-c7db-497a-990d-919fc2472e45", + "name": "Anastasia López" + }, + { + "id": "f40ca183-824d-43d9-9e63-ee0edb5aa307", + "name": "Ataul Munim" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, - "name": "Intermediate" + "id": 264349, + "name": "Introductory and overview" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 303052, + "name": "Roundtable Discussion" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [], - "sort": 3 + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 54703, + "room": "Chromecast", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -1619,60 +1963,2849 @@ }, { "questionAnswers": [], - "id": "693921", - "title": "Navigation in a Multiplatform World: Choosing the Right Framework for your App", - "description": "Navigation in mobile, desktop, and web applications is such a fundamental part of how we structure our architecture. In order to both obtain functional clarity, and abstraction from platform level implementation.\r\n\r\nFor a long time, there have been options available specific to each platform, and even options part of the platform framework itself. Though it can be difficult to find the right option for platform-agnostic code, ensuring consistency. Some go one step further, providing an opinionated guide on how to architecture your application.\r\n\r\nIn this talk, I'll evaluate the options available, how they differ, and to what type of applications they are best suited. Including how to get started with them, and the best practice guidelines on how to get the most out of them, for your application.", - "startsAt": "2024-09-19T16:25:00", - "endsAt": "2024-09-19T17:05:00", + "id": "764343", + "title": "Ask Android! - Compose, GenAI, WearOS", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T13:40:00", + "endsAt": "2024-10-31T14:20:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "e34e8c09-ac65-4927-852e-ff2fc462afac", + "name": "Anton Beloglazov" + }, + { + "id": "7a8a22c6-5b01-4f0a-bc04-12d4ada5de21", + "name": "Jossi Wolf" + }, + { + "id": "b99dc2e2-df83-4045-a5cb-c4d7dea5db1e", + "name": "Halil Ozercan" + }, + { + "id": "837dd36a-5782-49cc-8da5-3f7fc7e4da8a", + "name": "Kateryna Semenova" + }, + { + "id": "2fb0b020-9fa9-49f1-b4a4-54f71dca57c5", + "name": "Kseniia Shumelchyk" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "764345", + "title": "Ask Android! - Compose, GenAI, Platform", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T14:20:00", + "endsAt": "2024-10-31T14:35:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "7a8a22c6-5b01-4f0a-bc04-12d4ada5de21", + "name": "Jossi Wolf" + }, + { + "id": "b99dc2e2-df83-4045-a5cb-c4d7dea5db1e", + "name": "Halil Ozercan" + }, + { + "id": "e34e8c09-ac65-4927-852e-ff2fc462afac", + "name": "Anton Beloglazov" + }, + { + "id": "837dd36a-5782-49cc-8da5-3f7fc7e4da8a", + "name": "Kateryna Semenova" + }, + { + "id": "9079b8b4-be1f-4213-a446-6b2bdcad0c04", + "name": "Fung Lam" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "734739", + "title": "Video Editing on Android with Media3", + "description": "Learn how to use Media3 Editing libraries to edit, trim, concatenate and apply effects to video frames on Android. \r\nImplementing video editing has always been a challenge for Android developers. Media3 is a jetpack library that is meant to make video editing easy, performant and reliable. \r\nIn this session you will learn about Transformer APIs, how to apply effects and concatenate multiple media files. ", + "startsAt": "2024-10-31T14:35:00", + "endsAt": "2024-10-31T14:55:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "1c163a41-865b-4915-b032-ef4942e2f47c", + "name": "Kristina Simakova" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264353, + "name": "Lightning talk" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264374, + "name": "API" + }, + { + "id": 264384, + "name": "Android" + }, + { + "id": 264388, + "name": "Libraries" + } + ], + "sort": 4 + } + ], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "732898", + "title": "Your app could use a secondary screen!", + "description": "Learn how an Android application could be used in a desktop-style environment while leveraging a secondary screen. We'll go through some key technical aspects to consider while developing an enterprise-oriented application and how Zebra is helping the developers go beyond what Android already offers.\r\n\r\nKey takeaways:\r\n- How an Activity is getting Multi Window support\r\n- Lifecycle impacts while using the application on 2 screens\r\n- Working with DisplayManager APIs to launch your activity on a secondary screen", + "startsAt": "2024-10-31T14:35:00", + "endsAt": "2024-10-31T14:55:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "de4da391-af75-405b-8816-186c5d4e8fde", + "name": "Daniel Neamtu" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264353, + "name": "Lightning talk" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264384, + "name": "Android" + } + ], + "sort": 4 + } + ], + "roomId": 49271, + "room": "Glass", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "768482", + "title": "How to Optimize, Validate and Deploy ML Models On Device (Part II)", + "description": "We'll walk through the steps to bring your ML model on device. In this hands on section of the workshop we will demonstrate the end to end workflow for a sample use case, using Qualcomm AI Hub to optimize a model and deploy it on device. \r\n\r\nWe'll then help you get set up and walk through various examples on how to use Qualcomm AI Hub. The Qualcomm AI Hub team will be there to teach you the ins and outs, enabling you to use the platform and bring your ML use case on device quickly and easily.", + "startsAt": "2024-10-31T14:35:00", + "endsAt": "2024-10-31T14:55:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "0730a976-72e0-42c9-a3b3-9317c06d7bbe", + "name": "Bhushan Sonawane" + }, + { + "id": "b32c51bc-deaf-43a9-9715-099e5e18f692", + "name": "Meghan Stronach" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264355, + "name": "Workshop" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264382, + "name": "AI/ML" + } + ], + "sort": 4 + } + ], + "roomId": 49272, + "room": "Things", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "734309", + "title": "Crafting Narratives: Shaping TalkBack with Compose Semantics", + "description": "\r\nThe focus of my talk will be on making modern, complex designs more intuitive for screen reader users using an empathetic approach . \u2028We will see how to create thoughtful and user-friendly narratives for accessibility by using Jetpack Compose semantics and optimizing the TalkBack experience.\r\n\r\nKey Takeaways:\r\n1. Creating Effective Narratives: Tips for simplifying complex UI elements.\r\n2. Testing Accessibility: Methods for validating and improving semantic changes.\r\n3. Designing for Complexity: Making complex UIs intuitive and accessible.\r\n4. Using Semantics Wisely: Enhancing accessibility with thoughtful design.\r\n", + "startsAt": "2024-10-31T14:35:00", + "endsAt": "2024-10-31T14:55:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "bcf3c75a-e105-41de-8891-53f6b673e58a", + "name": "Sachin Sapkale" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264353, + "name": "Lightning talk" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264358, + "name": "Jetpack Compose" + }, + { + "id": 264363, + "name": "Testing" + }, + { + "id": 264365, + "name": "Accessibility" + } + ], + "sort": 4 + } + ], + "roomId": 53981, + "room": "Stadia", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "736362", + "title": "Streamlining Android app development and release processes", + "description": "Building, testing and releasing Apps for Android is unique with it's own challenges.\r\n\r\nDuring this session we’ll walk through three ways to make building, testing and releasing apps faster and easier for your whole team. Specifically, we’ll look at these three key points:\r\n\r\nAutomating testing and debugging by using CI/CD best practices and out of the box integrations.\r\n\r\nDelivering faster green builds with Bitrise Build Cache. We’ll look at some benchmarks and some real world examples of optimizing the execution.\r\n\r\nFrom beta distribution to production rollout, what steps are there and how these can be optimised.\r\n\r\nBy the end of this talk you'll have an idea on how to take the next steps on your CI/CD journey.", + "startsAt": "2024-10-31T14:35:00", + "endsAt": "2024-10-31T14:55:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "3be14346-8241-4bd9-9a8e-6771276bc270", + "name": "Tamás Bazsonyi" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264353, + "name": "Lightning talk" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264380, + "name": "Tooling" + }, + { + "id": 264394, + "name": "CI/CD" + }, + { + "id": 264384, + "name": "Android" + }, + { + "id": 264378, + "name": "Gradle" + } + ], + "sort": 4 + } + ], + "roomId": 53982, + "room": "Nest", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "764347", + "title": "Ask Android! - GenAI, Platform, Adaptive apps on all form factors", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T14:35:00", + "endsAt": "2024-10-31T14:55:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "81ee4554-4839-4192-9a74-ecb32dff2819", + "name": "Alex Vanyo" + }, + { + "id": "ecd35d14-91dc-4ce6-a6db-fd7a26424a36", + "name": "Chris Assigbe" + }, + { + "id": "837dd36a-5782-49cc-8da5-3f7fc7e4da8a", + "name": "Kateryna Semenova" + }, + { + "id": "9079b8b4-be1f-4213-a446-6b2bdcad0c04", + "name": "Fung Lam" + }, + { + "id": "e3b228b6-3b08-4edb-89dd-1a5625d9e4c2", + "name": "Francesco Romano" + }, + { + "id": "c83dc04e-7a0a-4cbc-9d73-10d08f18a68b", + "name": "Miguel Montemayor" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "764350", + "title": "Ask Android! - Gen AI, Platform, Adaptive apps on all form factors", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T14:55:00", + "endsAt": "2024-10-31T15:10:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "327f56b4-c631-4489-9590-37bdfc856e3a", + "name": "Miguel Montemayor" + }, + { + "id": "ecd35d14-91dc-4ce6-a6db-fd7a26424a36", + "name": "Chris Assigbe" + }, + { + "id": "837dd36a-5782-49cc-8da5-3f7fc7e4da8a", + "name": "Kateryna Semenova" + }, + { + "id": "9079b8b4-be1f-4213-a446-6b2bdcad0c04", + "name": "Fung Lam" + }, + { + "id": "ef1c33eb-89e9-49f6-9abc-da8140988097", + "name": "Alex Vanyo" + }, + { + "id": "e3b228b6-3b08-4edb-89dd-1a5625d9e4c2", + "name": "Francesco Romano" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "710572", + "title": "Rethinking Home - How testing techniques and code design reshaped the new Spotify Home feature", + "description": "Let's dive into the dynamic world of Spotify Home development, where scalability and excellency are key. In this talk we will learn about the relationship between good code design and testability. How these principles synergise to influence the new shape of core Home features. Moreover we will go through the value of different test types and learn insights on how to make code more testable as well as actionable strategies to enhance code design in general ", + "startsAt": "2024-10-31T15:10:00", + "endsAt": "2024-10-31T15:50:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "6ee5ee5a-1bdd-4c54-8178-fad51f86a78a", + "name": "Daniel Horowitz" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264363, + "name": "Testing" + }, + { + "id": 264368, + "name": "Techniques & Guides" + } + ], + "sort": 4 + } + ], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "751161", + "title": "Designing scalable Compose APIs", + "description": "As more and more apps and teams migrate to Compose, it's important to establish clear guidelines for writing high-quality Compose code. This talk will cover best practices and guidelines for developing idiomatic Compose APIs, with topics such as how to think about and plan for your components, how to leverage Kotlin and naming conventions, and define a solid structure of your component, and finally how to verify and maintain these APIs. We'll discuss the rationale behind these guidelines and how they can help developers write code that is more scalable, performant, and consistent.", + "startsAt": "2024-10-31T15:10:00", + "endsAt": "2024-10-31T15:50:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "b5b73a2f-d57d-4a42-b787-a93f4ca9ba79", + "name": "Simona Milanovic" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264358, + "name": "Jetpack Compose" + }, + { + "id": 264359, + "name": "Kotlin" + }, + { + "id": 264364, + "name": "Compose" + }, + { + "id": 264384, + "name": "Android" + }, + { + "id": 264390, + "name": "UI/UX" + } + ], + "sort": 4 + } + ], + "roomId": 49271, + "room": "Glass", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "745796", + "title": "Securing Android: Tackling Advanced Threats and Enhancing App Security", + "description": "What threats are Android apps dealing with these days? In this talk, we will look at the latest security challenges and the best ways to keep your apps safe from new threats.\r\nWhen companies rush to release apps, they often skip important security steps, which can lead to higher costs and more risks. It's important to build security into your app from the beginning. We will discuss common risks for Android apps, how to handle them, and the challenges developers and security experts face when trying to protect code, keys, and data.\r\n\r\nKey Takeaways:\r\n\r\n* Get up to speed on the latest security threats specifically targeting Android apps.\r\n* Explore the latest advanced rooting technique such as Magisk and app instrumentation and the best way to protect your app.\r\n* Explore the differences between shrinking/minification and advanced techniques for obfuscation and anti-tampering, including cryptographic key protection.\r\n* Discover how to embed security throughout the development process to minimise risks and build resilient apps.\r\n\r\n\r\n", + "startsAt": "2024-10-31T15:10:00", + "endsAt": "2024-10-31T15:50:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "24eb82e3-3ea7-4b45-9ffb-d63cac580e88", + "name": "Mohamed Kerroumi" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264372, + "name": "Security" + }, + { + "id": 264384, + "name": "Android" + } + ], + "sort": 4 + } + ], + "roomId": 49272, + "room": "Things", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "757989", + "title": "Rethinking Apps with Local-First Architecture", + "description": "Modern apps are expected to function flawlessly even in low-connectivity edge environments, but traditional centralized networking approaches often fall short. In this session, we’ll explore how we got here and where we’re headed, diving into the unique challenges of local-first architecture. We’ll look at some of the tough problems in this space and examine solutions that open new possibilities. By rethinking these aspects in your app, you can push the boundaries of what your app can do and create experiences that will amaze your users.", + "startsAt": "2024-10-31T15:10:00", + "endsAt": "2024-10-31T15:50:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "da380fb8-c8ba-47e9-b224-26647296cff5", + "name": "Richard Das" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264369, + "name": "Other" + }, + { + "id": 264377, + "name": "Modern Android Development" + }, + { + "id": 264381, + "name": "Cross-Platform" + }, + { + "id": 264388, + "name": "Libraries" + }, + { + "id": 264390, + "name": "UI/UX" + } + ], + "sort": 4 + } + ], + "roomId": 53981, + "room": "Stadia", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "709487", + "title": "Dynamic Flow, the Wise approach to server driven UI", + "description": "In this presentation I will talk about how we combined the expertise of Android, iOS and Web engineers to create a server driven UI solution using Kotlin Multi Platform (KMP). This approach has allowed Wise to efficiently scale our product and business, resulting in more than 500 unique native screens being generated by the backend. \r\n\r\nLearn how this project has empowered backend engineers, streamlined UI development process and enhanced cross-platform collaboration.", + "startsAt": "2024-10-31T15:10:00", + "endsAt": "2024-10-31T15:50:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "f5e37102-a8be-4e34-be47-b98329cd2a23", + "name": "Phellipe Silva" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264361, + "name": "KMP" + }, + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264381, + "name": "Cross-Platform" + } + ], + "sort": 4 + } + ], + "roomId": 53982, + "room": "Nest", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "768515", + "title": "Kotlin by JetBrains, present and future", + "description": "Have a chat with Developer Advocates from JetBrains about anything Kotlin related on your mind. Language evolution, tooling, development practices, Kotlin Multiplatform and Compose Multiplatform... We're here for all of it!", + "startsAt": "2024-10-31T15:10:00", + "endsAt": "2024-10-31T15:50:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "1916ae1c-96d7-480f-9eed-bf5dce444441", + "name": "Márton Braun" + }, + { + "id": "a82c6942-6e2b-4d80-9883-0b84b932d6ef", + "name": "Sebastian Aigner" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 303052, + "name": "Roundtable Discussion" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54703, + "room": "Chromecast", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "764353", + "title": "Ask Android! -GenAI, Platform, Adaptive apps on all form factors", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T15:10:00", + "endsAt": "2024-10-31T15:50:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "e2ad2515-5292-4deb-8ac6-6c7ea5be1543", + "name": "Rob Orgiu" + }, + { + "id": "f55e8e03-a341-4c8a-b4fc-a7e97f82db07", + "name": "Xiaodao Wu" + }, + { + "id": "837dd36a-5782-49cc-8da5-3f7fc7e4da8a", + "name": "Kateryna Semenova" + }, + { + "id": "9079b8b4-be1f-4213-a446-6b2bdcad0c04", + "name": "Fung Lam" + }, + { + "id": "56b04326-604d-4140-b159-f93574c86ccd", + "name": "Ran Nachmany" + }, + { + "id": "d7f1c9d9-d537-4240-864e-ba626457f534", + "name": "Satish Shende" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "764351", + "title": "Ask Android! - WearOS, Media, Adaptive apps on all form factors", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T15:50:00", + "endsAt": "2024-10-31T16:05:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "c70d10a5-999c-4858-a39c-7326570cee91", + "name": "Ran Nachmany" + }, + { + "id": "1c163a41-865b-4915-b032-ef4942e2f47c", + "name": "Kristina Simakova" + }, + { + "id": "e2ad2515-5292-4deb-8ac6-6c7ea5be1543", + "name": "Rob Orgiu" + }, + { + "id": "2fb0b020-9fa9-49f1-b4a4-54f71dca57c5", + "name": "Kseniia Shumelchyk" + }, + { + "id": "f55e8e03-a341-4c8a-b4fc-a7e97f82db07", + "name": "Xiaodao Wu" + }, + { + "id": "d713390d-9628-412f-9778-9c45aeb6b13e", + "name": "Satish Shende" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "714221", + "title": "Jetpack Compose: Drawing without pain and recomposition", + "description": "This is a talk on recomposition in Jetpack Compose and the myths of too many calls it is followed by. I'll briefly explain the reasons behind recompositions and why they are not as problematic as they may seem. I have prepared numerous examples that illustrate how to minimize its occurrence.\r\n\r\nI'll share real-life situations we encountered during the redesign of our main screen. I'll delve step-by-step into how I optimized a particle animation without additional memory allocation and how we successfully reduced the number of recompositions on the screen. My practical guide on parameter tuning will be a great takeaway.", + "startsAt": "2024-10-31T16:05:00", + "endsAt": "2024-10-31T16:45:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "34b0d49b-00dd-4dc1-ac1c-6de040e8a5b9", + "name": "Vitalii Markus" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264358, + "name": "Jetpack Compose" + }, + { + "id": 264359, + "name": "Kotlin" + }, + { + "id": 264364, + "name": "Compose" + }, + { + "id": 264384, + "name": "Android" + } + ], + "sort": 4 + } + ], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "708032", + "title": "DIY Server-Driven UI: Building Auto Trader's SDUI platform", + "description": "Join us as we take you through Auto Trader’s 4-year journey in crafting our hybrid Server-Driven UI framework (Composable) and the architecture that powers our mobile apps. We’ll delve into why we decided to build instead of buy, our choice of Kotlin and the designs that fuelled our success. From pitfalls to breakthroughs, this talk will be full of useful insights for anyone considering building SDUI themselves.\r\n\r\nYou should leave this talk with the following:\r\n- Insights into our approach to SDUI\r\n- Building with a small team without stopping feature work.\r\n- Kotlin and Android tech insights of the system.\r\n- How we're leveraging KMP to improve client logic.\r\n- 4 years of learnings, did we make the right choice?\r\n- Tips and tricks for anyone considering the same.", + "startsAt": "2024-10-31T16:05:00", + "endsAt": "2024-10-31T16:45:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "18ce6325-d3f4-4478-99d0-5683c4b924c2", + "name": "Jimmy Ray" + }, + { + "id": "0233c2ee-3bcd-4dee-9de5-c765b8c27cc0", + "name": "Harriet Taylor" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264359, + "name": "Kotlin" + }, + { + "id": 264361, + "name": "KMP" + }, + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264377, + "name": "Modern Android Development" + }, + { + "id": 264381, + "name": "Cross-Platform" + } + ], + "sort": 4 + } + ], + "roomId": 49271, + "room": "Glass", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "736123", + "title": "How we build Spotify for Android Automotive", + "description": "As the automotive industry embraces newer technologies and more mainstream software tech stacks, the in-car entertainment experience is rapidly evolving into a living room on wheels. In this session, we will take you on the journey of bringing Spotify to Android Automotive OS.\r\n\r\nIn this session, we will cover:\r\n\r\n* What is Android Automotive OS? Discover which car manufacturers and models are currently supported, and the different flavours of Android Automotive around!\r\n* Learn about the specific development challenges we faced while building Spotify for Android Automotive, including using Media Center templates to build features, adapting to diverse hardware, and challenging emulator setups.\r\n* Get insights into the unique aspects of releasing an app in the automotive ecosystem, from testing to ensure compliance with automotive standards to coordinating with car manufacturers for software updates.\r\n\r\nPlease join us to discover how we’re making the Spotify experience accessible, enjoyable and safe for drivers and passengers, and the innovative solutions we’ve developed to overcome the challenges of this cutting-edge platform. \r\n", + "startsAt": "2024-10-31T16:05:00", + "endsAt": "2024-10-31T16:45:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "9c8384de-140e-47e4-aeb1-c85faf090fc8", + "name": "Danielle Vass" + }, + { + "id": "0aef86d4-a69b-4a82-bd8b-5ee05a3e421d", + "name": "Walid Tazout" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264384, + "name": "Android" + } + ], + "sort": 4 + } + ], + "roomId": 49272, + "room": "Things", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "732956", + "title": "Rewind and Resolve: A deep dive into building Session Replay for Android", + "description": "Understanding and debugging production issues can feel like solving a puzzle with missing pieces. We will dive deep into the journey of building a session replay feature for the Sentry Android SDK that helps developers capture those elusive bugs, respects user privacy, and maintains low overhead.\r\n\r\nIn this talk, we'll explore the technical aspects, including:\r\n\r\n- Taking screenshots of a Window\r\n- Redacting the screenshots to ensure no sensitive user data is leaked\r\n- Encoding the screenshots into a video\r\n- Collecting supporting data like breadcrumbs, network requests, logs, touches to improve debuggability\r\n- Maintaining low performance overhead while implementing all of the above.\r\n\r\nWe'll also demonstrate how our tool empowers Android engineers to gain actionable insights when solving errors, crashes, and ANRs.\r\n\r\nWhether you're an Android developer looking to improve your debugging toolkit or someone interested in the technical guts of the Android OS, the session will cover it all. Join us for a glimpse into the future of mobile debugging – it's a replay you won't want to miss!", + "startsAt": "2024-10-31T16:05:00", + "endsAt": "2024-10-31T16:45:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "da013a11-7cb0-4b0d-a37e-e29ce98688e0", + "name": "Roman Zavarnitsyn" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264351, + "name": "Advanced" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264358, + "name": "Jetpack Compose" + }, + { + "id": 264380, + "name": "Tooling" + }, + { + "id": 264384, + "name": "Android" + }, + { + "id": 264388, + "name": "Libraries" + } + ], + "sort": 4 + } + ], + "roomId": 53981, + "room": "Stadia", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "736493", + "title": "Asynchrony and the infinite conveyor belt: Advanced coroutines and flows", + "description": "Most likely, you already know how to use coroutines and flows. They're part of our everyday existence. But all too often we learn them through repetition and rote learning, rather than forging a meaningful understanding of what's happening deep down. \r\nSo:\r\n\r\n- What *really* happens when you mark a function as 'suspend'?\r\n- How come crazy things like infinite loops on the main thread are possible?\r\n- What's the magic link between coroutines and flows?\r\n- What, really, is a scope? A context? A job?\r\n\r\nAnd there's a satisfying conclusion, too! We find that everything is linked: the path that seems to add complexity, in fact takes us back full circle.", + "startsAt": "2024-10-31T16:05:00", + "endsAt": "2024-10-31T16:45:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "1fb7ac5d-d848-4d40-840e-d8ae38128ab4", + "name": "Tom Colvin" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264359, + "name": "Kotlin" + }, + { + "id": 264362, + "name": "Flow" + }, + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264377, + "name": "Modern Android Development" + }, + { + "id": 264384, + "name": "Android" + }, + { + "id": 264386, + "name": "Coroutines" + } + ], + "sort": 4 + } + ], + "roomId": 53982, + "room": "Nest", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "757517", + "title": "Roundtable: Community-Driven Development: How to Contribute to OSS", + "description": "Contributing to and maintaining open-source libraries in Android is a rewarding but challenging endeavor that benefits the developer community while enhancing personal skills. It involves code contributions, issue resolution, and ensuring the library remains stable and relevant over time. Join us as we have an open discussion about:\r\n•\tWhat motivated you to start contributing to or maintaining an open-source library in the Android ecosystem, or how do you get started?\r\n•\tWhat are the biggest challenges you face when maintaining an open-source project, particularly when managing contributions from other developers?\r\n•\tHow do you ensure that an open-source library remains compatible and up-to-date with new Android releases and API changes?\r\n•\tWhat are some best practices for encouraging meaningful contributions and fostering an active community around your open-source project?\r\n•\tHow do you balance the time commitment of maintaining an open-source library with other professional or personal responsibilities?\r\n", + "startsAt": "2024-10-31T16:05:00", + "endsAt": "2024-10-31T16:45:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "8730d40b-3fb7-450d-ab71-08c9dd81a48a", + "name": "Nicola Corti" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 303052, + "name": "Roundtable Discussion" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54703, + "room": "Chromecast", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "764365", + "title": "Ask Android! - WearOS, Media, Adaptive apps on all form factors", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T16:05:00", + "endsAt": "2024-10-31T16:45:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "f89ea766-4af9-4b88-8842-ede574e4c648", + "name": "Paul Lammertsma" + }, + { + "id": "8b706c47-edbc-41e3-af85-3328b4134e57", + "name": "Ben Sagmoe" + }, + { + "id": "3b5772d2-d3d5-42fe-8015-8f7b0e09b472", + "name": "Thomas Weathers" + }, + { + "id": "c8229c07-b474-4044-af66-1c8da6779bc6", + "name": "Chiko Shimizu" + }, + { + "id": "1c163a41-865b-4915-b032-ef4942e2f47c", + "name": "Kristina Simakova" + }, + { + "id": "2fb0b020-9fa9-49f1-b4a4-54f71dca57c5", + "name": "Kseniia Shumelchyk" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "764370", + "title": "Ask Android! - WearOS, Media, Adaptive apps on all form factors", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-10-31T16:45:00", + "endsAt": "2024-10-31T17:00:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "c8229c07-b474-4044-af66-1c8da6779bc6", + "name": "Chiko Shimizu" + }, + { + "id": "1c163a41-865b-4915-b032-ef4942e2f47c", + "name": "Kristina Simakova" + }, + { + "id": "8b706c47-edbc-41e3-af85-3328b4134e57", + "name": "Ben Sagmoe" + }, + { + "id": "2fb0b020-9fa9-49f1-b4a4-54f71dca57c5", + "name": "Kseniia Shumelchyk" + }, + { + "id": "f89ea766-4af9-4b88-8842-ede574e4c648", + "name": "Paul Lammertsma" + }, + { + "id": "3b5772d2-d3d5-42fe-8015-8f7b0e09b472", + "name": "Thomas Weathers" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "771426", + "title": "#TheAndroidShow - Leadership Keynote", + "description": "Join members of the Android leadership team, including Matthew McCullough, Tor Norbye and Clara Bayarri for insights into what's new in Android", + "startsAt": "2024-10-31T17:00:00", + "endsAt": "2024-10-31T17:20:00", + "isServiceSession": false, + "isPlenumSession": true, + "speakers": [ + { + "id": "95ed3109-e7c3-41ff-a241-381c9fefb558", + "name": "Matthew McCullough" + }, + { + "id": "1932f921-2d6c-49e1-84b0-0d801cd2dbee", + "name": "Tor Norbye" + }, + { + "id": "4b613586-0a6e-45e9-b641-f855ceda4658", + "name": "Clara Bayarri" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264357, + "name": "Keynote" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "771431", + "title": "#TheAndroidShow - Panel Discussion", + "description": "Join moderator Florina Muntenescu and members of the Android Developer Relations team as they field questions on all the latest in Android development.", + "startsAt": "2024-10-31T17:30:00", + "endsAt": "2024-10-31T18:15:00", + "isServiceSession": false, + "isPlenumSession": true, + "speakers": [ + { + "id": "752bc716-f1b8-45d4-b0a5-cfbc3402b68b", + "name": "Florina Muntenescu" + }, + { + "id": "1932f921-2d6c-49e1-84b0-0d801cd2dbee", + "name": "Tor Norbye" + }, + { + "id": "ef1c33eb-89e9-49f6-9abc-da8140988097", + "name": "Alex Vanyo" + }, + { + "id": "e04a04d0-c875-4f36-ae02-914ba87b5b32", + "name": "Rebecca Gutteridge" + }, + { + "id": "837dd36a-5782-49cc-8da5-3f7fc7e4da8a", + "name": "Kateryna Semenova" + }, + { + "id": "4b613586-0a6e-45e9-b641-f855ceda4658", + "name": "Clara Bayarri" + }, + { + "id": "95ed3109-e7c3-41ff-a241-381c9fefb558", + "name": "Matthew McCullough" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 303052, + "name": "Roundtable Discussion" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "759067", + "title": "The Future of Android, Kotlin, and Everything", + "description": "Modern mobile and Android are a touch over 15 years old and Droidcon London 2024 is also in its 15th year. \r\n\r\nSo, it’s time to look forward.\r\n\r\nTech trends come and go. Some burn hot, then disappear. Some become essential. The web is essential. Mobile is essential. Whatever happens with mobile technology, the idea that mobile won’t be as, or more essential, 15 years from now is nonsense.\r\n\r\nHow mobile is developed and delivered is a different question altogether. This will be a talk about near-term tech possibilities, but not what mobile might look like in 15 years. I could speculate, and I'd be wrong. It will be a talk about how this community can shape that future, starting now.\r\n\r\nWhile the tech hype machine has hopped from one shiny concept to another, neither the web nor mobile has remained static. Far from it. We’re in a moment of change and opportunity. A very special moment for this community specifically. But the community is necessary to take advantage of it.", + "startsAt": "2024-11-01T09:20:00", + "endsAt": "2024-11-01T10:00:00", + "isServiceSession": false, + "isPlenumSession": true, + "speakers": [ + { + "id": "84a7e91b-e090-4d57-9eed-f3b9f277dc95", + "name": "Kevin Galligan" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264357, + "name": "Keynote" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "764372", + "title": "Ask Android! - Gen AI, Media, Adaptive apps on all form factors", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T10:00:00", + "endsAt": "2024-11-01T10:20:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "e2ad2515-5292-4deb-8ac6-6c7ea5be1543", + "name": "Rob Orgiu" + }, + { + "id": "1c163a41-865b-4915-b032-ef4942e2f47c", + "name": "Kristina Simakova" + }, + { + "id": "837dd36a-5782-49cc-8da5-3f7fc7e4da8a", + "name": "Kateryna Semenova" + }, + { + "id": "ef1c33eb-89e9-49f6-9abc-da8140988097", + "name": "Alex Vanyo" + }, + { + "id": "56b04326-604d-4140-b159-f93574c86ccd", + "name": "Ran Nachmany" + }, + { + "id": "c83dc04e-7a0a-4cbc-9d73-10d08f18a68b", + "name": "Miguel Montemayor" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "733921", + "title": "Effective App Monitoring in Production", + "description": "Your feature is complete and ready to be shipped to production. Now you can forget about it completely and move onto the next thing, right? Actually the fun begins when your feature reaches your users. Is your feature healthy? Are your users seeing any issues? Which ones? How many?\r\nIn this session, we’ll discuss how to monitor Android apps in production to ensure they stand resilient and ready for the challenges of the real world. \r\n\r\nIn this session, you’ll learn how to design and report relevant events that matter to you and your team. If you are introducing monitoring in your application, you will learn how to design a tracking strategy to effectively monitor the application health and debug any issue users experience. If you already have monitoring in place, you will see techniques on how to get visibility into the data through the definition of KPIs (Key Performance Indicators) and dashboards. We will also provide examples of common problems teams face when implementing constant monitoring like knowledge sharing, alerting, and escalating issues to other teams.\r\n\r\nYou’ll see from real world examples how to track, detect and address production issues before they escalate.\r\n\r\nLevel up your app observability, delight your users and deliver with confidence with these tips.", + "startsAt": "2024-11-01T10:20:00", + "endsAt": "2024-11-01T11:00:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "18c45d50-3e38-4933-a55b-8a833f850115", + "name": "Alejandra Stamato" + }, + { + "id": "084a1449-47c9-488c-b5b6-5b8534c45a23", + "name": "Mauro Frezza" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264358, + "name": "Jetpack Compose" + }, + { + "id": 264359, + "name": "Kotlin" + }, + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264377, + "name": "Modern Android Development" + }, + { + "id": 264384, + "name": "Android" + } + ], + "sort": 4 + } + ], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "696374", + "title": "AndroidX Lifecycle's Path to Multiplatform", + "description": "We’ve recently converted the AndroidX Lifecycle libraries (ViewModel, Lifecycle Runtime, and Compose support) to Kotlin multi-platform (KMP). Join this session to learn more about how this process went, what the real-world challenges of maintaining API backward compatibility are, what lessons we learned from working around KMP limitations, and insights to guide you in migrating your own libraries to KMP.", + "startsAt": "2024-11-01T10:20:00", + "endsAt": "2024-11-01T11:00:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "7280b9e7-ddf7-4cfb-b85b-1e998d851f66", + "name": "Marcello Galhardo" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264351, + "name": "Advanced" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264369, + "name": "Other" + }, + { + "id": 264381, + "name": "Cross-Platform" + }, + { + "id": 264384, + "name": "Android" + }, + { + "id": 264388, + "name": "Libraries" + } + ], + "sort": 4 + } + ], + "roomId": 49271, + "room": "Glass", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "696208", + "title": "Deep Dive into the Compose Compiler", + "description": "Have you ever wondered how the slot table is implemented in Compose? How are groups generated? What's the magic behind skipping, and how can you peek inside a slot table? The Slot table implementation was updated recently for performance. This talk takes a deep dive into the Jetpack Compose compiler internals, with a special focus on answering these questions and exploring the implementation details of the slot table. We'll go beyond the basics, uncovering how the compiler is structured and tested. This knowledge will empower you to understand, contribute to, or even build your own tools on top of it. Whether you're a curious developer or aspiring plugin contributor, get ready to fully understand the Jetpack Compose Compiler.", + "startsAt": "2024-11-01T10:20:00", + "endsAt": "2024-11-01T11:00:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "a79f3682-df5c-40e4-8aa8-1b6eaa7bdeec", + "name": "Mohit Sarveiya" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264351, + "name": "Advanced" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264358, + "name": "Jetpack Compose" + }, + { + "id": 264359, + "name": "Kotlin" + }, + { + "id": 264361, + "name": "KMP" + }, + { + "id": 264364, + "name": "Compose" + }, + { + "id": 264380, + "name": "Tooling" + }, + { + "id": 264384, + "name": "Android" + } + ], + "sort": 4 + } + ], + "roomId": 49272, + "room": "Things", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "720892", + "title": "Seamless mobile real-time communication with WebRTC", + "description": "The WebRTC project allows developers to build smooth voice and video communication solutions by facilitating the transmission of data between peers.\r\nDuring this talk, we will explore the details of the WebRTC project, including its design principles, functionalities, and how it transforms communications for many web and mobile apps. \r\nFinally, we will create a simple mobile application in Kotlin Multiplatform using WebRTC so you will want to start a business and become a billionaire. \r\n", + "startsAt": "2024-11-01T10:20:00", + "endsAt": "2024-11-01T11:00:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "4674e36f-50f8-4ffb-a486-679d730c759e", + "name": "Renaud Mathieu" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264359, + "name": "Kotlin" + }, + { + "id": 264364, + "name": "Compose" + }, + { + "id": 264388, + "name": "Libraries" + } + ], + "sort": 4 + } + ], + "roomId": 53981, + "room": "Stadia", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "731303", + "title": "Embracing 16 KB Page Sizes in Android - Boosting Performance", + "description": "Enhance app performance by adopting 16 KB page sizes introduced in Android 15, mandatory for Google Play uploads starting in 2025. In this session, I will cover the why and how behind 16 KB page size modifications through four parts: (1) Performance Boosts: Speed up app boot and launch times with 16 KB page size, (2) Impact Assessment: Evaluate how the 16 KB page size will affect your app, (3) Code Alignment: Align your code and binaries with the 16 KB page size requirement, and (4) Testing Strategies: Test and ensure your app is compliant with specific techniques. Get ahead of the curve by learning to adapt your app to the 16 KB page size requirement, ensuring superior performance and compliance ahead of the 2025 mandate.", + "startsAt": "2024-11-01T10:20:00", + "endsAt": "2024-11-01T11:00:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "84335047-a7cd-437e-986f-1d6b6df31072", + "name": "Chrystian Vieyra Cortes" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264380, + "name": "Tooling" + } + ], + "sort": 4 + } + ], + "roomId": 53982, + "room": "Nest", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "757520", + "title": "Roundtable: Keeping Up With Android – How to Stay Relevant", + "description": "\r\nIn the fast-paced world of Android development, staying current and continually honing your skills is essential for career growth and relevance. With constant advancements, new tools, libraries and APIs emerging…it can be easy to feel overwhelmed, have FOMO and feel like you are being left behind. In this roundtable we’ll discuss:\r\n - How do you prioritize what new technologies or trends to focus on?\r\n - What are some effective strategies or habits you use to continually hone your skills while balancing a busy work schedule?\r\n - How do you assess whether a new technology is worth investing time and energy into learning?\r\n - Can you share any resources, communities, or platforms that have been particularly helpful in staying up to date?\r\n - How do you prevent burnout?\r\n", + "startsAt": "2024-11-01T10:20:00", + "endsAt": "2024-11-01T11:00:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "b849afbd-1240-40e1-82ea-5660d3dca93b", + "name": "Neil Hutchison" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264349, + "name": "Introductory and overview" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 303052, + "name": "Roundtable Discussion" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54703, + "room": "Chromecast", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "764376", + "title": "Ask Android! - Gen AI, Media, Adaptive apps on all form factors", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T10:20:00", + "endsAt": "2024-11-01T11:00:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "e2ad2515-5292-4deb-8ac6-6c7ea5be1543", + "name": "Rob Orgiu" + }, + { + "id": "f55e8e03-a341-4c8a-b4fc-a7e97f82db07", + "name": "Xiaodao Wu" + }, + { + "id": "1c163a41-865b-4915-b032-ef4942e2f47c", + "name": "Kristina Simakova" + }, + { + "id": "8b706c47-edbc-41e3-af85-3328b4134e57", + "name": "Ben Sagmoe" + }, + { + "id": "837dd36a-5782-49cc-8da5-3f7fc7e4da8a", + "name": "Kateryna Semenova" + }, + { + "id": "d7f1c9d9-d537-4240-864e-ba626457f534", + "name": "Satish Shende" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "764378", + "title": "Ask Android! - Gen AI, Media, Adaptive apps on all form factors", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T11:00:00", + "endsAt": "2024-11-01T11:15:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "1c163a41-865b-4915-b032-ef4942e2f47c", + "name": "Kristina Simakova" + }, + { + "id": "837dd36a-5782-49cc-8da5-3f7fc7e4da8a", + "name": "Kateryna Semenova" + }, + { + "id": "391191b2-1d5c-4784-875b-00edf4d065cc", + "name": "Chris Assigbe" + }, + { + "id": "c83dc04e-7a0a-4cbc-9d73-10d08f18a68b", + "name": "Miguel Montemayor" + }, + { + "id": "c70d10a5-999c-4858-a39c-7326570cee91", + "name": "Ran Nachmany" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 306233, + "name": "Office Hours" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "736477", + "title": "Creating a Custom Compose Layout, Step-by-Step", + "description": "Building a custom layout in Jetpack Compose may seem intimidating, but it does not have to be. With an understanding of the tools available for custom layout, the phases of composition, and best practices for state management, anyone can create a powerful, beautiful custom layout.\r\n\r\nIn this talk, we will build a sophisticated schedule component step-by-step. This composable will include multiple display modes, theme-like encapsulation of styling and behaviors, scoped modifiers for easy customization, and even some animation.", + "startsAt": "2024-11-01T11:15:00", + "endsAt": "2024-11-01T11:55:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "2d41d3fb-3321-4b47-a401-ae84a5de2423", + "name": "Huyen Tue Dao" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264358, + "name": "Jetpack Compose" + } + ], + "sort": 4 + } + ], + "roomId": 49270, + "room": "Hangouts", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "747072", + "title": "Scalable Testing Strategies", + "description": "It's very easy to have too many tests and lose track of what kind of feedback each one brings. Moreover, testing on multiple devices can get expensive, both in terms of CI cost and lost productivity waiting for tests to pass. In this talk we'll talk about how the testing pyramid has evolved because of new requirements and features that need to be tested, such as multiple form factors, new configuration changes, Jetpack Compose, screenshot testing, etc.", + "startsAt": "2024-11-01T11:15:00", + "endsAt": "2024-11-01T11:55:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "578f244d-fe79-4759-a84f-63dfbefbd06d", + "name": "Jose Alcérreca" + }, + { + "id": "532dc16d-b69d-4f68-aa49-fe9878b0b52f", + "name": "Adarsh Fernando" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264363, + "name": "Testing" + }, + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264394, + "name": "CI/CD" + }, + { + "id": 264384, + "name": "Android" + } + ], + "sort": 4 + } + ], + "roomId": 49271, + "room": "Glass", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "735816", + "title": "Developing Trusted Applications for Trusted Execution Environments and vTEEs", + "description": "In today's mobile-first world, security is paramount. Join us in this engaging session where we introduce vTEE, a groundbreaking concept designed to embed advanced security into mobile applications. This session will demonstrate how vTEE allows developers to create their own Trusted Execution Environments (TEEs) directly within their apps, ensuring that sensitive data remains protected. Additionally, learn how our global award-winning open-source project, jCardSim, simplifies the prototyping and development of trusted applications, accelerating your journey towards secure, scalable, and innovative app experiences. Get ready to supercharge your app security with ease and flexibility!", + "startsAt": "2024-11-01T11:15:00", + "endsAt": "2024-11-01T11:55:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "d7e7d278-a645-42c5-b337-c793a5b5bd79", + "name": "Mikhail Dudarev" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264351, + "name": "Advanced" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264372, + "name": "Security" + }, + { + "id": 264381, + "name": "Cross-Platform" + }, + { + "id": 264384, + "name": "Android" + } + ], + "sort": 4 + } + ], + "roomId": 49272, + "room": "Things", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "722874", + "title": "From realtime CameraX filters to General Purpose GPU computing in simple steps", + "description": "Did you ever think that that the computational complexity of image processing is comparable to that of AI training, and both tasks use GPUs?\r\n\r\nModern phones have powerful GPUs that are typically used for photo, graphics and image processing which naturally brings us to OpenGL and Vulkan C++ APIs.\r\n\r\nLuckily, on Android we have OpenGL Java bindings, so we don't need to dive into C++. And combined with the CameraX effects API, we can build advanced filters for the camera. What is more, mobile GPUs are also not limited to these types of tasks and can be used for general purpose computing, even the ones completely unrelated to graphics.\r\n\r\nIn this session I will show you how to set up and write your own shaders for real-time image processing with CameraX. I will also show you how to make a step forward and use shaders for general purpose GPU computing, so that you can take advantage of the GPU power.\r\n\r\nCome to this talk and learn how to harness the computing power of your phone's GPU!", + "startsAt": "2024-11-01T11:15:00", + "endsAt": "2024-11-01T11:55:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "892ec2dc-5b2e-45fb-9393-ff1407ebebe7", + "name": "Konstantin Zolotov" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", + "categoryItems": [ + { + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ + { + "id": 264354, + "name": "Session" + } + ], + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [ + { + "id": 264369, + "name": "Other" + }, + { + "id": 264384, + "name": "Android" + }, + { + "id": 264388, + "name": "Libraries" + } + ], + "sort": 4 + } + ], + "roomId": 53981, + "room": "Stadia", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "711918", + "title": "Personalizing Accessibility", + "description": "What should you do when users' accessibility needs conflict? For example, some users prefer more color contrast, while others require less contrast. To give a few examples, some might need labels to accompany icons, and for some, having too much text can make the app experience worse. Some love graphs and others have difficulty understanding what they represent and would need the same data in written format.\r\n\r\nOne way to tackle this problem is to allow users to personalize their app experience. In this talk, I will discuss different ways of personalization, including the opportunities and drawbacks. I will also give some actionable examples of how to let your users personalize their experience. After listening to this talk, you'll leave with actionable knowledge about providing a more accessible experience for your users via personalization.", + "startsAt": "2024-11-01T11:15:00", + "endsAt": "2024-11-01T11:55:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "10659767-356c-4cd5-ba9c-12cec7a3ce79", - "name": "Ash Davies" + "id": "6a7b0ee2-2d50-42b7-8225-1df145d255ea", + "name": "Eeva-Jonna Panula" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254886, - "name": "Tooling" + "id": 264358, + "name": "Jetpack Compose" }, { - "id": 254892, - "name": "Kotlin" + "id": 264365, + "name": "Accessibility" + }, + { + "id": 264368, + "name": "Techniques & Guides" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 53982, + "room": "Nest", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -1681,72 +4814,51 @@ }, { "questionAnswers": [], - "id": "725385", - "title": "Monetizing Your Side Project to $1k in Monthly Revenue and Beyond", - "description": "Only ~17% of apps reach $1k in monthly revenue. Learn best practices on crossing $1k MRR and beyond from personal experience building two profitable apps and advice from other successful app founders.", - "startsAt": "2024-09-19T16:25:00", - "endsAt": "2024-09-19T17:05:00", + "id": "760569", + "title": "Roundtable: KMP & CMP - Yes we can!...but....", + "description": "KMP with native UI and KMP with CMP are both amazing technically. However, there is no guidance for how these technologies should be applied to production situations. All new tech goes through a maturing phase.\r\n\r\nJoin this roundtable to discuss the promise and pitfalls of KMP and CMP and how the community can deliver on the amazing potential.", + "startsAt": "2024-11-01T11:15:00", + "endsAt": "2024-11-01T11:55:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "0e4f3abe-cc6c-409a-8f34-e346f23c0cc4", - "name": "Jeffrey Bunn" + "id": "84a7e91b-e090-4d57-9eed-f3b9f277dc95", + "name": "Kevin Galligan" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, - "name": "Intermediate" + "id": 264351, + "name": "Advanced" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 303052, + "name": "Roundtable Discussion" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [ - { - "id": 254888, - "name": "Cross-Platform" - }, - { - "id": 254891, - "name": "Android" - }, - { - "id": 254893, - "name": "Design" - }, - { - "id": 254902, - "name": "UI/UX" - }, - { - "id": 254907, - "name": "Flutter" - } - ], - "sort": 3 + "categoryItems": [], + "sort": 4 } ], - "roomId": 49958, - "room": "Fountain Room", + "roomId": 54703, + "room": "Chromecast", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -1755,51 +4867,71 @@ }, { "questionAnswers": [], - "id": "735751", - "title": "Add Generative AI capabilities to your Android app", - "description": "Generative AI capabilities are coming on Android. Whether you want to run inference on-device to protect users privacy or use Gemini Pro’s advanced multimodal capabilities, there are multiple options to add GenAI capabilities to your Android app.\r\n\r\nIn this session we’ll review Google’s GenAI solutions for Android, how to integrate them to your application and some examples of successful integrations.", - "startsAt": "2024-09-19T16:25:00", - "endsAt": "2024-09-19T17:05:00", + "id": "764381", + "title": "Ask Android! -GenAI, Media, Adaptive apps on all form factors", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T11:15:00", + "endsAt": "2024-11-01T11:55:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "ccce0dd7-87af-4bc7-9ae0-3cc5fd9cba2a", - "name": "Terence Zhang" + "id": "c8229c07-b474-4044-af66-1c8da6779bc6", + "name": "Chiko Shimizu" + }, + { + "id": "f89ea766-4af9-4b88-8842-ede574e4c648", + "name": "Paul Lammertsma" + }, + { + "id": "3b5772d2-d3d5-42fe-8015-8f7b0e09b472", + "name": "Thomas Weathers" + }, + { + "id": "837dd36a-5782-49cc-8da5-3f7fc7e4da8a", + "name": "Kateryna Semenova" + }, + { + "id": "ef1c33eb-89e9-49f6-9abc-da8140988097", + "name": "Alex Vanyo" + }, + { + "id": "1c163a41-865b-4915-b032-ef4942e2f47c", + "name": "Kristina Simakova" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 306233, + "name": "Office Hours" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [], - "sort": 3 + "sort": 4 } ], - "roomId": 52283, - "room": "Sapphire Room", + "roomId": 54706, + "room": "Ask Android", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -1808,88 +4940,71 @@ }, { "questionAnswers": [], - "id": "719914", - "title": "Mobile Developer Productivity Panel", - "description": "The panelists will discuss developer productivity, developer experience, tools, etc topics for large scale mobile applications. The panel will start with an introduction of the tech/tooling stack of their current organizations then dive into topics like Gen AI, measurement/metrics,\r\nremote development, forward looking innovation, roadmap, IDE, Tooling, Build, CI/CD. Panelists TBD\r\n\r\nTopics\r\n\r\n- What had the biggest impact on mobile Developer Experience in the last 24 months? \r\n\r\n- Remote development: how do you approach development environment consistency? What were the DPE/DevEx results from their investment in remote development? \r\n\r\n- How are you using AI in your infrastructure? \r\n\r\n- What are the IDE plugins and toolings that had the most impact on developer productivity \r\n\r\n- How are you measuring Developer Productivity? \r\n\r\n- How do you balance velocity vs quality? \r\n", - "startsAt": "2024-09-19T17:20:00", - "endsAt": "2024-09-19T18:00:00", + "id": "764391", + "title": "Ask Android! - Compose, Media, Platform", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T11:55:00", + "endsAt": "2024-11-01T12:55:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "6a3de662-ef86-4c62-bb68-2f7ebe607f76", - "name": "Ty Smith" + "id": "b99dc2e2-df83-4045-a5cb-c4d7dea5db1e", + "name": "Halil Ozercan" + }, + { + "id": "e34e8c09-ac65-4927-852e-ff2fc462afac", + "name": "Anton Beloglazov" }, { - "id": "0983d15b-0efc-4d9a-918d-4021daee67ce", - "name": "Rooz SF" + "id": "9079b8b4-be1f-4213-a446-6b2bdcad0c04", + "name": "Fung Lam" }, { - "id": "03c63012-49c4-44eb-af96-0f5360b0d187", - "name": "Ishan Khanna" + "id": "e4292032-5462-494b-abfd-3898301476e2", + "name": "Rebecca Franks" }, { - "id": "4a13d160-c8c3-4214-926f-24a5b15c78dd", - "name": "Jesse Wilson" + "id": "b3baa5b6-3c85-4a36-97c5-9a252f887ae4", + "name": "Jelle Fresen" }, { - "id": "2c1f7fbb-3d9f-41fc-804a-9e1053e89256", - "name": "Kiki Chang" + "id": "1c163a41-865b-4915-b032-ef4942e2f47c", + "name": "Kristina Simakova" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254885, - "name": "Panel Discussion" + "id": 306233, + "name": "Office Hours" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [ - { - "id": 254886, - "name": "Tooling" - }, - { - "id": 254887, - "name": "CI/CD" - }, - { - "id": 254894, - "name": "Testing" - }, - { - "id": 254899, - "name": "Gradle" - }, - { - "id": 254901, - "name": "Android Studio" - } - ], - "sort": 3 + "categoryItems": [], + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 54706, + "room": "Ask Android", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -1898,60 +5013,60 @@ }, { "questionAnswers": [], - "id": "721053", - "title": "When sharing isn’t caring: Using platform-specific code in Kotlin Multiplatform", - "description": "Sharing code across platforms is a wonderful superpower. But sometimes, sharing 100% of your codebase isn’t the goal. Maybe you’re migrating existing apps to multiplatform, maybe you have platform-specific libraries or APIs you want to interact with, or maybe your platforms need to do slightly different things.\r\n\r\nThe strength of Kotlin on every platform is not just sharing code, but also interop with the platform’s unique APIs. When building multiplatform apps, it pays to think not only about what code can be shared, but also about what code is better not shared, and how to move between them.\r\n\r\nUsing examples drawn from real-world projects, we’ll look at different strategies for architecting the shared and not-shared parts of your codebase, so you’re better prepared to handle those times when a platform-specific solution is the best one.", - "startsAt": "2024-09-19T17:20:00", - "endsAt": "2024-09-19T18:00:00", + "id": "700387", + "title": "Mistakes you make using Kotlin Coroutines", + "description": "Kotlin Coroutines offer a powerful, yet deceptively simple solution for managing asynchronous tasks. However, their ease of use can sometimes lead us into unforeseen pitfalls. From unexpected cancellations to perpetually running operations, developers often encounter bewildering behaviors that can affect application performance and reliability. In this presentation, we'll dive deep into the common mistakes made while using Kotlin Coroutines. We'll explore why these issues arise, how to diagnose them, and, most importantly, how to resolve them effectively. Expect to walk away with advanced insights and practical strategies to harness the full potential of coroutines in your Kotlin applications, ensuring they're robust, efficient, and maintainable.", + "startsAt": "2024-11-01T12:55:00", + "endsAt": "2024-11-01T13:35:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "7a1d47f2-dfd1-4af1-b097-5c415f9b29c3", - "name": "Russell Wolf" + "id": "ef7c1115-d852-44b9-9f72-530ba7223c55", + "name": "Marcin Moskala" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254888, - "name": "Cross-Platform" + "id": 264359, + "name": "Kotlin" }, { - "id": 254892, - "name": "Kotlin" + "id": 264386, + "name": "Coroutines" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 49270, + "room": "Hangouts", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -1960,72 +5075,64 @@ }, { "questionAnswers": [], - "id": "696196", - "title": "Deep Dive into the Compose Compiler", - "description": "Have you ever wondered how the slot table is implemented in Compose? How are groups generated? What's the magic behind skipping, and how can you peek inside a slot table? The Slot table implementation was updated recently for performance. This talk takes a deep dive into the Jetpack Compose compiler internals, with a special focus on answering these questions and exploring the implementation details of the slot table. We'll go beyond the basics, uncovering how the compiler is structured and tested. This knowledge will empower you to understand, contribute to, or even build your own tools on top of it. Whether you're a curious developer or aspiring plugin contributor, get ready to fully understand the Jetpack Compose Compiler.", - "startsAt": "2024-09-20T09:20:00", - "endsAt": "2024-09-20T10:00:00", + "id": "736513", + "title": "A Snapshot Preview of Paparazzi 2.0", + "description": "Since last Droidcon NYC, Paparazzi has seen continued increased adoption across the Android community!\r\n\r\nIn this session, we'll discuss:\r\n* why pixel perfection is challenging af\r\n* image encoding and why we chose APNG for animations\r\n* why Google's publishing of layoutlib is great for the community\r\n* ...and more!\r\n\r\nWe'll also give a sneak peek to what's coming in 2.0, as well as why we're excited about it and you should be too!", + "startsAt": "2024-11-01T12:55:00", + "endsAt": "2024-11-01T13:35:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "a79f3682-df5c-40e4-8aa8-1b6eaa7bdeec", - "name": "Mohit Sarveiya" + "id": "903c7a65-63f0-4244-8f8c-7ab8f7acae75", + "name": "John Rodriguez" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254880, - "name": "Advanced" + "id": 264350, + "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254886, - "name": "Tooling" - }, - { - "id": 254891, - "name": "Android" - }, - { - "id": 254892, + "id": 264359, "name": "Kotlin" }, { - "id": 254894, + "id": 264363, "name": "Testing" }, { - "id": 254897, - "name": "Libraries" + "id": 264380, + "name": "Tooling" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 49271, + "room": "Glass", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -2034,60 +5141,64 @@ }, { "questionAnswers": [], - "id": "721860", - "title": "Building an ML-powered Android Livestreaming App", - "description": "This presentation explores the application of computer vision and machine learning models for real-time video and audio processing. We'll demonstrate how this technology can enable the creation of a whole new category of live-streaming applications. \r\n\r\nDeveloping a video conferencing application has historically been fairly complex. We will start with a brief overview of the Livekit open-source APIs, showcasing how to build a simple and intuitive video streaming Android application. \r\n\r\nNext, we will explore integrating various ML-powered agents into the experience. We will also illustrate how to use reactive programming techniques to create easily understandable and modifiable multi-stage processing pipelines.\r\n\r\nLooking forward to exploring this exciting and innovative topic with you!", - "startsAt": "2024-09-20T09:20:00", - "endsAt": "2024-09-20T10:00:00", + "id": "731650", + "title": "Elevated Dependency Injection: Going Beyond the Basics with Custom Hilt Components", + "description": "Hilt/Dagger is a popular and powerful building block in Modern Android Development. Its benefits include reduced boilerplate and compile-time magic to ensure runtime safety and performance. \r\n\r\nBy default, Hilt provides basic components, such as Singleton, Activity, or ViewModel. \r\nIt is also extensible, allowing you to create additional components for more complex use cases. \r\n\r\nHere at Patreon, building a custom UserComponent tied to a user session has improved our codebase immensely by reducing boilerplate, increasing code safety, and making it easier to cancel work when a user logs out.\r\n\r\nThis talk will focus on the ins and outs of custom components and some simple but non-obvious techniques that we’ve used to make them nicely integrate into our app!\r\n\r\nHighlights of the talk will include:\r\n\r\n- Custom components and when you should use them\r\n- The beautiful synergy of dagger components and coroutine scopes\r\n- Overcoming the limitations of Dagger’s single inheritance and Hilt’s fixed component hierarchy\r\n- Providing easy access to bindings in `@HiltViewModel` and `@HiltAndroidTest` classes\r\n- A case study of Patreon’s `UserComponent`", + "startsAt": "2024-11-01T12:55:00", + "endsAt": "2024-11-01T13:35:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "878ec0bb-f4d7-4b83-a9af-ff6e359a35dc", - "name": "Etienne Caron" + "id": "1caff1f9-9594-4ce8-a031-ed1ba2201d13", + "name": "Steven Kideckel" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254889, - "name": "AI/ML" + "id": 264377, + "name": "Modern Android Development" }, { - "id": 254891, + "id": 264384, "name": "Android" + }, + { + "id": 264387, + "name": "Dagger" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 49272, + "room": "Things", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -2096,68 +5207,56 @@ }, { "questionAnswers": [], - "id": "724063", - "title": "A Snapshot Preview of Paparazzi 2.0", - "description": "Since last Droidcon NYC, Paparazzi has seen continued increased adoption across the Android community!\r\n\r\nIn this session, we'll discuss:\r\n* why pixel perfection is challenging af\r\n* image encoding and why we chose APNG for animations\r\n* why Google's publishing of layoutlib is great for the community\r\n* ...and more!\r\n\r\nWe'll also give a sneak peek to what's coming in 2.0, as well as why we're excited about it and you should be too!", - "startsAt": "2024-09-20T09:20:00", - "endsAt": "2024-09-20T10:00:00", + "id": "700492", + "title": "Ten things you heard about testing that might be wrong", + "description": "Testing became an essential part of Android development. Many conference talks have been given and even more best practices have been written. \r\n\r\nBut what if, as time evolved, some of the things we thought were true, changed?\r\n\r\nLet’s start questioning some of these in this talk:\r\n- Are flaky tests fixable?\r\n- Are mocks even harmful?\r\n- Is DI about testing?\r\n- Did we understand testing in isolation properly? \r\n- Is the test pyramid still valid?\r\n- Is Robolectric good or bad on Android?\r\n- And in times of AI, should we generate tests?\r\n\r\nCome and join my session to learn more!\r\n", + "startsAt": "2024-11-01T12:55:00", + "endsAt": "2024-11-01T13:35:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "903c7a65-63f0-4244-8f8c-7ab8f7acae75", - "name": "John Rodriguez" + "id": "4d3a31b1-61e5-4a26-9ca3-c9f30e3eaa08", + "name": "Danny Preussler" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, - "name": "Intermediate" + "id": 264351, + "name": "Advanced" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254886, - "name": "Tooling" - }, - { - "id": 254891, - "name": "Android" - }, - { - "id": 254893, - "name": "Design" - }, - { - "id": 254894, + "id": 264363, "name": "Testing" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49958, - "room": "Fountain Room", + "roomId": 53981, + "room": "Stadia", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -2166,80 +5265,80 @@ }, { "questionAnswers": [], - "id": "720376", - "title": "Scaling Android Development without a Monorepo", - "description": "As mobile startups grow into medium sized companies, it's not always possible to have a monorepo. In this talk, we'll discuss how some strategies and tooling can help us ship and manage an Android app across a large number of repositories. We'll also discuss some of the problems we run into and how we can solve them.\r\n\r\nWe'll discuss topics such as:\r\n- binary compatibility - why it's important and how we handle it (especially when a bump in a shared library might cause a crash in a completely different part of the app).\r\n- tooling to understand changes to the dependency tree (what version changes occurred, what versions are behind, and catching these at CI).\r\n- sharing Gradle build plugins to make life easier. \r\n- code generation strategies to share code between Android and iOS.\r\n- and more\r\n\r\nWe’ll also discuss a high level of the architectural decisions that allow adding or removing major pieces of functionality through just adding or removing a dependency to the Gradle script, and how this architecture gives us some neat advantages along the way.", - "startsAt": "2024-09-20T09:20:00", - "endsAt": "2024-09-20T10:00:00", + "id": "735538", + "title": "Unblocking The Main Thread: Solving ANRs and Frozen Frames", + "description": "In the realm of Android development, the main thread is our stage, but too often, it becomes a battleground where performance issues arise, leading to ANRs, frozen frames, and sluggish Uls. As we strive for excellence in user experience, understanding and optimizing the main thread becomes essential to prevent these common performance bottlenecks.\r\n\r\nWe have strategies and best practices for keeping the main thread uncluttered. We'll examine the root causes of performance issues and techniques for monitoring and improving main thread health as well as app performance.\r\n\r\nIn this talk, participants will walk away with practical knowledge on enhancing app performance by mastering the main thread. We'll share proven approaches to eliminate real-life ANRs and frozen frames to build apps that deliver butter smooth experience.", + "startsAt": "2024-11-01T12:55:00", + "endsAt": "2024-11-01T13:35:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "16656dd2-a23b-42d1-8cb8-c9a1e593dd6c", - "name": "Ahmed El-Helw" - }, - { - "id": "5574663f-8366-4445-a2db-789474c8ef55", - "name": "Abdulahi Osoble" + "id": "9a7f5add-ce7a-49a3-ab3d-f3c4484453e8", + "name": "Sinan Kozak" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254880, + "id": 264351, "name": "Advanced" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254886, - "name": "Tooling" + "id": 264358, + "name": "Jetpack Compose" }, { - "id": 254887, - "name": "CI/CD" + "id": 264368, + "name": "Techniques & Guides" }, { - "id": 254891, - "name": "Android" + "id": 264377, + "name": "Modern Android Development" }, { - "id": 254892, - "name": "Kotlin" + "id": 264380, + "name": "Tooling" }, { - "id": 254897, - "name": "Libraries" + "id": 264384, + "name": "Android" }, { - "id": 254904, - "name": "Modularization" + "id": 264379, + "name": "Android Studio" + }, + { + "id": 264391, + "name": "Firebase" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 52283, - "room": "Sapphire Room", + "roomId": 53982, + "room": "Nest", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -2248,60 +5347,71 @@ }, { "questionAnswers": [], - "id": "719280", - "title": "Declarative APIs for Declarative UIs: Designing Media Friendly Jetpack Compose Components", - "description": "As we consume more content on our devices, it's more important than ever to provide delightful user experiences for media across different navigation destinations, panes within those destinations, and devices and form factors those panes span.\r\n\r\nThis talk will:\r\n\r\nOutline clear selection criteria for what APIs to use in the data and UI layers when building an image serving pipeline in a Jetpack Compose app, along with clear examples of the effect of these choices.\r\n\r\nUnderscore the importance of the kinds of architectural logic in the UI layer (UI logic and business logic) in relation to producing and displaying rich media (pictures and videos) in apps in Jetpack Compose.\r\n\r\nWalk through common user experiences that can be taken to the next level of continuity and immersion with Jetpack Compose by following the principles previously outlined. Examples include shared element transitions and its permutations in list - detail flows across various screen sizes and form factors.", - "startsAt": "2024-09-20T10:20:00", - "endsAt": "2024-09-20T11:00:00", + "id": "764396", + "title": "Ask Android! - Compose, Media, Platform", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T12:55:00", + "endsAt": "2024-11-01T13:35:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "0990c055-9a74-45f9-9f5a-10e2d9196649", - "name": "Tunji Dahunsi" + "id": "b99dc2e2-df83-4045-a5cb-c4d7dea5db1e", + "name": "Halil Ozercan" + }, + { + "id": "e34e8c09-ac65-4927-852e-ff2fc462afac", + "name": "Anton Beloglazov" + }, + { + "id": "9079b8b4-be1f-4213-a446-6b2bdcad0c04", + "name": "Fung Lam" + }, + { + "id": "e4292032-5462-494b-abfd-3898301476e2", + "name": "Rebecca Franks" + }, + { + "id": "b3baa5b6-3c85-4a36-97c5-9a252f887ae4", + "name": "Jelle Fresen" + }, + { + "id": "1c163a41-865b-4915-b032-ef4942e2f47c", + "name": "Kristina Simakova" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 306233, + "name": "Office Hours" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [ - { - "id": 254891, - "name": "Android" - }, - { - "id": 254902, - "name": "UI/UX" - } - ], - "sort": 3 + "categoryItems": [], + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 54706, + "room": "Ask Android", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -2310,56 +5420,63 @@ }, { "questionAnswers": [], - "id": "721825", - "title": "Advancing Beyond Staff: A Mobile Engineer’s Journey in Big Tech", - "description": "Achieving promotion as a software engineer in big tech is a rare feat, with ascension to staff level and beyond being even more elusive. While many engineers aspire to reach these higher echelons, few truly understand the profound shift in responsibilities that accompany such roles. Misalignment in expectations can lead to significant struggles in these new positions, especially for specialists like mobile engineers, who face unique hurdles when advancing beyond senior roles without broadening their expertise.\r\n\r\nIn this talk, we will demystify the path to post-terminal levels, using Uber as a case study. We will outline what it takes to operate at these advanced stages, setting realistic expectations, and providing actionable examples and recommendations for those aiming to climb the career ladder. The discussion will also address the specific challenges faced by specialized engineers and propose strategies to overcome them.\r\n\r\nAttendees will leave equipped with practical tools to steer their career growth, a clearer understanding of the dynamics at higher levels, and a refined perspective on their long-term career objectives.\r\n", - "startsAt": "2024-09-20T10:20:00", - "endsAt": "2024-09-20T11:00:00", + "id": "764397", + "title": "Ask Android! - Compose, WearOS, Platform", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T13:35:00", + "endsAt": "2024-11-01T13:50:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "6a3de662-ef86-4c62-bb68-2f7ebe607f76", - "name": "Ty Smith" + "id": "2fb0b020-9fa9-49f1-b4a4-54f71dca57c5", + "name": "Kseniia Shumelchyk" + }, + { + "id": "1dfe9bb5-d9bf-41a9-b7d6-dcfd7953e941", + "name": "Nick Butcher" + }, + { + "id": "e4292032-5462-494b-abfd-3898301476e2", + "name": "Rebecca Franks" + }, + { + "id": "9079b8b4-be1f-4213-a446-6b2bdcad0c04", + "name": "Fung Lam" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254878, - "name": "Introductory and overview" + "id": 264350, + "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 306233, + "name": "Office Hours" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [ - { - "id": 254891, - "name": "Android" - } - ], - "sort": 3 + "categoryItems": [], + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 54706, + "room": "Ask Android", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -2368,64 +5485,60 @@ }, { "questionAnswers": [], - "id": "720896", - "title": "SKIE: Narrow the gap between Kotlin and Swift", - "description": "A well-designed KMP library can be used on iOS like any other native framework. However, by default it behaves like an Objective-C framework and loses many modern language features that we're used to in both Kotlin and Swift.\r\n\r\nIn this session, we'll look at the features of SKIE, how to enable it for your multiplatform project, and how to make the most of it. We'll also look at some of the lesser known features that aren't quite documented yet.\r\n\r\nLearn how you can use Kotlin language features that would normally be unavailable for your Swift code and make your code safer.", - "startsAt": "2024-09-20T10:20:00", - "endsAt": "2024-09-20T11:00:00", + "id": "733770", + "title": "User Initiated Data Transfer Jobs", + "description": "Google introduced a new api UIDT in Android 14 as an alternative to Work Manager and Foreground Services.\r\n\r\nA deep dive session into how your apps can run longer-duration, user-initiated transferring of data, such as downloading a file from a remote server using UIDT. With increasing restrictions on running Foreground Services it is very important to migrate your app's critical use cases to alternate API's. Android 14 applies strict rules on when you can run a Foreground Service & Android 15 is bringing 6 hours timeout to Foreground Services.\r\n\r\nWill share how specific use cases migrated to UIDT can lead to improved app performance.", + "startsAt": "2024-11-01T13:50:00", + "endsAt": "2024-11-01T14:30:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "969813cd-0231-4310-9c61-745967bd94c5", - "name": "Tadeas Kriz" + "id": "edd46ee9-3e55-478c-8f27-c8f86ca77138", + "name": "Tushar Varshney" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254878, - "name": "Introductory and overview" + "id": 264351, + "name": "Advanced" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254886, - "name": "Tooling" - }, - { - "id": 254888, - "name": "Cross-Platform" + "id": 264377, + "name": "Modern Android Development" }, { - "id": 254892, - "name": "Kotlin" + "id": 264384, + "name": "Android" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49958, - "room": "Fountain Room", + "roomId": 49270, + "room": "Hangouts", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -2434,51 +5547,72 @@ }, { "questionAnswers": [], - "id": "706110", - "title": "Composing ViewModels: Breaking ViewModels into smaller self-contained UI models", - "description": "In early times of Android development we used to have big activities. All view and business logic were being written in activities. Then fragments were introduced so that activities started to become leaner. Then several architectural patterns have started to appear in the Android scene: MVP, MVVM, MVI, etc. While all these were happening, ViewModel like classes started to get bigger and bigger. They have become the new big activities. However, we haven't often considered splitting view models into manageable self-contained granular ones.\r\n\r\nViews are composable and they can be composed to build bigger views. What about introducing smaller ViewModels, namely UI models, and using them to build composable UI models/View Models? \r\n\r\nIn this talk, we will introduce the micro-feature architecture that leverages granular UI models. We'll demonstrate how this approach enables us to create leaner UI hosts by breaking down view models into smaller, self-contained logical UI models. Moreover, we'll explore the distinctions between a UI model and a Jetpack ViewModel. \r\n\r\nWe'll delve into the advantages offered by micro-feature architecture, particularly in terms of single responsibility, composability, reusability, and testability. \r\n\r\nBy the end of the talk, you'll have a comprehensive understanding of how adopting this architecture can significantly enhance your development process and empower you to build high-quality, scalable applications which has highly dynamic contextual screens. \r\n\r\nMicro-feature architecture is used in several screens of 2 big apps in production which are now being used by 10M+ users. We will be also sharing our learnings about using this approach in these apps. ", - "startsAt": "2024-09-20T10:20:00", - "endsAt": "2024-09-20T11:00:00", + "id": "734509", + "title": "Building State Holders in Compose with Molecule: A New Approach to Reusable UI Components", + "description": "Are your ViewModels exponentially growing out of control as they manage the state for each of your Composables? This talk introduces Molecule, a new library for creating state holders in Jetpack Compose. We’ll explore how Molecule can simplify presentation state management in Compose, allowing for more flexible and scalable UI development. Attendees will learn how to implement Molecule in their projects and understand its advantages over traditional state management approaches as well as some of the drawbacks to this approach.", + "startsAt": "2024-11-01T13:50:00", + "endsAt": "2024-11-01T14:30:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "5c3850ee-778a-4904-bd52-a3927ec54dc6", - "name": "Hakan Bagci" + "id": "6624cb6c-7fc4-4495-a87f-8060e88d7d18", + "name": "Jack Adams" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, - "name": "Intermediate" + "id": 264349, + "name": "Introductory and overview" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [], - "sort": 3 + "categoryItems": [ + { + "id": 264358, + "name": "Jetpack Compose" + }, + { + "id": 264362, + "name": "Flow" + }, + { + "id": 264364, + "name": "Compose" + }, + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264388, + "name": "Libraries" + } + ], + "sort": 4 } ], - "roomId": 52283, - "room": "Sapphire Room", + "roomId": 49271, + "room": "Glass", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -2487,72 +5621,60 @@ }, { "questionAnswers": [], - "id": "722122", - "title": "Modern Paging at Scale: StoreX + Compose", - "description": "Pagination in large-scale mobile applications presents unique challenges. This talk, presented by engineers from Uber and TikTok, introduces StoreX Paging, the Mobile Native Foundation’s KMP solution.\r\n\r\nWe’ll dive deep into StoreX Paging’s architecture, built on unidirectional data flow, Store, Molecule, and Compose. We’ll discuss the results of our preliminary performance benchmarks. We’ll explore new concepts like an “updating item” for independent updates and an “operation pipeline” for on-the-fly data transformations, setting StoreX apart from traditional paging libraries.\r\n\r\nThe talk will cover StoreX Paging’s core APIs and customization points, including launch effects, middleware, side effects, and adaptive fetching strategies. We’ll share implementation details of our default fetching strategy and Compose Runtime integration, demonstrating how we’ve optimized memory management for large datasets. Finally, we’ll discuss performance benchmarking approaches and real-world applications of StoreX Paging at TikTok.", - "startsAt": "2024-09-20T11:15:00", - "endsAt": "2024-09-20T11:55:00", + "id": "736447", + "title": "You don't have to run it locally! How to run your emulators in the cloud.", + "description": "Probably every Android engineer has tried running Android Emulator on their laptops. Many companies have experience running Android Emulators in CI pipelines for testing. But what does it take to run a highly interactive emulator in the cloud? Why would one need to run an emulator in the cloud?\r\n\r\nAt Uber we know how to build Cloud Development Environments. And now we expanded into Android Emulator space. Providing our engineers with zero setup emulators. \r\n\r\nWe'll walk you through all the moving parts of the emulator setup in a dev environment that sparks joy. Share the challenges we had and opportunities we discovered.", + "startsAt": "2024-11-01T13:50:00", + "endsAt": "2024-11-01T14:30:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "370405c2-9e0a-4dca-bcdd-fa300cf4cc2f", - "name": "Matt Ramotar" - }, - { - "id": "03c63012-49c4-44eb-af96-0f5360b0d187", - "name": "Ishan Khanna" + "id": "695e56a6-62a8-496b-9082-8cc4dadec337", + "name": "Petras Vičiūnas" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254880, - "name": "Advanced" + "id": 264350, + "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254888, - "name": "Cross-Platform" - }, - { - "id": 254892, - "name": "Kotlin" - }, - { - "id": 254895, - "name": "Coroutines" + "id": 264380, + "name": "Tooling" }, { - "id": 254897, - "name": "Libraries" + "id": 264394, + "name": "CI/CD" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 49272, + "room": "Things", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -2561,60 +5683,64 @@ }, { "questionAnswers": [], - "id": "722292", - "title": "K2 compiler in production", - "description": "Sergei will talk about the K2 Kotlin compiler and its use in production environments. K2 is a new addition to the Kotlin compiler toolchain that is designed to improve the performance and efficiency of Kotlin compilation. Although still relatively new, K2 is a powerful tool for Kotlin developers who want to build fast, efficient, and reliable applications. In this talk, we will explore the benefits of using K2 in production environments and discuss how it can help improve the performance of your Kotlin builds. We will discuss the impact of K2 on clean and incremental build speeds and share independent benchmarks from a relatively large codebase at Meta.", - "startsAt": "2024-09-20T11:15:00", - "endsAt": "2024-09-20T11:55:00", + "id": "734664", + "title": "Cutting-Edge-to-Edge in Android 15: Using Previews and Testing in Jetpack Compose to Manage Insets.", + "description": "With the advent of Android 15, edge-to-edge design has become the default configuration. Consequently, applications must be capable of accommodating window insets, including the system status bar and navigation bar, as well as supporting drawing under display cutouts and other system UI elements. This presentation will address the most prevalent challenges encountered when supporting such a diverse range of UI configurations. Additionally, it will illustrate how to utilize Android previews and testing with Jetpack Compose to effectively navigate this complexity and guarantee an optimal user experience across all scenarios.", + "startsAt": "2024-11-01T13:50:00", + "endsAt": "2024-11-01T14:30:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "8466c9d8-0d23-41da-a283-80632a241057", - "name": "Sergei Rybalkin" + "id": "257fcb0c-cc84-4892-a1f1-54985071e0a6", + "name": "Timo Drick" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254891, - "name": "Android" + "id": 264358, + "name": "Jetpack Compose" }, { - "id": 254892, - "name": "Kotlin" + "id": 264363, + "name": "Testing" + }, + { + "id": 264384, + "name": "Android" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 53981, + "room": "Stadia", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -2623,68 +5749,64 @@ }, { "questionAnswers": [], - "id": "722175", - "title": "Extending kotlin-inject for fun & profit", - "description": "Kotlin-inject is a dependency injection framework for Kotlin Multiplatform. It verifies the dependency graph during compilaton and generates the necessary code to instantiate the object graph at runtime. It offers a similar feature set as Dagger 2 without the limitation of being tied to the JVM and Android only. \r\n\r\nThis talk will offer a short introduction to kotlin-inject and discuss its benefits and downsides and how the framework scales in large, modularized code bases. To close some of the gaps and solve project specific use cases KSP and custom code generators will be used to extend the framework and to give us features similar to the ones Anvil provides for Dagger 2. These practical examples serve as an introduction and blueprint into the meta-programming world to reduce boilerplate and simplify patterns in your code base.", - "startsAt": "2024-09-20T11:15:00", - "endsAt": "2024-09-20T11:55:00", + "id": "704275", + "title": "The state of code coverage for Kotlin", + "description": "Nowadays it’s not anymore a question whether we want to write tests or not. Writing unit tests is not “nice-to-have” it’s an essential part of our everyday job. While that’s already a great step forward, how can we be sure our tests are actually testing something. To check this we all use code coverage tools.\r\n\r\nIn this presentation you will learn how code coverage for Kotlin works, which tools we can use and what are the challenges and limitations of various approaches. You will learn the difference between line, instruction and condition coverage and how to read and interpret coverage results in Kotlin.\r\n\r\nIn the last part of this presentation we will cover the future for Kotlin Code Coverage, what is missing and what can be improved in the future.", + "startsAt": "2024-11-01T13:50:00", + "endsAt": "2024-11-01T14:30:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "646237bf-ccc5-43fa-a659-0b361b08d651", - "name": "Ralf Wondratschek" + "id": "eeb25beb-5d37-4fb7-acac-170357a1d89b", + "name": "Marharyta Nedzelska" + }, + { + "id": "d2ddc9e3-35b6-44a9-8daa-144d89cabaff", + "name": "Evgeny Mandrikov" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254892, + "id": 264359, "name": "Kotlin" }, { - "id": 254896, - "name": "Dagger" - }, - { - "id": 254897, - "name": "Libraries" - }, - { - "id": 254904, - "name": "Modularization" + "id": 264363, + "name": "Testing" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49958, - "room": "Fountain Room", + "roomId": 53982, + "room": "Nest", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -2693,60 +5815,128 @@ }, { "questionAnswers": [], - "id": "721651", - "title": "Coroutines Internals: How The Sausage is Made", - "description": "This talk is for the curious developer who uses coroutines and wants to understand their inner workings. What does it mean to be a lightweight thread? How are suspensions implemented? What is the role of the compiler in the process? \r\n\r\nWe'll talk about continuations, thread management, integration points with Android, and we'll even re-implement common suspendable functions. This will be a deep dive, expect to read code, some of which was not meant for most developers to see. ", - "startsAt": "2024-09-20T11:15:00", - "endsAt": "2024-09-20T11:55:00", + "id": "764398", + "title": "Ask Android! - Compose, WearOS, Platform", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T13:50:00", + "endsAt": "2024-11-01T14:30:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "c6489aef-00e1-476b-a58a-000f3b05bb95", - "name": "Philippe Breault" + "id": "2fb0b020-9fa9-49f1-b4a4-54f71dca57c5", + "name": "Kseniia Shumelchyk" + }, + { + "id": "1dfe9bb5-d9bf-41a9-b7d6-dcfd7953e941", + "name": "Nick Butcher" + }, + { + "id": "e4292032-5462-494b-abfd-3898301476e2", + "name": "Rebecca Franks" + }, + { + "id": "9079b8b4-be1f-4213-a446-6b2bdcad0c04", + "name": "Fung Lam" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 306233, + "name": "Office Hours" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", + "categoryItems": [], + "sort": 4 + } + ], + "roomId": 54706, + "room": "Ask Android", + "liveUrl": null, + "recordingUrl": null, + "status": "Accepted", + "isInformed": true, + "isConfirmed": true + }, + { + "questionAnswers": [], + "id": "764399", + "title": "Ask Android! - Compose, WearOS, Platform", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T14:30:00", + "endsAt": "2024-11-01T14:50:00", + "isServiceSession": false, + "isPlenumSession": false, + "speakers": [ + { + "id": "2fb0b020-9fa9-49f1-b4a4-54f71dca57c5", + "name": "Kseniia Shumelchyk" + }, + { + "id": "1dfe9bb5-d9bf-41a9-b7d6-dcfd7953e941", + "name": "Nick Butcher" + }, + { + "id": "9079b8b4-be1f-4213-a446-6b2bdcad0c04", + "name": "Fung Lam" + }, + { + "id": "c16c95a9-0e07-4838-9cba-5d041aee4d14", + "name": "Rebecca Franks" + } + ], + "categories": [ + { + "id": 74391, + "name": "Level", "categoryItems": [ { - "id": 254892, - "name": "Kotlin" - }, + "id": 264350, + "name": "Intermediate" + } + ], + "sort": 0 + }, + { + "id": 74392, + "name": "Session format", + "categoryItems": [ { - "id": 254895, - "name": "Coroutines" + "id": 306233, + "name": "Office Hours" } ], - "sort": 3 + "sort": 1 + }, + { + "id": 74393, + "name": "Tags", + "categoryItems": [], + "sort": 4 } ], - "roomId": 52283, - "room": "Sapphire Room", + "roomId": 54706, + "room": "Ask Android", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -2755,64 +5945,68 @@ }, { "questionAnswers": [], - "id": "720754", - "title": "Building Modern Responsive Widgets with Jetpack Glance", - "description": "In this lightning talk, we’ll explore how to get started with building responsive widgets using Jetpack Glance, a modern toolkit designed to simplify and enhance the widget development experience on Android. We’ll discuss the key differences between Jetpack Glance and RemoteViews, providing a clear pathway for migrating existing widgets to this new framework. Learn how to leverage the strengths of both Jetpack Glance and RemoteViews simultaneously, ensuring a smooth transition and backward compatibility. Additionally, we'll cover best practices for testing your widgets to ensure they perform flawlessly on a wide range of devices. Join us to discover how Jetpack Glance can revolutionize your approach to building widgets on Android.", - "startsAt": "2024-09-20T12:10:00", - "endsAt": "2024-09-20T12:30:00", + "id": "693397", + "title": "Crime Scene InvestiGITor", + "description": "THERE HAS BEEN A MURDER!\r\n...\r\n(Or whatever the code version of a murder is... like breaking unit tests, a bug maybe?... I dunno!)\r\n\r\nTogether, we will learn how to become a professional and revered investiGITor, who will be able to sniff out and solve any version control offence with the ease and panache of a seasoned detective!\r\n\r\nVersion control software is often a mysterious black-box that we HAVE TO interact with in order to successfully collaborate with others. But what if it doesn't need to be a confusing & complicated enigma?\r\n\r\nYou will learn to probe into the dark recesses of Git and understand its inner workings by learning how to carry out many tasks that you will undoubtedly need to perform at some point in your career.\r\n\r\nFor example:\r\n* Ever needed to safely remove a secret that you accidentally stored in the repository?\r\n* Ever had your app break, not know why, and then needed to quickly hunt down the exact commit where a bug was introduced?\r\n* Ever needed to travel back in time, through history, to stop a crime before it even happens...(sort of)?\r\n\r\n...All these things and a bunch more useful & interesting, lesser-known ways to become a masterful git detective and truly understand the most important tool in a developer's arsenal.\r\n\r\nSo come have a little fun with me in this talk, bring the bugs to justice, solve the case of the naughty commit & become a hero by defending the integrity of your codebase!", + "startsAt": "2024-11-01T14:50:00", + "endsAt": "2024-11-01T15:30:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "910f395b-9d2b-4f7d-8ab4-c4008bd9f0c4", - "name": "Jonathan Petit-Frere" + "id": "5f8860b3-e669-4717-91bf-ddceb872fd55", + "name": "Benjamin Kadel" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254878, - "name": "Introductory and overview" + "id": 264350, + "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254881, - "name": "Lightning talk" + "id": 264354, + "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254891, - "name": "Android" + "id": 264368, + "name": "Techniques & Guides" }, { - "id": 254892, - "name": "Kotlin" + "id": 264369, + "name": "Other" }, { - "id": 254897, - "name": "Libraries" + "id": 264380, + "name": "Tooling" + }, + { + "id": 264394, + "name": "CI/CD" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 49270, + "room": "Hangouts", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -2821,68 +6015,84 @@ }, { "questionAnswers": [], - "id": "671488", - "title": "How we automated code maintenance and you can too!", - "description": "Let's face it: as developers, we dedicate a third of our time to code maintenance, which includes tasks such as upgrading dependencies, addressing security vulnerabilities, and removing obsolete code. This is tedious and repetitive. Neglecting regular maintenance can lead to costly outcomes, including unexpected crashes and it makes the codebase more difficult to understand and evolve.\r\n\r\nHowever, automation of these tasks is not always straightforward. Existing tools such as security scanners, feature flag systems warn you about the issues or obsolete code but fall short of automatically rectifying these problems. Tools that upgrade dependencies merely increase the version number, leaving engineers to handle any API compatibility issues. Automating code changes is hard, and the polyglot nature of modern development makes it harder.\r\n\r\nIn this talk, we will delve into code rewriting techniques such as pattern matching, program analysis, and AI. We will illustrate how we leveraged the complementing power of these tools to generate over 1800 automated pull requests, eliminating or refactoring more than 500,000 lines of code. In this talk, you will also learn how to harness the power of these tools to drive down tech debt, ensuring your apps are not only functional but also future-proof.", - "startsAt": "2024-09-20T12:10:00", - "endsAt": "2024-09-20T12:30:00", + "id": "720685", + "title": "Why is adaptive layout a nightmare?", + "description": "Dive into the captivating realm of Android UI development in this session where we will share in-depth expertise on designing versatile user interfaces. Together, we will explore the complex challenges of organizing and building UI components, providing unique insights into crafting seamless user experiences across a variety of devices such as phones, foldables, and tablets.\r\n\r\nWhile Google advocates for the use of adaptive layout, we will unveil the often underestimated nuances, shed practical light on overcoming obstacles you’ll meet down the road and help you create truly adaptive Android applications.", + "startsAt": "2024-11-01T14:50:00", + "endsAt": "2024-11-01T15:30:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "a09470ca-e749-4fe1-94cd-03e1d82a596d", - "name": "Gautam Korlam" + "id": "6520ad1e-8c4e-45c1-b34d-91ca73db27fe", + "name": "Gerard Paligot" }, { - "id": "98e9d194-970d-4836-b451-0c7f62663c37", - "name": "Lazaro Clapp" + "id": "81f9ecbf-c08c-48c7-850f-1e79e1439867", + "name": "David Ta" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, - "name": "Intermediate" + "id": 264349, + "name": "Introductory and overview" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254881, - "name": "Lightning talk" + "id": 264354, + "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254886, - "name": "Tooling" + "id": 264358, + "name": "Jetpack Compose" }, { - "id": 254889, - "name": "AI/ML" + "id": 264359, + "name": "Kotlin" }, { - "id": 254900, - "name": "Security" + "id": 264364, + "name": "Compose" + }, + { + "id": 264367, + "name": "Foldables" + }, + { + "id": 264377, + "name": "Modern Android Development" + }, + { + "id": 264384, + "name": "Android" + }, + { + "id": 264390, + "name": "UI/UX" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 49271, + "room": "Glass", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -2891,68 +6101,60 @@ }, { "questionAnswers": [], - "id": "721044", - "title": "Mobile App Security : Threat Landscape : Attack & Defend, Defend & Monitor, Monitor & Respond", - "description": "The Mobile Threat Landscape is increasing rapidly and Software Engineering and Product Owners are scrambling to close security gaps. This lightning talk will introduce you to the Top Mobile Attacks, OWASP Top Ten Mobile Vulnerabilities as well as Tools and Techniques to make your applications compliant with Cybersecurity Standards like California Consumer Privacy Act.", - "startsAt": "2024-09-20T12:10:00", - "endsAt": "2024-09-20T12:30:00", + "id": "734218", + "title": "Why WhatsApp uses ListView", + "description": "Using outdated ListView on one of the most used screens screens sounds outrageous. Will talk about technical and organisational reasons why and how WhatsApp still uses ListView and what are the challenges preventing migration. ", + "startsAt": "2024-11-01T14:50:00", + "endsAt": "2024-11-01T15:30:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "4990e3a2-c183-44c2-8aec-ff76ac75af8e", - "name": "Keir Storrie" + "id": "e11a53fd-1cfb-4930-9dfa-42187e94d869", + "name": "Hadi Tok" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254878, - "name": "Introductory and overview" + "id": 264350, + "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254881, - "name": "Lightning talk" + "id": 264354, + "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254886, - "name": "Tooling" - }, - { - "id": 254887, - "name": "CI/CD" + "id": 264360, + "name": "Soft Skills" }, { - "id": 254889, - "name": "AI/ML" - }, - { - "id": 254900, - "name": "Security" + "id": 264384, + "name": "Android" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49958, - "room": "Fountain Room", + "roomId": 49272, + "room": "Things", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -2961,51 +6163,68 @@ }, { "questionAnswers": [], - "id": "716138", - "title": "Mobile Wallet Technology - Harnessing Apple VAS and Google Smart TAP for Innovative App Development", - "description": "In this session, we delve into the dynamic landscape of digital wallet technology and explore how Zebra Value Added Services (VAS) can revolutionize your applications. We provide an overview of the technology, potential use cases and details of how your android applications can take advantage of both Apple VAS and Google Wallet technologies ", - "startsAt": "2024-09-20T12:10:00", - "endsAt": "2024-09-20T12:30:00", + "id": "741888", + "title": "Monetizing Your Side Project to $1k in Monthly Revenue and Beyond", + "description": "Only ~17% of apps reach $1k in monthly revenue. Learn best practices on crossing $1k MRR and beyond from personal experience building two profitable apps and advice from other successful app founders.", + "startsAt": "2024-11-01T14:50:00", + "endsAt": "2024-11-01T15:30:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "f50b0148-337b-4213-b22a-48b8681e7486", - "name": "Marek Trusinski" + "id": "0e4f3abe-cc6c-409a-8f34-e346f23c0cc4", + "name": "Jeffrey Bunn" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254878, - "name": "Introductory and overview" + "id": 264350, + "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254881, - "name": "Lightning talk" + "id": 264354, + "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [], - "sort": 3 + "categoryItems": [ + { + "id": 264360, + "name": "Soft Skills" + }, + { + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264369, + "name": "Other" + }, + { + "id": 264381, + "name": "Cross-Platform" + } + ], + "sort": 4 } ], - "roomId": 52283, - "room": "Sapphire Room", + "roomId": 53981, + "room": "Stadia", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -3014,51 +6233,60 @@ }, { "questionAnswers": [], - "id": "706390", - "title": "Building a performant and privacy-conscious screen capture library for Compose", - "description": "User feedback and crash reports often fall short in providing a complete understanding of user behavior and bug causes. Supplementing these reports with a series of screen captures depicting the user journey can prove invaluable for any comprehensive analysis.\r\n\r\nLearn about a novel approach for implementing a screen capture library that is safe to run in production:\r\n✅ Does not impact app responsiveness\r\n✅ Requires minimal disk and network usage\r\n✅ Respects user privacy\r\n\r\nEven though this is reasonably trivial to do for standard Android views, Jetpack Compose introduces a unique set of challenges for external libraries to efficiently observe the view hierarchy and react to recomposition changes. Join us as we dig deep into the strategies used to overcome these obstacles in this session.", - "startsAt": "2024-09-20T13:40:00", - "endsAt": "2024-09-20T14:20:00", + "id": "719034", + "title": "Navigation in a Multiplatform World: Choosing the Right Framework for your App", + "description": "Navigation in mobile, desktop, and web applications is such a fundamental part of how we structure our architecture. In order to both obtain functional clarity, and abstraction from platform level implementation.\r\n\r\nFor a long time, there have been options available specific to each platform, and even options part of the platform framework itself. Though it can be difficult to find the right option for platform-agnostic code, ensuring consistency. Some go one step further, providing an opinionated guide on how to architecture your application.\r\n\r\nIn this talk, I'll evaluate the options available, how they differ, and to what type of applications they are best suited. Including how to get started with them, and the best practice guidelines on how to get the most out of them, for your application.", + "startsAt": "2024-11-01T14:50:00", + "endsAt": "2024-11-01T15:30:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "7d34e53f-e477-4218-9f03-cc372425ac0e", - "name": "Miguel Juarez Lopez" + "id": "10659767-356c-4cd5-ba9c-12cec7a3ce79", + "name": "Ash Davies" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, - "name": "Intermediate" + "id": 264351, + "name": "Advanced" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [], - "sort": 3 + "categoryItems": [ + { + "id": 264359, + "name": "Kotlin" + }, + { + "id": 264380, + "name": "Tooling" + } + ], + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 53982, + "room": "Nest", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -3067,68 +6295,67 @@ }, { "questionAnswers": [], - "id": "718114", - "title": "Declarative Gradle on Android", - "description": "Declarative Gradle is a project that targets better isolation of concern and expressing any build clearly and understandably. It is our key initiative towards improving the developer experience and maintainability of Gradle projects. Declarative Gradle will feature first class support for the Android ecosystem including AGP, KGP, and Android Studio integration.\r\n\r\nIn this presentation, we will discuss the current state of Declarative Gradle for Android development. We will preview the proposed configuration language, examples of Android projects, and integration with Android Studio. We will discuss our future plans and the Declarative Gradle roadmap. We are seeking early feedback from Android software developers.", - "startsAt": "2024-09-20T13:40:00", - "endsAt": "2024-09-20T14:20:00", + "id": "764400", + "title": "Ask Android! - Compose, WearOS, Platform", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T14:50:00", + "endsAt": "2024-11-01T15:30:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "dc1c88ef-dbfd-4b41-a567-7ce8e7645420", - "name": "Inaki Villar" + "id": "b99dc2e2-df83-4045-a5cb-c4d7dea5db1e", + "name": "Halil Ozercan" + }, + { + "id": "2fb0b020-9fa9-49f1-b4a4-54f71dca57c5", + "name": "Kseniia Shumelchyk" + }, + { + "id": "9079b8b4-be1f-4213-a446-6b2bdcad0c04", + "name": "Fung Lam" }, { - "id": "89694c9d-5de0-4f39-a50a-ed48d6eb56ca", - "name": "Nelson Osacky" + "id": "b5b73a2f-d57d-4a42-b787-a93f4ca9ba79", + "name": "Simona Milanovic" + }, + { + "id": "b3baa5b6-3c85-4a36-97c5-9a252f887ae4", + "name": "Jelle Fresen" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 306233, + "name": "Office Hours" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [ - { - "id": 254886, - "name": "Tooling" - }, - { - "id": 254891, - "name": "Android" - }, - { - "id": 254899, - "name": "Gradle" - } - ], - "sort": 3 + "categoryItems": [], + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 54706, + "room": "Ask Android", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -3137,56 +6364,67 @@ }, { "questionAnswers": [], - "id": "732937", - "title": "Build adaptive apps with Jetpack Compose", - "description": "In this workshop you will learn how to build adaptive apps for phones, tablets, and foldables, and how they enhance reachability with Jetpack Compose. You will also learn best practices for using Material 3 components and theming. You will explore how to use and think about adaptability when using Jetpack Compose. You build an application, called Reply, that shows you how to implement adaptability for all kinds of screens, and how adaptability and reachability work together to give users an optimal experience.", - "startsAt": "2024-09-20T13:40:00", - "endsAt": "2024-09-20T14:20:00", + "id": "764404", + "title": "Ask Android! - Compose, Gemini in AS, KMP", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T15:30:00", + "endsAt": "2024-11-01T15:45:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "327f56b4-c631-4489-9590-37bdfc856e3a", - "name": "Miguel Montemayor" + "id": "b99dc2e2-df83-4045-a5cb-c4d7dea5db1e", + "name": "Halil Ozercan" + }, + { + "id": "b5b73a2f-d57d-4a42-b787-a93f4ca9ba79", + "name": "Simona Milanovic" + }, + { + "id": "b3baa5b6-3c85-4a36-97c5-9a252f887ae4", + "name": "Jelle Fresen" + }, + { + "id": "7280b9e7-ddf7-4cfb-b85b-1e998d851f66", + "name": "Marcello Galhardo" + }, + { + "id": "eb4483f1-306b-447d-9888-648ec0fc0018", + "name": "Chris Sinco" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254883, - "name": "Workshop" + "id": 306233, + "name": "Office Hours" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [ - { - "id": 254891, - "name": "Android" - } - ], - "sort": 3 + "categoryItems": [], + "sort": 4 } ], - "roomId": 49958, - "room": "Fountain Room", + "roomId": 54706, + "room": "Ask Android", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -3195,72 +6433,68 @@ }, { "questionAnswers": [], - "id": "702926", - "title": "Math and Modeling for Camera Developers", - "description": "Abstract: \r\nModern cameras are sophisticated devices that rely on a combination of intricate hardware and complex software algorithms to produce high-quality images. Understanding the underlying mathematics and modeling techniques is crucial for camera developers to optimize performance, correct imperfections, and deliver exceptional image quality. The Camera2 API exposes many of these details and developers would benefit significantly by knowing how to work with them.\r\n\r\nThis talk will delve into :\r\n - Camera intrinsics and extrinsics, which describe the geometric relationship between the camera and the scene.\r\n- Lens distortion correction using the Brown-Conrady model.\r\n- Meaning of various maps exposed in the Camera2 API such as hot pixel map, lens shading map\r\n- and more\r\n\r\nTarget Audience:\r\n\r\nAndroid developers seeking to build or enhance camera-centric applications. Especially those who are building apps seeking to use cameras on Android to understand the world around them, eg: AR based apps\r\n\r\nTakeaways:\r\nBy the end of the talk you will have a good understanding of the mathematical models needed to process images captured by your Android device's camera and use them for innovative applications. \r\n\r\n", - "startsAt": "2024-09-20T13:40:00", - "endsAt": "2024-09-20T14:20:00", + "id": "717692", + "title": "Level up your SDKs with KMP - no rewrite required!", + "description": "There are several compelling reasons to explore adding Kotlin Multiplatform (KMP) to your existing SDKs or libraries. The main one - to reduce development time and cut maintenance costs by having a single codebase for shared logic.\r\n\r\nBut what if you already have a suite of tried and tested native SDKs, and want to simply add KMP capabilities to broaden your audience, without impacting existing customers? Or perhaps you’re adding functionality on top of your SDKs and want to build it once instead of duplicating it in 2, 3, or 4 programming languages?\r\n\r\nI’ll share our experiences at PubNub with bringing three of our realtime messaging SDKs - TypeScript, Swift and JVM, under a unified KMP API. I’ll also show how this foundation then enabled us to build and ship a new Chat SDK on top, built with KMP from the ground up and targeting all 3 platforms.\r\n\r\nThe talk will cover the initial requirements phase, the architectural decisions, and the tradeoffs that we had to make to finally land on KMP as the chosen solution.\r\n\r\nWe'll then delve into practical code examples and solutions (as well as quite a few WTF moments!) that allowed us to build the Chat SDK without affecting our existing users, and even improved the quality and consistency of our native SDKs.\r\n\r\n", + "startsAt": "2024-11-01T15:45:00", + "endsAt": "2024-11-01T16:25:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "1d0d817a-c0aa-4ca5-9d21-ad67fac74a81", - "name": "Jayant Chowdhary" - }, - { - "id": "1eae811c-9c84-4516-b13f-92397d260ded", - "name": "Kailiang Chen" - }, - { - "id": "5b1f8159-fd45-4e94-b4a9-a6632c462ebb", - "name": "Avichal Rakesh" + "id": "ffd6d0b9-9615-4f5a-9f58-6dcf3d4acb3b", + "name": "Wojtek Kaliciński" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254880, + "id": 264351, "name": "Advanced" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254888, - "name": "Cross-Platform" + "id": 264359, + "name": "Kotlin" }, { - "id": 254890, - "name": "AR/VR" + "id": 264361, + "name": "KMP" }, { - "id": 254891, - "name": "Android" + "id": 264374, + "name": "API" + }, + { + "id": 264381, + "name": "Cross-Platform" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 52283, - "room": "Sapphire Room", + "roomId": 49270, + "room": "Hangouts", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -3269,64 +6503,64 @@ }, { "questionAnswers": [], - "id": "725067", - "title": "Cross-platform Animations with Rive", - "description": "Learn how Duolingo builds cross platform animated features with Rive. We'll introduce Rive, some of its applications across Duolingo for Android, and how to use Rive - including Compose interaction!", - "startsAt": "2024-09-20T14:35:00", - "endsAt": "2024-09-20T14:55:00", + "id": "730918", + "title": "Upgrading Meta's Kotlin Infrastructure to K2: A Migration Journey", + "description": "In this talk, we will share our experience migrating Meta's Kotlin infrastructure from K1 to K2. We will discuss the challenges we faced during the migration process, including differences in error handling between K1 and K2, and how we overcame them. We will also cover the process of migrating compiler plugins, including overview of plugins we migrated and the solutions we implemented to overcome challenges. Finally, we will discuss our experience with the KSP2.0 migration.\r\nThis talk will provide valuable insights for developers and teams considering a migration to K2, as well as those interested in learning more about the challenges and solutions involved in large-scale migrations.\r\n\r\nKeywords: K2, Kotlin 2.0, Kotlin compiler plugins", + "startsAt": "2024-11-01T15:45:00", + "endsAt": "2024-11-01T16:25:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "8d1c299e-adc3-4c21-a461-5fbd43cba26e", - "name": "Judy Lin" + "id": "33801296-8d41-4df0-b729-c0461afa1be2", + "name": "Ruslan Latypov" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254878, - "name": "Introductory and overview" + "id": 264351, + "name": "Advanced" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254881, - "name": "Lightning talk" + "id": 264354, + "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254888, - "name": "Cross-Platform" + "id": 264359, + "name": "Kotlin" }, { - "id": 254897, - "name": "Libraries" + "id": 264374, + "name": "API" }, { - "id": 254902, - "name": "UI/UX" + "id": 264380, + "name": "Tooling" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 49271, + "room": "Glass", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -3335,64 +6569,56 @@ }, { "questionAnswers": [], - "id": "721974", - "title": "\"Bundle\" Up and Save: Powering Room with Bundled SQLite", - "description": "As part of the Room KMP release, a less known library was significantly updated to support Room KMP, androidx.sqlite. The library was transformed to be beyond a simple backwards compatible Jetpack library for the Android platform. Via its new 'driver' APIs, it offers the building blocks to create low-level integrations that enables Room to communicate with the desired SQL engine. This lighting talk will go through the APIs, what it enables; such as Bundled SQLite, and how you could use it in your Android applications to provide extra functionality that the platform or Room does not offer out of the box.", - "startsAt": "2024-09-20T14:35:00", - "endsAt": "2024-09-20T14:55:00", + "id": "731808", + "title": "Streamlining Permission Request in Jetpack Compose", + "description": "Managing Android permission requests often involve considerable boilerplate code, and while Jetpack Compose offers many advantages, it has not simplified this aspect. It can add complexity if not properly designed. This talk will demonstrate an efficient method for creating a reusable Android permission request flow with minimal boilerplate using Jetpack Compose. By the end of this session, you will learn how to implement a reusable permission request handler for single and multiple permissions. Additionally, you'll discover how to provide custom permission rationale messages and design a custom permission request UI with minimal boilerplates, enhancing developer experience and application usability.\r\n\r\nKey Takeaways\r\n1. Understanding Permission Management in Android: A quick overview of the challenges in handling permission requests within the context of Android development.\r\n\r\n2. Identifying Boilerplate in Permission Requests: Examination of the typical boilerplate code associated with permission requests in Jetpack Compose.\r\n\r\n3. Efficient Permission Handling: Step-by-step guide on creating a reusable permission request handler for single and multiple permissions.\r\n\r\n4. Customization Techniques: How to implement custom permission rationale messages and design custom UI components for permission requests.", + "startsAt": "2024-11-01T15:45:00", + "endsAt": "2024-11-01T16:25:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "695a18df-c473-408f-bdfb-b0c594c8c50d", - "name": "Daniel Santiago Rivera" + "id": "3b95e79a-0e6b-4fcd-b44e-023fa3dfd7cd", + "name": "Mayowa Egbewunmi" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254881, - "name": "Lightning talk" + "id": 264354, + "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254891, - "name": "Android" - }, - { - "id": 254892, - "name": "Kotlin" - }, - { - "id": 254897, - "name": "Libraries" + "id": 264358, + "name": "Jetpack Compose" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 49272, + "room": "Things", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -3401,56 +6627,56 @@ }, { "questionAnswers": [], - "id": "720124", - "title": "Sneaky SDKs: Things You Didn't Know Third-Party SDKs Could Do", - "description": "In the world of Android development, third-party SDKs are both a curse and a blessing. They offer essential functionalities, saving us from reinventing the wheel, but they can also introduce unexpected behaviors and vulnerabilities. This talk will uncover a few hidden powers of low level Android APIs and demonstrate how they can be both helpful and harmful.", - "startsAt": "2024-09-20T14:35:00", - "endsAt": "2024-09-20T14:55:00", + "id": "735413", + "title": "Let's build a performance measuring tool from scratch", + "description": "Did you know you can measure the performance of production apps? Android is based on Linux, so that gives us a lot of power!\r\nThrough live-coding, let's have fun exploring system files, low-level events and the Android source code to see how we can gather metrics (FPS, CPU, RAM) on your favourite apps!\r\nYou'll gain more insights on how Android work under the hood and why measuring performance can be crucial but complex.", + "startsAt": "2024-11-01T15:45:00", + "endsAt": "2024-11-01T16:25:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "71373c0f-53e8-4020-8d16-1bdfe603c3c7", - "name": "Markus Hintersteiner" + "id": "ae4dc258-34a6-462c-b778-807da7d25de4", + "name": "Alexandre Moureaux" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, - "name": "Intermediate" + "id": 264351, + "name": "Advanced" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254881, - "name": "Lightning talk" + "id": 264354, + "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254891, - "name": "Android" + "id": 264380, + "name": "Tooling" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49958, - "room": "Fountain Room", + "roomId": 53981, + "room": "Stadia", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -3459,60 +6685,68 @@ }, { "questionAnswers": [], - "id": "693098", - "title": "The Critical Need for More Android Mentors", - "description": "Android Development can be considered an untraditional software discipline. While many young professionals are drawn to trendy positions like AI and Blockchain Engineering or traditional roles such as Backend and Web Development, Mobile is becoming less and less popular in the modern workspace. Many universities do not adequately educate for these roles, so it is up to us to inspire younger engineers to join our field. This session will overview the history of mobile development as a professional career, and the current position of the role amongst others. It will also discuss the benefits of becoming a mentor, and I'll share some incredibly rewarding moments and lessons I've taken from my time teaching Android.", - "startsAt": "2024-09-20T14:35:00", - "endsAt": "2024-09-20T14:55:00", + "id": "709201", + "title": "Passwordless Future !!", + "description": "Passwords: no one likes them.\r\n\r\nWith so many requirements—capital letters, numbers, symbols—and the challenge of remembering a strong one, passwords often become more of a hassle than a security measure. Even the most complex passwords can be vulnerable to hackers who can guess, steal, or trick you into revealing them.\r\n\r\nThankfully, a better solution exists, which we will explore in today’s session: Passkeys.\r\n\r\nWhat You'll Learn:\r\n- An introduction to Passkeys and the primary reasons for their implementation.\r\n- Integration of Passkeys and demos into Android apps using the credential API.\r\n- How users can sign in to apps and websites using biometric sensors (fingerprint or facial recognition), PINs, or patterns, creating a seamless sign-in experience that eliminates the need for usernames or passwords.\r\n- Best practices for implementing Passkeys in your applications to maximize both security and user convenience.\r\n- Case studies and examples of successful Passkey integration in real-world applications.\r\n\r\nTarget Audience:\r\nThis talk is ideal for mobile developers of all levels who are interested in:\r\n- Smoothing the login experience for their users across various platforms.\r\n- Enhancing security for their apps.\r\n- Staying ahead with modern authentication methods to improve user retention and satisfaction.", + "startsAt": "2024-11-01T15:45:00", + "endsAt": "2024-11-01T16:25:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "45f252dd-d465-4a2f-ade2-a405d8ff73d0", - "name": "Dan Peluso" + "id": "0037b354-6bd4-46e3-b1e6-d84916eea0d6", + "name": "Ayushi Gupta" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254878, - "name": "Introductory and overview" + "id": 264350, + "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254881, - "name": "Lightning talk" + "id": 264354, + "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254891, + "id": 264368, + "name": "Techniques & Guides" + }, + { + "id": 264377, + "name": "Modern Android Development" + }, + { + "id": 264384, "name": "Android" }, { - "id": 254892, - "name": "Kotlin" + "id": 264385, + "name": "Design" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 52283, - "room": "Sapphire Room", + "roomId": 53982, + "room": "Nest", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -3521,60 +6755,67 @@ }, { "questionAnswers": [], - "id": "722149", - "title": "Building a Compose-idiomatic CameraX Viewfinder: A Deep Dive", - "description": "The CameraX library offers powerful tools for building camera features in Android apps, but its integration with Jetpack Compose can be challenging. In this session we'll retrace our steps in creating a Compose-idiomatic Composable for the CameraX Viewfinder.\r\n\r\n- CameraX already has a view based PreviewView, we'll talk about the limitations of wrapping it with AndroidView.\r\n\r\n- Discuss the benefits of a Compose-first approach for seamless UI integration, state management, and a more natural development experience.\r\n\r\n- What it means to make a Compose idiomatic Composable\r\n\r\n- Dive into the complexities of aligning the Compose coordinate space with the CameraX coordinate space using the CoordinateTransformer", - "startsAt": "2024-09-20T15:25:00", - "endsAt": "2024-09-20T16:05:00", + "id": "764406", + "title": "Ask Android! - Compose, Gemini in AS, KMP", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T15:45:00", + "endsAt": "2024-11-01T16:25:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "74839782-d3e1-4b61-9fdc-6b1507a46012", - "name": "Yasith Vidanaarachchi" + "id": "7a8a22c6-5b01-4f0a-bc04-12d4ada5de21", + "name": "Jossi Wolf" + }, + { + "id": "b5b73a2f-d57d-4a42-b787-a93f4ca9ba79", + "name": "Simona Milanovic" + }, + { + "id": "7280b9e7-ddf7-4cfb-b85b-1e998d851f66", + "name": "Marcello Galhardo" + }, + { + "id": "eb4483f1-306b-447d-9888-648ec0fc0018", + "name": "Chris Sinco" + }, + { + "id": "f4580454-6603-44a8-9fcd-e98fe6cc8981", + "name": "Matvei Malkov" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254880, - "name": "Advanced" + "id": 264350, + "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 306233, + "name": "Office Hours" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [ - { - "id": 254891, - "name": "Android" - }, - { - "id": 254892, - "name": "Kotlin" - } - ], - "sort": 3 + "categoryItems": [], + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 54706, + "room": "Ask Android", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -3583,60 +6824,67 @@ }, { "questionAnswers": [], - "id": "721789", - "title": "How we boosted ExoPlayer performance by 30%", - "description": "Video has become an integral part of our lives, and we are witnessing a significant rise in the integration of video content within Android apps. Reddit is not an exception: we have more than 20 video surfaces in our app.\r\n\r\nIn this talk, I'll share our journey of improving video rendering by 30% over the last 6 months and approaches that go beyond what is documented.\r\n\r\nWe'll discuss:\r\n- Video metrics and what's important there\r\n- Lifecycle and challenges\r\n- Single instance of player vs PlayerPool\r\n- SurfaceView vs TextureView performance\r\n- ViewPool and AndroidView pitfalls with Jetpack Compose\r\n- Potential problems with caching\r\n\r\nEverything that will be mentioned is validated through real production scenarios and confirmed in efficiency by A/B tests on millions of Daily Active Users in the Reddit app.", - "startsAt": "2024-09-20T15:25:00", - "endsAt": "2024-09-20T16:05:00", + "id": "764408", + "title": "Ask Android! - Compose, Gemini in AS, KMP", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T16:25:00", + "endsAt": "2024-11-01T16:40:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "61cc0eba-ac00-414b-9cf7-5525040a4bdd", - "name": "Alexey Bykov" + "id": "7a8a22c6-5b01-4f0a-bc04-12d4ada5de21", + "name": "Jossi Wolf" + }, + { + "id": "b5b73a2f-d57d-4a42-b787-a93f4ca9ba79", + "name": "Simona Milanovic" + }, + { + "id": "7280b9e7-ddf7-4cfb-b85b-1e998d851f66", + "name": "Marcello Galhardo" + }, + { + "id": "eb4483f1-306b-447d-9888-648ec0fc0018", + "name": "Chris Sinco" + }, + { + "id": "f4580454-6603-44a8-9fcd-e98fe6cc8981", + "name": "Matvei Malkov" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 306233, + "name": "Office Hours" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [ - { - "id": 254891, - "name": "Android" - }, - { - "id": 254892, - "name": "Kotlin" - } - ], - "sort": 3 + "categoryItems": [], + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 54706, + "room": "Ask Android", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -3645,72 +6893,56 @@ }, { "questionAnswers": [], - "id": "721657", - "title": "Hue-manize Your Android Apps: Develop for Color Blindness", - "description": "Have you ever wondered how your Android app appears to someone with color blindness or low vision? We will share firsthand how inaccessible apps impact daily life. In this talk, we'll delve into the world of visual impairments, drawing from Sam's personal experience and offering practical strategies to ensure your apps are accessible to all users.\r\n\r\nWe'll uncover common pitfalls, learn how to diagnose issues with tools like Accessibility Scanner and leverage Android’s built-in tools to simulate various vision conditions. You'll leave equipped with the knowledge and tools needed to make visual accessibility a natural part of your Android development workflow.\r\n", - "startsAt": "2024-09-20T15:25:00", - "endsAt": "2024-09-20T16:05:00", + "id": "732470", + "title": "Exploring Kotlin Symbol Processing: A Practical Guide", + "description": "In this session we’ll dive into the world of Kotlin Symbol Processing (KSP). This session aims to provide an introduction to KSP and its benefits compared to the Kotlin Annotation Processing Tool (KAPT).\r\n\r\nThe practical portion of this talk will guide you through the process of creating annotation definitions and implementing a symbol processor. We will demonstrate the usage of KSP API and KotlinPoet for generating Kotlin files, providing you with a hands-on experience of working with KSP. Furthermore, we will demonstrate how to use KSP in multiplatform projects.\r\n\r\nBy the end of this talk, you will walk away with a solid understanding of Kotlin Symbol Processing, and practical knowledge on how to leverage KSP in your development workflow.", + "startsAt": "2024-11-01T16:40:00", + "endsAt": "2024-11-01T17:20:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "598e1141-ce68-4cb2-8e9d-d8c9f5add09c", - "name": "Matt McKenna" - }, - { - "id": "bcd8a1a5-2160-421c-89b8-cb0bf3751bc9", - "name": "Sam Greenberg" + "id": "f589d95b-8262-4337-b6c8-78b4701afa3a", + "name": "Dean Djermanović" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254878, - "name": "Introductory and overview" + "id": 264350, + "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254891, - "name": "Android" - }, - { - "id": 254893, - "name": "Design" - }, - { - "id": 254901, - "name": "Android Studio" - }, - { - "id": 254902, - "name": "UI/UX" + "id": 264359, + "name": "Kotlin" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49958, - "room": "Fountain Room", + "roomId": 49270, + "room": "Hangouts", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -3719,72 +6951,72 @@ }, { "questionAnswers": [], - "id": "716832", - "title": "Compose Multiplatform on iOS: On the Road to Stable", - "description": "Compose Multiplatform on iOS is in Beta, making it the perfect time to start giving it a try! Let’s take a closer look at what the team at JetBrains has done to get here, and have an exclusive look at the subjects we’re getting ready as we move toward a stable release!\r\n\r\nThat includes the ecosystem – well-established Jetpack libraries such as Navigation, ViewModel, DataStore, Lifecycle, and even Room are now available in Kotlin Multiplatform projects. Through practical examples, we’ll explore how building well-architected cross-platform apps with Kotlin is easier than ever.\r\n\r\nIn multiple live demos, we’ll see how the new common APIs can be used in practice, how they fit smoothly into Compose Multiplatform, and how they integrate naturally with iOS. We’ll also see some of the tooling improvements we at JetBrains are making around previews, common resources, and more.\r\n\r\nCompose Multiplatform brings your established skill set to new platforms. And it’s ready for you to start building – on iOS, Android, and beyond!", - "startsAt": "2024-09-20T15:25:00", - "endsAt": "2024-09-20T16:05:00", + "id": "735915", + "title": "Android driver - application of Android device in RC vehicle development", + "description": "TL;DR: This talk will showcase development of remote controlled vehicle with Android powered device as its central unit. \r\n\r\n... and now long version:\r\nStudents and researches around the world often struggle in early stages of development of robotics and hardware projects. The reason? High cost and connection difficulties of all the sensors and effectors for Arduinos, Raspberry Pi's or whatever platform they do choose. All of them have a solution right in their hands - or their pockets - and that is with almost no additional costs. \r\n\r\nBy enabling Android device to act as a part, or center, of embedded system you can unlock vast variety or its capabilities - ones that would cost hundreds of dollars to purchase and dozens of hours to connect & set up. Some of them are:\r\n- LTE access to Internet\r\n- WiFi & bluetooth connectivity\r\n- screen, speakers, microphone, LED light\r\n- accelerometer, gyroscope\r\n- multiple cameras\r\n- biometric sensors\r\nNot to mention higher level of services they offer through countless libraries ready to be used by developers.\r\n\r\n-> By the end of this talk, attendees will discover an innovative & easy way to use Android powered devices to cut down costs of prototyping hardware projects, especially as proposed, by building RC vehicle. ", + "startsAt": "2024-11-01T16:40:00", + "endsAt": "2024-11-01T17:20:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "a82c6942-6e2b-4d80-9883-0b84b932d6ef", - "name": "Sebastian Aigner" + "id": "58038e33-703e-497c-9f47-3624e36418e8", + "name": "Tomasz Słuszniak" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254878, - "name": "Introductory and overview" + "id": 264350, + "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254886, - "name": "Tooling" + "id": 264366, + "name": "Modularization" }, { - "id": 254888, - "name": "Cross-Platform" + "id": 264368, + "name": "Techniques & Guides" }, { - "id": 254891, - "name": "Android" + "id": 264369, + "name": "Other" }, { - "id": 254892, - "name": "Kotlin" + "id": 264370, + "name": "IoT" }, { - "id": 254897, - "name": "Libraries" + "id": 264384, + "name": "Android" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 52283, - "room": "Sapphire Room", + "roomId": 49271, + "room": "Glass", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -3793,64 +7025,72 @@ }, { "questionAnswers": [], - "id": "716782", - "title": "Lost in the Weeds - Exploring Navigation Libraries for Compose", - "description": "One of the most interesting and confusing parts of apps today is navigation. There seems to be so many different ways to go about it: Is it a side effect of your UI layer, is it modeled in the state somehow? Also where do transitions and animations fit in? \r\n\r\nThis fact hasn't changed for Compose-first apps, and I REALLY wanna know the best way to add navigation into my apps.\r\n\r\nIn this talk we'll explore the concept navigation in detail and build our mental model of what navigation in compose is. Then we'll explore three libraries that try and solve navigation in very different ways:\r\n\r\n- Jetpack Navigation\r\n- Appyx\r\n- Circuit\r\n\r\nBy the end, you will be equipped with the knowledge to create the best and most compelling navigation experiences for your own apps.", - "startsAt": "2024-09-20T16:20:00", - "endsAt": "2024-09-20T17:00:00", + "id": "734441", + "title": "A journey in Android's BLE world", + "description": "Working with BLE on Android could be overwhelming, there are a lot of OSS libraries to pick from, different permissions to be declared, and sometimes different behaviors depending on the Android version and device.\r\n\r\nThis talk aims to make order between what's available out there: we'll start from the basics of how BLE works, climbing the ladder and going more high-level examining tools and libraries using Kotlin features to simplify observing data and freeing up unused resources, including an exploration of latest JetPack library AndroidX Bluetooth.\r\n\r\nYou'll find real-life scenarios, examples, and strange issues you may encounter (along with even stranger fixes).\r\n\r\nWhether you plan to integrate a BLE device in your app, improve the existing code to be more expressive and use modern libraries, or even only scan for Bluetooth beacons, follow me on this journey in the BLE world.", + "startsAt": "2024-11-01T16:40:00", + "endsAt": "2024-11-01T17:20:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "7eca8832-05ec-44c0-b8cd-f8aa72fcf1a3", - "name": "Rikin Marfatia" + "id": "8253d551-1437-4a3e-b4f4-56bf73373109", + "name": "Paolo Rotolo" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254891, - "name": "Android" + "id": 264359, + "name": "Kotlin" }, { - "id": 254892, - "name": "Kotlin" + "id": 264368, + "name": "Techniques & Guides" }, { - "id": 254893, - "name": "Design" + "id": 264374, + "name": "API" + }, + { + "id": 264377, + "name": "Modern Android Development" + }, + { + "id": 264388, + "name": "Libraries" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49956, - "room": "Grand Ballroom 1", + "roomId": 49272, + "room": "Things", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -3859,60 +7099,60 @@ }, { "questionAnswers": [], - "id": "721070", - "title": "Building an AR app with Compose & OpenGL ES", - "description": "In this talk, we'll demystify the workings of AR experiences, from the fundamentals of OpenGL rendering to the pivotal role of ARCore. Discover how AR applications, while seemingly different from traditional virtual experiences, share many underlying principles to any other virtual experience, whether it's a 3D video game or your favorite virtual reality adventure.\r\n\r\nThrough practical demonstrations, you'll gain a comprehensive understanding of computer graphics with OpenGL ES and how to render an AR experience. By the end of the session, you'll walk away equipped with the knowledge to build your own AR apps using Android’s native tools: Jetpack Compose and OpenGL.", - "startsAt": "2024-09-20T16:20:00", - "endsAt": "2024-09-20T17:00:00", + "id": "706060", + "title": "Overcoming Unsecurities in WebViews", + "description": "Is your relationship with WebViews healthy? Sometimes you can't avoid the need to display web content in your app. It can be a functionality that you need to release quickly and it's already implemented by web devs in your team. It can be just a Terms and Conditions page you need to show. Often the reason for putting these into WebViews is that the latest version must be displayed without requiring an app update.\r\n\r\nSo web content tends to make its way into many apps. It's not obvious that by adding a single WebView, you can open up your app for abuse by malicious actors. Google made steady progress in making WebViews more secure by default but often you can't stop supporting those old, vulnerable OS versions. Ultimately it's your responsibility to secure your WebViews and the default settings are not always right. This talk aims to help with that while also highlighting security issues that lurk in those seemingly simple yet quite complex APIs.\r\n\r\nYou would learn the importance of always sanitizing inputs and restricting capabilities to what is actually needed. If you want to take one piece of advice from the talk, you should use more modern APIs like Custom Tabs, JavaScript Engine, or AndroidX's WebView variant.", + "startsAt": "2024-11-01T16:40:00", + "endsAt": "2024-11-01T17:20:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "4c3a9dd5-8b56-4f32-8cb6-a450510221bf", - "name": "Pau Guillamon" + "id": "6b808c1f-836d-4349-9585-a89355dfb8d0", + "name": "Balázs Gerlei" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, + "id": 264354, "name": "Session" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", "categoryItems": [ { - "id": 254890, - "name": "AR/VR" + "id": 264368, + "name": "Techniques & Guides" }, { - "id": 254891, - "name": "Android" + "id": 264372, + "name": "Security" } ], - "sort": 3 + "sort": 4 } ], - "roomId": 49957, - "room": "Grand Ballroom 2", + "roomId": 53981, + "room": "Stadia", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -3921,56 +7161,67 @@ }, { "questionAnswers": [], - "id": "719602", - "title": "A Skeptic's Guide to Generative AI in the SDLC", - "description": "Hallucinations, non-deterministic results, and continents-worth of energy consumption--these problems have no real solution. We're stuck with them. How can we factor these uncertainties into the productivity gains we get from the tools? What if a 30% productivity gain is as good as we get? I will cover the promises, the realities, and the current/future states of Generative AI. We will acknowledge the unmovable realities getting in the way of the unstoppable fantasies, and help you separate the benefits from the grift.", - "startsAt": "2024-09-20T16:20:00", - "endsAt": "2024-09-20T17:00:00", + "id": "764409", + "title": "Ask Android! - Compose, Gemini in AS, KMP", + "description": "Join members of the Google DevRel and Engineering teams to get answers to your most pressing questions in 1:1 office hours sessionsl", + "startsAt": "2024-11-01T16:40:00", + "endsAt": "2024-11-01T17:20:00", "isServiceSession": false, "isPlenumSession": false, "speakers": [ { - "id": "ee461055-a7e0-418a-b4b9-59803a0814fc", - "name": "Marcus Merrell" + "id": "7a8a22c6-5b01-4f0a-bc04-12d4ada5de21", + "name": "Jossi Wolf" + }, + { + "id": "b5b73a2f-d57d-4a42-b787-a93f4ca9ba79", + "name": "Simona Milanovic" + }, + { + "id": "7280b9e7-ddf7-4cfb-b85b-1e998d851f66", + "name": "Marcello Galhardo" + }, + { + "id": "eb4483f1-306b-447d-9888-648ec0fc0018", + "name": "Chris Sinco" + }, + { + "id": "f4580454-6603-44a8-9fcd-e98fe6cc8981", + "name": "Matvei Malkov" } ], "categories": [ { - "id": 72054, + "id": 74391, "name": "Level", "categoryItems": [ { - "id": 254879, + "id": 264350, "name": "Intermediate" } ], "sort": 0 }, { - "id": 72055, + "id": 74392, "name": "Session format", "categoryItems": [ { - "id": 254882, - "name": "Session" + "id": 306233, + "name": "Office Hours" } ], "sort": 1 }, { - "id": 72056, + "id": 74393, "name": "Tags", - "categoryItems": [ - { - "id": 254889, - "name": "AI/ML" - } - ], - "sort": 3 + "categoryItems": [], + "sort": 4 } ], - "roomId": 49958, - "room": "Fountain Room", + "roomId": 54706, + "room": "Ask Android", "liveUrl": null, "recordingUrl": null, "status": "Accepted", @@ -3980,4 +7231,4 @@ ], "isDefault": false } -] +] \ No newline at end of file