Add subtitles for action bars and context modes.

Fix an issue where context mode content was cleared before animating out.

Change-Id: Ie7a065e65bc18e3da32de07543d0f71d2a2d648c
diff --git a/core/java/com/android/internal/app/ActionBarImpl.java b/core/java/com/android/internal/app/ActionBarImpl.java
index b36524e..6ac68aa 100644
--- a/core/java/com/android/internal/app/ActionBarImpl.java
+++ b/core/java/com/android/internal/app/ActionBarImpl.java
@@ -23,6 +23,7 @@
 
 import android.app.ActionBar;
 import android.graphics.drawable.Drawable;
+import android.os.Handler;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
@@ -52,7 +53,17 @@
     private static final int CONTEXT_DISPLAY_SPLIT = 1;
     
     private int mContextDisplayMode;
-    
+
+    final Handler mHandler = new Handler();
+    final Runnable mCloseContext = new Runnable() {
+        public void run() {
+            mUpperContextView.closeMode();
+            if (mLowerContextView != null) {
+                mLowerContextView.removeAllViews();
+            }
+        }
+    };
+
     public ActionBarImpl(View decor) {
         mActionView = (ActionBarView) decor.findViewById(com.android.internal.R.id.action_bar);
         mUpperContextView = (ActionBarContextView) decor.findViewById(
@@ -66,7 +77,7 @@
             throw new IllegalStateException(getClass().getSimpleName() + " can only be used " +
                     "with a compatible window decor layout");
         }
-        
+
         mContextDisplayMode = mLowerContextView == null ?
                 CONTEXT_DISPLAY_NORMAL : CONTEXT_DISPLAY_SPLIT;
     }
@@ -75,17 +86,22 @@
         mActionView.setCustomNavigationView(view);
         mActionView.setCallback(null);
     }
-    
+
     public void setDropdownNavigationMode(SpinnerAdapter adapter, NavigationCallback callback) {
         mActionView.setCallback(callback);
         mActionView.setNavigationMode(NAVIGATION_MODE_DROPDOWN_LIST);
         mActionView.setDropdownAdapter(adapter);
     }
-    
+
+    public void setStandardNavigationMode() {
+        mActionView.setNavigationMode(NAVIGATION_MODE_STANDARD);
+        mActionView.setCallback(null);
+    }
+
     public void setStandardNavigationMode(CharSequence title) {
         setStandardNavigationMode(title, null);
     }
-    
+
     public void setStandardNavigationMode(CharSequence title, CharSequence subtitle) {
         mActionView.setNavigationMode(NAVIGATION_MODE_STANDARD);
         mActionView.setTitle(title);
@@ -93,10 +109,18 @@
         mActionView.setCallback(null);
     }
 
+    public void setTitle(CharSequence title) {
+        mActionView.setTitle(title);
+    }
+
+    public void setSubtitle(CharSequence subtitle) {
+        mActionView.setSubtitle(subtitle);
+    }
+
     public void setDisplayOptions(int options) {
         mActionView.setDisplayOptions(options);
     }
-    
+
     public void setDisplayOptions(int options, int mask) {
         final int current = mActionView.getDisplayOptions(); 
         mActionView.setDisplayOptions((options & mask) | (current & ~mask));
@@ -170,11 +194,11 @@
         @Override
         public void finish() {
             mCallback.onDestroyContextMode(this);
-            mUpperContextView.closeMode();
-            if (mLowerContextView != null) {
-                mLowerContextView.removeAllViews();
-            }
             mAnimatorView.setDisplayedChild(NORMAL_VIEW);
+
+            // Clear out the context mode views after the animation finishes
+            mHandler.postDelayed(mCloseContext, mAnimatorView.getOutAnimation().getDuration());
+
             if (mLowerContextView != null && mLowerContextView.getVisibility() != View.GONE) {
                 // TODO Animate this
                 mLowerContextView.setVisibility(View.GONE);