[pkg-fso-commits] [SCM] freesmartphone.org demo GUI branch, master, updated. milestone3-4-g71fc58f

Joachim Breitner mail at joachim-breitner.de
Fri Sep 12 15:43:20 UTC 2008


The following commit has been merged in the master branch:
commit 15063e90b1fdaf7cfcf873c73c0090beba3ce3c8
Author: Joachim Breitner <mail at joachim-breitner.de>
Date:   Fri Sep 12 16:49:12 2008 +0200

    Give visual feedback when suspending
    
    This will, in turn, highlight four bars on the screen: “keep pressed”,
    “let go”, “suspending” and “waking up”. They are highlighted when the
    user pushes down POWER, when he has pushed it for one second, when he
    releases it in time and when the phone wakes up.
    
    This also has the effect that keeping it pressed for more than three
    seconds it will _not_ suspend, as to not interfere with a shutdown or
    restart triggered by the Altr-Ctrl-Del sent this way.

diff --git a/src/zhone b/src/zhone
index 5edf029..a4e936d 100755
--- a/src/zhone
+++ b/src/zhone
@@ -1549,6 +1549,32 @@ class pyphone_main_menu( edje_group ):
 
 
 #----------------------------------------------------------------------------#
+class pyphone_suspend( edje_group ):
+#----------------------------------------------------------------------------#
+    def __init__( self, main ):
+        edje_group.__init__( self, main, "suspend" )
+        self.deactivate()
+	self.stage = -1
+
+    def activate( self ):
+	self.stage = -1
+        for id in range( 0, 4 ):
+	    self.signal_emit( "unhighlight_%i" % id, "" )
+        self.signal_emit( "visible", "" )
+
+    def deactivate( self ):
+	self.stage = -1
+        self.signal_emit( "invisible", "" )
+
+    def enter_stage( self, stage ):
+	self.stage = stage
+        for id in range( 0, 4 ):
+	    if id <= self.stage:
+		self.signal_emit( "highlight_%i" % id, "" )
+	    else:
+		self.signal_emit( "unhighlight_%i" % id, "" )
+
+#----------------------------------------------------------------------------#
 class pyphone_lock( edje_group ):
 #----------------------------------------------------------------------------#
     def __init__( self, main ):
@@ -1794,7 +1820,7 @@ class GUI(object):
                 self.groups[page] = ctor( self )
                 self.evas_canvas.evas_obj.data[page] = self.groups[page]
 
-        for overlay in ("main_menu", "menu", "lock", "error" ):
+        for overlay in ("main_menu", "menu", "lock", "error", "suspend"):
             ctor = globals().get( "pyphone_%s" % overlay, None )
             if ctor:
                 self.groups[overlay] = ctor( self )
@@ -1819,6 +1845,7 @@ class GUI(object):
         dbus_object.onReadyStatus.append( self.groups["sms"].onReadyStatus )
         dbus_object.onIncomingMessage.append( self.groups["sms"].onIncomingMessage )
         dbus_object.onIdleStateChanged.append( self.lock_on_idle )
+        dbus_object.onInputEvent.append( self.suspend_on_powerbutton )
 
         logger.debug( "GUI init done" )
 
@@ -1852,6 +1879,45 @@ class GUI(object):
     def lock_on_idle( self, state ):
         if state == "LOCK":
             self.groups["lock"].activate()
+    
+    def suspend_on_powerbutton( self, name, action, seconds ):
+        if name+action == "AUXpressed":
+            # FIXME launch transition to main screen
+            pass
+
+        elif name+action == "POWERpressed":
+	    self.groups["suspend"].activate()
+	    self.groups["suspend"].enter_stage(0)
+
+        elif name+action == "POWERheld":
+	    if   seconds < 1:
+		# we should aleady be in stage 0, but let’s be explicit
+		self.groups["suspend"].enter_stage(0)
+	    elif 1 <= seconds < 3:
+		self.groups["suspend"].enter_stage(1)
+	    elif 3 <= seconds:
+		self.groups["suspend"].deactivate()
+
+        elif name+action == "POWERreleased":
+            if self.groups["suspend"].stage == 1:
+
+		self.groups["suspend"].enter_stage(2)
+		ecore.main_loop_iterate()
+
+                dbus_object.gsm_device_iface.PrepareForSuspend()
+        
+
+                logger.info( "ENTERING SUSPEND" )
+                os.system( "apm -s" )
+                logger.info( "RETURN FROM SUSPEND" )
+
+		self.groups["suspend"].enter_stage(3)
+		ecore.main_loop_iterate()
+
+                dbus_object.gsm_device_iface.RecoverFromSuspend()
+                dbus_object.idlenotifier_iface.SetState("BUSY")
+
+	    self.groups["suspend"].deactivate()
 
     def display_time(self):
         self.groups["main"].part_text_set("label", time.strftime("%H:%M", time.localtime()))
@@ -1976,6 +2042,7 @@ class DBusObject( object ):
         self.onNetworkStatus = []
         self.onIncomingMessage = []
         self.onIdleStateChanged = []
+        self.onInputEvent = []
 
         self.framework_obj = None
 
@@ -2002,8 +2069,6 @@ class DBusObject( object ):
 
         self.fullinit = False
 
-        self.willSuspend = False
-
     def tryGetProxy( self, busname, objname ):
         object = None
         try:
@@ -2172,22 +2237,8 @@ class DBusObject( object ):
 
     def cbEvent( self, name, action, seconds ):
         logger.info( "INPUT EVENT = %s, %s, %d" % ( name, action, seconds ) )
-        if name+action == "AUXpressed":
-            # FIXME launch transition to main screen
-            pass
-
-        elif name+action == "POWERheld":
-            self.willSuspend = ( seconds >= 1 )
-
-        elif name+action == "POWERreleased":
-            if self.willSuspend:
-                self.willSuspend = False
-                self.gsm_device_iface.PrepareForSuspend()
-                logger.info( "ENTERING SUSPEND" )
-                os.system( "apm -s" )
-                logger.info( "RETURN FROM SUSPEND" )
-                self.gsm_device_iface.RecoverFromSuspend()
-                self.idlenotifier_iface.SetState("BUSY")
+	for cb in self.onInputEvent:
+	    cb( name, action, seconds )
 
 #=========================================================================#
 if __name__ == "__main__":

-- 
freesmartphone.org demo GUI



More information about the pkg-fso-commits mailing list