Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Desafio Mobile Android - Marcos Renann #51

Open
wants to merge 4 commits into
base: master
Choose a base branch
from

Conversation

mrenann
Copy link

@mrenann mrenann commented Dec 18, 2024

🎥 Globoplay Challenge - Movies App

Bem-vindo(a) ao repositório do desafio de recrutamento para o Globoplay! Este aplicativo foi desenvolvido com o objetivo de apresentar minhas habilidades técnicas, com foco em Jetpack Compose e boas práticas de desenvolvimento Android.

📱 Sobre o aplicativo

Este é um aplicativo de filmes que consome a API do TheMovieDB. Ele oferece recursos essenciais, como listagem de filmes, tela de detalhes e funcionalidade de favoritos, garantindo uma navegação fluida e uma experiência agradável para o usuário.


🚀 Tecnologias e Bibliotecas Utilizadas

O projeto foi desenvolvido utilizando tecnologias modernas do ecossistema Android:

Core Android

  • Kotlin: Linguagem principal para desenvolvimento Android.
  • Jetpack Compose: Framework moderno para construção de interfaces de usuário declarativas.
  • Room: Persistência local para salvar a lista de filmes favoritos.
  • Splash Screen API: Implementação de tela de splash nativa.

Consumo de API

  • Retrofit: Cliente HTTP para consumir a API do TheMovieDB.
  • Gson: Serialização e desserialização de JSON.
  • OkHttp: Cliente HTTP para gerenciar requisições e usar interceptores de log.

Injeção de Dependências

  • Koin: Framework leve para injeção de dependências.

Navegação

  • Voyager: Framework de navegação moderna para Compose.

Paginação e Imagens

  • Paging 3: Gerenciamento de dados paginados.
  • Coil: Carregamento eficiente de imagens com suporte a Compose e OkHttp.

Testes

  • JUnit e Mockito: Para testes unitários.
  • Compose Test Framework: Para testes instrumentados e de interface.
  • Truth: Framework de assertivas legíveis.
  • Espresso: Automação de testes instrumentados.

🎯 Funcionalidades Implementadas

✅ Essenciais:

  • Tela de Splash: Apresenta a logo do app ao iniciar.
  • Listagem de Filmes: Exibição de filmes populares com scroll infinito.
  • Tela de Detalhes: Informações detalhadas sobre o filme selecionado.
  • Favoritar Filmes: Adicionar ou remover filmes da lista de favoritos.
  • Minha Lista: Visualizar todos os filmes favoritados.

⭐ Funcionalidades Extras:

  • Filtros e Busca: Pesquisar filmes por nome e filtrar por gênero.
  • Paginação: Gerenciamento de grandes volumes de dados com eficiência.
  • Testes Automatizados: Testes instrumentados para garantir a qualidade.
  • Pipeline Automatizado: Build e testes integrados.

🛠️ Estrutura do Projeto

A arquitetura utilizada é baseada em MVVM (Model-View-ViewModel), garantindo separação de responsabilidades, escalabilidade e facilidade de manutenção.

📸 Screenshots

Tela de Splash Home (Grid de Filmes) Detalhes do Filme Minha Lista
image image image image

🧪 Testes

O projeto conta com cobertura de testes unitários e instrumentados para garantir a qualidade do código e o correto funcionamento das principais funcionalidades.

  • Testes Unitários:
    • Testes de lógica de negócios no ViewModel.
    • Mock de dependências utilizando Mockito.
  • Testes Instrumentados:
    • Verificação de componentes do Compose com Compose Testing.
    • Automação de interações na interface com Espresso.

🚀 Como Executar o Projeto

  1. Clone este repositório:
git clone https://github.com/mrenann/globoplay-challenge.git
cd globoplay-challenge
  1. Crie o api.properties na pasta raiz:
TMDB_KEY="YOUR_API_KEY"
TMDB_URL="https://api.themoviedb.org/3/"
TMDB_IMAGE_URL="https://image.tmdb.org/t/p/w500"

📄 Considerações Finais

Este desafio foi uma ótima oportunidade para demonstrar minhas habilidades em Android com Jetpack Compose e tecnologias modernas. Caso tenham dúvidas ou precisem de mais detalhes, estou à disposição!

* chore(deps): Update dependencies

* feat: home screen (#1)

* chore(deps): Add dependencies for network, DI, navigation and localization

* chore(deps): Add dependencies for network, DI, navigation and localization

* chore(deps): remove ksp

* chore(deps): remove ksp

* feat: Add data layer

* feat: Add Koin network module

* feat: Initialize Koin dependency injection and create application class

* feat: TV Discover repository and data source

* chore(deps): Add dependencies for paging, coil

* feat: Implement basic network setup

* feat: Implement Tv Discover screen

* feat: Implement initial HomeScreen layout

* feat: Add movies to home screen and filter by country

* ci: Add lint debug workflow

* chore: Trigger lintDebug with workflow_call

* feat: Add workflow for debug variant testing and linting

* feat: Add workflow for debug variant testing and linting

* refactor: Update base URL for poster and avatar images

* feat: ktlint and detekt

* feat: media details (#2)

* chore: Update Globoplay logo and adjust scaling

* feat: Implement Movie details screen

* chore: Remove appModule.kt

* feat: Implement use case to fetch movie details and similar movies

* feat: Implement Movie Details screen

* feat: Add tv details screen

* feat: favorites screen (#3)

* feat: Add Room database

* feat: begin favorite list feature

* feat: Implement My List screen

* feat: Implement My List screen

* feat: Implement My List screen

* feat: splash (#4)

* feat: Implement splash screen

* chore: Remove unused vector drawable

* test: Add unit tests for MediaDao (#5)

* feat: search Scren (#6)

* feat: Implement search service

* feat: Implement Search Screen

* feat: Implement Search Screen

* feat: Implement error and loading states

* chore: Initialize Koin in GloboplayApp
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant