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.
- 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.
A API utilizada é a GitHub Api.
(https://developer.github.com/v3/)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.
A aplicação busca o desacoplamento e a escalabilidade em sua arquitetura, fazendo uso do Clean Architecture e do MVVM com Modularização.
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.
-
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:
- 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
- Paginação na tela de lista, com endless scroll / scroll infinito (incrementando o parâmetro
- 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
- Sistema de build Gradle
- Mapeamento JSON -> Objeto (GSON / Jackson / Moshi / etc)
- Material Design
- 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
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
A foto do mockup é meramente ilustrativa.
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:
- Candidato fará um fork desse repositório (não irá clonar direto!)
- Fará seu projeto nesse fork.
- Commitará e subirá as alterações para o SEU fork.
- 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.
Não se deve tentar fazer o PUSH diretamente para ESTE repositório!