Just an app with lame dad jokes content to fill up your day.

Overview

CI codecov Fossa Status Android Weekly Google Developer Library

Just an app with lame dad jokes content to fill up your day.

MVP

This MVP version features:

  • Feed walks you through the latest dad jokes,
  • Browse back seen jokes & share your favorite ones,
  • Notification to remind you up with latest available jokes,
  • Light/ Dark theme based on preference.

Stacks

Foundation

UI

Internal

  • LiveListAdapter
    ListAdapter w/ every visible cell (ViewHolder) is reactive. Cell acts like observer of data they hold, so it will auto-refresh if their related data is updated.
  • RenderExecutor Processor
    Processor for RenderWith annotation. Diff-state engine generator for rendering view component.

Remote

Testing

  • Espresso - Android UI tests.
  • Hilt Testing - For swapping production dependencies with test doubles.
  • Truth - Assertion framework in tests by Google.

Health

  • Firebase Crashlytics - Collecting crash report for production environment.
  • LeakCanary (Debug) - Memory leak detector.
  • StrictMode (Debug) - Tool for checking if any should-be-background operation is done on main thread.

MAD Scorecard




Supports

Dads is ready to support multiplatform with the Clean Architecture concept for project structure (data-domain-presentation).

JVM, JS, or Native, He is just waiting your implementation of presentation part!

Architecture

Dads adopts MVVM with Unidirectional flow (UDF) pattern.

Moreover, view components are rendered based on their related changed states only performed by diff-state engine, so the render operation is done more efficiently.

Design Principles

Testing Principles

  • Black-box/ behavior-driven testing with UI as the sole SUT (very recommended read and talk).
  • No mocking framework! Only fake type as test double, if required.

GraphQL Engine

Jokes are requested from proprietary GraphQL service, the Dads-Engine. Check it out πŸ”₯

How to run

  • Since this project employs GraphQL stack, you need to download the schema first:
    • Go to hosted GraphQL Playground,
    • Open tab SCHEMA at the right side. DOWNLOAD it,
    • Put the schema.json in directory: data/remote/src/commonMain/graphql/com/bael/dads/data/remote/,
    • Or you can run this command as alternative.
      ./gradlew downloadApolloSchema --endpoint="https://dads-engine.herokuapp.com" --schema="data/remote/src/commonMain/graphql/com/bael/dads/data/remote/schema.json"
      
  • Set JWT key in keys.properties file (located in project root folder):
JWT=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcHAiOiJEYWRzISIsInR5cGUiOiJVc2VyIn0.46oGvluHExsPIOS9d925RNYrk_Y9eke0Zm45ZbqjaXs
  • Have fun!

Caveat

After went through How to run section but you still get a "Service issue" state, hit TRY AGAIN? a couple of times until success. That's because I host data to the server with basic free plan - potato spec, well, it's just for research purpose anyway πŸ˜‚ .

Contributing

Let's get in touch if you're interested in contributing. Explain what's the issue, submit your PR via Fork.
Also feel free to request features, or any kind of your support (join stargazers ⭐ ️ | treat me coffee 😁 ).

Those wonder what's next, check out my planned Roadmap by GitHub project board.

Licenses

FOSSA Status

Supporter

You might also like...
HowsTheWeather - πŸŒ„ Your typical weather app, made really simple.

How's The Weather This is a simple Android app made with the purpose of learning how to access external APIs. It displays the data fetched from this A

Schedule-4-me is an opinionated to-do app to bring chaos to your life.

Schedule-4-me Have you ever had too much control in your life? Ever find yourself stuck at home repeating the same motions over and over again? Well f

Open as default - A flutter plugin that allows setting up your flutter app to open files as default
Open as default - A flutter plugin that allows setting up your flutter app to open files as default

open_as_default A flutter plugin that allows setting up your flutter app to open

Paper-ui - A Multiplatform Compose Theme for your Compose app
Paper-ui - A Multiplatform Compose Theme for your Compose app

paper-ui (WIP) Screen.Recording.2022-02-13.at.8.14.45.PM.mov A Multiplatform Com

A secure, opensource android app to store your bank accounts, cards, and credentials. Locally and securely.
A secure, opensource android app to store your bank accounts, cards, and credentials. Locally and securely.

Digital Tijori πŸ”’ Digital Tijori app lets you store your bank accounts, cards and credentials. You can link cards and credentials to a particular bank

