tonykolomeytsev / mpeiapp Goto Github PK
View Code? Open in Web Editor NEWMpeiX - Расписание пар, карта корпусов и личный кабинет БАРС для студентов и преподавателей НИУ МЭИ
License: MIT License
MpeiX - Расписание пар, карта корпусов и личный кабинет БАРС для студентов и преподавателей НИУ МЭИ
License: MIT License
Поменять UI карты, т.к. слайдер для корпусов это не очень удобно, а остальные виды локаций вообще хз как запихать в такое мелкое окно. Вероятно стоит сделать что-то вроде немодального bottom sheet с нормальным функционалом карты.
Создать новые события аналитики для того чтобы понять, какие экраны приложения пользователи используют чаще.
Про создание новых событий: https://firebase.google.com/docs/analytics/events?platform=android
Про user-properties: https://firebase.google.com/docs/analytics/user-properties?platform=android
При открытии списка групп, либо диалога обновления, systemNav (наэкранная навигация) становится темно-серого цвета, это некрасиво. Надо оставить белый цвет.
Решение: https://pumpingco.de/blog/easy-tricks-to-boost-the-native-android-integration-of-your-cross-platform-apps/
Показывать в AddFragment последние загруженные расписания, чтобы не набирать номера группы заново и не загружать их с сайта заново.
Иногда заходит не с первого раза, показывает старый рейтинг предыдущего пользователя
На вкладке timetable при переходе в ландшафтный режим отображать все 5 рабочих дней недели с парами. То есть показывать расписание сразу на всю неделю.
В дни праздников в ленте показывать выходной, а не только по субботам и воскресеньям.
Реализовать смену темы налету (BaseFragment) и подобрать оптимальную цветовую палитру.
height WRAP_CONTENT иногда не работает в BarsDetails
Экран Feed по факту, не удобен и не очень нужен сейчас, хоть и выполняет функцию просмотра и смены расписания.
Нужно польностью пересмотреть логику экрана и сделать его более полезным для пользователя.
Возможно, стоит показывать аналитику по оценками и парам. Показывать только предстоящие пары на след. день, домашние работы, выход на экран настроек и т.д.
Нужно хорошо подумать над тем, что действительно должно быть на главном экране.
Если нужно будет через Firebase сообщить пользователям что-либо, можно использовать баннеры: https://material.io/components/banners/
Так как макет барса верстался со скоростью света ради релиза, нужно привести его в порядок к четвергу.
Выделить наименования пар, приглушить цвета оценок.
Сделать так чтобы информация читалась быстрее.
Если не дождаться, пока слайдер с буквами корпусов докрутится, и переключить экран, то приложение падает.
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: * 👍
Некоторые группы занимаются физрой на стадионе круглый год, если просто тащить place с сайта, то можно ввести пользователей в заблуждение.
Вместо "Спортзал" писать "Спортзал, стадион или иное место занятия спортом" или типа того.
Позволить пользователю менять расписание не только с экрана ленты, но и с других экранов.
В ВСК показывать расписание на следующую неделю и писать что-то вроде "Грядущая неделя".
Из-за отсутствия у DayFragment конструктора без аргументов, приложение падает, если восстанавливает своё состояние на экране TimetableFragment.
В ViewPager для всех дней недели используются дубликаты фрагмента DayFragment с разными наборами данных, которые передаются в конструкторе. Как восстанавливать данные после того как фрагмент был убит - хороший вопрос)))
На карточке пары, которая идёт в данный момент, можно отображать "загрузку", показывающую, сколько уже длится пара и сколько времени до ее окончания.
Для наследников BaseFragment реализовать встроенный механизм Inflating'a view stub'ов для ускорения загрузки фрагментов и улучшения общего UX.
Сейчас, в версии 0.9.8, предложение обновиться появляется только на экране feed. Большинство чаще смотрит экраны расписания и БАРСа, отчего тупо пропускают такую важную инфу, как обновление.
В подробностях о дисциплине БАРС указывать, экзамен по ней сдается, курсовая или зачёт.
При вводе номера группы сообщать, если номер некорректный или группы несуществует. Не допускать бесконечной загрузки.
Очень много boilerplate кода во всех фрагментах. Количество экранов быстро растет. Основные функции нужно поместить в родительский класс BaseFragment.
Запихать туда детект клавиатуры, inject презентера, работа с тулбаром/статусбаром, inflate вьюхи и т.д.
Отчет из крашлитики:
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
В отчетах Crashlitycs подробная информация. На версии 0.9.4.
Все данные о корпусах, общагах и столовых поместить в коллекцию places.
Позволить пользователям добавлять дз и комментарии к любой паре. По свайпу карточки занятия влево создавать заметку.
При воскрешении приложения на экране подробностей, пользователь увидит пустую табличку. Исправить можно сохранением id дисциплины в shared preferences
Не загружать каждый раз из БД данные о парах, а кэшировать их каким-либо способом. Возможно, стоит использовать LiveDatа в качестве контейнера для списков пар и текущего статуса.
В разделе БАРС карточки дисциплин не кликаются, если клик попадает в RecyclerView с оценками.
AddFragment должен быть в виде bottom sheet dialog, не перекрывающим полностью предыдущий экран (feed). Так как смена группы это частый use case, надо чтобы взаимодействие происходило максимально легко, без переходов на другие экраны, чтобы легко отменялось.
Уведомлять пользователя о том, что вышла новая версия приложения.
Ограничить максимально допустимую частоту переключения, как это сделано в в приложениях известных соцсетей. Минимальное время между переключениями должно быть где-то 200 - 300 мс.
Пока всего один пользователь столкнулся с этим багом. Надо поправить. Возникает, если нажать одновременно более чем на одну дисциплину.
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)
Добавить встроенный браузер в раздел БАРС, в котором будет происходить автоматический логин, на случай, если парсер вдруг перестанет работать. Ну и разобраться, почему на некоторых китайских девайсах падает приложение во время inflate WebView.
Надо переверстать карточки в feed и timetable, визуально выделить главную информацию.
В timetable изменить способ отображения времени пар. Троеточие между цифрами может вводить в заблуждение.
Новым пользователям сразу после запуска приложения вместо карточке "день самостоятельных занятий" предлагать ввести номер группы
Получение отчётов о сбоях в Firebase
При открытии ленты пролистывать расписание к предстоящей паре, чтобы не приходилось листать до нее. Выделить предстоящую пару каким-нибудь цветом и текстом.
В ленте отображать импортированные из групп ВК мероприятия. Учитывать группы ПБ, Профкома, подслушку.
Придумать, каким образом переносить данные с ВК в приложение. Возможно firebase может помочь.
Раздел "места" может включать в себя сачок, библиотеку, тир, и много мест, которые нельзя отнести ни к корпусам, ни к общагам.
Показывать оценки за КМ по всем предметам семестра.
На время разработки закрыть экран заглушкой "В разработке".
Показывать оценки за контрольные мероприятия и предстояние контрольные мероприятия в разделе БАРС.
Не работает смена расписания на нечетную неделю.
Сейчас для получения страничек с расписанием используется Webkit. Нужно перейти на параллельные POST/GET запросы, это значительно должно ускорить получение данных.
Обозначать разными маркерами кофейни, бургерные, пиццерии, магазины и остальные заведения различных типов
При тапе по плитке занятия на экране feed и на экране timetable должны появляться подробности о преподавателе, о местоположении занятия, о кафедре препода, замечания от студентов.
Подключить API Yandex карт, спрятать API_KEY. Показывать расположение корпусов, общаг, столовок.
И вообще заняться её оптимизацией, визуальной и программной.
В конце ленты показывать заглушку, сообщающую о том, что знать будущее опасно.
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.