Members of the KDE Community are recommended to subscribe to the kde-community mailing list at https://mail.kde.org/mailman/listinfo/kde-community to allow them to participate in important discussions and receive other important announcements

Commit 6182d26d authored by Johan Ouwerkerk's avatar Johan Ouwerkerk

Fix Android flood fill effect when pressing an account entry.

Turns out that SwipeListItem (and derivatives) absolutely must have an `id` value of `listItem`.
With this change the account list entries now display a proper flood fill effect when pressed on Android.
parent 07108d9b
......@@ -12,13 +12,18 @@ import Keysmith.Application 1.0
import Keysmith.Models 1.0 as Models
Kirigami.SwipeListItem {
id: root
/*
* WARNING: AccountEntryViewBase is a derivative of SwipeListItem and SwipeListem instances *must* be
* called `listItem`. This took *way* too long to figure out. If you change it, things will break for example the
* flood fill effect when pressing a list entry on Android.
*/
id: listItem
signal actionTriggered
property Models.Account account: null
property bool alive: account !== null
property bool tokenAvailable: alive && account.token && account.token.length > 0
property color labelColor: root.pressed || root.checked ? root.activeTextColor : root.textColor
property color labelColor: listItem.pressed || listItem.checked ? listItem.activeTextColor : listItem.textColor
visible: alive
enabled: alive
......
......@@ -6,33 +6,37 @@
import org.kde.kirigami 2.4 as Kirigami
AccountEntryViewBase {
id: root
/*
* WARNING: AccountEntryViewBase is a derivative of SwipeListItem and SwipeListem instances *must* be
* called `listItem`. This took *way* too long to figure out. If you change it, things will break for example the
* flood fill effect when pressing a list entry on Android.
*/
id: listItem
actions: [
Kirigami.Action {
iconName: "edit-delete"
text: i18nc("Button for removal of a single account", "Delete account")
enabled: root.alive
enabled: listItem.alive
onTriggered: {
root.actionTriggered();
root.sheet.open();
listItem.actionTriggered();
listItem.sheet.open();
}
},
Kirigami.Action {
iconName: "go-next" // "view-refresh"
text: "Next token"
enabled: root.alive
enabled: listItem.alive
onTriggered: {
root.actionTriggered();
root.account.advanceCounter(1);
listItem.actionTriggered();
listItem.account.advanceCounter(1);
}
}
]
TokenEntryViewLabels {
id: mainLayout
accountName: account.name
tokenValue: account.token
labelColor: root.labelColor
labelColor: listItem.labelColor
}
}
......@@ -7,19 +7,24 @@ import QtQuick 2.1
import org.kde.kirigami 2.4 as Kirigami
AccountEntryViewBase {
id: root
/*
* WARNING: AccountEntryViewBase is a derivative of SwipeListItem and SwipeListem instances *must* be
* called `listItem`. This took *way* too long to figure out. If you change it, things will break for example the
* flood fill effect when pressing a list entry on Android.
*/
id: listItem
property real healthIndicator: 0
property real interval: root.alive ? 1000 * root.account.timeStep : 0
property real interval: listItem.alive ? 1000 * listItem.account.timeStep : 0
actions: [
Kirigami.Action {
iconName: "edit-delete"
text: i18nc("Button for removal of a single account", "Delete account")
enabled: root.alive
enabled: listItem.alive
onTriggered: {
root.actionTriggered();
root.sheet.open();
listItem.actionTriggered();
listItem.sheet.open();
}
}
]
......@@ -31,15 +36,15 @@ AccountEntryViewBase {
*/
property bool shouldBeActive: Qt.application.state === Qt.ApplicationActive
onShouldBeActiveChanged: {
if (root.alive && root.shouldBeActive) {
if (listItem.alive && listItem.shouldBeActive) {
timer.stop()
timeoutIndicatorAnimation.stop();
root.account.recompute();
listItem.account.recompute();
var phase = root.account.millisecondsLeftForToken();
var phase = listItem.account.millisecondsLeftForToken();
timer.interval = phase;
root.healthIndicator = phase;
listItem.healthIndicator = phase;
timeoutIndicatorAnimation.duration = phase;
timeoutIndicatorAnimation.from = phase;
......@@ -52,7 +57,7 @@ AccountEntryViewBase {
id: mainLayout
accountName: account.name
tokenValue: account.token
labelColor: root.labelColor
labelColor: listItem.labelColor
/*
* For some reason the running NumberAnimation seems to trigger very sluggish QML UI when the window is resized.
......@@ -74,9 +79,9 @@ AccountEntryViewBase {
onWidthChanged: {
if (timeoutIndicatorAnimation.running) {
timeoutIndicatorAnimation.stop();
var phase = root.account.millisecondsLeftForToken();
var phase = listItem.account.millisecondsLeftForToken();
root.healthIndicator = phase;
listItem.healthIndicator = phase;
timeoutIndicatorAnimation.from = phase;
timeoutIndicatorAnimation.duration = phase;
timeoutIndicatorAnimation.restart();
......@@ -85,36 +90,36 @@ AccountEntryViewBase {
Rectangle {
id: health
x: - root.leftPadding
y: root.height - health.height - root.bottomPadding
x: - listItem.leftPadding
y: listItem.height - health.height - listItem.bottomPadding
radius: health.height
height: Kirigami.Units.smallSpacing
opacity: timeoutIndicatorAnimation.running ? 0.6 : 0
width: root.alive && root.interval > 0 ? root.width * root.healthIndicator / root.interval : 0
width: listItem.alive && listItem.interval > 0 ? listItem.width * listItem.healthIndicator / listItem.interval : 0
color: Kirigami.Theme.positiveTextColor
NumberAnimation {
id: timeoutIndicatorAnimation
target: root
target: listItem
property: "healthIndicator"
from: timer.interval
to: 0
duration: timer.interval
running: root.alive
running: listItem.alive
}
Timer {
id: timer
running: root.alive
interval: root.alive ? root.account.millisecondsLeftForToken() : 0
running: listItem.alive
interval: listItem.alive ? listItem.account.millisecondsLeftForToken() : 0
onTriggered: {
if (root.alive) {
if (listItem.alive) {
timer.stop()
timeoutIndicatorAnimation.stop();
root.account.recompute();
listItem.account.recompute();
var phase = root.account.millisecondsLeftForToken();
var phase = listItem.account.millisecondsLeftForToken();
timer.interval = phase;
root.healthIndicator = phase;
listItem.healthIndicator = phase;
timeoutIndicatorAnimation.duration = phase;
timeoutIndicatorAnimation.from = phase;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment