1 /* 2 * Copyright (C) 2012 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package android.app.cts; 17 18 import android.app.ActionBar; 19 import android.app.ActionBar.Tab; 20 import android.app.ActionBar.TabListener; 21 import android.app.FragmentTransaction; 22 import android.app.stubs.ActionBarActivity; 23 import android.test.ActivityInstrumentationTestCase2; 24 import android.test.UiThreadTest; 25 import android.view.KeyEvent; 26 import android.view.ViewConfiguration; 27 import android.view.Window; 28 29 import java.util.concurrent.TimeUnit; 30 31 public class ActionBarTest extends ActivityInstrumentationTestCase2<ActionBarActivity> { 32 33 private ActionBarActivity mActivity; 34 private ActionBar mBar; 35 ActionBarTest()36 public ActionBarTest() { 37 super(ActionBarActivity.class); 38 } 39 40 @Override setUp()41 protected void setUp() throws Exception { 42 super.setUp(); 43 mActivity = getActivity(); 44 mBar = mActivity.getActionBar(); 45 } 46 47 @UiThreadTest testAddTab()48 public void testAddTab() { 49 if (mBar == null) { 50 return; 51 } 52 assertEquals(0, mBar.getTabCount()); 53 54 Tab t1 = createTab("Tab 1"); 55 mBar.addTab(t1); 56 assertEquals(1, mBar.getTabCount()); 57 assertEquals(t1, mBar.getSelectedTab()); 58 assertEquals(t1, mBar.getTabAt(0)); 59 60 Tab t2 = createTab("Tab 2"); 61 mBar.addTab(t2); 62 assertEquals(2, mBar.getTabCount()); 63 assertEquals(t1, mBar.getSelectedTab()); 64 assertEquals(t2, mBar.getTabAt(1)); 65 66 Tab t3 = createTab("Tab 3"); 67 mBar.addTab(t3, true); 68 assertEquals(3, mBar.getTabCount()); 69 assertEquals(t3, mBar.getSelectedTab()); 70 assertEquals(t3, mBar.getTabAt(2)); 71 72 Tab t4 = createTab("Tab 2.5"); 73 mBar.addTab(t4, 2); 74 assertEquals(4, mBar.getTabCount()); 75 assertEquals(t4, mBar.getTabAt(2)); 76 assertEquals(t3, mBar.getTabAt(3)); 77 78 Tab t5 = createTab("Tab 0.5"); 79 mBar.addTab(t5, 0, true); 80 assertEquals(5, mBar.getTabCount()); 81 assertEquals(t5, mBar.getSelectedTab()); 82 assertEquals(t5, mBar.getTabAt(0)); 83 assertEquals(t1, mBar.getTabAt(1)); 84 assertEquals(t2, mBar.getTabAt(2)); 85 assertEquals(t4, mBar.getTabAt(3)); 86 assertEquals(t3, mBar.getTabAt(4)); 87 } 88 testOptionsMenuKey()89 public void testOptionsMenuKey() throws Exception { 90 boolean hasPermanentMenuKey = ViewConfiguration.get(getActivity()).hasPermanentMenuKey(); 91 if (!mActivity.getWindow().hasFeature(Window.FEATURE_OPTIONS_PANEL) 92 || hasPermanentMenuKey) { 93 return; 94 } 95 final boolean menuIsVisible[] = {false}; 96 mActivity.getActionBar().addOnMenuVisibilityListener( 97 isVisible -> menuIsVisible[0] = isVisible); 98 // Wait here for test activity to gain focus before sending keyevent. 99 // Visibility listener needs the action bar to be visible. 100 getInstrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_MENU); 101 102 assertTrue(menuIsVisible[0]); 103 assertTrue(mActivity.windowFocusSignal.await(1000, TimeUnit.MILLISECONDS)); 104 getInstrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_MENU); 105 106 assertTrue(mActivity.windowFocusSignal.await(1000, TimeUnit.MILLISECONDS)); 107 assertFalse(menuIsVisible[0]); 108 } 109 testOpenOptionsMenu()110 public void testOpenOptionsMenu() { 111 boolean hasPermanentMenuKey = ViewConfiguration.get(getActivity()).hasPermanentMenuKey(); 112 if (!mActivity.getWindow().hasFeature(Window.FEATURE_OPTIONS_PANEL) 113 || hasPermanentMenuKey) { 114 return; 115 } 116 final boolean menuIsVisible[] = {false}; 117 mActivity.getActionBar().addOnMenuVisibilityListener( 118 isVisible -> menuIsVisible[0] = isVisible); 119 getInstrumentation().runOnMainSync(() -> mActivity.openOptionsMenu()); 120 121 assertTrue(menuIsVisible[0]); 122 getInstrumentation().runOnMainSync(() -> mActivity.closeOptionsMenu()); 123 124 assertFalse(menuIsVisible[0]); 125 } 126 127 @UiThreadTest testElevation()128 public void testElevation() { 129 if (mBar == null) { 130 return; 131 } 132 final float oldElevation = mBar.getElevation(); 133 try { 134 final float newElevation = 42; 135 mBar.setElevation(newElevation); 136 assertEquals(newElevation, mBar.getElevation()); 137 } finally { 138 mBar.setElevation(oldElevation); 139 } 140 } 141 createTab(String name)142 private Tab createTab(String name) { 143 return mBar.newTab().setText("Tab 1").setTabListener(new TestTabListener()); 144 } 145 146 static class TestTabListener implements TabListener { 147 @Override onTabSelected(Tab tab, FragmentTransaction ft)148 public void onTabSelected(Tab tab, FragmentTransaction ft) { 149 } 150 151 @Override onTabUnselected(Tab tab, FragmentTransaction ft)152 public void onTabUnselected(Tab tab, FragmentTransaction ft) { 153 } 154 155 @Override onTabReselected(Tab tab, FragmentTransaction ft)156 public void onTabReselected(Tab tab, FragmentTransaction ft) { 157 } 158 } 159 } 160