public void assertMenuItemIsDisabledAndVisible(PageMenuItem pageMenuItem) { openAppMenu(); if (!hasLegacyMenu()) { // Non-legacy devices have hierarchical menu, check for parent menu item "page". final View parentMenuItemView = findAppMenuItemView(MenuItem.PAGE.getString(mSolo)); if (parentMenuItemView.isEnabled()) { fAssertTrue("The parent 'page' menu item is enabled", parentMenuItemView.isEnabled()); fAssertEquals( "The parent 'page' menu item is visible", View.VISIBLE, parentMenuItemView.getVisibility()); // Parent menu "page" is enabled, open page menu and check for menu item represented by // pageMenuItem. pressMenuItem(MenuItem.PAGE.getString(mSolo)); final View pageMenuItemView = findAppMenuItemView(pageMenuItem.getString(mSolo)); fAssertNotNull("The page menu item is not null", pageMenuItemView); fAssertFalse("The page menu item is not enabled", pageMenuItemView.isEnabled()); fAssertEquals( "The page menu item is visible", View.VISIBLE, pageMenuItemView.getVisibility()); } else { fAssertFalse("The parent 'page' menu item is not enabled", parentMenuItemView.isEnabled()); fAssertEquals( "The parent 'page' menu item is visible", View.VISIBLE, parentMenuItemView.getVisibility()); } } else { // Legacy devices (Android 2.3 and earlier) don't have the parent menu, "Page", so check // directly for the menu // item represented by pageMenuItem. // // We need to make sure the appropriate menu view is constructed // so open the "More" menu to additionally construct those views. openLegacyMoreMenu(); final View pageMenuItemView = findAppMenuItemView(pageMenuItem.getString(mSolo)); fAssertFalse("The page menu item is not enabled", pageMenuItemView.isEnabled()); fAssertEquals( "The page menu item is visible", View.VISIBLE, pageMenuItemView.getVisibility()); // Close the "More" menu. mSolo.goBack(); } // Close the App Menu. mSolo.goBack(); }
/** * Legacy Android devices doesn't have hierarchical menus. Sub-menus, such as "Page", are missing * in these devices. Try to determine if the menu item "Page" is present. * * <p>TODO : This fragile way to determine legacy menus should be replaced with a check for * 6-panel menu item. * * @return true if there is a legacy menu. */ private boolean hasLegacyMenu() { if (hasLegacyMenu == null) { hasLegacyMenu = findAppMenuItemView(MenuItem.PAGE.getString(mSolo)) == null; } return hasLegacyMenu; }