Importance number on rules
Sometimes you just want the settings for certain rules to have the upper hand, no matter which other rules apply.
f.e. when my battery is below 30% is want everything muted and wifi/gps/sync/... off. The settings of that rule would have preference over everything else. Settings that aren't defined within this rule can be overriden by lower rules ofcourse.
Currently we are thinking about following logic:
AcitvateProfile will have ability to set priority for profile to be activated. And based on this priority it will put profiles in active profile stack. For example:
RuleA activates profile LowBattery with priority 10 when battery is below 20%
RuleB activates WiFiOnSyncOn profile with default priority 5 when you arrive at home.
If it happens that your RuleA triggers so you have LowBattery(1) and than you arrive at home, RuleB will still activate WiFiOnSyncOn but will put it below LowBattery. Order will be as this: LowBattery(2), WiFiOnSyncOn(1)
Once you plug your phone LowBattery gets deactivated restoring settings to WiFiOnSyncOn(1) values
This is quite big and complex change and we will start implementing in 1.0.16 or even 17
Very strange to assign priorities not to Profiles but to Rules.
For example, I manually activated Meeting profile, not wanted to be disturbed whole day.
But once I come to Work location, it activates Work profile overriding my Meeting volume settings...
So both Profile and Rule should have its priority.
I still think that the way SPB Phone suite handles profiles is better then this. You don't have multiple profiles active at the same time. Just all settings are defined in each profile, this way it's very clear which settings are active at any given moment (just look at the profile). And you can give each profile a priority.
I definitely like webreaper's description of the ordering of profiles by precedence -- no need to assign weights/numbers to profiles or conditions which is complex from a user standpoint. If we need to go the numbers route, I definitely prefer Chris' notation of 1 being highest since number one is, after all, number one. Anything else is a lower priority.
But if you can simply reorder your profiles to have the most important one at the top and it overrides the others below it, then as webreaper says, you would see if any other conditions for the next lowest rule are met that aren't already met by the number one rule and apply those and so on.
I can definitely see the complexity in this though so that if one rule low down starts an app that has a condition that activates a higher up profile, you could really get into some circular conditions (=BAD!). So there has to be some simplifying logic that comes in here somewhere... Maybe a simple UI to identify which profiles can/should override or coexist with others.
I'm eager to see this feature implemented though!
I'm just beginning with using profiles but can envision scenarios where a manually set priority would help and/or be essential.
Food for thought: A priority scale of 1 to 20, 1 being highest precedence and 20 being lowest. A default, system wide priority level, for example 10 (maybe even user configurable). User can then increase or decrease the priority on a per profile basis, in effect giving them "weight". Priorities at the same level following the last-applied methodology (or something else, maybe configurable as well). So if the user has not assigned a priority to a profile, the default is assigned. Profiles which meet the rule criteria are stacked by priority and overlapping settings are evaluated by rules above.
This is similar to what has been suggested with the addition of the ability to reduce the priority with respects to the default. And if the user chooses not to use priorities, then app operates as it currently does.
This could become very confusing for the user if they use a lot of profiles with overlapping settings. Therefore I would also suggest a display which lists the settings that are being applied and the profiles from which they come from. Maybe even a way to view the complete "stack" so that you can see higher priority profile settings overruling lower priority ones.
(or, reading the post again, it might be that I've described exactly what you're planning to implement!)
Perhaps you should approach it differently, probeez. Perhaps the way to do this is to iterate through the profiles in precedence order, picking the effect that comes first.
For example, I have a headphones profile which turns up the volume. I have a home profile which silences the phone and enables wifi.
When I arrive home, if I'm listening to music (i.e., headphones attached) I want the volume setting to be taken from the profile with the highest precendence, and everything else to be taken from the lower profiles. So in this scenario volume would be left alone, but wifi enabled. If I wasn't listening to music, volume *and* wifi would be adjusted.
So effectively, you'd iterate all settings that can be adjusted, and for each setting loop through the profiles. If a profile alters a setting (i.e., has a yellow star) then pick that value and ignore the setting for lower profiles.
Effectively you'd have a 'cascade' working down the applicable profiles in preference order, picking up the settings which apply in order of preference.
Hope that makes sense! :)
A precedence mechanism would also be useful when one rule triggers multiple overlapping profiles.