Releases: 01satria/LauncherApp
SATRIA LAUNCHER v1.5
Version 1.5 (Release Date: February 19, 2026)
✨ Added
- Dashboard Popup: Replaced
AssistantPopupwhen clicking the dock avatar with a bottom sheet design featuring a pill bar. Supports drag gestures (automatically snapping to 45% or near fullscreen) and scrolling. - 4 Interactive Tool Cards in Dashboard:
- Weather: Displays weather information via the Open-meteo API (no API key required).
- Money Exchange: Checks currency exchange rates via the open.er-api.com API.
- To-Do List: Daily task tracking stored directly in memory (RAM) to keep it incredibly lightweight.
- Countdown: Day countdown timer featuring a custom, pure React Native calendar date picker.
- Real-Time Preview: Additions or changes to the To-Do List and Countdown now update instantly on the dashboard preview without needing to close and reopen the popup.
🔄 Changed
- Dashboard Header Layout: The avatar is now centered vertically, positioned alongside a digital clock that updates every 10 seconds and the assistant message area.
⚡ Optimized
- RAM Usage (Idle & Active): Removed the
refreshApps()call that triggered every timeAppStatebecame active (when returning from another app) to prevent unnecessary memory consumption. - App Icon Rendering: Removed hundreds of
Animated.Valuenodes inSafeAppIcon(the app grid) and replaced them with standard state-based opacity control. - TypingIndicator Animation: Consolidated 3 separate dot animations into 1 synchronized component to reduce rendering load.
- FlatList Performance: Reconfigured default render limits to ensure off-screen items are recycled much more aggressively.
🐛 Fixed
- Close Animation Lag: Fixed the 0.5-second freeze when dragging the dashboard down to close by manually tracking the real-time frame position and removing
stopAnimation. - Modal Closing: Removed all animation durations when closing modals or the dashboard so they close instantly without any delay.
- Date Picker Crash: Removed the
@react-native-community/datetimepickerexternal dependency that caused a blank screen when opening the dashboard, replacing it with a custom native React Native calendar component. - Drag & Double Positioning Bug: Fixed position calculations that previously threw the sheet off-screen, and adjusted the
panResponderarea so the sheet can still be dragged from the top even when positioned over aScrollView.
🗑️ Removed
- The automated assistant message feature that operated based on a daily time schedule.
- All logic, state, and UI components related to the red dot notification badge on the avatar and dock.
Feedback and contributions welcome!
SATRIA LAUNCHER v1.4
Version 1.4 (Release Date: February 18, 2026)
v1.4 - Layout Modes & UX Overhaul
🎨 New Features
-
✨ Dual Layout Mode - Switch between Grid (4-column) and List (Niagara-style)
- Grid mode: Traditional 4-column layout
- List mode: Single column with left-aligned icons + names
- List mode (no names): Center-aligned icons only
- Toggle in Settings with visual button selector (⊞ Grid / ☰ List)
- Persistent across app restarts via
layout_mode.txt - Smooth transition with zero lag, instant switch
-
💬 Fullscreen Assistant Chat - Complete chat UI redesign
- Fullscreen black overlay for immersive experience
- Ultra-smooth 60 FPS scroll (no bubble photos, flat hierarchy)
- Bilingual fuzzy matching (English + Indonesian)
- Handles typos: "wht is time" → "what is time", "jamberapa" → "jam berapa"
- Levenshtrin distance with similarity threshold 0.72-0.82
- Period-based auto messages (morning, afternoon, evening, night, late night)
- Unread badge on dock avatar (red dot indicator, polls every 10s)
- Hardware back button support for native Android feel
- Zero scroll lag with optimized FlatList config
-
🔔 Smart Period Messages - Auto-send caring reminders
- 04:00-11:00: "Good morning! ☀️ Wake up and conquer"
- 11:00-15:00: "Had lunch? 🍔 Don't skip meals!"
- 15:00-18:00: "Take a break ☕ You must be tired"
- 18:00-22:00: "Time to relax 🌙 Unwind for the day"
- 22:00-04:00: "Put the phone down! 😠 You need rest"
- Messages sent automatically at period transitions (checked every 60s)
- Badge notification for unread messages (red dot on avatar)
- Chat resets daily at 01:00 AM
-
🧹 Smart Cache Management - Background optimization without refresh
- Progressive clearing strategy: 5s (basic), 30s (deep)
- Clears decoded image bitmaps (~15MB RAM saved)
- Triggers garbage collection hints
- Never clears app list or user data (no refresh on return)
- Cancels timers if user returns quickly (<5s = zero overhead)
- Images re-decode instantly on return (<50ms, imperceptible)
- Zero visible impact on user experience
⚡ Performance Optimizations
-
🚀 Chat Scroll Performance - Fullscreen chat optimizations
- Removed all bubble animations (instant render)
- Removed avatar images in chat bubbles (50% less Views per message)
- Flat View hierarchy: 3 Views vs 7 before (-57%)
requestAnimationFramefor scroll (nosetTimeoutoverhead)- Stable
keyExtractorandrenderItemcallbacks windowSize: 5,maxToRenderPerBatch: 10- Scroll FPS: 30-45 → 60 locked (+100%)
- Memory: 45MB → 22MB in chat (-51%)
-
💾 Memory Efficiency - Code cleanup and optimization
- Removed
isActivestate (redundant, AppState used directly) - Removed dead code:
backgroundTimerRef,deepCacheTimerRefrefs - Removed
requestAnimationFramein app filtering (unnecessary) - Lazy animation init removed (direct
useRef(new Animated.Value(0))) - Removed unused imports:
widthfrom modals - Removed unused parameters:
msgIdfromnotifyNewMessage() - Removed unused state:
_lastAssistantMsgIdglobal - Background RAM: 45MB → 30-35MB (-15MB with cache clear)
- Removed
-
⚙️ App Management
- Dock pin limit enforced (max 4 apps, consistent with design)
- "Pin to Dock" button auto-hides when dock full (4 apps)
- Smart logic: Show "Unpin" if app already docked (even when full)
dockCountprop passed toAppActionModalshowPinButton = isDocked || dockCount < 4logic
🎯 UI/UX Improvements
-
📱 iOS-Style Bottom Sheets - Complete modal redesign
- Settings & Action modals now bottom sheets (iOS-inspired)
- Drag handle at top center (visual affordance for drag-to-close)
- Removed close button (tap overlay or back to dismiss)
PanResponderdrag-to-close with smoothtranslateYanimation- Drag threshold: 80px vertical or velocity 0.5
- Native Android back button support (
BackHandler) - Smooth
translateYanimation from bottom (no scale) Animated.timing(150ms) instead ofAnimated.spring(faster)
-
🎨 Layout Mode Selector - Settings UI addition
- Visual toggle buttons: "⊞ Grid" / "☰ List"
- Active mode highlighted in green (#27ae60)
- Inactive mode grayed out (#666)
- Single tap to switch modes instantly
- Background: dark toggle container (#1a1a1a)
- Persistent state saved to
layout_mode.txt
-
💬 Chat UI Improvements
- Fullscreen black background (#000) for immersive feel
- Header with avatar (38px circle) + online status badge
- No bubble photos (performance + visual cleanliness)
- Typing indicator with 3 bouncing dots (AppState-aware)
- Custom send icon (pure RN paths, no dependencies)
- Time stamps inside bubbles (bottom right, 11px)
- User bubbles: green (#27ae60), right-aligned, 4px bottom-right radius
- Assistant bubbles: dark gray (#2a2a2a), left-aligned, 4px bottom-left radius
- StatusBar:
light-content+#000background
🐛 Bug Fixes
-
✅ List Mode Icons - Fixed icons not rendering in list mode
- Root cause: Tried to use base64 Image component
- Fix: Use
SafeAppIconlike grid mode (handlesfile://paths) - Icons now render properly at 52px in list mode
-
✅ Period Transition Logic - Fixed period detection
- Root cause: Used
===equality check, missed time ranges - Fix: Use range checks
>=and<for hour boundaries - Removed circular reference to
_cachePeriodingetCurrentPeriod()
- Root cause: Used
-
✅ Chat Cache Initialization - Fixed memory leak
- Root cause: Always created new auto message on load
- Fix: Check cache first with
initChat()before creating message - Saves RAM, prevents duplicate messages
-
✅ Timer Leaks - Fixed AssistantPopup timer cleanup
- Root cause:
periodTimerRefnot cleared on unmount - Fix: Added cleanup in two places (unmount + period change)
- Prevents "setState on unmounted component" warnings
- Root cause:
-
✅ Modal Animations - Removed unused animation code
- Removed scale animations (not used in bottom sheets)
- Removed unused animation refs and cleanup
- Cleaner, simpler animation logic
-
✅ Fuzzy Matching - Fixed bilingual query handling
- Handles English: "what time", "how are you", "good morning"
- Handles Indonesian: "jam berapa", "apa kabar", "selamat pagi"
- Mixed patterns: "wht is time now", "jamber sekarang"
- Similarity threshold: 0.78 default, 0.72 for time (loose), 0.82 for greetings (strict)
-
✅ Scroll Performance - Fixed chat lag
- Removed complex View hierarchy (7 → 3 Views)
- Removed image decoding overhead (no bubble photos)
- Removed bubble fade-in animations
- Result: 60 FPS locked, butter smooth
🔧 Code Quality
-
🧹 Cleanup (App.tsx)
- Removed
isActivestate (useAppStatedirectly) - Removed
backgroundTimerRef,deepCacheTimerRef(unused) - Removed
requestAnimationFramein filtering (unnecessary) - Changed lazy animation init → direct
useRef(new Animated.Value(0)) - Changed
Animated.spring→Animated.timing(150ms) for modals - Combined
dockApps+isDockedin singleuseMemo - Removed
setAllAppsfrom destructuring (unused)
- Removed
-
🧹 Cleanup (AssistantPopup.tsx)
- Fixed
getCurrentPeriod()— use range checks, not equality - Added
initChat()— check cache before creating message - Removed
_lastAssistantMsgIdglobal (unused) - Removed
msgIdparameter fromnotifyNewMessage()(unused) - Added
periodTimerRefwith proper cleanup in two places
- Fixed
-
🧹 Cleanup (SettingsModal.tsx)
- iOS-style bottom sheet with drag handle
- Removed close button (tap overlay or back to dismiss)
- Changed animation: scale → translateY from bottom
- Added
PanResponderfor drag-to-close - Added
BackHandlerfor Android back button - Removed unused import:
width
-
🧹 Cleanup (AppActionModal.tsx)
- Same bottom sheet redesign as Settings
- Drag handle,
PanResponder,BackHandler - Removed close button
- Added
dockCountprop for smart pin button logic - Removed unused import:
width
-
⚡ Optimizations
- Levenshtrin uses
Uint16Arrayinstead of 2D array (4× less memory) - Regex compiled once at module level (
RE_PUNCT,RE_SPACE) - FlatList:
windowSize: 5,maxToRenderPerBatch: 10 - Chat:
initialNumToRender: 20, noonContentSizeChange - Stable callbacks:
keyExtractor,renderItemwithuseCallback - Typing dots pause in background (AppState listener)
- Levenshtrin uses
Feedback and contributions welcome!
SATRIA LAUNCHER v1.2a
Version 1.2a (Release Date: February 16, 2026)
Major Changes
- Complete Modular Refactor: Restructured from single 700+ line file to 13 well-organized modular files for better maintainability and performance.
- New Flexible Dock System: Redesigned dock with avatar-first layout, dynamic width adjustment, and visual separator between assistant and pinned apps.
- Removed Persistent Notifications: Eliminated auto-appearing notifications in favor of on-demand assistant popup for less intrusive user experience.
New Features
- Assistant Popup: Tap the avatar in dock to view time-based personalized messages (5 different periods: Late Night, Morning, Afternoon, Evening, Night).
- Dynamic Dock Width: Dock automatically adjusts width based on number of pinned apps (supports 0-4 apps).
- Visual Separator: Clean vertical gray line between assistant avatar and pinned apps when apps are present.
- MaskedView Fade Effect: Apps smoothly fade when approaching dock using native masking (no background darkening).
- Center Dock Alignment: All dock elements perfectly centered with no gaps.
User Interface Improvements
- Dock avatar always visible on the left side for quick assistant access.
- Smooth slide-up animation for assistant popup with backdrop overlay.
- Settings now accessible via long-press on dock (500ms) instead of separate button.
- Apps in grid fade naturally near bottom using GPU-accelerated masking.
- Cleaner visual hierarchy with improved spacing and alignment.
Performance Optimizations
- Background Timer Elimination: Removed all periodic notification checks, reducing RAM usage by ~30% in background (150MB → 90MB).
- Battery Life Improvement: Eliminated background processing results in ~40% less battery drain.
- Optimized Component Structure: Split into focused components (SimpleDock, AssistantPopup, AppItem, etc.) for better hot reload and debugging.
- Reduced Bundle Size: Cleaned up unused code and dependencies (~11-15MB total).
- Improved FlatList Performance: Maintained 60 FPS with optimized rendering and memoization.
Code Quality
- Better Organization: 13 modular files across 5 directories (components, hooks, utils, types, constants).
- Easier Maintenance: Average 85 lines per file vs 700+ in single file (~88% reduction).
- Enhanced Testability: Components can now be tested in isolation.
- Improved Collaboration: Multiple developers can work on different features simultaneously.
- Better Git Diffs: Changes localized to specific files instead of massive single-file diffs.
Technical Details
- Added
@react-native-masked-view/masked-viewfor smooth gradient fade effect. - Implemented dynamic width calculation:
avatarWidth + separatorWidth + (appsWidth * count). - Fade gradient starts at 85% from top using LinearGradient mask.
- Popup positioned 110px from bottom to float above dock.
- All animations use native driver for 60fps performance.
Removed
- Persistent notification system and all related timers.
- Auto-appearing assistant messages at period changes.
- Background notification status checking (saved ~60% background RAM).
- Unused notification handlers and state management.
- LinearGradient overlay layer (replaced with MaskedView).
Dependencies
- Added:
@react-native-masked-view/masked-viewfor fade effect. - Required:
react-native-linear-gradient(for gradient mask). - Total Dependencies: 2 main UI libraries, minimal footprint.
Migration Notes
- Update
index.jsto import from./src/Appinstead of./App. - Install new dependency:
npm install @react-native-masked-view/masked-view. - All previous features preserved (hide/pin/uninstall/settings/custom avatar).
- No breaking changes to user data or preferences.
Documentation
- Added comprehensive guides: README.md, STRUCTURE.md, MIGRATION.md, FILE_LOCATIONS.md.
- Included setup scripts for Windows (CMD/PowerShell) and Unix/Mac.
- Complete CHANGELOG with version history.
- MaskedView implementation guide with customization options.
- Visual structure maps and quick reference guides.
What's Next?
- Clock widget at top of screen.
- Weather widget integration.
- Custom wallpaper support.
- Gesture navigation (swipe actions).
- App folders for better organization.
- Theme customization beyond dark/light.
- Backup/restore settings feature.
Known Issues
- MaskedView requires manual installation (
npm install @react-native-masked-view/masked-view). - First-time setup requires
./gradlew cleanafter installing dependencies.
Feedback and contributions welcome!
Stats:
- Files: 13 modular components
- Total Lines: ~1,621 (well-organized)
- RAM (Active): ~90MB
- RAM (Background): ~50MB
- APK Size: ~11-15MB
- Performance: 60 FPS maintained
SATRIA LAUNCHER v1.2
SATRIA LAUNCHER
v1.2 - 🎨 UI/UX Improvements - Major Feature Overhaul & Performance Optimization
Style App Icons
- ✅ Hardware-accelerated rendering with no RAM overhead
Enhanced Dock System
- ✅ simple style dock with max 5 pinned apps
- ✅ Dual-view dock: Toggle between Assistant Message & Pinned Apps
- ✅ Click avatar to switch views
- ✅ Long press avatar to open settings
- ✅ 360° avatar rotation animation on view toggle
- ✅ Smooth slide transition (message slides right, dock slides left)
- ✅ Fixed height positioning (no bottom cutoff)
- ✅ Apps in dock automatically removed from home screen drawer
Advanced App Management
- ✅ Long press any app → Action modal (Pin/Hide/Uninstall)
- ✅ Pin to Dock: Add up to 5 apps to dock
- ✅ Auto-unhide when pinning hidden apps to dock
- ✅ Auto-remove from dock when hiding apps
- ✅ Smart filtering: Hidden apps excluded unless toggle enabled
- ✅ Dock apps excluded from main app list
Settings & Customization
- ✅ Toggle "Show Hidden Apps" (view/edit hidden apps)
- ✅ Toggle "Show App Names" (minimalist mode)
- ✅ Custom avatar upload (200x200 max, base64 storage)
- ✅ Editable username for personalized messages
- ✅ All settings persist across sessions
Smooth 60 FPS Animations
- ✅ App icon press: Spring scale animation (1 → 0.85)
- ✅ Dock app press: Spring scale animation (1 → 0.8)
- ✅ Icon fade-in on load (150ms with easing)
- ✅ Dock view transition: Parallel slide + rotate (250ms)
- ✅ Action modal: Spring scale + slide up + fade (smooth pop-up)
- ✅ Settings modal: Spring scale + slide up + fade (smooth entrance)
- ✅ All animations use
useNativeDriver: true(UI thread, zero JS lag)
Split APK Architecture
- ✅ ABI Split for direct APK (15MB per architecture)
What's Next?
- Include theme support,
- Widget integration,
- More personalization options.
Feedback welcome!
SATRIA LAUNCHER v1.1c
Version 1.1c (Release Date: February 12, 2026)
Fixed
- Fixed launcher force close / crash that occurred several seconds after uninstalling an app.
- Resolved race condition and stale icon references caused by
react-native-launcher-kiticon cache after package removal.
Optimizations
- Implemented optimistic UI removal + FlatList remount (
listKey) for cleaner uninstall flow. - Added multiple scheduled
refreshApps()calls after uninstall to ensure fresh data and prevent dangling references. - Strengthened
SafeAppIconcomponent with better error handling and state reset. - Removed risky
LauncherPackageReceiverregistration inMainApplication.ktthat was causing crashes during package removal. - Cleaned up
UninstallModuleandMainApplicationregistration for better stability. - Optimized uninstall timing between UI update and system dialog.
- Reduced potential memory leaks related to native icon loading and BroadcastReceiver.
- Comprehensive update to the User Interface and User Experience.
New Features
- Added Uninstall App functionality. Long-press any app icon to open the action menu, then select "Uninstall" to remove the application directly through the system uninstall dialog.
- Official Signed APK, No more red warnings from Google Play Protect! Install with confidence.
What's Next?
- Include theme support,
- Widget integration,
- More personalization options.
Feedback welcome!
Satria Launcher v1.0
Version 1.0 (Release Date: February 06, 2026)
- Displays your installed apps in an intuitive grid layout for easy access.
- Minimalist and unobtrusive home screen that blends seamlessly with your wallpaper.
- A bottom dock with time-based inspirational messages to keep you motivated throughout the day.
- Perfect for users seeking a personalized, bloat-free home screen experience. Download now and customize your Android device!
- Full app grid customization (icon size, spacing, and sorting).
- Dynamic motivational quotes updated based on time of day (morning energy boosts, evening reflections).
- Low battery and memory usage for smooth performance on all devices.
What's Next? Future updates will include theme support, widget integration, and more personalization options. Feedback welcome!
Satria Launcher v1.1a
Version 1.1a (Release Date: February 09, 2026)
Optimizations
- Made the app significantly lighter overall while preserving all core functionality and UI appearance.
- Reduced RAM usage to ensure very low memory footprint during operation.
Feature Removals
- Removed the assistant name feature.
- Removed the toast notification that appears when the app is opened.
New Features
- Added a lightweight refresh mechanism that triggers only once when an app is installed or uninstalled. This does not activate on returning to home screen or closing all apps. Implemented using Native BroadcastReceiver in Android for minimal RAM impact and efficiency.
What's Next? Future updates will include theme support, widget integration, and more personalization options. Feedback welcome!