Bug 2841148 - Add accessors for action bar context mode state.

Change-Id: I04f3efce5a692b346756cc80c8d15f3abba10558
diff --git a/api/current.xml b/api/current.xml
index 9486ca6..2837747 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -19890,6 +19890,17 @@
  visibility="public"
 >
 </method>
+<method name="getCustomView"
+ return="android.view.View"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="getMenu"
  return="android.view.Menu"
  abstract="true"
@@ -19901,6 +19912,28 @@
  visibility="public"
 >
 </method>
+<method name="getSubtitle"
+ return="java.lang.CharSequence"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getTitle"
+ return="java.lang.CharSequence"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="invalidate"
  return="void"
  abstract="true"
diff --git a/core/java/android/app/ActionBar.java b/core/java/android/app/ActionBar.java
index d0b3ac4..3cd2b9e 100644
--- a/core/java/android/app/ActionBar.java
+++ b/core/java/android/app/ActionBar.java
@@ -368,6 +368,24 @@
          * @return The context mode's menu.
          */
         public abstract Menu getMenu();
+
+        /**
+         * Returns the current title of this context mode.
+         * @return Title text
+         */
+        public abstract CharSequence getTitle();
+
+        /**
+         * Returns the current subtitle of this context mode.
+         * @return Subtitle text
+         */
+        public abstract CharSequence getSubtitle();
+
+        /**
+         * Returns the current custom view for this context mode.
+         * @return The current custom view
+         */
+        public abstract View getCustomView();
     }
     
     /**
diff --git a/core/java/com/android/internal/app/ActionBarImpl.java b/core/java/com/android/internal/app/ActionBarImpl.java
index c6be7c2..f37021b 100644
--- a/core/java/com/android/internal/app/ActionBarImpl.java
+++ b/core/java/com/android/internal/app/ActionBarImpl.java
@@ -34,6 +34,7 @@
 import android.widget.SpinnerAdapter;
 import android.widget.ViewAnimator;
 
+import java.lang.ref.WeakReference;
 import java.util.ArrayList;
 
 /**
@@ -338,6 +339,7 @@
     public class ContextMode extends ActionBar.ContextMode {
         private ContextModeCallback mCallback;
         private ActionMenu mMenu;
+        private WeakReference<View> mCustomView;
         
         public ContextMode(ContextModeCallback callback) {
             mCallback = callback;
@@ -375,6 +377,7 @@
         @Override
         public void setCustomView(View view) {
             mUpperContextView.setCustomView(view);
+            mCustomView = new WeakReference<View>(view);
         }
 
         @Override
@@ -386,7 +389,22 @@
         public void setTitle(CharSequence title) {
             mUpperContextView.setTitle(title);
         }
+
+        @Override
+        public CharSequence getTitle() {
+            return mUpperContextView.getTitle();
+        }
+
+        @Override
+        public CharSequence getSubtitle() {
+            return mUpperContextView.getSubtitle();
+        }
         
+        @Override
+        public View getCustomView() {
+            return mCustomView != null ? mCustomView.get() : null;
+        }
+
         public void dispatchOnContextItemClicked(MenuItem item) {
             ActionMenuItem actionItem = (ActionMenuItem) item;
             if (!actionItem.invoke()) {
diff --git a/core/java/com/android/internal/widget/ActionBarContextView.java b/core/java/com/android/internal/widget/ActionBarContextView.java
index 0f895f0..b57b7a8 100644
--- a/core/java/com/android/internal/widget/ActionBarContextView.java
+++ b/core/java/com/android/internal/widget/ActionBarContextView.java
@@ -105,6 +105,14 @@
         initTitle();
     }
 
+    public CharSequence getTitle() {
+        return mTitle;
+    }
+
+    public CharSequence getSubtitle() {
+        return mSubtitle;
+    }
+
     private void initTitle() {
         if (mTitleLayout == null) {
             LayoutInflater inflater = LayoutInflater.from(getContext());