Volla Phone (GS290) / 4.5.0.24 - Freezing Touchscreen

Have updated the Volla (old Volla, GS290) from 4.4.0.72 to 4.5.0.21 using sfos.upgrade / reboot / post_sfos-upgrade, used it a few days (worked fine) and then I dared to update to 4.5.0.24, again using sfos.upgrade / reboot / post_sfos-upgrade.

Since the last update a freezing touchscreen problem occurs very frequently. If this happens, I have to push pwr button, push pwr button again and attach finger on FP-sensor. Mostly it works then for a longer time (until it freezes the next time). Everything else works fine from user’s sight.

Also I tweaked around a little with this file:
vi /usr/share/lipstick-jolla-home-qt5/lockscreen/EdgeIndicator.qml
initially to remove annoying arrows when unlocking device, but then I saw that there are some timings and delays that affect the reaction speed of keyboard when typing and also the frequency of occurance of ‘freezing touchscreen’.

Q’s:
Is there a chance to ‘try harder’ to find the real reason for the freezing touchscreen occurance?
Was it generally a mistake to upgrade from 4.5.0.21 to 4.5.0.24, should I better have refrained from doing so?

This is what I’ve done to the /usr/share/lipstick-jolla-home-qt5/lockscreen/EdgeIndicator.qml file:

  1. commented out the arrow image source,
  2. tweaked around in the ‘transition’ duration and velocity values at the end of the file.

Q: Did I unknowingly break something or set inadmissible values?
This is the modified file:

import QtQuick 2.0
import Sailfish.Silica 1.0
import org.nemomobile.lipstick 0.1

Image {
    id: indicator

    property bool active
    property bool peeking
    property real peekProgress
    property bool hinting: false
    property real offset: -width
    property real threshold: Theme.itemSizeLarge / 2
    property bool locked
    property bool fadeoutWhenHiding

    property real _peekProgressScale: 0.4
    property real _initialIconPos

    function reset() {
        state = "hidden"
        hinting = false
    }

    state: "hidden"

//    source: "image://theme/graphics-edge-swipe-arrow"
    rotation: 90
    width: sourceSize.width
    height: sourceSize.height
    enabled: peeking || hinting

    onPeekingChanged: {
        if (peeking) {
            hinting = false
        }
    }

    states: [
        State {
            name: "peeking"
            when: indicator.peeking
            StateChangeScript {
                script: {
                    _initialIconPos = indicator.offset
                }
            }
            PropertyChanges {
                target: indicator
                offset: {
                    if (_initialIconPos < 0) {
                        // accelerate icon movement from offscreen
                        var peekedRatio = (indicator.peekProgress * indicator._peekProgressScale) / (lockScreen.peekFilter.threshold * indicator._peekProgressScale)
                        var iconPosChange = indicator.width * peekedRatio
                        return (peekProgress * _peekProgressScale) + _initialIconPos + iconPosChange
                    } else {
                        return (peekProgress * _peekProgressScale)
                    }
                }
                opacity: (offset + indicator.width) / (lockScreen.peekFilter.threshold * indicator._peekProgressScale)
            }
        }, State {
            name: "hinting"
            when: indicator.hinting
            PropertyChanges {
                target: indicator
                offset: Screen.sizeCategory <= Screen.Medium ? 0 : indicator.threshold
                opacity: (offset + indicator.width) / indicator.threshold
            }
        }, State {
            name: "triggered"
            when: !indicator.locked && indicator.active
            PropertyChanges {
                target: indicator
                opacity: 0.0
                offset: lockScreen.peekFilter.threshold * 0.8
            }
        }, State {
            name: "fadedOut"
            when: !indicator.hinting && !indicator.peeking && fadeoutWhenHiding
            PropertyChanges {
                target: indicator
                opacity: 0.0
                offset: offset
            }
        }, State {
            name: "hidden"
            extend: "fadedOut"
            when: !indicator.hinting && !indicator.peeking && !fadeoutWhenHiding
            PropertyChanges {
                target: indicator
                offset: -indicator.width
            }
        }
    ]

    transitions: [
        Transition {
            from: "hidden,fadedOut"
            to: "hinting"
            SequentialAnimation {
                alwaysRunToEnd: true
                ParallelAnimation {
                    FadeAnimation {
                        target: indicator
                        duration: 4
                        from: Theme.opacityHigh
                        to: 1.0
                    }

                    SmoothedAnimation {
                        target: indicator
                        properties: "offset"
                        duration: 35
                        velocity: 50
                    }
                }
                PauseAnimation { duration: 100 }
                ScriptAction {
                    script: {
                        indicator.hinting = false
                    }
                }
            }
        }, Transition {
            from: "peeking"
            to: "triggered"
            SequentialAnimation {
                SmoothedAnimation {
                    target: indicator
                    properties: "offset"
                    duration: 20
                    velocity: 3
                }
                FadeAnimation {
                    target: indicator
                    duration: 20
                }
                ScriptAction { script: indicator.reset(true) }
            }
        }, Transition {
            from: "peeking,hinting"
            to: "hidden"
            SequentialAnimation {
                SmoothedAnimation {
                    target: indicator
                    properties: "offset"
                    duration: 20
                    velocity: 3
                }
                PropertyAction { target: indicator; property: "opacity" }
                ScriptAction { script: indicator.reset(true) }
            }
        }, Transition {
            from: "peeking,hinting"
            to: "fadedOut"
            SequentialAnimation {
                FadeAnimation {
                    target: indicator
                    duration: 20
                }
                ScriptAction { script: indicator.reset(true) }
            }
        }
    ]
}