DocuBox is a cloud based file storing app where you can securely store and access your documents from anywhere around the world
DocuBox is a cloud based file storing app where you can securely store and access your documents from anywhere around the world

DocuBox is an android app πŸ“±in which you can securely upload your files on the cloud– from family pictures and audio recordings to spreadsheets, presentations and other confidential documents.

πŸ’« A Gradle Plugin to generate your networking code from Swagger

Swagger Gradle Codegen A Gradle plugin to generate networking code from a Swagger spec file. This plugin wraps swagger-codegen, and exposes a configur

Simple(vanilla) yet 'Do it all' place picker for your place picking needs in Android
Simple(vanilla) yet 'Do it all' place picker for your place picking needs in Android

Vanilla Place Picker Vanilla Place Picker provides a UI that displays an interactive map to get the place details and Autocomplete functionality, whic

A simple library that can connect your autocomplete edittext to Google places api
A simple library that can connect your autocomplete edittext to Google places api

Google Places AutoComplete EditText A simple library that can connect your autocomplete edittext to Google's places api Supporting Places AutoComplete

Comments
  • Reflection in your code base

    Reflection in your code base

    Hei Erick, it's nice project, you're implementing a lot of latest libraries and best practices. But I spotted a reflection when you accessed the MainActivity from feature_home. We have ideas to improve it, maybe we can implement either a BroadcastReceiver or Dependency Inversion. Which one do you prefer?

    enhancement 
    opened by stef-ang 1
  • Revert KotlinX - Serialization

    Revert KotlinX - Serialization

    Why? Due to incompatibility with Android's core frameworks which still heavily rely on Java's Serializable.

    Future Will be considered back after better interoperability with Java's or Android.

    opened by ErickSumargo 0
Owner
Google Certified Android Developer
null
A Kotlin Android library for content provider queries with reactive streams and coroutines.

Pickpocket An Android library for content provider queries with reactive streams and coroutines. Calendar Contacts SMS MMS Files/Media Call Log Bookma

Chris Basinger 27 Nov 14, 2022
ZoomHelper will make any view to be zoomable just like Instagram pinch-to-zoom

ZoomHelper ZoomHelper will make any view to be zoomable just like the Instagram pinch-to-zoom. ?? Installation ZoomHelper is available in the JCenter,

AmirHosseinAghajari 238 Dec 25, 2022
DI can be simple. Forget about modules and components. Just use it!

PopKorn - Kotlin Multiplatform DI PopKorn is a simple, powerful and lightweight Kotlin Multiplatform Dependency Injector. It doesn't need any modules

Pau Corbella 145 Dec 25, 2022
A smart colored time selector. Users can select just free time with a handy colorful range selector.

Colored Time Range Selector A smart colored time range selector. Users can select just free time with a handy colorful range selector. Screen Shots Fe

Ehsan Mehranvari 154 Oct 3, 2022
Minecraft Server Software specially designed for Thicc SMP. Here on GitHub without the private patches, just a normal hybrid JettPack-Pufferfish-Empirecraft fork

AlynaaMC A private, custom server software for Thicc SMP and a fork of Pufferfish. Here on GitHub with patches from JettPack, Airplane and Pufferfish

ThiccMC 14 Dec 31, 2021
This program will read from your android application string.xml file and generate translated strings.xml files in your preferred languages using google sheet.

Localize your application content This program will read from your application string.xml file and generate translated strings.xml files in your prefe

DhiWise 4 Jul 29, 2022
Name of your app is an android app that allows building a todo list

Project 1 - SimpleToDo Name of your app is an android app that allows building a todo list and basic todo items management functionality including add

Javier Nazario 0 Nov 23, 2021
Make a cool intro for your Android app.

AppIntro AppIntro is an Android Library that helps you build a cool carousel intro for your App. AppIntro has support for requesting permissions and h

AppIntro Team 10.3k Jan 2, 2023
Reapp is everything you need to build amazing apps with React: a collection of packages that work together, our UI kit, and a CLI that scaffolds your app and includes a server and build system.

What is it? Reapp is everything you need to build amazing apps with React: a collection of packages that work together, our UI kit, and a CLI that sca

reapp 3.4k Nov 20, 2022
Kamper - a small KMM/KMP library that provides performance monitoring for your app.

?? Kamper Kamper is a KMP/KMM library that implements a unified way to track application performances. The solution is based on plugin design patterns

S. Mellouk 31 Jun 10, 2022