Support fractional battery percent.

Make upower supports fractional battery percent
(e.g., 0.5% instead of 1%).

Signed-off-by: Rogerio Alves Cardoso <rogerio.cardoso@collabora.com>
This commit is contained in:
Rogerio Alves 2024-07-23 23:54:47 -03:00 committed by Kate Hsuan
parent fda3a0b563
commit 88031e563f
5 changed files with 39 additions and 20 deletions

View file

@ -59,12 +59,12 @@ UsePercentageForPolicy=true
# will be used.
#
# Defaults:
# PercentageLow=20
# PercentageCritical=5
# PercentageAction=2
PercentageLow=20
PercentageCritical=5
PercentageAction=2
# PercentageLow=20.0
# PercentageCritical=5.0
# PercentageAction=2.0
PercentageLow=20.0
PercentageCritical=5.0
PercentageAction=2.0
# When UsePercentageForPolicy is false, the time remaining in seconds at
# which UPower will consider the battery low, critical, or take action for

View file

@ -1483,7 +1483,7 @@ class Tests(dbusmock.DBusTestCase):
config = tempfile.NamedTemporaryFile(delete=False, mode='w')
config.write("[UPower]\n")
config.write("UsePercentageForPolicy=true\n")
config.write("PercentageAction=5\n")
config.write("PercentageAction=5.0\n")
config.write("CriticalPowerAction=Hibernate\n")
config.close()
@ -1525,7 +1525,7 @@ class Tests(dbusmock.DBusTestCase):
config = tempfile.NamedTemporaryFile(delete=False, mode='w')
config.write("[UPower]\n")
config.write("UsePercentageForPolicy=true\n")
config.write("PercentageAction=5\n")
config.write("PercentageAction=5.0\n")
config.write("CriticalPowerAction=Hibernate\n")
config.close()
@ -1856,9 +1856,9 @@ class Tests(dbusmock.DBusTestCase):
config = tempfile.NamedTemporaryFile(delete=False, mode='w')
# Low, Critical and Action are all needed to avoid fallback to defaults
config.write("[UPower]\n")
config.write("PercentageLow=20\n")
config.write("PercentageCritical=3\n")
config.write("PercentageAction=2\n")
config.write("PercentageLow=20.0\n")
config.write("PercentageCritical=3.0\n")
config.write("PercentageAction=2.0\n")
config.close()
self.start_daemon(cfgfile=config.name)

View file

@ -68,6 +68,22 @@ up_config_get_uint (UpConfig *config, const gchar *key)
return val;
}
/**
* up_config_get_double:
**/
gdouble
up_config_get_double (UpConfig *config, const gchar *key)
{
int val;
val = g_key_file_get_double (config->priv->keyfile,
"UPower", key, NULL);
if (val < 0.0)
return 0.0;
return val;
}
/**
* up_config_get_string:
**/

View file

@ -52,6 +52,8 @@ gboolean up_config_get_boolean (UpConfig *config,
const gchar *key);
guint up_config_get_uint (UpConfig *config,
const gchar *key);
gdouble up_config_get_double (UpConfig *config,
const gchar *key);
gchar *up_config_get_string (UpConfig *config,
const gchar *key);

View file

@ -63,9 +63,9 @@ struct UpDaemonPrivate
/* WarningLevel configuration */
gboolean use_percentage_for_policy;
guint low_percentage;
guint critical_percentage;
guint action_percentage;
gdouble low_percentage;
gdouble critical_percentage;
gdouble action_percentage;
guint low_time;
guint critical_time;
guint action_time;
@ -1065,14 +1065,15 @@ up_daemon_device_removed_cb (UpBackend *backend, UpDevice *device, UpDaemon *dae
}
#define LOAD_OR_DEFAULT(val, str, def) val = (load_default ? def : up_config_get_uint (daemon->priv->config, str))
#define LOAD_OR_DEFAULT_DOUBLE(val, str, def) val = (load_default ? def : up_config_get_double (daemon->priv->config, str))
static void
load_percentage_policy (UpDaemon *daemon,
gboolean load_default)
{
LOAD_OR_DEFAULT (daemon->priv->low_percentage, "PercentageLow", 20);
LOAD_OR_DEFAULT (daemon->priv->critical_percentage, "PercentageCritical", 5);
LOAD_OR_DEFAULT (daemon->priv->action_percentage, "PercentageAction", 2);
LOAD_OR_DEFAULT_DOUBLE (daemon->priv->low_percentage, "PercentageLow", 20.0);
LOAD_OR_DEFAULT_DOUBLE (daemon->priv->critical_percentage, "PercentageCritical", 5.0);
LOAD_OR_DEFAULT_DOUBLE (daemon->priv->action_percentage, "PercentageAction", 2.0);
}
static void
@ -1089,9 +1090,9 @@ load_time_policy (UpDaemon *daemon,
static void
policy_config_validate (UpDaemon *daemon)
{
if (daemon->priv->low_percentage >= 100 ||
daemon->priv->critical_percentage >= 100 ||
daemon->priv->action_percentage >= 100) {
if (daemon->priv->low_percentage >= 100.0 ||
daemon->priv->critical_percentage >= 100.0 ||
daemon->priv->action_percentage >= 100.0) {
load_percentage_policy (daemon, TRUE);
} else if (!IS_DESCENDING (daemon->priv->low_percentage,
daemon->priv->critical_percentage,