Skip to content

Releases: danycli/Assignly

Assignly v2.1

22 May 21:25

Choose a tag to compare

I have significantly improved the testing coverage for the Assignment Checker app.

Changes

1. New Testing Dependencies

  • Added espresso-intents to libs.versions.toml and app/build.gradle.kts to support UI testing of external actions.

2. Unit Tests for Core Logic

  • Created AssignmentLogicTest.kt which covers:
    • Deadline Validation: Ensures isOpen() correctly identifies past and future deadlines.
    • New Assignment Detection: Verifies that the app correctly identifies new assignments to trigger notifications.
    • Epoch Parsing: Ensures portal deadline strings are correctly converted to timestamps.

3. Comprehensive UI Tests

  • Assignment List: Created AssignmentsListTest.kt to test:
    • Search functionality.
    • Course-specific filtering.
    • Status-based filtering (Open vs. Closed).
    • NEW: Long-press actions menu verification.
  • History Flow: Created HistoryFlowTest.kt to verify rendering, searching, and the new long-press actions menu in the assignment history.
  • Upload Flow: Created UploadFlowTest.kt to verify the upload interaction points.

4. Better Assignment Actions

  • Copy Title: Added a "Copy title" option to the long-press menu of both pending and historical assignments. It uses LocalClipboardManager and provides user feedback via a Toast.
  • Open Course Portal: Added an "Open course portal" option that opens the official portal URL in the system browser using LocalUriHandler.
  • Consistent UX: History items now support long-press, exposing actions like "Download instructions" and "Change submission" in a centralized menu, matching the pending list behavior.

5. Main Page Search & Filter Optimization

  • Styled Search Bar: Redesigned the main page search bar to be identical to the one in the history screen, featuring a rounded design, gradient background, and custom focus states.
  • Filter Simplification: Removed the redundant "Course" and "Status" chips to reduce UI clutter, leaving only the essential "Due date" filter.
  • Improved UX: Added pointerInput to dismiss keyboard focus when tapping outside the search bar, matching the behavior of the history screen.

6. Architecture Cleanup (MainActivity Decomposition)

  • Monolith Decomposition: Decomposed the 3,300+ line MainActivity.kt into 6 new modular files, reducing its size by ~70% and isolating feature logic.
  • New Modular Structure:
    • LoginScreen.kt: Encapsulates Splash, Login, and CAPTCHA UI.
    • AssignmentsScreen.kt: Manages the main assignment list and filtering logic.
    • HistoryScreen.kt: Handles the historical assignments display.
    • CommonUi.kt: Contains shared components like skeletons and overlays.
    • UiUtils.kt & UiModels.kt: Centralize logic, constants, and data models.
  • Improved Maintainability: MainActivity.kt is now a clean orchestrator, making it easier to navigate the codebase and add new features without bloating a single file.

7. Offline-First Cache Architecture

  • True Offline-First: Transitioned from an "Offline-fallback" to an "Offline-first" model. The app now checks for and displays cached data before making any network requests.
  • Instant Display: On startup with saved credentials, the user immediately sees their last-known assignments, eliminating the initial loading wait.
  • Background Sync: A background synchronization process starts automatically to fetch fresh data from the portal. The UI is updated seamlessly once the fetch completes.
  • Visual Feedback: Integrated the background sync status into the PullToRefreshBox refresh indicator, so the user knows fresh data is being fetched without a disruptive full-screen loader.
  • Resilient History Navigation: Refactored the History screen to also be offline-first. It now loads cached history instantly when requested and synchronizes in the background, ensuring data is never wiped out by a failed network request.
  • Accurate Deadline Reminders: Fixed a "leak" in notification scheduling where updated deadlines would create duplicate reminders. By using stable assignment IDs and ExistingWorkPolicy.REPLACE, the app now correctly replaces old reminders with updated ones.

8. Secure Credential & PII Storage

  • Military-Grade Encryption: Fully transitioned CredentialsStore.kt and AssignmentCacheStore.kt to use EncryptedSharedPreferences. Your portal password and personal student information are now encrypted at rest using AES-256.
  • Performance Optimized: Introduced a caching layer in SecurityUtils.kt to ensure that encryption keys are managed efficiently, preventing UI stutters during startup or data saving.
  • Resilient Keystore Integration: Added robust error handling for Android Keystore interactions, ensuring the app remains stable even if the secure hardware chip is temporarily unavailable.
  • Complete Data Sanitization: Implemented a thorough cleanup process that removes any legacy plaintext remnants from standard storage once the secure migration is complete.

