[Done] Redesigning preferences dialog
Posted: Mon Sep 13, 2010 3:26 pm
As I mentioned before, I think that the preferences dialog in its current form is too complicated and sets the wrong accents. I would like to redesign it after Adblock Plus 1.3 release, the change proposals are listed below. As usually, comments, suggestions and constructive criticism are welcome.
1. Split up subscriptions and custom filters
Rationale: The overwhelming majority of Adblock Plus users no longer deals with filters. The question is rather: "which filter subscription am I subscribed to?" The preferences dialog currently tries to present too much information in small space which is very confusing. Further, functionality in the preferences dialog menu isn't very discoverable, people rarely look there for things they need.
Proposal: As much as I dislike tabbed interfaces, I think that it is a better solution in this case. Have one tab centered on subscriptions and another for filters (custom filters - the only ones people usually care about). Move global actions (the ones that apply to the entire list rather than a particular entry) from menu into a toolbar inside the tab and remove the menu. The Help menu should move to the ABP icon menu where it should be easier to find (that's the menu that people who do something with Adblock Plus actually use).
Filter subscriptions tab:
In its initial form this list is very simple. It displays the necessary information for a filter subscription: title, homepage (will need a new "special" comment in the subscription) and link to the actual filters file. Below info on the last download and sometimes one more line - if a newer Adblock Plus version is required for this subscription.
Currently we have two global subscription actions but "Update all subscriptions" need to be removed IMHO - I see no reason somebody should use it rather than right-clicking a specific subscription and updating it from the context menu.
The "Actions" button is really only another way to open the context menu, makes it more discoverable. The context menu items should be mostly the same as now: Edit subscription, Update subscription filters, Remove subscription, Move up, Move down. One additional item: Show filters. When checked a list of filters will be displayed below this subscription, with the usual columns (Filter rule, Hits etc). By default the filters shouldn't be displayed however.
Custom filters tab:
This is pretty much the filter list we have now only that subscriptions are no longer included. A lot more global actions here and the good thing: it is obvious that Remove all, Import and Export only apply to custom filters, no further explanation needed.
Opening from list of blockable items:
"Edit filter in effect" in the list of blockable items should continue working mostly as it does now. If it is invoked for user's own filter the preferences dialog should open with "Custom filters" tab selected. If the filter can only be found in subscriptions, "Filter subscriptions" tab should be selected and filters for the subscription this filter belongs to displayed.
2. Remove options
Rationale: Options are currently duplicated between ABP icon and preferences. In the preferences they are not very discoverable (in the menu) and it is not immediately obvious that they are not dialog options but rather global Adblock Plus options. Finally, they just seem out of place in this dialog - added back when it was considered the one and only point to manage Adblock Plus.
Proposal: Remove options from the preferences dialog, only keep the ones in the ABP icon menu. As the mockups above already indicate, the dialog should be renamed into Adblock Plus Filter Preferences. There should be no reason to keep a Tools menu entry for it. However, an informational message along the lines of "More Adblock Plus options are available by right-clicking ABP icon" in the preferences dialog might be a good idea (dismissable, once dismissed the message should no longer show up).
There is a slight complication: what if the user hides the toolbar icon? So far the only way to bring it back is via preferences dialog. I think the solution is to remove "Show in toolbar" option in applications that allow toolbar customization (especially Firefox). The user can remove the toolbar icon by customizing the toolbar - and get it back the way. For applications where the toolbar is not customizable (e.g. SeaMonkey) the option needs to be kept but unchecking both "Show in toolbar" and "Show in status bar" should not be possible - at least one of the icons needs to be displayed.
3. Apply changes immediately
Rationale: The temporary copy of all filters that the preferences dialog is currently working on adds much to the complexity of the implementation. The users on the other hand don't seem to appreciate it - they are regularly confused that clicking OK is required to make changes apply, just closing the dialog won't do it.
Proposal: Apply all changes immediately. Replace OK/Apply/Cancel buttons by a single Close button - it won't do anything other than closing the dialog because all changes have been saved already.
Some way to undo accidental changes is still required. However, I think that proper undo functionality shouldn't be too hard to implement if changes are applied immediately. This would probably mean Undo/Redo buttons in the toolbar of each tab, they would only apply to this tab then. E.g. Undo button in Custom filters tab would undo filter changes but won't touch filter subscriptions.
It might be possible to also store some limited number of changes that happened before the user opened preference dialog and allow undoing them as well. So e.g. if the user added a filter via filter composer and regrets it now he could open preferences dialog, switch to Custom filters tab and click Undo there. However, this looks rather backwards to me and not worth the effort. Instead some more obvious way to undo such actions should be implemented.
4. Expose backup functionality
Rationale: Adblock Plus automatically creates backups of your filter list but almost nobody knows that. Instead people tend to use Export custom filters functionality which isn't very suitable for backup - and they ask me to extend it so that it would save more information.
Proposal: The only reason why backup functionality isn't currently exposed is that the temporary filter list that the preferences dialog works on makes the implementation complicated. However, if the preferences dialog starts to apply changes immediately this functionality becomes a no-brainer.
The idea is to show a Backup button in the lower left corner of the dialog, opposite to Close. When clicked it would show a menu as indicated in the mockup above. You could then restore any of the automatically created backups as well as create a copy of your patterns.ini file in a custom location and restore it later.
5. User-defined groups for custom filters
Rationale: Users with many filters and especially filter subscription authors want more flexibility when organizing their filters. In the past I had to deny requests for user-defined groups because of the preferences dialog already being overly complex.
Proposal: Add an additional button to the toolbar in Custom filters tab: "Add filter group". This would add a new group without specialization - any filters can be created in or moved to this group. The decision about default groups is somewhat more complicated, it probably doesn't make sense to keep the strict specialization as we have it now. I think a default group would still be created if there is no group to add a new filter to (no user-defined groups around and existing default groups aren't specialized in that type of filter). However, after that the group should still accept any filter if it is moved into it or created there. And of course renaming default groups should be possible then.
With the structure becoming more complicated here Export and Import need to change. I don't want to break backwards compatibility there so the solution should be some special comments that mark the start of a group. Export would create such comments automatically and import would use them to decide which group to put the filters into. Worth considering: export/import some groups only.
6. Relax requirements on filter uniqueness
Rationale: The current requirement that a custom filter can only exist once in the list already creates problems with comments. If user-defined groups are implemented this will become an issue for normal filters as well, users might want to have the same filter in different groups.
Proposal: Allow comments to be used any number of times. As to the other filters, these should be unique in a group but it should be possible to use the same filter in any number of groups. The actual behavior depends on the way the user insert the filter. If the new filter is specified at the top of the list (outside any groups, inside the temporary "New filter" group) the behavior should be unchanged - entering a filter that already exists should select this filter. When inserting the filter into a list however the existing filter should only be selected if it exists in the same group. Otherwise it should be added as usually.
This (and proposal 5) will require changes to some Adblock Plus internals - notifications about added filters currently only specify the filter but not the group it is added to since that group was non-ambiguous anyway. Quite a bit of code will need to change here.
1. Split up subscriptions and custom filters
Rationale: The overwhelming majority of Adblock Plus users no longer deals with filters. The question is rather: "which filter subscription am I subscribed to?" The preferences dialog currently tries to present too much information in small space which is very confusing. Further, functionality in the preferences dialog menu isn't very discoverable, people rarely look there for things they need.
Proposal: As much as I dislike tabbed interfaces, I think that it is a better solution in this case. Have one tab centered on subscriptions and another for filters (custom filters - the only ones people usually care about). Move global actions (the ones that apply to the entire list rather than a particular entry) from menu into a toolbar inside the tab and remove the menu. The Help menu should move to the ABP icon menu where it should be easier to find (that's the menu that people who do something with Adblock Plus actually use).
Filter subscriptions tab:
In its initial form this list is very simple. It displays the necessary information for a filter subscription: title, homepage (will need a new "special" comment in the subscription) and link to the actual filters file. Below info on the last download and sometimes one more line - if a newer Adblock Plus version is required for this subscription.
Currently we have two global subscription actions but "Update all subscriptions" need to be removed IMHO - I see no reason somebody should use it rather than right-clicking a specific subscription and updating it from the context menu.
The "Actions" button is really only another way to open the context menu, makes it more discoverable. The context menu items should be mostly the same as now: Edit subscription, Update subscription filters, Remove subscription, Move up, Move down. One additional item: Show filters. When checked a list of filters will be displayed below this subscription, with the usual columns (Filter rule, Hits etc). By default the filters shouldn't be displayed however.
Custom filters tab:
This is pretty much the filter list we have now only that subscriptions are no longer included. A lot more global actions here and the good thing: it is obvious that Remove all, Import and Export only apply to custom filters, no further explanation needed.
Opening from list of blockable items:
"Edit filter in effect" in the list of blockable items should continue working mostly as it does now. If it is invoked for user's own filter the preferences dialog should open with "Custom filters" tab selected. If the filter can only be found in subscriptions, "Filter subscriptions" tab should be selected and filters for the subscription this filter belongs to displayed.
2. Remove options
Rationale: Options are currently duplicated between ABP icon and preferences. In the preferences they are not very discoverable (in the menu) and it is not immediately obvious that they are not dialog options but rather global Adblock Plus options. Finally, they just seem out of place in this dialog - added back when it was considered the one and only point to manage Adblock Plus.
Proposal: Remove options from the preferences dialog, only keep the ones in the ABP icon menu. As the mockups above already indicate, the dialog should be renamed into Adblock Plus Filter Preferences. There should be no reason to keep a Tools menu entry for it. However, an informational message along the lines of "More Adblock Plus options are available by right-clicking ABP icon" in the preferences dialog might be a good idea (dismissable, once dismissed the message should no longer show up).
There is a slight complication: what if the user hides the toolbar icon? So far the only way to bring it back is via preferences dialog. I think the solution is to remove "Show in toolbar" option in applications that allow toolbar customization (especially Firefox). The user can remove the toolbar icon by customizing the toolbar - and get it back the way. For applications where the toolbar is not customizable (e.g. SeaMonkey) the option needs to be kept but unchecking both "Show in toolbar" and "Show in status bar" should not be possible - at least one of the icons needs to be displayed.
3. Apply changes immediately
Rationale: The temporary copy of all filters that the preferences dialog is currently working on adds much to the complexity of the implementation. The users on the other hand don't seem to appreciate it - they are regularly confused that clicking OK is required to make changes apply, just closing the dialog won't do it.
Proposal: Apply all changes immediately. Replace OK/Apply/Cancel buttons by a single Close button - it won't do anything other than closing the dialog because all changes have been saved already.
Some way to undo accidental changes is still required. However, I think that proper undo functionality shouldn't be too hard to implement if changes are applied immediately. This would probably mean Undo/Redo buttons in the toolbar of each tab, they would only apply to this tab then. E.g. Undo button in Custom filters tab would undo filter changes but won't touch filter subscriptions.
It might be possible to also store some limited number of changes that happened before the user opened preference dialog and allow undoing them as well. So e.g. if the user added a filter via filter composer and regrets it now he could open preferences dialog, switch to Custom filters tab and click Undo there. However, this looks rather backwards to me and not worth the effort. Instead some more obvious way to undo such actions should be implemented.
4. Expose backup functionality
Rationale: Adblock Plus automatically creates backups of your filter list but almost nobody knows that. Instead people tend to use Export custom filters functionality which isn't very suitable for backup - and they ask me to extend it so that it would save more information.
Proposal: The only reason why backup functionality isn't currently exposed is that the temporary filter list that the preferences dialog works on makes the implementation complicated. However, if the preferences dialog starts to apply changes immediately this functionality becomes a no-brainer.
The idea is to show a Backup button in the lower left corner of the dialog, opposite to Close. When clicked it would show a menu as indicated in the mockup above. You could then restore any of the automatically created backups as well as create a copy of your patterns.ini file in a custom location and restore it later.
5. User-defined groups for custom filters
Rationale: Users with many filters and especially filter subscription authors want more flexibility when organizing their filters. In the past I had to deny requests for user-defined groups because of the preferences dialog already being overly complex.
Proposal: Add an additional button to the toolbar in Custom filters tab: "Add filter group". This would add a new group without specialization - any filters can be created in or moved to this group. The decision about default groups is somewhat more complicated, it probably doesn't make sense to keep the strict specialization as we have it now. I think a default group would still be created if there is no group to add a new filter to (no user-defined groups around and existing default groups aren't specialized in that type of filter). However, after that the group should still accept any filter if it is moved into it or created there. And of course renaming default groups should be possible then.
With the structure becoming more complicated here Export and Import need to change. I don't want to break backwards compatibility there so the solution should be some special comments that mark the start of a group. Export would create such comments automatically and import would use them to decide which group to put the filters into. Worth considering: export/import some groups only.
6. Relax requirements on filter uniqueness
Rationale: The current requirement that a custom filter can only exist once in the list already creates problems with comments. If user-defined groups are implemented this will become an issue for normal filters as well, users might want to have the same filter in different groups.
Proposal: Allow comments to be used any number of times. As to the other filters, these should be unique in a group but it should be possible to use the same filter in any number of groups. The actual behavior depends on the way the user insert the filter. If the new filter is specified at the top of the list (outside any groups, inside the temporary "New filter" group) the behavior should be unchanged - entering a filter that already exists should select this filter. When inserting the filter into a list however the existing filter should only be selected if it exists in the same group. Otherwise it should be added as usually.
This (and proposal 5) will require changes to some Adblock Plus internals - notifications about added filters currently only specify the filter but not the group it is added to since that group was non-ambiguous anyway. Quite a bit of code will need to change here.