🦄 Android Pokedex-AR using ARCore, Sceneform, Hilt, Coroutines, Flow, Jetpack based on MVVM architecture.

Overview

Pokedex-AR

License API Build Status Profile

Pokedex-AR is a small demo application based on AR, modern Android application tech-stacks,
and MVVM architecture. This project focuses on ARCore and SceneForm.
Also fetching data from the network and integrating persisted data from the database via repository pattern.


Download

Go to the Releases to download the latest APK.

Tech stack & Open-source libraries

  • Minimum SDK level 24.
  • Kotlin based, Coroutines + Flow for asynchronous.
  • ARCore - ARCore SDK for Android.
  • SceneForm - Sceneform SDK for Android.
  • Hilt for dependency injection.
  • JetPack
    • Lifecycle - dispose of observing data when lifecycle state changes.
    • ViewModel - UI related data holder, lifecycle aware.
    • Room Persistence - construct a database using the abstract layer.
  • Architecture
    • MVVM Architecture (View - DataBinding - ViewModel - Model)
    • Repository pattern.
  • Retrofit2 & OkHttp3 - construct the REST APIs and paging network data.
  • Sandwich - construct lightweight http API response and handling error responses.
  • Moshi - A modern JSON library for Kotlin and Java.
  • Glide, GlidePalette - loading images.
  • WhatIf - checking nullable object and empty collections more fluently.
  • Bundler - Android Intent & Bundle extensions that insert and retrieve values elegantly.
  • Balloon - A lightweight popup like tooltips, fully customizable with an arrow and animations.
  • Timber - logging.
  • Material-Components - Material design components like ripple animation, cardView.
  • Custom Views
    • Rainbow - An easy way to apply gradations and tinting for Android.
    • AndroidRibbon - A simple way to implement a beautiful ribbon with the shimmering on Android.
    • ProgressView - A polished and flexible ProgressView, fully customizable with animations.

MAD Score

summary kotlin

Architecture

Pokedex-AR is based on MVVM architecture and a repository pattern.

architecture

3D Model Licenses

Creative Commons licenses provide a standard way for content creators to grant someone else permission to use their work. If you allow remixing, your content will be published under a CC-BY 3.0 license. These creations are then accessible to other Poly users for use, even commercially, in their own creations, provided they give attribution to the original author.

Open API

Pokedex-AR using the PokeAPI for constructing RESTful API.
PokeAPI provides a RESTful API interface to highly detailed objects built from thousands of lines of data related to Pokémon.

Find this repository useful? ❤️

Support it by joining stargazers for this repository.
And follow me for my next creations! 🤩

License

Designed and developed by 2020 skydoves (Jaewoong Eum)

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.
Comments
  • It seems that all the image urls  unable to link the server。Is it my network problem?

    It seems that all the image urls unable to link the server。Is it my network problem?

    Please complete the following information:

    • Library Version [e.g. v1.0.0]
    • Affected Device(s) [e.g. Samsung Galaxy s10 with Android 9.0]

    Describe the Bug:

    Add a clear description about the problem.

    Expected Behavior:

    A clear description of what you expected to happen.

    opened by macy11 2
  • crash on pixel3 xl android 11

    crash on pixel3 xl android 11

    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.WindowInsetsController com.android.internal.policy.DecorView.getWindowInsetsController()' on a null object reference at com.android.internal.policy.PhoneWindow.getInsetsController(PhoneWindow.java:3880) at com.skydoves.pokedexar.extensions.ActivityExtensionsKt.applyFullScreenWindow(ActivityExtensions.kt:31) at com.skydoves.pokedexar.ui.scene.SceneActivity.onCreate(SceneActivity.kt:44)

    opened by HuixingWong 2
  • Sumin

    Sumin

    Guidelines

    Describe the big picture of your changes here to communicate to the maintainers why we should accept this pull request. If it fixes a bug or resolves a feature request, be sure to link to that issue.

    Types of changes

    What types of changes does your code introduce?

    • [ ] Bugfix (non-breaking change which fixes an issue)
    • [ ] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)

    Preparing a pull request for review

    Ensure your change is properly formatted by running:

    $ ./gradlew spotlessApply
    

    Please correct any failures before requesting a review.

    opened by fosemfhtm 0
  • Issue/battle

    Issue/battle

    Guidelines

    Describe the big picture of your changes here to communicate to the maintainers why we should accept this pull request. If it fixes a bug or resolves a feature request, be sure to link to that issue.

    Types of changes

    What types of changes does your code introduce?

    • [ ] Bugfix (non-breaking change which fixes an issue)
    • [ ] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)

    Preparing a pull request for review

    Ensure your change is properly formatted by running:

    $ ./gradlew spotlessApply
    

    Please correct any failures before requesting a review.

    opened by Sanu7D0 0
  • Feature/login

    Feature/login

    Guidelines

    Describe the big picture of your changes here to communicate to the maintainers why we should accept this pull request. If it fixes a bug or resolves a feature request, be sure to link to that issue.

    Types of changes

    What types of changes does your code introduce?

    • [ ] Bugfix (non-breaking change which fixes an issue)
    • [ ] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)

    Preparing a pull request for review

    Ensure your change is properly formatted by running:

    $ ./gradlew spotlessApply
    

    Please correct any failures before requesting a review.

    opened by psb0623 0
