All Projects → ersiver → Newsster

ersiver / Newsster

Licence: Apache-2.0 license
Android App using Paging3, Hilt, Coroutines, Flow, Jetpack, MVVM architecture.

Programming Languages

kotlin
9241 projects

Projects that are alternatives of or similar to Newsster

SunnyBeach
阳光沙滩APP
Stars: ✭ 60 (-59.18%)
Mutual labels:  room, viewbinding, hilt, paging3
Superhero-App
🦸🏻‍♂️🦹🏻‍♀️Superhero app built with Kotlin, ViewModel, LiveData, ViewBinding, Room, and Hilt
Stars: ✭ 27 (-81.63%)
Mutual labels:  room, viewmodel, viewbinding, hilt
iiCnma
A playground android app, showcasing the latest technologies and architectures using the Movie Database APIs.
Stars: ✭ 42 (-71.43%)
Mutual labels:  navigation-component, coroutines-flow, hilt, paging3
Photos
No description or website provided.
Stars: ✭ 74 (-49.66%)
Mutual labels:  room, material-components, hilt, paging3
MockAppMVVM
A sample app structure using the MVVM architecture using Retrofit, Dagger2, LiveData, RxJava, ViewModel and Room.
Stars: ✭ 14 (-90.48%)
Mutual labels:  room, viewmodel, lifecycle
android-clean-architecture
Sample for Android Clean Architecture.
Stars: ✭ 120 (-18.37%)
Mutual labels:  room, navigation-component, coroutines-flow
Jetpack-Compose-MVI-Demo
Demo / Sample Android Project created with Jetpack Compose and MVI Architecture Pattern
Stars: ✭ 114 (-22.45%)
Mutual labels:  room, viewmodel, hilt
Mvvmframe
🏰 MVVMFrame for Android 是一个基于Google官方推出的Architecture Components dependencies(现在叫JetPack){ Lifecycle,LiveData,ViewModel,Room } 构建的快速开发框架。有了MVVMFrame的加持,从此构建一个MVVM模式的项目变得快捷简单。
Stars: ✭ 218 (+48.3%)
Mutual labels:  room, viewmodel, lifecycle
catchflicks
🎬 Kitchen sink project for learning android concepts 🎬
Stars: ✭ 12 (-91.84%)
Mutual labels:  room, viewmodel, lifecycle
ResDelivery-Hilt-Coroutines-Mvvm-Single-Activity
This is a Sample Single Activity App (Multi Fragments) that uses Dagger-Hilt, Coroutines Flows, Paging 3 & Mvvm Clean Architecture
Stars: ✭ 28 (-80.95%)
Mutual labels:  navigation-component, coroutines-flow, hilt
Easychatandroidclient
EasyChat是一个开源的社交类的App。主要包含消息、好友、群组等相关的IM核心功能。部分界面参照了QQ、微信等相关社交APP。EasyChat APP整体采用MVVM模式,基于JetPack(Lifecycle,LiveData,ViewModel,Room)构建
Stars: ✭ 64 (-56.46%)
Mutual labels:  room, viewmodel, lifecycle
Tdcapp
Sample app which access the TDC (The Developer's Conference) REST API.
Stars: ✭ 55 (-62.59%)
Mutual labels:  room, viewmodel, lifecycle
Foodium
It simply loads Posts data from API and stores it in persistence storage (i.e. SQLite Database). Posts will be always loaded from local database. Remote data (from API) and Local data is always synchronized.
Stars: ✭ 1,940 (+1219.73%)
Mutual labels:  room, material-components, viewbinding
Delish
Delish, a Food Recipes App in Jetpack Compose and Hilt based on modern Android tech-stacks and MVI clean architecture.
Stars: ✭ 356 (+142.18%)
Mutual labels:  room, viewmodel, hilt
Rick-and-Morty
The Rick And Morty - MVVM with a clean architecture approach using some of the best practices in Android Development.
Stars: ✭ 45 (-69.39%)
Mutual labels:  room, navigation-component, coroutines-flow
Android Jetpack Demo
🔥 快速入门Android Jetpack以及相关Kotlin、RxJava、MVVM等主流技术,独立构架App的基础技能
Stars: ✭ 335 (+127.89%)
Mutual labels:  room, viewmodel, lifecycle
Simple-Notes-Kotlin-App
✍️ Simple Note Making App use mvvm architecture , dagger , coroutines and navigation component. Features includes 🗒️ create , edit and ❌ delete notes
Stars: ✭ 40 (-72.79%)
Mutual labels:  room, viewmodel, navigation-component
Simple-Note-App-with-Online-Storage
✍️ Simple Note Making App use Sqllite Room 🧰 for caching the notes and 📥 Firebase Database for online storage
Stars: ✭ 42 (-71.43%)
Mutual labels:  room, viewmodel, navigation-component
Mvvmarms
Android MVVM Architecture Components based on MVPArms and Android Architecture Components.
Stars: ✭ 425 (+189.12%)
Mutual labels:  room, viewmodel, lifecycle
Compose-ToDo
A fully functional Android TODO app built entirely with Kotlin and Jetpack Compose
Stars: ✭ 130 (-11.56%)
Mutual labels:  room, viewmodel, hilt

Newsster

Newsster is a demo application that uses MVVM pattern and Android Jetpack: the Pagging 3 library with a backend API, Saved State module for ViewModel, LiveData, ViewBinding, Room, Dagger-Hilt and Navigations Components. The app fetches data from the network with use of Retrofit integrating persisted data in the database via repository pattern. The app also uses and Kotlin Coroutines + Flow. Newsster provides translated text for the other languages, support for a landscape orientation and a night mode.

Tech stack & Open-source libraries

Jetpack components:

  • Paging 3 sets up a Repository that will use the local database to page in data for the UI and also back-fill the database from the network as the user reaches to the end of the data in the database.
  • Room Persistence - Access app's SQLite database with in-app objects and compile-time checks.
  • ViewBinding - allows to more easily write code that interacts with views and replaces findViewById.
  • ViewModel - UI related data holder, lifecycle aware.
  • Saved State module for ViewModel data that survives background process restart.
  • Lifecycles - Create a UI that automatically responds to lifecycle events.
  • LiveData - Build data objects that notify views when the underlying database changes.
  • SafeArgs for navigating and passing data between fragments.
  • Navigation - Handle everything needed for in-app navigation.
  • Room - Access app's SQLite database with in-app objects and compile-time checks.
  • Dagger-Hilt for dependency injection. Object creation and scoping is handled by Hilt.

Third party:

  • Glide for image loading.
  • Kotlin Coroutines + Flow for managing background threads with simplified code and reducing needs for callbacks
  • Retrofit2 & OkHttp3 - to make REST requests to the web service integrated.
  • Moshi to handle the deserialization of the returned JSON to Kotlin data objects.
  • Timber for logs.

Architecture:

  • MVVM Architecture
  • Repository pattern

Testing

Device Tests:

  • App Navigation Test - Navigation between screens is tested using Espresso UI framework and ActivityScenario for lifecycle state. Hilt provides test version of Repository and automatically generates a new set of components for each test. This is done with use of a CustomTestRunner that uses an Application configured with Hilt. In order to make Espresso aware of network operations UriIdlingResource is registered for UI test.
  • Database Testing - The project creates an in memory database for each database test but still runs them on the device.

Local Unit Tests:

  • Webservice Tests - The project uses MockWebServer project to test REST api interactions.
  • ViewModel Tests - ViewModels are tested using local unit tests with mock Repository implementations.
  • Repository Tests - Repository is tested using local unit tests with mock versions of Service and Database.

Design

  • Newsster is built with Material Components for Android.
  • The app starts with an asymmetric staggered list of news displayed in the RecyclerView widget. The screen also consists of options menu with category item as an icon in the app bar and setting item that appears in the overflow menu and lets the user switch themes and language. The screen takes the user to the article details with a beautiful collapsing layout.
  • The app has dialogs, buttons, menu and progress indicator customized for colors, shapes and typography. All clickable components behave intuitively changing their appearance when they are pressed.
  • The app has beautiful colors schemes for day and night modes.

Features

  • Translation for other languages.
  • Picking categories.
  • Opening an article's web site,
  • Sharing and article link,
  • Supporting landscape mode.

Preview

Open API

Newsster uses the NewsApi for constructing RESTful API. Obtain your free API_KEY NewsApi and paste it to the Constants file to try the app.

License

License

Copyright 2020 Ersiver

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.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].