diff options
author | Svetoslav Ganov <svetoslavganov@google.com> | 2011-08-22 09:35:00 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-08-22 09:35:00 -0700 |
commit | 151763d3fc702ee2341aa6bebe821ce98d99e787 (patch) | |
tree | 5592c222625f5375ab054e4423a024444c176a32 /core/java/android/widget/ActivityChooserView.java | |
parent | fb3db1f3a237b08bc125c3cd5ab2c3ff92e76c8d (diff) | |
parent | 8c6c79f0909ceabeb8abe1013648c31c7582b7ad (diff) | |
download | frameworks_base-151763d3fc702ee2341aa6bebe821ce98d99e787.zip frameworks_base-151763d3fc702ee2341aa6bebe821ce98d99e787.tar.gz frameworks_base-151763d3fc702ee2341aa6bebe821ce98d99e787.tar.bz2 |
Merge "Adding a callback to ShareActionProvider + make ActivityChooserView popup hide on action bar hide."
Diffstat (limited to 'core/java/android/widget/ActivityChooserView.java')
-rw-r--r-- | core/java/android/widget/ActivityChooserView.java | 35 |
1 files changed, 32 insertions, 3 deletions
diff --git a/core/java/android/widget/ActivityChooserView.java b/core/java/android/widget/ActivityChooserView.java index 6a84626..fcc7938 100644 --- a/core/java/android/widget/ActivityChooserView.java +++ b/core/java/android/widget/ActivityChooserView.java @@ -29,6 +29,8 @@ import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.view.ViewTreeObserver; +import android.view.ViewTreeObserver.OnGlobalLayoutListener; import android.widget.ActivityChooserModel.ActivityChooserModelClient; import com.android.internal.R; @@ -115,6 +117,19 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod } }; + private final OnGlobalLayoutListener mOnGlobalLayoutListener = new OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + if (isShowingPopup()) { + if (!isShown()) { + getListPopupWindow().dismiss(); + } else { + getListPopupWindow().show(); + } + } + } + }; + /** * Popup window for showing the activity overflow list. */ @@ -261,6 +276,8 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod throw new IllegalStateException("No data model. Did you call #setDataModel?"); } + getViewTreeObserver().addOnGlobalLayoutListener(mOnGlobalLayoutListener); + mAdapter.setMaxActivityCount(maxActivityCount); final int activityCount = mAdapter.getActivityCount(); @@ -292,6 +309,10 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod public boolean dismissPopup() { if (isShowingPopup()) { getListPopupWindow().dismiss(); + ViewTreeObserver viewTreeObserver = getViewTreeObserver(); + if (viewTreeObserver.isAlive()) { + viewTreeObserver.removeGlobalOnLayoutListener(mOnGlobalLayoutListener); + } } return true; } @@ -322,6 +343,10 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod if (dataModel != null) { dataModel.unregisterObserver(mModelDataSetOberver); } + ViewTreeObserver viewTreeObserver = getViewTreeObserver(); + if (viewTreeObserver.isAlive()) { + viewTreeObserver.removeGlobalOnLayoutListener(mOnGlobalLayoutListener); + } mIsAttachedToWindow = false; } @@ -433,8 +458,10 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod } } else { // The first item in the model is default action => adjust index - Intent launchIntent = mAdapter.getDataModel().chooseActivity(position + 1); - mContext.startActivity(launchIntent); + Intent launchIntent = mAdapter.getDataModel().chooseActivity(position + 1); + if (launchIntent != null) { + mContext.startActivity(launchIntent); + } } } break; default: @@ -449,7 +476,9 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod ResolveInfo defaultActivity = mAdapter.getDefaultActivity(); final int index = mAdapter.getDataModel().getActivityIndex(defaultActivity); Intent launchIntent = mAdapter.getDataModel().chooseActivity(index); - mContext.startActivity(launchIntent); + if (launchIntent != null) { + mContext.startActivity(launchIntent); + } } else if (view == mExpandActivityOverflowButton) { mIsSelectingDefaultActivity = false; showPopupUnchecked(mInitialActivityCount); |