Devil2020 / Halan

Okay , It`s a task that TeamLead of Halan Company Called me to make a task to recruite to his team , but unfortinality i was rejected becasue the place is too away from my side and from their side i was not good enough πŸ‘€πŸ€·β€β™‚οΈ

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Hallan Challange Task

Medium API API API

upon running the application you will face a login screen where you are supposed to write a user name and a password (following the criteria of user name must be 6 to 15 char in length and only alphanumeric ) . after logging in successfully you will find data of the profile as well as a list of products, which you can click any of the products to navigate to the product details screen.

the challenge is to fix the issue which will face you upon running the application , fix and improve the networking part and then proceed into refactoring the application into a better version which will allow us to proceed with adding new features, change UI design, remove features, test the app without any problems .

you are expected to use the challenge to demonstrate your technical skills using all of your preferred libraries eg. (jetpack components libraries), design patterns. also, it is expected from you to showcase your understanding/implementation of Clean architecture, SOLID principles, reactive programming, write clean code be as close as you can to the design attached and write test cases for your work .


Download

Go to the Releases to download the latest APK.

Tech stack & Open-source libraries

  • Minimum SDK level 21
  • Kotlin based, Coroutines + Flow for asynchronous.
  • 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)
    • Bindables - Android DataBinding kit for notifying data changes to UI layers.
    • 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
  • WhatIf - checking nullable object and empty collections more fluently.
  • Timber - logging.
  • Material-Components - Material design components like ripple animation, cardView.

Let's explore Architecture Components

According to Android Documentation, Architecture Components are a set of Android libraries for structuring your app in a way that is robust, testable, and maintainable

Architecture

Presentation Layer Architecture patter is MVi and Clean Architecute

UI Controllers

are activities or fragments. The only job of UI controllers is to know how to display data and pass on UI events, such as the user pressing a button. UI Controllers neither contain the UI data, nor directly manipulate data.

Repository

This class is the single source of truth for all of our app's data and acts as a clean API for the UI to communicate with . Presenter simply request data usecase then it request it to repository. They do not need to worry about whether the repository should load from the database or network, or how or when to persist the data. The repository manages all of this. As part of this responsibility, the repository is a mediator between the different data sources.

Remote Network Data Source

Manages data from a remote data source, such as the internet.

Local Database Data Source

Manages data from a local data source, such as SharedPreference.

License:

Copyright 2021 Mohammed Morse

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.

About

Okay , It`s a task that TeamLead of Halan Company Called me to make a task to recruite to his team , but unfortinality i was rejected becasue the place is too away from my side and from their side i was not good enough πŸ‘€πŸ€·β€β™‚οΈ


Languages

Language:Kotlin 100.0%