SystemBarScrimViews.java revision 412e18058dc2cd5779d2451fce7fd74631f9e237
10175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn/* 20175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn * Copyright (C) 2014 The Android Open Source Project 30175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn * 40175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn * Licensed under the Apache License, Version 2.0 (the "License"); 50175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn * you may not use this file except in compliance with the License. 60175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn * You may obtain a copy of the License at 70175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn * 80175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn * http://www.apache.org/licenses/LICENSE-2.0 90175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn * 100175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn * Unless required by applicable law or agreed to in writing, software 110175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn * distributed under the License is distributed on an "AS IS" BASIS, 120175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn * See the License for the specific language governing permissions and 140175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn * limitations under the License. 150175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn */ 160175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn 17b75cce0389748bea111ca62af623645117e12d9dMark Salyzynpackage com.android.systemui.recents.views; 188daa9af02dc0e63ce220e3fa95bf5fe4d6b7a99aMark Salyzyn 198daa9af02dc0e63ce220e3fa95bf5fe4d6b7a99aMark Salyzynimport android.app.Activity; 200175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzynimport android.content.Context; 210175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzynimport android.view.View; 220175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzynimport android.view.animation.AnimationUtils; 230175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzynimport android.view.animation.Interpolator; 240175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzynimport com.android.systemui.R; 250175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzynimport com.android.systemui.recents.RecentsActivityLaunchState; 260175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzynimport com.android.systemui.recents.RecentsConfiguration; 270175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzynimport com.android.systemui.recents.events.activity.DismissRecentsToHomeAnimationStarted; 280175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzynimport com.android.systemui.recents.events.activity.EnterRecentsWindowAnimationStartedEvent; 29fa3716b2501ccddc8e0cd30f6343692b8deb7639Mark Salyzyn 30b75cce0389748bea111ca62af623645117e12d9dMark Salyzyn/** Manages the scrims for the various system bars. */ 317718778793b106498b931dd708a466cf3a6f6a0fMark Salyzynpublic class SystemBarScrimViews { 327718778793b106498b931dd708a466cf3a6f6a0fMark Salyzyn 337718778793b106498b931dd708a466cf3a6f6a0fMark Salyzyn Context mContext; 347718778793b106498b931dd708a466cf3a6f6a0fMark Salyzyn RecentsConfiguration mConfig; 35047cc0729fd837a03b99db901941c1421ef15f96Mark Salyzyn 367718778793b106498b931dd708a466cf3a6f6a0fMark Salyzyn View mStatusBarScrimView; 377718778793b106498b931dd708a466cf3a6f6a0fMark Salyzyn View mNavBarScrimView; 387718778793b106498b931dd708a466cf3a6f6a0fMark Salyzyn 397718778793b106498b931dd708a466cf3a6f6a0fMark Salyzyn boolean mHasNavBarScrim; 407718778793b106498b931dd708a466cf3a6f6a0fMark Salyzyn boolean mShouldAnimateStatusBarScrim; 417718778793b106498b931dd708a466cf3a6f6a0fMark Salyzyn boolean mHasStatusBarScrim; 427718778793b106498b931dd708a466cf3a6f6a0fMark Salyzyn boolean mShouldAnimateNavBarScrim; 437718778793b106498b931dd708a466cf3a6f6a0fMark Salyzyn 447718778793b106498b931dd708a466cf3a6f6a0fMark Salyzyn int mNavBarScrimEnterDuration; 457718778793b106498b931dd708a466cf3a6f6a0fMark Salyzyn 46b75cce0389748bea111ca62af623645117e12d9dMark Salyzyn Interpolator mFastOutSlowInInterpolator; 47b75cce0389748bea111ca62af623645117e12d9dMark Salyzyn Interpolator mQuintOutInterpolator; 487718778793b106498b931dd708a466cf3a6f6a0fMark Salyzyn 497718778793b106498b931dd708a466cf3a6f6a0fMark Salyzyn public SystemBarScrimViews(Activity activity) { 50a16f761faa258415b521aa6c9376c58d6c865529Mark Salyzyn mContext = activity; 510175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn mConfig = RecentsConfiguration.getInstance(); 520175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn mStatusBarScrimView = activity.findViewById(R.id.status_bar_scrim); 53765f7828918b0eebe70ab9b16c31a2587969fc7eMark Salyzyn mNavBarScrimView = activity.findViewById(R.id.nav_bar_scrim); 54765f7828918b0eebe70ab9b16c31a2587969fc7eMark Salyzyn mNavBarScrimEnterDuration = activity.getResources().getInteger( 550175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn R.integer.recents_nav_bar_scrim_enter_duration); 56765f7828918b0eebe70ab9b16c31a2587969fc7eMark Salyzyn mFastOutSlowInInterpolator = AnimationUtils.loadInterpolator(activity, 57765f7828918b0eebe70ab9b16c31a2587969fc7eMark Salyzyn com.android.internal.R.interpolator.fast_out_slow_in); 58765f7828918b0eebe70ab9b16c31a2587969fc7eMark Salyzyn mQuintOutInterpolator = AnimationUtils.loadInterpolator(activity, 59765f7828918b0eebe70ab9b16c31a2587969fc7eMark Salyzyn com.android.internal.R.interpolator.decelerate_quint); 60765f7828918b0eebe70ab9b16c31a2587969fc7eMark Salyzyn } 61765f7828918b0eebe70ab9b16c31a2587969fc7eMark Salyzyn 62765f7828918b0eebe70ab9b16c31a2587969fc7eMark Salyzyn /** 63765f7828918b0eebe70ab9b16c31a2587969fc7eMark Salyzyn * Prepares the scrim views for animating when entering Recents. This will be called before 640175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn * the first draw. 65765f7828918b0eebe70ab9b16c31a2587969fc7eMark Salyzyn */ 66765f7828918b0eebe70ab9b16c31a2587969fc7eMark Salyzyn public void prepareEnterRecentsAnimation() { 67765f7828918b0eebe70ab9b16c31a2587969fc7eMark Salyzyn RecentsActivityLaunchState launchState = mConfig.getLaunchState(); 68765f7828918b0eebe70ab9b16c31a2587969fc7eMark Salyzyn mHasNavBarScrim = launchState.hasNavBarScrim(); 69765f7828918b0eebe70ab9b16c31a2587969fc7eMark Salyzyn mShouldAnimateNavBarScrim = launchState.shouldAnimateNavBarScrim(); 700175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn mHasStatusBarScrim = launchState.hasStatusBarScrim(); 71765f7828918b0eebe70ab9b16c31a2587969fc7eMark Salyzyn mShouldAnimateStatusBarScrim = launchState.shouldAnimateStatusBarScrim(); 720175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn 730175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn mNavBarScrimView.setVisibility(mHasNavBarScrim && !mShouldAnimateNavBarScrim ? 740175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn View.VISIBLE : View.INVISIBLE); 750175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn mStatusBarScrimView.setVisibility(mHasStatusBarScrim && !mShouldAnimateStatusBarScrim ? 760175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn View.VISIBLE : View.INVISIBLE); 770175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn } 780175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn 790175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn /**** EventBus events ****/ 800175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn 810175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn /** 820175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn * Starts animating the scrim views when entering Recents. 830175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn */ 840175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn public final void onBusEvent(EnterRecentsWindowAnimationStartedEvent event) { 850175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn RecentsActivityLaunchState launchState = mConfig.getLaunchState(); 860175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn int transitionEnterFromAppDelay = mContext.getResources().getInteger( 870175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn R.integer.recents_enter_from_app_transition_duration); 880175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn int transitionEnterFromHomeDelay = mContext.getResources().getInteger( 890175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn R.integer.recents_enter_from_home_transition_duration); 900175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn 910175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn if (mHasStatusBarScrim && mShouldAnimateStatusBarScrim) { 920175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn mStatusBarScrimView.setTranslationY(-mStatusBarScrimView.getMeasuredHeight()); 93c3484161980cdea915c893a233f54b14a75d151fMark Salyzyn mStatusBarScrimView.animate() 940175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn .translationY(0) 950175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn .setStartDelay(launchState.launchedFromHome ? 960175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn transitionEnterFromHomeDelay : 970175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn transitionEnterFromAppDelay) 980175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn .setDuration(mNavBarScrimEnterDuration) 990175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn .setInterpolator(mQuintOutInterpolator) 1000175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn .withStartAction(new Runnable() { 1010175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn @Override 1020175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn public void run() { 1030175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn mStatusBarScrimView.setVisibility(View.VISIBLE); 1040175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn } 1050175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn }) 1060175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn .start(); 107a16f761faa258415b521aa6c9376c58d6c865529Mark Salyzyn } 1080175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn if (mHasNavBarScrim && mShouldAnimateNavBarScrim) { 1090175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn mNavBarScrimView.setTranslationY(mNavBarScrimView.getMeasuredHeight()); 1100175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn mNavBarScrimView.animate() 1110175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn .translationY(0) 1120175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn .setStartDelay(launchState.launchedFromHome ? 1130175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn transitionEnterFromHomeDelay : 1148daa9af02dc0e63ce220e3fa95bf5fe4d6b7a99aMark Salyzyn transitionEnterFromAppDelay) 1158daa9af02dc0e63ce220e3fa95bf5fe4d6b7a99aMark Salyzyn .setDuration(mNavBarScrimEnterDuration) 1160175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn .setInterpolator(mQuintOutInterpolator) 1170175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn .withStartAction(new Runnable() { 1180175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn @Override 1190175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn public void run() { 1200175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn mNavBarScrimView.setVisibility(View.VISIBLE); 1210175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn } 1220175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn }) 123a16f761faa258415b521aa6c9376c58d6c865529Mark Salyzyn .start(); 1240175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn } 1250175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn } 1260175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn 1270175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn /** 1280175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn * Starts animating the scrim views when leaving Recents (either via launching a task, or 1298fa8896d2ed97eb274c62f0e386dabf2e2a82a45Mark Salyzyn * going home). 1300175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn */ 131047cc0729fd837a03b99db901941c1421ef15f96Mark Salyzyn public final void onBusEvent(DismissRecentsToHomeAnimationStarted event) { 132047cc0729fd837a03b99db901941c1421ef15f96Mark Salyzyn int taskViewExitToAppDuration = mContext.getResources().getInteger( 1330175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn R.integer.recents_task_exit_to_app_duration); 1340175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn if (mHasStatusBarScrim && mShouldAnimateStatusBarScrim) { 135de4bb9c1a704d0eab3320b43c3964342f4b662dfMark Salyzyn mStatusBarScrimView.animate() 1360175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn .translationY(-mStatusBarScrimView.getMeasuredHeight()) 137de4bb9c1a704d0eab3320b43c3964342f4b662dfMark Salyzyn .setStartDelay(0) 138b75cce0389748bea111ca62af623645117e12d9dMark Salyzyn .setDuration(taskViewExitToAppDuration) 139b75cce0389748bea111ca62af623645117e12d9dMark Salyzyn .setInterpolator(mFastOutSlowInInterpolator) 140b75cce0389748bea111ca62af623645117e12d9dMark Salyzyn .start(); 141b75cce0389748bea111ca62af623645117e12d9dMark Salyzyn } 142b75cce0389748bea111ca62af623645117e12d9dMark Salyzyn if (mHasNavBarScrim && mShouldAnimateNavBarScrim) { 143b75cce0389748bea111ca62af623645117e12d9dMark Salyzyn mNavBarScrimView.animate() 144b75cce0389748bea111ca62af623645117e12d9dMark Salyzyn .translationY(mNavBarScrimView.getMeasuredHeight()) 145b75cce0389748bea111ca62af623645117e12d9dMark Salyzyn .setStartDelay(0) 146b75cce0389748bea111ca62af623645117e12d9dMark Salyzyn .setDuration(taskViewExitToAppDuration) 147b75cce0389748bea111ca62af623645117e12d9dMark Salyzyn .setInterpolator(mFastOutSlowInInterpolator) 148b75cce0389748bea111ca62af623645117e12d9dMark Salyzyn .start(); 149b75cce0389748bea111ca62af623645117e12d9dMark Salyzyn } 150b75cce0389748bea111ca62af623645117e12d9dMark Salyzyn } 1510175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn} 1520175b0747a1f55329109e84c9a1322dcb95e2848Mark Salyzyn