Giter Club home page Giter Club logo

movieratings's Introduction

Flutter - Movie Ratings

status

You can get the latest Playstore version here on Playstore - or download directly - 0.4.5

Screenshots of master

Search Page Favorites Page Movie Page
Collections Page Collection Page Settings Page
Series Page List of Episodes on Series Page Episode Page

Contribute

Contributions are welcome!

To build the project, create local.properties in the base directory if it does not exist and add following line to it.

omdb_api_key=<API_KEY>
ratings_endpoint=<RATINGS_ENDPOINT>
ratings_api_key=<RATINGS_API_KEY>

You can get your API key here - OMDB API Key

If you don't have an API key, you can use omdb_api_key="" and the project will use PreloadedMovieProvider in debug build. It will return search results for thor and batman only.

RATINGS_ENDPOINT is Flutter's private server to obtain accurate ratings. You may keep it as empty string and it will fallback to OMDB api. If you wish to contribute to the project, please send me an email and I can give you a temporary api key.

What can you contribute?

  • Bug fixes and improvements
  • Features (make sure that you are assigned to it)
  • Design changes (If you're a designer and would like to improve the designs, please get in touch)
  • Architecture changes (Please discuss what you want to improve before working on it)
  • Support for more apps (You're the best!)
  • Any other changes? Please get in touch.

Beginners?

Are you new to android development? I encourage you to contribute to the project. If you find some issue that you want to fix but don't know where to start? I'd by happy to guide you.

Playstore description

Flutter is a smart app that helps you decide what to watch on streaming apps like Netflix and Amazon Prime! It shows movie ratings on your screen making sure that you don't even have to search for it. It's completely ad-free and promotion-free.

Accessibility services disclaimer

This app uses Accessibility services. Flutter uses accessibility services to retrieve and read the window content to obtain name of the movies when you're using supported streaming apps. Once the title is obtained, the app will show its IMDb rating on your screen.

What does Flutter do?

Some of the video streaming apps do not show you ratings of the title that you want to see, be it a movie, a documentary or a TV show. The change in Netflix rating system caused an uproar in the online community. When you want to find out if a movie is good or bad before watching it on your streaming services, you would probably search it on Google or Imdb to find the ratings and reviews. Flutter makes your life easier by showing you the movie ratings directly on your screen without typing a single letter. Flutter also offers a support for Text to speech and speaks out the movie rating which is very useful for someone with disabilities.

Is that all Flutter does?

That is the primary functionality of the app. But it has much more to offer. Flutter provides an in-built search to find new movies, TV shows to watch. You can create your own collections based on your personal choices, browse your history and keep a list of everything that you like. Keep up with the latest version to get the new features.

How does Flutter work?

Flutter is smart and lightweight (just over 2MB in size). It uses Android's accessibility feature to get movie names from streaming apps like Netflix, BBC iPlayer, Jio TV, etc. It looks up the movie on the internet, gets basic details and accurate ratings from Open Movie Database, and shows you the ratings on your phone instantly without any hassles. Whenever you open a page of a movie or a TV show, you'll see the ratings on the bottom-right side of your screen.

This movie rating app doesn't ask for your contacts or personal details, bother you with push notifications. It’s active only when you're browsing the content on video streaming apps and it will sleep peacefully the rest of the time to save as much battery as possible. We care about your privacy and do not send your personal information to the cloud.

How to make it work?

Flutter is brilliant but you're the boss! You need to enable Flutter's accessibility in Accessibility settings on your phone. But there's an easier way. Open the app, click the button and it will open up settings for you. Enable it. Sit back, relax and enjoy watching your movies!

Apps that Flutter supports?

  • Netflix, Amazon Prime Video and Google Play Movies & TV for the worldwide audience.
  • BBC iPlayer for UK users.
  • Hotstar, Jio TV and Jio Cinema for our Indian users.
  • Redbox app (as per use request)
  • Support for other popular streaming apps coming soon!

What’s the future of Flutter?

  • Support for Android TV!
  • Support for more streaming apps - so that whatever you use, Flutter will be there to help you out with movie ratings!
  • We want Flutter to be your go-to pal for anything related to movies, documentaries and TV shows from ratings to recommendations.

Concerns?

Flutter uses Open Movie Database to get movie ratings so it is possible that it might not have the ratings of some not so popular movies. Open Movie Database has ratings gathered from various popular websites like Imdb. Flutter is not endorsed by or affiliated with Imdb.com or omdbapi.com For any concerns, queries, or feedback, write to us at [email protected]


movieratings's People

Contributors

jayrambhia avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

movieratings's Issues

Better Onboarding

Since the search feature was added, the app does not show the right information when the user starts the app for the first time. The app should have a better onboarding.

Support for offline backup.

Right now, Flutter is completely offline in terms of storing the data. There should be an option so that if people change the phones or reset, they should still be able to retrieve their data.

  • Export data into some file
  • Import that file
  • Decide on import strategy (conflicting collections - create new collection, replace, add entries)
  • Sync movies (When we import favs, collections, the receiver device may not have all the movie data and we need some strategy to sync. But the export file has movie data, so should we worry about it or not)
  • Activity to open import from other apps
  • Export only the required movies data
  • Check if we can write to a file without using write storage permission. (Yes, we can).

Investigate other APIs (TVDb, etc)

Right now, Flutter is using OMDb API. It works most of the times, but we need something better.

  • Better search results even if provided year is incorrect.
  • Able to find movies based on translated titles.
  • Give rotten tomatoes ratings also.

Customize Rating bubble

  • Users can change color.
  • User can change the position of the bubble.
  • Users can change color of the toast.

The OMDB API does not return result if the year is incorrect

eg. That '70s Show. Netflix shows year as 2005, but it actually started in 1998 so the api call with y=2005 does not work but the api call with y=1998 or without y, works just fine.

Add a fallback.
If the api doesn't give any response, try once without the year parameter.

  • Add fallback for api call without year
  • Netflix has some issues with putting up correct year, so maybe ask user if they want to use the year or not (in settings)?

Fix volume slider issue

Volume slider doesn't go away quickly since 0.2.1.

Upon inspection, it turns out to be related to accessibilityFeedbackType in xml serviceconfig.

i will love to do copywriting for you

I love your application and would want to contribute to it, I'm not a developer but I am good at copywriting. I would love to make a copywrite for your Readme and make a pull request for you to merge. Your response would be highly appreciated. Also I would like to request if we could communicate via email, so I don't have to create issues. Thank you.

NFC based sharing

  • share movie
  • share collections

Why?

  • It's fancy
  • Learn how NFC framework works.

Optimize memory usage

A lot of dependencies are application scoped which means that they are in memory all the time (because the accessibility service is on all the time).

  • Optimize dependencies used in the service. Use a time threshold to clear the dependencies and initialize again when required.
  • Since there's only one activity, we can use Activity scoped dependencies.

Add text to speech support

This feature will read out loud the rating of the title.

  • Add TTS to NetflixReaderService
  • Add TTS to MoviePage
  • Optimize TTS for memory
  • Investigate battery drain

Support for private ratings API

The basic api to get accurate movie ratings is ready.

  • Integrate API with the app
  • Add security
  • Give option to switch to omdb api (till the API is stable)

Autohide the floating window after x seconds.

Since the app is not listening to all the events, we don't get window state change event when user closes the app. So we should probably remove the rating after x seconds.

  • Remove window automatically after x seconds.
  • Let user configure the time threshold.

IllegalStateException error in DonatePageFragment (Crash)

  at com.fenchtose.movieratings.features.f.a.a (SourceFile:91)
  at com.fenchtose.movieratings.features.f.a.a (SourceFile:15)
  at com.fenchtose.movieratings.features.f.a$e.a (SourceFile:64)
  at com.android.billingclient.api.c$3$1.run (SourceFile:484)
  at android.os.Handler.handleCallback (Handler.java:790)
  at android.os.Handler.dispatchMessage (Handler.java:99)
  at android.os.Looper.loop (Looper.java:164)
  at android.app.ActivityThread.main (ActivityThread.java:6494)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:438)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:807)

