fga-eps-mds / 2018.1_Nexte

Aplicativo que integra tenistas dentro de clubes, por meio de partidas e desafios, juntando estatísticas e gamificação em forma de ranking. Tem como objetivo gamificar comunidades locais de tênis.
https://fga-gpp-mds.github.io/2018.1_Nexte/
Other
9 stars 4 forks source link

Eu, como Usuário, desejo curtir as atividades do feed. #103

Closed gabrielalbino closed 6 years ago

gabrielalbino commented 6 years ago

Descrição

Essa issue deve adicionar um botão de curtir em cada atividade para poder dar feedbacks aos usuários sobre suas ações.

Critérios de Aceitação

aleronupe commented 6 years ago

Pessoal, estamos com uma dúvida específica, mas bem trabalhosa! Vou especificar: Para atualizarmos uma variável (que, no nosso caso, é uma mutableList que adiciona e remove os players que curtiram a atividade) teríamos que passar pela FeedWorker novamente, para gravar os dados e deixá-lo pronto para impressão, entretanto, existe a função generateFeedMockData que inicializa todas as mutableList vazias, impedindo que esse dado seja armazenado. Nós temos ideias de criar duas funções na worker : Uma para o contexto de criação da cena (com as listas zeradas) e outra para o contexto de atualização da cena (quando um usuário curtir ou descurtir o challenge e a contagem for alterada), mas acreditamos não ser a solução mais efetiva. Vocês tem alguma outra sugestão?

guibaldissera commented 6 years ago

Bom, realmente a dúvida de vocês é bastante pertinente. Bora lá...

Primeiro de tudo, sim, você terá que criar um segundo método, para curtir a atividade, tanto na Interactor, Worker, Presenter, View e Model... Inclusive sua Model vai ter que ser expandida pois a atual não suporta mais do que um tipo de Request, Response e ViewModel...

Outro ponto complicado, de fato é que da forma que fiz, não tem como alterar uma atividade em si... ela é gerada em tempo de execução e isso não é guardado em algum lugar para modificar depois...

Vamos ter que fazer algumas alterações de código. Mas isso é bom, acredito que vocês estão entendendo bem a arquitetura e agora chegou o ponto de expandirmos ela. Show!

guibaldissera commented 6 years ago

Primeiro ponto é a nossa camada de Model. Dando uma dica muito na cara pra vocês, ela deverá ficar parecida com isso:

captura de tela 2018-04-11 as 00 57 52
guibaldissera commented 6 years ago

Segundo ponto, sua Business Logic agora terá 2 métodos a serem implementados pela Interactor:

captura de tela 2018-04-11 as 01 03 55

Isso também acontecerá em todas as outras camadas da scene

guibaldissera commented 6 years ago

O último ponto a ser considerado, inicialmente, é o nosso generateMockData lá na worker... Já ouviram falar de classe static? Termos que usar isso para que consigamos usar sempre as mesmas informações em memória, e possamos alterá-las ao longo do uso do app.

Inicialmente tentem entender o que escrevi aí nos comentários anteriores que irei fazer esse ajuste no Mock dos dados junto com o Miguel. Possivelmente amanhã pela manhã. O mais rápido possível!

guibaldissera commented 6 years ago

@aleronupe @lorranyh Subi um commit contendo alterações de código para administrar os dados do Feed. Agora existem duas novas camadas:

Vocês agora, terão uma chave identificadora nas atividades do feed. Essa chave será usada para enviar ao Feed Manager, para que o mesmo consiga dar update na feed activity específica que vocês estão mexendo.

Deem uma olhada kkkk

aleronupe commented 6 years ago

Pessoal, tá sendo bastante complicado implementar essas duas funções pra cada coisa, porque a gente basicamente teria que dar um refresh na cena inteira só pra atualizar o número de curtidas do like, é essa mesma a intenção? Procuramos maneiras menos drásticas de implementar essa alteração sem ter que fazer toda essa implementação, mas tudo volta pra esse mesmo contexto.

aleronupe commented 6 years ago

De uma forma mais específica: a gente entende bem como adicionar um usuário que curtiu uma linha específica no array e como retornar esse tamanho em um valor na tela, a nossa dificuldade está sendo fazer isso nos lugares certos e nos jeitos certos da arquitetura (tanto que a versão atual que está no github faz justamente o que foi pedido, mas não está de acordo com a arquitetura proposta).

lorranyh commented 6 years ago

Estamos em dúvida em relação ao refresh, como podemos usá-lo em uma célula específica quando se clica no botão like?

lorranyh commented 6 years ago

E outra questão é sobre o Click Listener, qual o local apropriado para ele ficar na View

gabrielalbino commented 6 years ago

@lorranyh O reciclerview tem um método chamado getChildAt

Por exemplo, pra mudar a cor de uma linha da listview usa-se o comando

View v = listViewItems.getChildAt(position - listViewItems.getFirstVisiblePosition());
v.setBackgroundColor(Color.GREEN);

Dá pra usar essa mesma lógica pra mudara as labels da view

pode ser encontrado mais informações sobre isso aqui

guibaldissera commented 6 years ago

Senhores, como conversei e expliquei para o @aleronupe hoje de dia/meio dia, vou detalhar aqui as dúvidas de vocês para ajudar a todos de um modo geral.

Primeira alteração a ser feita foi a criação de uma variável a nível de escopo de classe, para armazenar a Adapter da Recycler View, destacada em verde, para ser utilizada sempre que necessária. Imagem 1 captura de tela 2018-04-12 as 21 24 52

Anteriormente a instanciação era feita nesse método, na hora de mostrar as informações após voltar da presenter: (Isso não deve mais ser feito aqui e dessa forma.) Imagem 2 captura de tela 2018-04-12 as 21 37 32

Em conclusão a imagem anterior, aqui mostra a instanciação inicial da Adapter que agora, como em escopo de classe, deve ser feita no onCreate da View. Imagem 3 captura de tela 2018-04-12 as 21 24 59

Aqui mostra como agora é usada a adapter no momento do retorno da presenter, ao contrário da forma que era feito antes, na imagem 2. Imagem 4 captura de tela 2018-04-12 as 21 25 06

Se forem notar, essa imagem 4, em vermelho, também mostra a criação de um método OnClickListener, que será usado posteriormente na ViewHolder lá dentro da Adapter, mostrado na Imagem a seguir. Imagem 5 captura de tela 2018-04-12 as 21 25 29

Antes, essa função era declarada direto no ViewHolder ao setar o evento de OnClickListener, da seguinte forma: (Agora deverá ser feito segundo a imagem 5) Imagem 6

captura de tela 2018-04-12 as 21 37 43

Por fim, aqui é mostrado os métodos de Update, localizados dentro da Adapter, que é chamado nas funções implementadas da Presenter, como mostra a imagem 4 em verde Imagem 7 captura de tela 2018-04-12 as 21 25 23

Acho que é isso... É necessário fazer na imagem 4, em vermelho, uma real função para quando o OnClickListener é chamado, como fazer a requisição pra interactor e assim por diante. E também é necessário, na imagem 7, implementar de fato uma função que consiga dar update em uma célula apenas. Inclusive, essa é a diferença entre os destaques vermelho e verde da imagem 7. Em vermelho o update é em todas as células da Recycler View, em verde é apenas uma célula específica.

Bom trabalho senhores!