Releases: danycli/Assignly
Releases · danycli/Assignly
Assignly v2.1
I have significantly improved the testing coverage for the Assignment Checker app.
Changes
1. New Testing Dependencies
- Added
espresso-intentstolibs.versions.tomlandapp/build.gradle.ktsto 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.
- Deadline Validation: Ensures
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
LocalClipboardManagerand 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
pointerInputto 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.ktinto 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.ktis 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
PullToRefreshBoxrefresh 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.ktandAssignmentCacheStore.ktto useEncryptedSharedPreferences. Your portal password and personal student information are now encrypted at rest using AES-256. - Performance Optimized: Introduced a caching layer in
SecurityUtils.ktto 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
CONNECTEDnetwork 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
ActiveUploadStatusCardat 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 toCommonUi.ktfor 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
HighlightedTextcomponent 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
PersonandLockset. The sign-in button now features a clearer hierarchy and smoother state transitions during authentication. - Clutter Reduction: Simplified the regi...
Assignly v2.0
(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
- The logging out after tilting the screen is fixed.
- The count of submitted assignments is fixed.
Assignly v1.2
- 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
- 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
-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.