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