Giter Site home page Giter Site logo

danisenko123 / mpeiapp Goto Github PK

View Code? Open in Web Editor NEW

This project forked from tonykolomeytsev/mpeiapp

0.0 0.0 0.0 21.62 MB

MpeiX - Расписание пар, карта корпусов и личный кабинет БАРС для студентов и преподавателей НИУ МЭИ

License: MIT License

Kotlin 99.99% Shell 0.01%

mpeiapp's Introduction

MpeiX - приложение МЭИ здорового человека

GitHub tag (latest by date)

Расписание пар, заметки, личный кабинет БАРС и крутая карта для студентов и преподавателей НИУ МЭИ. Самое функциональное, легковесное и стабильное МЭИшное приложение.

Фичи приложения:

  • Просмотр расписаний групп и преподавателей
  • Переключение между ТЁМНОЙ ТЕМОЙ и светлой темой.
  • Переключение между русским и английским языком в приложении.
  • Дашборд с ближайшими парами, заметками, расписанием сессии и объявлениями.
  • Карта корпусов, общежитий, мест общепита, ключевых мест кампуса МЭИ и кучи других мест.
  • Добавление заметок к парам.
  • Поиск по заметкам, карте, группам и преподавателям.
  • Предпросмотр расписаний групп и преподавателей прямо с экрана поиска.
  • Кэширование расписаний и геометок на устройстве.
  • Самый маленький вес приложения по сравнению с конкурентами.
  • Открiтый исходнiй код.
  • Меми.🤗💪😸😃

Мы все еще работаем над тем, чтобы вернуть личный кабинет БАРС.

Пулл реквесты приветствуются.

Скриншоты

screenshots 1

screenshots 2

Требования приложения

  • Android 5.0 Lollipop и выше (Api V21+)
  • Доступ к интернету

Стек

  • Многомодульная, упрощенная Clean Architecture с активным использованием DI Koin.
  • Vivid Money Elmslie
  • Самописная навигация
  • Retrofit + RxJava для REST Api
  • Vanilla SQLite для хранения в БД заметок и избранных расписаний
  • Firebase
    • Crashlytics
    • Analytics
    • Remote Config
  • Для подгрузки изображений используется Picasso (из-за соотношения веса и скорости работы)
  • Для тестирования используется JUnit 5 + Kotest

Архитектура

Для слоя представления используется паттерн ELM на базе Vivid Money Elmslie. Подробнее про устройство читайте в репозитории по ссылке. Разделение на common, domain, feature модули.

  • common - могут зависеть от других common-модулей
  • domain - могут зависеть от других common-модулей и domain-модулей
  • feature - могут зависеть от common-модулей и domain-модулей, но ни в коем случае не зависят от feature-модулей.

Сделано это для ускорения билда и уменьшения связности кода. Также повсюду выпилен kapt. Везде, где можно, используются обычные kotlin-модули вместо android-модулей. В android-модулях подключено минимум зависимостей, минимум плагинов. Используются обыкновенные groovy gradle скрипты вместо buildSrc и KTS.

Почему избавились от Kotlin Coroutines?

  1. Пришлось мигрировать на RxJava, потому что она помогает выявить таких же дидов как я всем понятна, существует давно и все ее подводные камни известны. Для корутин теперь есть аналог Rx - называется Flow, однако StackTrace кода на корутинах в крашлитике вообще не позволяет понять, где именно произошла проблема.
  2. Elmslie написан для RxJava

Почему избавились от Android Arch Nav Component?

Потому что сколько-нибудь большое количество экранов превращало визуальный граф приложения в кашу/вермишель (что вам больше нравится). И вообще эта штука предназначена для использования в связке с ViewModel. Текущая реализация навигации от гугла очень странно работает с жизненным циклом фрагментов и не имеет никаких преимуществ для проектов, построенных не на базе плюшек из Android Jetpack.

Почему избавились от Room?

Room, к сожалению, оставаясь типичным ORM, требует кодогенерации (и плагина kapt). Во всех модулях, в которых объявляются сущности для Room, используются аннотации Room и, собственно, kapt. Это очень негативно влияет на время сборки проекта. Плюс, изначально БД была спроектирована не правильно, отчего стало невозможным тестировать миграции.

Теперь в приложении универсальная запускалка SQL скриптов AppDatabase#fetch и класс LiquidSchema, производящий миграции путем выявления разницы между старой и новой схемой.

Инструкция по сборке проекта

  1. Добавьте google-services.json от Firebase в корень модуля app и в app/src/debug (можно один и тот же). Инструкция по получению google-services.json.

  2. В глобальный gradle.properties добавьте поле mpeiapp_google_maps_api_key="{SECRET}", где {SECRET} - ключ от API Google Maps. Инструкция по получению ключа.

  3. Скачайте и установите JDK 11 версии, укажите в настройках проекта java 11 по умолчанию для Gradle и компилятора Kotlin:

    Preferences -> Other Settings -> Kotlin Compiler -> Target JVM version

    Project Structure... -> SDK Location -> JDK Location

  4. Установите плагин Kotest, с ним будет проще гонять тесты.

После первых двух пунктов проект соберется, после двух других начнут работать тесты. В связи со скорым выходом Gradle 7.0 и AGP 7.0 проект перешел на Java 11.

По понятным причинам в репозитории не будут опубликованы оригинальные ключи от Google Maps API и Firebase API. Используйте свои ключики.

mpeiapp's People

Contributors

tonykolomeytsev avatar mazuninky avatar

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.