Image for post
Image for post

Em algum momento você já implementou ou vai precisar implementar uma forma de pedir para os seus usuários deixarem um review sobre o seu app na PlayStore.

Se não, você deveria implementar, pois quanto mais reviews positivos seu app tiver melhor será a posição do seu app na play store.

Old porém Gold:

A forma mais comum de pedir um review é levar o usuário até a loja chamando uma Activity que o redireciona direto para a página do app na Google Play Store.

Como no código a seguir:

Os problemas de fazermos o fluxo de review dessa forma:


MVVM, Koin, Rx, Room, Databinding e um pouco mais… *Coroutines

Image for post
Image for post

Continuando…

Já refatoramos a primeira parte do nosso projeto, agora vamos seguir em frente com as mudanças.

Nos primeiros artigos usamos Rx para lidar com nossas chamadas assíncronas, mas agora vamos utilizar Coroutines, somente para que você possa enxergar como uma e a outra são utilizadas (no fim a preferência sempre é do desenvolvedor de qual usar). Vamos também tentar de alguma forma deixar nosso código um pouco melhor.

First things first:

Antes de mais nada, vamos atualizar algumas dependências do projeto. Para que a gente não perca muito tempo com isso, vou somente citar o que foi adicionado, e deixar os links dos arquivos que vocês devem atualizar. …


MVVM, Koin, Rx, Room, Databinding e um pouco mais… *Coroutines

Image for post
Image for post

Um ano depois…

Muita coisa mudou nesse tempo e, por isso, resolvi escrever dar continuidade a esta série, mas com ênfase em refatorar o projeto para que ele esteja de acordo com conceitos mais atuais e também diferentes. Isso não significa que o que já foi feito não tem mais aplicação ou não deve mais ser usado. Pelo contrário: ainda são conceitos muito válidos. Porém, trago nestes novos capítulos abordagens diferentes, para que, no fim, você tome a decisão sobre o que usar e como usar.

P.S: A arquitetura continuará sendo a mesma.

Melhorando nossos LiveDatas:

A primeira coisa que vamos adicionar é uma classe chamada Event, dentro do package utils. A razão de utilizar a classe Event é porque quando entramos e saímos em um fragment/activity por meio de um evento usando LiveDatas ocorre o seguinte cenário: quando voltamos para a tela anterior o evento é executado novamente e acabamos voltando para onde estávamos, entrando num ciclo infinito de ir e vir entre duas telas, e isso pode acontecer em outros casos também. Depois de quebrar a cabeça com isso, encontrei um artigo que sugere a criação da classe Event, que evita que o evento execute toda vez que a activty/fragment seja recriada, pois o evento só vai ser executado se ele realmente existir. …


Image for post
Image for post
Photo by Sid Verma on Unsplash

Who already has implemented a screen with pagination and have to show a load as the last item of a list? Well, a lot of people, including me.

Google has released a new alpha version of RecyclerView that gives us a solution to have different adapters on the same recycler view and it’s called MergeAdapter.

if you wanna skip this tutorial go to Github repository.

Let’s add this line to app buid.gradle:

implementation "androidx.recyclerview:recyclerview:1.2.0-alpha02"

Now we can use the power of MergeAdapter.

We are creating an app with a list of texts with CircularProgressBar as the last item and it looks like…


MVVM, Koin, Rx, Room, Databinding e um pouco mais…

Image for post
Image for post

Nos dois primeiros artigos, falamos dos módulos domain e data. Caso tenha perdido algum deles, seguem os links:

Presentation Module:

Finalmente chegamos no último module do nosso projeto, o qual, para os nossos usuários, é o mais importante, pois é aqui que vamos apresentar nossos dados no app.

Conteúdo da presentation:

View: são nossas Acitivties/Fragments, onde vamos apresentar nossos dados.

ViewModel: é onde vamos gerenciar os dados relacionados às nossas Views, ou seja, chamar nosso repositório para consumir dados ou observar dados, por exemplo.

Diagrama de fluxo do módulo presentation:


MVVM, Koin, Rx, Room, Databinding e um pouco mais…

Image for post
Image for post

No primeiro artigo da série, fizemos o setup inicial do projeto e criamos o nosso module domain. Caso não tenha visto a primeira parte, abaixo você pode ir para o artigo anterior.

Data Module:

Todos os projetos Android possuem dados, os quais precisam ser fornecidos de algum lugar, e é justamente isso que o module data faz para nós. Esses dados podem vir de qualquer lugar, como de alguma api ou database.

Quando a domain pede algum dado, ela não sabe de onde eles são fornecidos, pois isso é responsabilidade do modulo data.


MVVM, Koin, Rx, Room, Databinding e um pouco mais…

Image for post
Image for post

Certamente você já ouviu falar de modularização em algum momento no desenvolvimento Android, certo? Se não, sem problemas. Essa série também é para você que quer aprender do zero.

A maior motivação para escrever essa série de artigos é fazer com que mais desenvolvedores possam ficar atualizados com esse “novo” approach, que vem sendo bastante utilizado no desenvolvimento Android .

Inicialmente, vamos ter três artigos na seguinte ordem:

O que preciso para seguir os artigos: Vontade de aprender!

Domain Module:

Vamos começar pela domain, que é responsável pela comunicação com o presentation module e também é um module kotlin/java puro, ou seja, não possui dependências Android. …


Image for post
Image for post

Sempre existe a necessidade de criar componentes customizados para projetos e onde eu trabalho não é diferente. Então como acabei desenvolvendo um componente novo, utilizando o ATTR e outras coisas + Higher-Order Functions para facilitar o que era para ser mostrado e suas ações, resolvi criar esse artigo para compartilhar o conhecimento.

Declare-styleable:

Primeiro vamos definir nossos atributos customizavies no arquivo res/values/attr.xml:

WidgetButton:

Mudamos a cor do texto de acordo com o boolean que colocamos no xml, como vamos ver no Aplicando em outros xml’s de views:

O layout utilizado no WidgetButton:

Aplicando em outros xml's de views:

Passamos o atributo app:isBlue="true" para o texto do widgetButton ficar azul e app:isBlue="false" para ficar a cor default que colocamos no WidgetButton.kt.


Image for post
Image for post

Muitas pessoas desenvolvem aplicativos para Android e nem mesmo sabem o que um App possui, ou como funcionam as coisas alem dos códigos Java e Kotlin. Pois Android não é somente a linguagem que usamos para desenvolver nossas aplicações, vai bem mais afundo. Com a primeira Edição desse artigo quero compartilhar um pouco com os amigos o que temos além do Java e Kotlin de cada dia.


Image for post
Image for post

Hey guys, this article is to share with Android community a lot of repositories and libraries, that I had found in 2017. Follow the links and have fun.

zetbaitsu / Compressor

About

Iago Mendes Fucolo

Android Engineer @NewMotion, Writer, Ex almost footballer, and Brazilian.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store