Giter VIP home page Giter VIP logo

portfolio-app-2's Introduction

Portfolio Kotlin Version API Ktlint License

๐Ÿ‘‹Hello, My name is Tumur Bazarragchaa and you can call me Alex. I'm an Android Developer, specializing in the user interface, and with three years of experience in Kotlin, Java. I've published two Kotlin Android apps and up to date with the latest technologies such as Android Jetpack Components and Kotlin Coroutines. I built this app to show my skills and passion for design and development.
You can read more about me here

Ps: This is a result of what I've learned during my learning of Kotlin, Android Jetpack, Material Design components, and Firebase, Google Cloud Functions. I tried to implement as many as possible best practices from the Android community and I'm very thankful to everyone who shared their valuable knowledge and experience through social media and blog posts.

๐Ÿ“ฝ๏ธ PREVIEW

Portfolio App 2.0

๐Ÿ“ธ SCREENSHOTS

๐Ÿš€ ANDROID JETPACK COMPONENTS

Android Foundation Architecture Components Behavior UI
Appcompat Data Binding Media & Playback Animations and Transitions
Android KTX LiveData Notifications Emoji
Multidex Lifecycles Permissions Constraint Layout
Test Navigation Preferences Motion Layout
Paging Sharing Fragment
Room Slices View Pager
ViewModel Material Theming
Work Manager Material Design Guideline
Android Accessibility Guideline
Google Play Instant App

๐Ÿ“ ARCHITECTURE

๐Ÿ“Š FEATURES

Features Description
Kotlin 100% Kotlin.
MVVM architecture Using the lifecycle aware viewmodels, the view observes changes in the model / repository.
Android Architecture Components Lifecycle awareness has been achieved using a combination of LiveData, ViewModels and Room.
Backend Used Google Cloud Functions and Firebase Firestore for backend and REST API
Dependency Injection Common elements like context, networking interface are injected using Koin.
Offline first architecture All the data is loaded from the Room database and it's updated from the network. This ensures that the app is usable even in an offline mode.
Effective Networking Using a combination of Retrofit, Room, LiveData, Coroutines to handle networking in the most effective way.
Intelligent sync Intelligent hybrid syncing logic makes sure your Android app does not make repeated calls to the same back-end API for the same data in a particular time period.
Feature based packaging This screen-wise / feature-wise packaging makes code really easy to read and debug.

๐Ÿ“ฆ THIRD PARTY LIBRARIES

Third party libraries Firebase Design tools Gradle
Koin Cloud Firestore Sketch Gradle Kotlin DSL
Kotlin Coroutines Cloud Functions Shape Shifter Ktlint
Retrofit Hosting Adobe Photoshop Detekt
OkHttp Cloud Storage Adobe Illustrator Versions
Glide Crashlytics Adobe After Effects SafeArgs
Leak Canary Performance Monitoring
Timber Test Lab
ThreenTenABP App Indexing
Stetho
Chrome Custom Tab
CircleImageView
SDP - Scalable Size Unit
Gradle Versions Plugin
Moshi
InkPageIndicator
ShapeOfView
Toasty
COIL

๐Ÿ“ฆ DOWNLOAD APK

You can download the apk from:

  1. Google Playstore

๐Ÿ“ REQUIREMENTS

  • JDK Version 1.7 & above
  • Android SDK.
  • Android SDK Tools
  • Android SDK Build tools 29
  • Android Support Repository
  • Android Support library

๐ŸŒ BACKEND

Firebase Cloud Storage used as a backend server and Firebase Cloud Hosting and Google Cloud Functions for providing REST API. You can find the code here.

๐Ÿ”ฅ FIREBASE SETUP

This project uses Firebases Analytics and Crashlytics, Cloud Firestore, Remote Config, etc. You will need to generate the configuration file (google-services.json) and copy it to your /app dir. See links below

  1. Setup Firebase setup
  2. Setup Firebase Crashlytics
  3. Setup Firebase Cloud Firestore
  4. Setup Firebase Storage
  5. Setup Firebase Cloud Functions
  6. Setup Firebase Hosting
  7. Setup Firebase Peformance Monitoring
  8. Setup Firebase Test Lab
  9. Setup Firebase App Indexing

โš™๏ธ PROJECT SETUP

This project is built with Gradle, the Android Gradle plugin Clone this repository inside your working folder. Import the settings.gradle file in the root folder into e.g. Android Studio. (You can also have a look at the build.gradle files on how the projects depend on another.)

  • Start Android Studio
  • Select "Open Project" and select the generated root Project folder
  • You may be prompted with "Unlinked gradle project" -> Select "Import gradle project" and select the option to use the gradle wrapper
  • You may also be prompted to change to the appropriate SDK folder for your local machine
  • Once the project has compiled -> run the project!

๐Ÿค CONTRIBUTING

Would you like to contribute code?

  1. Fork Portfolio.
  2. Create a new branch (using GitHub) or the command git checkout -b branch-name develop).
  3. Start a pull request. Reference existing issues when possible.

No code!

๐Ÿ“š RESSOURCES & CREDENTIALS

Applied number of best practices from the Android community, and I'm thankful to everyone who shared their knowledge and experience through social media and blog posts. ๐Ÿ™Œ๐Ÿป

Android & Kotlin

  1. Developing Android Apps with Kotlin by Google ๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ
  2. Android Documentation & Guides | All in one Place ๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ
  3. Kotlin Bootcamp for Programmers by Google ๐Ÿ”ฅ
  4. Kotlin for Android Developers ๐Ÿ”ฅ
  5. Kotlin Null Safety Best Practices
  6. Scope Functions in Kotlin - let run apply also with

Architecture

  1. Best practices for a modularized app ๐Ÿ”ฅ
  2. Android Architecture: A Journey Looking For The Perfect Design