9. Optimized Background Constraints

  • Power Efficiency: Added setRequiresBatteryNotLow(true) to the background sync and upload workers. This ensures that heavy background tasks are deferred when the device is low on battery, preserving remaining power for the user.
  • Improved Reliability: Combined battery constraints with the existing CONNECTED network constraint to ensure background work only occurs under optimal conditions.
  • Smart Sync Retries: Optimized the background sync worker to stop wasting battery when user intervention is needed. The worker now terminates immediately if a CAPTCHA is required or an unexpected crash occurs, while still retrying on transient network failures.

9. Persistent Upload Status

  • Main UI Integration: Added a dedicated ActiveUploadStatusCard at the top of the assignment list that provides immediate visibility into background uploads.
  • Global Visibility: Centralized the upload status state in MainActivity.kt, ensuring that progress is tracked by a single polling loop and shared across the dashboard and History screens. The UI component was moved to CommonUi.kt for true architectural reusability.
  • Managed Lifecycle: Added a "Dismiss" action for completed (Success) or failed uploads, preventing the card from staying on the screen indefinitely.
  • Visual Status Cues: Updated the card with semantic colors—green for success and red for errors—making it instantly clear when a background task has finished.

10. Robust Instruction Download Lifecycle

  • Background Downloads: Upgraded the instruction file download system to run entirely in the background using WorkManager. Downloads now persist even if you close the app or navigate away.
  • Non-Blocking Experience: Removed the legacy full-screen loading spinner. Users can now continue browsing their assignments while files are being fetched in the background.
  • Real-Time Progress: Added a cyan-themed ActiveDownloadStatusCard (visible on both Dashboard and History) that shows the filename, status (Queued/In Progress), and progress bars for all active downloads.
  • Automated Saving: Once a download completes, the file is automatically saved to the device's public "Downloads" folder, and a completion notification is shown.

11. Smart Search Highlighting

  • Visual Search Cues: Implemented a reusable HighlightedText component that visually emphasizes matching words within assignment and course titles.
  • Improved Scannability: Matching text is highlighted with a subtle yellow background, making it significantly easier to scan long lists of search results and identify why a specific assignment appeared.
  • Case-Insensitive Match: The highlighting logic handles various casing styles, ensuring that searching for "math" will correctly highlight "MATH", "Math", or "math".
  • Global Integration: This UX polish is applied consistently across both the main Dashboard and the History screen.

12. Modern Minimalist Login UI

  • Visual Overhaul: Redesigned the Login screen with a cleaner, modern aesthetic. The new design features a softer background gradient, better vertical rhythm, and more professional typography.
  • Refined Interaction: Updated input field icons to the more standard Person and Lock set. The sign-in button now features a clearer hierarchy and smoother state transitions during authentication.
  • Clutter Reduction: Simplified the regi...
Read more

Assignly v2.0

03 May 12:06
e3310c1

Choose a tag to compare

(Update the app again if you have already updated it)

  • Added a file too large pop-up while uploading an assignment.
  • Added Web View for the Private Network error.
  • Fixed assignment count issue

Assignly v1.3

22 Apr 12:33
b34b708

Choose a tag to compare

  • The logging out after tilting the screen is fixed.
  • The count of submitted assignments is fixed.

Assignly v1.2

16 Apr 20:55
df72e32

Choose a tag to compare

  • Added a search bar in the assignment history/summary tab.
  • Added a short attendance message for subject having low attendance.
  • Fixed the CAPTCHA flickering issue.
  • Optimize the time taking of the signing in.

Assignly v1.1

14 Apr 11:46

Choose a tag to compare

  • Added CAPTCHA verification
  • Improve the UI
  • Fixed some bugs
  • Reduce the timings of the CAPTCHA
  • Fix the CAPTCHA for the privarte/public networks

Assignly v1.0

13 Apr 14:29

Choose a tag to compare

-Assignly- COMSATS Assignment Portal Client

A sleek, native Android app for COMSATS University Islamabad, Abbottabad Campus (CUIIT) students to manage, download, and submit assignments without ever opening a browser.

Assignly is a purpose-built Android client for the COMSATS Student Information System (SIS) portal. It scrapes the assignment portal using your student credentials, presenting all your pending and submitted assignments in a clean, usable interface with one tap download and upload support.

No more squinting at a tiny browser, fighting with broken mobile web layouts, or forgetting deadlines buried in a clunky table.