Skip to content

sntgl/AvitoTrainee

Repository files navigation

Avito tech trainee

Тагилов А.М.

Локализация

  • Только RU

Технологии

  • Kotlin
  • Compose
  • MVVM
  • Kotlin Coroutines+Flow
  • OkHttp, Retrofit
  • Jetpack Compose Navigation
  • Room
  • Glide

Фичи к реализации

  • Геолокация+
  • Подробная информация о погоде по нажатию на суточный прогноз+
  • Экран ошибки+
  • Полная поддержка темной темы+
  • Персистентное хранилище с сохраненными городами+
  • Если пользователь отказался выдать локацию, то используем geo по ip+
  • SwipeToRefresh+
  • Rationale для пермишена (TODO)-
  • Хорошо бы собрать через ProGuard на релизе, чтобы api ключи не разбазаривать) (TODO)

API

  • openweathermap.org
  • ipgeolocation.io
// погода+
https://api.openweathermap.org/data/2.5/onecall?lon=37.6156&lat=55.7522&appid=b66745312676702b882b8e673d774421&exclude=minutely&lang=ru&units=metric

// найти город (и его гео) по названию+
https://api.openweathermap.org/geo/1.0/direct?q=Moscow&appid=b66745312676702b882b8e673d774421&limit=1

// найти название города по локации+
https://api.openweathermap.org/geo/1.0/reverse?lon=37.6156&lat=55.7522&appid=b66745312676702b882b8e673d774421&limit=1

//локация по ip+
https://api.ipgeolocation.io/ipgeo?apiKey=dd8bacba38c84ee4a11cbe0614b07322

Экран погоды

  • Название города (топ бар)+
  • Отображение текущей погоды (решил делать без иконки, так красИвее, тем более чуть ниже та же инфо)+
  • Погода на день (горизонтальный скролл) + иконки+
  • Погода на неделю (вертикальные элементы) + иконки+
  • SwipeToRefresh+
  • Хорошо бы разделить ошибки подключения/сервера-
  • Переключение между сохраненными городами+локацией+
  • Если контент загружен, то его обновление не приведет к потере текущих данных, будет отображен снекбар+
  • Да, кстати, макс и мин актуальные температуры вычисляются на основе следующих 24 часов, а не являются данными текущего дня+

Экран поиска

  • Задержка перед поиском (посмотреть модификаторы flow). upd. блин он в превью, ну ладно, пусть будет+
  • Отображение сохраненных городов (TODO)+
  • Удаление сохраненных городов (мб свайпом как на айфоне)+
  • Основная логика такова - отображаем сохраненные, если есть что-то в строке поиска +

TODO

  • Иконки переделать в ассеты+
  • Проверить, не едет ли верстка на экранах маленьких размеров и на ветре > 10мс (TODO)
  • Еще одна кнопка добавить? нужна ли (по центру экрана)
  • свайп для удаления города+
  • кнопочка текущая локация в списке сохраненных городов+
  • анимации перехода между экранами-
  • можно индикатор страниц снизу для переключения между сохраненными-

Замечания

  • Думал сделать простенький DI на основе Koin, но решил, что особо и не нужен тут.
  • Пермишен можно запросить через гугловскую либу Accompanist, но хочу поработать напрямую
  • Ищет, конечно, openweather не очень. Возвращает вроде список городов, а по факту всегда один, да и тот без каких-либо данных о погоде
  • Плохо, что data слой напрямую мапит в ui модели,
  • Все-таки решил не сохранять последнюю погоду в персистентном хранилище, это погода и нельзя надеяться на то, что она не поменяется (но добавить сохранение самого города стоит - UPD. не сделал)
  • Вообще итоговая идея nullable типов для верстки мне не нравится - все-таки лучше логику шиммера и контента разграничить
  • Честно так и не придумал, как правильно организовать хранение данных синглтона Networking с okhttp клиентом и апи, ведь это привязано по сути к одному экрану. Сделал в итоге не очень красиво(
  • Стоит анализировать ошибки при обращении к API
  • Логика сохранения города лежит на экране погоды. Если город не из текущей локации, то можно сохранить
  • MVI все-таки с Compose больше вяжется(
  • Тк нет особо опыта с Compose, сделал ошибку - куча стейтов. Стейт должен быть один (общий), чтобы по несколько раз не рекомпозировать
  • Зря использовал Gson вместо Moshi
  • Получилось долго из-за зачетной недели

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages