A ideia deste desafio é nos permitir avaliar melhor as habilidades de candidatos a vagas de programador, de vários níveis.
Este desafio deve ser feito por você em sua casa. Gaste o tempo que você quiser, porém normalmente você não deve precisar de mais do que algumas horas.
- Primeiro, faça um fork deste projeto para sua conta no GitHub (crie uma se você não possuir).
- Em seguida, implemente o projeto tal qual descrito abaixo, em seu próprio fork.
- Por fim, empurre todas as suas alterações para o seu fork no GitHub e envie um pull request para este repositório original. Se você já entrou em contato com alguém da AppProva sobre uma vaga, avise também essa pessoa por email, incluindo no email o seu usuário no GitHub.
Você deve criar um aplicativo que irá listar os repositórios públicos mais populares relacionados a Java no GitHub, usando a API do GitHub para buscar os dados necessários.
O aplicativo deve exibir inicialmente uma lista paginada dos repositórios, ordenados por popularidade decrescente (exemplo de chamada da API: https://api.github.com/search/repositories?q=language:Java&sort=stars&page=1
).
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. 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.
Você pode se basear neste mockup para criar as telas:
Sua aplicação deve:
- usar um sistema de build. Ex: Gradle
- fazer mapeamento json -> Objeto . Ex: GSON / Jackson / Moshi / etc
- usar um arquivo .gitignore no seu repositório
- usar Material Design
- usar o padrão MVP ou MVVM
- possuir boa cobertura de testes unitários no projeto.
Você ganha mais pontos se:
- criar testes funcionais
- fazer cache de imagens
- utilizar Kotlin
- utilizar RxJava ou RxKotlin
- utilizar os Android Architecture Components
- suportar mudanças de orientação das telas sem perder estado (Sem utilizar o configChanges)
As sugestões de bibliotecas fornecidas são só um guideline, sinta-se a vontade para usar soluções diferentes e nos surpreender. O importante de fato é que os objetivos macros sejam atingidos.
Seu projeto será avaliado de acordo com os seguintes critérios.
- Sua aplicação preenche os requerimentos básicos?
- Você documentou a maneira de configurar o ambiente e rodar sua aplicação?
- Você seguiu as instruções de envio do desafio?
Adicionalmente, tentaremos verificar a sua familiarização com as bibliotecas padrões (standard libs), bem como sua experiência com programação orientada a objetos a partir da estrutura de seu projeto.