Remove Native Action Bar support for Honeycomb

- Tweaked config & bool resources so that large & xlarge
  match the width qualified resources as much as possible.
- Added CompatTextView which implements textAllCaps for
  all platforms.
- Added @hide to internal classes which it was missing

Bug: 9218989

Change-Id: I038d8ab7261d6c1d5cb039cd17903a43d09183c2
Signed-off-by: Chris Banes <chrisbanes@google.com>
diff --git a/v7/appcompat/res/values-large/dimens.xml b/v7/appcompat/res/values-large/dimens.xml
index f61d6d2..dd9ecd9 100644
--- a/v7/appcompat/res/values-large/dimens.xml
+++ b/v7/appcompat/res/values-large/dimens.xml
@@ -15,8 +15,11 @@
 -->
 
 <resources>
-
     <!-- Minimum width of the search view text entry area. -->
     <dimen name="abc_search_view_text_min_width">192dip</dimen>
+    <!-- The maximum number of action buttons that should be permitted within
+     an action bar/action mode. This will be used to determine how many
+     showAsAction="ifRoom" items can fit. "always" items can override this. -->
+    <integer name="abc_max_action_buttons">4</integer>
 
 </resources>
diff --git a/v7/appcompat/res/values-v11/styles_base.xml b/v7/appcompat/res/values-v11/styles_base.xml
index 0488a21..2cee503 100644
--- a/v7/appcompat/res/values-v11/styles_base.xml
+++ b/v7/appcompat/res/values-v11/styles_base.xml
@@ -21,93 +21,7 @@
      variants are for direct use or use as parent styles by the app. -->
     <eat-comment/>
 
-    <!-- Action Bar Spinner Widgets -->
-
-    <style name="Widget.AppCompat.Base.ListView.DropDown"
-           parent="android:Widget.Holo.ListView.DropDown"/>
-
-    <style name="Widget.AppCompat.Light.Base.ListView.DropDown"
-           parent="android:Widget.Holo.ListView.DropDown"/>
-
-    <style name="Widget.AppCompat.Base.DropDownItem.Spinner"
-           parent="android:Widget.Holo.DropDownItem.Spinner"/>
-
-    <style name="Widget.AppCompat.Light.Base.DropDownItem.Spinner"
-           parent="android:Widget.Holo.Light.DropDownItem.Spinner"/>
-
-    <style name="Widget.AppCompat.Base.Spinner"
-           parent="android:Widget.Holo.Spinner"/>
-
-    <style name="Widget.AppCompat.Light.Base.Spinner"
-           parent="android:Widget.Holo.Light.Spinner"/>
-
-    <style name="Widget.AppCompat.Base.DropDownItem.Spinner"
-           parent="android:Widget.Holo.DropDownItem.Spinner"/>
-
-    <style name="Widget.AppCompat.Light.Base.DropDownItem.Spinner"
-           parent="android:Widget.Holo.Light.DropDownItem.Spinner">
-    </style>
-
-    <!-- ActionBar -->
-    <style name="Widget.AppCompat.Base.ActionBar" parent="android:Widget.Holo.ActionBar">
-    </style>
-
-    <style name="Widget.AppCompat.Light.Base.ActionBar"
-           parent="android:Widget.Holo.Light.ActionBar">
-    </style>
-
-    <!-- Patterned after style name="Widget.Holo.ActionBar.Solid" -->
-    <style name="Widget.AppCompat.Base.ActionBar.Solid" parent="android:Widget.Holo.ActionBar">
-        <item name="android:background">@drawable/abc_ab_solid_dark_holo</item>
-    </style>
-
-    <!-- Patterned after style name="Widget.Holo.Light.ActionBar.Solid" -->
-    <style name="Widget.AppCompat.Light.Base.ActionBar.Solid"
-           parent="android:Widget.Holo.Light.ActionBar">
-        <item name="android:background">@drawable/abc_ab_solid_light_holo</item>
-    </style>
-
-    <style name="Widget.AppCompat.Base.ActionButton" parent="android:Widget.Holo.ActionButton">
-    </style>
-
-    <style name="Widget.AppCompat.Light.Base.ActionButton"
-           parent="android:Widget.Holo.Light.ActionButton">
-    </style>
-
-    <style name="Widget.AppCompat.Base.ActionButton.CloseMode"
-           parent="android:Widget.Holo.ActionButton.CloseMode">
-    </style>
-
-    <style name="Widget.AppCompat.Light.Base.ActionButton.CloseMode"
-           parent="android:Widget.Holo.Light.ActionButton.CloseMode">
-    </style>
-
-    <style name="Widget.AppCompat.Base.ActionButton.Overflow"
-           parent="android:Widget.Holo.ActionButton.Overflow">
-    </style>
-
-    <style name="Widget.AppCompat.Light.Base.ActionButton.Overflow"
-           parent="android:Widget.Holo.Light.ActionButton.Overflow">
-    </style>
-
-    <style name="Widget.AppCompat.Base.ActionMode" parent="android:Widget.Holo.ActionMode">
-    </style>
-
-    <style name="TextAppearance.AppCompat.Widget.Base.ActionBar.Title"
-           parent="android:TextAppearance.Holo.Widget.ActionBar.Title">
-    </style>
-
-    <style name="TextAppearance.AppCompat.Widget.Base.ActionBar.Subtitle"
-           parent="android:TextAppearance.Holo.Widget.ActionBar.Subtitle">
-    </style>
-
-    <style name="TextAppearance.AppCompat.Widget.Base.ActionMode.Title"
-           parent="android:TextAppearance.Holo.Widget.ActionMode.Title">
-    </style>
-
-    <style name="TextAppearance.AppCompat.Widget.Base.ActionMode.Subtitle"
-           parent="android:TextAppearance.Holo.Widget.ActionMode.Subtitle">
-    </style>
+    <!-- Progress Bar -->
 
     <style name="Widget.AppCompat.Base.ProgressBar.Horizontal"
            parent="android:Widget.Holo.ProgressBar.Horizontal">
@@ -117,36 +31,7 @@
            parent="android:Widget.Holo.ProgressBar">
     </style>
 
-    <style name="Widget.AppCompat.Base.ListView.Menu" parent="android:Widget.ListView.Menu">
-    </style>
-
-    <!--
-        Inverse styles. As we don't have a DarkActionBar theme on v11, these extend
-        from the respective Light styles
-    -->
-    <style name="Widget.AppCompat.Light.Base.ActionBar.Solid.Inverse"
-           parent="Widget.AppCompat.Light.Base.ActionBar.Solid">
-    </style>
-
-    <style name="Widget.AppCompat.Light.Base.ActionMode.Inverse"
-           parent="Widget.AppCompat.Base.ActionMode">
-    </style>
-
-    <style name="TextAppearance.AppCompat.Widget.Base.ActionMode.Title.Inverse"
-           parent="TextAppearance.AppCompat.Widget.Base.ActionMode.Title">
-    </style>
-
-    <style name="TextAppearance.AppCompat.Widget.Base.ActionMode.Subtitle.Inverse"
-           parent="TextAppearance.AppCompat.Widget.Base.ActionMode.Subtitle">
-    </style>
-
-    <style name="TextAppearance.AppCompat.Widget.Base.ActionBar.Title.Inverse"
-           parent="TextAppearance.AppCompat.Widget.Base.ActionBar.Title">
-    </style>
-
-    <style name="TextAppearance.AppCompat.Widget.Base.ActionBar.Subtitle.Inverse"
-           parent="TextAppearance.AppCompat.Widget.Base.ActionBar.Subtitle">
-    </style>
+    <!-- AutoCompleteTextView styles (for SearchView) -->
 
     <style name="Widget.AppCompat.Base.AutoCompleteTextView"
            parent="android:Widget.Holo.AutoCompleteTextView">
@@ -156,4 +41,4 @@
            parent="android:Widget.Holo.Light.AutoCompleteTextView">
     </style>
 
-</resources>
+</resources>
\ No newline at end of file
diff --git a/v7/appcompat/res/values-v11/themes_base.xml b/v7/appcompat/res/values-v11/themes_base.xml
index 9d1c07e..30c78e4 100644
--- a/v7/appcompat/res/values-v11/themes_base.xml
+++ b/v7/appcompat/res/values-v11/themes_base.xml
@@ -27,49 +27,16 @@
           Honeycomb+. You probably want to edit values/themes.xml instead. -->
     <eat-comment/>
 
-    <!-- Base platform-dependent theme providing an action bar in a dark-themed activity. -->
-    <style name="Theme.Base.AppCompat" parent="android:Theme.Holo">
-        <!-- Copy system flag values for our use -->
-        <item name="windowActionBar">?android:attr/windowActionBar</item>
-        <item name="actionBarSize">?android:attr/actionBarSize</item>
-        <item name="actionBarItemBackground">?android:attr/selectableItemBackground</item>
-        <item name="selectableItemBackground">?android:attr/selectableItemBackground</item>
-        <item name="actionButtonStyle">?android:attr/actionButtonStyle</item>
-        <item name="dividerVertical">?android:attr/dividerVertical</item>
-        <item name="dividerHorizontal">?android:attr/dividerHorizontal</item>
-        <item name="actionBarWidgetTheme">@null</item>
-
-        <!-- Required for use of support_simple_spinner_dropdown_item.xml -->
-        <item name="listPreferredItemHeight">?android:attr/listPreferredItemHeight</item>
-        <item name="listPreferredItemHeightSmall">48dp</item>
-        <item name="listPreferredItemHeightLarge">80dp</item>
-        <item name="listPreferredItemPaddingLeft">8dip</item>
-        <item name="listPreferredItemPaddingRight">8dip</item>
+    <!-- Base platform-dependent theme  -->
+    <style name="Theme.Base" parent="android:Theme.Holo">
+        <item name="android:windowNoTitle">true</item>
+        <item name="android:windowActionBar">false</item>
     </style>
 
-    <!-- Base platform-dependent theme providing an action bar in a light-themed activity. -->
-    <style name="Theme.Base.AppCompat.Light" parent="android:Theme.Holo.Light">
-        <!-- Copy system flag values for our use -->
-        <item name="windowActionBar">?android:attr/windowActionBar</item>
-        <item name="actionBarSize">?android:attr/actionBarSize</item>
-        <item name="actionBarItemBackground">?android:attr/selectableItemBackground</item>
-        <item name="selectableItemBackground">?android:attr/selectableItemBackground</item>
-        <item name="actionButtonStyle">?android:attr/actionButtonStyle</item>
-        <item name="dividerVertical">?android:attr/dividerVertical</item>
-        <item name="dividerHorizontal">?android:attr/dividerHorizontal</item>
-        <item name="actionBarWidgetTheme">@null</item>
-
-        <!-- Required for use of support_simple_spinner_dropdown_item.xml -->
-        <item name="listPreferredItemHeight">?android:attr/listPreferredItemHeight</item>
-        <item name="listPreferredItemHeightSmall">48dp</item>
-        <item name="listPreferredItemHeightLarge">80dp</item>
-        <item name="listPreferredItemPaddingLeft">8dip</item>
-        <item name="listPreferredItemPaddingRight">8dip</item>
-    </style>
-
-    <!-- Base platform-dependent theme. There is no DarkActionBar theme in v11, so we use Light -->
-    <style name="Theme.Base.AppCompat.Light.DarkActionBar"
-           parent="Theme.Base.AppCompat.Light">
+    <!-- Base platform-dependent theme providing a light-themed activity. -->
+    <style name="Theme.Base.Light" parent="android:Theme.Holo.Light">
+        <item name="android:windowNoTitle">true</item>
+        <item name="android:windowActionBar">false</item>
     </style>
 
 </resources>
diff --git a/v7/appcompat/res/values-v14/styles_base.xml b/v7/appcompat/res/values-v14/styles_base.xml
index e38bde8..410898b 100644
--- a/v7/appcompat/res/values-v14/styles_base.xml
+++ b/v7/appcompat/res/values-v14/styles_base.xml
@@ -21,6 +21,13 @@
      variants are for direct use or use as parent styles by the app. -->
     <eat-comment/>
 
+    <style name="Widget.AppCompat.Base.ActionBar"
+           parent="android:Widget.Holo.ActionBar">
+    </style>
+
+    <style name="Widget.AppCompat.Light.Base.ActionBar"
+           parent="android:Widget.Holo.Light.ActionBar">
+    </style>
 
     <style name="Widget.AppCompat.Base.ActionBar.Solid"
            parent="android:Widget.Holo.ActionBar.Solid">
@@ -78,6 +85,14 @@
            parent="android:TextAppearance.Holo.Widget.ActionBar.Menu">
     </style>
 
+    <style name="TextAppearance.AppCompat.Widget.Base.ActionBar.Title"
+           parent="android:TextAppearance.Holo.Widget.ActionBar.Title">
+    </style>
+
+    <style name="TextAppearance.AppCompat.Widget.Base.ActionBar.Subtitle"
+           parent="android:TextAppearance.Holo.Widget.ActionBar.Subtitle">
+    </style>
+
     <style name="TextAppearance.AppCompat.Widget.Base.ActionBar.Title.Inverse"
            parent="android:TextAppearance.Holo.Widget.ActionBar.Title.Inverse">
     </style>
@@ -86,6 +101,14 @@
            parent="android:TextAppearance.Holo.Widget.ActionBar.Subtitle.Inverse">
     </style>
 
+    <style name="TextAppearance.AppCompat.Widget.Base.ActionMode.Title"
+           parent="android:TextAppearance.Holo.Widget.ActionMode.Title">
+    </style>
+
+    <style name="TextAppearance.AppCompat.Widget.Base.ActionMode.Subtitle"
+           parent="android:TextAppearance.Holo.Widget.ActionMode.Subtitle">
+    </style>
+
     <style name="TextAppearance.AppCompat.Widget.Base.ActionMode.Title.Inverse"
            parent="android:TextAppearance.Holo.Widget.ActionMode.Title.Inverse">
     </style>
@@ -94,29 +117,78 @@
            parent="android:TextAppearance.Holo.Widget.ActionMode.Subtitle.Inverse">
     </style>
 
