A material-design Hacker News Android reader

Overview

Materialistic for Hacker News

Material design Hacker News client for Android, uses official HackerNews/API, Dagger for dependency injection and Robolectric for unit testing.

Get it on Google Play

Setup

Requirements

  • JDK 11
  • Latest Android SDK tools
  • Latest Android platform tools
  • AndroidX

Dependencies

Build

./gradlew assembleDebug

Build with LeakCanary on

./gradlew assembleDebug -Pleak

Grab your Mercury Web Parser API key here if you want to connect to Mercury.

Test Build Status

Run all/selective tests:

./gradlew testDebug
./gradlew testDebug --tests "*HackerNewsClientTest"

Coverage Coverage Status

./gradlew jacocoTestReport

Articles

Screenshots

Contributing

Contributions are always welcome. Please make sure you read Contributing notes first.

License

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.
Comments
  • Pdf support

    Pdf support

    Many HN posts are pdfs (e.g. Research papers, scientific reviews,...). It would be nice for this app to support them Device: Google Pixel, SDK: 26, app version: 74

    opened by materialistic-bot 19
  • What about proposing this amazing app to F-droid ?

    What about proposing this amazing app to F-droid ?

    Hi hidroh,

    I have just installed your app and I have to say that it is amazing :) I really like the look and it works well. I don't have the Google Play Store on my smartphone for privacy reasons, thus I mostly use apps from alternative appstores, mainly F-droid (https://f-droid.org/). I downloaded yours using the Google Play Downloader software (https://codingteam.net/project/googleplaydownloader). There are actually two apps on F-droid to read HN, but they are not as good as yours. Thus, I was wondering if you already thought about proposing Materialistic on F-droid. I think it might be a good idea.

    My 2 cents...

    opened by ademcan 15
  • Add PDF support

    Add PDF support

    First draft of the PDF support implementation.

    For rendering PDF, we use PDF.js to render PDF in a WebView. To provide PDF doc (which could be quite big) we stream it via the Android<->JavaScript bridge, PDF.js requests chunks it needs, and we serve them from the Android side through that bridge.

    So, currently it works this way:

    We check in WebFragment's downloadListener if the mime type is application/pdf, and if yes - we download the PDF file, and then start rendering the PDF loader (just an HTML file, that initializes PDF.js and hooks up the bridge, and also exposes some additional API (e.g. for zoom).

    The bridge provides access to the downloaded file, via RandomAccessFile. We need to support random access, therefore we can't use OkHttps BodyResponse and its streams, because it only allows to read forward, and doesn't support going back.

    The only way to make proper zoom is to rely on built-in WebView's zoom. So, I render PDF first with scale factor == 2, then set initial scale of WebView to 1%, which makes it to max scale out so it fits the window size.

    PDF.js render itself into a container you provide. Built-in PDF.js PdfViewer uses the container's height to figure out what pages it needs to load/render. Since in Materialistic the WebView's height wraps the content, we should use window's height instead of container's height for that. So, we inherit our custom CustomPdfViewer from PdfViewer and override that functionality.

    The only HTML/JS stuff I wrote is in assets/pdf/index.html and assets/pdf/script.js. All other stuff in assets/pdf/vendor/pdf.js/ is taken from the PDF.js repo without any changes.

    @hidroh, please take a look, and give me feedback on a general approach. Please disregard the tests for now, I'll focus on them later, when the functionality gonna be in place and correct.

    Thanks!

    opened by astashov 13
  • Offline stories showing blank

    Offline stories showing blank

    First off I'm a big fan of this app. Lately i'm having issues with saving stories for offline use. The comments download, but the app refuses to store the article (both readability and normal). After saving some articles in a row, the app flat out refuses to show me any article even. The widget refreshes badly too. There are duplicate entries after manually refreshing. When the widget updates at the set interval without an internet connection, the refresh time get's updated but the articles stay the same. Clearing the app cache solves both problems, but i don't want to keep resetting the app like this every day. Os: Oxygenos 3.1.4 Phone: oneplus X Device: OnePlus ONE E1003, SDK: 23, app version: 65

    bug 
    opened by materialistic-bot 11
  • Comment load crash

    Comment load crash

    I can consistently reproduce a crash;

    1. Open app
    2. Press the comment shortcut on a post
    3. Wait for load
    4. Go back
    5. Press the comment shortcut on the same post (or any others)
    6. Crash 👎

    Let me know if there's anything else I can do to further help.

    bug question 
    opened by lwis 11
  • Upvotes not going through

    Upvotes not going through

    Hi, I have been upvoting a few stories and comments over the past week. But recently, when I logged in from the web, I cannot see those in my profile. I think there is something wrong and the upvotes are not going through to HN. You can reach me on [email protected] if you have any questions. Thanks, Niranjan Device: Huawei Nexus 6P, SDK: 23, app version: 54

    bug 
    opened by materialistic-bot 11
  • Allow reloading web view if cache deleted

    Allow reloading web view if cache deleted

    If cache is not present then app should reload the story from the website. Currently is just shows all the stories but on opening it is blank. might be related to #448 maybe cache is the problem there too.

    enhancement feedback 
    opened by ShikherVerma 9
  • Always use in-app browser for Ask HN posts

    Always use in-app browser for Ask HN posts

    Hey @hidroh,

    I'm curious what your thoughts are for including a text post at the top of the comments page. It would be really nice to see the OP along with the comments. I dislike that I have to open the article view if I want to see the post. Ideally, the app should hide the article view for a post that goes back to HN and display the post with comments.

    I'd be down to work on this feature and submit a PR.

    enhancement 
    opened by Plastix 7
  • Obtrusive Fullscreen icon when viewing text post

    Obtrusive Fullscreen icon when viewing text post

    When you scroll through a text post, you actually cannot read the last words on 2-3 last lines because of the Fullscreen icon. It would be cool to at least be able to scroll the height of the button or more, depends on you. [Nexus 5X] Thanks for looking into this. :)

    bug 
    opened by MatyasKriz 7
  • Add post title when sharing

    Add post title when sharing

    It is a bit annoying to not be able to share a post from the app and have the post title in there, currently it only sends the URL, so I have to open in external browser and share from there.

    bug 
    opened by shadyvb 6
  • Mark posts as read by scrolling

    Mark posts as read by scrolling

    Currently there is no way to know where I ended up last time I opened the app, and there is no visual clue on what posts are new versus what I've read before ( talking about titles, not opening the post page itself ).

    It'd be great if we can implement a way to mark items as read by scrolling, just like Feedly does now, so you can storm through issues and be sure not to miss anything important. Or maybe a new flag to flag newer post since the last application run.

    enhancement feature 
    opened by shadyvb 6
  • Occasionally crashed when scrolling to update

    Occasionally crashed when scrolling to update

    Description

    I occasionally met with this bug when I tried to update the top stories by scrolling

    Environment

    Android: Android 9.0 App Version: 3.3

    Logcat

    01-01 12:00:25.956 4989 4989 E AndroidRuntime: FATAL EXCEPTION: main 01-01 12:00:25.956 4989 4989 E AndroidRuntime: Process: io.github.hidroh.materialistic, PID: 4989 01-01 12:00:25.956 4989 4989 E AndroidRuntime: java.lang.IllegalStateException: Exception thrown on Scheduler.Worker thread. Add onError handling. 01-01 12:00:25.956 4989 4989 E AndroidRuntime: at rx.android.schedulers.LooperScheduler$ScheduledAction.run(LooperScheduler.java:112) 01-01 12:00:25.956 4989 4989 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:873) 01-01 12:00:25.956 4989 4989 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:99) 01-01 12:00:25.956 4989 4989 E AndroidRuntime: at android.os.Looper.loop(Looper.java:193) 01-01 12:00:25.956 4989 4989 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:6669) 01-01 12:00:25.956 4989 4989 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) 01-01 12:00:25.956 4989 4989 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 01-01 12:00:25.956 4989 4989 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 01-01 12:00:25.956 4989 4989 E AndroidRuntime: Caused by: rx.exceptions.OnErrorNotImplementedException: length=500; index=500 01-01 12:00:25.956 4989 4989 E AndroidRuntime: at rx.internal.util.InternalObservableUtils$ErrorNotImplementedAction.call(InternalObservableUtils.java:386) 01-01 12:00:25.956 4989 4989 E AndroidRuntime: at rx.internal.util.InternalObservableUtils$ErrorNotImplementedAction.call(InternalObservableUtils.java:383) 01-01 12:00:25.956 4989 4989 E AndroidRuntime: at rx.internal.util.ActionSubscriber.onError(ActionSubscriber.java:44) 01-01 12:00:25.956 4989 4989 E AndroidRuntime: at rx.observers.SafeSubscriber._onError(SafeSubscriber.java:153) 01-01 12:00:25.956 4989 4989 E AndroidRuntime: at rx.observers.SafeSubscriber.onError(SafeSubscriber.java:115) 01-01 12:00:25.956 4989 4989 E AndroidRuntime: at rx.exceptions.Exceptions.throwOrReport(Exceptions.java:212) 01-01 12:00:25.956 4989 4989 E AndroidRuntime: at rx.observers.SafeSubscriber.onNext(SafeSubscriber.java:139) 01-01 12:00:25.956 4989 4989 E AndroidRuntime: at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.call(OperatorObserveOn.java:224) 01-01 12:00:25.956 4989 4989 E AndroidRuntime: at rx.android.schedulers.LooperScheduler$ScheduledAction.run(LooperScheduler.java:107) 01-01 12:00:25.956 4989 4989 E AndroidRuntime: ... 7 more 01-01 12:00:25.956 4989 4989 E AndroidRuntime: Caused by: java.lang.ArrayIndexOutOfBoundsException: length=500; index=500 01-01 12:00:25.956 4989 4989 E AndroidRuntime: at io.github.hidroh.materialistic.widget.StoryRecyclerViewAdapter$4.onInserted(StoryRecyclerViewAdapter.java:399) 01-01 12:00:25.956 4989 4989 E AndroidRuntime: at androidx.recyclerview.widget.BatchingListUpdateCallback.dispatchLastEvent(BatchingListUpdateCallback.java:61) 01-01 12:00:25.956 4989 4989 E AndroidRuntime: at androidx.recyclerview.widget.BatchingListUpdateCallback.onRemoved(BatchingListUpdateCallback.java:96) 01-01 12:00:25.956 4989 4989 E AndroidRuntime: at androidx.recyclerview.widget.DiffUtil$DiffResult.dispatchUpdatesTo(DiffUtil.java:911) 01-01 12:00:25.956 4989 4989 E AndroidRuntime: at io.github.hidroh.materialistic.widget.StoryRecyclerViewAdapter.setUpdated(StoryRecyclerViewAdapter.java:396) 01-01 12:00:25.956 4989 4989 E AndroidRuntime: at io.github.hidroh.materialistic.widget.StoryRecyclerViewAdapter.setItems(StoryRecyclerViewAdapter.java:283) 01-01 12:00:25.956 4989 4989 E AndroidRuntime: at io.github.hidroh.materialistic.ListFragment.onItemsLoaded(ListFragment.java:249) 01-01 12:00:25.956 4989 4989 E AndroidRuntime: at io.github.hidroh.materialistic.ListFragment.lambda$onActivityCreated$4(ListFragment.java:187) 01-01 12:00:25.956 4989 4989 E AndroidRuntime: at io.github.hidroh.materialistic.ListFragment.$r8$lambda$KCbw5lT5IwQLfeH-hTN8C5vik10(Unknown Source:0) 01-01 12:00:25.956 4989 4989 E AndroidRuntime: at io.github.hidroh.materialistic.ListFragment$$ExternalSyntheticLambda2.onChanged(Unknown Source:4) 01-01 12:00:25.956 4989 4989 E AndroidRuntime: at androidx.lifecycle.LiveData.considerNotify(LiveData.java:133) 01-01 12:00:25.956 4989 4989 E AndroidRuntime: at androidx.lifecycle.LiveData.dispatchingValue(LiveData.java:151) 01-01 12:00:25.956 4989 4989 E AndroidRuntime: at androidx.lifecycle.LiveData.setValue(LiveData.java:309) 01-01 12:00:25.956 4989 4989 E AndroidRuntime: at androidx.lifecycle.MutableLiveData.setValue(MutableLiveData.java:50) 01-01 12:00:25.956 4989 4989 E AndroidRuntime: at io.github.hidroh.materialistic.StoryListViewModel.setItems(StoryListViewModel.java:47) 01-01 12:00:25.956 4989 4989 E AndroidRuntime: at io.github.hidroh.materialistic.StoryListViewModel.lambda$refreshStories$3(StoryListViewModel.java:42) 01-01 12:00:25.956 4989 4989 E AndroidRuntime: at io.github.hidroh.materialistic.StoryListViewModel.$r8$lambda$yA_bLy3goAa16fjN4fE6mDqYKaM(Unknown Source:0) 01-01 12:00:25.956 4989 4989 E AndroidRuntime: at io.github.hidroh.materialistic.StoryListViewModel$$ExternalSyntheticLambda3.call(Unknown Source:4) 01-01 12:00:25.956 4989 4989 E AndroidRuntime: at rx.internal.util.ActionSubscriber.onNext(ActionSubscriber.java:39) 01-01 12:00:25.956 4989 4989 E AndroidRuntime: at rx.observers.SafeSubscriber.onNext(SafeSubscriber.java:134) 01-01 12:00:25.956 4989 4989 E AndroidRuntime: ... 9 more

    opened by Kobayashi-996 0
  • Got a NullPointerException and crashed

    Got a NullPointerException and crashed

    Environment

    Android: Android 9.0 App Version: 3.3

    ScreenRecord

    https://user-images.githubusercontent.com/120108516/210244787-2167ec8b-d395-4f6f-a60e-541795b8440c.mp4

    Clicked the email and crashed.

    Logcat

    FATAL EXCEPTION: main Process: io.github.hidroh.materialistic, PID: 26422 java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.String java.lang.CharSequence.toString()' on a null object reference at java.lang.String.contains(String.java:2196) at io.github.hidroh.materialistic.AppUtils.openWebUrlExternal(AppUtils.java:105) at io.github.hidroh.materialistic.AppUtils$1.onTouch(AppUtils.java:166) at android.view.View.dispatchTouchEvent(View.java:12509) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719) at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:440) at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1830) at android.app.Activity.dispatchTouchEvent(Activity.java:3400) at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69) at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:398) at android.view.View.dispatchPointerEvent(View.java:12752) at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:5106) at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4909) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4426) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4479) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4445) at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4585) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4453) at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4642) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4426) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4479) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4445) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4453) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4426) at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:7092) at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:7061) at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:7022) at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:7195) at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:186) at android.os.MessageQueue.nativePollOnce(Native Method) at android.os.MessageQueue.next(MessageQueue.java:326) at android.os.Looper.loop(Looper.java:160) at android.app.ActivityThread.main(ActivityThread.java:6669) at java.lang.reflect.Method.invoke(Native Method)

    opened by Kobayashi-996 0
  • Twitter redirect to nitter

    Twitter redirect to nitter

    Would be nice to have setting to redirect twitter links to chosen nitter server.

    For now I created app twitter2nitter which will redirect if you share twitter link to it.

    But as I say in this situation baked in option would be noice.

    opened by AucT 0
  • Please add an option to save a link to a comment

    Please add an option to save a link to a comment

    Currently, sharing a comment shares the content of the comment but not a link to the comment itself. Sometimes you want to save a comment for later to go back to it...

    opened by mderazon 0
  • App is not listed in google play

    App is not listed in google play

    I reset my phone but I cannot find the app to the play store in order to re-install it. Is it a problem with my device or a general one? Can I find it somewhere else?

    opened by nikolaof 7
