mirror of
https://github.com/ppy/osu.git
synced 2024-12-14 04:52:57 +08:00
Add battery info for desktop platforms
This commit is contained in:
parent
43e612f6d4
commit
38a8b9cf0a
@ -106,9 +106,9 @@ namespace osu.Android
|
|||||||
|
|
||||||
private class AndroidBatteryInfo : BatteryInfo
|
private class AndroidBatteryInfo : BatteryInfo
|
||||||
{
|
{
|
||||||
public override double ChargeLevel => Battery.ChargeLevel;
|
public override double? ChargeLevel => Battery.ChargeLevel;
|
||||||
|
|
||||||
public override bool IsCharging => Battery.PowerSource != BatteryPowerSource.Battery;
|
public override bool OnBattery => Battery.PowerSource == BatteryPowerSource.Battery;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,6 +29,8 @@ using osu.Game.IPC;
|
|||||||
using osu.Game.Overlays.Settings;
|
using osu.Game.Overlays.Settings;
|
||||||
using osu.Game.Overlays.Settings.Sections;
|
using osu.Game.Overlays.Settings.Sections;
|
||||||
using osu.Game.Overlays.Settings.Sections.Input;
|
using osu.Game.Overlays.Settings.Sections.Input;
|
||||||
|
using osu.Game.Utils;
|
||||||
|
using SDL2;
|
||||||
|
|
||||||
namespace osu.Desktop
|
namespace osu.Desktop
|
||||||
{
|
{
|
||||||
@ -166,6 +168,8 @@ namespace osu.Desktop
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override BatteryInfo CreateBatteryInfo() => new SDL2BatteryInfo();
|
||||||
|
|
||||||
private readonly List<string> importableFiles = new List<string>();
|
private readonly List<string> importableFiles = new List<string>();
|
||||||
private ScheduledDelegate? importSchedule;
|
private ScheduledDelegate? importSchedule;
|
||||||
|
|
||||||
@ -206,5 +210,23 @@ namespace osu.Desktop
|
|||||||
base.Dispose(isDisposing);
|
base.Dispose(isDisposing);
|
||||||
osuSchemeLinkIPCChannel?.Dispose();
|
osuSchemeLinkIPCChannel?.Dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class SDL2BatteryInfo : BatteryInfo
|
||||||
|
{
|
||||||
|
public override double? ChargeLevel
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
SDL.SDL_GetPowerInfo(out _, out int percentage);
|
||||||
|
|
||||||
|
if (percentage == -1)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
return percentage / 100.0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool OnBattery => SDL.SDL_GetPowerInfo(out _, out _) == SDL.SDL_PowerState.SDL_POWERSTATE_ON_BATTERY;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -308,17 +308,18 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[TestCase(false, 1.0, false)] // not charging, above cutoff --> no warning
|
[TestCase(true, 1.0, false)] // on battery, above cutoff --> no warning
|
||||||
[TestCase(true, 0.1, false)] // charging, below cutoff --> no warning
|
[TestCase(false, 0.1, false)] // not on battery, below cutoff --> no warning
|
||||||
[TestCase(false, 0.25, true)] // not charging, at cutoff --> warning
|
[TestCase(true, 0.25, true)] // on battery, at cutoff --> warning
|
||||||
public void TestLowBatteryNotification(bool isCharging, double chargeLevel, bool shouldWarn)
|
[TestCase(true, null, false)] // on battery, level unknown --> no warning
|
||||||
|
public void TestLowBatteryNotification(bool onBattery, double? chargeLevel, bool shouldWarn)
|
||||||
{
|
{
|
||||||
AddStep("reset notification lock", () => sessionStatics.GetBindable<bool>(Static.LowBatteryNotificationShownOnce).Value = false);
|
AddStep("reset notification lock", () => sessionStatics.GetBindable<bool>(Static.LowBatteryNotificationShownOnce).Value = false);
|
||||||
|
|
||||||
// set charge status and level
|
// set charge status and level
|
||||||
AddStep("load player", () => resetPlayer(false, () =>
|
AddStep("load player", () => resetPlayer(false, () =>
|
||||||
{
|
{
|
||||||
batteryInfo.SetCharging(isCharging);
|
batteryInfo.SetOnBattery(onBattery);
|
||||||
batteryInfo.SetChargeLevel(chargeLevel);
|
batteryInfo.SetChargeLevel(chargeLevel);
|
||||||
}));
|
}));
|
||||||
AddUntilStep("wait for player", () => player?.LoadState == LoadState.Ready);
|
AddUntilStep("wait for player", () => player?.LoadState == LoadState.Ready);
|
||||||
@ -408,19 +409,19 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
private class LocalBatteryInfo : BatteryInfo
|
private class LocalBatteryInfo : BatteryInfo
|
||||||
{
|
{
|
||||||
private bool isCharging = true;
|
private bool onBattery;
|
||||||
private double chargeLevel = 1;
|
private double? chargeLevel;
|
||||||
|
|
||||||
public override bool IsCharging => isCharging;
|
public override bool OnBattery => onBattery;
|
||||||
|
|
||||||
public override double ChargeLevel => chargeLevel;
|
public override double? ChargeLevel => chargeLevel;
|
||||||
|
|
||||||
public void SetCharging(bool value)
|
public void SetOnBattery(bool value)
|
||||||
{
|
{
|
||||||
isCharging = value;
|
onBattery = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetChargeLevel(double value)
|
public void SetChargeLevel(double? value)
|
||||||
{
|
{
|
||||||
chargeLevel = value;
|
chargeLevel = value;
|
||||||
}
|
}
|
||||||
|
@ -549,6 +549,8 @@ namespace osu.Game.Screens.Play
|
|||||||
|
|
||||||
#region Low battery warning
|
#region Low battery warning
|
||||||
|
|
||||||
|
private const double low_battery_threshold = 0.25;
|
||||||
|
|
||||||
private Bindable<bool> batteryWarningShownOnce = null!;
|
private Bindable<bool> batteryWarningShownOnce = null!;
|
||||||
|
|
||||||
private void showBatteryWarningIfNeeded()
|
private void showBatteryWarningIfNeeded()
|
||||||
@ -557,7 +559,7 @@ namespace osu.Game.Screens.Play
|
|||||||
|
|
||||||
if (!batteryWarningShownOnce.Value)
|
if (!batteryWarningShownOnce.Value)
|
||||||
{
|
{
|
||||||
if (!batteryInfo.IsCharging && batteryInfo.ChargeLevel <= 0.25)
|
if (batteryInfo.OnBattery && batteryInfo.ChargeLevel <= low_battery_threshold)
|
||||||
{
|
{
|
||||||
notificationOverlay?.Post(new BatteryWarningNotification());
|
notificationOverlay?.Post(new BatteryWarningNotification());
|
||||||
batteryWarningShownOnce.Value = true;
|
batteryWarningShownOnce.Value = true;
|
||||||
|
@ -9,10 +9,16 @@ namespace osu.Game.Utils
|
|||||||
public abstract class BatteryInfo
|
public abstract class BatteryInfo
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The charge level of the battery, from 0 to 1.
|
/// The charge level of the battery, from <c>0</c> to <c>1</c>, or <c>null</c> if a battery isn't present.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public abstract double ChargeLevel { get; }
|
public abstract double? ChargeLevel { get; }
|
||||||
|
|
||||||
public abstract bool IsCharging { get; }
|
/// <summary>
|
||||||
|
/// Whether the current power source is the battery.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// This is <c>false</c> when the device is charging or doesn't have a battery.
|
||||||
|
/// </remarks>
|
||||||
|
public abstract bool OnBattery { get; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -43,9 +43,9 @@ namespace osu.iOS
|
|||||||
|
|
||||||
private class IOSBatteryInfo : BatteryInfo
|
private class IOSBatteryInfo : BatteryInfo
|
||||||
{
|
{
|
||||||
public override double ChargeLevel => Battery.ChargeLevel;
|
public override double? ChargeLevel => Battery.ChargeLevel;
|
||||||
|
|
||||||
public override bool IsCharging => Battery.PowerSource != BatteryPowerSource.Battery;
|
public override bool OnBattery => Battery.PowerSource == BatteryPowerSource.Battery;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user