All Projects → majorkik → MovieBox

majorkik / MovieBox

Licence: GPL-3.0 license
TMDb + Kotlin + Coroutines + Retrofit2 + Moshi + Clean Architecture + Koin 2 + Glide

Programming Languages

kotlin
9241 projects

Projects that are alternatives of or similar to MovieBox

Wiggles
🐶 Beautiful Puppy adoption app with Jetpack Compose #AndroidDevChallenge
Stars: ✭ 365 (+693.48%)
Mutual labels:  jetpack, jetpack-compose
compose-ratingbar
A ratingbar composable for jetpack compose 🚀🌟
Stars: ✭ 89 (+93.48%)
Mutual labels:  jetpack, jetpack-compose
GitReposCompose
GitReposCompose is an Android application 📱 for showcasing Jetpack Compose for building declarative UI in Android. This demo app uses Github public API for fetching public repositories.
Stars: ✭ 32 (-30.43%)
Mutual labels:  jetpack, jetpack-compose
RocketXDelight-Playground
Native Android application built with Kotlin and Jetpack Compose. This project also illustrates the usage of advanced libraries such as Ktor, SqlDelight, Hilt, etc with the recommended practices and Unit Tests.
Stars: ✭ 37 (-19.57%)
Mutual labels:  jetpack, jetpack-compose
Jetpack Kotlin Eyepetizer
一款基于Kotlin + Jetpack核心组件 + 协程 + 组件化实现的精美仿开眼视频App(提供Flutter、React Native、小程序版本 😁 )
Stars: ✭ 82 (+78.26%)
Mutual labels:  jetpack, coil
Awesome-Android-Open-Source-Projects
👓 A curated list of awesome android projects by open-source contributors.
Stars: ✭ 401 (+771.74%)
Mutual labels:  jetpack, jetpack-compose
SSJetpackComposeSwipeableView
SSJetpackComposeSwipeableView is a small library which provides support for the swipeable views. You can use this in your lazyColumns or can add a simple view which contains swipe to edit/delete functionality.
Stars: ✭ 57 (+23.91%)
Mutual labels:  jetpack, jetpack-compose
Scout
Scout is a kotlin multiplatform application that allows users to search and save games to lists to be browsed later.
Stars: ✭ 28 (-39.13%)
Mutual labels:  jetpack, jetpack-compose
compose-actors
🤖 Android app built with jetpack 🚀 compose follows new revamped guide to app architecture. Implemented with State, Coroutines ➰, ViewModels, Repository pattern, Light/Dark theme 🌈 MD3, Animations, Draw on canvas, Custom layouts, UI state handling, 🌀 Image loading with coil, Palette 🎨 usage and dynamic theming etc.
Stars: ✭ 80 (+73.91%)
Mutual labels:  jetpack-compose, coil-kotlin
arkitekt
Arkitekt is a set of architectural tools based on Android Architecture Components, which gives you a solid base to implement the concise, testable and solid application.
Stars: ✭ 114 (+147.83%)
Mutual labels:  jetpack, jetpack-compose
Strict-DataBinding
善用 DataBinding 彻底解决 “View 实例的 Null 安全一致性问题”
Stars: ✭ 84 (+82.61%)
Mutual labels:  jetpack, jetpack-compose
JsonPlaceholderApp
This was originally a code challenge for a company, but now is an example of MVI on Android.
Stars: ✭ 26 (-43.48%)
Mutual labels:  jetpack, jetpack-compose
Compose-Settings
Android #JetpackCompose Settings library
Stars: ✭ 188 (+308.7%)
Mutual labels:  jetpack, jetpack-compose
PCard
Demo project to showcase adding payment card details using JetPack Compose
Stars: ✭ 61 (+32.61%)
Mutual labels:  jetpack, jetpack-compose
Delish
Delish, a Food Recipes App in Jetpack Compose and Hilt based on modern Android tech-stacks and MVI clean architecture.
Stars: ✭ 356 (+673.91%)
Mutual labels:  jetpack, jetpack-compose
neon
Provides Jetpack Compose support for different image loading libraries.
Stars: ✭ 13 (-71.74%)
Mutual labels:  jetpack, jetpack-compose
ComposeBird
Flappy Bird game
Stars: ✭ 193 (+319.57%)
Mutual labels:  jetpack, jetpack-compose
android-developer-roadmap
🗺 The 2022 Android Developer Roadmap suggests learning paths to understanding Android development.
Stars: ✭ 5,533 (+11928.26%)
Mutual labels:  jetpack, jetpack-compose
GitMessengerBot-Android
타입스크립트, V8 엔진의 자바스크립트, 파이썬 그리고 Git을 지원하는 최첨단 메신저 봇!
Stars: ✭ 51 (+10.87%)
Mutual labels:  jetpack, jetpack-compose
Jetpack Compose News
基于Jetpack Compose实现的一款集新闻、视频、美图、音乐、天气等功能的资讯App,持续完善中...
Stars: ✭ 58 (+26.09%)
Mutual labels:  jetpack, jetpack-compose