Releases(79)
Flym News Reader is a light Android feed reader (RSS/Atom)

BEWARE: Google added some restrictions to news app and I don't see how Flym (and other RSS aggregators) could comply to that. For instance, Flym canno

Frédéric Julian 938 Jan 1, 2023
Flym News Reader is a light Android feed reader (RSS/Atom)

BEWARE: The original developer stopped the development of the app so I'm starting to work on it to improve it and maintain it. Flym News Reader Light

null 0 Jul 26, 2022
An open source Hacker News client for Android.

Hacker News Come chat with us on Gitter.im! An open source Hacker News client for Android phones & tablets. Available on the Google Play Store How to

Matthew Bishop 227 Dec 11, 2022
Hacker News Android App - Made with Kotlin

HackerNewsApp Hacker News Android App - Made with Kotlin Simple app that request, the latests HackerNews posts and allows to delete items from the cli

Fernando Herrera 1 Dec 8, 2021
Android News App built in kotlin with implementation of MVVM architecture, android navigation components and retrofit. Displays news to users allowing them to share and save news.

News-App Android news app built in kotlin that fetches news data from news api with Retrofit and displays news to users. This App follow MVVM architec

Raj Manjrekar 16 Dec 29, 2022
A news app made using android studio in Java with features like favourite news, Location detector for local news, and especially made with HUAWEI APIs

