I just wanted to add support for services on whole list of contacts to the contacts framework. Looked pretty easy, as all the structures and algorithms were already done for single contacts and should just be a Copy,Paste&Adapt job.
Of course, things were/are not that easy. I have found some questions:
Should a service be only shown if it supports all of the contacts in a list, or also if only some of them are? Make it configurable? Per usage, e.g. button? If one selects the service “Email to…” she might expect to be writing to all in the list, not?
And if a property has several variants, like email addresses, is it okay to always use the default variant? For single contacts by now an action is added for every variant, but for several contacts is would be pretty useless to add an entry for every combination of variants, I guess.
And I wonder which services should support lists of contacts. Would e.g. one want to have all the cards of a list of contacts appear together? If some want, should this be configurable for each contact list appearance? And for each service?
I gave myself some answers. But they tend to result in inconsistent treatment of single contacts and whole lists of contacts. Not perfect.
Another thing that makes me currently not too pleased is ending with class names like
ListAllPropertiesDefaultDataActionServiceMenuFiller. I do wonder if I have lost my track. But each term inside the name is needed to differ the class from similiar ones:
List, because there is a menu filler for single contacts
AllProperties, because there are menus for only one property
Default, because this limits the shown services to only some (so things like “Copy address” are optionally left out)
DataAction, as it’s about actions for given data (e.g. by Drag’n’Drop)
Service, could be left out, but makes basic class ambigous
Menu, because there also fillers of buttons
Filler, because that is what it does
The class is the one putting the actions into the menu which appears on a drop on a list button. It also cares to execute the service of the chosen menu entry, and updates menu entries if a service signals a change in it’s availability, given it works in a dynamic system (like instant messaging):
I hacked it now to an end, so it just works. And finally it takes me only two clicks to begin an email to a whole groups of people from Kicker 🙂
But the list support really needs another thought. Looks, like I found something new to do when sitting in the train to and back from the family…