Desenvolvendo uma aplicação móvel para a gestão das atividades de um grupo de idosos- o início

Foi me proposto desenvolver uma pequena aplicação Android para gerir as atividades de um grupo de idosos. E hoje, venho vos falar um bocado da minha experiência com o desenvolvimento da aplicação e as coisas que eu revi e que aprendi.

Para vos falar do contexto da aplicação, um funcionário de um centro de dia quer registar as atividades que os idosos fizeram. A instituição contém uma aplicação web otimizada para telemóvel que guarda os registos dos idosos e as presenças dos funcionários. Esta aplicação seria para ser integrada com o sistema da instituição, no entanto para já está a ser desenvolvida com base de dados local SQLite. O SQLite continuará a existir mas a aplicação iria consumir a API Restful da instituição para resgatar os dados dos idosos.
A aplicação lista os idosos existentes, adiciona-os e além disso permite registar as participações dos idosos para cada dia. Cada idoso tem uma participação para cada dia sendo que cada participação pode ser de atividades de informática, atividades de relaxamento, atividades de ginásio e podendo também registar outras situações ocorridas.

Vou começar por falar um bocado sobre a primeira funcionalidade implementada, a listagem dos idosos.


Este primeiro ecrã como podem ver  lista os idosos e permite apagar os idosos existentes carregando no botão vermelho e adiciona-los.
Para isto, utilizei algumas ferramentas contidos no pacote do Android, nomeadamente o ORM(Object Relational Mapping) chamado Room.
Vou ser sincero, já trabalhei com o Room antes no entanto já não me lembrava de como se fazia a configuração do Room. Trabalhei com o Room nas aulas de programação mobile e nunca mais peguei em Android e portanto algumas coisas já estavam esquecidas e deprecadas.

Comecemos pela parte da configuração:
A configuração do Room mudou desde a última vez que usei nas aulas de programação mobile.
Fiz a configuração tal como estava na documentação:
Fonte: developers.android.com


Esta configuração é a configuração do Gradle que permite usar o Room. Mas há umas questões que quero abordar sobre esta configuraçao.
Primeiro ponto, esta configuração tem de ser adaptada à linguagem Kotlin ou Java conforme o que se vai usar. Vocês têm de escolher um annotation processor. E aqui está representados 3 deles, o annotationProcessor, o kotlin-kapt e o ksp. Utilizei o kapt inicialmente no entanto a aplicação falhava na compilação. Quando eu criei o Data Access Object(DAO) do idoso, ele não compilava e mostrava um código Java a dizer que uma função não estava a ser interpretada corretamente. Então eu dei uma investigada na documentação do Room e descobri que o problema é que muitas das coisas do Room tinham sido convertidas para Kotlin. E então descobri o ksp da Google. E em vez de kapt usei ksp. Não vou explicar como é que se coloca isto porque isto está tudo na documentação do Android e da linguagem Kotlin. Compilei novamente e a aplicação funcionava.
Com isto já foi possível avançar no trabalho.
Criei então a tela que está na primeira imagem e as suas funções de CRUD.
Uma coisa muito importante, nas aulas nunca trabalhei com fragments embora o professor falou por alto das fragments. E eu aqui quis usar fragments para as tabs assim é uma forma de consolidar os meus conhecimentos e aprender coisas novas. É importante a leitura atenta da documentação do Android. Lá eles têm vários codelabs e guias e exemplos de como usar as bibliotecas. Para aprender Android nada como aprender pelo próprio site.
Outra coisa que eu fiz foi ter sempre uma aba do ChatGPT aberto no computador. Tenho usado muito, quando tenho dúvidas muito específicas no meu código.
Fiz várias pesquisas no YouTube como se faz alguma coisa. Por exemplo eu quis fazer um calendário horizontal. Em alguns calendários do Android dá para colocar uma vista horizontal por semana. No entanto, muitos tutoriais dos youtube, as ferramentas apresentadas que permitem criar esse calendário estão deprecadas. Portanto encontrei um vídeo que explicava como se fazia o calendário horizontal usando a ferramenta de paginação do Android o Paging 2. No entanto, o Paging 2 está deprecado e então tive de reverter a lógica com o Paging 3. A meio cheguei à conclusão que a forma como estava a ser feita não era eficiente porque nesse vídeo o tutor ensinava a carregar as datas desde do ano 1970. Ou seja muitos dados. Ou seja não era eficiente. Portanto acabei por chegar à conclusão que o melhor era fazer o carregamento das duas semanas anteriores à atual e da próxima semana e depois criar uma outra tela que permita fazer a gestão das participações por dia. Ou seja criar uma lista de dias com uma lista de participações dentro. Imaginem só o que eu vou ter de carregar. Listas dentro de listas. Ou se calhar, colocar uma lista de datas, com uma lista paginada de participacoes. Isto ainda está para se ver.
Aqui está uma imagem do calendário horizontal:





O que vocês estão a ver é uma RecyclerView com uma lista de dias da semana. Por trás tem o tal gerador que gera os dias da semana o chamado ViewModel.
Quando vocês selecionam um dia o indicador verde muda para o dia que selecionaram e depois num futuro vou implementar as participações de um determinado dia.

Aprendizagens que eu acho que todos deviam de ter com isto:
  • Hoje em dia, vocês têm o mundo todo ao vosso dispor na Internet.
  • A Inteligência Artificial, como o ChatGPT, vai se tornar muito usado pelos desenvolvedores e acelerar procedimentos de desenvolvimento, mas nunca o vai substituir
  • Aprender a ler. Hoje em dia, os jovens têm dificuldade de leitura na escola. Se não leem livros, muita dificuldade terão em ler uma documentação como a do Android. Ler código, ler em geral melhor a capacidade linguística. Muita gente pensa que aprender uma linguagem é só lógica, mas vou vos dizer que também é como aprender uma língua. Aprender uma linguagem tem lógica e linguística pelo meio.
  • Quem dera aos jovens da geração passada terem um computador com acesso à Internet. Antes para encontrar um livro de uma linguagem de programação tinham de ir à biblioteca da cidade. Hoje vocês encontram tudo na Internet e mais encontram vídeos de um brasileiro ou de um indiano a explicar o que vocês querem. Vocês só têm que procurar. E quando não conseguem, coloquem o vosso código em fóruns ou então coloquem o vosso código no ChatGPT e peçam-lhe para ele dizer o que se passa. E ele pode vos dar uma ajuda.