+    <!-- Action Button Styles -->
+
+    <style name="Widget.AppCompat.Base.ActionButton" parent="android:Widget.Holo.ActionButton">
+    </style>
+
+    <style name="Widget.AppCompat.Light.Base.ActionButton"
+           parent="android:Widget.Holo.Light.ActionButton">
+    </style>
+
+    <style name="Widget.AppCompat.Base.ActionButton.CloseMode"
+           parent="android:Widget.Holo.ActionButton.CloseMode">
+    </style>
+
+    <style name="Widget.AppCompat.Light.Base.ActionButton.CloseMode"
+           parent="android:Widget.Holo.Light.ActionButton.CloseMode">
+    </style>
+
+    <style name="Widget.AppCompat.Base.ActionButton.Overflow"
+           parent="android:Widget.Holo.ActionButton.Overflow">
+    </style>
+
+    <style name="Widget.AppCompat.Light.Base.ActionButton.Overflow"
+           parent="android:Widget.Holo.Light.ActionButton.Overflow">
+    </style>
+
+    <!-- Spinner Widgets -->
+
+    <style name="Widget.AppCompat.Base.ListView.DropDown"
+           parent="android:Widget.Holo.ListView.DropDown"/>
+
+    <style name="Widget.AppCompat.Light.Base.ListView.DropDown"
+           parent="android:Widget.Holo.ListView.DropDown"/>
+
+    <style name="Widget.AppCompat.Base.DropDownItem.Spinner"
+           parent="android:Widget.Holo.DropDownItem.Spinner"/>
+
+    <style name="Widget.AppCompat.Light.Base.DropDownItem.Spinner"
+           parent="android:Widget.Holo.Light.DropDownItem.Spinner"/>
+
+    <style name="Widget.AppCompat.Base.Spinner" parent="android:Widget.Holo.Spinner" />
+
+    <style name="Widget.AppCompat.Light.Base.Spinner" parent="android:Widget.Holo.Light.Spinner"/>
+
+    <style name="Widget.AppCompat.Base.ListView.Menu" parent="android:Widget.ListView.Menu" />
+
+    <!-- Popup Menu -->
+
     <style name="Widget.AppCompat.Base.PopupMenu" parent="android:Widget.Holo.PopupMenu">
     </style>
 
     <style name="Widget.AppCompat.Light.Base.PopupMenu"
-           parent="android:Widget.Holo.Light.PopupMenu">
+        parent="android:Widget.Holo.Light.PopupMenu">
     </style>
 
     <style name="TextAppearance.AppCompat.Base.Widget.PopupMenu.Large"
-           parent="android:TextAppearance.Holo.Widget.PopupMenu.Large">
+        parent="android:TextAppearance.Holo.Widget.PopupMenu.Large">
     </style>
 
     <style name="TextAppearance.AppCompat.Base.Widget.PopupMenu.Small"
-           parent="android:TextAppearance.Holo.Widget.PopupMenu.Small">
+        parent="android:TextAppearance.Holo.Widget.PopupMenu.Small">
     </style>
 
     <style name="TextAppearance.AppCompat.Light.Base.Widget.PopupMenu.Large"
-           parent="android:TextAppearance.Holo.Widget.PopupMenu.Large">
+        parent="android:TextAppearance.Holo.Widget.PopupMenu.Large">
     </style>
 
     <style name="TextAppearance.AppCompat.Light.Base.Widget.PopupMenu.Small"
-           parent="android:TextAppearance.Holo.Widget.PopupMenu.Small">
+        parent="android:TextAppearance.Holo.Widget.PopupMenu.Small">
     </style>
 
+    <!-- Search View result styles -->
+
     <style name="TextAppearance.AppCompat.Base.SearchResult.Title"
            parent="@android:TextAppearance.Holo.SearchResult.Title">
     </style>
@@ -126,7 +198,7 @@
     </style>
 
     <!--
-        TextAppearance.Holo.Light.SearchResult.* aren't public so we extend from the default
+        TextAppearance.Holo.Light.SearchResult.* are private so we extend from the default
         versions instead (which are exactly the same).
     -->
     <style name="TextAppearance.AppCompat.Light.Base.SearchResult.Title"
diff --git a/v7/appcompat/res/values-w600dp/dimens.xml b/v7/appcompat/res/values-w600dp/dimens.xml
index c2f6154..5bbc34d 100644
--- a/v7/appcompat/res/values-w600dp/dimens.xml
+++ b/v7/appcompat/res/values-w600dp/dimens.xml
@@ -19,4 +19,22 @@
          an action bar/action mode. This will be used to determine how many
          showAsAction="ifRoom" items can fit. "always" items can override this. -->
     <integer name="abc_max_action_buttons">5</integer>
+
+    <!-- Default height of an action bar. -->
+    <dimen name="abc_action_bar_default_height">56dip</dimen>
+    <!-- Vertical padding around action bar icons. -->
+    <dimen name="abc_action_bar_icon_vertical_padding">4dip</dimen>
+    <!-- Text size for action bar titles -->
+    <dimen name="abc_action_bar_title_text_size">18dp</dimen>
+    <!-- Text size for action bar subtitles -->
+    <dimen name="abc_action_bar_subtitle_text_size">14dp</dimen>
+    <!-- Top margin for action bar subtitles -->
+    <dimen name="abc_action_bar_subtitle_top_margin">-3dp</dimen>
+    <!-- Bottom margin for action bar subtitles -->
+    <dimen name="abc_action_bar_subtitle_bottom_margin">9dip</dimen>
+    <!-- Minimum width for an action button in the menu area of an action bar -->
+    <dimen name="abc_action_button_min_width">64dip</dimen>
+
+    <!-- Minimum width of the search view text entry area. -->
+    <dimen name="abc_search_view_text_min_width">192dip</dimen>
 </resources>
\ No newline at end of file
diff --git a/v7/appcompat/res/values-xlarge/bools.xml b/v7/appcompat/res/values-xlarge/bools.xml
new file mode 100644
index 0000000..05c5aab
--- /dev/null
+++ b/v7/appcompat/res/values-xlarge/bools.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<resources>
+    <bool name="abc_action_bar_expanded_action_views_exclusive">false</bool>
+</resources>
\ No newline at end of file
diff --git a/v7/appcompat/res/values-xlarge/dimens.xml b/v7/appcompat/res/values-xlarge/dimens.xml
new file mode 100644
index 0000000..6217586
--- /dev/null
+++ b/v7/appcompat/res/values-xlarge/dimens.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<resources>
+
+    <!-- The maximum number of action buttons that should be permitted within
+         an action bar/action mode. This will be used to determine how many
+         showAsAction="ifRoom" items can fit. "always" items can override this. -->
+    <integer name="abc_max_action_buttons">5</integer>
+
+    <!-- Default height of an action bar. -->
+    <dimen name="abc_action_bar_default_height">56dip</dimen>
+    <!-- Vertical padding around action bar icons. -->
+    <dimen name="abc_action_bar_icon_vertical_padding">4dip</dimen>
+    <!-- Text size for action bar titles -->
+    <dimen name="abc_action_bar_title_text_size">18dp</dimen>
+    <!-- Text size for action bar subtitles -->
+    <dimen name="abc_action_bar_subtitle_text_size">14dp</dimen>
+    <!-- Top margin for action bar subtitles -->
+    <dimen name="abc_action_bar_subtitle_top_margin">-3dp</dimen>
+    <!-- Bottom margin for action bar subtitles -->
+    <dimen name="abc_action_bar_subtitle_bottom_margin">9dip</dimen>
+    <!-- Minimum width for an action button in the menu area of an action bar -->
+    <dimen name="abc_action_button_min_width">64dip</dimen>
+
+    <!-- Minimum width of the search view text entry area. -->
+    <dimen name="abc_search_view_text_min_width">192dip</dimen>
+
+</resources>
diff --git a/v7/appcompat/res/values/attrs.xml b/v7/appcompat/res/values/attrs.xml
index 2c747f2..89749c0 100644
--- a/v7/appcompat/res/values/attrs.xml
+++ b/v7/appcompat/res/values/attrs.xml
@@ -548,4 +548,9 @@
     <!-- Default ActivityChooserView style. -->
     <attr name="activityChooserViewStyle" format="reference" />
 
+    <declare-styleable name="CompatTextView">
+        <!-- Present the text in ALL CAPS. This may use a small-caps form when available. -->
+        <attr name="textAllCaps" format="reference|boolean" />
+    </declare-styleable>
+
 </resources>
diff --git a/v7/appcompat/res/values/config.xml b/v7/appcompat/res/values/config.xml
index e39c548..8c027d1 100644
--- a/v7/appcompat/res/values/config.xml
+++ b/v7/appcompat/res/values/config.xml
@@ -26,4 +26,9 @@
     maximum (let them grow as large as the screen).  Actual values are
     specified for -large and -xlarge configurations. -->
     <dimen name="abc_config_prefDialogWidth">320dp</dimen>
+
+    <!-- Whether action menu items should be displayed in ALLCAPS or not.
+         Defaults to true. If this is not appropriate for specific locales
+         it should be disabled in that locale's resources. -->
+    <bool name="abc_config_actionMenuItemAllCaps">true</bool>
 </resources>
\ No newline at end of file
diff --git a/v7/appcompat/res/values/dimens.xml b/v7/appcompat/res/values/dimens.xml
index f12b0fc8..f58d6fa 100644
--- a/v7/appcompat/res/values/dimens.xml
+++ b/v7/appcompat/res/values/dimens.xml
@@ -15,10 +15,6 @@
 -->
 
 <resources>
-    <dimen name="abc_action_bar_size">48dp</dimen>
-
-    <!-- Maximum height for a stacked tab bar as part of an action bar -->
-    <dimen name="abc_action_bar_stacked_max_height">48dp</dimen>
 
     <!-- The maximum number of action buttons that should be permitted within
          an action bar/action mode. This will be used to determine how many
@@ -44,6 +40,8 @@
     <dimen name="abc_action_bar_subtitle_bottom_margin">5dip</dimen>
     <!-- Minimum width for an action button in the menu area of an action bar -->
     <dimen name="abc_action_button_min_width">56dip</dimen>
+    <!-- Maximum height for a stacked tab bar as part of an action bar -->
+    <dimen name="abc_action_bar_stacked_max_height">48dp</dimen>
 
     <dimen name="abc_panel_menu_list_width">296dp</dimen>
 
diff --git a/v7/appcompat/res/values/styles_base.xml b/v7/appcompat/res/values/styles_base.xml
index 89d2cd7..28d2086 100644
--- a/v7/appcompat/res/values/styles_base.xml
+++ b/v7/appcompat/res/values/styles_base.xml
@@ -89,6 +89,7 @@
         <item name="android:minHeight">?attr/actionBarSize</item>
         <item name="android:gravity">center</item>
         <item name="android:maxLines">2</item>
+        <item name="textAllCaps">@bool/abc_config_actionMenuItemAllCaps</item>
     </style>
 
     <style name="Widget.AppCompat.Light.Base.ActionButton"
@@ -149,6 +150,7 @@
         <item name="android:textStyle">bold</item>
         <item name="android:ellipsize">marquee</item>
         <item name="android:maxLines">2</item>
+        <item name="textAllCaps">true</item>
     </style>
 
     <style name="Widget.AppCompat.Light.Base.ActionBar.TabText"
diff --git a/v7/appcompat/res/values/themes_base.xml b/v7/appcompat/res/values/themes_base.xml
index 33235a8..3b514a8 100644
--- a/v7/appcompat/res/values/themes_base.xml
+++ b/v7/appcompat/res/values/themes_base.xml
@@ -24,8 +24,14 @@
          directly by apps. -->
     <eat-comment/>
 
+    <style name="Theme.Base" parent="android:Theme">
+    </style>
+
+    <style name="Theme.Base.Light" parent="android:Theme.Light">
+    </style>
+
     <!-- Base platform-dependent theme providing an action bar in a dark-themed activity. -->
-    <style name="Theme.Base.AppCompat" parent="android:Theme">
+    <style name="Theme.Base.AppCompat" parent="Theme.Base">
         <item name="windowActionBar">true</item>
         <!-- Remove system title bars; we will add the action bar ourselves. -->
         <item name="android:windowNoTitle">true</item>
@@ -55,7 +61,7 @@
         <item name="actionBarStyle">@style/Widget.AppCompat.ActionBar</item>
         <item name="actionBarSplitStyle">?attr/actionBarStyle</item>
         <item name="actionBarWidgetTheme">@null</item>
-        <item name="actionBarSize">@dimen/abc_action_bar_size</item>
+        <item name="actionBarSize">@dimen/abc_action_bar_default_height</item>
         <item name="actionBarDivider">?attr/dividerVertical</item>
         <item name="actionBarItemBackground">?attr/selectableItemBackground</item>
         <item name="actionMenuTextAppearance">
@@ -83,7 +89,7 @@
     </style>
 
     <!-- Base platform-dependent theme providing an action bar in a light-themed activity. -->
-    <style name="Theme.Base.AppCompat.Light" parent="android:Theme.Light">
+    <style name="Theme.Base.AppCompat.Light" parent="Theme.Base.Light">
         <item name="windowActionBar">true</item>
         <!-- Remove system title bars; we will add the action bar ourselves. -->
         <item name="android:windowNoTitle">true</item>
@@ -116,7 +122,7 @@
         <item name="actionBarStyle">@style/Widget.AppCompat.Light.ActionBar</item>
         <item name="actionBarSplitStyle">?attr/actionBarStyle</item>
         <item name="actionBarWidgetTheme">@null</item>
-        <item name="actionBarSize">@dimen/abc_action_bar_size</item>
+        <item name="actionBarSize">@dimen/abc_action_bar_default_height</item>
         <item name="actionBarDivider">?attr/dividerVertical</item>
         <item name="actionBarItemBackground">?attr/selectableItemBackground</item>
         <item name="actionMenuTextAppearance">
diff --git a/v7/appcompat/src/android/support/v7/app/ActionBarActivity.java b/v7/appcompat/src/android/support/v7/app/ActionBarActivity.java
index 32396260..504ef06 100644
--- a/v7/appcompat/src/android/support/v7/app/ActionBarActivity.java
+++ b/v7/appcompat/src/android/support/v7/app/ActionBarActivity.java
@@ -152,8 +152,8 @@
 
     @Override
     public void supportInvalidateOptionsMenu() {
-        // Only call up to super on HC+
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
+        // Only call up to super on ICS+
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
             super.supportInvalidateOptionsMenu();
         }
         mImpl.supportInvalidateOptionsMenu();
