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. # will be used.
# #
# Defaults: # Defaults:
# PercentageLow=20 # PercentageLow=20.0
# PercentageCritical=5 # PercentageCritical=5.0
# PercentageAction=2 # PercentageAction=2.0
PercentageLow=20 PercentageLow=20.0
PercentageCritical=5 PercentageCritical=5.0
PercentageAction=2 PercentageAction=2.0
# When UsePercentageForPolicy is false, the time remaining in seconds at # When UsePercentageForPolicy is false, the time remaining in seconds at
# which UPower will consider the battery low, critical, or take action for # 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 = tempfile.NamedTemporaryFile(delete=False, mode='w')
config.write("[UPower]\n") config.write("[UPower]\n")
config.write("UsePercentageForPolicy=true\n") config.write("UsePercentageForPolicy=true\n")
config.write("PercentageAction=5\n") config.write("PercentageAction=5.0\n")
config.write("CriticalPowerAction=Hibernate\n") config.write("CriticalPowerAction=Hibernate\n")
config.close() config.close()
@ -1525,7 +1525,7 @@ class Tests(dbusmock.DBusTestCase):
config = tempfile.NamedTemporaryFile(delete=False, mode='w') config = tempfile.NamedTemporaryFile(delete=False, mode='w')
config.write("[UPower]\n") config.write("[UPower]\n")
config.write("UsePercentageForPolicy=true\n") config.write("UsePercentageForPolicy=true\n")
config.write("PercentageAction=5\n") config.write("PercentageAction=5.0\n")
config.write("CriticalPowerAction=Hibernate\n") config.write("CriticalPowerAction=Hibernate\n")
config.close() config.close()
@ -1856,9 +1856,9 @@ class Tests(dbusmock.DBusTestCase):
config = tempfile.NamedTemporaryFile(delete=False, mode='w') config = tempfile.NamedTemporaryFile(delete=False, mode='w')
# Low, Critical and Action are all needed to avoid fallback to defaults # Low, Critical and Action are all needed to avoid fallback to defaults
config.write("[UPower]\n") config.write("[UPower]\n")
config.write("PercentageLow=20\n") config.write("PercentageLow=20.0\n")
config.write("PercentageCritical=3\n") config.write("PercentageCritical=3.0\n")
config.write("PercentageAction=2\n") config.write("PercentageAction=2.0\n")
config.close() config.close()
self.start_daemon(cfgfile=config.name) self.start_daemon(cfgfile=config.name)

View file

@ -68,6 +68,22 @@ up_config_get_uint (UpConfig *config, const gchar *key)
return val; 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: * up_config_get_string:
**/ **/

View file

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

View file

@ -63,9 +63,9 @@ struct UpDaemonPrivate
/* WarningLevel configuration */ /* WarningLevel configuration */
gboolean use_percentage_for_policy; gboolean use_percentage_for_policy;
guint low_percentage; gdouble low_percentage;
guint critical_percentage; gdouble critical_percentage;
guint action_percentage; gdouble action_percentage;
guint low_time; guint low_time;
guint critical_time; guint critical_time;
guint action_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(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 static void
load_percentage_policy (UpDaemon *daemon, load_percentage_policy (UpDaemon *daemon,
gboolean load_default) gboolean load_default)
{ {
LOAD_OR_DEFAULT (daemon->priv->low_percentage, "PercentageLow", 20); LOAD_OR_DEFAULT_DOUBLE (daemon->priv->low_percentage, "PercentageLow", 20.0);
LOAD_OR_DEFAULT (daemon->priv->critical_percentage, "PercentageCritical", 5); LOAD_OR_DEFAULT_DOUBLE (daemon->priv->critical_percentage, "PercentageCritical", 5.0);
LOAD_OR_DEFAULT (daemon->priv->action_percentage, "PercentageAction", 2); LOAD_OR_DEFAULT_DOUBLE (daemon->priv->action_percentage, "PercentageAction", 2.0);
} }
static void static void
@ -1089,9 +1090,9 @@ load_time_policy (UpDaemon *daemon,
static void static void
policy_config_validate (UpDaemon *daemon) policy_config_validate (UpDaemon *daemon)
{ {
if (daemon->priv->low_percentage >= 100 || if (daemon->priv->low_percentage >= 100.0 ||
daemon->priv->critical_percentage >= 100 || daemon->priv->critical_percentage >= 100.0 ||
daemon->priv->action_percentage >= 100) { daemon->priv->action_percentage >= 100.0) {
load_percentage_policy (daemon, TRUE); load_percentage_policy (daemon, TRUE);
} else if (!IS_DESCENDING (daemon->priv->low_percentage, } else if (!IS_DESCENDING (daemon->priv->low_percentage,
daemon->priv->critical_percentage, daemon->priv->critical_percentage,