Coder Social home page Coder Social logo

darrenatherton49 / upnext Goto Github PK

View Code? Open in Web Editor NEW
4.0 4.0 1.0 1.08 MB

An Android app to track your favourite movies and TV shows.

License: Apache License 2.0

Kotlin 100.00%
android android-application dagger2 kotlin movies rxjava2 tv-shows

upnext's People

Contributors

darrenatherton49 avatar

Stargazers

 avatar  avatar  avatar

Forkers

victorvicari

upnext's Issues

Update iconography in app

Update the iconography in the app, for example:

  • Add to watchlist
  • Add to list
  • Watched button
  • Bottom navigation icons

Make genre chips clickable

On the content detail screen, a movie or TV show has a list of genre chips. These chips should be clickable. When clicked, the user should be shown movies or TV shows for that genre (as a discover filter/tab).

Implement 'list' view mode XML

When the user clicks the view mode toggle from grid -> list, the app should show a list of movies or TV shows instead of a grid.

Implement the list mode XML layout.

Implement 'new list' screen

Implement a screen similar to YouTube where you can create a new list. If this screen is navigated to from the 'add to list' dialog, automatically add the movie/tv show passed in after the new list has been created.

  • Save new movie list to database
  • Save new tv show list to database
  • If movie or tv show is passed in as part of adding to list, add the content to the list in the database.
  • When complete, close the dialog and show some feedback to user (e.g. SnackBar saying 'list created' with a 'view list' button).

Go through the play store listing and optimise everything

Go through the play store listing and optimise everything.

  • Make sure to say things like 'this app does not allow you to watch movies or tv shows'
  • Give TMDB attribution etc.
  • Make sure there is no copyrighted content in the listing

Sort Movie lists

Have option to sort the list items, e.g. in the movie watch list

  • Recently watched
  • Alphabetical

WorkManager - refresh app data

Pre-load and cache the data needed for discover to work instantly (use WorkManager to periodically fetch data and also fetch it on first app run).

WorkManager - refresh config

Fetch and store a new config every 3 days (call the ConfigRepository refreshConfig() function) as per TMDB documentation.

TV - Mark episode/show as watched in database

  • When an episode is marked as 'watched', update the season 'watchCount'.
  • When an episode is marked as 'watched', update the episode 'watched' flag
  • Add each episode to the history list when it has been marked as watched.
  • Add show to 'watched' list and update its' Boolean fields when every episode has been watched.
  • The 'up next'/'watchlist' screen should have a button so that it is 'one click' to mark the next episode as 'watched'. So you should see the episode you're currently on, be able to click 'watched' and the next episode should come up. Also add 'undo' snackbar for this action for accidental clicks.

Implement person detail screen

Implement person detail screen - use a RecyclerView similar to the content detail screen so that we can customise and re-order sections.

Figure out when to invalidate data

Figure out when to invalidate data, e.g. stored movies, tv shows and people.

  • When to refresh the data (e.g. when someone goes to the movie detail screen, the getMovie() call should go to the network instead of the database if X time has passed or something)
  • When to delete the data (e.g. old searches)

Organise/sort mapper functions

Have a look at the different ViewMapper files and see if they can be sorted or split out into better-related functionality.

Fonts and capitalisation

Go through all TextViews and Buttons and ensure that:

  • Font is consistent throughout all text
  • TextAppearances are consistent - e.g. all titles have appearance X and all subtitles have appearance Y.
  • Capitalisation is correct and consistent throughout app.

Movie - Add movie to a custom list

  • 'Add to list' UI on movies screen
  • 'Add to list' UI on movie detail screen
  • When fetching lists, we need to find the 'checked' status for that specific movie. Probably need to look at the RoomMovieListJoin entity when constructing list items. If the movie exists in that table for a given list id, then the item isChecked should be true. Return a list of ContentListStatus containing the list data and the isChecked status.
  • Update database to create link between movie and list.

Sort TV show lists

Have option to sort the list items, e.g.

  • Recently watched
  • Newest episode
  • Alphabetical
  • Total episodes
  • Episodes left to watch

Turn on Proguard/R8 and configure rules for all libraries

  • Turn on ProGuard/R8 and configure rules for all libraries
  • Go through our Gradle dependencies and implement ProGuard configurations (such as keeping certain classes) for all libraries. Running ProGuard without this configuration usually breaks classes used e.g. in Dagger 2 or Retrofit, so we should check how to configure it for all dependencies as well as our own code.
  • Enable R8 and compare APK size before and after minify
  • Add deobfuscation files to developer console for bug reporting

Implement 'shows' screen

Implement Shows Screen

  • Watchlist
  • Watch history/Watched

This should be displayed as tabs in ShowsFragment.

Cut down all data models to decrease memory footprint

Cut down all data models I don't use to decrease memory footprint.

For example on the list/grid screens, we probably don't need a lot of the attributes other than the name and the image urls for the content. Then when we navigate to the detail screen, we get everything.

  • [] API models - comment out any fields we don't need to parse
  • [] Room models - comment out any fields we don't need to save
  • [] Domain models - comment out any fields we don't need to convert from API to domain
  • [] View models - instead of holding entire object (e.g. Movie), express the UI state only as fields we need (e.g. 'name', 'imageUrl' etc.)

Ensure consistent loading and error visuals

Every screen should have consistent loading and error visuals.

  • Ensure that errors and 'retry' layouts look the same on all screens.
  • Ensure that all loading spinners are central to the screen.

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.