Давно мечтал на своей нокии иметь поиск по контактам как в Windows Mobile. Т.е. при наборе номера одновременно производится поиск в контактах, причём как на предмет совпадения набираемого номера, так и в именах контактов. В именах поиск производится как на т9, не зависимо от текущего языка. На досугах накидал на телефоне скрипт, который это дело кое-как реализует.
Прошу любить и жаловать:
# -*- coding: utf-8 -*- import appuifw as ui import contacts import e32 import key_codes as kc import telephone as tel C=contacts.ContactsDb() fulllist=[(-1,u'Number',[u''])]+[(el[0], el[1].title,[el[1][f].value for f in el[1].keys() if el[1][f].schema['phonenumberfield']]) for el in C.items()] list=[]+fulllist def u(s): return unicode(s,'utf-8') n=[[' ',], ['',],['a','b','c','а','б','в','г','A','B','C','А','Б','В','Г',],['d','e','f','д','е','ж','з','D','Е','F','Д','Е','Ж','З',],['g','h','i','и','й','к','л','G','H','I','И','Й','К','Л',],['j','k','l','м','н','о','п','J','K','L','М','Н','О','П',],['m','n','o','р','с','т','у','M','N','O','Р','С','Т','У',],['p','q','r','s','ф','х','ц','ч','P','Q','R','S','p','q','r','s',],['t','u','v','ш','щ','ъ','ы','T','U','V','Ш','Щ','Ъ','Ы',],['w','x','y','z','ь','э','ю','я','W','X','Y','Z','Ь','Э','Ю','Я',]] n=[[u(j) for j in i] for i in n] def show(): ui.note(unicode(repr(list[lb.current()]))) def call(): phones=list[lb.current()][2] name=list[lb.current()][1] if not phones: ui.note(u'No number') return elif len(phones)==1: ind=0 else: ind=ui.popup_menu(phones, name) if ind!=None: tel.dial(phones[ind]) #global number number=u'' def Key1(): global number number+=u'1' update() def Key2(): global number number+=u'2' update() def Key3(): global number number+=u'3' update() def Key4(): global number number+=u'4' update() def Key5(): global number number+=u'5' update() def Key6(): global number number+=u'6' update() def Key7(): global number number+=u'7' update() def Key8(): global number number+=u'8' update() def Key9(): global number number+=u'9' update() def Key0(): global number number+=u'0' update() def KeyC(): global number number=number[:-1] update() def clear(): global number number=u'' update() def num(char): global n i=0 for chars in n: if char in chars: return u(str(i)) i+=1 return char def sort(title, numbers): global number numtitle=u'' if not numbers: return 0 else: for c in title: numtitle+=num(c) #ui.note(numtitle) for n in numbers+[numtitle,]: if n[:2]==u'+7': n=u'8'+n[2:] try: if not n.split(number)[0]==n: return 1 except: pass return 0 def update(): global list list[0][2][0]=number if not number: list=[el for el in fulllist] else: list=[el for el in fulllist if sort(el[1],el[2])] titles=[el[1] for el in list] titles[0]=number lb.set_list(titles) titles=[el[1] for el in list] titles[0]=u'' lb=ui.Listbox(titles, show) lb.bind(kc.EKey1,Key1) lb.bind(kc.EKey2,Key2) lb.bind(kc.EKey3,Key3) lb.bind(kc.EKey4,Key4) lb.bind(kc.EKey5,Key5) lb.bind(kc.EKey6,Key6) lb.bind(kc.EKey7,Key7) lb.bind(kc.EKey8,Key8) lb.bind(kc.EKey9,Key9) lb.bind(kc.EKey0,Key0) lb.bind(kc.EKeyBackspace,KeyC) lb.bind(kc.EKeyYes,call) lb.bind(kc.EKeyNo,clear) #ui.app.screen='large' ui.app.title = u"Dialer" ui.app.body=lb running=1 def quit(): global running running=0 ui.app.exit_key_handler=quit while running: e32.ao_sleep(0.01)
Это только тестовая версия, приложение будет полностью переписано.
Жду критики, пожеланий, комментариев и другого вида фидбек.