Site icon Android Tutorial Online

The ultimate movie app built with Kotlin

The ultimate movie app built with Kotlin

FilmRave 🍿🎬

Welcome to filmRave, the ultimate movie app for film lovers! With filmRave, you can easily discover new movies, manage your watchlist, and get detailed information about your favorite films, all in one convenient place.

UsingΒ The Movie Database (TMDB) API,Β filmRave fetches up-to-date information about movies, including ratings, recommendations, movie trailers and much more. With a user-friendly dashboard, you can quickly access the most popular and trending movies, as well as new releases and upcoming films. You can also explore movies by genre or search for specific titles.

With the watchlist feature, you can keep track of the movies you want to see by adding in the watchlist section. FilmRave also offers similar movie recommendations based on your viewing history, so you can easily find new movies that match your interests.

Even if you’re without internet access, filmRave has got you covered with offline support. You can access your watchlist and recently viewed movies, even without an internet connection.

In addition to the clean and intuitive user interface, filmRave also provides detailed information about each movie, including trailers and clips, and other related content. The YouTube player integration allows you to watch trailers and other related content right within the app.

With filmRave, you’ll never miss a great movie again.

This project follows the MVVM structure with Clean Architecture.

Feature πŸ’ͺ🏻

Folder Structure πŸ—‚οΈ

β”œβ”€β”€ FilmRaveApp.kt
β”œβ”€β”€ core
β”‚Β Β  β”œβ”€β”€ adapter
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ BannerAdapter.kt
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ HomeAdapter.kt
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ HorizontalAdapter.kt
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ RecommendationsAdapter.kt
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ TopSearchesAdapter.kt
β”‚Β Β  β”‚Β Β  └── WatchListAdapter.kt
β”‚Β Β  β”œβ”€β”€ di
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ DatabaseModule.kt
β”‚Β Β  β”‚Β Β  └── NetworkModule.kt
β”‚Β Β  β”œβ”€β”€ network
β”‚Β Β  β”‚Β Β  └── ApiClient.kt
β”‚Β Β  └── utils
β”‚Β Β      β”œβ”€β”€ Constants.kt
β”‚Β Β      β”œβ”€β”€ DatastorePreferences.kt
β”‚Β Β      β”œβ”€β”€ DiffUtilCallback.kt
β”‚Β Β      β”œβ”€β”€ ExtensionUtil.kt
β”‚Β Β      β”œβ”€β”€ GsonParser.kt
β”‚Β Β      β”œβ”€β”€ JsonParser.kt
β”‚Β Β      β”œβ”€β”€ NetworkResult.kt
β”‚Β Β      └── ViewUtils.kt
β”œβ”€β”€ data
β”‚Β Β  β”œβ”€β”€ local
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ LocalDataSource.kt
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ MovieDataDao.kt
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ MovieDataTypeConverter.kt
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ MovieInfoDatabase.kt
β”‚Β Β  β”‚Β Β  └── entity
β”‚Β Β  β”‚Β Β      β”œβ”€β”€ MovieDataEntity.kt
β”‚Β Β  β”‚Β Β      └── WatchListEntity.kt
β”‚Β Β  β”œβ”€β”€ model
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ HomeFeedResponse.kt
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ MovieResponseList.kt
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ MovieResponseResult.kt
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ MovieResponseVideoList.kt
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ MovieResponseVideoResult.kt
β”‚Β Β  β”‚Β Β  └── WatchProvidersResponse.kt
β”‚Β Β  β”œβ”€β”€ remote
β”‚Β Β  β”‚Β Β  └── RemoteDataSource.kt
β”‚Β Β  └── repository
β”‚Β Β      β”œβ”€β”€ MovieInfoRepositoryImpl.kt
β”‚Β Β      β”œβ”€β”€ SearchInfoRepositoryImpl.kt
β”‚Β Β      └── WatchListInfoRepositoryImpl.kt
β”œβ”€β”€ domain
β”‚Β Β  β”œβ”€β”€ model
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ Genre.kt
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ HomeFeed.kt
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ MovieList.kt
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ MovieResult.kt
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ MovieVideoList.kt
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ MovieVideoResult.kt
β”‚Β Β  β”‚Β Β  └── WatchProviders.kt
β”‚Β Β  β”œβ”€β”€ repository
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ MovieInfoRepository.kt
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ SearchInfoRepository.kt
β”‚Β Β  β”‚Β Β  └── WatchListInfoRepository.kt
β”‚Β Β  └── usecase
β”‚Β Β      β”œβ”€β”€ GetMovieInfo.kt
β”‚Β Β      β”œβ”€β”€ SearchListInfo.kt
β”‚Β Β      └── WatchListInfo.kt
└── presentation
    β”œβ”€β”€ MainActivity.kt
    β”œβ”€β”€ base
    β”‚Β Β  └── BaseFragment.kt
    β”œβ”€β”€ details
    β”‚Β Β  └── DetailsFragment.kt
    β”œβ”€β”€ home
    β”‚Β Β  β”œβ”€β”€ HomeFragment.kt
    β”‚Β Β  └── MovieInfoViewModel.kt
    β”œβ”€β”€ intro
    β”‚Β Β  └── IntroFragment.kt
    β”œβ”€β”€ search
    β”‚Β Β  β”œβ”€β”€ SearchFragment.kt
    β”‚Β Β  └── SearchViewModel.kt
    β”œβ”€β”€ splash
    β”‚Β Β  └── SplashFragment.kt
    └── watchlist
        β”œβ”€β”€ WatchListFragment.kt
        └── WatchListViewModel.kt

Developed Using πŸ‘¨πŸ»β€πŸ’»

Note

Add your TMDB API key in gradle.properties under movieApiKey section..

GitHub

View Github

Exit mobile version