Organização Acadêmica Nível Engenharia.
Student Planner é um aplicativo Android nativo, offline-first e Open Source, desenvolvido para gerenciar a complexidade da vida acadêmica de estudantes de Ciência da Computação e Engenharia.
Diferente de agendas genéricas, este projeto foca em estabilidade de dados, performance e cálculo preciso de notas.
Este projeto serve como um laboratório de engenharia de software mobile, utilizando as práticas mais modernas do ecossistema Android:
- Linguagem: Kotlin (100% Nativo).
- UI Toolkit: Jetpack Compose (Material Design 3).
- Arquitetura: MVVM (Model-View-ViewModel) com Clean Architecture (Separação estrita entre Domínio e Dados).
- Concorrência: Coroutines & Flow para fluxos de dados reativos e prevenção de ANRs.
- Persistência: Room Database (SQLite) com relacionamentos complexos.
- Injeção de Dependência: Migração de Manual DI para Hilt (Em andamento).
O diferencial deste projeto está no que o usuário não vê:
Muitos apps mobile tratam dados como documentos soltos (NoSQL style). O Student Planner impõe integridade relacional estrita.
Utilizei Foreign Keys com ON DELETE CASCADE para garantir que não existam dados "órfãos". Se um Semestre (Planner) é deletado, todas as matérias, provas e aulas associadas são limpas automaticamente pelo motor do banco.
// Exemplo: ExamTable.kt
@Entity(tableName \= "exam",
foreignKeys \= \[
ForeignKey(
entity \= SubjectTable::class,
parentColumns \= \["id"\],
childColumns \= \["subjectId"\],
onDelete \= ForeignKey.CASCADE // Garante a higiene do banco
)
\]
)data class ExamTable(...)
A camada de UI nunca toca na camada de Banco de Dados.
- TableModels: Representam a estrutura física do SQLite (@Entity).
- DataModels: Objetos Kotlin puros usados na regra de negócio e UI.
- Mappers: Funções de extensão que convertem um no outro, isolando as responsabilidades.
// Exemplo: StudentClassMapper.kt
fun ClassTable.toDomainModel(): StudentClass {
return StudentClass(
id \= this.id,
title \= this.title,
// ... mapeamento seguro
)
}- Multi-Planner: Gerencie múltiplos semestres ou contextos separadamente.
- Agenda Inteligente: Visualização "Today View" focada nas aulas e entregas do dia.
- Cálculo de Médias: Suporte para pesos (Grade Weight) e diferentes sistemas de notas (0-100, A-F).
- Totalmente Offline: Seus dados pertencem a você. Armazenamento local seguro.
- Detailed Planner View
- Detailed Subject View
- Planner Editing View
- Subject Editing View
- Injeção de Dependência: Finalizar migração para Dagger Hilt.
- Testes: Implementar Testes Unitários para Repositories e UI Tests.
- Desktop: Migração para Desktop visando suporte nativo a Linux (GTK).
- CI/CD: Pipelines de build automatizado via GitHub Actions.
- Publicar no F-Droid
- Publicar na Playstore
Contribuições são bem-vindas! Se você é estudante ou dev Android e quer aprender sobre arquitetura:
- Faça um Fork do projeto.
- Crie uma Feature Branch (git checkout -b feature/MinhaFeature).
- Commit suas mudanças (git commit -m 'Adiciona funcionalidade X').
- Push para a Branch (git push origin feature/MinhaFeature).
- Abra um Pull Request.
Desenvolvido por Felipe Alafy

