Матафонов Денис, denisredis2014@gmail.com
Три вкладки - три подборки гифок. Первая - рандомный выбор, бесконечная, результаты сохраняются во время активной сессии. Вторая - последние посты (latest), третья - лучшие (top). Здесь мы берем пять записей (одну страницу с сайта).
Приложение запоминает, на каком месте мы остановились во всех трех вкладках. С первой записи нельзя вернуться назад, дальше история записывается, а гифки кэшируются. На второй и третьей страницах можно добраться до последнего поста.
Чтобы начать работу, нужен интернет. Если соединения нет, пользователю прилетить снэкбар с предложением открыть настройки, а на карточке будет крутиться гифка загрузки-ожидания.
И еще - если апи не дал ссылку на гифку в записи, мы все равно покажем шутку, приправив потерянным Траволтой, ищущим гифку.
Активность заполняется PlaceholderFragment'ами, разметка для всех ситуаций одна, все связано ViewModel и PagerAdapter.
За обращение к сервису отвечает ApiUtil, за проверку соединения ConnectionUtil. Объект первого содержит описания и ссылки загруженных записей (во второй и третьей вкладке подгружаем сразу, на рандомной - по мере необходимости). За кэширование и отрисовку самих гифок спасибо Glide.
Внутри кода фрагмента вызываются два потока - один инициализирует списки данных, второй отвечает за подгрузку новых рандомных картинок.
P.S. до Unit-test'ов не дошло - слишком долго залипал на гифки в "живом" приложении. Спасибо за задание :)