Navigation Controller: Single Activity

  1. Jetpack Navigation (Google I/O'19) ๐Ÿ”ฅ
  2. Add Shared Element Transitions between destinations ๐Ÿ”ฅ
  3. Principles of navigation
  4. Update UI components with NavigationUI
  5. Migrate to the Navigation component
  6. Android Jetpack: manage UI navigation with Navigation Controller (Google I/O '18)
  7. Single Activity: Why, When, and How (Android Dev Summit '18)
  8. Advanced Navigation Sample
  9. Master-Detail views with Navigation Components
  10. Scroll your Bottom Navigation View away with 10 lines of code

Live Data & ViewModel

  1. ViewModels with Saved State, Jetpack Navigation, Data Binding and Coroutines ๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ
  2. Use Kotlin coroutines with Architecture components ๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ
  3. Fun with LiveData (Android Dev Summit '18)
  4. ViewModels and LiveData: Patterns + AntiPatterns
  5. LiveData with SnackBar, Navigation and other events
  6. LiveData beyond the ViewModel
  7. LiveData with single events
  8. An Early Look at ViewModel SavedState
  9. Locale changes and the AndroidViewModel antipattern

Room

  1. Course: Storing Data in Android with Room(Caster.io) ๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ
  2. 7 Pro-tips for Room ๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ
  3. Room ๐Ÿ”— Coroutines ๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ
  4. Packing the Room: Pre-populate your database with this one method ๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ
  5. The Room in the House (Android Dev Summit '18)
  6. Populating Room Database with WorkManager sample app
  7. Room Persistence Library with Coroutines
  8. Dependency Injection with KOIN to Androidx Jetpack
  9. Upgrade to Room 2.1.0-alpha05, use withTransaction
  10. Defining data using Room entities
  11. Android Room Library Relations
  12. Android Room with nested relationships
  13. Room Persistence Library Part 2: Room Relationships

DataBinding

  1. Modern Data Binding(Droidcon Italy 2018)
  2. Level Up with Data Binding
  3. Data Bindingโ€Šโ€”โ€ŠLessons Learnt
  4. Databinding in Kotlin World (Video)
  5. Databinding in Kotlin World (Slides)
  6. Leveraging Android Data Binding with Kotlin
  7. Simplifying UI States with Kotlin Sealed Classes and Data Binding
  8. Advanced Data Binding

Constraintlayouts & Motionlayout

  1. Introduction to MotionLayout (part I) ๐Ÿ”ฅ
  2. Introduction to MotionLayout (part II) ๐Ÿ”ฅ
  3. Introduction to MotionLayout (part III) ๐Ÿ”ฅ
  4. Introduction to MotionLayout (part IV) ๐Ÿ”ฅ
  5. What's New in ConstraintLayout (Google I/O'19) ๐Ÿ”ฅ
  6. Android Fundamentals: ConstraintLayout(Pluralsight) ๐Ÿ”ฅ
  7. MotionLayout Tutorial For Android: Getting Started ๐Ÿ”ฅ
  8. ConstraintLayout Deep Dive (Android Dev Summit '18)
  9. MotionLayout & ConstraintLayout 2.0 (Droidcon SF 2018)
  10. Deep dive into MotionLayout (DroidKaigi 2019)
  11. MotionLayout / Constraint Layout Samples
  12. Pull the KeyTrigger with MotionLayout
  13. Android Motion Layout tutorial โ€“ Collapsing view
  14. Say goodbye to LinearLayout with Flow
  15. Exploring MotionLayout: Touch Regions
  16. ConstraintLayout 2.0
  17. ConstraintLayout 2.0.0 alpha 5

Koin

  1. Course: Koin(Caster.io) ๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ
  2. Painless Android testing with Room & Koin
  3. Unlock your Android ViewModel power with Koin

Kotlin Coroutines

  1. Coroutines on Android (part I): Getting the background ๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ
  2. Coroutines on Android (part II): Getting the background ๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ
  3. Coroutines on Android (part III): Getting the background ๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ
  4. Understand Kotlin Coroutines on Android (Google I/O'19) ๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ
  5. Android Suspenders (Android Dev Summit '18)
  6. Kotlin Coroutines: Beyond async/await (Droidcon NYC 2018)
  7. Android Coroutine Recipes
  8. Kotlin Coroutines patterns & anti-patterns
  9. Android Networking in 2019โ€Šโ€”โ€ŠRetrofit with Kotlinโ€™s Coroutines
  10. The reason to avoid GlobalScope
  11. Launching a Kotlin Coroutine for immediate execution on the Main thread
  12. Coroutine Support in ViewModels
  13. Managing exceptions in nested coroutine scopes
  14. Cold flows, hot channels

WorkManager

  1. WorkManager meets Kotlin ๐Ÿ”ฅ
  2. WorkManager Periodicity ๐Ÿ”ฅ
  3. Workout your tasks with WorkManager โ€” Basics ๐Ÿ”ฅ
  4. Working with WorkManager (Android Dev Summit '18)
  5. Introducing WorkManager
  6. WorkManager Basics
  7. Android Jetpack WorkManager Stable Release
  8. Working With WorkManager in Android Like A Pro

Animation

  1. Motional Intelligence: Build Smarter Animations (Google I/O'19) ๐Ÿ”ฅ
  2. Re-animation
  3. Using vector assets in Android apps
  4. Creating AnimatedVectorDrawables with Shape Shifter
  5. Introduction to MotionLayout
  6. Defining motion paths in MotionLayout

Paging

  1. Android Jetpack: manage infinite lists with RecyclerView and Paging (Google I/O '18) ๐Ÿ”ฅ
  2. First Java MVVM project that includes: Paging library, ViewModel, LiveData, Room and Retrofit ๐Ÿ”ฅ
  3. Paging Library for Android With Kotlin: Creating Infinite Lists ๐Ÿ”ฅ
  4. Playing with Paging Library, Retrofit, Coroutines, Koin & Testing.
  5. 7 steps to implement Paging library in Android
  6. Simple intro for Rest-Api loading of json data into recyclerview using Kotlin
  7. The Movie Datbase
  8. Android RecyclerView Tutorial with Kotlin
  9. Migrating to Paging library
  10. Android Data Binding + ListAdapter
  11. Android Data Binding + RecyclerView + Multiple View Type
  12. Android Data Binding for RecyclerView With LiveData (Kotlin)
  13. Android Paging Library with multiple view types

ViewPager

  1. ViewPager Tutorial: Getting Started in Kotlin
  2. Exploring the View Pager 2

Android Accessibility

  1. Course: Android App Development: Accessibility(LinkedIn Learning) ๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ
  2. Making Android Accessibility Easy (Android Dev Summit '18)
  3. Demystifying Android Accessibility Development (Google I/O'19)

Preferences

  1. Preferential Practices for Preferences (Android Dev Summit '18)
  2. How to Code a Settings Screen in an Android App

Material Design & Theme

  1. Dark Theme & Gesture Navigation (Google I/O'19) ๐Ÿ”ฅ
  2. Moving to the Dark Side: Dark Theme Recap ๐Ÿ”ฅ
  3. DayNight โ€” Adding a dark theme to your app ๐Ÿ”ฅ
  4. Gesture Navigation: Going edge-to-edge ๐Ÿ”ฅ
  5. Gesture Navigation: Handling visual overlaps ๐Ÿ”ฅ
  6. Gesture Navigation: A Backstory ๐Ÿ”ฅ
  7. Material Design: Getting started
  8. The Components of Material Design (Android Dev Summit '18)
  9. Best Practices for Themes and Styles (Android Dev Summit '18)
  10. Use Android Text Like a Pro (Android Dev Summit '18)
  11. DayNightโ€Šโ€”โ€ŠAdding a dark theme to your app
  12. Styles, Themes, Material Theming, Oh My!
  13. Seven best practices for inclusive product design
  14. WindowInsetsโ€Šโ€”โ€ŠListeners to layouts
  15. Styles, Themes, Material Theming, Oh My!
  16. Playing with Material Design Transitions
  17. Mastering the Coordinator Layout
  18. Integrate CoordinatorLayout + BottomNavigationView + Toolbar + TabLayout + ViewPager + Fragment + DrawerLayout
  19. Google+ Android Sample App demo
  20. Android Designโ€Šโ€”โ€ŠCollapsing Toolbar: ScrollFlags Illustrated
  21. AppBarLayout scroll behavior with layout_scrollFlags
  22. Hands-on with Material Components for Android: Bottom Sheets
  23. Full-screen BottomSheetDialog DIY
  24. Hands-on with Material Components for Android: Buttons
  25. Android Pโ€Šโ€”โ€ŠWhatโ€™s New in Material Design
  26. Android: An Introduction to Material Design with Kotlin

Sample Data

  1. What's new with ConstraintLayout and Android Studio design tools
  2. Tool Time โ€“ Part 1
  3. Tool Time โ€“ Part 2

Instant App

  1. A simpler experience for instant apps
  2. 5 tips for using showInstallPrompt in your instant experience

Test

  1. Leveling Up Your UI Tests With MockWebServer

Firebase Cloud Functions

  1. Building a โ€œServerlessโ€ RESTful API with Cloud Functions
  2. Build a Serverless full stack app using firebase cloud functions
  3. How Firebase Cloud Functions support custom domains
  4. Serve dynamic content and host microservices with Cloud Functions

Firebase security rules

  1. Introduction to Firebase security rules (Firecasts) ๐Ÿ”ฅ
  2. Perform simple and compound queries in Cloud Firestore
  3. Firebase Auth REST API
  4. Writing conditions for Cloud Firestore Security Rules
  5. Five tips to secure your app (Firebase Summit 2018)
  6. Firestore Security Rules

Network

  1. Making Android Networking Pretty with Kotlin Coroutines
  2. Improving App Network Architecture With Retrofit And Kotlin Coroutine Call Adapter
  3. Sealed Classes Instead of Exceptions in Kotlin
  4. Suspend what youโ€™re doing: Retrofit has now Coroutines support!

Retrofit & OkHttp, Moshi, ThreeTenABP

  1. Android Networking with Coroutines and Retrofit
  2. Handle Complex Network Call with Kotlin Coroutine + Retrofit 2
  3. Retrofit Kotlin coroutines
  4. Kotlin Coroutinesโ€”Handling concurrency like a pro (Retrofit2+Coroutines)
  5. Modern concurrency on Android with Kotlin
  6. Networking the Kotlin way: Retrofit + Coroutines
  7. Migrate from GSON to Moshi in Android
  8. Modern DateTimes on Android

Other

  1. Kotlin + buildSrc for Better Gradle Dependency Management
  2. Sharing Gradle Configuration in Multi-Module Android Projects
  3. android-youtube-player, an open source alternative to the official YouTube Player API
  4. Android RecyclerView adding Search Filter
  5. Responding to a Refresh Request
  6. Create swipe views with tabs
  7. Introduction to Google Maps API for Android with Kotlin

Project Maintained By

Tumur.B (Alex)
Android Developer

License

Copyright 2019 Tumur.B (Alex)

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

portfolio-app-2's People

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.