summaryrefslogtreecommitdiff
path: root/core/java/android/view/MenuInflater.java
diff options
context:
space:
mode:
authorYigit Boyar <yboyar@google.com>2014-09-17 19:23:21 -0700
committerYigit Boyar <yboyar@google.com>2014-09-17 19:23:21 -0700
commitb8c19b1b33c1de2b17a51ccc9fc2893489f9f878 (patch)
tree6005a56eafc0d7cf4db4f516a529a1f16db5c1d5 /core/java/android/view/MenuInflater.java
parentae1990f4060a18488e8bb90dce040dba315804e1 (diff)
Find activity from context in menu inflator for click events
Bug: 17514128 Change-Id: I3028182a5bdb85eccd9db0faa13da9fc459af3c6
Diffstat (limited to 'core/java/android/view/MenuInflater.java')
-rw-r--r--core/java/android/view/MenuInflater.java21
1 files changed, 19 insertions, 2 deletions
diff --git a/core/java/android/view/MenuInflater.java b/core/java/android/view/MenuInflater.java
index 71296fa61965..5811c17dbdb3 100644
--- a/core/java/android/view/MenuInflater.java
+++ b/core/java/android/view/MenuInflater.java
@@ -23,6 +23,7 @@ import org.xmlpull.v1.XmlPullParserException;
import android.app.Activity;
import android.content.Context;
+import android.content.ContextWrapper;
import android.content.res.TypedArray;
import android.content.res.XmlResourceParser;
import android.util.AttributeSet;
@@ -74,7 +75,6 @@ public class MenuInflater {
*/
public MenuInflater(Context context) {
mContext = context;
- mRealOwner = context;
mActionViewConstructorArguments = new Object[] {context};
mActionProviderConstructorArguments = mActionViewConstructorArguments;
}
@@ -259,6 +259,23 @@ public class MenuInflater {
}
}
}
+
+ private Object getRealOwner() {
+ if (mRealOwner == null) {
+ mRealOwner = findRealOwner(mContext);
+ }
+ return mRealOwner;
+ }
+
+ private Object findRealOwner(Object owner) {
+ if (owner instanceof Activity) {
+ return owner;
+ }
+ if (owner instanceof ContextWrapper) {
+ return findRealOwner(((ContextWrapper) owner).getBaseContext());
+ }
+ return owner;
+ }
/**
* State for the current menu.
@@ -439,7 +456,7 @@ public class MenuInflater {
+ "be used within a restricted context");
}
item.setOnMenuItemClickListener(
- new InflatedOnMenuItemClickListener(mRealOwner, itemListenerMethodName));
+ new InflatedOnMenuItemClickListener(getRealOwner(), itemListenerMethodName));
}
if (item instanceof MenuItemImpl) {