ofono/test/test-stk-menu

355 lines
9.4 KiB
Python
Executable File

#!/usr/bin/python
import gobject
import sys
import dbus
import dbus.service
import dbus.mainloop.glib
import signal
def handler(signum, frame):
raise Exception("\nSingle tone is finished!")
class GoBack(dbus.DBusException):
_dbus_error_name = "org.ofono.Error.GoBack"
class EndSession(dbus.DBusException):
_dbus_error_name = "org.ofono.Error.EndSession"
class Busy(dbus.DBusException):
_dbus_error_name = "org.ofono.Error.Busy"
class StkAgent(dbus.service.Object):
exit_on_release = True
timeout_id = 0
timeout_reply_handler = None
def set_exit_on_release(self, exit_on_release):
self.exit_on_release = exit_on_release
def timeout_callback(self):
self.timeout_id = 0
self.timeout_reply_handler()
return False
def call_added(self, path, properties):
print "call added %s" % (path)
if (self.timeout_id > 0):
gobject.source_remove(self.timeout_id)
self.timeout_callback()
@dbus.service.method("org.ofono.SimToolkitAgent",
in_signature="", out_signature="")
def Release(self):
print "Release"
if self.exit_on_release:
mainloop.quit()
@dbus.service.method("org.ofono.SimToolkitAgent",
in_signature="sya(sy)n", out_signature="y")
def RequestSelection(self, title, icon, items, default):
print "Title: (%s)" % (title)
print "Icon: (%d)" % (icon)
index = 0
for item in items:
print "%d. %s (icon: %d)" % (index, item[0], item[1])
index += 1
print "\nDefault: %d" % (default)
select = raw_input("Enter Selection (t, b):")
if select == 'b':
raise GoBack("User wishes to go back")
elif select == 't':
raise EndSession("User wishes to terminate session")
else:
return int(select)
@dbus.service.method("org.ofono.SimToolkitAgent",
in_signature="syb", out_signature="",
async_callbacks=("reply_func",
"error_func"))
def DisplayText(self, title, icon, urgent, reply_func, error_func):
print "DisplayText (%s)" % (title)
print "Icon: (%d)" % (icon)
print "Urgent: (%d)" % (urgent)
key = raw_input("Press return to clear ('t' terminates, "
"'b' goes back, 'n' busy, "
"'w' return and wait):")
if key == 'w':
seconds = 60
else:
seconds = 0
if key == 'b':
raise GoBack("User wishes to go back")
elif key == 't':
raise EndSession("User wishes to terminate session")
elif key == 'n':
raise Busy("User wishes to simulate busy screen")
if (seconds > 0):
print "Waiting for %d seconds" % (seconds)
self.timeout_reply_handler = reply_func
self.timeout_id = gobject.timeout_add_seconds(seconds,
self.timeout_callback)
@dbus.service.method("org.ofono.SimToolkitAgent",
in_signature="sysyyb", out_signature="s")
def RequestInput(self, title, icon, default, min_chars, max_chars,
hide_typing):
print "Title: (%s)" % (title)
print "Icon: (%d)" % (icon)
print "Default: (%s)" % (default)
print "Hide typing: (%s)" % (hide_typing)
print "Enter characters, min: %d, max: %d:" % (min_chars,
max_chars)
userin = raw_input("")
return userin
@dbus.service.method("org.ofono.SimToolkitAgent",
in_signature="sysyyb", out_signature="s")
def RequestDigits(self, title, icon, default, min_chars, max_chars,
hide_typing):
print "Title: (%s)" % (title)
print "Icon: (%d)" % (icon)
print "Default: (%s)" % (default)
print "Hide typing: (%s)" % (hide_typing)
print "Enter digits, min: %d, max: %d:" % (min_chars,
max_chars)
userin = raw_input("'t' terminates, 'b' goes back:")
if userin == 'b':
raise GoBack("User wishes to go back")
elif userin == 't':
raise EndSession("User wishes to terminate session")
else:
return userin
@dbus.service.method("org.ofono.SimToolkitAgent",
in_signature="sy", out_signature="s")
def RequestKey(self, title, icon):
print "Title: (%s)" % (title)
print "Icon: (%d)" % (icon)
key = raw_input("Enter Key (t, b):")
if key == 'b':
raise GoBack("User wishes to go back")
elif key == 't':
raise EndSession("User wishes to terminate session")
else:
return key
@dbus.service.method("org.ofono.SimToolkitAgent",
in_signature="sy", out_signature="s")
def RequestDigit(self, title, icon):
print "Title: (%s)" % (title)
print "Icon: (%d)" % (icon)
key = raw_input("Enter Digit (t, b):")
if key == 'b':
raise GoBack("User wishes to go back")
elif key == 't':
raise EndSession("User wishes to terminate session")
else:
return key
@dbus.service.method("org.ofono.SimToolkitAgent",
in_signature="sy", out_signature="s")
def RequestQuickDigit(self, title, icon):
print "Title: (%s)" % (title)
print "Icon: (%d)" % (icon)
key = raw_input("Quick digit (0-9, *, #, t, b):")
if key == 'b':
raise GoBack("User wishes to go back")
elif key == 't':
raise EndSession("User wishes to terminate session")
else:
return key
@dbus.service.method("org.ofono.SimToolkitAgent",
in_signature="sy", out_signature="b")
def RequestConfirmation(self, title, icon):
print "Title: (%s)" % (title)
print "Icon: (%d)" % (icon)
key = raw_input("Enter Confirmation (t, b, y, n):")
if key == 'b':
raise GoBack("User wishes to go back")
elif key == 't':
raise EndSession("User wishes to terminate session")
elif key == 'y':
return True
else:
return False
@dbus.service.method("org.ofono.SimToolkitAgent",
in_signature="sy", out_signature="b")
def ConfirmCallSetup(self, info, icon):
print "Information: (%s)" % (info)
print "Icon: (%d)" % (icon)
key = raw_input("Enter Confirmation (t, y, n):")
if key == 't':
raise EndSession("User wishes to terminate session")
elif key == 'y':
return True
else:
return False
@dbus.service.method("org.ofono.SimToolkitAgent",
in_signature="sys", out_signature="b")
def ConfirmLaunchBrowser(self, info, icon, url):
print "Information: (%s)" % (info)
print "Icon: (%d)" % (icon)
print "URL (%s)" % (url)
key = raw_input("Enter Confirmation (y, n):")
if key == 'y':
return True
else:
return False
@dbus.service.method("org.ofono.SimToolkitAgent",
in_signature="", out_signature="")
def Cancel(self):
print "Cancel"
@dbus.service.method("org.ofono.SimToolkitAgent",
in_signature="ssy", out_signature="")
def PlayTone(self, tone, text, icon):
print "PlayTone: %s" % (tone)
print "Text: %s" % (text)
print "Icon: %d" % (icon)
signal.signal(signal.SIGALRM, handler)
signal.alarm(5)
try:
key = raw_input("Press return to end before end of"
" single tone (t):")
signal.alarm(0)
if key == 't':
raise EndSession("User wishes to terminate"
" session");
except Exception, exc:
print exc
@dbus.service.method("org.ofono.SimToolkitAgent",
in_signature="ssy", out_signature="")
def LoopTone(self, tone, text, icon):
print "LoopTone: %s" % (tone)
print "Text: %s" % (text)
print "Icon: %d" % (icon)
key = raw_input("Press return to end before timeout (t):")
if key == 't':
raise EndSession("User wishes to terminate session");
@dbus.service.method("org.ofono.SimToolkitAgent",
in_signature="sy", out_signature="")
def DisplayActionInformation(self, text, icon):
print "Text: %s" % (text)
print "Icon: %d" % (icon)
@dbus.service.method("org.ofono.SimToolkitAgent",
in_signature="sy", out_signature="")
def DisplayAction(self, text, icon):
print "Text: (%s)" % (text)
print "Icon: (%d)" % (icon)
key = raw_input("Press 't' to terminate the session ")
if key == 't':
raise EndSession("User wishes to terminate session")
@dbus.service.method("org.ofono.SimToolkitAgent",
in_signature="sy", out_signature="b")
def ConfirmOpenChannel(self, info, icon):
print "Open channel confirmation: (%s)" % (info)
print "Icon: (%d)" % (icon)
key = raw_input("Enter Confirmation (t, y, n):")
if key == 't':
raise EndSession("User wishes to terminate session")
elif key == 'y':
return True
else:
return False
def property_changed(name, value):
print "SimToolKit property: %s changed to '%s'" % (name, value)
if __name__ == '__main__':
if len(sys.argv) == 2:
mode = sys.argv[1]
else:
mode = 'menu'
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
bus = dbus.SystemBus()
manager = dbus.Interface(bus.get_object("org.ofono", "/"),
"org.ofono.Manager")
modems = manager.GetModems()
for path, properties in modems:
if "org.ofono.SimToolkit" in properties["Interfaces"]:
stk = dbus.Interface(bus.get_object('org.ofono', path),
'org.ofono.SimToolkit')
if "org.ofono.VoiceCallManager" in properties["Interfaces"]:
vcm = dbus.Interface(bus.get_object('org.ofono', path),
'org.ofono.VoiceCallManager')
stk.connect_to_signal("PropertyChanged", property_changed)
properties = stk.GetProperties()
if mode == 'menu':
if "MainMenuTitle" in properties:
print "Main Menu:"
print "%s" % (properties["MainMenuTitle"])
print "\n"
if "MainMenu" in properties:
print "Items:"
index = 0
for item in properties["MainMenu"]:
print "%d. %s" % (index, item[0])
index += 1
path = "/test/agent"
agent = StkAgent(bus, path)
try:
vcm.connect_to_signal("CallAdded", agent.call_added)
except:
pass
select = int(raw_input("Enter Selection: "))
stk.SelectItem(select, path)
elif mode == 'agent':
path = "/test/agent"
agent = StkAgent(bus, path)
try:
vcm.connect_to_signal("CallAdded", agent.call_added)
except:
pass
stk.RegisterAgent(path)
print "Default Agent registered - Waiting for STK command..."
else:
print "%s [menu|agent]" % (sys.argv[0])
exit(0)
mainloop = gobject.MainLoop()
mainloop.run()