diff --git a/v7/appcompat/src/android/support/v7/app/ActionBarActivityDelegate.java b/v7/appcompat/src/android/support/v7/app/ActionBarActivityDelegate.java
index c46f698..bfc74f9 100644
--- a/v7/appcompat/src/android/support/v7/app/ActionBarActivityDelegate.java
+++ b/v7/appcompat/src/android/support/v7/app/ActionBarActivityDelegate.java
@@ -45,10 +45,6 @@
         final int version = Build.VERSION.SDK_INT;
         if (version >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
             return new ActionBarActivityDelegateICS(activity);
-        } else if (version >= Build.VERSION_CODES.HONEYCOMB_MR1) {
-            return new ActionBarActivityDelegateHCMR1(activity);
-        } else if (version >= Build.VERSION_CODES.HONEYCOMB) {
-            return new ActionBarActivityDelegateHC(activity);
         } else {
             return new ActionBarActivityDelegateBase(activity);
         }
diff --git a/v7/appcompat/src/android/support/v7/app/ActionBarActivityDelegateHC.java b/v7/appcompat/src/android/support/v7/app/ActionBarActivityDelegateHC.java
deleted file mode 100644
index 7540cc4..0000000
--- a/v7/appcompat/src/android/support/v7/app/ActionBarActivityDelegateHC.java
+++ /dev/null
@@ -1,348 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.v7.app;
-
-import android.content.Context;
-import android.content.res.Configuration;
-import android.os.Bundle;
-import android.support.v4.app.ActionBarDrawerToggle;
-import android.support.v4.view.WindowCompat;
-import android.support.v7.internal.view.ActionModeWrapper;
-import android.support.v7.internal.view.menu.MenuWrapperFactory;
-import android.support.v7.view.ActionMode;
-import android.view.KeyEvent;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.Window;
-import android.view.WindowManager;
-import android.view.accessibility.AccessibilityEvent;
-
-class ActionBarActivityDelegateHC extends ActionBarActivityDelegate {
-    Menu mMenu;
-
-    ActionBarActivityDelegateHC(ActionBarActivity activity) {
-        super(activity);
-    }
-
-    @Override
-    public ActionBar createSupportActionBar() {
-        return new ActionBarImplHC(mActivity, mActivity);
-    }
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        if (mHasActionBar) {
-            // If action bar is requested by inheriting from the appcompat theme,
-            // the system will not know about that. So explicitly request for an action bar.
-            mActivity.requestWindowFeature(WindowCompat.FEATURE_ACTION_BAR);
-        }
-        if (mOverlayActionBar) {
-            mActivity.requestWindowFeature(WindowCompat.FEATURE_ACTION_BAR_OVERLAY);
-        }
-
-        /*
-         * This goofy move needs some explanation.
-         *
-         * The verifier on older platform versions has some interesting side effects if
-         * a class defines a method that takes a parameter of a type that doesn't exist.
-         * In this case, that type is android.view.ActionMode. Therefore, ActionBarActivity
-         * cannot override the onActionModeStarted/Finished methods without causing nastiness
-         * when it is loaded on older platform versions.
-         *
-         * Since these methods are actually part of the window callback and not intrinsic to
-         * Activity itself, we can install a little shim with the window instead that knows
-         * about the ActionMode class. Note that this means that any new methods added to
-         * Window.Callback in the future won't get proxied without updating the support lib,
-         * but we shouldn't be adding new methods to public interfaces that way anyway...right? ;)
-         */
-        final Window w = mActivity.getWindow();
-        w.setCallback(createWindowCallbackWrapper(w.getCallback()));
-    }
-
-    Window.Callback createWindowCallbackWrapper(Window.Callback cb) {
-        return new WindowCallbackWrapper(cb);
-    }
-
-    @Override
-    public void onConfigurationChanged(Configuration newConfig) {
-    }
-
-    @Override
-    public void onStop() {
-    }
-
-    @Override
-    public void onPostResume() {
-    }
-
-    @Override
-    public void setContentView(View v) {
-        mActivity.superSetContentView(v);
-    }
-
-    @Override
-    public void setContentView(int resId) {
-        mActivity.superSetContentView(resId);
-    }
-
-    @Override
-    public void setContentView(View v, ViewGroup.LayoutParams lp) {
-        mActivity.superSetContentView(v, lp);
-    }
-
-    @Override
-    public void addContentView(View v, ViewGroup.LayoutParams lp) {
-        mActivity.superAddContentView(v, lp);
-    }
-
-    @Override
-    public boolean supportRequestWindowFeature(int featureId) {
-        return mActivity.requestWindowFeature(featureId);
-    }
-
-    @Override
-    public View onCreatePanelView(int featureId) {
-        // Do not create custom options menu on HC+
-        return null;
-    }
-
-    @Override
-    public boolean onCreatePanelMenu(int featureId, Menu menu) {
-        if (featureId == Window.FEATURE_OPTIONS_PANEL || featureId == Window.FEATURE_ACTION_BAR) {
-            if (mMenu == null) {
-                mMenu = MenuWrapperFactory.createMenuWrapper(menu);
-            }
-            return mActivity.superOnCreatePanelMenu(featureId, mMenu);
-        }
-        return mActivity.superOnCreatePanelMenu(featureId, menu);
-    }
-
-    @Override
-    public boolean onPreparePanel(int featureId, View view, Menu menu) {
-        if (featureId == Window.FEATURE_OPTIONS_PANEL || featureId == Window.FEATURE_ACTION_BAR) {
-            return mActivity.superOnPreparePanel(featureId, view, mMenu);
-        }
-        return mActivity.superOnPreparePanel(featureId, view, menu);
-    }
-
-    @Override
-    public boolean onMenuItemSelected(int featureId, MenuItem item) {
-        if (featureId == Window.FEATURE_OPTIONS_PANEL) {
-            item = MenuWrapperFactory.createMenuItemWrapper(item);
-        }
-        return mActivity.superOnMenuItemSelected(featureId, item);
-    }
-
-    @Override
-    public void setTitle(CharSequence title) {
-        // Handled by framework
-    }
-
-    @Override
-    public ActionMode startSupportActionMode(ActionMode.Callback callback) {
-        if (callback == null) {
-            throw new IllegalArgumentException("ActionMode callback can not be null.");
-        }
-
-        Context context = getActionBarThemedContext();
-
-        ActionModeWrapper.CallbackWrapper wrappedCallback = new ActionModeWrapper.CallbackWrapper(
-                context, callback);
-        ActionModeWrapper wrappedMode = null;
-
-        android.view.ActionMode frameworkMode = mActivity.startActionMode(wrappedCallback);
-
-        if (frameworkMode != null) {
-            wrappedMode = new ActionModeWrapper(context,
-                    mActivity.startActionMode(wrappedCallback));
-            wrappedCallback.setLastStartedActionMode(wrappedMode);
-        }
-
-        return wrappedMode;
-    }
-
-    public void onActionModeStarted(android.view.ActionMode mode) {
-        mActivity.onSupportActionModeStarted(
-                new ActionModeWrapper(getActionBarThemedContext(), mode));
-    }
-
-    @Override
-    void setSupportProgressBarVisibility(boolean visible) {
-        mActivity.setProgressBarVisibility(visible);
-    }
-
-    @Override
-    void setSupportProgressBarIndeterminateVisibility(boolean visible) {
-        mActivity.setProgressBarIndeterminateVisibility(visible);
-    }
-
-    @Override
-    void setSupportProgressBarIndeterminate(boolean indeterminate) {
-        mActivity.setProgressBarIndeterminate(indeterminate);
-    }
-
-    @Override
-    void setSupportProgress(int progress) {
-        mActivity.setProgress(progress);
-    }
-
-    public void onActionModeFinished(android.view.ActionMode mode) {
-        mActivity.onSupportActionModeFinished(
-                new ActionModeWrapper(getActionBarThemedContext(), mode));
-    }
-
-    @Override
-    public void supportInvalidateOptionsMenu() {
-        mMenu = null;
-    }
-
-    @Override
-    public boolean onBackPressed() {
-        return false;
-    }
-
-    @Override
-    public ActionBarDrawerToggle.Delegate getDrawerToggleDelegate() {
-        // Return null so that ActionBarDrawableToggle uses it's standard impl
-        return null;
-    }
-
-    class WindowCallbackWrapper implements Window.Callback {
-        final Window.Callback mWrapped;
-
-        public WindowCallbackWrapper(Window.Callback wrapped) {
-            mWrapped = wrapped;
-        }
-
-        @Override
-        public boolean dispatchKeyEvent(KeyEvent event) {
-            return mWrapped.dispatchKeyEvent(event);
-        }
-
-        @Override
-        public boolean dispatchKeyShortcutEvent(KeyEvent event) {
-            return mWrapped.dispatchKeyShortcutEvent(event);
-        }
-
-        @Override
-        public boolean dispatchTouchEvent(MotionEvent event) {
-            return mWrapped.dispatchTouchEvent(event);
-        }
-
-        @Override
-        public boolean dispatchTrackballEvent(MotionEvent event) {
-            return mWrapped.dispatchTrackballEvent(event);
-        }
-
-        public boolean dispatchGenericMotionEvent(MotionEvent event) {
-            // This method didn't exist until API 12. Overridden elsewhere.
-            return false;
-        }
-
-        @Override
-        public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
-            return mWrapped.dispatchPopulateAccessibilityEvent(event);
-        }
-
-        @Override
-        public View onCreatePanelView(int featureId) {
-            return mWrapped.onCreatePanelView(featureId);
-        }
-
-        @Override
-        public boolean onCreatePanelMenu(int featureId, Menu menu) {
-            return mWrapped.onCreatePanelMenu(featureId, menu);
-        }
-
-        @Override
-        public boolean onPreparePanel(int featureId, View view, Menu menu) {
-            return mWrapped.onPreparePanel(featureId, view, menu);
-        }
-
-        @Override
-        public boolean onMenuOpened(int featureId, Menu menu) {
-            return mWrapped.onMenuOpened(featureId, menu);
-        }
-
-        @Override
-        public boolean onMenuItemSelected(int featureId, MenuItem item) {
-            return mWrapped.onMenuItemSelected(featureId, item);
-        }
-
-        @Override
-        public void onWindowAttributesChanged(WindowManager.LayoutParams attrs) {
-            mWrapped.onWindowAttributesChanged(attrs);
-        }
-
-        @Override
-        public void onContentChanged() {
-            mWrapped.onContentChanged();
-        }
-
-        @Override
-        public void onWindowFocusChanged(boolean hasFocus) {
-            mWrapped.onWindowFocusChanged(hasFocus);
-        }
-
-        @Override
-        public void onAttachedToWindow() {
-            mWrapped.onAttachedToWindow();
-        }
-
-        @Override
-        public void onDetachedFromWindow() {
-            mWrapped.onDetachedFromWindow();
-        }
-
-        @Override
-        public void onPanelClosed(int featureId, Menu menu) {
-            mWrapped.onPanelClosed(featureId, menu);
-        }
-
-        @Override
-        public boolean onSearchRequested() {
-            return mWrapped.onSearchRequested();
-        }
-
-        @Override
-        public android.view.ActionMode onWindowStartingActionMode(
-                android.view.ActionMode.Callback callback) {
-            return mWrapped.onWindowStartingActionMode(callback);
-        }
-
-        /*
-         * And here are the money methods, the reason why this wrapper exists:
-         */
-
-        @Override
-        public void onActionModeStarted(android.view.ActionMode mode) {
-            mWrapped.onActionModeStarted(mode);
-            ActionBarActivityDelegateHC.this.onActionModeStarted(mode);
-        }
-
-        @Override
-        public void onActionModeFinished(android.view.ActionMode mode) {
-            mWrapped.onActionModeFinished(mode);
-            ActionBarActivityDelegateHC.this.onActionModeFinished(mode);
-        }
-    }
-}
diff --git a/v7/appcompat/src/android/support/v7/app/ActionBarActivityDelegateHCMR1.java b/v7/appcompat/src/android/support/v7/app/ActionBarActivityDelegateHCMR1.java
deleted file mode 100644
index 00cf91a..0000000
--- a/v7/appcompat/src/android/support/v7/app/ActionBarActivityDelegateHCMR1.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package android.support.v7.app;
-
-import android.view.MotionEvent;
-import android.view.Window;
-
-class ActionBarActivityDelegateHCMR1 extends ActionBarActivityDelegateHC {
-
-    ActionBarActivityDelegateHCMR1(ActionBarActivity activity) {
-        super(activity);
-    }
-
-    @Override
-    Window.Callback createWindowCallbackWrapper(Window.Callback cb) {
-        return new WindowCallbackWrapperHCMR1(cb);
-    }
-
-    class WindowCallbackWrapperHCMR1 extends WindowCallbackWrapper {
-
-        public WindowCallbackWrapperHCMR1(Window.Callback wrapped) {
-            super(wrapped);
-        }
-
-        /*
-         * This method didn't exist before HC-MR1 so we have this new version here.
-         */
-        @Override
-        public boolean dispatchGenericMotionEvent(MotionEvent event) {
-            return mWrapped.dispatchGenericMotionEvent(event);
-        }
-    }
-}
diff --git a/v7/appcompat/src/android/support/v7/app/ActionBarActivityDelegateICS.java b/v7/appcompat/src/android/support/v7/app/ActionBarActivityDelegateICS.java
index 42fd1a0..b4fb03e 100644
--- a/v7/appcompat/src/android/support/v7/app/ActionBarActivityDelegateICS.java
+++ b/v7/appcompat/src/android/support/v7/app/ActionBarActivityDelegateICS.java
@@ -16,16 +16,38 @@
 
 package android.support.v7.app;
 
+import android.content.Context;
 import android.content.pm.ActivityInfo;
+import android.content.res.Configuration;
 import android.os.Bundle;
+import android.support.v4.app.ActionBarDrawerToggle;
+import android.support.v4.view.WindowCompat;
+import android.support.v7.internal.view.ActionModeWrapper;
+import android.support.v7.internal.view.menu.MenuWrapperFactory;
+import android.support.v7.view.ActionMode;
+import android.view.KeyEvent;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.Window;
+import android.view.WindowManager;
+import android.view.accessibility.AccessibilityEvent;
 
