Skip to content
PurnenduSamantaPublic

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

193 Commits

Folders and files

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

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages