This project was created as a demo project for implementing latest frameworks, Android APIs, tools, and techniques.

Overview

IWeather Android Application

This project was created as a demo project for implementing latest frameworks, Android APIs, tools, and techniques.
It follows Clean architecture design pattern. Project files are divided into three layers (presentation, domain, and data).



It contains Production Code, Unit Tests for domain layer classes and ViewModels in presentation layer, and Instrumentation Tests for Room database related classes in data layer.
You can use it as a reference for using the tools described at the end of this file.
If you want to contribute to this repository by reviewing my code, refactor it, or add new features, You are almost welcomed.

Screenshots

   

Installation

  • First you need to create an account on OpenWeatherMap
  • Then you need to create an API Key.
  • In your gradle.properties file enter the code below:
    apiKey = "{YOUR_API_KEY}"

How to use

  • Please check that your device is connected to the internet.
  • Tap on Add City button.
  • Enter city name, Country code as shown in the screenshots above.
  • Then city with it's related historical data will be cached in your device. So you can access it later without needing to internet connection.
  • You can add cities as much as you want.
  • Tab on your city name, then it will navigate to city historical screen.
  • Tab on an item from the historical data items to navigate to the details screen.

Built With

  • Kotlin - As a programming language.
  • Coroutines - For multithreading while handling requests to the server and local database.
  • Navigation Component - To handle app navigation.
  • Multidex - To enable creating multi dex files because of using set of libraries that reached the maximum size of single dex file.
  • Model-View-ViewModel(MVVM) - Offers an implementation of observer design pattern.
  • Data Binding - It helps in decoratively binding UI elements of our layout to data source of our app.
  • Retrofit - It is a type-safe REST client for Android, Java and Kotlin developed by Square. The library provides a powerful framework for authenticating and interacting with APIs and sending network requests with OkHttp.
  • Room DB - To manage SQLite database easily and avoid a lot boilerplate code.
  • Glide - It is a fast and efficient open source media management and image loading framework for Android that wraps media decoding, memory and disk caching, and resource pooling into a simple and easy to use interface.
  • Timber - It helps in logging while debugging your app. and all logging code will not be embedded in the released APK.
  • Hilt - It is arguably the most used Dependency Injection, or DI, framework for Android. Many Android projects use Dagger to simplify building and providing dependencies across the app. It gives you the ability to create specific scopes, modules, and components, where each forms a piece of a puzzle: The dependency graph.
  • Clean Architecture - Applying Clean Architecture and Solid Principles to build a robust, maintainable, and testable application.
  • MockWebServer - This library makes it easy to test that your app Does The Right Thing when it makes HTTP and HTTPS calls. It lets you specify which responses to return and then verify that requests were made as expected.
  • Google Truth - Truth makes your test assertions and failure messages more readable. Similar to AssertJ, it natively supports many JDK and Guava types, and it is extensible to others.
  • Kotlin Flow - In coroutines, a flow is a type that can emit multiple values sequentially, as opposed to suspend functions that return only a single value. For example, you can use a flow to receive live updates from a database. I replaced LiveData objects in ViewModels with StateFlow objects. it is much easier for unit testing.

License

Please review the following license agreement

You might also like...
Example Android library project that works with jitpack.io

android-example Example Android library project that works with jitpack.io. See this Tutorial on how to publish an Android Library with JitPack. For m

A Project suggested by the Android Basics Course

Dogglers - Starter Code Starter code for the second independent project for Android Basics in Kotlin. Introduction This is the starter code for the Do

Starter code for the first independent project for Android Basics in Kotlin

Project: Lemonade App - Starter Code Starter code for the first independent project for Android Basics in Kotlin Introduction This is the starter code

Starter code for the second independent project for Android Basics in Kotlin.

Dogglers - Starter Code Starter code for the second independent project for Android Basics in Kotlin. Introduction This is the starter code for the Do

Starter code for the second independent project for Android Basics in Kotlin

Dogglers - Starter Code Starter code for the second independent project for Android Basics in Kotlin. Introduction This is the starter code for the Do

Starter code for the third independent project for Android Basics in Kotlin

Lunch Tray - Starter Code Starter code for the third independent project for Android Basics in Kotlin Introduction This is the starter code for the Lu

Starter code for the third independent project for Android Basics in Kotlin

Lunch Tray - Starter Code Starter code for the third independent project for And

The third project for Udacity's Android Nanodegree through Egypt FWD program

LoadApp In this project students will create an app to download a file from Internet by clicking on a custom-built button where: width of the button g

A simple project used for converting currencies

MyCurrencyConverter A simple project used for converting currencies. This project is divided into 2 parts (branches): master - without Dagger Hilt dev

Owner
Ali Mansour
Experienced Android developer with excellent client and project management skills.Action-oriented with strong ability to communicate effectively with technology
Ali Mansour
NotesApp is a project which demonstrates the power of Kotlin's Ktor in developing powerful REST APIs with all basic as well as advanced features.

NotesApp NotesApp is a project which demonstrates the power of Kotlin's Ktor in developing powerful REST APIs with all basic as well as advanced featu

Rooparsh Kalia 1 Oct 18, 2021
A collection of samples to discuss and showcase different architectural tools and patterns for Android apps.

Android Architecture Blueprints v2 Android Architecture Blueprints is a project to showcase different architectural approaches to developing Android a

Android 42k Jan 3, 2023
A set of APIs to manipulate graphics paths on Android

Pathway Pathway is an Android library that provides new functionalities around the graphics Path API. Pathway is compatible with API 21+. Maven reposi

Romain Guy 147 Dec 17, 2022
Android MediaProjection Best Demo

Android MediaProjection Best Demo

逆水寒 3 May 24, 2022
Gods Unchained Demo With Kotlin

Gods Unchained Demo This app allows you to view a page of Gods Unchained cards and highlight a specific one to see a larger version in Shadow quality

Dom Murray 0 Nov 3, 2021
An Android project template with MVVM, Hilt, Navigation and Compose

compose-android-template An Android project template with MVVM, Hilt, Navigation and Compose ?? Status UNDER ACTIVE DEVELOPMENT ?? Terminologies Termi

Sifar 20 Oct 20, 2022
This is An Android Project. in which we use SqLite Database. We perform Insert,delete,update and Show The existing data. operations using SqLite.

SqLite Database Keywords : SqLite, Android, Database This is An Android Project. in which we use SqLite Database. We perform Insert,delete,update and

Rudra_deep 1 Nov 7, 2021
This is a simple application through which I connected Students, Courses and Teachers in an a beautiful way. The main purpose of this project is the connection between the Objects.

UniversityApp This is a simple application through which I connected Students, Courses and Teachers in an a beautiful way. The main purpose of this pr

Anas Khalil 3 Aug 21, 2021
This is a template repository intended to get a quick up and running project for demonstration purposes.

Android App Template This is a GitHub template repository intended to kickstart development on an Android application. This project comes set with a h

Adam McNeilly 119 Dec 29, 2022
ToDoAPP - The project is a task application that works on the basis of creating, editing, reading and deleting from the local database.

ToDoAPP - The project is a task application that works on the basis of creating, editing, reading and deleting from the local database. The project has the educational purpose of learning the latest technologies in Android, which I know so far at a basic level.

Aleks Milchov 0 Jan 2, 2022