- 297
- 526 744
The Android Factory
United States
เข้าร่วมเมื่อ 30 ธ.ค. 2020
Hello there! My name is Domenic and I am a passionate developer with a bunch of Android experience. Over the last 8 years I have found myself building apps for a variety of companies, spanning a range of industries, with varying team sizes. I have started this channel to give back to the community, start my passion for teaching, and provide a practical resource that I wish I had when first getting started.
Whether you are a seasoned vet or someone with no development experience, I'll provide a comprehensive overview of core components and everything you'll need to publish an app on your own! This channel will be entirely focused on Kotlin (the suggested programming language for Android apps) and will keep up to date on the latest Android news, trends, tools, and development practices. Compose coming soon - need to learn it better myself before trying to mentor others about it! xD
Whether you are a seasoned vet or someone with no development experience, I'll provide a comprehensive overview of core components and everything you'll need to publish an app on your own! This channel will be entirely focused on Kotlin (the suggested programming language for Android apps) and will keep up to date on the latest Android news, trends, tools, and development practices. Compose coming soon - need to learn it better myself before trying to mentor others about it! xD
[EXPLAINED] Polymorphic JSON Parsing
In this episode, I will show you what polymorphic JSON is, how to parse "normal" JSON data, and then how to parse more advanced, polymorphic, JSON data! Sit back and learn something cool :)
Don't forget to subscribe and enable notifications to stay up-to-date!
0:00 JSON intro
1:35 Normal JSON parsing
5:30 Polymorphic JSON parsing
12:18 Relating to Android
=========== Popular Series ===========
Redux e-commerce app: th-cam.com/play/PLLgF5xrxeQQ2qeszlLJTuL9ZO4bSpngQr.html
Rick and Morty app: th-cam.com/play/PLLgF5xrxeQQ01ZWe-5p8_ITUKoPS5c46P.html
=========== Connect with me ===========
LinkedIn: www.linkedin.com/in/domenic-polidoro-802b72b4/
Instagram: dom_polidoro
Twitter: developer_dom
Tiktok: www.tiktok.com/@building_android
Don't forget to subscribe and enable notifications to stay up-to-date!
0:00 JSON intro
1:35 Normal JSON parsing
5:30 Polymorphic JSON parsing
12:18 Relating to Android
=========== Popular Series ===========
Redux e-commerce app: th-cam.com/play/PLLgF5xrxeQQ2qeszlLJTuL9ZO4bSpngQr.html
Rick and Morty app: th-cam.com/play/PLLgF5xrxeQQ01ZWe-5p8_ITUKoPS5c46P.html
=========== Connect with me ===========
LinkedIn: www.linkedin.com/in/domenic-polidoro-802b72b4/
Instagram: dom_polidoro
Twitter: developer_dom
Tiktok: www.tiktok.com/@building_android
มุมมอง: 378
วีดีโอ
[SOLVED] Jetpack Compose Modifier.animateItem() bug
มุมมอง 42921 วันที่ผ่านมา
Hello everybody and welcome to the final episode in this series! I solved an interesting Jetpack Compose bug, but please let me know if you have a better solution. As always, I appreciate your support and I want to hear what kind of content you would want to see next! Don't be shy and checkout the source code for the whole project here: github.com/the-android-factory/SimpleRick Don't forget to ...
Custom Filters Example in Jetpack Compose
มุมมอง 49521 วันที่ผ่านมา
This video provides a realistic example of how you can create a custom filter UI and UX in your Android app! Can you help me solve the bug I run into later in the video? Don't forget to subscribe and enable notifications to stay up-to-date! Source code here: github.com/the-android-factory/SimpleRick 0:00 Intro demo 0:53 ViewModel implementation 5:53 Compose implementation 14:28 Adding in animat...
Android Search API Example, Jetpack Compose
มุมมอง 34428 วันที่ผ่านมา
This episode demonstrates how to connect user input in a Search field to your backend server! Checkout the timestamps below to jump to implementation areas you may be interested in. Comment down below any feedback, I'd love to know what you think :) Don't forget to subscribe and enable notifications to stay up-to-date! Source code here: github.com/the-android-factory/SimpleRick 0:00 Intro demo ...
Custom Search Bar Jetpack Compose 2024
มุมมอง 513หลายเดือนก่อน
In this episode, you will learn how simple Jetpack Compose makes building a custom search experience for your users! Using the latest compose BoM (bill of materials), I demonstrate how to build a search bar capable of emitting user queries 500ms after they stop typing a perfect moment to make an API call for data. Part 2 will be coming out shortly, which will connect this UI to a paginated API ...
Displaying API data in a list + sticky headers! | Jetpack Compose 2024
มุมมอง 4662 หลายเดือนก่อน
HELLO EVERYBODY THIS IS MY FIRST VIDEO BACK FROM THE WEDDING!! Quick side note: thank you all for the support and I appreciate your patience. Life has been quite overwhelming lately, and one area that affected deeply was content creation. I hope to get back to a more normal schedule. Anyway, this video is cool and demonstrates how to make a bunch of API calls for information and manipulate the ...
NavigationBar Jetpack Compose Tutorial -- Android 2024
มุมมอง 1.2K4 หลายเดือนก่อน
The bottom navigation bar is an extremely common UI pattern across mobile apps. Check out this short tutorial to learn everything you need to implement it yourself! Don't forget to subscribe and enable notifications to stay up-to-date! Docs: developer.android.com/develop/ui/compose/navigation#bottom-nav Full playlist here: th-cam.com/play/PLLgF5xrxeQQ1yTgJKBbEAgsEFAoMV93qS.html Source code here...
How to migrate to libs.versions.toml -- Android 2024
มุมมอง 1.3K5 หลายเดือนก่อน
The libs.versions.toml file is a weird one if you haven't seen it before, but this video breaks it down perfectly for you! Let me know what you think in the comments below; I quite like the [bundles] implementation :) Don't forget to subscribe and enable notifications to stay up-to-date! Migration docs: developer.android.com/build/migrate-to-catalogs Full playlist here: th-cam.com/play/PLLgF5xr...
Jetpack Compose Custom Toolbar
มุมมอง 8765 หลายเดือนก่อน
I love Jetpack Compose because of how easy it is to build UIs. For instance, this simple example of how to create your own Toolbar implementation! Yes the built in Toolbar is more "powerful", and likely the "better way to go", but in case you need something custom this can help you out. Don't forget to subscribe and enable notifications to stay up-to-date! Full playlist here: th-cam.com/play/PL...
Custom Pagination Tutorial with Jetpack Compose | Android 2024
มุมมอง 2K8 หลายเดือนก่อน
Have you ever worked with a paginated endpoint? Do you know how "infinite scrolling" works under the hood? Take a dozen minutes or so to learn something new with this simple and elegant tutorial to paginating with Jetpack Compose! Don't forget to subscribe and enable notifications to stay up-to-date! Full playlist here: th-cam.com/play/PLLgF5xrxeQQ1yTgJKBbEAgsEFAoMV93qS.html Source code here: g...
Display API data with LazyVerticalGrid | Android 2024
มุมมอง 6278 หลายเดือนก่อน
Displaying data in a grid is an extremely common practice and Jetpack Compose's LazyVerticalGrid makes this very simple! Sit back and learn how to display network data in a grid :) Don't forget to subscribe and enable notifications to stay up-to-date! Full playlist here: th-cam.com/play/PLLgF5xrxeQQ1yTgJKBbEAgsEFAoMV93qS.html Source code here: github.com/the-android-factory/SimpleRick 0:00 Intr...
Compose UI work: List items vs. Grid items
มุมมอง 7028 หลายเดือนก่อน
Hey, welcome back! Sorry it took so long, but we will ease into the next bit of this season with some fun UI work in Jetpack Compose. We will eventually allow the user to toggle between a grid mode and a list mode for layout purposes, so today we are going to build the components they will see in the app! Don't forget to subscribe and enable notifications to stay up-to-date! Full playlist here:...
MVVM + Hilt + Compose Navigation Masterclass | Android 2024
มุมมอง 2.9K10 หลายเดือนก่อน
Architecture is a popular topic, and truthfully it doesn't matter for our end users. The benefits of a good architecture are realized by the development team behind the application, so sit back and enjoy as I convert this project that had no architecture into a case study! Don't forget to subscribe and enable notifications to stay up-to-date! Full playlist here: th-cam.com/play/PLLgF5xrxeQQ1yTg...
Adding Hilt to Multi-Module App | Android 2024
มุมมอง 3.3K10 หลายเดือนก่อน
Step 1 to create a well-architected app: add Dagger Hilt! Sit back and enjoy as I add in this powerful library to our multi-module app. We will use it to properly manage dependencies in our main app module from our "external" networking library. Hilt docs: developer.android.com/training/dependency-injection/hilt-android#kts Don't forget to subscribe and enable notifications to stay up-to-date! ...
You Should Use Sequence Diagrams
มุมมอง 92810 หลายเดือนก่อน
Hey everyone thanks for stopping by! Sequence diagrams are simple and effective ways to map out any flow or sequence of events. This translates extremely nicely to technical implementation and I've used them a number of times to collaborate with others about a specific problem. Let me know what you think and if I should add them to future videos! Don't forget to subscribe and enable notificatio...
API call transformation with Ktor | Android Tutorial 2024
มุมมอง 1.1K10 หลายเดือนก่อน
API call transformation with Ktor | Android Tutorial 2024
Add horizontal scroll to your LazyColumn!
มุมมอง 1.4K11 หลายเดือนก่อน
Add horizontal scroll to your LazyColumn!
Simple Guide to Network Caching in Android
มุมมอง 1.2K11 หลายเดือนก่อน
Simple Guide to Network Caching in Android
Compose Navigation Tutorial: Passing data between screens
มุมมอง 4K11 หลายเดือนก่อน
Compose Navigation Tutorial: Passing data between screens
How to handle network errors with Ktor
มุมมอง 1.9K11 หลายเดือนก่อน
How to handle network errors with Ktor
Jetpack Compose + Coil image loading tutorial
มุมมอง 2.8K11 หลายเดือนก่อน
Jetpack Compose Coil image loading tutorial
Deploy your Android app to Firebase App Distribution w/ GitHub Actions (CI/CD)
มุมมอง 8Kปีที่แล้ว
Deploy your Android app to Firebase App Distribution w/ GitHub Actions (CI/CD)
Deploy to Firebase with GitHub Actions (part 2)
มุมมอง 716ปีที่แล้ว
Deploy to Firebase with GitHub Actions (part 2)
Deploy to Firebase: Service account creation (part 1)
มุมมอง 1Kปีที่แล้ว
Deploy to Firebase: Service account creation (part 1)
GitHub Actions: Run tests on pull request open
มุมมอง 4.6Kปีที่แล้ว
GitHub Actions: Run tests on pull request open
Great instructions and very nice demo app, I learned and refreshed a lot from your videos. Thank you! One question: I see that a lot of new Android projects use Koin for DI instead of Hilt. Probably to easy extend an Android app to a KMP app. What is your opinion on using Koin vs Hilt?
Happy to help! I appreciate the support. I like Hilt better to be honest but your assumption there about KMP is correct. In my opinion Koin isn't true true dependency injection like Hilt/Dagger is but both can accomplish what you need in most cases.
You should make a video about sealed interfaces. Explaining how they work. Thanks.
I've just came back to watching your channel. So happy you're still making videos. To say they’re the most valuable Android lessons would be an understatement. Truly the GOAT!
🙌🐐 thank you for the support! Glad the content is helpful to you
To advanced for me, handeling errors with T
Thanks for the whole series! I really enjoyed every video and learned lots of new stuff
That's the goal!! Thanks for watching it through :) feel free to share it with anyone you think would benefit
@@TheAndroidFactory One tiny suggestion would be to see if there was a place for more modules in the project, not only "app" and "network". Since the series called "multi module app" I was expecting to see more modules :D
@BaktyiarTentimishov appreciate that feedback! Good callout
this is the best explanation of dependency injection I have ever seen.
I appreciate that feedback!! Glad it helped :)
Tanks so much
Anytime!
👋
👋👋
How did u came across this bro? Never thought we can do it this way. I will now save myself a bunch of time
Just learn things over time :) happy I could help you!
Thats an informative content. Well explained. Thanks for sharing. Can we move common fields to Person interface?
I believe you could! Appreciate your support :)
What video contains error handling? what is the best practice now?
Check the playlist this video is a part of! It might be the next video in the series to be honest
Really helpful videos!
Appreciate you!
this is the best , thank!!
Thanks for the support!
Thanks for this tutorial series, it's been great so far. It's probably worth mentioning that the onSuccess in the ApiOperation changed to: suspend fun onSuccess(block: suspend (T) -> Unit): ApiOperation<T> . Without converting it to suspend function we cannot cal getEpisodesByPage from getAllEpisodes.
Glad it helped :)
Yeah, I also had the same issue with that. couldn't run getEpisodesByPage() inside of onSuccess function
Let's go man! Love your videos!<3 Explaining really simple and cool, articulation is perfect! I'm currently applying to android jobs and your videos help me to prepare :)
Amazing! I'm honored to help you get a job :) don't get discouraged by the process! You'll land a job. Definitely checkout the code from GitHub and make changes to it! Working with things in your own hands is always crucial for learning, not just watching videos/reading on topics! Good luck with it all :)
Love your content! Please keep going
There's a bunch more to this season you can still watch! I appreciate your support 🙏
I suppose you would prefer to store data in a room rather than constantly contacting the network to do searches.
Depends on your data, but for something like this you absolutely could!
I'd love to see tutorial of an ArtGallery app that fetches data from any public domain art repo like The Met Museum. Features: Browse artists, art movements, and mediums View detailed information about artworks Take virtual tours of famous galleries Daily featured artwork 360° views of gallery spaces.
Do you know of an API that provides this information?
@@TheAndroidFactory Don't know any api providing virtual tour lol. Nevermind. How about 360-degree photo viewer app that supports gyro sensors
Making me do my research 😀 let me read over some docs
Hi Dominic, happy to see one of your videos again 😄
I know I know ... I honestly think I've recently experienced burn out for the first time lately and it's impacted my TH-cam creation
Hi Dom! Love your videos ❤ Wanted to ask a question. I'm currently using Compose for my app but compose adds padding around every text by default. How can I stop that? I read in the docs that's it's supposed to be off by default from compose 1.6.0 and above but that doesn't seem to be case 🫤 Also one little thing. I use pixel as my daily driver and the app ui on it looks great on it but the text font gets all weird in other devices 😓 Any help is appreciated 😅
Hmm, when I run into weird spacing issues I often times set the background of ab element to be color=Color.Red or something super obvious and you'll start to see where your elements are lining up. Compose previews is also a super helpful way to see how you layouts are coming together. More specifically to your padding problem, I don't normally override this level of functionality so I would challenge you to determine if it is ABSOLUTELY necessary for what you need to achieve. This might be getting involved with the Modifier.measure() code, which is powerful, but a little "fragile" from my observations. Regarding the pixel issue, it is tough to say from my end at the moment, but in general you should try to build your UI with different screen sizes and densities in mind. Try avoiding hard coded values for sizes of elements and instead leveraging "fill" modifiers (fillMaxWidth/Height) and ratio-based logic (weight(1f)) to achieve uniformity across devices! Also, sometimes using a LazyRow vs a Row grants you the ability to have your content scroll/run off the screen horizontally instead of being squished together on smaller devices!
Great stuff ❤️
Appreciate you 👍
I think there is no need to cancel the job in the onDespose block. Since we use the ViewModel Scope, which is bind to the lifecycle of our screen. Accordingly, it will be canceled when the screen closes.
Yup, good catch. Partially showed it as another option, but in this case I think you're correct where it isn't absolutely necessary. However, if we change the VM scoping, we would inadvertently create a bug/allow resource wasting so this isn't harming anything being there too :)
Great work🎉
Thank you! Checkout the code on GitHub if you want it, and more to come soon!
I only have the option to use: navController.graph.findStartDestination().getScopeId() (instead of ..().id) and I get this message in logical everything I switch tabs: Ignoring popBackStack to route androidx.navigation.compose.ComposeNavigator.Destination@-442485168 as it was not found on the current back stack
I get an error as you did in the first attempt but with the message: "Error: Failed to authenticate, have you run firebase login?". There's an issue in the repo about it. Any idea what the problem is?
Wondering if your service account is properly configured
really a informative video, especially breaking the character status and character gender into sealed was totally new concept for me.
Hopefully it made sense! Easier to read the code and reason about :)
Please the AppStata file updated....thanks so much
WOW! Great, quick and concise teaching!
Glad it helped :)
good practice 🔥
thank you for having american accent
LOL. I didn't do too much for this, but I will send the appreciation to my parents!
im new to the code world currently i have a recyclerview with item that have multiple tags how do i make a category filter for that and im using java so this is confuse me even more anyway nice video
Feel free to email some code snippets, it is quite hard for me to help from just the comments section haha. You can find the email on the `About` tab of the channel
Please 😢 upload faster 😅
Hahaha thank you for the support!
good video, I have a question, is it a good idea to create textfield state and snapshotflow in a composable function?
Hey man... I appreciate this one-feature-tutorial videos, but I'd really love the app series. Specifically, I'd really like to know how you'd approach an app with a login feature which also has something like a bottom nav bar in the main app itself. I still haven't found an optimal way to go about this (navigation-wise).
I do think the next app I want to build would have a login screen and what not. But what is the issue you're running into? You should easily be able to have logic on all start that either pushes the user to a sign up/in Composable if they are signed out and then a "signed in screen" when they are authenticated. The signed in Composable would have the bottom nav at that point and the signed out state wouldn't. Alternatively, if you reeeeeaally needed to, you could have two activities if that is simpler for some reason.
@@TheAndroidFactory Yeah, I believe it is fairly easy to do with a bunch of when statements. However, I don't know how to approach the situation using purely Compose's Navigation Component. FYI the "signed in screen" that I'm using is a composable which uses the NavigationSuiteScaffold. I'm a beginner so I might just be totally missing something though 😛
Woah interesting... I haven't worked with the suite scaffold you are talking about 🤔
We need more apps... Not just one app a season
I need more time haha 😅
@@TheAndroidFactory I meant no pressure it's just I love how professional your code and your explanation is will definitely build all your projects from now on...❤
I appreciate your support! All the code is on GitHub for you to consume as well :)
how is this handling config changes? currently launchEffect will fire on every rotation
How would you handle it? What you're saying isn't wrong by the way
@@TheAndroidFactory i think that yo can put the function directly in the ViewModel on init block
That's one way to solve it. Personally, I'm not a big fan of using the init blocks to run "significant" code (like networking or something), but that doesn't mean what you said is wrong. Your solution would work. Another way around it could be to add logic to the function itself that would terminate early if you already had data on screen. Sort of like a cache check
I’m so happy I found your playlist on TH-cam where you explain the Multi-Module approach in a simple way. I really need to learn this architectural approach, so I did a lot of searching and looked everywhere. Most resources are either just articles or involve complex projects, but yours is different. I’d like to ask if you plan to convert all features(maybe screen here) into modules and do it like the NowInAndroidApp (a fully functional Android app published by the Android Developer team). If not, I hope you will consider doing that, as we really need such a resource. Thank you so much.
sticky head was one line of code awesome 😀
Kinda crazy, isn't it lolol
Very nice bro, very interested in the rest of the series ❤️
Appreciate your support! There are a bunch of videos already in the series (check the playlist it is a part of) and I plan on continuing making content for it this week!
What if we have multiple environments and we wanna release a specific one? What are the charges that need to be done?
You'd just need to setup multiple environments in your GitHub repo and set the corresponding information that differs between them (typically API keys, etc.). Then in your scripts you can invoke a specific environment at runtime to pull from. This might make a good video actually - I'll get to it this week!
@@TheAndroidFactory How can we set FIREBASE_APP_ID for multiple environments? As we know project id is going to different.
Not a problem! You can create environments in GitHub that match the environments you work in (Staging, Production, etc.) and override the value there. It's a little difficult to explain over a comment, so maybe I should make a follow up video about it 🤔
Is windows 11 good for android development?
My personal computer is Windows 11 (what I record all these videos on), but I use Mac for work. Both are fine for the overwhelming majority of cases
@@TheAndroidFactory thanks
A very good tutorial. Thanks a lot man!
Glad it helped :)
Thank you for the content. It seems like the last video was uploaded three times, so I will passionately wait for the next one. Until then, I wish you all the best, and one more thank you for making us better at Android programming.
Thanks for following along!!
Did not know about Bundle; thank you!
Bundle is great!
Hi sir! thank you so much for this action but I am having a issue failed to upload release. HTTP Error: 400, Request contains an invalid argument. It happend just after the assemble, do you have an idea about what could be happening?
Glad it helped. Double check the docs and your syntax -- it is likely something very simple, just hard to find because there is no IDE highlighting
@@TheAndroidFactory I fixed it! It was the app id, you have a explanation in a closed issue in the repository
Amazing! Something simple like I suspected :)
@@TheAndroidFactory BTW I made it working at kotlin multiplatform and I made the compilation with kotlin multiplatform for iOS on Xcode Cloud