And

  at com.fenchtose.movieratings.features.f.a$e.a (SourceFile:64)
  at com.android.billingclient.api.c$3$1.run (SourceFile:484)
  at android.os.Handler.handleCallback (Handler.java:751)
  at android.os.Handler.dispatchMessage (Handler.java:95)
  at android.os.Looper.loop (Looper.java:154)
  at android.app.ActivityThread.main (ActivityThread.java:6692)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1468)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1358)

NPE on CollectionListPageFragment

Caused by b.g: null cannot be cast to non-null type com.fenchtose.movieratings.features.moviecollection.collectionlist.CollectionListPageFragment.CollectionListPagePath
       at com.fenchtose.movieratings.features.moviecollection.collectionlist.CollectionListPageFragment.shouldReturnSelection(SourceFile:178)
       at com.fenchtose.movieratings.features.moviecollection.collectionlist.CollectionListPageFragment.onViewCreated(SourceFile:69)
       at android.support.v4.app.FragmentManagerImpl.moveToState(SourceFile:1430)
       at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(SourceFile:1740)
       at android.support.v4.app.FragmentManagerImpl.moveToState(SourceFile:1809)
       at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(SourceFile:3217)
       at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(SourceFile:3171)
       at android.support.v4.app.FragmentController.dispatchActivityCreated(SourceFile:192)
       at android.support.v4.app.FragmentActivity.onStart(SourceFile:560)
       at android.support.v7.app.AppCompatActivity.onStart(SourceFile:177)
       at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1248)
       at android.app.Activity.performStart(Activity.java:6696)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2628)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
       at android.app.ActivityThread.-wrap12(ActivityThread.java)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:154)
       at android.app.ActivityThread.main(ActivityThread.java:6119)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

