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