diff options
| -rw-r--r-- | core/java/android/widget/ActivityChooserModel.java | 10 | ||||
| -rw-r--r-- | core/java/android/widget/ActivityChooserView.java | 46 | ||||
| -rw-r--r-- | core/java/android/widget/ShareActionProvider.java | 7 | ||||
| -rw-r--r-- | core/res/res/values-w500dp/bools.xml | 19 | ||||
| -rw-r--r-- | core/res/res/values/bools.xml | 1 | ||||
| -rw-r--r-- | core/res/res/values/public.xml | 1 |
6 files changed, 74 insertions, 10 deletions
diff --git a/core/java/android/widget/ActivityChooserModel.java b/core/java/android/widget/ActivityChooserModel.java index c53b5f64a11c..fba8d3a209e6 100644 --- a/core/java/android/widget/ActivityChooserModel.java +++ b/core/java/android/widget/ActivityChooserModel.java @@ -761,6 +761,16 @@ public class ActivityChooserModel extends DataSetObservable { } /** + * Gets whether the given observer is already registered. + * + * @param observer The observer. + * @return True if already registered. + */ + public boolean isRegisteredObserver(DataSetObserver observer) { + return mObservers.contains(observer); + } + + /** * Represents a record in the history. */ public final static class HistoricalRecord { diff --git a/core/java/android/widget/ActivityChooserView.java b/core/java/android/widget/ActivityChooserView.java index be6b4e2f5c76..0c0bb1ed5d66 100644 --- a/core/java/android/widget/ActivityChooserView.java +++ b/core/java/android/widget/ActivityChooserView.java @@ -20,8 +20,10 @@ import com.android.internal.R; import android.content.Context; import android.content.Intent; +import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; +import android.content.res.Configuration; import android.content.res.Resources; import android.content.res.TypedArray; import android.database.DataSetObserver; @@ -174,6 +176,11 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod private int mDefaultActionButtonContentDescription; /** + * Whether this view has a default activity affordance. + */ + private boolean mHasDefaultActivity; + + /** * Create a new instance. * * @param context The application environment. @@ -245,6 +252,8 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod Resources resources = context.getResources(); mListPopupMaxWidth = Math.max(resources.getDisplayMetrics().widthPixels / 2, resources.getDimensionPixelSize(com.android.internal.R.dimen.config_prefDialogWidth)); + + updateHasDefaultActivity(); } /** @@ -258,6 +267,21 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod } } + @Override + protected void onConfigurationChanged(Configuration newConfig) { + Configuration oldConfig = mContext.getResources().getConfiguration(); + final int changed = oldConfig.diff(newConfig); + if ((changed & ActivityInfo.CONFIG_SCREEN_SIZE) != 0 + || (changed & ActivityInfo.CONFIG_ORIENTATION) != 0) { + updateHasDefaultActivity(); + } + } + + private void updateHasDefaultActivity() { + mHasDefaultActivity = mContext.getResources().getBoolean( + R.bool.activity_chooser_view_has_default_activity); + } + /** * Sets the background for the button that expands the activity * overflow list. @@ -383,7 +407,8 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod protected void onAttachedToWindow() { super.onAttachedToWindow(); ActivityChooserModel dataModel = mAdapter.getDataModel(); - if (dataModel != null) { + if (dataModel != null + && !dataModel.isRegisteredObserver(mModelDataSetOberver)) { dataModel.registerObserver(mModelDataSetOberver); } mIsAttachedToWindow = true; @@ -393,7 +418,8 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod protected void onDetachedFromWindow() { super.onDetachedFromWindow(); ActivityChooserModel dataModel = mAdapter.getDataModel(); - if (dataModel != null) { + if (dataModel != null + && dataModel.isRegisteredObserver(mModelDataSetOberver)) { dataModel.unregisterObserver(mModelDataSetOberver); } ViewTreeObserver viewTreeObserver = getViewTreeObserver(); @@ -496,7 +522,7 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod // Default activity button. final int activityCount = mAdapter.getActivityCount(); final int historySize = mAdapter.getHistorySize(); - if (activityCount > 0 && historySize > 0) { + if (mHasDefaultActivity && activityCount > 0 && historySize > 0) { mDefaultActivityButton.setVisibility(VISIBLE); ResolveInfo activity = mAdapter.getDefaultActivity(); PackageManager packageManager = mContext.getPackageManager(); @@ -512,9 +538,9 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod } // Activity chooser content. if (mDefaultActivityButton.getVisibility() == VISIBLE) { - mActivityChooserContent.setBackgroundDrawable(mActivityChooserContentBackground); + mActivityChooserContent.setBackground(mActivityChooserContentBackground); } else { - mActivityChooserContent.setBackgroundDrawable(null); + mActivityChooserContent.setBackground(null); } } @@ -577,7 +603,7 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod // OnLongClickListener#onLongClick @Override public boolean onLongClick(View view) { - if (view == mDefaultActivityButton) { + if (mHasDefaultActivity && view == mDefaultActivityButton) { if (mAdapter.getCount() > 0) { mIsSelectingDefaultActivity = true; showPopupUnchecked(mInitialActivityCount); @@ -630,14 +656,16 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod public void setDataModel(ActivityChooserModel dataModel) { ActivityChooserModel oldDataModel = mAdapter.getDataModel(); - if (oldDataModel != null && isShown()) { + if (oldDataModel != null) { oldDataModel.unregisterObserver(mModelDataSetOberver); } mDataModel = dataModel; - if (dataModel != null && isShown()) { + if (dataModel != null) { dataModel.registerObserver(mModelDataSetOberver); + notifyDataSetChanged(); + } else { + notifyDataSetInvalidated(); } - notifyDataSetChanged(); } @Override diff --git a/core/java/android/widget/ShareActionProvider.java b/core/java/android/widget/ShareActionProvider.java index 080b87db13c1..367561e3305f 100644 --- a/core/java/android/widget/ShareActionProvider.java +++ b/core/java/android/widget/ShareActionProvider.java @@ -44,6 +44,7 @@ import com.android.internal.R; * <code> * // In Activity#onCreateOptionsMenu * public boolean onCreateOptionsMenu(Menu menu) { + * getManuInflater().inflate(R.menu.my_menu, menu); * // Get the menu item. * MenuItem menuItem = menu.findItem(R.id.my_menu_item); * // Get the provider and hold onto it to set/change the share intent. @@ -239,7 +240,11 @@ public class ShareActionProvider extends ActionProvider { * <p> * <strong>Note:</strong> The history file name can be set any time, however * only the action views created by {@link #onCreateActionView()} after setting - * the file name will be backed by the provided file. + * the file name will be backed by the provided file. Hence, if you are using + * a share action provider on a menu item and want to change the history file + * based on the type of the currently selected item, you need to call + * {@link android.app.Activity#invalidateOptionsMenu()} to force the system + * to recreate the menu UI. * <p> * * @param shareHistoryFile The share history file name. diff --git a/core/res/res/values-w500dp/bools.xml b/core/res/res/values-w500dp/bools.xml new file mode 100644 index 000000000000..f53fd39931a2 --- /dev/null +++ b/core/res/res/values-w500dp/bools.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2012 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources> + <bool name="activity_chooser_view_has_default_activity">true</bool> +</resources>
\ No newline at end of file diff --git a/core/res/res/values/bools.xml b/core/res/res/values/bools.xml index f9762b18f9ad..6910ebeb16fa 100644 --- a/core/res/res/values/bools.xml +++ b/core/res/res/values/bools.xml @@ -22,4 +22,5 @@ <bool name="show_ongoing_ime_switcher">true</bool> <bool name="action_bar_expanded_action_views_exclusive">true</bool> <bool name="target_honeycomb_needs_options_menu">true</bool> + <bool name="activity_chooser_view_has_default_activity">false</bool> </resources> diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml index f06e30f98fe4..822ee14d3aeb 100644 --- a/core/res/res/values/public.xml +++ b/core/res/res/values/public.xml @@ -1376,6 +1376,7 @@ <java-symbol type="bool" name="config_wifi_dual_band_support" /> <java-symbol type="bool" name="config_wimaxEnabled" /> <java-symbol type="bool" name="show_ongoing_ime_switcher" /> + <java-symbol type="bool" name="activity_chooser_view_has_default_activity" /> <java-symbol type="color" name="config_defaultNotificationColor" /> <java-symbol type="drawable" name="ic_notification_ime_default" /> <java-symbol type="drawable" name="stat_notify_car_mode" /> |
