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