362 lines
19 KiB
Markdown
362 lines
19 KiB
Markdown
# **AI Notes – Changelog**
|
||
|
||
## **Tim Pengembang**
|
||
|
||
* Dendi Yogia Pratama
|
||
* Raihan Ariq Muzakki
|
||
* Fazri Abdurrahman
|
||
|
||
# **Version 1.0.0 – Initial Release**
|
||
|
||
## **Sprint 1: Struktur Dasar Aplikasi**
|
||
|
||
### **Struktur & Navigation**
|
||
* **Setup navigation system** - Implementasi routing antar halaman (Beranda, Arsip, Sampah)
|
||
* **Menu Drawer** - Navigation drawer dengan list menu (Beranda, Berbintang, Arsip, Sampah)
|
||
* **Bottom Navigation** - Home & AI Helper tabs dengan icon navigation
|
||
* **Top App Bar** - Menu hamburger dan search icon dengan Material3 styling
|
||
* **Screen Architecture** - Pembuatan screen Arsip, Sampah, Berbintang, AI Helper
|
||
|
||
### **Theme & Styling**
|
||
* **Material3 Dark Theme** - Setup color scheme dengan dark mode default
|
||
* **Color System** - Primary/Secondary colors dengan gradient presets (8 kombinasi warna)
|
||
* **Consistent Design** - Rounded corners (12dp, 16dp, 20dp), shadow, elevation
|
||
* **Smooth Animations** - Drawer slide, FAB scale, card transitions dengan spring animations
|
||
* **Typography System** - Optimasi font sizes dan line heights untuk readability
|
||
|
||
### **Category Management**
|
||
* **Category Model** - Data class dengan gradient colors dan timestamp
|
||
* **Category Dialog** - Form tambah/edit kategori dengan nama + gradient picker
|
||
* **Category Card** - Design dengan icon folder, nama, jumlah catatan, gradient background
|
||
* **Staggered Grid Layout** - 2 kolom responsive dengan LazyVerticalStaggeredGrid
|
||
* **Category Actions** - Menu dropdown (⋮) untuk edit dan delete kategori
|
||
* **Empty State** - Pesan "Buat kategori pertama Anda" dengan icon
|
||
|
||
### **Note Management**
|
||
* **Note Model** - Data class dengan title, content, timestamp, isPinned, isArchived
|
||
* **Note Dialog** - Form dengan judul, deskripsi, simpan, batal, hapus
|
||
* **Note Card** - Preview dengan judul, deskripsi, timestamp, pin icon
|
||
* **Full-screen Editor** - Editable note view dengan auto-save dan actions
|
||
* **Pin Feature** - Toggle pin/unpin untuk catatan penting dengan sorting priority
|
||
* **Archive & Delete** - Actions untuk arsip dan soft delete notes
|
||
* **Search Functionality** - Real-time search berdasarkan judul dan isi (case-insensitive)
|
||
* **Smart Sorting** - Berdasarkan pin status dan timestamp (descending)
|
||
|
||
### **AI Assistant**
|
||
* **Gemini AI Integration** - Setup Google Generative AI SDK dengan gemini-2.5-flash
|
||
* **AI Helper Screen** - Layout chat interface dengan header dan statistics
|
||
* **Category Context Selector** - Dropdown untuk filter konteks AI berdasarkan kategori
|
||
* **Statistics Display** - Total catatan, pinned notes, jumlah kategori
|
||
* **Chat Interface** - User & AI bubble dengan different styling dan timestamp
|
||
* **Prompt Engineering** - Context builder dengan data catatan user (max 10 terbaru)
|
||
* **Suggestion Chips** - Quick question templates untuk user guidance
|
||
* **Copy to Clipboard** - Copy jawaban AI dengan confirmation feedback
|
||
* **Loading & Error States** - Circular progress indicator dan error messages
|
||
* **API Configuration** - Temperature 0.8, topK 40, topP 0.95, maxOutputTokens 4096
|
||
* **Auto-scroll Chat** - Scroll ke bottom otomatis dengan LaunchedEffect
|
||
|
||
### **Data Persistence**
|
||
* **DataStore Implementation** - Preferences DataStore untuk local storage
|
||
* **DataStoreManager Class** - Centralized dengan categoriesFlow & notesFlow
|
||
* **Auto-save dengan Debounce** - 500ms delay untuk optimize I/O operations
|
||
* **Flow-based Loading** - Reactive data loading dengan Flow collection
|
||
* **Error Handling** - Try-catch untuk semua I/O operations
|
||
* **Serializable Models** - JSON serialization dengan extension functions
|
||
|
||
### **UI/UX Enhancements**
|
||
* **Visual Feedback** - Click ripples, copy confirmation, loading states
|
||
* **Empty States** - Icon + descriptive messages untuk setiap screen
|
||
* **Confirmation Dialogs** - AlertDialog untuk arsip, hapus, delete actions
|
||
* **Search Empty State** - "Tidak ada hasil" message saat search kosong
|
||
* **Custom TextField** - Styled text input dengan consistent design
|
||
* **Date Formatter Utility** - Format timestamp ke readable Indonesian format
|
||
|
||
---
|
||
|
||
## **Sprint 2: Project Restructuring & Advanced Features**
|
||
|
||
### **Project Architecture**
|
||
* **Clean Architecture Migration** - Dari 3 file monolith ke modular structure
|
||
* **Data Layer Separation** - Models ke `data/model/` (Category, Note, ChatMessage)
|
||
* **Local Storage Layer** - DataStoreManager ke `data/local/` dengan PreferencesKeys
|
||
* **Component Extraction** - Screen components ke folder terpisah (main, starred, archive, trash)
|
||
* **Utilities Creation** - Constants.kt, DateFormatter.kt, Extensions.kt untuk reusability
|
||
* **Import Optimization** - Update semua import sesuai package structure baru
|
||
|
||
### **Search & Filter**
|
||
* **Beranda Search** - Real-time search kategori berdasarkan nama
|
||
* **Category Notes Search** - Search catatan di dalam kategori (judul & isi)
|
||
* **Search Filtering** - Live filtering saat user mengetik
|
||
* **Search Empty State** - Descriptive message dengan alternative suggestions
|
||
|
||
### **Category Features**
|
||
* **Edit Category** - Dialog untuk ubah nama dan gradient dengan pre-filled form
|
||
* **Delete Category** - Menu dropdown dengan confirmation dialog
|
||
* **Category Actions Menu** - Icon ⋮ untuk access edit & delete options
|
||
* **Gradient Preview** - Visual preview saat edit kategori
|
||
|
||
### **Trash System**
|
||
* **Soft Delete Implementation** - isDeleted flag untuk Category dan Note
|
||
* **Trash Screen** - Tampilkan kategori & notes yang terhapus
|
||
* **TrashCategoryCard Component** - Card khusus dengan restore & delete permanent actions
|
||
* **Restore Feature** - Pulihkan kategori beserta semua notes di dalamnya
|
||
* **Permanent Delete** - Hapus kategori dan notes secara irreversible dengan confirmation
|
||
* **Counter Display** - Jumlah items terhapus di trash
|
||
* **Global Filter** - Filter `!isDeleted` di semua screen untuk hide deleted items
|
||
|
||
### **Bug Fixes & Optimization**
|
||
* **Runtime Error Debugging** - Fix NotImplementedError & FATAL EXCEPTION issues
|
||
* **Google Play Services Handling** - Error handling untuk GMS dependencies
|
||
* **Component Migration** - Update deprecated Divider ke HorizontalDivider
|
||
* **Gradle Optimization** - Cleanup unnecessary dependencies
|
||
* **State Management** - Proper state hoisting dan recomposition optimization
|
||
|
||
### **Documentation**
|
||
* **Migration Guide** - Step-by-step panduan untuk project restructuring
|
||
* **Debugging Guide** - Troubleshooting common issues dan error handling
|
||
|
||
---
|
||
|
||
# **Version 1.1.0 – AI Helper Screen Enhancement & UI Refinement**
|
||
|
||
## **Sprint 3: AI Helper Screen Features & Modern UI Redesign**
|
||
|
||
### **AI Assistant Enhancements**
|
||
* **History Chat AI dengan Drawer Menu** - Riwayat percakapan AI tersimpan permanen, dikelompokkan per kategori
|
||
* **Chat History Management** - Load previous chat, delete history, start new chat dengan auto-save
|
||
* **Markdown Parser untuk AI Response** - Support bold, italic, code blocks, headers, lists, quotes, links
|
||
* **Improved Error Handling** - User-friendly error messages untuk quota, network, API issues
|
||
* **Gemini Model Update** - Switch ke gemini-1.5-flash untuk stabilitas optimal
|
||
|
||
### **Theme System**
|
||
* **Dark/Light Theme Toggle** - Dual theme dengan persistent storage di drawer menu
|
||
* **Reactive Color System** - Dynamic color switching untuk semua components
|
||
* **Complete Color Palette** - DarkColors dan LightColors objects untuk consistency
|
||
|
||
### **UI/UX Modernization**
|
||
* **Floating Design System** - TopBar dan BottomBar dengan floating style, rounded corners, shadow
|
||
* **Consistent Component Style** - Unified design language dengan CircleShape buttons
|
||
* **Optimized Layouts** - Better spacing dan vertical action stack untuk maximize content space
|
||
|
||
### **Data & Navigation**
|
||
* **Note Edit & Delete from Card** - Menu dropdown pada NoteCard untuk quick actions
|
||
* **Race Condition Fix** - Guard flags dan lifecycle-aware auto-save untuk data persistence
|
||
* **Simplified Navigation** - Unified drawer menu, remove redundant back buttons
|
||
* **Extended DataStore** - Support chat history, theme preference, improved error handling
|
||
|
||
---
|
||
|
||
## **Sprint 4: Rich Text Editor Core Features & AI Chat History UI/UX Improvements**
|
||
|
||
### **Rich Text Editing**
|
||
* **Hybrid Rich Text Editor (WYSIWYG)** – Edit teks dengan format langsung tanpa syntax markdown terlihat
|
||
* **Bold, Italic, Underline** – Formatting bersifat toggle dan tetap aktif sampai dimatikan
|
||
* **Heading & Bullet List** – Support heading (H1–H3) dan bullet list tanpa konflik antar format
|
||
* **Undo / Redo** – Riwayat perubahan editor terintegrasi
|
||
|
||
### **Floating Toolbar**
|
||
* **Draggable Mini Toolbar** – Toolbar dapat dipindahkan bebas oleh user
|
||
* **Active State Indicator** – Icon toolbar menandakan format aktif (Bold, Italic, dll)
|
||
* **Minimal UI** – Toolbar kecil agar tidak mengganggu area pengetikan
|
||
* **Keyboard-Aware Positioning** – Posisi toolbar menyesuaikan saat keyboard muncul
|
||
|
||
### **Cursor & Editing Stability**
|
||
* **Stable Cursor & Selection** – Insertion point dan selection handle akurat saat mengetik
|
||
* **IME & Keyboard Safe** – Editor tetap stabil saat keyboard resize / rotate
|
||
* **Auto Bring-Into-View** – Cursor selalu terlihat saat mengetik di area bawah layar
|
||
|
||
### **Data Persistence**
|
||
* **Format Tersimpan Permanen** – Rich text tidak hilang setelah save atau reopen
|
||
* **Auto Save Lifecycle-Aware** – Catatan otomatis tersimpan saat app background / keluar
|
||
* **Markdown Compatibility** – Support import & export markdown secara aman
|
||
|
||
### **Chat History Enhancements**
|
||
* **Compact Modern Design** - Item lebih kecil dengan horizontal layout dan 30 karakter limit
|
||
* **Search & Filter System** - Real-time search dengan category dropdown filtering
|
||
* **Date Grouping** - Auto-group: "Hari Ini", "Kemarin", "Minggu Ini", "Lebih Lama"
|
||
* **Edit Title with Markdown** - Custom title support: **bold**, *italic*, `code`, ~~strike~~
|
||
* **Context Menu** - Three-dot menu (⋮) untuk Edit dan Delete actions
|
||
* **Live Preview** - Real-time markdown preview saat edit title
|
||
|
||
### **Technical Updates**
|
||
* **ChatHistory Model** - Added `customTitle: String?` field
|
||
* **DataStore Integration** - New `updateChatHistoryTitle()` function
|
||
* **Smart Truncation** - Auto-truncate preview ke 30 char dengan `toSafeChatPreview()`
|
||
* **Markdown Parser** - Inline markdown rendering untuk titles dengan proper styling
|
||
* **Character Counter** - Visual feedback dengan color indicator (Gray → Primary → Red)
|
||
|
||
### **User Experience**
|
||
* **Better Empty States** - Informative UI untuk empty search dan no history
|
||
* **Smooth Animations** - Slide transitions untuk dialogs
|
||
* **Input Validation** - Max 30 char dengan real-time blocking
|
||
* **Focus Management** - Seamless editing experience dengan auto-focus
|
||
|
||
> Rich Text Editor butuh dikembangkan lagi lebih advance
|
||
---
|
||
|
||
## **Sprint 5: AI Assistant Enhancements & Smart Organization Features**
|
||
|
||
### **Copy Plain Text Feature**
|
||
* **Dual Copy Options** – Dropdown menu dengan 2 pilihan: "Copy dengan Format" dan "Copy Teks Asli"
|
||
* **Smart Markdown Stripper** – Utility untuk remove bold, italic, code, headers, lists, links dari text
|
||
* **Visual Feedback** – Animated checkmark indicator dengan auto-hide setelah 2 detik
|
||
* **Format Preservation** – Copy dengan format maintain semua markdown syntax
|
||
* **Clean Output** – Plain text copy menghasilkan text bersih tanpa formatting apapun
|
||
|
||
### **Document Upload & AI Summary**
|
||
* **Multi-Format Support** – Upload PDF, TXT, dan DOCX files dengan file picker
|
||
* **Smart PDF Parser** – PDFBox Android integration untuk extract text dari PDF documents
|
||
* **Lightweight DOCX Parser** – Custom XML-based parser tanpa Apache POI dependency
|
||
* **Auto-Summary Generation** – AI auto-generate ringkasan maksimal 300 kata saat file di-upload
|
||
* **File Validation** – Maximum 10MB dengan clear error messaging untuk setiap kasus
|
||
* **Loading Integration** – Loading indicator "Membuat ringkasan..." terintegrasi di chat area
|
||
* **Chat Format** – Upload result format: "📄 Upload file: filename" dengan summary response
|
||
|
||
### **Category Pin System**
|
||
* **Pin/Unpin Toggle** – Quick access untuk kategori favorit dengan dropdown menu
|
||
* **Visual Pin Indicator** – 📌 icon dengan scale dan fade animations
|
||
* **Smart Sorting Logic** – Priority sorting: pinned categories (DESC) → timestamp (DESC)
|
||
* **Persistent Storage** – Pin status tersimpan di DataStore dengan backward compatibility
|
||
* **Multiple Pins Support** – User dapat pin multiple categories dengan proper grouping
|
||
* **Context Menu Integration** – Pin option di dropdown: "Pin Kategori" / "Lepas Pin"
|
||
|
||
### **Technical Implementation**
|
||
* **MarkdownStripper.kt** – Utility class dengan regex-based markdown removal
|
||
* **FileParser.kt** – Centralized file parsing untuk PDF, TXT, DOCX
|
||
* **Category Model Update** – Added `isPinned: Boolean` field dengan serialization support
|
||
* **FileParseResult** – Sealed class untuk type-safe file parsing results
|
||
* **PDFBoxResourceLoader** – Proper initialization dalam Application.onCreate()
|
||
* **State Management** – Combined loading states untuk chat dan file upload
|
||
|
||
### **User Experience**
|
||
* **Smooth Transitions** – Loading states dengan color differentiation (Primary vs Secondary)
|
||
* **Error Handling** – Comprehensive error messages untuk berbagai failure scenarios
|
||
* **Auto-Scroll** – Scroll to bottom saat upload file untuk show loading indicator
|
||
* **Disabled States** – Upload button hidden saat processing untuk prevent duplicate actions
|
||
* **Persistence** – Pin status dan file summary survive app restart
|
||
|
||
# **Sprint 6: Functional Testing & Documentation**
|
||
|
||
## **Testing Implementation**
|
||
|
||
### **Test Methodology Design**
|
||
* **Black-Box Functional Testing** – Pengujian dari perspektif end-user dengan verifikasi Expected vs Actual Result
|
||
* **Automated Unit Testing** – 59 automated tests untuk validasi business logic internal
|
||
* **Test Case Design** – 6 comprehensive test cases (TC-01 hingga TC-06)
|
||
* **Evidence Collection** – Screenshot documentation untuk setiap test case
|
||
* **Test Report Generation** – Structured test summary dengan metrics dan status
|
||
|
||
### **Test Infrastructure Setup**
|
||
* **JUnit 4 Framework** – Core testing framework untuk Android unit tests
|
||
* **AndroidX Test Library** – Android-specific testing utilities dan test runners
|
||
* **Kotlin Coroutines Test** – Testing library untuk asynchronous code dengan runBlocking
|
||
* **Test Isolation** – Unique DataStore instances per test untuk prevent data contamination
|
||
* **Test Execution** – Configure test runner dan gradle tasks untuk automated testing
|
||
|
||
### **Unit Test Development**
|
||
* **DataStoreManagerTest** – 8 tests untuk CRUD operations, autosave, dan pin functionality
|
||
* **TrashFunctionalityTest** – 11 tests untuk soft delete, restore, dan permanent delete
|
||
* **SearchFunctionalityTest** – 14 tests untuk realtime search dengan berbagai scenarios
|
||
* **AIChatFunctionalityTest** – 14 tests untuk context building dan chat history management
|
||
* **FileUploadFunctionalityTest** – 12 tests untuk file parsing dan summary generation
|
||
|
||
### **Test Coverage Achievement**
|
||
* **Total Test Cases** – 6 functional test cases dengan screenshot evidence
|
||
* **Total Unit Tests** – 59 automated tests covering critical business logic
|
||
* **Success Rate** – 100% pass rate untuk semua tests
|
||
* **Execution Time** – Average ~2 minutes untuk full test suite
|
||
* **Code Coverage** – 100% coverage untuk tested components (DataStore, Models, Utilities)
|
||
|
||
### **Bug Fixes & Test Iterations**
|
||
* **Test Isolation Issues** – Fixed data contamination dengan unique DataStore per test
|
||
* **Async Testing** – Resolved suspend function testing dengan proper runBlocking usage
|
||
* **Chat History Tests** – Fixed unique ID collision dengan improved test data management
|
||
* **Error Handling** – Added comprehensive error handling untuk file I/O operations
|
||
* **Test Stability** – Achieved consistent test results dengan proper setup/teardown
|
||
|
||
---
|
||
|
||
## **Documentation Development**
|
||
|
||
### **Technical Documentation**
|
||
* **Testing Methodology** – 16-section comprehensive document explaining black-box testing approach
|
||
* **Architecture Documentation** – Package structure, data flow, dan component relationships
|
||
* **API Documentation** – Gemini API integration, endpoints, dan configuration details
|
||
* **Code Comments** – Inline documentation untuk complex logic dan business rules
|
||
* **Setup Guide** – Step-by-step installation dan configuration instructions
|
||
|
||
### **User Documentation**
|
||
* **User Guide** – Complete panduan penggunaan dengan 7 user flows dan screenshots
|
||
* **Feature Documentation** – Detailed explanation untuk setiap fitur utama aplikasi
|
||
* **Quick Start Guide** – 6-step quick reference untuk new users
|
||
* **Troubleshooting Guide** – Common issues dan solutions untuk end-users
|
||
* **FAQ Section** – Frequently asked questions dengan clear answers
|
||
|
||
### **Project Documentation**
|
||
* **README.md** – Comprehensive project overview dengan badges, links, dan quick navigation
|
||
* **CHANGELOG.md** – Detailed version history dengan sprint breakdown dan feature tracking
|
||
* **TEST_SUMMARY_REPORT.md** – Complete test report dengan metrics, results, dan evidence
|
||
* **DEVELOPMENT_PLAN.md** – Sprint history, roadmap, dan future development planning
|
||
* **Academic Report** – 35-page formal documentation untuk course submission
|
||
|
||
### **Visual Documentation**
|
||
* **Wireframe Design** – Complete app wireframe dengan all screens dan navigation flows
|
||
* **Screenshot Collection** – 35+ screenshots documenting every feature dan user flow
|
||
* **Mockup Integration** – High-fidelity mockups embedded dalam user guide
|
||
* **Architecture Diagrams** – Visual representation of data layer, presentation layer, dan flow
|
||
* **Test Evidence** – Screenshot proof untuk setiap test case execution
|
||
|
||
### **Reference Documentation**
|
||
* **Dependencies List** – Complete list of libraries dengan version numbers
|
||
* **Tech Stack Documentation** – Detailed explanation of technology choices
|
||
* **API References** – Links to official documentation untuk Gemini, Android, Kotlin
|
||
* **Academic Citations** – Proper citation format untuk research sources (33 references)
|
||
* **Version Control** – Git workflow documentation dan branching strategy
|
||
|
||
---
|
||
|
||
## 🎯 Fitur Utama (Core Features)
|
||
1. **Note Management System** ⭐ (PRIMARY)
|
||
|
||
* Create, Read, Update, Delete catatan
|
||
* Organize notes dalam categories
|
||
* Pin notes untuk quick access
|
||
* Archive & Trash system dengan soft delete
|
||
* Full-screen rich text editor dengan WYSIWYG
|
||
* Real-time search & filter notes
|
||
|
||
2. **AI Assistant** 🤖 (PRIMARY)
|
||
|
||
* Chat dengan AI menggunakan Gemini 2.5 Flash
|
||
* Context-aware responses berdasarkan notes user
|
||
* Chat history management dengan persistent storage
|
||
* Document upload & auto-summary (PDF, TXT, DOCX)
|
||
* Markdown support untuk AI responses
|
||
* Copy plain text atau formatted text
|
||
|
||
3. **Category Organization** 📁 (CORE)
|
||
|
||
* Create & manage categories dengan 8 gradient color presets
|
||
* Pin favorite categories untuk quick access
|
||
* Smart sorting: pinned categories → timestamp descending
|
||
* Category-based note filtering dengan statistics
|
||
* Staggered grid layout responsive
|
||
|
||
4. **Rich Text Editor** ✏️ (CORE)
|
||
|
||
* WYSIWYG (What You See Is What You Get) editing experience tanpa raw markdown
|
||
* Bold, italic, underline, headings (H1-H3), bullet lists
|
||
* Floating draggable toolbar dengan active state indicators
|
||
* Undo/Redo functionality
|
||
* Markdown compatibility untuk import/export
|
||
* Auto-save lifecycle-aware
|
||
|
||
5. **Data Persistence** 💾 (ESSENTIAL)
|
||
|
||
* Local storage dengan DataStore Preferences
|
||
* Auto-save dengan debounce (500ms delay)
|
||
* Theme preference storage (dark/light mode)
|
||
* Chat history persistence dengan serialization
|
||
* Flow-based reactive data loading
|
||
* Error handling untuk semua I/O operations
|