1d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi/*
2d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi * Copyright (C) 2014 The Android Open Source Project
3d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi *
4d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi * Licensed under the Apache License, Version 2.0 (the "License");
5d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi * you may not use this file except in compliance with the License.
6d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi * You may obtain a copy of the License at
7d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi *
8d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi *      http://www.apache.org/licenses/LICENSE-2.0
9d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi *
10d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi * Unless required by applicable law or agreed to in writing, software
11d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi * distributed under the License is distributed on an "AS IS" BASIS,
12d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi * See the License for the specific language governing permissions and
14d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi * limitations under the License
15d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi */
16d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi
17d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggipackage com.android.systemui.statusbar.stack;
18d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi
19d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggiimport java.util.ArrayList;
20d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi
21d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi/**
22d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi * Filters the animations for only a certain type of properties.
23d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi */
24d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggipublic class AnimationFilter {
25d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    boolean animateAlpha;
26d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    boolean animateY;
27d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    boolean animateZ;
28d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    boolean animateScale;
29d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    boolean animateHeight;
30708a6c120da6750d281195ef15a240a5627efed4Selim Cinek    boolean animateTopInset;
31d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    boolean animateDimmed;
32bf370992508c55d1f2493923bdc1834a0710e4baJohn Spurlock    boolean animateDark;
33ae44128776410abd11bd06ae700db9cc4606a773Jorim Jaggi    boolean animateHideSensitive;
348efa6dde2b4f2cdbf046b87b7366404c3cc46219Selim Cinek    boolean hasDelays;
3560d07c597c3f996deb3f2743466fe5279ca15e8dJorim Jaggi    boolean hasGoToFullShadeEvent;
364e857f4ef0357e05806819d0488a73a12208fe8fJorim Jaggi    boolean hasDarkEvent;
372a5e452f4f70d2dd717946dd50486cc66ea4cc43Jorim Jaggi    int darkAnimationOriginIndex;
38d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi
39d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    public AnimationFilter animateAlpha() {
40d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi        animateAlpha = true;
41d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi        return this;
42d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    }
43d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi
44d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    public AnimationFilter animateY() {
45d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi        animateY = true;
46d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi        return this;
47d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    }
48d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi
498efa6dde2b4f2cdbf046b87b7366404c3cc46219Selim Cinek    public AnimationFilter hasDelays() {
508efa6dde2b4f2cdbf046b87b7366404c3cc46219Selim Cinek        hasDelays = true;
518efa6dde2b4f2cdbf046b87b7366404c3cc46219Selim Cinek        return this;
528efa6dde2b4f2cdbf046b87b7366404c3cc46219Selim Cinek    }
538efa6dde2b4f2cdbf046b87b7366404c3cc46219Selim Cinek
54d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    public AnimationFilter animateZ() {
55d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi        animateZ = true;
56d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi        return this;
57d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    }
58d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi
59d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    public AnimationFilter animateScale() {
60d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi        animateScale = true;
61d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi        return this;
62d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    }
63d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi
64d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    public AnimationFilter animateHeight() {
65d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi        animateHeight = true;
66d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi        return this;
67d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    }
68d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi
69708a6c120da6750d281195ef15a240a5627efed4Selim Cinek    public AnimationFilter animateTopInset() {
70708a6c120da6750d281195ef15a240a5627efed4Selim Cinek        animateTopInset = true;
71708a6c120da6750d281195ef15a240a5627efed4Selim Cinek        return this;
72708a6c120da6750d281195ef15a240a5627efed4Selim Cinek    }
73708a6c120da6750d281195ef15a240a5627efed4Selim Cinek
74d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    public AnimationFilter animateDimmed() {
75d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi        animateDimmed = true;
76d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi        return this;
77d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    }
78d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi
79bf370992508c55d1f2493923bdc1834a0710e4baJohn Spurlock    public AnimationFilter animateDark() {
80bf370992508c55d1f2493923bdc1834a0710e4baJohn Spurlock        animateDark = true;
81bf370992508c55d1f2493923bdc1834a0710e4baJohn Spurlock        return this;
82bf370992508c55d1f2493923bdc1834a0710e4baJohn Spurlock    }
83bf370992508c55d1f2493923bdc1834a0710e4baJohn Spurlock
84ae44128776410abd11bd06ae700db9cc4606a773Jorim Jaggi    public AnimationFilter animateHideSensitive() {
85ae44128776410abd11bd06ae700db9cc4606a773Jorim Jaggi        animateHideSensitive = true;
86ae44128776410abd11bd06ae700db9cc4606a773Jorim Jaggi        return this;
87ae44128776410abd11bd06ae700db9cc4606a773Jorim Jaggi    }
88ae44128776410abd11bd06ae700db9cc4606a773Jorim Jaggi
89d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    /**
90d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi     * Combines multiple filters into {@code this} filter, using or as the operand .
91d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi     *
92d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi     * @param events The animation events from the filters to combine.
93d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi     */
94d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    public void applyCombination(ArrayList<NotificationStackScrollLayout.AnimationEvent> events) {
95d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi        reset();
96d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi        int size = events.size();
97d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi        for (int i = 0; i < size; i++) {
982a5e452f4f70d2dd717946dd50486cc66ea4cc43Jorim Jaggi            NotificationStackScrollLayout.AnimationEvent ev = events.get(i);
99d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi            combineFilter(events.get(i).filter);
1002a5e452f4f70d2dd717946dd50486cc66ea4cc43Jorim Jaggi            if (ev.animationType ==
10160d07c597c3f996deb3f2743466fe5279ca15e8dJorim Jaggi                    NotificationStackScrollLayout.AnimationEvent.ANIMATION_TYPE_GO_TO_FULL_SHADE) {
10260d07c597c3f996deb3f2743466fe5279ca15e8dJorim Jaggi                hasGoToFullShadeEvent = true;
10360d07c597c3f996deb3f2743466fe5279ca15e8dJorim Jaggi            }
1042a5e452f4f70d2dd717946dd50486cc66ea4cc43Jorim Jaggi            if (ev.animationType ==
1054e857f4ef0357e05806819d0488a73a12208fe8fJorim Jaggi                    NotificationStackScrollLayout.AnimationEvent.ANIMATION_TYPE_DARK) {
1064e857f4ef0357e05806819d0488a73a12208fe8fJorim Jaggi                hasDarkEvent = true;
1072a5e452f4f70d2dd717946dd50486cc66ea4cc43Jorim Jaggi                darkAnimationOriginIndex = ev.darkAnimationOriginIndex;
1084e857f4ef0357e05806819d0488a73a12208fe8fJorim Jaggi            }
109d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi        }
110d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    }
111d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi
112d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    private void combineFilter(AnimationFilter filter) {
113d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi        animateAlpha |= filter.animateAlpha;
114d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi        animateY |= filter.animateY;
115d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi        animateZ |= filter.animateZ;
116d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi        animateScale |= filter.animateScale;
117d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi        animateHeight |= filter.animateHeight;
118708a6c120da6750d281195ef15a240a5627efed4Selim Cinek        animateTopInset |= filter.animateTopInset;
119d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi        animateDimmed |= filter.animateDimmed;
120bf370992508c55d1f2493923bdc1834a0710e4baJohn Spurlock        animateDark |= filter.animateDark;
121ae44128776410abd11bd06ae700db9cc4606a773Jorim Jaggi        animateHideSensitive |= filter.animateHideSensitive;
1228efa6dde2b4f2cdbf046b87b7366404c3cc46219Selim Cinek        hasDelays |= filter.hasDelays;
123d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    }
124d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi
125d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    private void reset() {
126d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi        animateAlpha = false;
127d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi        animateY = false;
128d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi        animateZ = false;
129d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi        animateScale = false;
130d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi        animateHeight = false;
131708a6c120da6750d281195ef15a240a5627efed4Selim Cinek        animateTopInset = false;
132d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi        animateDimmed = false;
133bf370992508c55d1f2493923bdc1834a0710e4baJohn Spurlock        animateDark = false;
134ae44128776410abd11bd06ae700db9cc4606a773Jorim Jaggi        animateHideSensitive = false;
1358efa6dde2b4f2cdbf046b87b7366404c3cc46219Selim Cinek        hasDelays = false;
13660d07c597c3f996deb3f2743466fe5279ca15e8dJorim Jaggi        hasGoToFullShadeEvent = false;
1374e857f4ef0357e05806819d0488a73a12208fe8fJorim Jaggi        hasDarkEvent = false;
1382a5e452f4f70d2dd717946dd50486cc66ea4cc43Jorim Jaggi        darkAnimationOriginIndex =
1392a5e452f4f70d2dd717946dd50486cc66ea4cc43Jorim Jaggi                NotificationStackScrollLayout.AnimationEvent.DARK_ANIMATION_ORIGIN_INDEX_ABOVE;
140d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    }
141d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi}
142