A JARVIS-style AI launcher for Android that replaces your default home screen with an intelligent assistant that understands natural language and can control your apps, device, and ( eventually) smart home.
- HOME intent - Acts as your device's default launcher
- App Grid - Beautiful 4-column grid displaying all installed apps
- Tap to Launch - Single tap opens apps
- Long Press - Opens app info settings
- Real-time Clock - Large time display with date
- Floating Action Button - Always accessible AI assistant button
- Chat Interface - Modern bottom sheet with text and voice input
- Natural Language Processing - Understands commands like:
"Open YouTube"- Launches apps by name"Hello JARVIS"- Responds with greetings"Turn on WiFi"- Controls device settings
- AI Mode Toggle - Switch between Local and Cloud processing
- Text-to-Speech - JARVIS speaks responses aloud
- Speech-to-Text - Built-in Android SpeechRecognizer integration
- Real-time Transcription - See what you say as you speak
- Error Handling - Graceful fallbacks for recognition failures
- WiFi toggle
- Bluetooth control
- Flashlight control
- Volume adjustment
- Battery monitoring
- MQTT integration placeholder
- Home Assistant API stubs
- Light control
- Temperature control
- Routine execution
- Location monitoring
- Time-of-day detection
- Battery status tracking
- Activity detection hooks
- WorkManager-based task scheduling
- Daily routine support
- Time-based triggers
- One-time tasks
com.jarvis.launcher/
├── MainActivity.kt # Entry point & main UI
│
├── ui/
│ ├── theme/
│ │ └── Theme.kt # Material 3 dark theme
│ └── launcher/
│ ├── AppGrid.kt # App grid composable
│ ├── AppInfo.kt # App data class
│ ├── LauncherViewModel.kt # State management
│ └── TimeHeader.kt # Clock display
│
├── ai/
│ └── engine/
│ └── AiEngine.kt # NLP command processing
│
├── voice/
│ └── VoiceService.kt # Speech recognition & TTS
│
├── automation/
│ ├── DeviceController.kt # Device-level controls
│ └── HomeController.kt # Smart home integration
│
└── context/
├── SensorMonitor.kt # Location, time, sensors
└── RoutineScheduler.kt # Automated task scheduling
- Android Studio Hedgehog or newer
- Minimum SDK: API 29 (Android 10)
- Target SDK: API 34 (Android 14)
- Kotlin: 1.9+
- JDK: 17
-
Clone the repository
git clone <repository-url> cd JarvisLauncher
-
Open in Android Studio
- File → Open → Select the project folder
- Wait for Gradle sync to complete
-
Run on device/emulator
- Click the Run button or press
Shift+F10 - Choose your device/emulator
- Click the Run button or press
-
Set as default launcher
- Press the Home button on your device
- Select JARVIS Launcher
- Tap Always to set as default
- Tap any app icon in the grid to launch it
- Long press an app to open its info settings
- Tap the microphone FAB in the bottom-right corner
- Type or speak your command:
- Voice: Tap the mic icon, speak, then tap send
- Text: Type in the text field and hit send
✅ "Open Chrome" → Launches Chrome browser
✅ "Launch YouTube" → Opens YouTube app
✅ "Hello JARVIS" → Greeting response
✅ "Turn on WiFi" → Opens WiFi settings
✅ "Enable flashlight" → Turns on flashlight
- Local Mode (default): Rule-based responses
- Cloud Mode: Reserved for future LLM API integration
The app requests the following permissions:
| Permission | Purpose |
|---|---|
QUERY_ALL_PACKAGES |
List installed apps |
RECORD_AUDIO |
Voice command input |
INTERNET |
Future cloud AI calls |
ACCESS_FINE_LOCATION |
Context awareness |
CAMERA |
Flashlight control |
FOREGROUND_SERVICE |
Background tasks |
Note: All permissions are optional except
QUERY_ALL_PACKAGES(required for launcher functionality).
- UI Framework: Jetpack Compose 1.7
- Material Design: Material 3
- Architecture: MVVM with ViewModels
- Async: Kotlin Coroutines + Flow
- Speech: Android SpeechRecognizer & TextToSpeech
- Background Tasks: WorkManager
- HTTP Client: OkHttp (for future APIs)
- Image Loading: Coil Compose
- Integrate llama.cpp for local LLM inference
- Add OpenAI API support (GPT-4)
- Add Google Gemini API support
- Implement function calling for device control
- Add conversation history persistence
- Context-aware suggestions
- MQTT client implementation
- Home Assistant integration
- Google Home / Alexa bridging
- BLE device discovery
- IR blaster support
- Custom routine builder UI
- Geofencing (home/work detection)
- Calendar integration
- Weather API integration
- Activity recognition (walking, driving)
- Ambient light sensor for auto-brightness
- Do Not Disturb auto-mode
- Widget support on home screen
- App drawer with categories
- Gesture navigation
- Customizable themes
- App search functionality
- Favorites/pinned apps
- Actual WiFi/Bluetooth toggle (via system APIs)
- Volume controls with visual feedback
- Screen brightness adjustment
- Airplane mode toggle
- Mobile data toggle
- Battery optimization controls
- On-device processing preference
- API key encryption
- Permission granularity
- Data retention policies
- Offline mode
Contributions are welcome! This is a foundational scaffold - help expand it into a full-featured AI assistant.
- Follow Kotlin coding conventions
- Use Jetpack Compose for all UI
- Add inline comments for complex logic
- Write TODO comments for future work
- Test on API 29+ devices
This project is open source. Add your license here.
- Inspired by JARVIS from Iron Man
- Built with Jetpack Compose
- Powered by Android platform APIs
Made with ❤️ for the future of mobile AI assistants
"Sometimes you gotta run before you can walk." - Tony Stark
An intelligent Android launcher with integrated AI assistant, voice activation, smart categorization, and device automation.
Features • Installation • Usage • Architecture • Day 4 Summary • Contributing
- ✅ "Hey JARVIS" voice activation
- ✅ Continuous audio monitoring
- ✅ Voice Activity Detection (VAD)
- ✅ Energy threshold-based detection
- ✅ Low-power operation
- ✅ Background service capable
- ✅ Toggle button in launcher
- ✅ Visual feedback when active
- 🔜 ML-based wake word (Pocketsphinx/TFLite)
- ✅ 13 intelligent categories (👥 Social, 💬 Communication, 🎬 Entertainment, etc.)
- ✅ Auto-categorization based on package names
- ✅ Expandable/collapsible sections
- ✅ Horizontal scrolling grids
- ✅ Category-specific color coding
- ✅ Emoji icons for visual distinction
- ✅ Toggle between normal/category view
- ✅ Long-press to favorite from categories
- ✅ Create custom folders with names
- ✅ 8 color options for personalization
- ✅ Add/remove apps to/from folders
- ✅ Folder count badges
- ✅ Bottom sheet for folder contents
- ✅ Persistent storage with DataStore
- ✅ Delete folders
- ✅ Empty folder handling
- ✅ Swipe up → Open app drawer
- ✅ Swipe down → Notifications
- ✅ Swipe left/right → Pages
- ✅ Double tap → Quick search
- ✅ Long press → Widget mode
- ✅ Two-finger swipe → Quick settings
- ✅ Velocity-based triggering
- ✅ Configurable gesture actions
- ✅ Custom home screen replacement
- ✅ Beautiful futuristic UI with neon effects
- ✅ 4-column app grid with smooth animations
- ✅ Real-time app search with instant filtering
- ✅ Favorite apps with golden star badges
- ✅ Long-press to toggle favorites
- ✅ Smart suggestions based on usage patterns
- ✅ Time and date display
- ✅ Dual AI providers: OpenAI GPT-4o-mini & Google Gemini 2.0 Flash
- ✅ Local mode: Fast, rule-based responses (offline)
- ✅ Cloud mode: Natural language understanding
- ✅ Voice commands via speech recognition
- ✅ Text-to-speech responses
- ✅ Conversation history persistence
- ✅ App launching via voice/text
- ✅ Device control commands
- ✅ Context-aware responses
- ✅ Track app launch frequency
- ✅ Record last launch timestamps
- ✅ Smart scoring algorithm (70% usage + 30% recency)
- ✅ "For You" suggestions (context-aware)
- ✅ "Most Used" apps display
- ✅ Favorite apps management
- ✅ All data stored locally (privacy-first)
- ✅ WiFi toggle/settings
- ✅ Bluetooth toggle/settings
- ✅ Flashlight control
- ✅ System settings access
- ✅ Battery level display
- ✅ Horizontal scrollable panel
- ✅ Color-coded icons
- ✅ Dark gradient background (Material 3)
- ✅ Smooth animations and transitions
- ✅ Touch feedback on all interactions
- ✅ Bottom sheet for AI chat
- ✅ Floating action button for quick access
- ✅ Responsive and performant
- ✅ Clean, minimalist design
- ✅ Device control interface
- ✅ WiFi management
- ✅ Bluetooth control
- ✅ Flashlight toggle
- ✅ Volume adjustment
- ✅ Battery monitoring
- 🔜 MQTT integration for smart home
- 🔜 Home Assistant API support
- ✅ Sensor monitoring framework
- ✅ Routine scheduler
- ✅ WorkManager integration
- 🔜 Location-based triggers
- 🔜 Time-based automation
- 🔜 Environmental context (light, motion)
┌─────────────────────────────┐
│ 🕐 12:45 │
│ Monday, November 4 │
├─────────────────────────────┤
│ JARVIS ⚙️ │
├─────────────────────────────┤
│ 🔍 Search apps... [X] │
├─────────────────────────────┤
│ Quick Actions │
│ [📶] [📱] [🔦] [⚙️] [🔋] │
├─────────────────────────────┤
│ For You >>> │
│ 📱 📱 📱 📱 📱 📱 │
├─────────────────────────────┤
│ Most Used >>> │
│ 📱 📱 📱 📱 📱 📱 │
├─────────────────────────────┤
│ All Apps │
│ 📱⭐ 📱 📱 📱 │
│ 📱 📱 📱⭐ 📱 │
│ 📱 📱 📱 📱⭐ │
│ ... │
└─────────────────────────────┘
🎤
- Android Studio Hedgehog or newer
- Android SDK 29+ (minimum)
- Target SDK 34
- Kotlin 1.9+
- Gradle 8.0+
- Clone the repository
git clone https://github.com/yourusername/jarvis-launcher.git
cd jarvis-launcher- Open in Android Studio
# Open Android Studio and import the project
File → Open → Select the project directory- Configure API Keys (Optional for Cloud AI)
For OpenAI:
- Get API key from platform.openai.com
- Open JARVIS Launcher → Settings → OpenAI tab
- Paste your key and save
For Gemini (FREE):
- Get API key from aistudio.google.com/apikey
- Open JARVIS Launcher → Settings → Gemini tab
- Paste your key and save
- Build and Run
./gradlew installDebug- Set as Default Launcher
- Press Home button
- Select JARVIS Launcher
- Tap "Always" to set as default
- Tap any app icon to launch
- Long press to mark as favorite (⭐)
- Search by typing in search bar
- Scroll through app grid
- Tap the purple mic FAB (bottom-right)
- Choose Local or Cloud mode
- Type or speak your command
- JARVIS responds and executes actions
Example Commands:
✅ "Open Chrome"
✅ "Launch YouTube for me"
✅ "Turn on the flashlight"
✅ "What time is it?"
✅ "Enable WiFi"
- Swipe through Quick Actions panel
- Tap WiFi → Opens WiFi settings
- Tap Flashlight → Toggles torch
- Tap Battery → Shows battery level
- Tap Settings → Opens system settings
- Use apps regularly
- JARVIS learns your patterns
- See suggestions in "For You" section
- "Most Used" shows top 6 apps
- Updates in real-time
- All chats auto-save
- Restart app → history restored
- Tap 🗑️ to clear conversation
- Up to 100 messages stored
com.jarvis.launcher/
├── MainActivity.kt # Entry point & main UI
├── data/
│ ├── AppUsageTracker.kt # Usage analytics & favorites
│ └── ConversationRepository.kt # Chat persistence
├── ui/
│ ├── launcher/
│ │ ├── AppGrid.kt # App grid display
│ │ ├── AppInfo.kt # App data model
│ │ ├── LauncherViewModel.kt # Launcher logic
│ │ ├── SearchBar.kt # Search functionality
│ │ ├── QuickActionsPanel.kt # Device controls
│ │ ├── SuggestionsRow.kt # Smart suggestions
│ │ └── TimeHeader.kt # Clock display
│ ├── settings/
│ │ └── SettingsDialog.kt # API key configuration
│ └── theme/
│ └── Theme.kt # Material 3 theme
├── ai/
│ └── engine/
│ ├── AiEngine.kt # AI orchestration
│ ├── OpenAiClient.kt # OpenAI API integration
│ └── GeminiClient.kt # Gemini API integration
├── voice/
│ └── VoiceService.kt # Speech recognition & TTS
├── automation/
│ ├── DeviceController.kt # Device control
│ └── HomeController.kt # Smart home (stubs)
└── context/
├── SensorMonitor.kt # Context awareness
└── RoutineScheduler.kt # Task scheduling
| Component | Technology |
|---|---|
| UI | Jetpack Compose + Material 3 |
| Language | Kotlin 100% |
| Architecture | MVVM + Repository Pattern |
| Concurrency | Kotlin Coroutines + Flow |
| Storage | DataStore (Preferences) |
| Networking | OkHttp |
| Image Loading | Coil |
| Background Tasks | WorkManager |
| AI | OpenAI API, Google Gemini API |
| Voice | Android SpeechRecognizer + TTS |
UI Layer (Compose)
↓
ViewModel (State Management)
↓
Repository (Data Access)
↓
DataStore / AI Client / Package Manager
User Input
↓
AiEngine.processCommand()
↓
┌─────────┴────────┐
│ │
Local Mode Cloud Mode
(Rules) (OpenAI/Gemini)
│ │
└─────────┬────────┘
↓
AiResponse (message + action)
↓
Execute Action (launch app, control device, etc.)
↓
Update UI
-
jarvis_settings
- OpenAI API key
- Gemini API key
- Cloud provider selection
-
app_usage
- App launch counts
- Last launch timestamps
- Favorite apps list
-
conversations
- Chat message history
- Max 100 messages
| Permission | Purpose |
|---|---|
QUERY_ALL_PACKAGES |
List installed apps |
INTERNET |
Cloud AI APIs |
RECORD_AUDIO |
Voice commands |
ACCESS_WIFI_STATE |
WiFi control |
CHANGE_WIFI_STATE |
WiFi toggle |
BLUETOOTH |
Bluetooth control |
BLUETOOTH_CONNECT |
BT pairing |
CAMERA |
Flashlight |
FLASHLIGHT |
Torch control |
ACCESS_FINE_LOCATION |
Context awareness |
FOREGROUND_SERVICE |
Background tasks |
// App launching
"Open Chrome"
"Launch YouTube"
"Start the camera"
// Device control
"Turn on WiFi"
"Enable Bluetooth"
"Flashlight on"
// Conversational
"Hello JARVIS"
"How are you?"
"Thanks!"// Configure OpenAI
val aiEngine = AiEngine(context)
aiEngine.saveApiKey(CloudProvider.OPENAI, "sk-...")
aiEngine.setCloudProvider(CloudProvider.OPENAI)
aiEngine.setMode(AiMode.CLOUD)
// Process command
val response = aiEngine.processCommand("Open Chrome", chatHistory)
if (response.action?.type == "launch_app") {
val packageName = response.action.data["packageName"]
launchApp(packageName)
}// Record app launch
usageTracker.recordAppLaunch("com.android.chrome")
// Get suggestions
val suggestions = usageTracker.getSmartSuggestions(currentHour = 9, limit = 6)
// Manage favorites
usageTracker.addToFavorites("com.android.chrome")
val isFavorite = usageTracker.isFavorite("com.android.chrome")| Metric | Value |
|---|---|
| App Launch | < 500ms |
| Search Response | < 50ms |
| AI Response (Local) | < 100ms |
| AI Response (Cloud) | ~1-2s |
| Memory Usage | ~80MB |
| App Size | ~5MB |
- ✅ Lazy loading for app grid
- ✅ Bitmap caching for icons
- ✅ Coroutines for async operations
- ✅ StateFlow for reactive updates
- ✅ DataStore for efficient storage
- ✅ Remember blocks to prevent recomposition
We welcome contributions! Here's how:
- Fork the repository
- Create a feature branch
git checkout -b feature/amazing-feature
- Commit your changes
git commit -m "Add amazing feature" - Push to branch
git push origin feature/amazing-feature
- Open a Pull Request
- Follow Kotlin coding conventions
- Use Compose for all UI
- Write descriptive commit messages
- Add comments for complex logic
- Test on multiple Android versions
-
WiFi/Bluetooth Toggle
- Android 10+ requires opening settings (API restriction)
- No direct toggle available
-
Flashlight
- Requires CAMERA permission
- May not work on some devices
-
Voice Recognition
- Requires Google services
- Internet needed for speech-to-text
-
Suggestions
- Basic algorithm (not ML-based yet)
- No time-of-day learning yet
- ML-based app suggestions (TensorFlow Lite)
- Visual routine builder UI
- Location-based triggers
- "Hey JARVIS" wake word detection
- Streaming AI responses
- App categories and folders
- Custom icon packs
- Themes (light/dark/AMOLED)
- Widget support
- Gesture controls
- MQTT smart home integration
- Home Assistant API
- Cloud backup & sync
- Multi-device support
- Analytics dashboard
This project is licensed under the MIT License - see the LICENSE file for details.
- OpenAI for GPT API
- Google for Gemini API
- Android Team for Jetpack Compose
- Material Design for beautiful components
- Iron Man for inspiring JARVIS 🦾
Email: ninjarusher1411@gmail.email@example.com
GitHub: @Debajeet-1411
Twitter: @Debajeet1411
If you find this project useful, please consider giving it a star! ⭐
Made with ❤️ and Kotlin
- Day 1 Summary - Initial setup & basic launcher
- Day 2 Summary - OpenAI & Gemini integration
- Day 3 Summary - Smart features & analytics
- Gemini Guide - Gemini API setup
- Quick Start - Get started in 5 minutes
- Jetpack Compose Tutorial
- Material 3 Guidelines
- Kotlin Coroutines Guide
- OpenAI API Docs
- Gemini API Docs
Last Updated: December 2024
Version: 1.1.0 (Day 4)
Status: ✅ Production Ready