HuaweiGlobalNewsApp A news app made using android studio in Java with features like favourite news, Location detector for local news, and especially m

Christian Imanuel Hadiwidjaja 1 Oct 30, 2021
News-App - A news app Which displays news with the help of JSON data

News-App This is a news app Which displays news with the help of JSON data

Lalith Sharma 0 Feb 16, 2022
A News Application Shows Breaking News of the Country with a feature to save News for future Use.

A News Application Shows Breaking News of the Country with a feature to save News for future Use.You can search news on any topic.Used all latest stuffs in android like Navigation Component, MVVM Architecture, Retrofit, Room DataBase, Kotlin Corutines etc

Aman Bhatt 2 Oct 20, 2022
📱:newspaper: Android client for the Nextcloud news/feed reader app

Nextcloud News Reader – Android App The Nextcloud News Reader Android App is under AGPLv3 License terms. Bugs and enhancements can be reported under:

Nextcloud 589 Dec 31, 2022
📱:newspaper: Android client for the Nextcloud news/feed reader app

Nextcloud News Reader – Android App The Nextcloud News Reader Android App is under AGPLv3 License terms. Bugs and enhancements can be reported under:

Nextcloud 591 Jan 8, 2023
Anxiety free news reader for Android - developed using Kotlin

Android River is a modern Android 2.2 news app. It's now version 1.15. Android River has the following features: Read RSS 1.0, RSS 2.0 and ATOM 1.0. C

