Skip to content

πŸŽ₯🎬🎞️ Movie Mashup : A personal feed for movie buffs. Android boilerplate app, using Kotlin with MVVM architecture, Dagger2, RxAndroid, Data Binding, layers-by-features & other standard practices.

License

Notifications You must be signed in to change notification settings

SaadAAkash/movie-mashup

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

45 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Movie Mashup

The personal feed for movie buffs

GitHub license PRs Welcome Maintenance Open Source Love svg1 made-with-love

An app with a simple feed for exploring the world of silver screen in your Android smartphone and much more (currrently in development). The whole app is developed using Kotlin in MVVM architecture, with Dagger for Dependency Injection and RxAndroid as Reactive Extension. The codebase also contains data binding, layers-by-features and other standard practices.

Features

  • A Simple App with a Feed
  • Discovering Trending and Upcoming Movies
  • A short movie plot as an appetizer to your hunger for movies

Requirement Analysis

Thought Process & MVVM Architecture Implementation

Requirement Specifications

  • A Native Android Application using Kotlin as the only and primary language
  • An app using the APIs available at TMDB (The Movie DB)
  • A possible full version web demo
  • Responsiveness in layout designs

Design Choices

  • Easy & Quick ways:
    • A Simple ListView inside ViewHolder
    • Recylarview+CardView
    • Expandable item layout if possible
  • More Complicated ways:
    • Tabbed Layouts with each of the categories & data associated with it
    • Grid Recycler Layout style for adapting a continuing number of features in the layout

The last option has been chosen and implemented in the app.

Development Resources Used

Technology Used

  • Kotlin
  • Android Jetpack
  • Libraries (AndroidX) and Android Architecture Componenets
    • Foundation - Components for core system capabilities, Kotlin extensions and support for multidex and automated testing.
      • AppCompat - Degrade gracefully on older versions of Android.
      • Android KTX - Write more concise, idiomatic Kotlin code.
    • Architecture - A collection of libraries that help you design robust, testable, and maintainable apps. Start with classes for managing your UI component lifecycle and handling data persistence.
      • Lifecycles - Create a UI that automatically responds to lifecycle events.
      • LiveData - Build data objects that notify views when the underlying database changes.
      • ViewModel - Store UI-related data that isn't destroyed on app rotations. Easily schedule asynchronous tasks for optimal execution.
    • UI - Details on why and how to use UI Components in your apps - together or separate
    • Dependency Injection
    • Reactive Extensions

Build Instructions

This project uses the Gradle build system. To build this project, use the gradlew build command or use "Import Project" in Android Studio.

Prerequisites

  • Android Studio 3.4. The latest version can be downloaded from here
  • Build gradle 3.4.0+
  • Android SDK 28
  • JDK 8
  • Kotlin Version 1.3.30

Install the apk

Head over to Releases in the repo and download the apk file from the latest release.

App Screenshots

Contributing

Directory Structure

The following is a high level overview of relevant files and folders.

MovieMashup/
β”œβ”€β”€ app/
β”‚   β”œβ”€β”€ build/
β”‚   β”œβ”€β”€ libs/
β”‚   β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ build.gradle
β”‚   β”œβ”€β”€ proguard-rules.pro
β”‚   └── ...
β”œβ”€β”€ build/ 
β”‚   └── kotlin/      
β”‚       └── sessions/
β”‚           └── ...
β”œβ”€β”€ gradle/ 
β”‚   └── wrapper/      
β”‚       β”œβ”€β”€ gradle-wrapper.jar
β”‚       └── gradle-wrapper.properties
β”œβ”€β”€ Resources/
β”‚   β”œβ”€β”€ Screenshots
β”‚   β”‚   └── ... 
β”‚   └── mvvm-architecture-lyst
β”œβ”€β”€ build.gradle
β”œβ”€β”€ _config.yml
β”œβ”€β”€ gradle.properties
β”œβ”€β”€ local.properties
β”œβ”€β”€ settings.gradle
β”œβ”€β”€ README.md
└── ...

File Uses

  • <PROJECT_ROOT>\build.gradle : Top-level build file with configuration options common to all sub-projects/modules
  • <PROJECT_ROOT>\app\build.gradle : Gradle specific for app module with libraries used
    • If you use another module in your project, as a local library, you would have another build.gradle file: <PROJECT_ROOT>\module\build.gradle
  • _config.yml for setting up jekyll environment
  • Change <PROJECT_ROOT>\app\proguard-rules.pro if you add Java codes, guard for kotline codes have been added. Uncomment lines if you want to preserve the line number information for debugging stack traces

Create a branch

  1. git checkout master from any folder in your local MovieMashup repository
  2. git pull origin master to ensure you have the latest main code
  3. git checkout -b the-name-of-my-branch (replacing the-name-of-my-branch with a suitable name) to create a branch

Make the change

  1. Change/Add the codes
  2. Save the files and check the codes if it has successfl build config.

Test the change

  1. If possible, test the codes the way you want.

Push it

  1. git add -A && git commit -m "My message" (replacing My message with a commit message, such as Fixed App Crash or Added App Crash 28 Fix) to stage and commit your changes
  2. git push my-fork-name the-name-of-my-branch
  3. Go to the MovieMashup and you should see recently pushed branches.
  4. Follow GitHub's instructions and open up a pull request.
  5. If possible, include screenshots of visual changes.

License

The code base is GNU GENERAL PUBLIC LICENSE v3.0 (GNU GPLv3)