Playstore crash report - NPE in NetflixReaderService (0.2.2)

Reported in version 0.2.2

java.lang.NullPointerException: 
  at com.fenchtose.movieratings.NetflixReaderService.onAccessibilityEvent (SourceFile:149)
  at android.accessibilityservice.AccessibilityService$2.onAccessibilityEvent (AccessibilityService.java:1550)
  at android.accessibilityservice.AccessibilityService$IAccessibilityServiceClientWrapper.executeMessage (AccessibilityService.java:1735)
  at com.android.internal.os.HandlerCaller$MyHandler.handleMessage (HandlerCaller.java:37)
  at android.os.Handler.dispatchMessage (Handler.java:105)
  at android.os.Looper.loop (Looper.java:164)
  at android.app.ActivityThread.main (ActivityThread.java:6938)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.Zygote$MethodAndArgsCaller.run (Zygote.java:327)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1374)

Bottom Navigation in Flutter

Investigate

  • Does it make sense the design to have a bottom navigation. Is it required?
  • Would it work well with Router?
  • Does it work with android navigation?

Design

  • What tabs should be there?
  • How it's gonna look and what is the user experience going to be like?

java.lang.IllegalStateException due to node.recycle() (in 0.2.3)

java.lang.IllegalStateException: 
  at android.util.Pools$SimplePool.release (Pools.java:112)
  at android.util.Pools$SynchronizedPool.release (Pools.java:161)
  at android.view.accessibility.AccessibilityEvent.recycle (AccessibilityEvent.java:1033)
  at com.fenchtose.movieratings.NetflixReaderService.onAccessibilityEvent (SourceFile:175)
  at android.accessibilityservice.AccessibilityService$2.onAccessibilityEvent (AccessibilityService.java:1527)
  at android.accessibilityservice.AccessibilityService$IAccessibilityServiceClientWrapper.executeMessage (AccessibilityService.java:1712)
  at com.android.internal.os.HandlerCaller$MyHandler.handleMessage (HandlerCaller.java:37)
  at android.os.Handler.dispatchMessage (Handler.java:105)
  at android.os.Looper.loop (Looper.java:172)
  at android.app.ActivityThread.main (ActivityThread.java:6637)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.Zygote$MethodAndArgsCaller.run (Zygote.java:240)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:767)

Share collections

We have import and export ready. So we can start working on this.

  • Export collection
  • Import collection
  • Strategy for collection sync
  • Share one collection
  • Share all the collections
  • Give user an option which ones they want to import
  • See why WhatsApp doesn't show Flutter in open with
  • File names for sharing.

TTS activity not found crash.

User reported that the app is constantly crashing on OnePlus 5T. The logs show that it's due to startActivityForResult call to check for TTS but the activity is not available in the ROM.

java.lang.RuntimeException: 
  at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2666)
  at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2727)
  at android.app.ActivityThread.-wrap12 (ActivityThread.java)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1478)
  at android.os.Handler.dispatchMessage (Handler.java:102)
  at android.os.Looper.loop (Looper.java:154)
  at android.app.ActivityThread.main (ActivityThread.java:6121)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:892)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:782)
Caused by: android.content.ActivityNotFoundException: 
  at android.app.Instrumentation.checkStartActivityResult (Instrumentation.java:1809)
  at android.app.Instrumentation.execStartActivity (Instrumentation.java:1523)
  at android.app.Activity.startActivityForResult (Activity.java:4228)
  at android.support.v4.a.f.startActivityForResult (SourceFile:54)
  at android.support.v4.a.i.startActivityForResult (SourceFile:67)
  at android.app.Activity.startActivityForResult (Activity.java:4186)
  at android.support.v4.a.i.startActivityForResult (SourceFile:720)
  at com.fenchtose.movieratings.MainActivity.u (SourceFile:263)
  at com.fenchtose.movieratings.MainActivity.onCreate (SourceFile:103)
  at android.app.Activity.performCreate (Activity.java:6682)
  at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1118)
  at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2619)

Handle 404 errors from flutter API

If the API returns 404, it's not going to return the ratings the next time. In order to decrease the stress on the server, we should "cache" 404 responses for certain time period.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.