SystemBarScrimViews.java revision cdbbb7e33033d7ae368aa5b7007ec2b20ebdaff1
1/* 2 * Copyright (C) 2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.systemui.recents.views; 18 19import android.view.Gravity; 20import android.view.LayoutInflater; 21import android.view.View; 22import android.view.ViewGroup; 23import android.widget.FrameLayout; 24import com.android.systemui.R; 25import com.android.systemui.recents.RecentsConfiguration; 26 27/** Manages the scrims for the various system bars. */ 28public class SystemBarScrimViews { 29 30 RecentsConfiguration mConfig; 31 32 View mStatusBarScrimView; 33 View mNavBarScrimView; 34 35 boolean mHasNavBarScrim; 36 boolean mShouldAnimateStatusBarScrim; 37 boolean mHasStatusBarScrim; 38 boolean mShouldAnimateNavBarScrim; 39 40 public SystemBarScrimViews(RecentsConfiguration config) { 41 mConfig = config; 42 } 43 44 /** Inflates the scrim views */ 45 public void inflate(LayoutInflater inflater, ViewGroup parent) { 46 mStatusBarScrimView = inflater.inflate(R.layout.recents_status_bar_scrim, parent, false); 47 mStatusBarScrimView.setLayoutParams(new FrameLayout.LayoutParams( 48 ViewGroup.LayoutParams.MATCH_PARENT, 49 ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.TOP)); 50 mNavBarScrimView = inflater.inflate(R.layout.recents_nav_bar_scrim, parent, false); 51 mNavBarScrimView.setLayoutParams(new FrameLayout.LayoutParams( 52 ViewGroup.LayoutParams.MATCH_PARENT, 53 ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.BOTTOM)); 54 } 55 56 /** 57 * Prepares the scrim views for animating when entering Recents. This will be called before 58 * the first draw. 59 */ 60 public void prepareEnterRecentsAnimation() { 61 mHasNavBarScrim = mConfig.hasNavBarScrim(); 62 mShouldAnimateNavBarScrim = mConfig.shouldAnimateNavBarScrim(); 63 mHasStatusBarScrim = mConfig.hasStatusBarScrim(); 64 mShouldAnimateStatusBarScrim = mConfig.shouldAnimateStatusBarScrim(); 65 66 mNavBarScrimView.setVisibility(mHasNavBarScrim && !mShouldAnimateNavBarScrim ? 67 View.VISIBLE : View.INVISIBLE); 68 mStatusBarScrimView.setVisibility(mHasStatusBarScrim && !mShouldAnimateStatusBarScrim ? 69 View.VISIBLE : View.INVISIBLE); 70 } 71 72 /** 73 * Starts animating the scrim views when entering Recents. 74 */ 75 public void startEnterRecentsAnimation() { 76 if (mHasStatusBarScrim && mShouldAnimateStatusBarScrim) { 77 mStatusBarScrimView.setTranslationY(-mStatusBarScrimView.getMeasuredHeight()); 78 mStatusBarScrimView.animate() 79 .translationY(0) 80 .setStartDelay(mConfig.taskBarEnterAnimDelay) 81 .setDuration(mConfig.navBarScrimEnterDuration) 82 .setInterpolator(mConfig.quintOutInterpolator) 83 .withStartAction(new Runnable() { 84 @Override 85 public void run() { 86 mStatusBarScrimView.setVisibility(View.VISIBLE); 87 } 88 }) 89 .start(); 90 } 91 if (mHasNavBarScrim && mShouldAnimateNavBarScrim) { 92 mNavBarScrimView.setTranslationY(mNavBarScrimView.getMeasuredHeight()); 93 mNavBarScrimView.animate() 94 .translationY(0) 95 .setStartDelay(mConfig.taskBarEnterAnimDelay) 96 .setDuration(mConfig.navBarScrimEnterDuration) 97 .setInterpolator(mConfig.quintOutInterpolator) 98 .withStartAction(new Runnable() { 99 @Override 100 public void run() { 101 mNavBarScrimView.setVisibility(View.VISIBLE); 102 } 103 }) 104 .start(); 105 } 106 } 107 108 /** 109 * Starts animating the scrim views when leaving Recents (either via launching a task, or 110 * going home). 111 */ 112 public void startExitRecentsAnimation() { 113 if (mHasNavBarScrim && mShouldAnimateNavBarScrim) { 114 mNavBarScrimView.animate() 115 .translationY(mNavBarScrimView.getMeasuredHeight()) 116 .setStartDelay(0) 117 .setDuration(mConfig.taskBarExitAnimDuration) 118 .setInterpolator(mConfig.fastOutSlowInInterpolator) 119 .start(); 120 } 121 } 122 123 /** Returns the status bar scrim view. */ 124 public View getStatusBarScrimView() { 125 return mStatusBarScrimView; 126 } 127 128 /** Returns the nav bar scrim view. */ 129 public View getNavBarScrimView() { 130 return mNavBarScrimView; 131 } 132} 133