Materialistic is a Hacker News client for Android that is built with a clean, modern architecture and a focus on Material Design principles. It uses the official HackerNews/API and Algolia Hacker News Search API to provide a fast, reliable, and feature-rich experience.
Materialistic follows a modular architecture that separates concerns and promotes maintainability. The core components of the application are:
- Data Layer: The data layer is responsible for fetching and caching data from the Hacker News API and other sources. It uses Retrofit for making network requests and Room for local data persistence.
- Domain Layer: The domain layer contains the business logic of the application. It is responsible for transforming data from the data layer into a format that is easy for the presentation layer to consume.
- Presentation Layer: The presentation layer is responsible for displaying data to the user and handling user interactions. It uses the Model-View-ViewModel (MVVM) design pattern to separate the UI from the business logic.
The codebase is organized into the following packages:
data: Contains the data models, network clients, and local data sources for the application.accounts: Contains classes for managing user accounts.appwidget: Contains classes for implementing home screen widgets.ktx: Contains Kotlin extension functions that are used throughout the application.activities: Contains the activities that make up the application's UI.fragments: Contains the fragments that are used to build the activities' UIs.viewmodels: Contains the ViewModels that are used by the activities and fragments.
- JDK 21
- Latest Android SDK tools
- Latest Android platform tools
- AndroidX
- Clone the repository:
git clone https://github.com/hidroh/materialistic.git - Build the project:
./gradlew assembleDebug - To build with LeakCanary enabled, run:
./gradlew assembleDebug -Pleak
This project follows the official Kotlin style guide. Please make sure your contributions adhere to these guidelines.
- Supporting multiple themes in your Android app (Part 1)
- Supporting multiple themes in your Android app (Part 2)
- Building custom preferences with preference-v7
- Hacking up an ad blocker for Android
- Bottom sheet everything
Contributions are always welcome. Please make sure you read Contributing notes first.
Copyright 2015 Ha Duy Trung
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.