Thanks for any help!

With more luck than knowledge i succeeded to downgrade from 4.5.0.24 to 4.5.0.21 using

ssu re 4.5.0.21
ssu ur
zypper ref
zypper dup
reboot

After this, the freezing screen was not gone immediately, but after a while it healed itself and works now.

Conclusion: DO NOT try to update a Volla from @piggz 's wonderful 4.5.0.21 port to 4.5.0.24 by CLI !!!

1 Like

I have to admit, I didn’t even dare do the 4.5 upgrade. I’m just thinking aloud, so, note to self: but:

  1. test the EGL/opengl bugs on GS290 (4.4) (ie. godot engine 3.5.x) vs. GS5 (4.5),
  2. test EGL/opengl bugson GS290 (3.4) vs > 4.

There is something a bit odd about lipstick on the GS5 and the rephone with 4.5 vs. GS290 with 4.4 (smooth as butter).

1 Like

Shall I do some checks on Volla and report here, @poetaster ?

1 Like

I have to prepare some binaries first. It’s been a while since I tried to debug the issue. I’ll make a thread when I’m ready.

1 Like

Revert EdgeIndicator.qml file changes, restore the file to its original state.

As for the EdgeIndicator.qml file modifications, try reverting to the default velocity and duration values to see if the issue improves. If it persists, other factors may be at play.

Since I did the mods, freezing touchscreen occured only one time in 3 days. Before the mods it occured every half an hour, on 4.5.0.21. 4.5.0.24 was completely unusable.

Also the visible delays really suck, without delays is much better UI performance and therefore much better UI experience.

edit: meanwhile I did another few tweaks I found, now testing and if no troubles occur in the next days I’ll publish here. Fact is that the UI is markable faster now on interaction. BTW, all this is on 4.5.0.21 .

Unfortunately, my experience says that modifying software had negative effects, so I recommend you testing essay thoroughly to ensure functionality.

Until now it works fine and faster as before.

I’m a bit confused by Freeze. Do you mean that ‘pause’ that happens which does not happen on the xperia 10iii ? I mean, freeze sounds like lipstick stops responding, but I’m not sure?

I mean that the touchscreen suddenly freezes and doesn’t react on taps or swipes anymore until device is set to standby by pwr button and then again waked up by pwr button / fingerprint.

Ok, that’s what I originally thought. Phew. Got it.

1 Like