PowerDevil/qmlImport
A QML import from PowerDevil/Solid PM should be provided which exposes access to brightness handling, inhibition, AC adapter and various other PM related things.
import org.kde.solid.powermanagement 1.0 Solid.Power { id: powermanagement }
Other things that might be useful but not directly inside the scope of PowerDevil is toggling (or at least querying the state of) Bluetooth, Wireless, Flight Mode.
Screen and keyboard brightness handling
screenBrightnessAvailable (bool, readonly)
Whether the computer has screen brightness controls available, so the battery monitor can not show the brightness slider in this case.
maxScreenBrightness (int, readonly)
The maximum screen brightness value (such as 4200) the device reports
screenBrightness (int)
For getting and setting the desired screen brightness.
There should also be a way to change screen brightness without triggering the OSD, eg. in battery monitor moving the slider you are actively manipulating the brightness (with visual feedback through the slider) hence no need for an OSD. Maybe an invokable setScreenBrightnessSilently(int) or a property screenBrightnessFeedbackEnabled or so. (Same for keyboard brightness)
keyboardBrightnessAvailable (bool, readonly)
Whether the computer has keyboard brightness controls available. The heuristics are way less complicated as there is a standardized upower DBus interface for this. If it is not available, the computer doesn't have keyboard brightness.
maxKeyboardBrightness (int, readonly)
The maximum keyboard brightness value (such as 4 or 10) the device reports. Since keyboard lights are usually less fine-grained a fixed 0-100% (like in 10% steps) is not suitable
keyboardBrightness (int)
For getting and setting the desired keyboard brightness.
Inhibition handling
The way the FDO inhibition interface works is that you call inhibit with your application name and a reason and receive a "cookie" which is used if you want to remove inhibition again. Of course it would be super-cool if we could make this transparent to the user and just allow him to call inhibit(reason) and uninhibit without having to manually deal with the cookie thing.
var cookie = inhibit(application, reason)
Start inhibition. The value returned is needed for removing inhibition again later.
uninhibit(cookie)
Remove inhibition
inhibited (bool, readonly)
If there is currently any inhibition going on system-wide
AC Adapter
pluggedIn(bool, readonly)
If the AC adapter is currently plugged in. This is independent of the chargeState property of a battery.
acAdapterEnergyRate(float, readonly)
This is not directly available through upower but might be used from the energyRate of a battery that is being charged so we could warn the user if the AC adapter is broken (??)
Suspend
suspendToRam()
suspendToRamSupported (bool, readonly)
Whether the device supports suspend to ram (and the app/user is allowed to?)
suspendToDisk()
suspendToDiskSupported
Whether the device supports suspend to disk (and the app/user is allowed to?)
suspendHybrid()
suspendHybridSupported
Whether the device supports hybrid suspend (and the app/user is allowed to?)
Various other stuff
These are other convenience methods that are wildly implemented on the clientside (login manager, battery monitor, etc) and could/should be moved to the library
batteryRemainingTime (qulonglong, readlonly)
The overall battery remaining time for all batteries combined (read: how long will my computer last now?)
batteryCumulativePercent (float, readonly)
The average percentage of all power supply batteries combined
batteryCumulativePresent (bool, readonly)
(Used by the battery monitor and not that useful I guess?) Are all the battery slots available actually taken (there can be empty slots of removable batteries)
batteryCumulativeCharged (bool, readonly)
Are all the batteries available fully charged?
hasLid (bool, readonly)
Whether the computer has a lid (is a notebook), so Kickoff can show the laptop icon for the "Computer" category again ;)