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 android.view.View;
20a32ab60bb020df1d89fadfa14eb8600242786bf2Selim Cinekimport com.android.systemui.statusbar.ActivatableNotificationView;
21d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi
22d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggiimport java.util.ArrayList;
23d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi
24d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi/**
25d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi * A global state to track all input states for the algorithm.
26d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi */
27d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggipublic class AmbientState {
28d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    private ArrayList<View> mDraggedViews = new ArrayList<View>();
29d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    private int mScrollY;
30d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    private boolean mDimmed;
31a32ab60bb020df1d89fadfa14eb8600242786bf2Selim Cinek    private ActivatableNotificationView mActivatedChild;
328d9ff9c2c66bc1d3b92eb6992d58599ff80ed6dcSelim Cinek    private float mOverScrollTopAmount;
338d9ff9c2c66bc1d3b92eb6992d58599ff80ed6dcSelim Cinek    private float mOverScrollBottomAmount;
34c27437b7fd04e682ae2abdf0727a99bf5c6e409dSelim Cinek    private int mSpeedBumpIndex = -1;
35bf370992508c55d1f2493923bdc1834a0710e4baJohn Spurlock    private boolean mDark;
36ae44128776410abd11bd06ae700db9cc4606a773Jorim Jaggi    private boolean mHideSensitive;
37d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi
38d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    public int getScrollY() {
39d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi        return mScrollY;
40d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    }
41d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi
42d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    public void setScrollY(int scrollY) {
43d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi        this.mScrollY = scrollY;
44d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    }
45d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi
46d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    public void onBeginDrag(View view) {
47d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi        mDraggedViews.add(view);
48d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    }
49d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi
50d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    public void onDragFinished(View view) {
51d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi        mDraggedViews.remove(view);
52d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    }
53d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi
54d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    public ArrayList<View> getDraggedViews() {
55d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi        return mDraggedViews;
56d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    }
57d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi
58d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    /**
59d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi     * @param dimmed Whether we are in a dimmed state (on the lockscreen), where the backgrounds are
60d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi     *               translucent and everything is scaled back a bit.
61d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi     */
62d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    public void setDimmed(boolean dimmed) {
63d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi        mDimmed = dimmed;
64d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    }
65d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi
66bf370992508c55d1f2493923bdc1834a0710e4baJohn Spurlock    /** In dark mode, we draw as little as possible, assuming a black background */
67bf370992508c55d1f2493923bdc1834a0710e4baJohn Spurlock    public void setDark(boolean dark) {
68bf370992508c55d1f2493923bdc1834a0710e4baJohn Spurlock        mDark = dark;
69bf370992508c55d1f2493923bdc1834a0710e4baJohn Spurlock    }
70bf370992508c55d1f2493923bdc1834a0710e4baJohn Spurlock
71ae44128776410abd11bd06ae700db9cc4606a773Jorim Jaggi    public void setHideSensitive(boolean hideSensitive) {
72ae44128776410abd11bd06ae700db9cc4606a773Jorim Jaggi        mHideSensitive = hideSensitive;
73ae44128776410abd11bd06ae700db9cc4606a773Jorim Jaggi    }
74ae44128776410abd11bd06ae700db9cc4606a773Jorim Jaggi
75d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    /**
76d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi     * In dimmed mode, a child can be activated, which happens on the first tap of the double-tap
77d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi     * interaction. This child is then scaled normally and its background is fully opaque.
78d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi     */
79a32ab60bb020df1d89fadfa14eb8600242786bf2Selim Cinek    public void setActivatedChild(ActivatableNotificationView activatedChild) {
80d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi        mActivatedChild = activatedChild;
81d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    }
82d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi
83d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    public boolean isDimmed() {
84d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi        return mDimmed;
85d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    }
86d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi
87bf370992508c55d1f2493923bdc1834a0710e4baJohn Spurlock    public boolean isDark() {
88bf370992508c55d1f2493923bdc1834a0710e4baJohn Spurlock        return mDark;
89bf370992508c55d1f2493923bdc1834a0710e4baJohn Spurlock    }
90bf370992508c55d1f2493923bdc1834a0710e4baJohn Spurlock
91ae44128776410abd11bd06ae700db9cc4606a773Jorim Jaggi    public boolean isHideSensitive() {
92ae44128776410abd11bd06ae700db9cc4606a773Jorim Jaggi        return mHideSensitive;
93ae44128776410abd11bd06ae700db9cc4606a773Jorim Jaggi    }
94ae44128776410abd11bd06ae700db9cc4606a773Jorim Jaggi
95a32ab60bb020df1d89fadfa14eb8600242786bf2Selim Cinek    public ActivatableNotificationView getActivatedChild() {
96d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi        return mActivatedChild;
97d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi    }
988d9ff9c2c66bc1d3b92eb6992d58599ff80ed6dcSelim Cinek
998d9ff9c2c66bc1d3b92eb6992d58599ff80ed6dcSelim Cinek    public void setOverScrollAmount(float amount, boolean onTop) {
1008d9ff9c2c66bc1d3b92eb6992d58599ff80ed6dcSelim Cinek        if (onTop) {
1018d9ff9c2c66bc1d3b92eb6992d58599ff80ed6dcSelim Cinek            mOverScrollTopAmount = amount;
1028d9ff9c2c66bc1d3b92eb6992d58599ff80ed6dcSelim Cinek        } else {
1038d9ff9c2c66bc1d3b92eb6992d58599ff80ed6dcSelim Cinek            mOverScrollBottomAmount = amount;
1048d9ff9c2c66bc1d3b92eb6992d58599ff80ed6dcSelim Cinek        }
1058d9ff9c2c66bc1d3b92eb6992d58599ff80ed6dcSelim Cinek    }
1068d9ff9c2c66bc1d3b92eb6992d58599ff80ed6dcSelim Cinek
1078d9ff9c2c66bc1d3b92eb6992d58599ff80ed6dcSelim Cinek    public float getOverScrollAmount(boolean top) {
1088d9ff9c2c66bc1d3b92eb6992d58599ff80ed6dcSelim Cinek        return top ? mOverScrollTopAmount : mOverScrollBottomAmount;
1098d9ff9c2c66bc1d3b92eb6992d58599ff80ed6dcSelim Cinek    }
110c27437b7fd04e682ae2abdf0727a99bf5c6e409dSelim Cinek
111c27437b7fd04e682ae2abdf0727a99bf5c6e409dSelim Cinek    public int getSpeedBumpIndex() {
112c27437b7fd04e682ae2abdf0727a99bf5c6e409dSelim Cinek        return mSpeedBumpIndex;
113c27437b7fd04e682ae2abdf0727a99bf5c6e409dSelim Cinek    }
114c27437b7fd04e682ae2abdf0727a99bf5c6e409dSelim Cinek
115c27437b7fd04e682ae2abdf0727a99bf5c6e409dSelim Cinek    public void setSpeedBumpIndex(int speedBumpIndex) {
116c27437b7fd04e682ae2abdf0727a99bf5c6e409dSelim Cinek        mSpeedBumpIndex = speedBumpIndex;
117c27437b7fd04e682ae2abdf0727a99bf5c6e409dSelim Cinek    }
118d552d9d8e964c102e6832610be46cf2c041e8829Jorim Jaggi}
119