2019-01-06 00:40:22 +03:00
/ * *
* Battery Buddy , a Sailfish application to prolong battery lifetime
*
* Copyright ( C ) 2019 Matti Viljanen
*
* Battery Buddy is free software: you can redistribute it and / or modify it under the terms of the
* GNU General Public License as published by the Free Software Foundation , either version 3 of the
* License , or ( at your option ) any later version .
*
* Battery Buddy is distributed in the hope that it will be useful , but WITHOUT ANY WARRANTY ;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE .
*
* See the GNU General Public License for more details . You should have received a copy of the GNU
* General Public License along with CarBudget . If not , see < http: //www.gnu.org/licenses/>.
*
* Author: Matti Viljanen
* /
2019-01-05 16:49:35 +03:00
import QtQuick 2.0
2019-01-05 23:02:01 +03:00
import QtMultimedia 5.6
2019-01-05 16:49:35 +03:00
import Sailfish . Silica 1.0
2019-01-06 01:28:43 +03:00
import Nemo . Notifications 1.0
2019-01-05 16:49:35 +03:00
Page {
id: page
// The effective value will be restricted by ApplicationWindow.allowedOrientations
allowedOrientations: Orientation . All
2019-01-05 23:02:01 +03:00
MediaPlayer {
id: alertLow
2019-01-06 12:34:04 +03:00
audioRole: MediaPlayer . AlarmRole
volume: 0.5
2019-01-05 23:02:01 +03:00
autoLoad: true
source: settings . lowAlertFile
}
MediaPlayer {
id: alertHigh
2019-01-06 12:34:04 +03:00
audioRole: MediaPlayer . AlarmRole
volume: 0.5
2019-01-05 23:02:01 +03:00
autoLoad: true
source: settings . highAlertFile
}
2019-01-06 01:28:43 +03:00
Notification {
id: notification
2019-01-06 12:34:04 +03:00
property bool test: false
2019-01-06 01:28:43 +03:00
appName: qsTr ( "Battery Buddy" )
appIcon: "/usr/share/icons/hicolor/128x128/apps/harbour-batterybuddy.png"
summary: qsTr ( "Battery charge" , "Battery charge 20%" ) + " " + battery . charge + "%"
2019-01-06 12:34:04 +03:00
body: test ? qsTr ( "This is a test." ) : battery . charging ? qsTr ( "Please disconnect the charger." ) : qsTr ( "Please connect the charger." )
2019-01-06 01:28:43 +03:00
previewSummary: summary
previewBody: body
}
2019-01-05 23:02:01 +03:00
Timer {
interval: 60000
running: true
repeat: true
onTriggered: {
2019-01-06 01:28:43 +03:00
if ( battery . charge <= settings . lowerLimit && battery . charging === false ) {
2019-01-05 23:02:01 +03:00
alertLow . play ( )
2019-01-06 01:28:43 +03:00
notification . publish ( )
}
else if ( battery . charge >= settings . upperLimit && battery . charging === true ) {
2019-01-06 12:31:48 +03:00
alertHigh . play ( )
2019-01-06 01:28:43 +03:00
notification . publish ( )
}
else
notification . close ( )
2019-01-05 23:02:01 +03:00
}
}
2019-01-05 16:49:35 +03:00
// To enable PullDownMenu, place our content in a SilicaFlickable
SilicaFlickable {
anchors.fill: parent
// Tell SilicaFlickable the height of its content.
contentHeight: column . height
2019-01-05 21:16:04 +03:00
PullDownMenu {
MenuItem {
2019-01-06 00:37:44 +03:00
text: qsTr ( "About" )
2019-01-05 21:16:04 +03:00
onClicked: pageStack . push ( Qt . resolvedUrl ( "AboutPage.qml" ) )
}
2019-01-06 00:37:44 +03:00
MenuItem {
text: qsTr ( "More info" )
onClicked: pageStack . push ( Qt . resolvedUrl ( "InfoPage.qml" ) )
}
2019-01-05 21:16:04 +03:00
}
2019-01-05 16:49:35 +03:00
// Place our content in a Column. The PageHeader is always placed at the top
// of the page, followed by our content.
Column {
id: column
width: page . width
spacing: Theme . paddingLarge
PageHeader {
2019-01-05 18:15:32 +03:00
title: qsTr ( "Battery Buddy" )
}
2019-01-06 00:42:57 +03:00
Label {
x: Theme . paddingLarge
text: qsTr ( "Battery status" )
color: Theme . highlightColor
font.pixelSize: Theme . fontSizeMedium
2019-01-05 16:49:35 +03:00
}
2019-01-06 00:42:57 +03:00
Label {
x: Theme . paddingLarge * 2
width: parent . width - x * 2 ;
wrapMode: Text . Wrap
text: qsTr ( "Charge level" ) + " " + battery . charge + "%, " + ( battery . charging ? qsTr ( "charging" ) : qsTr ( "discharging" ) )
color: Theme . primaryColor
font.pixelSize: Theme . fontSizeSmall
}
Label {
x: Theme . paddingLarge
text: qsTr ( "Alert levels" )
color: Theme . highlightColor
font.pixelSize: Theme . fontSizeMedium
}
Label {
x: Theme . paddingLarge * 2
width: parent . width - x * 2 ;
wrapMode: Text . Wrap
text: qsTr ( "Plays an alert sound and display a notification when the battery has been charged above the upper limit or discharged below the lower limit." )
color: Theme . primaryColor
font.pixelSize: Theme . fontSizeSmall
2019-01-05 16:49:35 +03:00
}
2019-01-05 22:58:52 +03:00
Slider {
id: highSlider
width: parent . width
2019-01-06 00:42:57 +03:00
label: qsTr ( "Charging limit" )
2019-01-05 22:58:52 +03:00
minimumValue: 60
maximumValue: 99
stepSize: 1
value: settings . upperLimit
2019-01-06 00:42:57 +03:00
valueText: highSlider . value + "%"
2019-01-05 22:58:52 +03:00
onValueChanged: settings . upperLimit = highSlider . value
}
Slider {
id: lowSlider
width: parent . width
2019-01-06 00:42:57 +03:00
label: qsTr ( "Discharging limit" )
2019-01-05 22:58:52 +03:00
minimumValue: 10
maximumValue: 40
stepSize: 1
value: settings . lowerLimit
2019-01-06 00:42:57 +03:00
valueText: lowSlider . value + "%"
2019-01-05 22:58:52 +03:00
onValueChanged: settings . lowerLimit = lowSlider . value
}
2019-01-06 00:42:57 +03:00
Label {
x: Theme . paddingLarge
text: qsTr ( "Alert tests" )
color: Theme . highlightColor
font.pixelSize: Theme . fontSizeMedium
}
Label {
x: Theme . paddingLarge * 2
width: parent . width - x * 2 ;
wrapMode: Text . Wrap
text: qsTr ( "Click the buttons to test the sound and notification." )
color: Theme . primaryColor
font.pixelSize: Theme . fontSizeSmall
}
Item {
width: parent . width
height: lowButton . height
anchors.left: parent . left
Item {
width: parent . width / 2
height: lowButton . height
Button {
id: lowButton
2019-01-06 12:34:04 +03:00
text: qsTr ( "Discharged" )
2019-01-06 01:28:43 +03:00
onClicked: {
alertLow . play ( )
2019-01-06 12:34:04 +03:00
notification . test = true
2019-01-06 01:28:43 +03:00
notification . publish ( )
2019-01-06 12:34:04 +03:00
notification . test = false
2019-01-06 01:28:43 +03:00
}
2019-01-06 00:42:57 +03:00
anchors.centerIn: parent
}
}
Item {
anchors.right: parent . right
width: parent . width / 2
height: lowButton . height
Button {
2019-01-06 12:34:04 +03:00
text: qsTr ( "Charged" )
2019-01-06 01:28:43 +03:00
onClicked: {
alertHigh . play ( )
2019-01-06 12:34:04 +03:00
notification . test = true
2019-01-06 01:28:43 +03:00
notification . publish ( )
2019-01-06 12:34:04 +03:00
notification . test = false
2019-01-06 01:28:43 +03:00
}
2019-01-06 00:42:57 +03:00
anchors.centerIn: parent
}
}
}
Item {
width: parent . width
height: Theme . paddingLarge
}
2019-01-05 16:49:35 +03:00
}
}
}