Dody Gunawinata 319 Nov 10, 2022
Android News Reader app. Kotlin Coroutines, Retrofit and Realm

News Reader Android News Reader app Code that follows Packt Publishing Kotlin in Practice Video Course Example of Kotlin Coroutine usage, with Realm a

Marko Devcic 22 Oct 3, 2022
Readow - Readow RSS Reader application. It’s fast and clean, giving you the freedom to enjoy your favorite news

Readow Readow RSS Reader application. It’s fast and clean, giving you the freedo

Pradeep Hr 7 Sep 20, 2022
This is a News Application for android mobiles, fetching news through Guardian API.

News-In-Hand This is a NEWS FEED APP which gives a user regularly-updated news from the Internet. To achieve this, I use the Guardian API. This is a w

Bhramar Virmani 1 Nov 5, 2021
NewsFeedApp - An android news-feed-app which shows latest news of various sources

NewsFeedApp An android news-feed-app which shows latest news of various sources

Srihitha Tadiparthi 4 Aug 8, 2022
Newesy is news app which uses NewsAPI to fetch news.

Newesy is news app which uses NewsAPI to fetch news.The main aim of this app was to learn Modern Android Architecture (MVVM).It uses MVVM,Kotlin-coroutines,Room,ViewModal,Retrofit,GSON and Navigation graph

SHANTANU RATHOD 7 Oct 29, 2022
The News App has been carried out within the framework of the MVVM architecture, information about news is obtained by consulting an API, it is built usisng Jetpack Copose, Coroutines, Dependency Injection with Hilt and Retrofit

Journalist The News App consists of an application that displays the latest news from EEUU from an API that provides official and updated information.

null 0 Nov 3, 2021
A simple app to showcase Androids Material Design and some of the cool new cool stuff in Android Lollipop. RecyclerView, CardView, ActionBarDrawerToggle, DrawerLayout, Animations, Android Compat Design, Toolbar

#Android-LollipopShowcase This is a simple showcase to show off Android's all new Material Design and some other cool new stuff which is (new) in Andr

Mike Penz 1.8k Nov 10, 2022
📱 Android Library to implement Rich, Beautiful, Stylish 😍 Material Navigation View for your project with Material Design Guidelines. Easy to use.

Material NavigationView for Android ?? ?? Android Library to implement Rich, Beautiful Material Navigation View for your project with Material Design

Shreyas Patil 198 Dec 17, 2022