PowerStatus: Implement battery low/critical notifications.
It shows a notification once the "low percentage" is reached (currently at 15 percent) and once when the battery is about to die. This logic should probably be revised to be based on remaining time instead. The notification icons are simple variations of the PowerStatus icon.
This commit is contained in:
Binary file not shown.
Binary file not shown.
@@ -13,7 +13,7 @@ Application PowerStatus :
|
||||
PowerStatusWindow.cpp
|
||||
PowerStatusView.cpp
|
||||
PowerStatus.cpp
|
||||
: be libshared.a [ TargetLibsupc++ ] localestub
|
||||
: be translation libshared.a [ TargetLibsupc++ ] localestub
|
||||
: PowerStatus.rdef
|
||||
;
|
||||
DoCatalogs PowerStatus :
|
||||
|
||||
@@ -46,3 +46,50 @@ resource vector_icon {
|
||||
$"4C0A04010700"
|
||||
};
|
||||
|
||||
|
||||
resource(200, "battery_low") #'VICN' array {
|
||||
$"6E6369660903000100010001007102001604BC00000000000000003C00004940"
|
||||
$"004B000000FF2BA1D2FFFF8202000604BC00000000000000003C00004940004B"
|
||||
$"000000FF84002BC36705D2FF8400FFC36603020016023A9D433BA9A6BCD9483C"
|
||||
$"088A4A42A9428A8A00FFFFCC020116023D00000000000000003D000049400048"
|
||||
$"0000FF010066020016033A00000000000000003A000049400047000000993FCC"
|
||||
$"FF8602001602374FE739A41DBBA41D394FE74A0A044485FD00F3FFC202001602"
|
||||
$"383B6C3951BCBB51BC3A3B6C4A6680441BB500FFFF9E0802062A462A46B6FEC4"
|
||||
$"563A50B9D450C0DF504A46C3B9C4564A464A2E4A2E4AB6603A24C0E124B9D624"
|
||||
$"2A2E2AB6602A2E02062A462A46B6FEC4563A50B9D450C0DF504A46C3B9C4564A"
|
||||
$"464A2E4A2E4ABAC73A38C0E138B9D6382A2E2ABAC72A2E0206C3B9C222C3B9C2"
|
||||
$"224AC4553A50C0DF50B9D4502AC222B6F9C4552AC2222A522A52B6FEC98F3A5E"
|
||||
$"B9D45EC0DF5E4A52C3B9C98F4A5202042A2E2ABAC72AB6603A24B9D624C0E124"
|
||||
$"4A2E4AB6604ABAC73A38C0E138B9D6380204482E48B6D148BA563A36C07036BA"
|
||||
$"47362C2E2CBA562CB6D13A26BA4726C0702602063228322832B54E3A24BB9924"
|
||||
$"BF1E24422842B54E4228422C422C42B8A93A30BF1E30BB9930322C32B8A9322C"
|
||||
$"0204322832B71132B54E3A24BB9924BF1E24422842B54E42B7113A2CBF1E2CBB"
|
||||
$"992C0605E3035048C8C34850484C3A6050605060C8C3605C545CCA5B5CC5140A"
|
||||
$"0A010107000A000200021001178422040A020101000A030102000A040103000A"
|
||||
$"050104000A0001051001178422040A060105000A080106000A070106023ECDCB"
|
||||
$"0000000000003E554745C57F43294C"
|
||||
};
|
||||
|
||||
|
||||
resource(201, "battery_critical") #'VICN' array {
|
||||
$"6E6369660903000100010001007102001604BC00000000000000003C00004940"
|
||||
$"004B000000FF2BA1D2FFFF8202000604BC00000000000000003C00004940004B"
|
||||
$"000000FF00002BA00404D2FF0606FF820303020016023A9D433BA9A6BCD9483C"
|
||||
$"088A4A42A9428A8A00FFFFCC020116023D00000000000000003D000049400048"
|
||||
$"0000FF010066020016033A00000000000000003A000049400047000000993FCC"
|
||||
$"FF8602001602374FE739A41DBBA41D394FE74A0A044485FD00F3FFC202001602"
|
||||
$"383B6C3951BCBB51BC3A3B6C4A6680441BB500FFFF9E0802062A462A46B6FEC4"
|
||||
$"563A50B9D450C0DF504A46C3B9C4564A464A2E4A2E4AB6603A24C0E124B9D624"
|
||||
$"2A2E2AB6602A2E02062A4D2A4DB6FEC7203A59B9D459C0DF594A4DC3B9C7204A"
|
||||
$"4D4A2E4A2E4ABAC73A38C0E138B9D6382A2E2ABAC72A2E02064A4D4A4DC3BEC7"
|
||||
$"203A59C0DF59B9D4592A4DB6F9C7202A4D2A522A52B6FEC98F3A5EB9D45EC0DF"
|
||||
$"5E4A52C3B9C98F4A5202042A2E2ABAC72AB6603A24B9D624C0E1244A2E4AB660"
|
||||
$"4ABAC73A38C0E138B9D6380204482E48B6D148BA563A36C07036BA47362C2E2C"
|
||||
$"BA562CB6D13A26BA4726C0702602063228322832B54E3A24BB9924BF1E244228"
|
||||
$"42B54E4228422C422C42B8A93A30BF1E30BB9930322C32B8A9322C0204322832"
|
||||
$"B71132B54E3A24BB9924BF1E24422842B54E42B7113A2CBF1E2CBB992C0605E3"
|
||||
$"035048C8C34850484C3A6050605060C8C3605C545CCA5B5CC5140A0A01010700"
|
||||
$"0A00030200011001178422040A020101000A030102000A040103000A05010400"
|
||||
$"0A0001051001178422040A060105000A080106000A070106023ECDCB00000000"
|
||||
$"00003E554745C57F43294C"
|
||||
};
|
||||
|
||||
@@ -18,8 +18,10 @@
|
||||
|
||||
#include <AboutWindow.h>
|
||||
#include <Application.h>
|
||||
#include <Bitmap.h>
|
||||
#include <Catalog.h>
|
||||
#include <ControlLook.h>
|
||||
#include <DataIO.h>
|
||||
#include <Deskbar.h>
|
||||
#include <Dragger.h>
|
||||
#include <Drivers.h>
|
||||
@@ -27,9 +29,12 @@
|
||||
#include <FindDirectory.h>
|
||||
#include <MenuItem.h>
|
||||
#include <MessageRunner.h>
|
||||
#include <Notification.h>
|
||||
#include <Path.h>
|
||||
#include <PopUpMenu.h>
|
||||
#include <Resources.h>
|
||||
#include <TextView.h>
|
||||
#include <TranslationUtils.h>
|
||||
|
||||
#include "ACPIDriverInterface.h"
|
||||
#include "APMDriverInterface.h"
|
||||
@@ -52,6 +57,8 @@ const uint32 kMsgToggleExtInfo = 'texi';
|
||||
const uint32 kMinIconWidth = 16;
|
||||
const uint32 kMinIconHeight = 16;
|
||||
|
||||
const int32 kLowBatteryPercentage = 15;
|
||||
|
||||
|
||||
PowerStatusView::PowerStatusView(PowerStatusDriverInterface* interface,
|
||||
BRect frame, int32 resizingMode, int batteryID, bool inDeskbar)
|
||||
@@ -196,7 +203,7 @@ PowerStatusView::_DrawBattery(BRect rect)
|
||||
}
|
||||
|
||||
if (fHasBattery) {
|
||||
if (percent <= 15)
|
||||
if (percent <= kLowBatteryPercentage)
|
||||
base.set_to(180, 0, 0);
|
||||
else
|
||||
base.set_to(20, 180, 0);
|
||||
@@ -328,6 +335,7 @@ PowerStatusView::Update(bool force)
|
||||
int32 previousPercent = fPercent;
|
||||
time_t previousTimeLeft = fTimeLeft;
|
||||
bool wasOnline = fOnline;
|
||||
bool hadBattery = fHasBattery;
|
||||
|
||||
_GetBatteryInfo(&fBatteryInfo, fBatteryID);
|
||||
|
||||
@@ -343,7 +351,6 @@ PowerStatusView::Update(bool force)
|
||||
fTimeLeft = -1;
|
||||
}
|
||||
|
||||
|
||||
if (fInDeskbar) {
|
||||
// make sure the tray icon is large enough
|
||||
float width = fShowStatusIcon ? kMinIconWidth + 2 : 0;
|
||||
@@ -396,8 +403,46 @@ PowerStatusView::Update(bool force)
|
||||
|
||||
if (force || wasOnline != fOnline
|
||||
|| (fShowTime && fTimeLeft != previousTimeLeft)
|
||||
|| (!fShowTime && fPercent != previousPercent))
|
||||
|| (!fShowTime && fPercent != previousPercent)) {
|
||||
Invalidate();
|
||||
}
|
||||
|
||||
if ((hadBattery && !fHasBattery)
|
||||
|| (previousPercent > kLowBatteryPercentage
|
||||
&& fPercent <= kLowBatteryPercentage)) {
|
||||
|
||||
BBitmap* bitmap = NULL;
|
||||
BResources resources;
|
||||
resources.SetToImage((void*)&instantiate_deskbar_item);
|
||||
if (resources.InitCheck() == B_OK) {
|
||||
size_t resourceSize = 0;
|
||||
const void* resourceData = resources.LoadResource(
|
||||
B_VECTOR_ICON_TYPE, fHasBattery
|
||||
? "battery_low" : "battery_critical", &resourceSize);
|
||||
if (resourceData != NULL) {
|
||||
BMemoryIO memoryIO(resourceData, resourceSize);
|
||||
bitmap = BTranslationUtils::GetBitmap(&memoryIO);
|
||||
}
|
||||
}
|
||||
|
||||
BNotification notification(fHasBattery ? B_INFORMATION_NOTIFICATION
|
||||
: B_ERROR_NOTIFICATION);
|
||||
|
||||
if (fHasBattery) {
|
||||
notification.SetTitle(B_TRANSLATE("Battery low"));
|
||||
notification.SetContent(B_TRANSLATE(
|
||||
"The battery level is getting low, please plug the device in."));
|
||||
} else {
|
||||
notification.SetTitle(B_TRANSLATE("Battery critical"));
|
||||
notification.SetContent(B_TRANSLATE(
|
||||
"The battery level is critical, please plug the device in"
|
||||
" immediately."));
|
||||
}
|
||||
|
||||
notification.SetIcon(bitmap);
|
||||
notification.Send();
|
||||
delete bitmap;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user