Well maybe but I suspect it's going to be quite difficult and I'm not sure if the extra complexity is worth. If I understand you correctly you'd like a DSL for describing patterns instead of a single condition. Something like this:
Pattern pattern = Pattern.between(1, SECONDS).and(2, SECONDS).assertThat(someConditionIs(false)).and().between(2, SECONDS).and(3200, MILLISECONDS).assertThat(someConditionIs(true)).then().assertThat(someConditionIs(false)).forDuration(2, SECONDS);
await().pattern(pattern);
While it would be quite cool, I'm not sure it's worth the extra complexity and the time it would take to implement something like this (I think).
Today you could probably use this workaround:
// First pattern
await().atLeast(1, SECONDS).and().atMost(2, SECOND).until(somConditionIs(false));
// Second pattern
await().atMost(1200, MILLISECONDS).until(somConditionIs(true));
// Third pattern
await().atMost(2, SECONDS).until(somConditionIs(false));
/Johan