-class ActionBarActivityDelegateICS extends ActionBarActivityDelegateHCMR1 {
+class ActionBarActivityDelegateICS extends ActionBarActivityDelegate {
+    Menu mMenu;
 
     ActionBarActivityDelegateICS(ActionBarActivity activity) {
         super(activity);
     }
 
     @Override
+    public ActionBar createSupportActionBar() {
+        return new ActionBarImplICS(mActivity, mActivity);
+    }
+
+    @Override
     public void onCreate(Bundle savedInstanceState) {
         // Set framework uiOptions from the support metadata value
         if (UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW.equals(getUiOptionsFromMetadata())) {
@@ -34,11 +56,300 @@
         }
 
         super.onCreate(savedInstanceState);
+
+        if (mHasActionBar) {
+            // If action bar is requested by inheriting from the appcompat theme,
+            // the system will not know about that. So explicitly request for an action bar.
+            mActivity.requestWindowFeature(WindowCompat.FEATURE_ACTION_BAR);
+        }
+        if (mOverlayActionBar) {
+            mActivity.requestWindowFeature(WindowCompat.FEATURE_ACTION_BAR_OVERLAY);
+        }
+
+        /*
+         * This goofy move needs some explanation.
+         *
+         * The verifier on older platform versions has some interesting side effects if
+         * a class defines a method that takes a parameter of a type that doesn't exist.
+         * In this case, that type is android.view.ActionMode. Therefore, ActionBarActivity
+         * cannot override the onActionModeStarted/Finished methods without causing nastiness
+         * when it is loaded on older platform versions.
+         *
+         * Since these methods are actually part of the window callback and not intrinsic to
+         * Activity itself, we can install a little shim with the window instead that knows
+         * about the ActionMode class. Note that this means that any new methods added to
+         * Window.Callback in the future won't get proxied without updating the support lib,
+         * but we shouldn't be adding new methods to public interfaces that way anyway...right? ;)
+         */
+        final Window w = mActivity.getWindow();
+        w.setCallback(createWindowCallbackWrapper(w.getCallback()));
+    }
+
+    Window.Callback createWindowCallbackWrapper(Window.Callback cb) {
+        return new WindowCallbackWrapper(cb);
     }
 
     @Override
-    public ActionBar createSupportActionBar() {
-        return new ActionBarImplICS(mActivity, mActivity);
+    public void onConfigurationChanged(Configuration newConfig) {
     }
 
+    @Override
+    public void onStop() {
+    }
+
+    @Override
+    public void onPostResume() {
+    }
+
+    @Override
+    public void setContentView(View v) {
+        mActivity.superSetContentView(v);
+    }
+
+    @Override
+    public void setContentView(int resId) {
+        mActivity.superSetContentView(resId);
+    }
+
+    @Override
+    public void setContentView(View v, ViewGroup.LayoutParams lp) {
+        mActivity.superSetContentView(v, lp);
+    }
+
+    @Override
+    public void addContentView(View v, ViewGroup.LayoutParams lp) {
+        mActivity.superAddContentView(v, lp);
+    }
+
+    @Override
+    public boolean supportRequestWindowFeature(int featureId) {
+        return mActivity.requestWindowFeature(featureId);
+    }
+
+    @Override
+    public View onCreatePanelView(int featureId) {
+        // Do not create custom options menu on HC+
+        return null;
+    }
+
+    @Override
+    public boolean onCreatePanelMenu(int featureId, Menu menu) {
+        if (featureId == Window.FEATURE_OPTIONS_PANEL || featureId == Window.FEATURE_ACTION_BAR) {
+            if (mMenu == null) {
+                mMenu = MenuWrapperFactory.createMenuWrapper(menu);
+            }
+            return mActivity.superOnCreatePanelMenu(featureId, mMenu);
+        }
+        return mActivity.superOnCreatePanelMenu(featureId, menu);
+    }
+
+    @Override
+    public boolean onPreparePanel(int featureId, View view, Menu menu) {
+        if (featureId == Window.FEATURE_OPTIONS_PANEL || featureId == Window.FEATURE_ACTION_BAR) {
+            return mActivity.superOnPreparePanel(featureId, view, mMenu);
+        }
+        return mActivity.superOnPreparePanel(featureId, view, menu);
+    }
+
+    @Override
+    public boolean onMenuItemSelected(int featureId, MenuItem item) {
+        if (featureId == Window.FEATURE_OPTIONS_PANEL) {
+            item = MenuWrapperFactory.createMenuItemWrapper(item);
+        }
+        return mActivity.superOnMenuItemSelected(featureId, item);
+    }
+
+    @Override
+    public void setTitle(CharSequence title) {
+        // Handled by framework
+    }
+
+    @Override
+    public ActionMode startSupportActionMode(ActionMode.Callback callback) {
+        if (callback == null) {
+            throw new IllegalArgumentException("ActionMode callback can not be null.");
+        }
+
+        Context context = getActionBarThemedContext();
+
+        ActionModeWrapper.CallbackWrapper wrappedCallback = new ActionModeWrapper.CallbackWrapper(
+                context, callback);
+        ActionModeWrapper wrappedMode = null;
+
+        android.view.ActionMode frameworkMode = mActivity.startActionMode(wrappedCallback);
+
+        if (frameworkMode != null) {
+            wrappedMode = new ActionModeWrapper(context,
+                    mActivity.startActionMode(wrappedCallback));
+            wrappedCallback.setLastStartedActionMode(wrappedMode);
+        }
+
+        return wrappedMode;
+    }
+
+    public void onActionModeStarted(android.view.ActionMode mode) {
+        mActivity.onSupportActionModeStarted(
+                new ActionModeWrapper(getActionBarThemedContext(), mode));
+    }
+
+    @Override
+    void setSupportProgressBarVisibility(boolean visible) {
+        mActivity.setProgressBarVisibility(visible);
+    }
+
+    @Override
+    void setSupportProgressBarIndeterminateVisibility(boolean visible) {
+        mActivity.setProgressBarIndeterminateVisibility(visible);
+    }
+
+    @Override
+    void setSupportProgressBarIndeterminate(boolean indeterminate) {
+        mActivity.setProgressBarIndeterminate(indeterminate);
+    }
+
+    @Override
+    void setSupportProgress(int progress) {
+        mActivity.setProgress(progress);
+    }
+
+    public void onActionModeFinished(android.view.ActionMode mode) {
+        mActivity.onSupportActionModeFinished(
+                new ActionModeWrapper(getActionBarThemedContext(), mode));
+    }
+
+    @Override
+    public void supportInvalidateOptionsMenu() {
+        mMenu = null;
+    }
+
+    @Override
+    public boolean onBackPressed() {
+        return false;
+    }
+
+    @Override
+    public ActionBarDrawerToggle.Delegate getDrawerToggleDelegate() {
+        // Return null so that ActionBarDrawableToggle uses it's standard impl
+        return null;
+    }
+
+    class WindowCallbackWrapper implements Window.Callback {
+        final Window.Callback mWrapped;
+
+        public WindowCallbackWrapper(Window.Callback wrapped) {
+            mWrapped = wrapped;
+        }
+
+        @Override
+        public boolean dispatchKeyEvent(KeyEvent event) {
+            return mWrapped.dispatchKeyEvent(event);
+        }
+
+        @Override
+        public boolean dispatchKeyShortcutEvent(KeyEvent event) {
+            return mWrapped.dispatchKeyShortcutEvent(event);
+        }
+
+        @Override
+        public boolean dispatchTouchEvent(MotionEvent event) {
+            return mWrapped.dispatchTouchEvent(event);
+        }
+
+        @Override
+        public boolean dispatchTrackballEvent(MotionEvent event) {
+            return mWrapped.dispatchTrackballEvent(event);
+        }
+
+        @Override
+        public boolean dispatchGenericMotionEvent(MotionEvent event) {
+            return mWrapped.dispatchGenericMotionEvent(event);
+        }
+
+        @Override
+        public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
+            return mWrapped.dispatchPopulateAccessibilityEvent(event);
+        }
+
+        @Override
+        public View onCreatePanelView(int featureId) {
+            return mWrapped.onCreatePanelView(featureId);
+        }
+
+        @Override
+        public boolean onCreatePanelMenu(int featureId, Menu menu) {
+            return mWrapped.onCreatePanelMenu(featureId, menu);
+        }
+
+        @Override
+        public boolean onPreparePanel(int featureId, View view, Menu menu) {
+            return mWrapped.onPreparePanel(featureId, view, menu);
+        }
+
+        @Override
+        public boolean onMenuOpened(int featureId, Menu menu) {
+            return mWrapped.onMenuOpened(featureId, menu);
+        }
+
+        @Override
+        public boolean onMenuItemSelected(int featureId, MenuItem item) {
+            return mWrapped.onMenuItemSelected(featureId, item);
+        }
+
+        @Override
+        public void onWindowAttributesChanged(WindowManager.LayoutParams attrs) {
+            mWrapped.onWindowAttributesChanged(attrs);
+        }
+
+        @Override
+        public void onContentChanged() {
+            mWrapped.onContentChanged();
+        }
+
+        @Override
+        public void onWindowFocusChanged(boolean hasFocus) {
+            mWrapped.onWindowFocusChanged(hasFocus);
+        }
+
+        @Override
+        public void onAttachedToWindow() {
+            mWrapped.onAttachedToWindow();
+        }
+
+        @Override
+        public void onDetachedFromWindow() {
+            mWrapped.onDetachedFromWindow();
+        }
+
+        @Override
+        public void onPanelClosed(int featureId, Menu menu) {
+            mWrapped.onPanelClosed(featureId, menu);
+        }
+
+        @Override
+        public boolean onSearchRequested() {
+            return mWrapped.onSearchRequested();
+        }
+
+        @Override
+        public android.view.ActionMode onWindowStartingActionMode(
+                android.view.ActionMode.Callback callback) {
+            return mWrapped.onWindowStartingActionMode(callback);
+        }
+
+        /*
+         * And here are the money methods, the reason why this wrapper exists:
+         */
+
+        @Override
+        public void onActionModeStarted(android.view.ActionMode mode) {
+            mWrapped.onActionModeStarted(mode);
+            ActionBarActivityDelegateICS.this.onActionModeStarted(mode);
+        }
+
+        @Override
+        public void onActionModeFinished(android.view.ActionMode mode) {
+            mWrapped.onActionModeFinished(mode);
+            ActionBarActivityDelegateICS.this.onActionModeFinished(mode);
+        }
+    }
 }
diff --git a/v7/appcompat/src/android/support/v7/app/ActionBarImplBase.java b/v7/appcompat/src/android/support/v7/app/ActionBarImplBase.java
index e210559..75d1b7c 100644
--- a/v7/appcompat/src/android/support/v7/app/ActionBarImplBase.java
+++ b/v7/appcompat/src/android/support/v7/app/ActionBarImplBase.java
@@ -192,7 +192,6 @@
     public void setCustomView(int resId) {
         setCustomView(LayoutInflater.from(getThemedContext())
                 .inflate(resId, mActionView, false));
-
     }
 
     @Override
diff --git a/v7/appcompat/src/android/support/v7/app/ActionBarImplHC.java b/v7/appcompat/src/android/support/v7/app/ActionBarImplHC.java
deleted file mode 100644
index fefb9c0..0000000
--- a/v7/appcompat/src/android/support/v7/app/ActionBarImplHC.java
+++ /dev/null
@@ -1,488 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.v7.app;
-
-import android.app.Activity;
-import android.content.Context;
-import android.graphics.drawable.Drawable;
-import android.support.v4.app.FragmentTransaction;
-import android.util.Log;
-import android.view.View;
-import android.widget.SpinnerAdapter;
-
-import java.lang.ref.WeakReference;
-import java.util.ArrayList;
-
-class ActionBarImplHC extends ActionBar {
-
-    final Activity mActivity;
-    final Callback mCallback;
-    final android.app.ActionBar mActionBar;
-
-    private ArrayList<WeakReference<OnMenuVisibilityListenerWrapper>> mAddedMenuVisWrappers =
-            new ArrayList<WeakReference<OnMenuVisibilityListenerWrapper>>();
-
-    public ActionBarImplHC(Activity activity, Callback callback) {
-        mActivity = activity;
-        mCallback = callback;
-        mActionBar = activity.getActionBar();
-    }
-
-    private OnMenuVisibilityListenerWrapper findAndRemoveMenuVisWrapper(
-            OnMenuVisibilityListener compatListener) {
-        for (int i = 0; i < mAddedMenuVisWrappers.size(); i++) {
-            OnMenuVisibilityListenerWrapper wrapper = mAddedMenuVisWrappers.get(i).get();
-            if (wrapper == null) {
-                mAddedMenuVisWrappers.remove(i--);
-            } else if (wrapper.mWrappedListener == compatListener) {
-                mAddedMenuVisWrappers.remove(i);
-                return wrapper;
-            }
-        }
-        return null;
-    }
-
-    @Override
-    public void setCustomView(View view) {
-        mActionBar.setCustomView(view);
-    }
-
-    @Override
-    public void setCustomView(View view, LayoutParams layoutParams) {
-        android.app.ActionBar.LayoutParams lp =
-                new android.app.ActionBar.LayoutParams(layoutParams);
-        lp.gravity = layoutParams.gravity;
-
-        mActionBar.setCustomView(view, lp);
-    }
-
-    @Override
-    public void setCustomView(int resId) {
-        mActionBar.setCustomView(resId);
-    }
-
-    @Override
-    public void setIcon(int resId) {
-        Log.i("ActionBarCompat", "setIcon() is not available when running on Honeycomb devices.");
-    }
-
-    @Override
-    public void setIcon(Drawable icon) {
-        Log.i("ActionBarCompat", "setIcon() is not available when running on Honeycomb devices.");
-    }
-
-    @Override
-    public void setLogo(int resId) {
-        Log.i("ActionBarCompat", "setLogo() is not available when running on Honeycomb devices.");
-    }
-
-    @Override
-    public void setLogo(Drawable logo) {
-        Log.i("ActionBarCompat", "setLogo() is not available when running on Honeycomb devices.");
-    }
-
-    @Override
-    public void setListNavigationCallbacks(SpinnerAdapter adapter, OnNavigationListener callback) {
-        mActionBar.setListNavigationCallbacks(adapter,
-                callback != null ? new OnNavigationListenerWrapper(callback) : null);
-    }
-
-    @Override
-    public void setSelectedNavigationItem(int position) {
-        mActionBar.setSelectedNavigationItem(position);
-    }
-
-    @Override
-    public int getSelectedNavigationIndex() {
-        return mActionBar.getSelectedNavigationIndex();
-    }
-
-    @Override
-    public int getNavigationItemCount() {
-        return mActionBar.getNavigationItemCount();
-    }
-
-    @Override
-    public void setTitle(CharSequence title) {
-        mActionBar.setTitle(title);
-    }
-
-    @Override
-    public void setTitle(int resId) {
-        mActionBar.setTitle(resId);
-    }
-
-    @Override
-    public void setSubtitle(CharSequence subtitle) {
-        mActionBar.setSubtitle(subtitle);
-    }
-
-    @Override
-    public void setSubtitle(int resId) {
-        mActionBar.setSubtitle(resId);
-    }
-
-    @Override
-    public void setDisplayOptions(int options) {
-        mActionBar.setDisplayOptions(options);
-    }
-
-    @Override
-    public void setDisplayOptions(int options, int mask) {
-        mActionBar.setDisplayOptions(options, mask);
-    }
-
-    @Override
-    public void setDisplayUseLogoEnabled(boolean useLogo) {
-        mActionBar.setDisplayUseLogoEnabled(useLogo);
-    }
-
-    @Override
-    public void setDisplayShowHomeEnabled(boolean showHome) {
-        mActionBar.setDisplayShowHomeEnabled(showHome);
-    }
-
-    @Override
-    public void setDisplayHomeAsUpEnabled(boolean showHomeAsUp) {
-        mActionBar.setDisplayHomeAsUpEnabled(showHomeAsUp);
-    }
-
-    @Override
-    public void setDisplayShowTitleEnabled(boolean showTitle) {
-        mActionBar.setDisplayShowTitleEnabled(showTitle);
-    }
-
-    @Override
-    public void setDisplayShowCustomEnabled(boolean showCustom) {
-        mActionBar.setDisplayShowCustomEnabled(showCustom);
-    }
-
-    @Override
-    public void setBackgroundDrawable(Drawable d) {
-        mActionBar.setBackgroundDrawable(d);
-    }
-
-    @Override
-    public View getCustomView() {
-        return mActionBar.getCustomView();
-    }
-
-    @Override
-    public CharSequence getTitle() {
-        return mActionBar.getTitle();
-    }
-
-    @Override
-    public CharSequence getSubtitle() {
-        return mActionBar.getSubtitle();
-    }
-
-    @Override
-    public int getNavigationMode() {
-        return mActionBar.getNavigationMode();
-    }
-
-    @Override
-    public void setNavigationMode(int mode) {
-        mActionBar.setNavigationMode(mode);
-    }
-
-    @Override
-    public int getDisplayOptions() {
-        return mActionBar.getDisplayOptions();
-    }
-
-    @Override
-    public Tab newTab() {
-        final android.app.ActionBar.Tab realTab = mActionBar.newTab();
-        final TabWrapper result = new TabWrapper(realTab);
-        realTab.setTag(result);
-        return result;
-    }
-
-    @Override
-    public void addTab(Tab tab) {
-        mActionBar.addTab(((TabWrapper) tab).mWrappedTab);
-    }
-
-    @Override
-    public void addTab(Tab tab, boolean setSelected) {
-        mActionBar.addTab(((TabWrapper) tab).mWrappedTab, setSelected);
-    }
-
-    @Override
-    public void addTab(Tab tab, int position) {
-        mActionBar.addTab(((TabWrapper) tab).mWrappedTab, position);
-    }
-
-    @Override
-    public void addTab(Tab tab, int position, boolean setSelected) {
-        mActionBar.addTab(((TabWrapper) tab).mWrappedTab, position, setSelected);
-    }
-
-    @Override
-    public void removeTab(Tab tab) {
-        mActionBar.removeTab(((TabWrapper) tab).mWrappedTab);
-    }
-
-    @Override
-    public void removeTabAt(int position) {
-        mActionBar.removeTabAt(position);
-    }
-
-    @Override
-    public void removeAllTabs() {
-        mActionBar.removeAllTabs();
-    }
-
-    @Override
-    public void selectTab(Tab tab) {
-        mActionBar.selectTab(((TabWrapper) tab).mWrappedTab);
-    }
-
-    @Override
-    public Tab getSelectedTab() {
-        return (Tab) mActionBar.getSelectedTab().getTag();
-    }
-
-    @Override
-    public Tab getTabAt(int index) {
-        return (Tab) mActionBar.getTabAt(index).getTag();
-    }
-
-    @Override
-    public int getTabCount() {
-        return mActionBar.getTabCount();
-    }
-
-    @Override
-    public Context getThemedContext() {
-        // v11 doesn't have the actionBarWidgetTheme attr, so just use the Activity
-        // This means DarkActionBar theme does not work on v11.
-        return mActivity;
-    }
-
-    @Override
-    public int getHeight() {
-        return mActionBar.getHeight();
-    }
-
-    @Override
-    public void show() {
-        mActionBar.show();
-    }
-
-    @Override
-    public void hide() {
-        mActionBar.hide();
-    }
-
-    @Override
-    public boolean isShowing() {
-        return mActionBar.isShowing();
-    }
-
-    @Override
-    public void addOnMenuVisibilityListener(OnMenuVisibilityListener listener) {
-        if (listener != null) {
-            OnMenuVisibilityListenerWrapper w = new OnMenuVisibilityListenerWrapper(listener);
-            mAddedMenuVisWrappers.add(new WeakReference<OnMenuVisibilityListenerWrapper>(w));
-            mActionBar.addOnMenuVisibilityListener(w);
-        }
-    }
-
-    @Override
-    public void removeOnMenuVisibilityListener(OnMenuVisibilityListener listener) {
-        OnMenuVisibilityListenerWrapper l = findAndRemoveMenuVisWrapper(listener);
-        mActionBar.removeOnMenuVisibilityListener(l);
-    }
-
-    static class OnNavigationListenerWrapper implements android.app.ActionBar.OnNavigationListener {
-
-        private final OnNavigationListener mWrappedListener;
-
-        public OnNavigationListenerWrapper(OnNavigationListener l) {
-            mWrappedListener = l;
-        }
-
-        @Override
-        public boolean onNavigationItemSelected(int itemPosition, long itemId) {
-            return mWrappedListener.onNavigationItemSelected(itemPosition, itemId);
-        }
-
-    }
-
-    static class OnMenuVisibilityListenerWrapper implements
-            android.app.ActionBar.OnMenuVisibilityListener {
-
-        final OnMenuVisibilityListener mWrappedListener;
-
-        public OnMenuVisibilityListenerWrapper(OnMenuVisibilityListener l) {
-            mWrappedListener = l;
-        }
-
-        @Override
-        public void onMenuVisibilityChanged(boolean isVisible) {
-            mWrappedListener.onMenuVisibilityChanged(isVisible);
-        }
-
-    }
-
-    class TabWrapper extends ActionBar.Tab implements android.app.ActionBar.TabListener {
-
-        final android.app.ActionBar.Tab mWrappedTab;
-        private Object mTag;
-        private FragmentTransaction mActiveTransaction;
-        private CharSequence mContentDescription;
-        private TabListener mTabListener;
-
-        public TabWrapper(android.app.ActionBar.Tab tab) {
-            mWrappedTab = tab;
-        }
-
-        @Override
-        public int getPosition() {
-            return mWrappedTab.getPosition();
-        }
-
-        @Override
-        public Drawable getIcon() {
-            return mWrappedTab.getIcon();
-        }
-
-        @Override
-        public CharSequence getText() {
-            return mWrappedTab.getText();
-        }
-
-        @Override
-        public Tab setIcon(Drawable icon) {
-            mWrappedTab.setIcon(icon);
-            return this;
-        }
-
-        @Override
-        public Tab setIcon(int resId) {
-            mWrappedTab.setIcon(resId);
-            return this;
-        }
-
-        @Override
-        public Tab setText(CharSequence text) {
-            mWrappedTab.setText(text);
-            return this;
-        }
-
-        @Override
-        public Tab setText(int resId) {
-            mWrappedTab.setText(resId);
-            return this;
-        }
-
-        @Override
-        public Tab setCustomView(View view) {
-            mWrappedTab.setCustomView(view);
-            return this;
-        }
-
-        @Override
-        public Tab setCustomView(int layoutResId) {
-            mWrappedTab.setCustomView(layoutResId);
-            return this;
-        }
-
-        @Override
-        public View getCustomView() {
-            return mWrappedTab.getCustomView();
-        }
-
-        @Override
-        public Tab setTag(Object obj) {
-            mTag = obj;
-            return this;
-        }
-
-        @Override
-        public Object getTag() {
-            return mTag;
-        }
-
-        @Override
-        public Tab setTabListener(TabListener listener) {
-            mTabListener = listener;
-            mWrappedTab.setTabListener(listener != null ? this : null);
-            return this;
-        }
-
-        @Override
-        public void select() {
-            mWrappedTab.select();
-        }
-
-        @Override
-        public Tab setContentDescription(int resId) {
-            mContentDescription = mActivity.getText(resId);
-            return this;
-        }
-
-        @Override
-        public Tab setContentDescription(CharSequence contentDesc) {
-            mContentDescription = contentDesc;
-            return this;
-        }
-
-        @Override
-        public CharSequence getContentDescription() {
-            return mContentDescription;
-        }
-
-        @Override
-        public void onTabSelected(android.app.ActionBar.Tab tab,
-                android.app.FragmentTransaction ft) {
-            mTabListener.onTabSelected(this, ft != null ? getActiveTransaction() : null);
-            commitActiveTransaction();
-        }
-
-        @Override
-        public void onTabUnselected(android.app.ActionBar.Tab tab,
-                android.app.FragmentTransaction ft) {
-            mTabListener.onTabUnselected(this, ft != null ? getActiveTransaction() : null);
-        }
-
-        @Override
-        public void onTabReselected(android.app.ActionBar.Tab tab,
-                android.app.FragmentTransaction ft) {
-            mTabListener.onTabReselected(this, ft != null ? getActiveTransaction() : null);
-            commitActiveTransaction();
-        }
-
-        private FragmentTransaction getActiveTransaction() {
-            if (mActiveTransaction == null) {
-                mActiveTransaction = mCallback.getSupportFragmentManager().beginTransaction()
-                        .disallowAddToBackStack();
-            }
-            return mActiveTransaction;
-        }
-
-        private void commitActiveTransaction() {
-            if (mActiveTransaction != null && !mActiveTransaction.isEmpty()) {
-                mActiveTransaction.commit();
-            }
-            mActiveTransaction = null;
-        }
-    }
-}
diff --git a/v7/appcompat/src/android/support/v7/app/ActionBarImplICS.java b/v7/appcompat/src/android/support/v7/app/ActionBarImplICS.java
index d2e3f6f..b10b8c8 100644
--- a/v7/appcompat/src/android/support/v7/app/ActionBarImplICS.java
+++ b/v7/appcompat/src/android/support/v7/app/ActionBarImplICS.java
@@ -19,16 +19,60 @@
 import android.app.Activity;
 import android.content.Context;
 import android.graphics.drawable.Drawable;
+import android.support.v4.app.FragmentTransaction;
+import android.util.Log;
+import android.view.View;
+import android.widget.SpinnerAdapter;
 
-class ActionBarImplICS extends ActionBarImplHC {
+import java.lang.ref.WeakReference;
+import java.util.ArrayList;
+
+class ActionBarImplICS extends ActionBar {
+
+    final Activity mActivity;
+    final Callback mCallback;
+    final android.app.ActionBar mActionBar;
+
+    private ArrayList<WeakReference<OnMenuVisibilityListenerWrapper>> mAddedMenuVisWrappers =
+            new ArrayList<WeakReference<OnMenuVisibilityListenerWrapper>>();
 
     public ActionBarImplICS(Activity activity, Callback callback) {
-        super(activity, callback);
+        mActivity = activity;
+        mCallback = callback;
+        mActionBar = activity.getActionBar();
+    }
+
+    private OnMenuVisibilityListenerWrapper findAndRemoveMenuVisWrapper(
+            OnMenuVisibilityListener compatListener) {
+        for (int i = 0; i < mAddedMenuVisWrappers.size(); i++) {
+            OnMenuVisibilityListenerWrapper wrapper = mAddedMenuVisWrappers.get(i).get();
+            if (wrapper == null) {
+                mAddedMenuVisWrappers.remove(i--);
+            } else if (wrapper.mWrappedListener == compatListener) {
+                mAddedMenuVisWrappers.remove(i);
+                return wrapper;
+            }
+        }
+        return null;
     }
 
     @Override
-    public Context getThemedContext() {
-        return mActionBar.getThemedContext();
+    public void setCustomView(View view) {
+        mActionBar.setCustomView(view);
+    }
+
+    @Override
+    public void setCustomView(View view, LayoutParams layoutParams) {
+        android.app.ActionBar.LayoutParams lp =
+                new android.app.ActionBar.LayoutParams(layoutParams);
+        lp.gravity = layoutParams.gravity;
+
+        mActionBar.setCustomView(view, lp);
+    }
+
+    @Override
+    public void setCustomView(int resId) {
+        mActionBar.setCustomView(resId);
     }
 
     @Override
@@ -51,4 +95,392 @@
         mActionBar.setLogo(logo);
     }
 
+    @Override
+    public void setListNavigationCallbacks(SpinnerAdapter adapter, OnNavigationListener callback) {
+        mActionBar.setListNavigationCallbacks(adapter,
+                callback != null ? new OnNavigationListenerWrapper(callback) : null);
+    }
+
+    @Override
+    public void setSelectedNavigationItem(int position) {
+        mActionBar.setSelectedNavigationItem(position);
+    }
+
+    @Override
+    public int getSelectedNavigationIndex() {
+        return mActionBar.getSelectedNavigationIndex();
+    }
+
+    @Override
+    public int getNavigationItemCount() {
+        return mActionBar.getNavigationItemCount();
+    }
+
+    @Override
+    public void setTitle(CharSequence title) {
+        mActionBar.setTitle(title);
+    }
+
+    @Override
+    public void setTitle(int resId) {
+        mActionBar.setTitle(resId);
+    }
+
+    @Override
+    public void setSubtitle(CharSequence subtitle) {
+        mActionBar.setSubtitle(subtitle);
+    }
+
+    @Override
+    public void setSubtitle(int resId) {
+        mActionBar.setSubtitle(resId);
+    }
+
+    @Override
+    public void setDisplayOptions(int options) {
+        mActionBar.setDisplayOptions(options);
+    }
+
+    @Override
+    public void setDisplayOptions(int options, int mask) {
+        mActionBar.setDisplayOptions(options, mask);
+    }
+
+    @Override
+    public void setDisplayUseLogoEnabled(boolean useLogo) {
+        mActionBar.setDisplayUseLogoEnabled(useLogo);
+    }
+
+    @Override
+    public void setDisplayShowHomeEnabled(boolean showHome) {
+        mActionBar.setDisplayShowHomeEnabled(showHome);
+    }
+
+    @Override
+    public void setDisplayHomeAsUpEnabled(boolean showHomeAsUp) {
+        mActionBar.setDisplayHomeAsUpEnabled(showHomeAsUp);
+    }
+
+    @Override
+    public void setDisplayShowTitleEnabled(boolean showTitle) {
+        mActionBar.setDisplayShowTitleEnabled(showTitle);
+    }
+
+    @Override
+    public void setDisplayShowCustomEnabled(boolean showCustom) {
+        mActionBar.setDisplayShowCustomEnabled(showCustom);
+    }
+
+    @Override
+    public void setBackgroundDrawable(Drawable d) {
+        mActionBar.setBackgroundDrawable(d);
+    }
+
+    @Override
+    public View getCustomView() {
+        return mActionBar.getCustomView();
+    }
+
+    @Override
+    public CharSequence getTitle() {
+        return mActionBar.getTitle();
+    }
+
+    @Override
+    public CharSequence getSubtitle() {
+        return mActionBar.getSubtitle();
+    }
+
+    @Override
+    public int getNavigationMode() {
+        return mActionBar.getNavigationMode();
+    }
+
+    @Override
+    public void setNavigationMode(int mode) {
+        mActionBar.setNavigationMode(mode);
+    }
+
+    @Override
+    public int getDisplayOptions() {
+        return mActionBar.getDisplayOptions();
+    }
+
+    @Override
+    public Tab newTab() {
+        final android.app.ActionBar.Tab realTab = mActionBar.newTab();
+        final TabWrapper result = new TabWrapper(realTab);
+        realTab.setTag(result);
+        return result;
+    }
+
+    @Override
+    public void addTab(Tab tab) {
+        mActionBar.addTab(((TabWrapper) tab).mWrappedTab);
+    }
+
+    @Override
+    public void addTab(Tab tab, boolean setSelected) {
+        mActionBar.addTab(((TabWrapper) tab).mWrappedTab, setSelected);
+    }
+
+    @Override
+    public void addTab(Tab tab, int position) {
+        mActionBar.addTab(((TabWrapper) tab).mWrappedTab, position);
+    }
+
+    @Override
+    public void addTab(Tab tab, int position, boolean setSelected) {
+        mActionBar.addTab(((TabWrapper) tab).mWrappedTab, position, setSelected);
+    }
+
+    @Override
+    public void removeTab(Tab tab) {
+        mActionBar.removeTab(((TabWrapper) tab).mWrappedTab);
+    }
+
+    @Override
+    public void removeTabAt(int position) {
+        mActionBar.removeTabAt(position);
+    }
+
+    @Override
+    public void removeAllTabs() {
+        mActionBar.removeAllTabs();
+    }
+
+    @Override
+    public void selectTab(Tab tab) {
+        mActionBar.selectTab(((TabWrapper) tab).mWrappedTab);
+    }
+
+    @Override
+    public Tab getSelectedTab() {
+        return (Tab) mActionBar.getSelectedTab().getTag();
+    }
+
+    @Override
+    public Tab getTabAt(int index) {
+        return (Tab) mActionBar.getTabAt(index).getTag();
+    }
+
+    @Override
+    public int getTabCount() {
+        return mActionBar.getTabCount();
+    }
+
+    @Override
+    public Context getThemedContext() {
+        return mActionBar.getThemedContext();
+    }
+
+    @Override
+    public int getHeight() {
+        return mActionBar.getHeight();
+    }
+
+    @Override
+    public void show() {
+        mActionBar.show();
+    }
+
+    @Override
+    public void hide() {
+        mActionBar.hide();
+    }
+
+    @Override
+    public boolean isShowing() {
+        return mActionBar.isShowing();
+    }
+
+    @Override
+    public void addOnMenuVisibilityListener(OnMenuVisibilityListener listener) {
+        if (listener != null) {
+            OnMenuVisibilityListenerWrapper w = new OnMenuVisibilityListenerWrapper(listener);
+            mAddedMenuVisWrappers.add(new WeakReference<OnMenuVisibilityListenerWrapper>(w));
+            mActionBar.addOnMenuVisibilityListener(w);
+        }
+    }
+
+    @Override
+    public void removeOnMenuVisibilityListener(OnMenuVisibilityListener listener) {
+        OnMenuVisibilityListenerWrapper l = findAndRemoveMenuVisWrapper(listener);
+        mActionBar.removeOnMenuVisibilityListener(l);
+    }
+
+    static class OnNavigationListenerWrapper implements android.app.ActionBar.OnNavigationListener {
+
+        private final OnNavigationListener mWrappedListener;
+
+        public OnNavigationListenerWrapper(OnNavigationListener l) {
+            mWrappedListener = l;
+        }
+
+        @Override
+        public boolean onNavigationItemSelected(int itemPosition, long itemId) {
+            return mWrappedListener.onNavigationItemSelected(itemPosition, itemId);
+        }
+
+    }
+
+    static class OnMenuVisibilityListenerWrapper implements
+            android.app.ActionBar.OnMenuVisibilityListener {
+
+        final OnMenuVisibilityListener mWrappedListener;
+
+        public OnMenuVisibilityListenerWrapper(OnMenuVisibilityListener l) {
+            mWrappedListener = l;
+        }
+
+        @Override
+        public void onMenuVisibilityChanged(boolean isVisible) {
+            mWrappedListener.onMenuVisibilityChanged(isVisible);
+        }
+
+    }
+
+    class TabWrapper extends ActionBar.Tab implements android.app.ActionBar.TabListener {
+
+        final android.app.ActionBar.Tab mWrappedTab;
+        private Object mTag;
+        private FragmentTransaction mActiveTransaction;
+        private CharSequence mContentDescription;
+        private TabListener mTabListener;
+
+        public TabWrapper(android.app.ActionBar.Tab tab) {
+            mWrappedTab = tab;
+        }
+
+        @Override
+        public int getPosition() {
+            return mWrappedTab.getPosition();
+        }
+
+        @Override
+        public Drawable getIcon() {
+            return mWrappedTab.getIcon();
+        }
+
+        @Override
+        public CharSequence getText() {
+            return mWrappedTab.getText();
+        }
+
+        @Override
+        public Tab setIcon(Drawable icon) {
+            mWrappedTab.setIcon(icon);
+            return this;
+        }
+
+        @Override
+        public Tab setIcon(int resId) {
+            mWrappedTab.setIcon(resId);
+            return this;
+        }
+
+        @Override
+        public Tab setText(CharSequence text) {
+            mWrappedTab.setText(text);
+            return this;
+        }
+
+        @Override
+        public Tab setText(int resId) {
+            mWrappedTab.setText(resId);
+            return this;
+        }
+
+        @Override
+        public Tab setCustomView(View view) {
+            mWrappedTab.setCustomView(view);
+            return this;
+        }
+
+        @Override
+        public Tab setCustomView(int layoutResId) {
+            mWrappedTab.setCustomView(layoutResId);
+            return this;
+        }
+
+        @Override
+        public View getCustomView() {
+            return mWrappedTab.getCustomView();
+        }
+
+        @Override
+        public Tab setTag(Object obj) {
+            mTag = obj;
+            return this;
+        }
+
+        @Override
+        public Object getTag() {
+            return mTag;
+        }
+
+        @Override
+        public Tab setTabListener(TabListener listener) {
+            mTabListener = listener;
+            mWrappedTab.setTabListener(listener != null ? this : null);
+            return this;
+        }
+
+        @Override
+        public void select() {
+            mWrappedTab.select();
+        }
+
+        @Override
+        public Tab setContentDescription(int resId) {
+            mContentDescription = mActivity.getText(resId);
+            return this;
+        }
+
+        @Override
+        public Tab setContentDescription(CharSequence contentDesc) {
+            mContentDescription = contentDesc;
+            return this;
+        }
+
+        @Override
+        public CharSequence getContentDescription() {
+            return mContentDescription;
+        }
+
+        @Override
+        public void onTabSelected(android.app.ActionBar.Tab tab,
+                android.app.FragmentTransaction ft) {
+            mTabListener.onTabSelected(this, ft != null ? getActiveTransaction() : null);
+            commitActiveTransaction();
+        }
+
+        @Override
+        public void onTabUnselected(android.app.ActionBar.Tab tab,
+                android.app.FragmentTransaction ft) {
+            mTabListener.onTabUnselected(this, ft != null ? getActiveTransaction() : null);
+        }
+
+        @Override
+        public void onTabReselected(android.app.ActionBar.Tab tab,
+                android.app.FragmentTransaction ft) {
+            mTabListener.onTabReselected(this, ft != null ? getActiveTransaction() : null);
+            commitActiveTransaction();
+        }
+
+        private FragmentTransaction getActiveTransaction() {
+            if (mActiveTransaction == null) {
+                mActiveTransaction = mCallback.getSupportFragmentManager().beginTransaction()
+                        .disallowAddToBackStack();
+            }
+            return mActiveTransaction;
+        }
+
+        private void commitActiveTransaction() {
+            if (mActiveTransaction != null && !mActiveTransaction.isEmpty()) {
+                mActiveTransaction.commit();
+            }
+            mActiveTransaction = null;
+        }
+    }
 }
diff --git a/v7/appcompat/src/android/support/v7/internal/view/ActionBarPolicy.java b/v7/appcompat/src/android/support/v7/internal/view/ActionBarPolicy.java
index 8f809a4..e1b66d7 100644
--- a/v7/appcompat/src/android/support/v7/internal/view/ActionBarPolicy.java
+++ b/v7/appcompat/src/android/support/v7/internal/view/ActionBarPolicy.java
@@ -19,11 +19,14 @@
 import android.content.Context;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
+import android.os.Build;
 import android.support.v7.appcompat.R;
 
 /**
  * Allows components to query for various configuration policy decisions about how the action bar
  * should lay out and behave on the current device.
+ *
+ * @hide
  */
 public class ActionBarPolicy {
 
@@ -42,9 +45,8 @@
     }
 
     public boolean showsOverflowMenuButton() {
-        // Permanent menu key is always present on pre-HC devices
-        // return !ViewConfiguration.get(mContext).hasPermanentMenuKey();
-        return false;
+        // Only show overflow on HC+ devices
+        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB;
     }
 
     public int getEmbeddedMenuWidthLimit() {
diff --git a/v7/appcompat/src/android/support/v7/internal/view/CollapsibleActionView.java b/v7/appcompat/src/android/support/v7/internal/view/CollapsibleActionView.java
index e1034cd..dcc7a04 100644
--- a/v7/appcompat/src/android/support/v7/internal/view/CollapsibleActionView.java
+++ b/v7/appcompat/src/android/support/v7/internal/view/CollapsibleActionView.java
@@ -25,6 +25,8 @@
  *
  * <p>See {@link android.support.v4.internal.view.SupportMenuItem} for more information about action views.
  * See {@link android.app.ActionBar} for more information about the action bar.
+ *
+ * @hide
  */
 public interface CollapsibleActionView {
 
diff --git a/v7/appcompat/src/android/support/v7/internal/view/SupportMenuInflater.java b/v7/appcompat/src/android/support/v7/internal/view/SupportMenuInflater.java
index 1ba0d9f..023a8c6 100644
--- a/v7/appcompat/src/android/support/v7/internal/view/SupportMenuInflater.java
+++ b/v7/appcompat/src/android/support/v7/internal/view/SupportMenuInflater.java
@@ -49,6 +49,8 @@
  * to use SupportMenuInflater with an XmlPullParser over a plain XML file at runtime;
  * it only works with an XmlPullParser returned from a compiled resource (R.
  * <em>something</em> file.)
+ *
+ * @hide
  */
 public class SupportMenuInflater extends MenuInflater {
     private static final String LOG_TAG = "SupportMenuInflater";
diff --git a/v7/appcompat/src/android/support/v7/internal/view/menu/ActionMenuItemView.java b/v7/appcompat/src/android/support/v7/internal/view/menu/ActionMenuItemView.java
index fad5d26..c5d190d 100644
--- a/v7/appcompat/src/android/support/v7/internal/view/menu/ActionMenuItemView.java
+++ b/v7/appcompat/src/android/support/v7/internal/view/menu/ActionMenuItemView.java
@@ -22,6 +22,7 @@
 import android.graphics.Rect;
 import android.graphics.drawable.Drawable;
 import android.support.v7.appcompat.R;
+import android.support.v7.internal.widget.CompatTextView;
 import android.text.TextUtils;
 import android.text.method.TransformationMethod;
 import android.util.AttributeSet;
@@ -35,7 +36,7 @@
 /**
  * @hide
  */
-public class ActionMenuItemView extends TextView
+public class ActionMenuItemView extends CompatTextView
         implements MenuView.ItemView, View.OnClickListener, View.OnLongClickListener,
         ActionMenuView.ActionMenuChildView {
 
diff --git a/v7/appcompat/src/android/support/v7/internal/view/menu/ActionMenuPresenter.java b/v7/appcompat/src/android/support/v7/internal/view/menu/ActionMenuPresenter.java
index 83533fd..d385fc4 100644
--- a/v7/appcompat/src/android/support/v7/internal/view/menu/ActionMenuPresenter.java
+++ b/v7/appcompat/src/android/support/v7/internal/view/menu/ActionMenuPresenter.java
@@ -38,6 +38,8 @@
 
 /**
  * MenuPresenter for building action menus as seen in the action bar and action modes.
+ *
+ * @hide
  */
 public class ActionMenuPresenter extends BaseMenuPresenter
         implements ActionProvider.SubUiVisibilityListener {
diff --git a/v7/appcompat/src/android/support/v7/internal/view/menu/BaseMenuPresenter.java b/v7/appcompat/src/android/support/v7/internal/view/menu/BaseMenuPresenter.java
index fde68bc..62b6bf1 100644
--- a/v7/appcompat/src/android/support/v7/internal/view/menu/BaseMenuPresenter.java
+++ b/v7/appcompat/src/android/support/v7/internal/view/menu/BaseMenuPresenter.java
@@ -27,6 +27,8 @@
  * Base class for MenuPresenters that have a consistent container view and item views. Behaves
  * similarly to an AdapterView in that existing item views will be reused if possible when items
  * change.
+ *
+ * @hide
  */
 public abstract class BaseMenuPresenter implements MenuPresenter {
 
diff --git a/v7/appcompat/src/android/support/v7/internal/view/menu/ExpandedMenuView.java b/v7/appcompat/src/android/support/v7/internal/view/menu/ExpandedMenuView.java
index 72395b1..ba481fd 100644
--- a/v7/appcompat/src/android/support/v7/internal/view/menu/ExpandedMenuView.java
+++ b/v7/appcompat/src/android/support/v7/internal/view/menu/ExpandedMenuView.java
@@ -29,6 +29,8 @@
 /**
  * The expanded menu view is a list-like menu with all of the available menu items.  It is opened
  * by the user clicking no the 'More' button on the icon menu view.
+ *
+ * @hide
  */
 public final class ExpandedMenuView extends ListView
         implements ItemInvoker, MenuView, OnItemClickListener {
diff --git a/v7/appcompat/src/android/support/v7/internal/view/menu/ListMenuItemView.java b/v7/appcompat/src/android/support/v7/internal/view/menu/ListMenuItemView.java
index e77f1f2..282ff9d 100644
--- a/v7/appcompat/src/android/support/v7/internal/view/menu/ListMenuItemView.java
+++ b/v7/appcompat/src/android/support/v7/internal/view/menu/ListMenuItemView.java
@@ -33,6 +33,8 @@
 
 /**
  * The item view for each item in the ListView-based MenuViews.
+ *
+ * @hide
  */
 public class ListMenuItemView extends LinearLayout implements MenuView.ItemView {
 
diff --git a/v7/appcompat/src/android/support/v7/internal/view/menu/ListMenuPresenter.java b/v7/appcompat/src/android/support/v7/internal/view/menu/ListMenuPresenter.java
index 2a6ef94..1d79f5f 100644
--- a/v7/appcompat/src/android/support/v7/internal/view/menu/ListMenuPresenter.java
+++ b/v7/appcompat/src/android/support/v7/internal/view/menu/ListMenuPresenter.java
@@ -34,6 +34,8 @@
 
 /**
  * MenuPresenter for list-style menus.
+ *
+ * @hide
  */
 public class ListMenuPresenter implements MenuPresenter, AdapterView.OnItemClickListener {
     private static final String TAG = "ListMenuPresenter";
diff --git a/v7/appcompat/src/android/support/v7/internal/view/menu/MenuBuilder.java b/v7/appcompat/src/android/support/v7/internal/view/menu/MenuBuilder.java
index 7b3b84c..34ccbf2 100644
--- a/v7/appcompat/src/android/support/v7/internal/view/menu/MenuBuilder.java
+++ b/v7/appcompat/src/android/support/v7/internal/view/menu/MenuBuilder.java
@@ -33,6 +33,8 @@
 /**
  * Implementation of the {@link android.support.v4.internal.view.SupportMenu} interface for creating a
  * standard menu UI.
+ *
+ * @hide
  */
 public class MenuBuilder implements SupportMenu {
 
@@ -157,6 +159,7 @@
 
     /**
      * Called by menu to notify of close and selection changes.
+     * @hide
      */
     public interface Callback {
 
@@ -179,6 +182,7 @@
 
     /**
      * Called by menu items to execute their associated action
+     * @hide
      */
     public interface ItemInvoker {
 
diff --git a/v7/appcompat/src/android/support/v7/internal/view/menu/MenuItemWrapperHC.java b/v7/appcompat/src/android/support/v7/internal/view/menu/MenuItemWrapperHC.java
deleted file mode 100644
index 93702bb..0000000
--- a/v7/appcompat/src/android/support/v7/internal/view/menu/MenuItemWrapperHC.java
+++ /dev/null
@@ -1,294 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.v7.internal.view.menu;
-
-import android.content.Intent;
-import android.graphics.drawable.Drawable;
-import android.support.v4.internal.view.SupportMenuItem;
-import android.support.v4.view.ActionProvider;
-import android.support.v4.view.MenuItemCompat;
-import android.view.ContextMenu;
-import android.view.MenuItem;
-import android.view.SubMenu;
-import android.view.View;
-
-class MenuItemWrapperHC extends BaseMenuWrapper<android.view.MenuItem> implements SupportMenuItem {
-    MenuItemWrapperHC(android.view.MenuItem object) {
-        super(object);
-    }
-
-    @Override
-    public int getItemId() {
-        return mWrappedObject.getItemId();
-    }
-
-    @Override
-    public int getGroupId() {
-        return mWrappedObject.getGroupId();
-    }
-
-    @Override
-    public int getOrder() {
-        return mWrappedObject.getOrder();
-    }
-
-    @Override
-    public MenuItem setTitle(CharSequence title) {
-        mWrappedObject.setTitle(title);
-        return this;
-    }
-
-    @Override
-    public MenuItem setTitle(int title) {
-        mWrappedObject.setTitle(title);
-        return this;
-    }
-
-    @Override
-    public CharSequence getTitle() {
-        return mWrappedObject.getTitle();
-    }
-
-    @Override
-    public MenuItem setTitleCondensed(CharSequence title) {
-        mWrappedObject.setTitleCondensed(title);
-        return this;
-    }
-
-    @Override
-    public CharSequence getTitleCondensed() {
-        return mWrappedObject.getTitleCondensed();
-    }
-
-    @Override
-    public MenuItem setIcon(Drawable icon) {
-        mWrappedObject.setIcon(icon);
-        return this;
-    }
-
-    @Override
-    public MenuItem setIcon(int iconRes) {
-        mWrappedObject.setIcon(iconRes);
-        return this;
-    }
-
-    @Override
-    public Drawable getIcon() {
-        return mWrappedObject.getIcon();
-    }
-
-    @Override
-    public MenuItem setIntent(Intent intent) {
-        mWrappedObject.setIntent(intent);
-        return this;
-    }
-
-    @Override
-    public Intent getIntent() {
-        return mWrappedObject.getIntent();
-    }
-
-    @Override
-    public MenuItem setShortcut(char numericChar, char alphaChar) {
-        mWrappedObject.setShortcut(numericChar, alphaChar);
-        return this;
-    }
-
-    @Override
-    public MenuItem setNumericShortcut(char numericChar) {
-        mWrappedObject.setNumericShortcut(numericChar);
-        return this;
-    }
-
-    @Override
-    public char getNumericShortcut() {
-        return mWrappedObject.getNumericShortcut();
-    }
-
-    @Override
-    public MenuItem setAlphabeticShortcut(char alphaChar) {
-        mWrappedObject.setAlphabeticShortcut(alphaChar);
-        return this;
-    }
-
-    @Override
-    public char getAlphabeticShortcut() {
-        return mWrappedObject.getAlphabeticShortcut();
-    }
-
-    @Override
-    public MenuItem setCheckable(boolean checkable) {
-        mWrappedObject.setCheckable(checkable);
-        return this;
-    }
-
-    @Override
-    public boolean isCheckable() {
-        return mWrappedObject.isCheckable();
-    }
-
-    @Override
-    public MenuItem setChecked(boolean checked) {
-        mWrappedObject.setChecked(checked);
-        return this;
-    }
-
-    @Override
-    public boolean isChecked() {
-        return mWrappedObject.isChecked();
-    }
-
-    @Override
-    public MenuItem setVisible(boolean visible) {
-        mWrappedObject.setVisible(visible);
-        return this;
-    }
-
-    @Override
-    public boolean isVisible() {
-        return mWrappedObject.isVisible();
-    }
-
-    @Override
-    public MenuItem setEnabled(boolean enabled) {
-        mWrappedObject.setEnabled(enabled);
-        return this;
-    }
-
-    @Override
-    public boolean isEnabled() {
-        return mWrappedObject.isEnabled();
-    }
-
-    @Override
-    public boolean hasSubMenu() {
-        return mWrappedObject.hasSubMenu();
-    }
-
-    @Override
-    public SubMenu getSubMenu() {
-        return getSubMenuWrapper(mWrappedObject.getSubMenu());
-    }
-
-    @Override
-    public MenuItem setOnMenuItemClickListener(OnMenuItemClickListener menuItemClickListener) {
-        mWrappedObject.setOnMenuItemClickListener(menuItemClickListener != null ?
-                new OnMenuItemClickListenerWrapper(menuItemClickListener) : null);
-        return this;
-    }
-
-    @Override
-    public ContextMenu.ContextMenuInfo getMenuInfo() {
-        return mWrappedObject.getMenuInfo();
-    }
-
-    @Override
-    public void setShowAsAction(int actionEnum) {
-        mWrappedObject.setShowAsAction(actionEnum);
-    }
-
-    @Override
-    public MenuItem setShowAsActionFlags(int actionEnum) {
-        mWrappedObject.setShowAsActionFlags(actionEnum);
-        return this;
-    }
-
-    @Override
-    public MenuItem setActionView(View view) {
-        mWrappedObject.setActionView(view);
-        return this;
-    }
-
-    @Override
-    public MenuItem setActionView(int resId) {
-        mWrappedObject.setActionView(resId);
-        return this;
-    }
-
-    @Override
-    public View getActionView() {
-        return mWrappedObject.getActionView();
-    }
-
-    @Override
-    public SupportMenuItem setSupportActionProvider(ActionProvider actionProvider) {
-        // APIv14+ API
-        return this;
-    }
-
-    @Override
-    public ActionProvider getSupportActionProvider() {
-        // APIv14+ API
-        return null;
-    }
-
-    @Override
-    public MenuItem setActionProvider(android.view.ActionProvider actionProvider) {
-        // APIv14+ API
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public android.view.ActionProvider getActionProvider() {
-        // APIv14+ API
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean expandActionView() {
-        // APIv14+ API
-        return false;
-    }
-
-    @Override
-    public boolean collapseActionView() {
-        // APIv14+ API
-        return false;
-    }
-
-    @Override
-    public boolean isActionViewExpanded() {
-        // APIv14+ API
-        return false;
-    }
-
-    @Override
-    public MenuItem setOnActionExpandListener(MenuItem.OnActionExpandListener listener) {
-        // APIv14+ API
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public SupportMenuItem setSupportOnActionExpandListener(
-            MenuItemCompat.OnActionExpandListener listener) {
-        // APIv14+ API
-        return null;
-    }
-
-    private class OnMenuItemClickListenerWrapper extends BaseWrapper<OnMenuItemClickListener>
-            implements android.view.MenuItem.OnMenuItemClickListener {
-
-        OnMenuItemClickListenerWrapper(OnMenuItemClickListener object) {
-            super(object);
-        }
-
-        @Override
-        public boolean onMenuItemClick(android.view.MenuItem item) {
-            return mWrappedObject.onMenuItemClick(getMenuItemWrapper(item));
-        }
-    }
-}
diff --git a/v7/appcompat/src/android/support/v7/internal/view/menu/MenuItemWrapperICS.java b/v7/appcompat/src/android/support/v7/internal/view/menu/MenuItemWrapperICS.java
index b31abb3..3c653b8 100644
--- a/v7/appcompat/src/android/support/v7/internal/view/menu/MenuItemWrapperICS.java
+++ b/v7/appcompat/src/android/support/v7/internal/view/menu/MenuItemWrapperICS.java
@@ -16,12 +16,17 @@
 
 package android.support.v7.internal.view.menu;
 
+import android.content.Intent;
+import android.graphics.drawable.Drawable;
 import android.support.v4.internal.view.SupportMenuItem;
 import android.support.v4.view.ActionProvider;
+import android.support.v4.view.MenuItemCompat;
+import android.view.ContextMenu;
 import android.view.MenuItem;
+import android.view.SubMenu;
 import android.view.View;
 
-class MenuItemWrapperICS extends MenuItemWrapperHC {
+class MenuItemWrapperICS extends BaseMenuWrapper<android.view.MenuItem> implements SupportMenuItem {
     private final boolean mEmulateProviderVisibilityOverride;
     // Tracks the last requested visibility
     private boolean mLastRequestVisible;
@@ -37,6 +42,127 @@
     }
 
     @Override
+    public int getItemId() {
+        return mWrappedObject.getItemId();
+    }
+
+    @Override
+    public int getGroupId() {
+        return mWrappedObject.getGroupId();
+    }
+
+    @Override
+    public int getOrder() {
+        return mWrappedObject.getOrder();
+    }
+
+    @Override
+    public MenuItem setTitle(CharSequence title) {
+        mWrappedObject.setTitle(title);
+        return this;
+    }
+
+    @Override
+    public MenuItem setTitle(int title) {
+        mWrappedObject.setTitle(title);
+        return this;
+    }
+
+    @Override
+    public CharSequence getTitle() {
+        return mWrappedObject.getTitle();
+    }
+
+    @Override
+    public MenuItem setTitleCondensed(CharSequence title) {
+        mWrappedObject.setTitleCondensed(title);
+        return this;
+    }
+
+    @Override
+    public CharSequence getTitleCondensed() {
+        return mWrappedObject.getTitleCondensed();
+    }
+
+    @Override
+    public MenuItem setIcon(Drawable icon) {
+        mWrappedObject.setIcon(icon);
+        return this;
+    }
+
+    @Override
+    public MenuItem setIcon(int iconRes) {
+        mWrappedObject.setIcon(iconRes);
+        return this;
+    }
+
+    @Override
+    public Drawable getIcon() {
+        return mWrappedObject.getIcon();
+    }
+
+    @Override
+    public MenuItem setIntent(Intent intent) {
+        mWrappedObject.setIntent(intent);
+        return this;
+    }
+
+    @Override
+    public Intent getIntent() {
+        return mWrappedObject.getIntent();
+    }
+
+    @Override
+    public MenuItem setShortcut(char numericChar, char alphaChar) {
+        mWrappedObject.setShortcut(numericChar, alphaChar);
+        return this;
+    }
+
+    @Override
+    public MenuItem setNumericShortcut(char numericChar) {
+        mWrappedObject.setNumericShortcut(numericChar);
+        return this;
+    }
+
+    @Override
+    public char getNumericShortcut() {
+        return mWrappedObject.getNumericShortcut();
+    }
+
+    @Override
+    public MenuItem setAlphabeticShortcut(char alphaChar) {
+        mWrappedObject.setAlphabeticShortcut(alphaChar);
+        return this;
+    }
+
+    @Override
+    public char getAlphabeticShortcut() {
+        return mWrappedObject.getAlphabeticShortcut();
+    }
+
+    @Override
+    public MenuItem setCheckable(boolean checkable) {
+        mWrappedObject.setCheckable(checkable);
+        return this;
+    }
+
+    @Override
+    public boolean isCheckable() {
+        return mWrappedObject.isCheckable();
+    }
+
+    @Override
+    public MenuItem setChecked(boolean checked) {
+        mWrappedObject.setChecked(checked);
+        return this;
+    }
+
+    @Override
+    public boolean isChecked() {
+        return mWrappedObject.isChecked();
+    }
+
+    @Override
     public MenuItem setVisible(boolean visible) {
         if (mEmulateProviderVisibilityOverride) {
             mLastRequestVisible = visible;
@@ -49,6 +175,72 @@
     }
 
     @Override
+    public boolean isVisible() {
+        return mWrappedObject.isVisible();
+    }
+
+    @Override
+    public MenuItem setEnabled(boolean enabled) {
+        mWrappedObject.setEnabled(enabled);
+        return this;
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return mWrappedObject.isEnabled();
+    }
+
+    @Override
+    public boolean hasSubMenu() {
+        return mWrappedObject.hasSubMenu();
+    }
+
+    @Override
+    public SubMenu getSubMenu() {
+        return getSubMenuWrapper(mWrappedObject.getSubMenu());
+    }
+
+    @Override
+    public MenuItem setOnMenuItemClickListener(OnMenuItemClickListener menuItemClickListener) {
+        mWrappedObject.setOnMenuItemClickListener(menuItemClickListener != null ?
+                new OnMenuItemClickListenerWrapper(menuItemClickListener) : null);
+        return this;
+    }
+
+    @Override
+    public ContextMenu.ContextMenuInfo getMenuInfo() {
+        return mWrappedObject.getMenuInfo();
+    }
+
+    @Override
+    public void setShowAsAction(int actionEnum) {
+        mWrappedObject.setShowAsAction(actionEnum);
+    }
+
+    @Override
+    public MenuItem setShowAsActionFlags(int actionEnum) {
+        mWrappedObject.setShowAsActionFlags(actionEnum);
+        return this;
+    }
+
+    @Override
+    public MenuItem setActionView(View view) {
+        mWrappedObject.setActionView(view);
+        return this;
+    }
+
+    @Override
+    public MenuItem setActionView(int resId) {
+        mWrappedObject.setActionView(resId);
+        return this;
+    }
+
+    @Override
+    public View getActionView() {
+        return mWrappedObject.getActionView();
+    }
+
+    @Override
     public MenuItem setActionProvider(android.view.ActionProvider provider) {
         mWrappedObject.setActionProvider(provider);
         if (provider != null && mEmulateProviderVisibilityOverride) {
@@ -79,9 +271,16 @@
 
     @Override
     public MenuItem setOnActionExpandListener(MenuItem.OnActionExpandListener listener) {
+        mWrappedObject.setOnActionExpandListener(listener);
+        return this;
+    }
+
+    @Override
+    public SupportMenuItem setSupportOnActionExpandListener(
+            MenuItemCompat.OnActionExpandListener listener) {
         mWrappedObject.setOnActionExpandListener(listener != null ?
                 new OnActionExpandListenerWrapper(listener) : null);
-        return this;
+        return null;
     }
 
     @Override
@@ -120,10 +319,23 @@
         return mWrappedObject.setVisible(visible);
     }
 
-    private class OnActionExpandListenerWrapper extends BaseWrapper<MenuItem.OnActionExpandListener>
+    private class OnMenuItemClickListenerWrapper extends BaseWrapper<OnMenuItemClickListener>
+            implements android.view.MenuItem.OnMenuItemClickListener {
+
+        OnMenuItemClickListenerWrapper(OnMenuItemClickListener object) {
+            super(object);
+        }
+
+        @Override
+        public boolean onMenuItemClick(android.view.MenuItem item) {
+            return mWrappedObject.onMenuItemClick(getMenuItemWrapper(item));
+        }
+    }
+
+    private class OnActionExpandListenerWrapper extends BaseWrapper<MenuItemCompat.OnActionExpandListener>
             implements android.view.MenuItem.OnActionExpandListener {
 
-        OnActionExpandListenerWrapper(MenuItem.OnActionExpandListener object) {
+        OnActionExpandListenerWrapper(MenuItemCompat.OnActionExpandListener object) {
             super(object);
         }
 
diff --git a/v7/appcompat/src/android/support/v7/internal/view/menu/MenuPresenter.java b/v7/appcompat/src/android/support/v7/internal/view/menu/MenuPresenter.java
index e480b21..f11a8e1 100644
--- a/v7/appcompat/src/android/support/v7/internal/view/menu/MenuPresenter.java
+++ b/v7/appcompat/src/android/support/v7/internal/view/menu/MenuPresenter.java
@@ -23,11 +23,15 @@
 /**
  * A MenuPresenter is responsible for building views for a Menu object. It takes over some
  * responsibility from the old style monolithic MenuBuilder class.
+ *
+ * @hide
  */
 public interface MenuPresenter {
 
     /**
      * Called by menu implementation to notify another component of open/close events.
+     *
+     * @hide
      */
     public interface Callback {
 
diff --git a/v7/appcompat/src/android/support/v7/internal/view/menu/MenuWrapperFactory.java b/v7/appcompat/src/android/support/v7/internal/view/menu/MenuWrapperFactory.java
index dbb6cc7..10e583e 100644
--- a/v7/appcompat/src/android/support/v7/internal/view/menu/MenuWrapperFactory.java
+++ b/v7/appcompat/src/android/support/v7/internal/view/menu/MenuWrapperFactory.java
@@ -23,13 +23,16 @@
 import android.view.Menu;
 import android.view.MenuItem;
 
+/**
+ * @hide
+ */
 public final class MenuWrapperFactory {
     private MenuWrapperFactory() {
     }
 
     public static Menu createMenuWrapper(android.view.Menu frameworkMenu) {
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
-            return new MenuWrapperHC(frameworkMenu);
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
+            return new MenuWrapperICS(frameworkMenu);
         }
         return frameworkMenu;
     }
@@ -39,23 +42,21 @@
             return new MenuItemWrapperJB(frameworkMenuItem);
         } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
             return new MenuItemWrapperICS(frameworkMenuItem);
-        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
-            return new MenuItemWrapperHC(frameworkMenuItem);
         }
         return frameworkMenuItem;
     }
 
     public static SupportMenu createSupportMenuWrapper(android.view.Menu frameworkMenu) {
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
-            return new MenuWrapperHC(frameworkMenu);
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
+            return new MenuWrapperICS(frameworkMenu);
         }
         throw new UnsupportedOperationException();
     }
 
     public static SupportSubMenu createSupportSubMenuWrapper(
             android.view.SubMenu frameworkSubMenu) {
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
-            return new SubMenuWrapperHC(frameworkSubMenu);
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
+            return new SubMenuWrapperICS(frameworkSubMenu);
         }
         throw new UnsupportedOperationException();
     }
@@ -66,8 +67,6 @@
             return new MenuItemWrapperJB(frameworkMenuItem);
         } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
             return new MenuItemWrapperICS(frameworkMenuItem);
-        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
-            return new MenuItemWrapperHC(frameworkMenuItem);
         }
         throw new UnsupportedOperationException();
     }
diff --git a/v7/appcompat/src/android/support/v7/internal/view/menu/MenuWrapperHC.java b/v7/appcompat/src/android/support/v7/internal/view/menu/MenuWrapperICS.java
similarity index 96%
rename from v7/appcompat/src/android/support/v7/internal/view/menu/MenuWrapperHC.java
rename to v7/appcompat/src/android/support/v7/internal/view/menu/MenuWrapperICS.java
index 0a247a4..8d0e30f 100644
--- a/v7/appcompat/src/android/support/v7/internal/view/menu/MenuWrapperHC.java
+++ b/v7/appcompat/src/android/support/v7/internal/view/menu/MenuWrapperICS.java
@@ -24,9 +24,9 @@
 import android.view.MenuItem;
 import android.view.SubMenu;
 
-class MenuWrapperHC extends BaseMenuWrapper<android.view.Menu> implements SupportMenu {
+class MenuWrapperICS extends BaseMenuWrapper<android.view.Menu> implements SupportMenu {
 
-    MenuWrapperHC(android.view.Menu object) {
+    MenuWrapperICS(android.view.Menu object) {
         super(object);
     }
 
diff --git a/v7/appcompat/src/android/support/v7/internal/view/menu/SubMenuBuilder.java b/v7/appcompat/src/android/support/v7/internal/view/menu/SubMenuBuilder.java
index fa3c3b0..24a7ddd 100644
--- a/v7/appcompat/src/android/support/v7/internal/view/menu/SubMenuBuilder.java
+++ b/v7/appcompat/src/android/support/v7/internal/view/menu/SubMenuBuilder.java
@@ -26,6 +26,8 @@
 /**
  * The model for a sub menu, which is an extension of the menu.  Most methods are proxied to the
  * parent menu.
+ *
+ * @hide
  */
 public class SubMenuBuilder extends MenuBuilder implements SubMenu {
 
@@ -119,7 +121,6 @@
 
     @Override
     public void clearHeader() {
-        //To change body of implemented methods use File | Settings | File Templates.
     }
 
     @Override
diff --git a/v7/appcompat/src/android/support/v7/internal/view/menu/SubMenuWrapperHC.java b/v7/appcompat/src/android/support/v7/internal/view/menu/SubMenuWrapperICS.java
similarity index 94%
rename from v7/appcompat/src/android/support/v7/internal/view/menu/SubMenuWrapperHC.java
rename to v7/appcompat/src/android/support/v7/internal/view/menu/SubMenuWrapperICS.java
index 77c0178..3e70e49 100644
--- a/v7/appcompat/src/android/support/v7/internal/view/menu/SubMenuWrapperHC.java
+++ b/v7/appcompat/src/android/support/v7/internal/view/menu/SubMenuWrapperICS.java
@@ -22,8 +22,8 @@
 import android.view.SubMenu;
 import android.view.View;
 
-class SubMenuWrapperHC extends MenuWrapperHC implements SupportSubMenu {
-    SubMenuWrapperHC(android.view.SubMenu subMenu) {
+class SubMenuWrapperICS extends MenuWrapperICS implements SupportSubMenu {
+    SubMenuWrapperICS(android.view.SubMenu subMenu) {
         super(subMenu);
     }
 
diff --git a/v7/appcompat/src/android/support/v7/internal/widget/ActionBarOverlayLayout.java b/v7/appcompat/src/android/support/v7/internal/widget/ActionBarOverlayLayout.java
index e6bcc99..b67254b 100644
--- a/v7/appcompat/src/android/support/v7/internal/widget/ActionBarOverlayLayout.java
+++ b/v7/appcompat/src/android/support/v7/internal/widget/ActionBarOverlayLayout.java
@@ -28,6 +28,8 @@
 /**
  * Special layout for the containing of an overlay action bar (and its content) to correctly handle
  * fitting system windows when the content has request that its layout ignore them.
+ *
+ * @hide
  */
 public class ActionBarOverlayLayout extends FrameLayout {
 
diff --git a/v7/appcompat/src/android/support/v7/internal/widget/CompatTextView.java b/v7/appcompat/src/android/support/v7/internal/widget/CompatTextView.java
new file mode 100644
index 0000000..b446b47
--- /dev/null
+++ b/v7/appcompat/src/android/support/v7/internal/widget/CompatTextView.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.internal.widget;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Rect;
+import android.support.v7.appcompat.R;
+import android.text.method.TransformationMethod;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.TextView;
+
+import java.util.Locale;
+
+/**
+ * @hide
+ */
+public class CompatTextView extends TextView {
+
+    public CompatTextView(Context context) {
+        this(context, null);
+    }
+
+    public CompatTextView(Context context, AttributeSet attrs) {
+        this(context, attrs, 0);
+    }
+
+    public CompatTextView(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+
+        boolean allCaps = false;
+
+        TypedArray style = context
+                .obtainStyledAttributes(attrs, R.styleable.CompatTextView, defStyle, 0);
+        allCaps = style.getBoolean(R.styleable.CompatTextView_textAllCaps, false);
+        style.recycle();
+
+        // Framework impl also checks TextAppearance for textAllCaps. This isn't needed for our
+        // purposes so has been omitted.
+
+        if (allCaps) {
+            setTransformationMethod(new AllCapsTransformationMethod(context));
+        }
+    }
+
+    /**
+     * Transforms source text into an ALL CAPS string, locale-aware.
+     */
+    private static class AllCapsTransformationMethod implements TransformationMethod {
+
+        private final Locale mLocale;
+
+        public AllCapsTransformationMethod(Context context) {
+            mLocale = context.getResources().getConfiguration().locale;
+        }
+
+        @Override
+        public CharSequence getTransformation(CharSequence source, View view) {
+            return source != null ? source.toString().toUpperCase(mLocale) : null;
+        }
+
+        @Override
+        public void onFocusChanged(View view, CharSequence charSequence, boolean b, int i,
+                Rect rect) {
+        }
+    }
+}
diff --git a/v7/appcompat/src/android/support/v7/internal/widget/ListPopupWindow.java b/v7/appcompat/src/android/support/v7/internal/widget/ListPopupWindow.java
index 800fa46..8913fea 100644
--- a/v7/appcompat/src/android/support/v7/internal/widget/ListPopupWindow.java
+++ b/v7/appcompat/src/android/support/v7/internal/widget/ListPopupWindow.java
@@ -49,6 +49,8 @@
  *
  * @see android.widget.AutoCompleteTextView
  * @see android.widget.Spinner
+ *
+ * @hide
  */
 public class ListPopupWindow {
 
diff --git a/v7/appcompat/src/android/support/v7/internal/widget/ScrollingTabContainerView.java b/v7/appcompat/src/android/support/v7/internal/widget/ScrollingTabContainerView.java
index 2c1fac3..4f0d026 100644
--- a/v7/appcompat/src/android/support/v7/internal/widget/ScrollingTabContainerView.java
+++ b/v7/appcompat/src/android/support/v7/internal/widget/ScrollingTabContainerView.java
@@ -38,6 +38,8 @@
 /**
  * This widget implements the dynamic action bar tab behavior that can change across different
  * configurations or circumstances.
+ *
+ * @hide
  */
 public class ScrollingTabContainerView extends HorizontalScrollView
         implements AdapterViewICS.OnItemClickListener {
@@ -316,6 +318,9 @@
         tabView.getTab().select();
     }
 
+    /**
+     * @hide
+     */
     public static class TabView extends LinearLayout {
 
         private ActionBar.Tab mTab;
@@ -404,7 +409,7 @@
 
                 if (text != null) {
                     if (mTextView == null) {
-                        TextView textView = new TextView(getContext(), null,
+                        TextView textView = new CompatTextView(getContext(), null,
                                 R.attr.actionBarTabTextStyle);
                         textView.setEllipsize(TruncateAt.END);
                         LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT,