tonykolomeytsev / mpeiapp Goto Github PK
View Code? Open in Web Editor NEWMpeiX - Расписание пар, карта корпусов и личный кабинет БАРС для студентов и преподавателей НИУ МЭИ
License: MIT License
MpeiX - Расписание пар, карта корпусов и личный кабинет БАРС для студентов и преподавателей НИУ МЭИ
License: MIT License
Все данные о корпусах, общагах и столовых поместить в коллекцию places.
Обозначать разными маркерами кофейни, бургерные, пиццерии, магазины и остальные заведения различных типов
Поменять UI карты, т.к. слайдер для корпусов это не очень удобно, а остальные виды локаций вообще хз как запихать в такое мелкое окно. Вероятно стоит сделать что-то вроде немодального bottom sheet с нормальным функционалом карты.
В ленте отображать импортированные из групп ВК мероприятия. Учитывать группы ПБ, Профкома, подслушку.
Придумать, каким образом переносить данные с ВК в приложение. Возможно firebase может помочь.
Если нужно будет через Firebase сообщить пользователям что-либо, можно использовать баннеры: https://material.io/components/banners/
Пока всего один пользователь столкнулся с этим багом. Надо поправить. Возникает, если нажать одновременно более чем на одну дисциплину.
Crashlitycs Stack trace:
Fatal Exception: java.lang.IllegalArgumentException: navigation destination kekmech.ru.mpeiapp:id/action_barsFragment_to_barsDetailsFragment is unknown to this NavController
at androidx.navigation.NavController.navigate(NavController.java:10)
at androidx.navigation.NavController.navigate(NavController.java:10)
at androidx.navigation.NavController.navigate(NavController.java:10)
at androidx.navigation.NavController.navigate(NavController.java:10)
at kekmech.ru.mainscreen.MainNavRouter.a(MainNavRouter.java:20)
at kekmech.ru.bars.main.BarsFragmentPresenter.onItemClick(BarsFragmentPresenter.java:5)
at kekmech.ru.bars.main.BarsFragmentPresenter.access$onItemClick(BarsFragmentPresenter.java:2)
at kekmech.ru.bars.main.BarsFragmentPresenter$updateWithScore$1$1$1.invoke(BarsFragmentPresenter.java:2)
at kekmech.ru.bars.main.BarsFragmentPresenter$updateWithScore$1$1$1.invoke(BarsFragmentPresenter.java:2)
at kekmech.ru.coreui.adapter.BaseClickableItem$updateViewHolderNative$1$1.run(BaseClickableItem.java:2)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
at android.view.Choreographer.doCallbacks(Choreographer.java:761)
at android.view.Choreographer.doFrame(Choreographer.java:693)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7076)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
Показывать в AddFragment последние загруженные расписания, чтобы не набирать номера группы заново и не загружать их с сайта заново.
На вкладке timetable при переходе в ландшафтный режим отображать все 5 рабочих дней недели с парами. То есть показывать расписание сразу на всю неделю.
Так как макет барса верстался со скоростью света ради релиза, нужно привести его в порядок к четвергу.
Выделить наименования пар, приглушить цвета оценок.
Сделать так чтобы информация читалась быстрее.
В ВСК показывать расписание на следующую неделю и писать что-то вроде "Грядущая неделя".
На карточке пары, которая идёт в данный момент, можно отображать "загрузку", показывающую, сколько уже длится пара и сколько времени до ее окончания.
Из-за отсутствия у DayFragment конструктора без аргументов, приложение падает, если восстанавливает своё состояние на экране TimetableFragment.
В ViewPager для всех дней недели используются дубликаты фрагмента DayFragment с разными наборами данных, которые передаются в конструкторе. Как восстанавливать данные после того как фрагмент был убит - хороший вопрос)))
Уведомлять пользователя о том, что вышла новая версия приложения.
При воскрешении приложения на экране подробностей, пользователь увидит пустую табличку. Исправить можно сохранением id дисциплины в shared preferences
Позволить пользователям добавлять дз и комментарии к любой паре. По свайпу карточки занятия влево создавать заметку.
В отчетах Crashlitycs подробная информация. На версии 0.9.4.
И вообще заняться её оптимизацией, визуальной и программной.
В конце ленты показывать заглушку, сообщающую о том, что знать будущее опасно.
AddFragment должен быть в виде bottom sheet dialog, не перекрывающим полностью предыдущий экран (feed). Так как смена группы это частый use case, надо чтобы взаимодействие происходило максимально легко, без переходов на другие экраны, чтобы легко отменялось.
Создать новые события аналитики для того чтобы понять, какие экраны приложения пользователи используют чаще.
Про создание новых событий: https://firebase.google.com/docs/analytics/events?platform=android
Про user-properties: https://firebase.google.com/docs/analytics/user-properties?platform=android
Для наследников BaseFragment реализовать встроенный механизм Inflating'a view stub'ов для ускорения загрузки фрагментов и улучшения общего UX.
В дни праздников в ленте показывать выходной, а не только по субботам и воскресеньям.
Показывать оценки за КМ по всем предметам семестра.
На время разработки закрыть экран заглушкой "В разработке".
Подключить API Yandex карт, спрятать API_KEY. Показывать расположение корпусов, общаг, столовок.
Сейчас для получения страничек с расписанием используется Webkit. Нужно перейти на параллельные POST/GET запросы, это значительно должно ускорить получение данных.
Раздел "места" может включать в себя сачок, библиотеку, тир, и много мест, которые нельзя отнести ни к корпусам, ни к общагам.
Надо переверстать карточки в feed и timetable, визуально выделить главную информацию.
В timetable изменить способ отображения времени пар. Троеточие между цифрами может вводить в заблуждение.
При открытии списка групп, либо диалога обновления, systemNav (наэкранная навигация) становится темно-серого цвета, это некрасиво. Надо оставить белый цвет.
Решение: https://pumpingco.de/blog/easy-tricks-to-boost-the-native-android-integration-of-your-cross-platform-apps/
Экран Feed по факту, не удобен и не очень нужен сейчас, хоть и выполняет функцию просмотра и смены расписания.
Нужно польностью пересмотреть логику экрана и сделать его более полезным для пользователя.
Возможно, стоит показывать аналитику по оценками и парам. Показывать только предстоящие пары на след. день, домашние работы, выход на экран настроек и т.д.
Нужно хорошо подумать над тем, что действительно должно быть на главном экране.
В подробностях о дисциплине БАРС указывать, экзамен по ней сдается, курсовая или зачёт.
Ограничить максимально допустимую частоту переключения, как это сделано в в приложениях известных соцсетей. Минимальное время между переключениями должно быть где-то 200 - 300 мс.
Если не дождаться, пока слайдер с буквами корпусов докрутится, и переключить экран, то приложение падает.
Fatal Exception: kotlin.KotlinNullPointerException
at com.example.map.MapFragmentPresenter.selectBuilding(MapFragmentPresenter.kt:116)
at com.example.map.MapFragmentPresenter.access$selectBuilding(MapFragmentPresenter.kt:32)
at com.example.map.MapFragmentPresenter$onResume$1$1.invoke(MapFragmentPresenter.kt:68)
at com.example.map.MapFragmentPresenter$onResume$1$1.invoke(MapFragmentPresenter.kt:32)
at com.example.map.view.MapFragment$onViewCreated$1.invoke(MapFragment.kt:43)
at com.example.map.view.MapFragment$onViewCreated$1.invoke(MapFragment.kt:23)
at kekmech.ru.coreui.slider.EnumSlider$1$1.invoke(EnumSlider.kt:41)
at kekmech.ru.coreui.slider.EnumSlider$1$1.invoke(EnumSlider.kt:11)
at kekmech.ru.coreui.slider.EnumSliderLayoutManager$onTouchRelease$1.run(EnumSliderLayoutManager.kt:79)
*словил NPE в Kotlin: * 👍
При открытии ленты пролистывать расписание к предстоящей паре, чтобы не приходилось листать до нее. Выделить предстоящую пару каким-нибудь цветом и текстом.
Не работает смена расписания на нечетную неделю.
Получение отчётов о сбоях в Firebase
При вводе номера группы сообщать, если номер некорректный или группы несуществует. Не допускать бесконечной загрузки.
Не загружать каждый раз из БД данные о парах, а кэшировать их каким-либо способом. Возможно, стоит использовать LiveDatа в качестве контейнера для списков пар и текущего статуса.
Сейчас, в версии 0.9.8, предложение обновиться появляется только на экране feed. Большинство чаще смотрит экраны расписания и БАРСа, отчего тупо пропускают такую важную инфу, как обновление.
Некоторые группы занимаются физрой на стадионе круглый год, если просто тащить place с сайта, то можно ввести пользователей в заблуждение.
Вместо "Спортзал" писать "Спортзал, стадион или иное место занятия спортом" или типа того.
Показывать оценки за контрольные мероприятия и предстояние контрольные мероприятия в разделе БАРС.
Отчет из крашлитики:
Fatal Exception: java.lang.IndexOutOfBoundsException: Empty list doesn't contain element at index 0.
at kotlin.collections.EmptyList.get(EmptyList.java:1)
at kotlin.collections.EmptyList.get(EmptyList.java:1)
at com.example.map.MapFragmentPresenter$onResume$1.onChanged(MapFragmentPresenter.java:7)
at com.example.map.MapFragmentPresenter$onResume$1.onChanged(MapFragmentPresenter.java:7)
at androidx.lifecycle.LiveData.assertMainThread(LiveData.java)
at androidx.lifecycle.LiveData.dispatchingValue(LiveData.java)
at androidx.lifecycle.LiveData.assertMainThread(LiveData.java)
at androidx.lifecycle.MutableLiveData.setValue(MutableLiveData.java)
at kekmech.ru.repository.PlacesRepositoryImpl$updateBuildings$1.onComplete(PlacesRepositoryImpl.java:8)
Похоже, какие-то проблемы если пользователь не смог загрузить places
Иногда заходит не с первого раза, показывает старый рейтинг предыдущего пользователя
В разделе БАРС карточки дисциплин не кликаются, если клик попадает в RecyclerView с оценками.
Очень много boilerplate кода во всех фрагментах. Количество экранов быстро растет. Основные функции нужно поместить в родительский класс BaseFragment.
Запихать туда детект клавиатуры, inject презентера, работа с тулбаром/статусбаром, inflate вьюхи и т.д.
При тапе по плитке занятия на экране feed и на экране timetable должны появляться подробности о преподавателе, о местоположении занятия, о кафедре препода, замечания от студентов.
height WRAP_CONTENT иногда не работает в BarsDetails
Новым пользователям сразу после запуска приложения вместо карточке "день самостоятельных занятий" предлагать ввести номер группы
Реализовать смену темы налету (BaseFragment) и подобрать оптимальную цветовую палитру.
Позволить пользователю менять расписание не только с экрана ленты, но и с других экранов.
Добавить встроенный браузер в раздел БАРС, в котором будет происходить автоматический логин, на случай, если парсер вдруг перестанет работать. Ну и разобраться, почему на некоторых китайских девайсах падает приложение во время inflate WebView.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.