Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

BetterSEQTA Learn (Android)

Native Kotlin/Compose client for SEQTA Learn — multi-module architecture with auth, networking, session management, background sync, widgets, and notifications.

Requirements

  • Android Studio Ladybug or newer
  • JDK 11+
  • Android SDK 36
  • Min SDK 24

Build

./gradlew assembleDebug

Install on a device/emulator:

./gradlew installDebug

Run unit tests:

./gradlew test

Architecture

app/                    → Hilt entry, MainActivity, MainShell navigation
core/common/            → AppResult, dispatchers
core/designsystem/      → BetterTheme, motion, UI components
core/network/           → OkHttp interceptors, Retrofit SeqtaStudentApi
core/session/           → Encrypted session, user prefs, launch gate
core/background/        → WorkManager, notification channels, schedulers
domain/                 → Models, repository interfaces, use cases
data/                   → DTOs, mappers, repository implementations
feature/auth/           → Login (QR, deeplink, credentials, WebView)
feature/widget/         → Home-screen next-lesson widget
feature/notifications/  → Assessment reminders + notice polling
feature/calendar-sync/  → Google Calendar timetable sync
feature/*/              → Home, timetable, courses, assessments, messages, notices, portals, settings

Dependency rules

  • domain has no Android/framework dependencies
  • data implements domain repositories
  • feature/* depends on domain + core:designsystem (+ shared core modules as needed)
  • app wires everything with Hilt

Auth flows

Flow Scheme / UI Description
SEQTA QR SSO seqtalearn://sso/, seqta://sso/ JWT exchange → JSESSIONID
Extension connect desqta://connect/, betterseqtalearn://connect/ Session cookie + heartbeat
WebView School web tab Loads {baseUrl}/seqta/learn, captures JSESSIONID
Direct login Sign in tab Username/password via /seqta/student/login

Cold start validates stored sessions with a SEQTA heartbeat before entering the app.

Sessions are stored in EncryptedSharedPreferences via SecureSessionStore (credentials are not persisted).

Network

SeqtaAuthInterceptor mirrors desqta netgrab.rs:

  • JSESSIONID cookie + Origin/Referer headers
  • JWT Bearer transition when token starts with eyJ
  • 401 → session cleared
  • 10s connect / 30s read timeouts, 3 retries

Background features

  • Next lesson widget — periodic timetable fetch (DesQTA parity)
  • Notifications — assessment reminders (3d, 1d, due, overdue) and new SEQTA notices
  • Calendar sync — optional sync to a dedicated on-device calendar via CalendarContract

Configure toggles in Settings.

Design system

Semantic tokens ported from BetterSEQTA-Plus (theme.scss):

  • Primary accent #3B82F6
  • Surface tiers for light/dark
  • White text in dark mode

Package

org.bettersetqa.betterseqtalearn

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages