1c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler/*
2c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler * Copyright (C) 2012 The Android Open Source Project
3c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler *
4c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler * Licensed under the Apache License, Version 2.0 (the "License");
5c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler * you may not use this file except in compliance with the License.
6c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler * You may obtain a copy of the License at
7c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler *
8c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler *      http://www.apache.org/licenses/LICENSE-2.0
9c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler *
10c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler * Unless required by applicable law or agreed to in writing, software
11c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler * distributed under the License is distributed on an "AS IS" BASIS,
12c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler * See the License for the specific language governing permissions and
14c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler * limitations under the License.
15c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler */
16c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler
17c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandlerpackage com.android.systemui.statusbar.phone;
18c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler
190bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roosimport android.annotation.ColorInt;
200bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roosimport android.annotation.DrawableRes;
210bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roosimport android.annotation.LayoutRes;
22257f283b0e4cc1c1fa4e7f2472d3ee4ab3b451d0John Spurlockimport android.app.StatusBarManager;
23c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandlerimport android.content.Context;
240bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roosimport android.content.res.Configuration;
252f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roosimport android.content.res.TypedArray;
26198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandlerimport android.graphics.Canvas;
27198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandlerimport android.graphics.Paint;
28a0fad3ba06d0352f640532e69ed3d540b3795535Selim Cinekimport android.graphics.PorterDuff;
29a0fad3ba06d0352f640532e69ed3d540b3795535Selim Cinekimport android.graphics.PorterDuffXfermode;
30fba9120ce12c854a80d5ed3faf5bcca33a7a1b91John Spurlockimport android.graphics.Rect;
310bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roosimport android.graphics.drawable.Drawable;
320b99ea94f02b1002ef65aa64363d396a8876b583John Spurlockimport android.media.session.MediaSessionLegacyHelper;
330bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roosimport android.net.Uri;
340bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roosimport android.os.Bundle;
35a0fad3ba06d0352f640532e69ed3d540b3795535Selim Cinekimport android.os.IBinder;
36c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandlerimport android.util.AttributeSet;
370bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roosimport android.view.ActionMode;
380bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roosimport android.view.InputQueue;
39c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandlerimport android.view.KeyEvent;
400bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roosimport android.view.LayoutInflater;
410bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roosimport android.view.Menu;
420bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roosimport android.view.MenuItem;
435de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wrenimport android.view.MotionEvent;
440bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roosimport android.view.SurfaceHolder;
45b4e56edde684c2a09cb225c99571fddb39b43b34Daniel Sandlerimport android.view.View;
460bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roosimport android.view.ViewGroup;
470bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roosimport android.view.ViewTreeObserver;
480bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roosimport android.view.Window;
49a0fad3ba06d0352f640532e69ed3d540b3795535Selim Cinekimport android.view.WindowManager;
50a0fad3ba06d0352f640532e69ed3d540b3795535Selim Cinekimport android.view.WindowManagerGlobal;
51c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandlerimport android.widget.FrameLayout;
52c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler
530bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roosimport com.android.internal.view.FloatingActionMode;
540bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roosimport com.android.internal.widget.FloatingToolbar;
555de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wrenimport com.android.systemui.R;
560e2ffbd48bbedf47deb7f6aed96bd07e2fc96f53Blazej Magnowskiimport com.android.systemui.classifier.FalsingManager;
57198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandlerimport com.android.systemui.statusbar.BaseStatusBar;
58ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggiimport com.android.systemui.statusbar.DragDownHelper;
59ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggiimport com.android.systemui.statusbar.StatusBarState;
60fab078b01fbad026f006744016272327f7ab116bSelim Cinekimport com.android.systemui.statusbar.stack.NotificationStackScrollLayout;
615de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren
62c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler
63ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggipublic class StatusBarWindowView extends FrameLayout {
64198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandler    public static final String TAG = "StatusBarWindowView";
65198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandler    public static final boolean DEBUG = BaseStatusBar.DEBUG;
665de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren
67ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi    private DragDownHelper mDragDownHelper;
68b6d85ebfe4f9f5d3b7d7ab7b6123af02a0deb516Selim Cinek    private NotificationStackScrollLayout mStackScrollLayout;
69b4e56edde684c2a09cb225c99571fddb39b43b34Daniel Sandler    private NotificationPanelView mNotificationPanel;
709dc3209913cf3bcb6b46b6481321a054667be9a3Adrian Roos    private View mBrightnessMirror;
715de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren
722f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos    private int mRightInset = 0;
7385d202b18ada8dc95f151087ab9778d1a31f7a30Adrian Roos    private int mLeftInset = 0;
742f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos
754e6b2d3e7d2c78c0575c14045469c36ab09a6a4eSelim Cinek    private PhoneStatusBar mService;
76a0fad3ba06d0352f640532e69ed3d540b3795535Selim Cinek    private final Paint mTransparentSrcPaint = new Paint();
770e2ffbd48bbedf47deb7f6aed96bd07e2fc96f53Blazej Magnowski    private FalsingManager mFalsingManager;
78c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler
790bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos    // Implements the floating action mode for TextView's Cut/Copy/Past menu. Normally provided by
800bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos    // DecorView, but since this is a special window we have to roll our own.
810bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos    private View mFloatingActionModeOriginatingView;
820bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos    private ActionMode mFloatingActionMode;
830bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos    private FloatingToolbar mFloatingToolbar;
840bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos    private ViewTreeObserver.OnPreDrawListener mFloatingToolbarPreDrawListener;
850bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
86c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler    public StatusBarWindowView(Context context, AttributeSet attrs) {
87c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler        super(context, attrs);
885de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren        setMotionEventSplittingEnabled(false);
89a0fad3ba06d0352f640532e69ed3d540b3795535Selim Cinek        mTransparentSrcPaint.setColor(0);
90a0fad3ba06d0352f640532e69ed3d540b3795535Selim Cinek        mTransparentSrcPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC));
910e2ffbd48bbedf47deb7f6aed96bd07e2fc96f53Blazej Magnowski        mFalsingManager = FalsingManager.getInstance(context);
925de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren    }
935de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren
945de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren    @Override
95fba9120ce12c854a80d5ed3faf5bcca33a7a1b91John Spurlock    protected boolean fitSystemWindows(Rect insets) {
96fba9120ce12c854a80d5ed3faf5bcca33a7a1b91John Spurlock        if (getFitsSystemWindows()) {
9785d202b18ada8dc95f151087ab9778d1a31f7a30Adrian Roos            boolean paddingChanged = insets.top != getPaddingTop()
98416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi                    || insets.bottom != getPaddingBottom();
99aa8061448ec5a0e3cef9685f4186fc94e09eb78eJorim Jaggi
1002f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos            // Super-special right inset handling, because scrims and backdrop need to ignore it.
10185d202b18ada8dc95f151087ab9778d1a31f7a30Adrian Roos            if (insets.right != mRightInset || insets.left != mLeftInset) {
1022f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos                mRightInset = insets.right;
10385d202b18ada8dc95f151087ab9778d1a31f7a30Adrian Roos                mLeftInset = insets.left;
1042f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos                applyMargins();
1052f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos            }
10685d202b18ada8dc95f151087ab9778d1a31f7a30Adrian Roos            // Drop top inset, and pass through bottom inset.
1072f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos            if (paddingChanged) {
10885d202b18ada8dc95f151087ab9778d1a31f7a30Adrian Roos                setPadding(0, 0, 0, 0);
109416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi            }
110d7daab7b9e33cd56f2692b9ebea87ef21290c1eaJorim Jaggi            insets.left = 0;
111d7daab7b9e33cd56f2692b9ebea87ef21290c1eaJorim Jaggi            insets.top = 0;
112d7daab7b9e33cd56f2692b9ebea87ef21290c1eaJorim Jaggi            insets.right = 0;
113fba9120ce12c854a80d5ed3faf5bcca33a7a1b91John Spurlock        } else {
11485d202b18ada8dc95f151087ab9778d1a31f7a30Adrian Roos            if (mRightInset != 0 || mLeftInset != 0) {
115e49e409311a57dd798131f29c05b9060b4075cafAdrian Roos                mRightInset = 0;
11685d202b18ada8dc95f151087ab9778d1a31f7a30Adrian Roos                mLeftInset = 0;
117e49e409311a57dd798131f29c05b9060b4075cafAdrian Roos                applyMargins();
118e49e409311a57dd798131f29c05b9060b4075cafAdrian Roos            }
119416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi            boolean changed = getPaddingLeft() != 0
120416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi                    || getPaddingRight() != 0
121416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi                    || getPaddingTop() != 0
122416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi                    || getPaddingBottom() != 0;
123416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi            if (changed) {
124416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi                setPadding(0, 0, 0, 0);
125416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi            }
126aa8061448ec5a0e3cef9685f4186fc94e09eb78eJorim Jaggi            insets.top = 0;
127fba9120ce12c854a80d5ed3faf5bcca33a7a1b91John Spurlock        }
128d7daab7b9e33cd56f2692b9ebea87ef21290c1eaJorim Jaggi        return false;
129fba9120ce12c854a80d5ed3faf5bcca33a7a1b91John Spurlock    }
130fba9120ce12c854a80d5ed3faf5bcca33a7a1b91John Spurlock
1312f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos    private void applyMargins() {
13285d202b18ada8dc95f151087ab9778d1a31f7a30Adrian Roos        mService.mScrimController.setLeftInset(mLeftInset);
1332f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos        final int N = getChildCount();
1342f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos        for (int i = 0; i < N; i++) {
1352f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos            View child = getChildAt(i);
1362f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos            if (child.getLayoutParams() instanceof LayoutParams) {
1372f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos                LayoutParams lp = (LayoutParams) child.getLayoutParams();
13885d202b18ada8dc95f151087ab9778d1a31f7a30Adrian Roos                if (!lp.ignoreRightInset
13985d202b18ada8dc95f151087ab9778d1a31f7a30Adrian Roos                        && (lp.rightMargin != mRightInset || lp.leftMargin != mLeftInset)) {
1402f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos                    lp.rightMargin = mRightInset;
14185d202b18ada8dc95f151087ab9778d1a31f7a30Adrian Roos                    lp.leftMargin = mLeftInset;
1422f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos                    child.requestLayout();
1432f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos                }
1442f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos            }
1452f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos        }
1462f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos    }
1472f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos
1482f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos    @Override
1492f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos    public FrameLayout.LayoutParams generateLayoutParams(AttributeSet attrs) {
1502f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos        return new LayoutParams(getContext(), attrs);
1512f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos    }
1522f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos
1532f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos    @Override
1542f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos    protected FrameLayout.LayoutParams generateDefaultLayoutParams() {
1552f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos        return new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
1562f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos    }
1572f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos
158fba9120ce12c854a80d5ed3faf5bcca33a7a1b91John Spurlock    @Override
1594e6b2d3e7d2c78c0575c14045469c36ab09a6a4eSelim Cinek    protected void onFinishInflate() {
1604e6b2d3e7d2c78c0575c14045469c36ab09a6a4eSelim Cinek        super.onFinishInflate();
161b6d85ebfe4f9f5d3b7d7ab7b6123af02a0deb516Selim Cinek        mStackScrollLayout = (NotificationStackScrollLayout) findViewById(
162b6d85ebfe4f9f5d3b7d7ab7b6123af02a0deb516Selim Cinek                R.id.notification_stack_scroller);
163b4e56edde684c2a09cb225c99571fddb39b43b34Daniel Sandler        mNotificationPanel = (NotificationPanelView) findViewById(R.id.notification_panel);
1649dc3209913cf3bcb6b46b6481321a054667be9a3Adrian Roos        mBrightnessMirror = findViewById(R.id.brightness_mirror);
1654e6b2d3e7d2c78c0575c14045469c36ab09a6a4eSelim Cinek    }
1664e6b2d3e7d2c78c0575c14045469c36ab09a6a4eSelim Cinek
1674e6b2d3e7d2c78c0575c14045469c36ab09a6a4eSelim Cinek    public void setService(PhoneStatusBar service) {
1684e6b2d3e7d2c78c0575c14045469c36ab09a6a4eSelim Cinek        mService = service;
1694e6b2d3e7d2c78c0575c14045469c36ab09a6a4eSelim Cinek        mDragDownHelper = new DragDownHelper(getContext(), this, mStackScrollLayout, mService);
1704e6b2d3e7d2c78c0575c14045469c36ab09a6a4eSelim Cinek    }
1714e6b2d3e7d2c78c0575c14045469c36ab09a6a4eSelim Cinek
1724e6b2d3e7d2c78c0575c14045469c36ab09a6a4eSelim Cinek    @Override
1734e6b2d3e7d2c78c0575c14045469c36ab09a6a4eSelim Cinek    protected void onAttachedToWindow () {
1744e6b2d3e7d2c78c0575c14045469c36ab09a6a4eSelim Cinek        super.onAttachedToWindow();
175b10d885c3bb9d634c1c21178319fdf1c04c16bc3Daniel Sandler
176a0fad3ba06d0352f640532e69ed3d540b3795535Selim Cinek        // We need to ensure that our window doesn't suffer from overdraw which would normally
177a0fad3ba06d0352f640532e69ed3d540b3795535Selim Cinek        // occur if our window is translucent. Since we are drawing the whole window anyway with
178a0fad3ba06d0352f640532e69ed3d540b3795535Selim Cinek        // the scrim, we don't need the window to be cleared in the beginning.
1790e66439387e36876de94a60658917a7f3b0e6d27Jorim Jaggi        if (mService.isScrimSrcModeEnabled()) {
1800e66439387e36876de94a60658917a7f3b0e6d27Jorim Jaggi            IBinder windowToken = getWindowToken();
1810e66439387e36876de94a60658917a7f3b0e6d27Jorim Jaggi            WindowManager.LayoutParams lp = (WindowManager.LayoutParams) getLayoutParams();
1820e66439387e36876de94a60658917a7f3b0e6d27Jorim Jaggi            lp.token = windowToken;
1830e66439387e36876de94a60658917a7f3b0e6d27Jorim Jaggi            setLayoutParams(lp);
1840e66439387e36876de94a60658917a7f3b0e6d27Jorim Jaggi            WindowManagerGlobal.getInstance().changeCanvasOpacity(windowToken, true);
1850e66439387e36876de94a60658917a7f3b0e6d27Jorim Jaggi            setWillNotDraw(false);
1860e66439387e36876de94a60658917a7f3b0e6d27Jorim Jaggi        } else {
1870e66439387e36876de94a60658917a7f3b0e6d27Jorim Jaggi            setWillNotDraw(!DEBUG);
1880e66439387e36876de94a60658917a7f3b0e6d27Jorim Jaggi        }
189c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler    }
190c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler
191c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler    @Override
192c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler    public boolean dispatchKeyEvent(KeyEvent event) {
19356cf73a0f4704c2d1665ed0287fecea3cd871a51Adrian Roos        if (mService.interceptMediaKey(event)) {
19456cf73a0f4704c2d1665ed0287fecea3cd871a51Adrian Roos            return true;
19556cf73a0f4704c2d1665ed0287fecea3cd871a51Adrian Roos        }
19656cf73a0f4704c2d1665ed0287fecea3cd871a51Adrian Roos        if (super.dispatchKeyEvent(event)) {
19756cf73a0f4704c2d1665ed0287fecea3cd871a51Adrian Roos            return true;
19856cf73a0f4704c2d1665ed0287fecea3cd871a51Adrian Roos        }
199c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler        boolean down = event.getAction() == KeyEvent.ACTION_DOWN;
200c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler        switch (event.getKeyCode()) {
2018c8bcc160aba9a5e93c8df2a99a39a856fafffabJorim Jaggi            case KeyEvent.KEYCODE_BACK:
2028c8bcc160aba9a5e93c8df2a99a39a856fafffabJorim Jaggi                if (!down) {
2038c8bcc160aba9a5e93c8df2a99a39a856fafffabJorim Jaggi                    mService.onBackPressed();
2048c8bcc160aba9a5e93c8df2a99a39a856fafffabJorim Jaggi                }
2058c8bcc160aba9a5e93c8df2a99a39a856fafffabJorim Jaggi                return true;
2068c8bcc160aba9a5e93c8df2a99a39a856fafffabJorim Jaggi            case KeyEvent.KEYCODE_MENU:
2078c8bcc160aba9a5e93c8df2a99a39a856fafffabJorim Jaggi                if (!down) {
2088c8bcc160aba9a5e93c8df2a99a39a856fafffabJorim Jaggi                    return mService.onMenuPressed();
2098c8bcc160aba9a5e93c8df2a99a39a856fafffabJorim Jaggi                }
210342507697317436b1b9ac28b9952a655f7f0792fJorim Jaggi            case KeyEvent.KEYCODE_SPACE:
211342507697317436b1b9ac28b9952a655f7f0792fJorim Jaggi                if (!down) {
212342507697317436b1b9ac28b9952a655f7f0792fJorim Jaggi                    return mService.onSpacePressed();
213342507697317436b1b9ac28b9952a655f7f0792fJorim Jaggi                }
2140b99ea94f02b1002ef65aa64363d396a8876b583John Spurlock                break;
215d06aa570374ecfe5c707140a12a309b1b7c07e08John Spurlock            case KeyEvent.KEYCODE_VOLUME_DOWN:
216d06aa570374ecfe5c707140a12a309b1b7c07e08John Spurlock            case KeyEvent.KEYCODE_VOLUME_UP:
2170b99ea94f02b1002ef65aa64363d396a8876b583John Spurlock                if (mService.isDozing()) {
2180b99ea94f02b1002ef65aa64363d396a8876b583John Spurlock                    MediaSessionLegacyHelper.getHelper(mContext).sendVolumeKeyEvent(event, true);
2190b99ea94f02b1002ef65aa64363d396a8876b583John Spurlock                    return true;
220d06aa570374ecfe5c707140a12a309b1b7c07e08John Spurlock                }
2210b99ea94f02b1002ef65aa64363d396a8876b583John Spurlock                break;
222c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler        }
22356cf73a0f4704c2d1665ed0287fecea3cd871a51Adrian Roos        return false;
224c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler    }
2255de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren
2265de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren    @Override
2279dc3209913cf3bcb6b46b6481321a054667be9a3Adrian Roos    public boolean dispatchTouchEvent(MotionEvent ev) {
2280e2ffbd48bbedf47deb7f6aed96bd07e2fc96f53Blazej Magnowski        mFalsingManager.onTouchEvent(ev, getWidth(), getHeight());
2299dc3209913cf3bcb6b46b6481321a054667be9a3Adrian Roos        if (mBrightnessMirror != null && mBrightnessMirror.getVisibility() == VISIBLE) {
2309dc3209913cf3bcb6b46b6481321a054667be9a3Adrian Roos            // Disallow new pointers while the brightness mirror is visible. This is so that you
2319dc3209913cf3bcb6b46b6481321a054667be9a3Adrian Roos            // can't touch anything other than the brightness slider while the mirror is showing
2329dc3209913cf3bcb6b46b6481321a054667be9a3Adrian Roos            // and the rest of the panel is transparent.
2339dc3209913cf3bcb6b46b6481321a054667be9a3Adrian Roos            if (ev.getActionMasked() == MotionEvent.ACTION_POINTER_DOWN) {
2349dc3209913cf3bcb6b46b6481321a054667be9a3Adrian Roos                return false;
2359dc3209913cf3bcb6b46b6481321a054667be9a3Adrian Roos            }
2369dc3209913cf3bcb6b46b6481321a054667be9a3Adrian Roos        }
2377a9b2a67b71f8f6c5cffc3fe90cc4b513b79a9b2Mady Mellor        if (ev.getActionMasked() == MotionEvent.ACTION_DOWN) {
2387a9b2a67b71f8f6c5cffc3fe90cc4b513b79a9b2Mady Mellor            mStackScrollLayout.closeControlsIfOutsideTouch(ev);
2397a9b2a67b71f8f6c5cffc3fe90cc4b513b79a9b2Mady Mellor        }
2407a9b2a67b71f8f6c5cffc3fe90cc4b513b79a9b2Mady Mellor
2419dc3209913cf3bcb6b46b6481321a054667be9a3Adrian Roos        return super.dispatchTouchEvent(ev);
2429dc3209913cf3bcb6b46b6481321a054667be9a3Adrian Roos    }
2439dc3209913cf3bcb6b46b6481321a054667be9a3Adrian Roos
2449dc3209913cf3bcb6b46b6481321a054667be9a3Adrian Roos    @Override
2455de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren    public boolean onInterceptTouchEvent(MotionEvent ev) {
246b4e56edde684c2a09cb225c99571fddb39b43b34Daniel Sandler        boolean intercept = false;
247fab078b01fbad026f006744016272327f7ab116bSelim Cinek        if (mNotificationPanel.isFullyExpanded()
24803c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi                && mStackScrollLayout.getVisibility() == View.VISIBLE
2494222d9a7fb87d73e1443ec1a2de9782b05741af6Jorim Jaggi                && mService.getBarState() == StatusBarState.KEYGUARD
2504222d9a7fb87d73e1443ec1a2de9782b05741af6Jorim Jaggi                && !mService.isBouncerShowing()) {
251ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi            intercept = mDragDownHelper.onInterceptTouchEvent(ev);
2528b12f22bc1f654d0afe1a5588ed3667428b305c8John Spurlock            // wake up on a touch down event, if dozing
2538b12f22bc1f654d0afe1a5588ed3667428b305c8John Spurlock            if (ev.getActionMasked() == MotionEvent.ACTION_DOWN) {
2542a5e452f4f70d2dd717946dd50486cc66ea4cc43Jorim Jaggi                mService.wakeUpIfDozing(ev.getEventTime(), ev);
2558b12f22bc1f654d0afe1a5588ed3667428b305c8John Spurlock            }
256b4e56edde684c2a09cb225c99571fddb39b43b34Daniel Sandler        }
257b4e56edde684c2a09cb225c99571fddb39b43b34Daniel Sandler        if (!intercept) {
258b4e56edde684c2a09cb225c99571fddb39b43b34Daniel Sandler            super.onInterceptTouchEvent(ev);
259b4e56edde684c2a09cb225c99571fddb39b43b34Daniel Sandler        }
2605de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren        if (intercept) {
261a4b7f2f75e7803193429ec1179fb5e2eb1c6fbdaDianne Hackborn            MotionEvent cancellation = MotionEvent.obtain(ev);
262a4b7f2f75e7803193429ec1179fb5e2eb1c6fbdaDianne Hackborn            cancellation.setAction(MotionEvent.ACTION_CANCEL);
263b6d85ebfe4f9f5d3b7d7ab7b6123af02a0deb516Selim Cinek            mStackScrollLayout.onInterceptTouchEvent(cancellation);
26431094df5c6e3cb3a4a4faacb091e35eea1f6a5deSelim Cinek            mNotificationPanel.onInterceptTouchEvent(cancellation);
265a4b7f2f75e7803193429ec1179fb5e2eb1c6fbdaDianne Hackborn            cancellation.recycle();
2665de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren        }
2675de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren        return intercept;
2685de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren    }
2695de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren
2705de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren    @Override
2715de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren    public boolean onTouchEvent(MotionEvent ev) {
272b4e56edde684c2a09cb225c99571fddb39b43b34Daniel Sandler        boolean handled = false;
273cb9400aa23b81f12d8af198187fc799d6bcf164aSelim Cinek        if (mService.getBarState() == StatusBarState.KEYGUARD) {
274ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi            handled = mDragDownHelper.onTouchEvent(ev);
275b4e56edde684c2a09cb225c99571fddb39b43b34Daniel Sandler        }
276b4e56edde684c2a09cb225c99571fddb39b43b34Daniel Sandler        if (!handled) {
277b4e56edde684c2a09cb225c99571fddb39b43b34Daniel Sandler            handled = super.onTouchEvent(ev);
278b4e56edde684c2a09cb225c99571fddb39b43b34Daniel Sandler        }
279257f283b0e4cc1c1fa4e7f2472d3ee4ab3b451d0John Spurlock        final int action = ev.getAction();
280d157ca049abd8e6761aab7b50431343869ec831aJohn Spurlock        if (!handled && (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL)) {
281257f283b0e4cc1c1fa4e7f2472d3ee4ab3b451d0John Spurlock            mService.setInteracting(StatusBarManager.WINDOW_STATUS_BAR, false);
282257f283b0e4cc1c1fa4e7f2472d3ee4ab3b451d0John Spurlock        }
2835de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren        return handled;
2845de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren    }
285198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandler
286198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandler    @Override
287198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandler    public void onDraw(Canvas canvas) {
288198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandler        super.onDraw(canvas);
2890e66439387e36876de94a60658917a7f3b0e6d27Jorim Jaggi        if (mService.isScrimSrcModeEnabled()) {
2900e66439387e36876de94a60658917a7f3b0e6d27Jorim Jaggi            // We need to ensure that our window is always drawn fully even when we have paddings,
2910e66439387e36876de94a60658917a7f3b0e6d27Jorim Jaggi            // since we simulate it to be opaque.
2920e66439387e36876de94a60658917a7f3b0e6d27Jorim Jaggi            int paddedBottom = getHeight() - getPaddingBottom();
2930e66439387e36876de94a60658917a7f3b0e6d27Jorim Jaggi            int paddedRight = getWidth() - getPaddingRight();
2940e66439387e36876de94a60658917a7f3b0e6d27Jorim Jaggi            if (getPaddingTop() != 0) {
2950e66439387e36876de94a60658917a7f3b0e6d27Jorim Jaggi                canvas.drawRect(0, 0, getWidth(), getPaddingTop(), mTransparentSrcPaint);
2960e66439387e36876de94a60658917a7f3b0e6d27Jorim Jaggi            }
2970e66439387e36876de94a60658917a7f3b0e6d27Jorim Jaggi            if (getPaddingBottom() != 0) {
2980e66439387e36876de94a60658917a7f3b0e6d27Jorim Jaggi                canvas.drawRect(0, paddedBottom, getWidth(), getHeight(), mTransparentSrcPaint);
2990e66439387e36876de94a60658917a7f3b0e6d27Jorim Jaggi            }
3000e66439387e36876de94a60658917a7f3b0e6d27Jorim Jaggi            if (getPaddingLeft() != 0) {
3010e66439387e36876de94a60658917a7f3b0e6d27Jorim Jaggi                canvas.drawRect(0, getPaddingTop(), getPaddingLeft(), paddedBottom,
3020e66439387e36876de94a60658917a7f3b0e6d27Jorim Jaggi                        mTransparentSrcPaint);
3030e66439387e36876de94a60658917a7f3b0e6d27Jorim Jaggi            }
3040e66439387e36876de94a60658917a7f3b0e6d27Jorim Jaggi            if (getPaddingRight() != 0) {
3050e66439387e36876de94a60658917a7f3b0e6d27Jorim Jaggi                canvas.drawRect(paddedRight, getPaddingTop(), getWidth(), paddedBottom,
3060e66439387e36876de94a60658917a7f3b0e6d27Jorim Jaggi                        mTransparentSrcPaint);
3070e66439387e36876de94a60658917a7f3b0e6d27Jorim Jaggi            }
308a0fad3ba06d0352f640532e69ed3d540b3795535Selim Cinek        }
309198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandler        if (DEBUG) {
310198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandler            Paint pt = new Paint();
311198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandler            pt.setColor(0x80FFFF00);
312198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandler            pt.setStrokeWidth(12.0f);
313198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandler            pt.setStyle(Paint.Style.STROKE);
314198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandler            canvas.drawRect(0, 0, canvas.getWidth(), canvas.getHeight(), pt);
315198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandler        }
316198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandler    }
317ac47ff70c322614ff2ca9ad82fe41338daf55877Daniel Sandler
318ac47ff70c322614ff2ca9ad82fe41338daf55877Daniel Sandler    public void cancelExpandHelper() {
3191408eb5a58d669933c701e347fd3498ceab70f3cSelim Cinek        if (mStackScrollLayout != null) {
3201408eb5a58d669933c701e347fd3498ceab70f3cSelim Cinek            mStackScrollLayout.cancelExpandHelper();
3211a3bdd5097e83659590895991904bbc6250cd5f2Daniel Sandler        }
322ac47ff70c322614ff2ca9ad82fe41338daf55877Daniel Sandler    }
3232f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos
3242f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos    public class LayoutParams extends FrameLayout.LayoutParams {
3252f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos
3262f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos        public boolean ignoreRightInset;
3272f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos
3282f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos        public LayoutParams(int width, int height) {
3292f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos            super(width, height);
3302f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos        }
3312f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos
3322f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos        public LayoutParams(Context c, AttributeSet attrs) {
3332f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos            super(c, attrs);
3342f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos
3352f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos            TypedArray a = c.obtainStyledAttributes(attrs, R.styleable.StatusBarWindowView_Layout);
3362f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos            ignoreRightInset = a.getBoolean(
3372f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos                    R.styleable.StatusBarWindowView_Layout_ignoreRightInset, false);
3382f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos            a.recycle();
3392f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos        }
3402f2bd9a8f845535b6ecbf1b28aecdbd0ff3bbc63Adrian Roos    }
3410bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
3420bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos    @Override
3430bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos    public ActionMode startActionModeForChild(View originalView, ActionMode.Callback callback,
3440bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            int type) {
3450bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        if (type == ActionMode.TYPE_FLOATING) {
3460bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            return startActionMode(originalView, callback, type);
3470bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
3480bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        return super.startActionModeForChild(originalView, callback, type);
3490bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos    }
3500bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
3510bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos    private ActionMode createFloatingActionMode(
3520bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            View originatingView, ActionMode.Callback2 callback) {
3530bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        if (mFloatingActionMode != null) {
3540bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            mFloatingActionMode.finish();
3550bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
3560bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        cleanupFloatingActionModeViews();
3570bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        final FloatingActionMode mode =
3580bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos                new FloatingActionMode(mContext, callback, originatingView);
3590bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        mFloatingActionModeOriginatingView = originatingView;
3600bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        mFloatingToolbarPreDrawListener =
3610bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos                new ViewTreeObserver.OnPreDrawListener() {
3620bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos                    @Override
3630bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos                    public boolean onPreDraw() {
3640bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos                        mode.updateViewLocationInWindow();
3650bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos                        return true;
3660bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos                    }
3670bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos                };
3680bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        return mode;
3690bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos    }
3700bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
3710bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos    private void setHandledFloatingActionMode(ActionMode mode) {
3720bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        mFloatingActionMode = mode;
3730bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        mFloatingToolbar = new FloatingToolbar(mContext, mFakeWindow);
3740bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        ((FloatingActionMode) mFloatingActionMode).setFloatingToolbar(mFloatingToolbar);
3750bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        mFloatingActionMode.invalidate();  // Will show the floating toolbar if necessary.
3760bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        mFloatingActionModeOriginatingView.getViewTreeObserver()
3770bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos                .addOnPreDrawListener(mFloatingToolbarPreDrawListener);
3780bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos    }
3790bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
3800bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos    private void cleanupFloatingActionModeViews() {
3810bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        if (mFloatingToolbar != null) {
3820bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            mFloatingToolbar.dismiss();
3830bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            mFloatingToolbar = null;
3840bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
3850bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        if (mFloatingActionModeOriginatingView != null) {
3860bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            if (mFloatingToolbarPreDrawListener != null) {
3870bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos                mFloatingActionModeOriginatingView.getViewTreeObserver()
3880bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos                        .removeOnPreDrawListener(mFloatingToolbarPreDrawListener);
3890bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos                mFloatingToolbarPreDrawListener = null;
3900bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            }
3910bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            mFloatingActionModeOriginatingView = null;
3920bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
3930bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos    }
3940bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
3950bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos    private ActionMode startActionMode(
3960bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            View originatingView, ActionMode.Callback callback, int type) {
3970bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        ActionMode.Callback2 wrappedCallback = new ActionModeCallback2Wrapper(callback);
3980bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        ActionMode mode = createFloatingActionMode(originatingView, wrappedCallback);
3990bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        if (mode != null && wrappedCallback.onCreateActionMode(mode, mode.getMenu())) {
4000bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            setHandledFloatingActionMode(mode);
4010bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        } else {
4020bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            mode = null;
4030bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
4040bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        return mode;
4050bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos    }
4060bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
4070bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos    private class ActionModeCallback2Wrapper extends ActionMode.Callback2 {
4080bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        private final ActionMode.Callback mWrapped;
4090bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
4100bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public ActionModeCallback2Wrapper(ActionMode.Callback wrapped) {
4110bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            mWrapped = wrapped;
4120bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
4130bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
4140bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
4150bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            return mWrapped.onCreateActionMode(mode, menu);
4160bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
4170bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
4180bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
4190bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            requestFitSystemWindows();
4200bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            return mWrapped.onPrepareActionMode(mode, menu);
4210bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
4220bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
4230bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
4240bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            return mWrapped.onActionItemClicked(mode, item);
4250bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
4260bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
4270bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public void onDestroyActionMode(ActionMode mode) {
4280bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            mWrapped.onDestroyActionMode(mode);
4290bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            if (mode == mFloatingActionMode) {
4300bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos                cleanupFloatingActionModeViews();
4310bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos                mFloatingActionMode = null;
4320bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            }
4330bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            requestFitSystemWindows();
4340bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
4350bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
4360bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
4370bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public void onGetContentRect(ActionMode mode, View view, Rect outRect) {
4380bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            if (mWrapped instanceof ActionMode.Callback2) {
4390bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos                ((ActionMode.Callback2) mWrapped).onGetContentRect(mode, view, outRect);
4400bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            } else {
4410bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos                super.onGetContentRect(mode, view, outRect);
4420bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            }
4430bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
4440bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos    }
4450bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
4460bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos    /**
4470bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos     * Minimal window to satisfy FloatingToolbar.
4480bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos     */
4490bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos    private Window mFakeWindow = new Window(mContext) {
4500bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
4510bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public void takeSurface(SurfaceHolder.Callback2 callback) {
4520bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
4530bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
4540bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
4550bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public void takeInputQueue(InputQueue.Callback callback) {
4560bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
4570bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
4580bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
4590bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public boolean isFloating() {
4600bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            return false;
4610bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
4620bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
4630bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
4640bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public void alwaysReadCloseOnTouchAttr() {
4650bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
4660bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
4670bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
4680bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public void setContentView(@LayoutRes int layoutResID) {
4690bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
4700bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
4710bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
4720bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public void setContentView(View view) {
4730bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
4740bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
4750bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
4760bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public void setContentView(View view, ViewGroup.LayoutParams params) {
4770bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
4780bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
4790bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
4800bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public void addContentView(View view, ViewGroup.LayoutParams params) {
4810bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
4820bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
4830bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
4840bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public void clearContentView() {
4850bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
4860bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
4870bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
4880bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public View getCurrentFocus() {
4890bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            return null;
4900bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
4910bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
4920bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
4930bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public LayoutInflater getLayoutInflater() {
4940bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            return null;
4950bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
4960bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
4970bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
4980bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public void setTitle(CharSequence title) {
4990bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
5000bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
5010bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
5020bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public void setTitleColor(@ColorInt int textColor) {
5030bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
5040bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
5050bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
5060bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public void openPanel(int featureId, KeyEvent event) {
5070bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
5080bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
5090bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
5100bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public void closePanel(int featureId) {
5110bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
5120bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
5130bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
5140bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public void togglePanel(int featureId, KeyEvent event) {
5150bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
5160bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
5170bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
5180bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public void invalidatePanelMenu(int featureId) {
5190bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
5200bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
5210bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
5220bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public boolean performPanelShortcut(int featureId, int keyCode, KeyEvent event, int flags) {
5230bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            return false;
5240bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
5250bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
5260bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
5270bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public boolean performPanelIdentifierAction(int featureId, int id, int flags) {
5280bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            return false;
5290bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
5300bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
5310bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
5320bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public void closeAllPanels() {
5330bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
5340bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
5350bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
5360bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public boolean performContextMenuIdentifierAction(int id, int flags) {
5370bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            return false;
5380bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
5390bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
5400bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
5410bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public void onConfigurationChanged(Configuration newConfig) {
5420bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
5430bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
5440bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
5450bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public void setBackgroundDrawable(Drawable drawable) {
5460bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
5470bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
5480bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
5490bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public void setFeatureDrawableResource(int featureId, @DrawableRes int resId) {
5500bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
5510bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
5520bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
5530bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public void setFeatureDrawableUri(int featureId, Uri uri) {
5540bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
5550bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
5560bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
5570bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public void setFeatureDrawable(int featureId, Drawable drawable) {
5580bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
5590bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
5600bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
5610bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public void setFeatureDrawableAlpha(int featureId, int alpha) {
5620bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
5630bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
5640bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
5650bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public void setFeatureInt(int featureId, int value) {
5660bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
5670bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
5680bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
5690bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public void takeKeyEvents(boolean get) {
5700bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
5710bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
5720bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
5730bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public boolean superDispatchKeyEvent(KeyEvent event) {
5740bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            return false;
5750bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
5760bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
5770bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
5780bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public boolean superDispatchKeyShortcutEvent(KeyEvent event) {
5790bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            return false;
5800bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
5810bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
5820bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
5830bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public boolean superDispatchTouchEvent(MotionEvent event) {
5840bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            return false;
5850bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
5860bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
5870bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
5880bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public boolean superDispatchTrackballEvent(MotionEvent event) {
5890bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            return false;
5900bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
5910bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
5920bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
5930bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public boolean superDispatchGenericMotionEvent(MotionEvent event) {
5940bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            return false;
5950bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
5960bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
5970bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
5980bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public View getDecorView() {
5990bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            return StatusBarWindowView.this;
6000bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
6010bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
6020bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
6030bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public View peekDecorView() {
6040bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            return null;
6050bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
6060bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
6070bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
6080bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public Bundle saveHierarchyState() {
6090bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            return null;
6100bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
6110bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
6120bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
6130bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public void restoreHierarchyState(Bundle savedInstanceState) {
6140bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
6150bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
6160bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
6170bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        protected void onActive() {
6180bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
6190bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
6200bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
6210bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public void setChildDrawable(int featureId, Drawable drawable) {
6220bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
6230bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
6240bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
6250bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public void setChildInt(int featureId, int value) {
6260bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
6270bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
6280bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
6290bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public boolean isShortcutKey(int keyCode, KeyEvent event) {
6300bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            return false;
6310bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
6320bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
6330bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
6340bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public void setVolumeControlStream(int streamType) {
6350bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
6360bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
6370bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
6380bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public int getVolumeControlStream() {
6390bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            return 0;
6400bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
6410bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
6420bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
6430bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public int getStatusBarColor() {
6440bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            return 0;
6450bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
6460bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
6470bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
6480bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public void setStatusBarColor(@ColorInt int color) {
6490bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
6500bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
6510bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
6520bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public int getNavigationBarColor() {
6530bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos            return 0;
6540bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
6550bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
6560bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
6570bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public void setNavigationBarColor(@ColorInt int color) {
6580bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
6590bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
6600bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
6610bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public void setDecorCaptionShade(int decorCaptionShade) {
6620bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
6630bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
6640bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
6650bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public void setResizingCaptionDrawable(Drawable drawable) {
6660bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
6670bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
6680bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
669933076d80561751618f462b26309ce9e4c3ff3bfAndrii Kulian        public void onMultiWindowModeChanged() {
6700bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
6710bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
6720bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        @Override
6730bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        public void reportActivityRelaunched() {
6740bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos        }
6750bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos    };
6760bd8a4b29bf92a901855d889c53186383dd2c5e7Adrian Roos
677c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler}
678c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler
679