{"id":19844812,"url":"https://github.com/lucasrmagalhaes/matches-simulator-java_kotlin","last_synced_at":"2025-08-24T22:24:20.334Z","repository":{"id":103561508,"uuid":"449491385","full_name":"lucasrmagalhaes/matches-simulator-java_kotlin","owner":"lucasrmagalhaes","description":"Sportheca Mobile DEV Week - Simulador de Partidas 🎲","archived":false,"fork":false,"pushed_at":"2022-01-23T14:46:48.000Z","size":1476,"stargazers_count":10,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-05-01T20:37:33.142Z","etag":null,"topics":["android-studio","dio","firebase","java","kotlin","sportheca"],"latest_commit_sha":null,"homepage":"https://github.com/lucasrmagalhaes/matches-simulator-java_kotlin/raw/main/app.gif?raw=true","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lucasrmagalhaes.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-01-19T00:21:30.000Z","updated_at":"2025-04-28T23:36:36.000Z","dependencies_parsed_at":"2023-03-16T05:00:23.224Z","dependency_job_id":null,"html_url":"https://github.com/lucasrmagalhaes/matches-simulator-java_kotlin","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/lucasrmagalhaes/matches-simulator-java_kotlin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucasrmagalhaes%2Fmatches-simulator-java_kotlin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucasrmagalhaes%2Fmatches-simulator-java_kotlin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucasrmagalhaes%2Fmatches-simulator-java_kotlin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucasrmagalhaes%2Fmatches-simulator-java_kotlin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lucasrmagalhaes","download_url":"https://codeload.github.com/lucasrmagalhaes/matches-simulator-java_kotlin/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucasrmagalhaes%2Fmatches-simulator-java_kotlin/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271963020,"owners_count":24850599,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-24T02:00:11.135Z","response_time":111,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android-studio","dio","firebase","java","kotlin","sportheca"],"created_at":"2024-11-12T13:05:38.208Z","updated_at":"2025-08-24T22:24:20.326Z","avatar_url":"https://github.com/lucasrmagalhaes.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Sportheca Mobile DEV Week - Simulador de Partidas 🎲\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/lucasrmagalhaes/matches-simulator-java_kotlin/blob/main/app.gif?raw=true\"\u003e\n    \u003cimg\n      src=\"https://github.com/lucasrmagalhaes/matches-simulator-java_kotlin/blob/main/app.gif?raw=true\"\n      alt=\"Simulador de Partidas\" \n    /\u003e\n  \u003c/a\u003e\n  \u003cbr /\u003e\n  \u003ci\u003eProjeto desenvolvido no bootcamp Sportheca da DIO.\u003c/i\u003e\n\u003c/p\u003e\n\n\u003chr\u003e\n\n#### Desenvolvimento Mobile Nativo Para Android\n\n##### Objetivo Geral\nFornercer uma visão geral sobre a área de Desenvolvimento Mobile, com ênfase na criação de Apps Nativos em Android. Para isso, o ambiente de desenvolvimento é configurado com o Android Studio, possibilitando a construção de aplicativos nas linguagens Java e Kotlin.\n\n##### Percurso\n- Introdução ao Desenvolvimento Mobile\n- Android Nativo: Ambiente de Desenvolvimento\n- Android Nativo: Estrutura de Projetos Android\n\n##### Setup: Elementros Centrais\n**SDK Manager:** possibilita o gerenciamento de pacotes por meio de ferramentas, APIs e outros componentes; \u003cbr\u003e\n**AVD Manager:** provê múltiplas possibilidades de emulação através de dispositivos virtuais.\n\n[Android Studio](https://developer.android.com/studio)\n\n##### Iniciando o Projeto\nEmptyActivty \u003cbr\u003e\nSimulator \u003cbr\u003e\nme.dio.simulator \u003cbr\u003e\nKotlin \u003cbr\u003e\nAPI 21\n\n[Samsung Flow](https://www.microsoft.com/pt-br/p/samsung-flow/9nblggh5gb0m?activetab=pivot:overviewtab)\n\n\u003chr\u003e\n\n#### Componentes, Layouts e UI UX Em Apps Android\n\n##### Objetivo Geral\nApresentar alguns dos componentes disponíveis nativamente na SDK Android, explorando o Jetpack sempre que possível. Nesse sentido, os layouts de um App para simulação de partidas esportivas serão definidos. Para isso, os conceitos de prototipação e UI/UX são essencialmente compreendidos.\n\n##### Percurso\n- Introdução ao Android Jetpack\n- Material Design\n- Criação dos Layouts do App\n\n##### Conhecendo o Jetpack\nO Android Jetpack é um conjunto de bibliotecas que ajuda desenvolvedores a seguir práticas recomendadas, reduzir códigos boilerplate e programar códigos que funcionam de maneira consistente em diferentes dispositivos e versões do Android. Assim, o desenvolvedor pode se concentrar em seu domínio de aplicação.\n\n##### Usando o View Binding\nFacilitar/centralizar o acesso à componentes definidos via layout XML. Com isso, as incômodas/recorrentes chamadas ao método findViewById tornam-se desnecessárias.\n\n##### Usando o SwipeRefreshLayout\n```java\nimplementantion 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'\n```\n\n##### Get from VCS\nInforma a URL do Projeto - GitHub, clona direto no Android Studio.\n\n##### Material Design\nÉ um sistema de design (que engloba UI e UX) criado pelo Google para nos ajudar a criar experiências digitais de alta qualidade para multiplas plataformas.\n\n[Sistema de Cores](https://material.io/design/color/the-color-system.html#tools-for-picking-colors) \u003cbr\u003e\n[Color Tool](https://material.io/resources/color/#!/?view.left=0\u0026view.right=0)\n\n##### Prototipação do App\nPrimeira tela: Listagem/Simulação de Partidas \u003cbr\u003e\nSegunda tela: Detalhes da Partida\n\n##### Atalhos\nReplace: Ctrl + R \u003cbr\u003e\nAbrir Opções: Alt + Enter\n\n##### In res/values/type.xml:\n[Style](https://material.io/components/app-bars-top/android#regular-top-app-bar)\n\n\u003chr\u003e\n\n#### Java e Kotlin\n\n##### Objetivo Geral\nDesenvolva os eventos, integrações e interações de usuário em um App Android. Para isso, vamos explorar conceitos essenciais, como: APIs, Orientação a Objetos e Padrões de Projetos; tudo na prática usando Java e Kotlin! \u003cbr\u003e\nNesse sentido, bibliotecas consolidadas como Glide e Retrofit serão utilizadas com o objetivo de aumentar ainda mais nossa produtividade e qualidade de código.\n\n##### Percurso\n- Criando uma \"API\" e Modelando seu Domínio\n- Conhecendo as Bibliotecas Retrofit e Glide\n- Parcelable e Simulação de Partidas 🎲\n\n##### Domínio/Problema\nCom base nos protótipos, conseguimos ter uma boa ideia do nosso domínio de aplicação. Nesse contexto, vamos abstrair as entidades relevantes para o App, por exemplo: \u003cbr\u003e\n- Toda Partida é realizada em um Local;\n- Uma Partida possui dois Times (mandante e visitante);\n- Os Times têm um nível de força (estrelas)…\n\n##### “API” no GitHub Pages 🤨\nUma Application Programming Interface (API), basicamente, se propõe a expor recursos de um domínio de aplicação. Seu principal objetivo é definir uma interface para integrações concisas e eficientes. \u003cbr\u003e\u003cbr\u003e\nNesse sentido, para que não tenhamos que construir uma API do zero, vamos prover nossos recursos (partidas) via GET por meio do recurso GitHub Pages.\n\n```json\n[\n  { \n    \"descricao\": \"Eliminatórias Copa 2022\",\n    \"local\": {\n      \"nome\": \"Maracanã\",\n      \"imagem\": \"TODO\"\n    },\n    \"mandante\": {\n      \"nome\": \"Brasil\",\n      \"estrelas\": 5,\n      \"imagem\": \"https://www.bandeirasnacionais.com/data/flags/normal/br.png\"\n    },\n    \"visitante\": {\n      \"nome\": \"Argentina\",\n      \"estrelas\": 5,\n      \"imagem\": \"https://www.bandeirasnacionais.com/data/flags/normal/ar.png\"\n    }\n  }\n]\n```\n\n[Matches Simulator API](https://github.com/lucasrmagalhaes/matches_simulator-api)\n\n##### Retrofit\nCliente HTTP para Android e Java, o qual abstrai incrivelmente a complexidade no consumo de APIs. Além disso, possui uma série de conversores JSON, que facilitam a (de)serialização dos dados: \u003cbr\u003e\n[Retrofit (HTTP Client)](https://square.github.io/retrofit)\n\n```\nimplementation 'com.squareup.retrofit2:retrofit:2.9.0'\n```\n\n```\nimplementation 'com.squareup.retrofit2:converter-gson:2.9.0'\n```\n\n##### Glide\nGerenciador de mídia rápido e eficiente, abstraindo o processo de carregamento de imagens em Android, gerenciando desde a decodificação e transformação até o controle de cache das mesmas: \u003cbr\u003e\n[Glide (Image Loading)](https://github.com/bumptech/glide)\n\n```\nimplementation 'com.github.bumptech.glide:glide:4.11.0'\n```\n\n```\nannotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'\n```\n\n##### Permissão de acesso a internet\n```\n\u003cuses-permission android:name=\"android.permission.INTERNET\"/\u003e\n```\n\n[Listas dinâmicas com o RecyclerView](https://developer.android.com/guide/topics/ui/layout/recyclerview?hl=pt-br)\n\n##### Parcelable\nParcelable é a estratégia de (de)serialização padrão em Apps Android, ou seja, é a implementação utilizada para troca de mensagens entre as telas de um App. Nesse contexto, o Kotlin Parcelize é uma alternativa muito simples e efetiva:\n```\nplugins {\n   id 'kotlin-parcelize'\n}\n```\n\n\u003chr\u003e\n\n#### Firebase\n\n##### Objetivo Geral\nConheça algumas das possibilidades oferecidas pelo Firebase. Nesse contexto, vamos explorar alguns recursos interessantes dessa plataforma, como o Analytics, Crashlytics, entre outros. Com isso, nosso App estará muito mais preparado para uma publicação em produção (Google Play), pois eventuais crashes e insights relacionados ao seu uso poderão ser monitorados proativamente.\n\n##### Introdução ao Firebase\nFornece as ferramentas para desenvolver aplicativos de alta qualidade, ampliar a base de usuários e lucrar mais. Para isso, o Firebase oferece uma poderosa suite de soluções, abstraindo a complexidade em diferentes contextos:\n- Construção\n- Implantação e Monitoramento\n- Engajamento\n\n##### Configurando o Firebase\nPassos para adicionar o Firebase em seu App usando o Console do Firebase (recomendado):\n* [Criar um projeto do Firebase](https://firebase.google.com/docs/android/setup?hl=pt-br#create-firebase-project)\n* [Registrar seu app com o Firebase](https://firebase.google.com/docs/android/setup?hl=pt-br#register-app)\n* [Adicionar um arquivo de configuração do Firebase](https://firebase.google.com/docs/android/setup?hl=pt-br#add-config-file)\n* [Adicionar SDKs do Firebase ao seu App](https://firebase.google.com/docs/android/setup?hl=pt-br#add-sdks)\n\n##### Crashlytics\nO Firebase Crashlytics é uma ferramenta de relatório de falhas leve e em tempo real que ajuda a monitorar, priorizar e corrigir problemas de estabilidade que comprometem a qualidade do seu aplicativo. \u003cbr\u003e\u003cbr\u003e\nO Crashlytics economiza tempo na solução de problemas com o agrupamento inteligente das falhas e a exibição das circunstâncias que levam a elas.\n\n##### Configurando o Crashlytics\nPassos para adicionar o Firebase Crashlytics:\n* [Ativar o Crashlytics no Console do Firebase](https://firebase.google.com/docs/crashlytics/get-started?hl=pt-br\u0026platform=android#enable-in-console)\n* [Adicionar o plug-in do Firebase Crashlytics ao seu App](https://firebase.google.com/docs/crashlytics/get-started?hl=pt-br\u0026platform=android#add-plugin)\n* [Adicionar o SDK do Firebase Crashlytics ao seu App](https://firebase.google.com/docs/crashlytics/get-started?hl=pt-br\u0026platform=android#add-sdk)\n* [Forçar uma falha de teste para concluir a configuração](https://firebase.google.com/docs/crashlytics/get-started?hl=pt-br\u0026platform=android#force-test-crash)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flucasrmagalhaes%2Fmatches-simulator-java_kotlin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flucasrmagalhaes%2Fmatches-simulator-java_kotlin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flucasrmagalhaes%2Fmatches-simulator-java_kotlin/lists"}