-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(android): Filter Device To Force High Frame Rate (#880)
* fix(android): filter device to force HFR * fix(android): add failsafe in setHighRefreshRate
- Loading branch information
Showing
2 changed files
with
42 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
import 'package:flutter_displaymode/flutter_displaymode.dart'; | ||
|
||
abstract class AndroidUtils { | ||
|
||
/// Sets the device's display to the highest refresh rate available. | ||
/// | ||
/// This method retrieves the list of supported display modes and the currently active display mode. | ||
/// It then selects the display mode with the highest refresh rate that matches the current resolution. | ||
/// The selected display mode is set as the preferred mode using the FlutterDisplayMode plugin. | ||
/// After setting the new mode, it checks if the system is using the new mode. | ||
/// If the system is not using the new mode, it reverts back to the original mode and returns false. | ||
/// Otherwise, it returns true to indicate that the high refresh rate has been successfully set. | ||
/// | ||
/// Returns true if the high refresh rate is set successfully, false otherwise. | ||
static Future<bool> setHighRefreshRate() async { | ||
final List<DisplayMode> modes = await FlutterDisplayMode.supported; | ||
final DisplayMode activeMode = await FlutterDisplayMode.active; | ||
|
||
DisplayMode newMode = activeMode; | ||
for (final DisplayMode mode in modes) { | ||
if (mode.height == newMode.height && | ||
mode.width == newMode.width && | ||
mode.refreshRate > newMode.refreshRate) { | ||
newMode = mode; | ||
} | ||
} | ||
|
||
await FlutterDisplayMode.setPreferredMode(newMode); | ||
|
||
final display = await FlutterDisplayMode.active; // possibly altered by system | ||
|
||
if (display.refreshRate < newMode.refreshRate) { | ||
await FlutterDisplayMode.setPreferredMode(display); | ||
return false; | ||
} | ||
|
||
return true; | ||
} | ||
} |