MovieBox

Kotlin Version AGP Gradle Codacy Badge License: GPL v3

О проекте

MovieBox - pet-project для поиска, просмотра информации и отслеживания фильмов и сериалов. Цель проекта:

  • разработка собственного дизайна;
  • реализовать приятный UI и UX;
  • реализовать проект с современным стеком технологий и решений;
  • реализация многомодульного проекта;
  • комбинация написания проекта и изучение и закрепление новых подходов и решений (см. итоги что из этого получилось);

Статус проекта: Временно на паузе.

Есть идея реализации схожего по смыслу проекта, но с использованием Jetpack Compose, с продуманной архитектурой и исправлением недостатков этого проекта.

Технологии, паттерны и прочее, которые используются в проекте

  • Tech-stack

    • 100% Kotlin + Coroutines - выполнение фоновых операций

    • Сеть

      • Retrofit - выполнение сетевых вызовов

      • OkHttp - создание HTTP клиента

    • Coil - загрузка изображений

    • Jetpack

      • Lifecycle - выполнение действие при изменении состояния жизненного цикла

      • ViewModel - хранение и управление данными, связанными с UI, с учетом жизненного цикла

    • Klock - мультиплатформенная библиотека для работы с датой и временем

    • ViewBinding - управление и взаимодействие с элементами представления

    • Dynamic Feature модули

    • Собственный дизайн

  • Архитектура

  • Внедрение зависимостей

    • Koin - управление зависимостей
  • Статические анализаторы кода

    • Ktlint - проверка и форматирование кода
  • Gradle

  • Логгеры

Архитектура

В проекте реализована модульная архитектура. Каждая группа экранов разбита на определенные feature-модули. Данный подход позволяет достигнуть:

  • лучшую гибкость по сравнению с подходом, где проект разбит на 3 модуля (presentation, domain, data);
  • разделить код на группы и разрабатывать его изолированно;
  • построить граф зависимостей так, чтобы получать доступ к классам можно было только при явной зависимости;
  • улучшает навигацию по коду;
  • чуть более быстрая компиляция проекта;

Такой подход был подробно описан в статье Multiple ways of defining Clean Architecture layers автором Igor Wojda. В данной статье автор сравнил разные подходы к разделению проекта на модули и выделил преимущества и недостатки каждого из них.

Граф зависимостей

Ниже представлен граф зависимостей между существующими модулями:

  • :feature_navigation - экраны навигации и настроек приложения;

  • :feature_details - все экраны, на которых отображаются детали элементов;

  • :feature_search - поиск и подбор с фильтрами;

  • :feature_collections - экраны с подборками (коллекциями);

  • :feature_auth - все, что касается авторизации в приложении;

  • :lib_base - базовые классы, общие методы, классы и ресурсы;

  • :BuildSrc - настройки проекта, библиотеки и их версии.

Обратите внимание, что модули реализованы как dynamic-feature модули, поэтому зависимости строятся наоборот. Тогда получается, что функциональные модули зависят от модуля приложения.

Структура функциональных модулей

Каждый функциональный модуль содержит собственный набор слоев из Clean Architecture.

Структура модулей app и lib_base отличается от структуры функциональных модулей и зависит от классов, которые в ней находятся.

Немного истории и выводы

История

Разработка проекта началась с идеи проекта, который бы мог упростить поиск фильмов и сериалов. Хотя похожих проектов довольно много, на которых все практикуются, но такие проекты как правило очень маленькие и с базовым функционалом, а я же не просто хотел попрактиковаться, я горел этой идей и хотел реализовать более крупное приложение, со своим дизайном и дополнительным функционалом.

Все началось с попыток нарисовать какой-то минимальный набор экранов и параллельная разработка начального функционала (список фильмов и детали фильма). Далее одновременно с набросками новых экранов, приложение обрастало новым функционалом и не редко переписывался старый функционал или перестраивался дизайн на каких-то экранах.

В итоге, в свободное время у меня стояло несколько задач:

  • придумать и разрабатывать дизайн дизайн;

  • разработка проекта (исправление багов и разработка нового функционала);

  • исследование и поиск новых решений;

Что получилось в итоге

Проект пережил множество различных глобальных изменений:

  • избавление от множества активити, приближение к single-activity;
  • разбиение проекта на feature delivery модули, что забрало очень много времени и добавило новых проблем;
  • попытки реализации анимации смахивания экрана (похожая логика на экранах в YouTube);
  • экспериментирование с Navigation Components для сохранения логики смахивания экрана жестом;
  • миграция с Glide на Coil;
  • миграция с Dagger на Koin;
  • миграция на Gradle Kotlin DSL;
  • использование ViewBinding (как только появилась) вместо Kotlin Synthetic;
  • множественные изменения в дизайне (различные версии см. ниже), попытки разбиения его на различные компоненты, отделение иконок, шрифтов и цветов (создание дизайн системы);
  • попытки оптимизации различных мест в проекте;
  • реализация MVVM + MVI подхода для обработки различных состояний экрана;
  • и т.д.;

В итоге, я считаю, что разработка проекта была положительным опытом. У меня все таки получилось реализовать свой дизайн почти в полном объеме, разбить проект на модули и сделать его более масштабируемым, а также использовать современные технологии и решения.

Однако, в силу того, что проект подвергался частым улучшениям и иногда сказывался недостаток времени, проект частично засорился, в нем есть места, которые могут быть улучшены или исправлены.

Ниже я опишу, что может быть улучшено или исправлено:

  • построение архитектуры проекта на основе обычных модулей и разделение на core и feature модули;
  • тестирование;
  • использование функционала Coroutines и Flow на полную;
  • построить зависимости для репозиториев на основе абстракций;
  • оптимизация экран в xml, уменьшить вложенность;
  • внедрить MVI и совместить с MVVM (как например, Roxy);

Текущий интерфейс

Запуск проекта и участие в разработке

Есть несколько способов открыть проект:

Android Studio
  1. Android Studio -> File -> New -> From Version control -> Git
  2. Ввести https://github.com/majorkik/MovieBox.git в поле URL и нажать кнопку Clone
Command-line + Android Studio
  1. Запустить команду git clone https://github.com/igorwojda/android-showcase.git и клонировать проект к себе в директорию
  2. Открыть Android Studio и выбрать File | Open.... Выбрать папку с клонированным проектом и нажать кнопку Open.
Первый запуск приложения

Для запуска проекта, необходимо указать в файле local.properties ряд ключей. Пример:

#Tmdb
keyTmdb="введите ключ"
keyTmdbv4="оставьте пустым" 

#Youtube
youTubeKey="введите ключ"

#Trakt
secretKeyTrakTV="оставьте пустым"
keyTrakTv="оставьте пустым"

Ключ для TMDb можно взять на странице TMDb API Introduction.

Ключ для Youtube можно взять на странице Youtube API.

Полезные gradle таски

/gradle packageDebugUniversalApk - собирает apk файлы вместе с динамическими модулями

/gradle ktlintDebugFormat - анализ кода и его форматирование

/gradle ktlintDebugCheck - анализ кода и поиск мест, которые могут быть отформатированы

/gradle dependencyUpdates - отображает список библиотек и плагинов, которые используются в проекте, их текущую версию и последнюю версию

Различные версии дизайна

Лицензия

Этот репозиторий находится под лицензией GNU v3. Подробную информаци вы можете найти здесь или на официальном сайте.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].