summaryrefslogtreecommitdiffstats
path: root/core/java
diff options
context:
space:
mode:
authorAdam Powell <adamp@google.com>2011-07-28 11:58:21 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2011-07-28 11:58:21 -0700
commit7c8d19d53cd48b6c748365aa6393eab2e9f09641 (patch)
treed1c8eacb4cbbfb263a6ae0e8ad8e936acc2348d2 /core/java
parenta7ffaee29892cc38ae2327017b6670adafef711b (diff)
parent88ab69780f58e4b32d497266b2ad646a4d74827b (diff)
downloadframeworks_base-7c8d19d53cd48b6c748365aa6393eab2e9f09641.zip
frameworks_base-7c8d19d53cd48b6c748365aa6393eab2e9f09641.tar.gz
frameworks_base-7c8d19d53cd48b6c748365aa6393eab2e9f09641.tar.bz2
Merge "Fix bug 5087752 - Maintain correct contrast against action bars in inverse-bar themes"
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/app/ActionBar.java13
-rw-r--r--core/java/android/app/Activity.java14
-rw-r--r--core/java/com/android/internal/app/ActionBarImpl.java21
3 files changed, 46 insertions, 2 deletions
diff --git a/core/java/android/app/ActionBar.java b/core/java/android/app/ActionBar.java
index a217867..7acaec8 100644
--- a/core/java/android/app/ActionBar.java
+++ b/core/java/android/app/ActionBar.java
@@ -627,7 +627,18 @@ public abstract class ActionBar {
*
* @param enabled true to enable the home button, false to disable the home button.
*/
- public abstract void setHomeButtonEnabled(boolean enabled);
+ public void setHomeButtonEnabled(boolean enabled) { }
+
+ /**
+ * Returns a {@link Context} with an appropriate theme for creating views that
+ * will appear in the action bar. If you are inflating or instantiating custom views
+ * that will appear in an action bar, you should use the Context returned by this method.
+ * (This includes adapters used for list navigation mode.)
+ * This will ensure that views contrast properly against the action bar.
+ *
+ * @return A themed Context for creating views
+ */
+ public Context getThemedContext() { return null; }
/**
* Listener interface for ActionBar navigation events.
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 8d03ac7..c6c4025 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -32,6 +32,7 @@ import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.TypedArray;
+import android.content.res.Resources.Theme;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.Canvas;
@@ -54,6 +55,7 @@ import android.util.AttributeSet;
import android.util.EventLog;
import android.util.Log;
import android.util.SparseArray;
+import android.util.TypedValue;
import android.view.ActionMode;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
@@ -672,6 +674,7 @@ public class Activity extends ContextThemeWrapper
/*package*/ int mConfigChangeFlags;
/*package*/ Configuration mCurrentConfig;
private SearchManager mSearchManager;
+ private MenuInflater mMenuInflater;
static final class NonConfigurationInstances {
Object activity;
@@ -3083,7 +3086,16 @@ public class Activity extends ContextThemeWrapper
* Returns a {@link MenuInflater} with this context.
*/
public MenuInflater getMenuInflater() {
- return new MenuInflater(this);
+ // Make sure that action views can get an appropriate theme.
+ if (mMenuInflater == null) {
+ initActionBar();
+ if (mActionBar != null) {
+ mMenuInflater = new MenuInflater(mActionBar.getThemedContext());
+ } else {
+ mMenuInflater = new MenuInflater(this);
+ }
+ }
+ return mMenuInflater;
}
@Override
diff --git a/core/java/com/android/internal/app/ActionBarImpl.java b/core/java/com/android/internal/app/ActionBarImpl.java
index 95f1f98..7684bc5 100644
--- a/core/java/com/android/internal/app/ActionBarImpl.java
+++ b/core/java/com/android/internal/app/ActionBarImpl.java
@@ -35,10 +35,13 @@ import android.app.Dialog;
import android.app.FragmentTransaction;
import android.content.Context;
import android.content.res.Configuration;
+import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Handler;
+import android.util.TypedValue;
import android.view.ActionMode;
+import android.view.ContextThemeWrapper;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
@@ -61,6 +64,7 @@ public class ActionBarImpl extends ActionBar {
private static final String TAG = "ActionBarImpl";
private Context mContext;
+ private Context mThemedContext;
private Activity mActivity;
private Dialog mDialog;
@@ -605,6 +609,23 @@ public class ActionBarImpl extends ActionBar {
}
}
+ public Context getThemedContext() {
+ if (mThemedContext == null) {
+ TypedValue outValue = new TypedValue();
+ Resources.Theme currentTheme = mContext.getTheme();
+ currentTheme.resolveAttribute(com.android.internal.R.attr.actionBarWidgetTheme,
+ outValue, true);
+ final int targetThemeRes = outValue.resourceId;
+
+ if (targetThemeRes != 0 && mContext.getThemeResId() != targetThemeRes) {
+ mThemedContext = new ContextThemeWrapper(mContext, targetThemeRes);
+ } else {
+ mThemedContext = mContext;
+ }
+ }
+ return mThemedContext;
+ }
+
/**
* @hide
*/