Releases(1.0.2)
  • 1.0.2(Jan 8, 2022)

    🎉 Released a new version 1.0.2! 🎉

    What's Changed

    • Updated ARCore to 1.29.0.
    • Migrated from Livedata to StateFlow.
    • Removed unused LiveCoroutinesViewModel classes.
    • Update dependencies version to the recent and migrate codes by @skydoves in https://github.com/skydoves/Pokedex-AR/pull/5

    Full Changelog: https://github.com/skydoves/Pokedex-AR/compare/1.0.1...1.0.2

    Source code(tar.gz)
    Source code(zip)
    app-debug.apk(16.23 MB)
  • 1.0.1(Jun 2, 2021)

    🎉 Released a new version 1.0.1! 🎉

    What's New?

    • Migrated from LiveData to Flow for observing data on UI layers from ViewModels.
    • Used Assisted Injection in DetailViewModel.
    • Used asBindingProperty for observing flow data as properties.
    private val pokemonInfoFlow = detailRepository.fetchPokemonInfo(
        name = pokemonName,
        onComplete = { isLoading = false },
        onError = { errorMessage = it }
    )
    
    @get:Bindable
    val pokemonInfo: PokemonInfo? by pokemonInfoFlow.asBindingProperty(viewModelScope, null)
    
    Source code(tar.gz)
    Source code(zip)
  • 1.0.0(Dec 13, 2020)

Owner
Jaewoong Eum
Android and open source software engineer.❤️ Digital Nomad. Love coffee, music, magic tricks, and writing poems. Coffee Driven Development
Jaewoong Eum
🍂 Jetpack Compose image loading library which can fetch and display network images using Glide, Coil, and Fresco.

?? Jetpack Compose image loading library which can fetch and display network images using Glide, Coil, and Fresco.

Jaewoong Eum 1.4k Jan 2, 2023
ZoomableComposeImage - A zoomable image for jetpack compose

ZoomableComposeImage - A zoomable image for jetpack compose

RERERE 10 Dec 11, 2022
ComposeImageBlurhash is a Jetpack Compose component with the necessary implementation to display a blurred image

compose-image-blurhash ComposeImageBlurhash is a Jetpack Compose component with the necessary implementation to display a blurred image while the real

Orlando Novas Rodriguez 24 Nov 18, 2022
Andorid library that loads images asynchronously into cache using a thread pool

AndroidImageLoader AndroidImageLoader is a fork of the Image Loader component in libs-for-android. The AndroidImageLoader is an Android library that h

David Wu 63 Feb 19, 2019
Load images using Glide

Glide_Demo Load images using Glide Image used private val image = "https://cdn.pixabay.com/photo/2018/05/03/21/49/android-3372580_1280.png" Add Glide

Daniel Kago K 0 Nov 1, 2021
An image loading and caching library for Android focused on smooth scrolling

Glide | View Glide's documentation | 简体中文文档 | Report an issue with Glide Glide is a fast and efficient open source media management and image loading

Bump Technologies 33.2k Jan 7, 2023
Android Asynchronous Networking and Image Loading

Android Asynchronous Networking and Image Loading Download Maven Git Features Kotlin coroutine/suspend support Asynchronously download: Images into Im

Koushik Dutta 6.3k Dec 27, 2022
A powerful image downloading and caching library for Android

Picasso A powerful image downloading and caching library for Android For more information please see the website Download Download the latest AAR from

Square 18.4k Jan 6, 2023
Powerful and flexible library for loading, caching and displaying images on Android.

Universal Image Loader The great ancestor of modern image-loading libraries :) UIL aims to provide a powerful, flexible and highly customizable instru

Sergey Tarasevich 16.8k Jan 8, 2023
An Android library for managing images and the memory they use.

Fresco Fresco is a powerful system for displaying images in Android applications. Fresco takes care of image loading and display, so you don't have to

Facebook 16.9k Jan 8, 2023
Adds touch functionality to Android ImageView.

TouchImageView for Android Capabilities TouchImageView extends ImageView and supports all of ImageView’s functionality. In addition, TouchImageView ad

Michael Ortiz 2.6k Jan 1, 2023
A circular ImageView for Android

CircleImageView A fast circular ImageView perfect for profile images. This is based on RoundedImageView from Vince Mi which itself is based on techniq

Henning Dodenhof 14.4k Jan 5, 2023
Custom shaped android imageview components

Shape Image View Provides a set of custom shaped android imageview components, and a framework to define more shapes. Implements both shader and bitma

Siyamed SINIR 2.6k Jan 8, 2023
Android ImageView that handles animated GIF images

GifImageView Android ImageView that handles Animated GIF images Usage In your build.gradle file: dependencies { compile 'com.felipecsl:gifimageview:

Felipe Lima 1.1k Dec 27, 2022
Android ImageView that supports different radii on each corner.

SelectableRoundedImageView Note that this project is no longer maintained. Android ImageView that supports different radii on each corner. It also sup

Joonho Kim 1.1k Nov 25, 2022
An Android view for displaying repeated continuous side scrolling images. This can be used to create a parallax animation effect.

Scrolling Image View An Android view for displaying repeated continuous side scrolling images. This can be used to create a parallax animation effect.

Q42 1.8k Dec 27, 2022
Photo picker library for android. Let's you pick photos directly from files, or navigate to camera or gallery.

ChiliPhotoPicker Made with ❤️ by Chili Labs. Library made without DataBinding, RxJava and image loading libraries, to give you opportunity to use it w

Chili Labs 394 Jan 2, 2023
:ribbon: The simple way to implement a beautiful ribbon with the shimmering on Android.

AndroidRibbon ?? The simple way to implement a beautiful ribbon with the shimmering on Android. 中文語 Download Gradle Add below codes to your root build

Jaewoong Eum 653 Jan 7, 2023
An Android transformation library providing a variety of image transformations for Glide.

Glide Transformations An Android transformation library providing a variety of image transformations for Glide. Please feel free to use this. Are you

Daichi Furiya 9.7k Dec 30, 2022