Skip to content

PurnenduSamanta/Contactly

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

193 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Contactly Logo

Contactly

Smart Contact Identity Scheduler for Android
Temporarily change contact name & photo — instantly or on schedule.

Get it on Google Play

Min SDK 24 Target SDK 36 Kotlin Jetpack Compose


🎭 What is Contactly?

Contactly gives you full control over your contact identity — temporarily and automatically.

Change a contact’s name and photo either:

  • ⚡ Instantly (one tap)
  • 📅 On a schedule (start & end time)
  • 🔁 Repeating weekly on selected days

When the scheduled time ends, everything is restored safely — exactly as it was.

Whether it’s for privacy, fun, organization, or context-based identity switching — Contactly handles it seamlessly in the background.


✨ Features

⚡ Instant Mode

  • Apply a temporary identity immediately
  • One-tap identity switch
  • Perfect for quick changes
  • Safe automatic restore

📅 Smart Scheduling

  • Start & end time support
  • One-time schedules
  • Weekly repeating schedules (Mon–Sun)
  • Exact alarm precision
  • Auto re-register after device reboot

🎨 Identity Customization

  • Temporary name swapping
  • Temporary profile photo swapping
  • Real-time active state indicator
  • Instant restore when deleting a schedule

🔐 Security & Privacy

  • Biometric App Lock (Fingerprint / Face unlock)
  • Optional notifications
  • Secure internal storage for temporary images

🎨 Modern UI Experience

  • Fully redesigned interface
  • Material 3 + Dynamic colors
  • Light / Dark / System theme
  • List & Grid view toggle
  • Smooth animations & micro-interactions
  • Sliding image carousel preview
  • Custom FAB-centered bottom navigation

🛡 Reliability & Stability

  • Boot-safe alarms
  • Uses setExactAndAllowWhileIdle
  • Real-time UI refresh via internal event bus
  • Multiple edge-case bug fixes
  • Safe restore logic even after force-stop or reboot

📸 Screenshots


🏗 Architecture

Contactly follows a clean, layered architecture with separation of concerns:

UI Layer (Compose)
   ↓
ViewModels (StateFlow)
   ↓
Domain / Alarm Manager / Image Storage
   ↓
Repositories (Contacts + Schedules)
   ↓
Room Database + DataStore
   ↓
Platform (AlarmManager + ContentResolver)

Key Decisions

Area Approach
UI 100% Jetpack Compose (Material 3)
State StateFlow + collectAsStateWithLifecycle
DI Koin
Database Room
Preferences DataStore
Alarm System AlarmManager + BroadcastReceiver
Contacts API ContactsContract via ContentResolver
Image Loading Coil
Security AndroidX Biometric
Updates Google Play In-App Updates
Crash Reporting Firebase Crashlytics

📁 Project Structure

app/src/main/java/com/purnendu/contactly/

├── alarm/
├── data/
│   ├── local/
│   └── repository/
├── di/
├── model/
├── notification/
├── ui/
│   ├── components/
│   ├── screens/
│   └── theme/
├── utils/
├── ContactlyApplication.kt
└── MainActivity.kt

🚀 Getting Started

Prerequisites

  • Android Studio Meerkat (2024.3.1) or later
  • JDK 17
  • Android SDK 36

Setup

git clone https://github.com/PurnenduSamanta/Contactly.git
cd Contactly

Open in Android Studio and run on an emulator or device (API 24+).

Firebase Setup (Required)

  1. Create a Firebase project at https://console.firebase.google.com
  2. Add Android app: com.purnendu.contactly
  3. Download google-services.json
  4. Place the file at this exact path:
app/google-services.json
  1. Enable Crashlytics and Analytics in Firebase Console

Verify before building:

# from project root
ls app/google-services.json

If the file is missing, build will fail with:

Missing Firebase config: place google-services.json at app/google-services.json before building.

🔐 Required Permissions

Permission Purpose
READ_CONTACTS Read contact data
WRITE_CONTACTS Modify name & photo
SCHEDULE_EXACT_ALARM Precise scheduling
RECEIVE_BOOT_COMPLETED Re-register alarms
POST_NOTIFICATIONS Show swap notifications

📲 Download


🤝 Contributing

Contributions are welcome!

  1. Fork the repo
  2. Create feature branch
  3. Commit changes
  4. Open Pull Request

📄 License

Proprietary — All rights reserved © Purnendu Samanta


Designed & developed from a true story ❤️

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages