Bring true adaptive refresh rate to devices that don’t support it — intelligently, automatically, and without root.
⭐ If this project helps you, consider giving it a star!
If you'd like to support my work, you can sponsor me on GitHub ❤️
⚡ Automatically switches between minimum and maximum refresh rates based on real user interaction
🔋 Saves battery without sacrificing smoothness
🔒 100% offline, no tracking, no ads
Adaptive Hz dynamically switches your device between its supported minimum and maximum refresh rates based on real user interaction.
Unlike OEM implementations, it works globally across apps and focuses on real touch behavior.
Many mid-range Android devices (especially Samsung & Xiaomi) either:
- Do not provide true adaptive refresh rate
- Or limit it to specific apps
This results in unnecessary battery drain or poor responsiveness.
Adaptive Hz was built to fix this gap with a simple, system-wide solution.
- Setup & Permissions
- Dashboard (Light mode)
- Settings
- Dashboard (Dark mode)
Many Android devices offer multiple refresh rates (60Hz / 90Hz / 120Hz) but:
- Do not provide true adaptive switching
- Restrict adaptive behavior to specific apps
- Or aggressively kill background services
Adaptive Hz solves this by:
- Switching to Maximum Hz when you touch or scroll
- Dropping to Minimum Hz when idle
- Operating fully automatically
- Requiring no root access
- Running completely offline (no ads, no tracking)
- Interaction-based refresh switching
- Hybrid detection model (fast + stable)
- Vendor-aware refresh control
- Optional Stability Mode (foreground service)
- Boot persistence
- English & Turkish localization
- Minimal, Material You UI
Adaptive Hz includes an optional Stability Mode that runs a foreground service with a persistent notification.
Some Android devices (especially aggressive OEM ROMs) may kill background processes, which can interrupt adaptive refresh behavior.
- Keeps the app alive in the background
- Improves reliability of refresh rate switching
- Prevents the system from killing the service
- Shows a persistent notification while active
- Can be disabled anytime from Settings
💡 If you prefer a clean status bar, you can safely disable it — the app will still work, but background stability may be reduced on some devices.
Uses:
refresh_rate_mode
Uses:
miui_refresh_rate
Vendor detection is automatic.
To balance responsiveness and stability:
- Immediate boost on first touch
- Grace window for scroll/focus events
- Idle timeout fallback (default ≈3.5 seconds)
- Lock screen and Always-On Display ignored
This prevents infinite refresh loops and unnecessary maximum-Hz usage.
| Permission | Required | Purpose |
|---|---|---|
| WRITE_SECURE_SETTINGS | Yes | Modify refresh rate system setting |
| Accessibility Service | Yes | Detect global interaction |
| Foreground Service | Optional | Stability Mode |
| Disable Battery Optimization | Recommended | Prevent background kill |
Grant secure permission via ADB:
adb shell pm grant com.mahmutalperenunal.adaptivehz android.permission.WRITE_SECURE_SETTINGSAdaptive Hz does not require root and works fully using standard Android permissions.
However, if your device is rooted, you can optionally grant the required permission directly inside the app without using ADB.
- Detects if root access is available on the device
- Attempts to grant
WRITE_SECURE_SETTINGSautomatically - Falls back to manual ADB setup if the operation fails
- Root support is completely optional
- Behavior may vary depending on ROM and root implementation (Magisk, etc.)
- No background or persistent root access is used — only a one-time permission grant attempt
💡 If automatic setup fails, you can always use the manual ADB command above.
- Install APK
adb install AdaptiveHz.apk-
Grant secure permission (see above)
-
Enable Accessibility Service:
Settings → Accessibility → Installed Services → Adaptive Hz → Enable
- (Recommended) Enable Stability Mode inside the app
| Mode | Behavior |
|---|---|
| Adaptive | Automatically switches between minimum and maximum based on interaction |
| Minimum | Locks refresh rate to minimum |
| Maximum | Locks refresh rate to maximum |
| Off | Restores system default behavior |
When Stability Mode is enabled, Adaptive Hz provides quick controls directly from the notification:
-
Off state:
- Shows a single On button
-
Active state:
- Shows Off + 2 dynamic mode buttons (Adaptive / Min / Max depending on current state)
-
Smart behavior:
- Turning off from notification keeps the service alive briefly (grace period)
- Allows quick re-enable without reopening the app
- Automatically stops itself after a short time if not used
The system remains fully event-driven and does not run continuous background loops.
Adaptive Hz includes a Quick Settings Tile for fast access directly from the system panel.
- Toggle Adaptive Hz On / Off with a single tap
- Mirrors the app’s default behavior:
- On → Adaptive mode
- Off → System default
- Tile shows current state (On / Off) with dynamic subtitle
- Fully synced with in-app state and notification controls
- Long press opens the app for detailed settings
- Uses a monochrome icon optimized for Quick Settings
- Automatically adapts to system light/dark theme
- Built following Android system UI guidelines
💡 This provides the fastest way to control Adaptive Hz without opening the app or using notifications.
Adaptive Hz includes a resizable home screen widget for quick access to refresh rate modes.
- Instantly switch between:
- Off
- Minimum
- Adaptive
- Maximum
- Shows the current active mode with a highlighted state and badge
- Provides one-tap control without opening the app
- Fully synced with:
- In-app state
- Notification controls
- Quick Settings tile
- Automatically updates after every action
- Detects setup state:
- If required permissions are missing, widget enters a passive state
- Tapping the widget opens the app to complete setup
- Default layout is optimized for wide (4x1) usage
- Supports resizing:
- Expands horizontally for better spacing
- Switches to a compact layout when space is limited
- Designed to match system widget behavior on OneUI and HyperOS
- Minimal, clean card-style layout
- Supports light/dark system themes
- Uses subtle visual states:
- Active mode highlight
- Disabled state when setup is incomplete
💡 The widget is the fastest way to control Adaptive Hz modes directly from your home screen.
Adaptive Hz
├── core
│ ├── engine
│ │ ├── strategy
│ │ │ ├── VendorStrategy
│ │ │ ├── SamsungStrategy
│ │ │ ├── XiaomiStrategy
│ │ │ └── OtherStrategy
│ │ ├── AdaptiveHzEngine
│ │ └── EngineModels.kt
│ └── system
│ ├── DeviceVendor.kt
│ └── RefreshRateController
├── BootReceiver
├── AdaptiveHzService
├── StabilityForegroundService
├── ui
│ ├── home
│ │ ├── components
│ │ │ ├── DashboardContent.kt
│ │ │ └── SetupContent.kt
│ │ └── HomeScreen.kt
│ ├── settings
│ │ └── SettingsScreen.kt
│ └── theme
│
└── MainActivity.kt
- Very low CPU usage
- No polling loops
- Battery savings typically 5–15% per day (usage dependent)
- Event-driven architecture (no polling)
- Minimal CPU overhead
- OEM-aware system setting control
- Accessibility-based interaction detection
Typical battery savings: ~5–15% per day (usage dependent)
Test methodology:
- Device: Samsung Galaxy A52 (120Hz)
- Scenario: Mixed usage (scrolling + idle periods)
- Comparison: Fixed 120Hz vs Adaptive Hz enabled
- Measurement: Battery usage over a full day
Note: Results may vary depending on usage patterns and device behavior.
- Depends on OEM allowing secure setting writes
- Some ROMs may override refresh policies
- User force-stop disables background switching until reopened
- Accessibility service must remain enabled
- Samsung Galaxy A52 (Android 14 / OneUI 6)
- Redmi Note 14 Pro 5G (HyperOS 3.x – community tested)
More devices welcome.
| Brand | Device | Android | ROM | Status |
|---|---|---|---|---|
| Samsung | Galaxy A52 | 14 | OneUI 6 | ✅ Stable |
| Xiaomi | Redmi Note 14 Pro 5G | - | HyperOS 3.x |
More devices are welcome via issues or PRs.
Yes. Adaptive Hz only changes system refresh rate settings. It does not modify hardware behavior.
No. It works using standard Android permissions.
No. The app is completely offline and does not track users.
No — it is designed to reduce battery usage by lowering refresh rate when idle.
Join the discussion and connect with other users:
- Ask questions in Q&A
- Share device compatibility results
- Suggest new features and improvements
- Discuss ROM-specific behavior
👉 Visit Discussions: https://github.com/mahmutaunal/Adaptive-Hz/discussions
Contributions, feedback, and device reports are welcome.
You can help by:
- Reporting bugs via Issues
- Sharing device compatibility results in Discussions
- Suggesting features in Ideas
- Improving code via Pull Requests
Please include when relevant:
- Device model
- Android version
- ROM / UI
- Supported refresh rates
MIT License
- More vendor support (Pixel, OnePlus)
- Per-app refresh rate profiles
- Advanced tuning settings
- UI/UX improvements
- Public device compatibility dashboard
- Advanced logging / debug mode
Made with care by AlpWare Studio
Inspired by limitations in OEM adaptive refresh rate implementations.




