SystemBarScrimViews.java revision c041d883c3591670441d4c2da8fd1108dfd28acd
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2014 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage com.android.systemui.recents.views;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.app.Activity;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.View;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.systemui.R;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.systemui.recents.RecentsConfiguration;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** Manages the scrims for the various system bars. */
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class SystemBarScrimViews {
268896783dc1d31c5274b277c364da0ffe7cc27ccaDaniel Sandler
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    RecentsConfiguration mConfig;
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    View mStatusBarScrimView;
30664644d9e012aa2a28ac96f305b1ce6499ec8806Joe Onorato    View mNavBarScrimView;
31664644d9e012aa2a28ac96f305b1ce6499ec8806Joe Onorato
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    boolean mHasNavBarScrim;
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    boolean mShouldAnimateStatusBarScrim;
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    boolean mHasStatusBarScrim;
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    boolean mShouldAnimateNavBarScrim;
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public SystemBarScrimViews(Activity activity, RecentsConfiguration config) {
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mConfig = config;
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mStatusBarScrimView = activity.findViewById(R.id.status_bar_scrim);
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mNavBarScrimView = activity.findViewById(R.id.nav_bar_scrim);
41664644d9e012aa2a28ac96f305b1ce6499ec8806Joe Onorato    }
428896783dc1d31c5274b277c364da0ffe7cc27ccaDaniel Sandler
438896783dc1d31c5274b277c364da0ffe7cc27ccaDaniel Sandler    /**
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Prepares the scrim views for animating when entering Recents. This will be called before
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the first draw.
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void prepareEnterRecentsAnimation() {
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mHasNavBarScrim = mConfig.hasNavBarScrim();
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mShouldAnimateNavBarScrim = mConfig.shouldAnimateNavBarScrim();
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mHasStatusBarScrim = mConfig.hasStatusBarScrim();
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mShouldAnimateStatusBarScrim = mConfig.shouldAnimateStatusBarScrim();
52664644d9e012aa2a28ac96f305b1ce6499ec8806Joe Onorato
53664644d9e012aa2a28ac96f305b1ce6499ec8806Joe Onorato        mNavBarScrimView.setVisibility(mHasNavBarScrim && !mShouldAnimateNavBarScrim ?
54664644d9e012aa2a28ac96f305b1ce6499ec8806Joe Onorato                View.VISIBLE : View.INVISIBLE);
55664644d9e012aa2a28ac96f305b1ce6499ec8806Joe Onorato        mStatusBarScrimView.setVisibility(mHasStatusBarScrim && !mShouldAnimateStatusBarScrim ?
56664644d9e012aa2a28ac96f305b1ce6499ec8806Joe Onorato                View.VISIBLE : View.INVISIBLE);
57664644d9e012aa2a28ac96f305b1ce6499ec8806Joe Onorato    }
58664644d9e012aa2a28ac96f305b1ce6499ec8806Joe Onorato
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Starts animating the scrim views when entering Recents.
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void startEnterRecentsAnimation() {
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mHasStatusBarScrim && mShouldAnimateStatusBarScrim) {
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mStatusBarScrimView.setTranslationY(-mStatusBarScrimView.getMeasuredHeight());
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mStatusBarScrimView.animate()
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    .translationY(0)
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    .setStartDelay(mConfig.launchedFromHome ?
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            mConfig.transitionEnterFromHomeDelay :
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            mConfig.transitionEnterFromAppDelay)
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    .setDuration(mConfig.navBarScrimEnterDuration)
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    .setInterpolator(mConfig.quintOutInterpolator)
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    .withStartAction(new Runnable() {
737bb8eeb90cf55f409a282c1f36ca08aa48c10543Joe Onorato                        @Override
747bb8eeb90cf55f409a282c1f36ca08aa48c10543Joe Onorato                        public void run() {
757bb8eeb90cf55f409a282c1f36ca08aa48c10543Joe Onorato                            mStatusBarScrimView.setVisibility(View.VISIBLE);
767bb8eeb90cf55f409a282c1f36ca08aa48c10543Joe Onorato                        }
777bb8eeb90cf55f409a282c1f36ca08aa48c10543Joe Onorato                    })
787bb8eeb90cf55f409a282c1f36ca08aa48c10543Joe Onorato                    .start();
79664644d9e012aa2a28ac96f305b1ce6499ec8806Joe Onorato        }
80664644d9e012aa2a28ac96f305b1ce6499ec8806Joe Onorato        if (mHasNavBarScrim && mShouldAnimateNavBarScrim) {
81664644d9e012aa2a28ac96f305b1ce6499ec8806Joe Onorato            mNavBarScrimView.setTranslationY(mNavBarScrimView.getMeasuredHeight());
82664644d9e012aa2a28ac96f305b1ce6499ec8806Joe Onorato            mNavBarScrimView.animate()
83664644d9e012aa2a28ac96f305b1ce6499ec8806Joe Onorato                    .translationY(0)
84664644d9e012aa2a28ac96f305b1ce6499ec8806Joe Onorato                    .setStartDelay(mConfig.launchedFromHome ?
85664644d9e012aa2a28ac96f305b1ce6499ec8806Joe Onorato                            mConfig.transitionEnterFromHomeDelay :
867bb8eeb90cf55f409a282c1f36ca08aa48c10543Joe Onorato                            mConfig.transitionEnterFromAppDelay)
87664644d9e012aa2a28ac96f305b1ce6499ec8806Joe Onorato                    .setDuration(mConfig.navBarScrimEnterDuration)
88664644d9e012aa2a28ac96f305b1ce6499ec8806Joe Onorato                    .setInterpolator(mConfig.quintOutInterpolator)
89664644d9e012aa2a28ac96f305b1ce6499ec8806Joe Onorato                    .withStartAction(new Runnable() {
90664644d9e012aa2a28ac96f305b1ce6499ec8806Joe Onorato                        @Override
91664644d9e012aa2a28ac96f305b1ce6499ec8806Joe Onorato                        public void run() {
92664644d9e012aa2a28ac96f305b1ce6499ec8806Joe Onorato                            mNavBarScrimView.setVisibility(View.VISIBLE);
93795f2840b4a70bf188c2f24c8c06f73a492b338cJoe Onorato                        }
94795f2840b4a70bf188c2f24c8c06f73a492b338cJoe Onorato                    })
95795f2840b4a70bf188c2f24c8c06f73a492b338cJoe Onorato                    .start();
96795f2840b4a70bf188c2f24c8c06f73a492b338cJoe Onorato        }
97795f2840b4a70bf188c2f24c8c06f73a492b338cJoe Onorato    }
98795f2840b4a70bf188c2f24c8c06f73a492b338cJoe Onorato
99795f2840b4a70bf188c2f24c8c06f73a492b338cJoe Onorato    /**
100795f2840b4a70bf188c2f24c8c06f73a492b338cJoe Onorato     * Starts animating the scrim views when leaving Recents (either via launching a task, or
101795f2840b4a70bf188c2f24c8c06f73a492b338cJoe Onorato     * going home).
102795f2840b4a70bf188c2f24c8c06f73a492b338cJoe Onorato     */
103795f2840b4a70bf188c2f24c8c06f73a492b338cJoe Onorato    public void startExitRecentsAnimation() {
104795f2840b4a70bf188c2f24c8c06f73a492b338cJoe Onorato        if (mHasStatusBarScrim && mShouldAnimateStatusBarScrim) {
105795f2840b4a70bf188c2f24c8c06f73a492b338cJoe Onorato            mStatusBarScrimView.animate()
106795f2840b4a70bf188c2f24c8c06f73a492b338cJoe Onorato                    .translationY(-mStatusBarScrimView.getMeasuredHeight())
107795f2840b4a70bf188c2f24c8c06f73a492b338cJoe Onorato                    .setStartDelay(0)
108795f2840b4a70bf188c2f24c8c06f73a492b338cJoe Onorato                    .setDuration(mConfig.taskViewExitToAppDuration)
109795f2840b4a70bf188c2f24c8c06f73a492b338cJoe Onorato                    .setInterpolator(mConfig.fastOutSlowInInterpolator)
110795f2840b4a70bf188c2f24c8c06f73a492b338cJoe Onorato                    .start();
111795f2840b4a70bf188c2f24c8c06f73a492b338cJoe Onorato        }
112795f2840b4a70bf188c2f24c8c06f73a492b338cJoe Onorato        if (mHasNavBarScrim && mShouldAnimateNavBarScrim) {
113795f2840b4a70bf188c2f24c8c06f73a492b338cJoe Onorato            mNavBarScrimView.animate()
1149305647eb61bb60a1f42481a0c0d208dc9bbe965Joe Onorato                    .translationY(mNavBarScrimView.getMeasuredHeight())
1158896783dc1d31c5274b277c364da0ffe7cc27ccaDaniel Sandler                    .setStartDelay(0)
1168896783dc1d31c5274b277c364da0ffe7cc27ccaDaniel Sandler                    .setDuration(mConfig.taskViewExitToAppDuration)
1179305647eb61bb60a1f42481a0c0d208dc9bbe965Joe Onorato                    .setInterpolator(mConfig.fastOutSlowInInterpolator)
1189305647eb61bb60a1f42481a0c0d208dc9bbe965Joe Onorato                    .start();
1199305647eb61bb60a1f42481a0c0d208dc9bbe965Joe Onorato        }
1208896783dc1d31c5274b277c364da0ffe7cc27ccaDaniel Sandler    }
1218896783dc1d31c5274b277c364da0ffe7cc27ccaDaniel Sandler}
1229305647eb61bb60a1f42481a0c0d208dc9bbe965Joe Onorato