GithubHelp home page GithubHelp logo

realkarych / wikix Goto Github PK

View Code? Open in Web Editor NEW
0.0 0.0 0.0 4.86 MB

Open-source unofficial Android Wikipedia app for searching and downloading wiki pages. Integrated news agregator

License: Apache License 2.0

Kotlin 95.06% Java 4.94%
android java kotlin news wiki wikipedia

wikix's Introduction

Whoami?

  • 🤵🏼‍♂️ Andrey Karchevsky, 19 y.o.
  • 🌆 Russia, Moscow / SPb.
  • 🧑‍💻 Intern Backend Engineer at Yandex.
  • 🕵️‍♂️ Student at ITMO University, Software Engineering (09.03.02).
  • 💫 Follow my Telegram Blog, LinkedIn, Habr.

Currently I'm working on RxConf — library for dynamic configuration management in Python. Contact me in Telegram or write E-Mail ([email protected]) to collaborate.

wikix's People

Contributors

realkarych avatar

Watchers

 avatar

wikix's Issues

App Architecture: move to M-V-VM

Нужно все фрагменты привести к стандартной гугловой архитектуре MVVM
Fragment->ViewModel->Repository
Фрагмент рисует UI и регистрирует obsevers для LiveData во ViewModel и listeners для событий в UI (нажатия кнопок).
ViewModel хранит данные для View и ничего не знает про View. Т.е. Fragment можно заменить и ViewModel никак не изменится.
Repository занимается обработкой данных и также ничего не знает про ViewModel.

WebView: разобраться с CSS

Сейчас в Article WebView отображается страница без CSS. Выглядит ужасно. Нужно добавить CSS.

Перейти на Retrofit

Раз уж так вышло, что все веб запросы работают с JSON, то полезно перейти на Retrofit, который требуют в каждой первой вакансии.

Search Article: Сделать кеширование на Room

Кешировать последний запрос и ответ на него. Не особо полезно для приложения (но и не вредит), но навык работы с Room точно необходим.

Алгоритм прост. В Repository делается suspend функция, которая делает запрос в Room, возвращает LiveData<List<ArticleInfo>>. Которая через ViewModel попадает во фрагмент еще на этапе его создания и там фрагмент делает на нее подписку для RecileView. Сетевой запрос отправляется по нажатию кнопки поиска и записывает данные в Room (из которого они автоматом попадут куда в RecycleView, потому что на LiveData<List<ArticleInfo>> будет подписка, а Room автоматом перезапускает запрос при обновлении таблицы).

Design-features

  • Реализовать открытие полной статьи, как на фото: фото

ArticlesList: экран со списком статей

Просмотренные статьи будут кешироваться. Нужно сделать экран, на котором можно выбрать статью из этого списка. Возможно, он будет объединен с экраном отображения статьи, потому что мне пока не понятно, зачем отдельный список. А логика экрана, где будет отображаться либо запрошенная статья (возможно, из кеша), либо список закешированных - вполне понятна.

SearchFragment разделение на 2 фрагмента

SearchFragment перенасыщен.
Разбить на 2 фрагмента:

  • Новости, строка запроса
  • Результаты поиска, строка запроса

Строку запроса вынести в отдельный стиль, будет переиспользоваться.

Сделать каркас приложения на основе Navigation

Сделать каркас приложения на основе Navigation.
Реализовать заглушки для основного экрана и Settings, Article, Search.

До кучи добавить Hilt, Room, ViewBinding.

Если с кодом в feature ветке все в порядке, я сделаю pull request.

Сделать новости

Над полем для ввода запроса сделать новостную сводку, отображаемую ресайклером.
Предлагаю использовать news-api, ключи для него у меня есть. Пример использования можно посмотреть в моём репозитории NewsBot

Локализация

Добавить локализацию (русский/английский язык)

Реализовать поисковик по статьям

  • Фрагмент с полем для ввода запроса. Выдача: список статей (Recycler). Реализация должна представлять из себя кликабельные "карточки".
  • Фрагмент с полной статьёй, открывается по нажатию на карточку из списка выдачи.

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.