Skip to content

Este projeto utiliza Kotlin, ViewBinding, Clean Architecture, MVVM, Modularização, Coroutines, Koin, Room, Retrofit, CI, Paging Library 3.0, Mockk, entre outros.

Notifications You must be signed in to change notification settings

jsouza678/desafio-android

 
 

Repository files navigation

GitHub Repos

Este é um aplicativo que lista os repositórios mais populares do GitHub com a linguagem Java.

A tela inicial mostra a lista citada acima e, ao clicar em algum repositório é aberta a lista de Pull Requests deste.

Para abrir o Pull Request, basta clicar no item da lista que o aplicativo abrirá a página do repositório no Github em seu navegador.

Algumas screenshots

light dark pulls_dark error

Ambiente de instalação

  • 1: Instale o Android Studio;
  • 2: Abra a aplicação;
  • 3: Sincronize o projeto;
  • 4: Rode o aplicativo em um simulador ou em um device externo.

API

A API utilizada é a GitHub Api.

(https://developer.github.com/v3/)

Automação

Ktlint - a task valida se o padrão do código está de acordo com o lint. O ./gradlew ktlint realiza a verificação de todos os componentes do projeto, e retorna o resultado.

KtlintFormat - esta tarefa modifica o código para que ele siga o padrão do lint. O ./gradlew ktlintFormat roda uma rotina que formata o código de acordo com o máximo que o lint pode fazer de modificações para que o código esteja no seu padrão.

Arquitetura

A aplicação busca o desacoplamento e a escalabilidade em sua arquitetura, fazendo uso do Clean Architecture e do MVVM com Modularização.

Principais dependências

Coroutines - lidando com threads e assincronismo

Abordagem sugerida pela Google e com um bom funcionamento com o Live Data, faz bom uso das threads do dispositivo, melhorando a performance da aplicação. No aplicativo também foi utilizado o Flow na tela principal.

Paging Library 3.0

A Paging Library 3.0 em sua versão nova, permite que os dados carregados da Api sejam salvos no banco de dados e carregados de acordo com a página em questão. O Remote Mediador age como uma camada que verifica a página atual, próxima e anterior para determinar a próxima chamada à Api, assim como a operação de inserção dos dados no Banco de Dados.

Room - persistência de dados

Camada de abstração sobre o SQLite, o Room é um facilitador para persistir dados no banco do aparelho. É importante ressaltar que a utilização do Room e Coroutines necessita de uma forma de verificar as queries do banco de dados, já que elas devem ser feitas de forma async. No RepoCatalog foi diferente, já que, como a Paging Library 3.0 possibilita retornar um Flow, foi utilizada a lifecycle scope para receber os dados na activity e mandar para o adapter levando em conta o seu ciclo de vida.

Retrofit - requisições HTTP

Retrofit é a biblioteca mais difundida por encapsular e lidar com requisições HTTP, além de possuir uma fácil implementação. Com o uso do OkHttp associado ao retrofit, ele "desbloqueia" o potencial do retrofit.

Material Design - layout intuitivo e clean

O aplicativo segue os padrões do MaterialDesign para uma melhor experiência do usuário em sua utilização.

Koin injeção de dependência

Biblioteca escolhida por sua simples implementação an injeção de dependência.

O que eu gostaria de ter feito

  • aumentado a cobertura dos testes unitários;

  • criado testes de ui;

Criar um aplicativo de consulta a API do GitHub#

Criar um aplicativo para consultar a API do GitHub e trazer os repositórios mais populares de Java. Basear-se no mockup fornecido:

Captura de tela de 2015-10-22 11-28-03.png

Deve conter

  • Lista de repositórios. Exemplo de chamada na API: https://api.github.com/search/repositories?q=language:Java&sort=stars&page=1
    • Paginação na tela de lista, com endless scroll / scroll infinito (incrementando o parâmetro page).
    • Cada repositório deve exibir Nome do repositório, Descrição do Repositório, Nome / Foto do autor, Número de Stars, Número de Forks
    • Ao tocar em um item, deve levar a lista de Pull Requests do repositório
  • Pull Requests de um repositório. Exemplo de chamada na API: https://api.github.com/repos/<criador>/<repositório>/pulls
    • Cada item da lista deve exibir Nome / Foto do autor do PR, Título do PR, Data do PR e Body do PR
    • Ao tocar em um item, deve abrir no browser a página do Pull Request em questão

A solução DEVE conter

  • Sistema de build Gradle
  • Mapeamento JSON -> Objeto (GSON / Jackson / Moshi / etc)
  • Material Design

Ganha + pontos se conter

  • Framework para comunicação com API
  • Testes no projeto (unitários e por tela)
  • Testes funcionais (que naveguem pelo aplicativo como casos de uso)
  • Cache de imagens e da API
  • Suportar mudanças de orientação das telas sem perder estado

Sugestões

As sugestões de bibliotecas fornecidas são só um guideline, sintam-se a vontade para usar diferentes e nos surpreenderem. O importante de fato é que os objetivos macros sejam atingidos. =)

  • Retrofit | Volley
  • Picasso | Universal Image Loader | Glide
  • Espresso | Robotium | Robolectric

OBS

A foto do mockup é meramente ilustrativa.

Processo de submissão

O candidato deverá implementar a solução e enviar um pull request para este repositório com a solução.

O processo de Pull Request funciona da seguinte maneira:

  1. Candidato fará um fork desse repositório (não irá clonar direto!)
  2. Fará seu projeto nesse fork.
  3. Commitará e subirá as alterações para o SEU fork.
  4. Pela interface do Github, irá enviar um Pull Request.

Se possível deixar o fork público para facilitar a inspeção do código.

ATENÇÃO

Não se deve tentar fazer o PUSH diretamente para ESTE repositório!

About

Este projeto utiliza Kotlin, ViewBinding, Clean Architecture, MVVM, Modularização, Coroutines, Koin, Room, Retrofit, CI, Paging Library 3.0, Mockk, entre outros.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Kotlin 100.0%