118cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri/* 218cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri * Copyright (C) 2015 The Android Open Source Project 318cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri * 418cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri * Licensed under the Apache License, Version 2.0 (the "License"); 518cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri * you may not use this file except in compliance with the License. 618cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri * You may obtain a copy of the License at 718cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri * 818cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri * http://www.apache.org/licenses/LICENSE-2.0 918cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri * 1018cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri * Unless required by applicable law or agreed to in writing, software 1118cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri * distributed under the License is distributed on an "AS IS" BASIS, 1218cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1318cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri * See the License for the specific language governing permissions and 1418cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri * limitations under the License. 1518cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri */ 1618cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 1718cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarripackage com.android.internal.policy; 1818cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 1918cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarriimport android.test.ActivityInstrumentationTestCase2; 2018cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarriimport android.test.UiThreadTest; 2118cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarriimport android.view.ActionMode; 2218cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarriimport android.view.ActionMode.Callback; 2318cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarriimport android.view.KeyEvent; 2418cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarriimport android.view.Menu; 2518cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarriimport android.view.MenuInflater; 2618cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarriimport android.view.MenuItem; 2718cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarriimport android.view.MotionEvent; 2818cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarriimport android.view.SearchEvent; 2918cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarriimport android.view.View; 3018cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarriimport android.view.Window; 3118cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarriimport android.view.WindowManager.LayoutParams; 3218cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarriimport android.view.accessibility.AccessibilityEvent; 3318cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 3418cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri/** 3518cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri * Tests {@link PhoneWindow}'s {@link ActionMode} related methods. 3618cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri */ 3718cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarripublic final class PhoneWindowActionModeTest 3818cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri extends ActivityInstrumentationTestCase2<PhoneWindowActionModeTestActivity> { 3918cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 4018cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri private PhoneWindow mPhoneWindow; 4118cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri private MockWindowCallback mWindowCallback; 4218cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri private MockActionModeCallback mActionModeCallback; 4318cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 4418cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public PhoneWindowActionModeTest() { 4518cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri super(PhoneWindowActionModeTestActivity.class); 4618cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 4718cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 4818cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 4918cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri protected void setUp() throws Exception { 5018cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri super.setUp(); 5118cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri mPhoneWindow = (PhoneWindow) getActivity().getWindow(); 5218cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri mWindowCallback = new MockWindowCallback(); 5318cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri mPhoneWindow.setCallback(mWindowCallback); 5418cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri mActionModeCallback = new MockActionModeCallback(); 5518cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 5618cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 5718cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public void testStartActionModeWithCallback() { 5818cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri mWindowCallback.mShouldReturnOwnActionMode = true; 5918cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 6018cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri ActionMode mode = mPhoneWindow.getDecorView().startActionMode( 6118cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri mActionModeCallback, ActionMode.TYPE_FLOATING); 6218cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 6318cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri assertEquals(mWindowCallback.mLastCreatedActionMode, mode); 6418cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 6518cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 6618cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public void testStartActionModePrimaryFinishesPreviousMode() { 6718cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri // Use custom callback to control the provided ActionMode. 6818cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri mWindowCallback.mShouldReturnOwnActionMode = true; 6918cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 7018cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri ActionMode mode1 = mPhoneWindow.getDecorView().startActionMode( 7118cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri mActionModeCallback, ActionMode.TYPE_PRIMARY); 7218cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri ActionMode mode2 = mPhoneWindow.getDecorView().startActionMode( 7318cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri mActionModeCallback, ActionMode.TYPE_PRIMARY); 7418cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 7518cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri assertTrue(mode1 instanceof MockActionMode); 7618cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri assertTrue(((MockActionMode) mode1).mIsFinished); 7718cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri assertNotNull(mode2); 7818cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 7918cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 8018cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public void testStartActionModeFloatingFinishesPreviousMode() { 8118cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri // Use custom callback to control the provided ActionMode. 8218cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri mWindowCallback.mShouldReturnOwnActionMode = true; 8318cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 8418cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri ActionMode mode1 = mPhoneWindow.getDecorView().startActionMode( 8518cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri mActionModeCallback, ActionMode.TYPE_FLOATING); 8618cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri ActionMode mode2 = mPhoneWindow.getDecorView().startActionMode( 8718cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri mActionModeCallback, ActionMode.TYPE_FLOATING); 8818cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 8918cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri assertTrue(mode1 instanceof MockActionMode); 9018cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri assertTrue(((MockActionMode) mode1).mIsFinished); 9118cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri assertNotNull(mode2); 9218cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 9318cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 9418cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public void testStartActionModePreservesPreviousModeOfDifferentType1() { 9518cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri // Use custom callback to control the provided ActionMode. 9618cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri mWindowCallback.mShouldReturnOwnActionMode = true; 9718cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 9818cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri ActionMode mode1 = mPhoneWindow.getDecorView().startActionMode( 9918cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri mActionModeCallback, ActionMode.TYPE_FLOATING); 10018cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri ActionMode mode2 = mPhoneWindow.getDecorView().startActionMode( 10118cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri mActionModeCallback, ActionMode.TYPE_PRIMARY); 10218cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 10318cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri assertTrue(mode1 instanceof MockActionMode); 10418cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri assertFalse(((MockActionMode) mode1).mIsFinished); 10518cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri assertNotNull(mode2); 10618cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 10718cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 10818cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public void testStartActionModePreservesPreviousModeOfDifferentType2() { 10918cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri // Use custom callback to control the provided ActionMode. 11018cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri mWindowCallback.mShouldReturnOwnActionMode = true; 11118cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 11218cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri ActionMode mode1 = mPhoneWindow.getDecorView().startActionMode( 11318cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri mActionModeCallback, ActionMode.TYPE_PRIMARY); 11418cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri ActionMode mode2 = mPhoneWindow.getDecorView().startActionMode( 11518cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri mActionModeCallback, ActionMode.TYPE_FLOATING); 11618cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 11718cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri assertTrue(mode1 instanceof MockActionMode); 11818cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri assertFalse(((MockActionMode) mode1).mIsFinished); 11918cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri assertNotNull(mode2); 12018cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 12118cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 12218cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public void testWindowCallbackModesLifecycleIsNotHandled() { 12318cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri mWindowCallback.mShouldReturnOwnActionMode = true; 12418cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 12518cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri ActionMode mode = mPhoneWindow.getDecorView().startActionMode( 12618cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri mActionModeCallback, ActionMode.TYPE_PRIMARY); 12718cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 12818cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri assertNotNull(mode); 12918cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri assertEquals(mWindowCallback.mLastCreatedActionMode, mode); 13018cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri assertFalse(mActionModeCallback.mIsCreateActionModeCalled); 13118cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri assertTrue(mWindowCallback.mIsActionModeStarted); 13218cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 13318cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 13418cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @UiThreadTest 13518cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public void testCreatedPrimaryModeLifecycleIsHandled() { 13618cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri mWindowCallback.mShouldReturnOwnActionMode = false; 13718cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 13818cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri ActionMode mode = mPhoneWindow.getDecorView().startActionMode( 13918cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri mActionModeCallback, ActionMode.TYPE_PRIMARY); 14018cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 14118cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri assertNotNull(mode); 14218cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri assertEquals(ActionMode.TYPE_PRIMARY, mode.getType()); 14318cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri assertTrue(mActionModeCallback.mIsCreateActionModeCalled); 14418cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri assertTrue(mWindowCallback.mIsActionModeStarted); 14518cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 14618cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 14718cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @UiThreadTest 14818cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public void testCreatedFloatingModeLifecycleIsHandled() { 14918cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri mWindowCallback.mShouldReturnOwnActionMode = false; 15018cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 15118cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri ActionMode mode = mPhoneWindow.getDecorView().startActionMode( 15218cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri mActionModeCallback, ActionMode.TYPE_FLOATING); 15318cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 15418cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri assertNotNull(mode); 15518cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri assertEquals(ActionMode.TYPE_FLOATING, mode.getType()); 15618cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri assertTrue(mActionModeCallback.mIsCreateActionModeCalled); 15718cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri assertTrue(mWindowCallback.mIsActionModeStarted); 15818cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 15918cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 16018cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @UiThreadTest 16118cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public void testCreatedModeIsNotStartedIfCreateReturnsFalse() { 16218cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri mWindowCallback.mShouldReturnOwnActionMode = false; 16318cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri mActionModeCallback.mShouldCreateActionMode = false; 16418cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 16518cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri ActionMode mode = mPhoneWindow.getDecorView().startActionMode( 16618cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri mActionModeCallback, ActionMode.TYPE_FLOATING); 16718cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 16818cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri assertTrue(mActionModeCallback.mIsCreateActionModeCalled); 16918cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri assertFalse(mWindowCallback.mIsActionModeStarted); 17018cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri assertNull(mode); 17118cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 17218cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 17318cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri private static final class MockWindowCallback implements Window.Callback { 17418cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri private boolean mShouldReturnOwnActionMode = false; 17518cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri private MockActionMode mLastCreatedActionMode; 17618cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri private boolean mIsActionModeStarted = false; 17718cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 17818cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 17918cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public boolean dispatchKeyEvent(KeyEvent event) { 18018cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri return false; 18118cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 18218cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 18318cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 18418cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public boolean dispatchKeyShortcutEvent(KeyEvent event) { 18518cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri return false; 18618cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 18718cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 18818cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 18918cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public boolean dispatchTouchEvent(MotionEvent event) { 19018cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri return false; 19118cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 19218cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 19318cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 19418cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public boolean dispatchTrackballEvent(MotionEvent event) { 19518cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri return false; 19618cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 19718cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 19818cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 19918cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public boolean dispatchGenericMotionEvent(MotionEvent event) { 20018cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri return false; 20118cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 20218cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 20318cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 20418cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) { 20518cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri return false; 20618cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 20718cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 20818cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 20918cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public View onCreatePanelView(int featureId) { 21018cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri return null; 21118cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 21218cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 21318cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 21418cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public boolean onCreatePanelMenu(int featureId, Menu menu) { 21518cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri return false; 21618cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 21718cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 21818cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 21918cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public boolean onPreparePanel(int featureId, View view, Menu menu) { 22018cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri return false; 22118cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 22218cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 22318cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 22418cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public boolean onMenuOpened(int featureId, Menu menu) { 22518cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri return false; 22618cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 22718cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 22818cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 22918cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public boolean onMenuItemSelected(int featureId, MenuItem item) { 23018cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri return false; 23118cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 23218cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 23318cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 23418cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public void onWindowAttributesChanged(LayoutParams attrs) {} 23518cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 23618cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 23718cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public void onContentChanged() {} 23818cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 23918cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 24018cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public void onWindowFocusChanged(boolean hasFocus) {} 24118cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 24218cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 24318cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public void onAttachedToWindow() {} 24418cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 24518cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 24618cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public void onDetachedFromWindow() {} 24718cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 24818cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 24918cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public void onPanelClosed(int featureId, Menu menu) {} 25018cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 25118cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 25218cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public boolean onSearchRequested() { 25318cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri return false; 25418cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 25518cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 25618cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 25718cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public boolean onSearchRequested(SearchEvent searchEvent) { 25818cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri return false; 25918cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 26018cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 26118cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 26218cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public ActionMode onWindowStartingActionMode(Callback callback) { 26318cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri if (mShouldReturnOwnActionMode) { 26418cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri MockActionMode mode = new MockActionMode(); 26518cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri mLastCreatedActionMode = mode; 26618cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri return mode; 26718cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 26818cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri return null; 26918cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 27018cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 27118cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 27218cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public ActionMode onWindowStartingActionMode(Callback callback, int type) { 27318cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri if (mShouldReturnOwnActionMode) { 27418cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri MockActionMode mode = new MockActionMode(); 27518cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri mode.mActionModeType = type; 27618cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri mLastCreatedActionMode = mode; 27718cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri return mode; 27818cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 27918cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri return null; 28018cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 28118cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 28218cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 28318cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public void onActionModeStarted(ActionMode mode) { 28418cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri mIsActionModeStarted = true; 28518cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 28618cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 28718cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 28818cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public void onActionModeFinished(ActionMode mode) {} 28918cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 29018cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 29118cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri private static final class MockActionModeCallback implements ActionMode.Callback { 29218cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri private boolean mShouldCreateActionMode = true; 29318cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri private boolean mIsCreateActionModeCalled = false; 29418cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 29518cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 29618cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public boolean onPrepareActionMode(ActionMode mode, Menu menu) { 29718cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri return true; 29818cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 29918cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 30018cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 30118cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public void onDestroyActionMode(ActionMode mode) {} 30218cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 30318cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 30418cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public boolean onCreateActionMode(ActionMode mode, Menu menu) { 30518cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri mIsCreateActionModeCalled = true; 30618cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri return mShouldCreateActionMode; 30718cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 30818cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 30918cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 31018cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public boolean onActionItemClicked(ActionMode mode, MenuItem item) { 31118cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri return false; 31218cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 31318cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 31418cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 31518cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri private static final class MockActionMode extends ActionMode { 31618cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri private int mActionModeType = ActionMode.TYPE_PRIMARY; 31718cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri private boolean mIsFinished = false; 31818cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 31918cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 32018cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public int getType() { 32118cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri return mActionModeType; 32218cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 32318cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 32418cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 32518cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public void setTitle(CharSequence title) {} 32618cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 32718cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 32818cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public void setTitle(int resId) {} 32918cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 33018cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 33118cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public void setSubtitle(CharSequence subtitle) {} 33218cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 33318cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 33418cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public void setSubtitle(int resId) {} 33518cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 33618cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 33718cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public void setCustomView(View view) {} 33818cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 33918cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 34018cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public void invalidate() {} 34118cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 34218cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 34318cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public void finish() { 34418cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri mIsFinished = true; 34518cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 34618cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 34718cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 34818cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public Menu getMenu() { 34918cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri return null; 35018cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 35118cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 35218cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 35318cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public CharSequence getTitle() { 35418cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri return null; 35518cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 35618cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 35718cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 35818cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public CharSequence getSubtitle() { 35918cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri return null; 36018cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 36118cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 36218cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 36318cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public View getCustomView() { 36418cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri return null; 36518cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 36618cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri 36718cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri @Override 36818cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri public MenuInflater getMenuInflater() { 36918cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri return null; 37018cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 37118cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri } 37218cc17a28d675c5f755451b9367aa0f8d76e6ddaClara Bayarri} 373