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;
  }