Fix bug 2859423 - action bar: need a way to choose item in spinner
Change-Id: Idf9c222e5d8f27b4339a6df7d14f3f10dcb4be2c
diff --git a/core/java/android/app/ActionBar.java b/core/java/android/app/ActionBar.java
index e1124a1..fbc0be3 100644
--- a/core/java/android/app/ActionBar.java
+++ b/core/java/android/app/ActionBar.java
@@ -93,6 +93,35 @@
NavigationCallback callback);
/**
+ * Set the action bar into dropdown navigation mode and supply an adapter that will
+ * provide views for navigation choices.
+ *
+ * @param adapter An adapter that will provide views both to display the current
+ * navigation selection and populate views within the dropdown
+ * navigation menu.
+ * @param callback A NavigationCallback that will receive events when the user
+ * selects a navigation item.
+ * @param defaultSelectedPosition Position within the provided adapter that should be
+ * selected from the outset.
+ */
+ public abstract void setDropdownNavigationMode(SpinnerAdapter adapter,
+ NavigationCallback callback, int defaultSelectedPosition);
+
+ /**
+ * Set the selected navigation item in dropdown or tabbed navigation modes.
+ *
+ * @param position Position of the item to select.
+ */
+ public abstract void setSelectedNavigationItem(int position);
+
+ /**
+ * Get the position of the selected navigation item in dropdown or tabbed navigation modes.
+ *
+ * @return Position of the selected item.
+ */
+ public abstract int getSelectedNavigationItem();
+
+ /**
* Set the action bar into standard navigation mode, supplying a title and subtitle.
*
* Standard navigation mode is default. The title is automatically set to the
@@ -289,13 +318,6 @@
public abstract void selectTab(Tab tab);
/**
- * Select the tab at <code>position</code>
- *
- * @param position Position of the tab to select
- */
- public abstract void selectTabAt(int position);
-
- /**
* Callback interface for ActionBar navigation events.
*/
public interface NavigationCallback {
diff --git a/core/java/com/android/internal/app/ActionBarImpl.java b/core/java/com/android/internal/app/ActionBarImpl.java
index ec6d2be..992fdee 100644
--- a/core/java/com/android/internal/app/ActionBarImpl.java
+++ b/core/java/com/android/internal/app/ActionBarImpl.java
@@ -17,7 +17,6 @@
package com.android.internal.app;
import com.android.internal.view.menu.MenuBuilder;
-import com.android.internal.view.menu.MenuItemImpl;
import com.android.internal.view.menu.MenuPopupHelper;
import com.android.internal.view.menu.SubMenuBuilder;
import com.android.internal.widget.ActionBarContextView;
@@ -114,10 +113,18 @@
}
public void setDropdownNavigationMode(SpinnerAdapter adapter, NavigationCallback callback) {
+ setDropdownNavigationMode(adapter, callback, -1);
+ }
+
+ public void setDropdownNavigationMode(SpinnerAdapter adapter, NavigationCallback callback,
+ int defaultSelectedPosition) {
cleanupTabs();
- mActionView.setCallback(callback);
mActionView.setNavigationMode(NAVIGATION_MODE_DROPDOWN_LIST);
mActionView.setDropdownAdapter(adapter);
+ if (defaultSelectedPosition >= 0) {
+ mActionView.setDropdownSelectedPosition(defaultSelectedPosition);
+ }
+ mActionView.setCallback(callback);
}
public void setStandardNavigationMode() {
@@ -139,6 +146,31 @@
mActionView.setCallback(null);
}
+ public void setSelectedNavigationItem(int position) {
+ switch (mActionView.getNavigationMode()) {
+ case NAVIGATION_MODE_TABS:
+ selectTab(mTabs.get(position));
+ break;
+ case NAVIGATION_MODE_DROPDOWN_LIST:
+ mActionView.setDropdownSelectedPosition(position);
+ break;
+ default:
+ throw new IllegalStateException(
+ "setSelectedNavigationItem not valid for current navigation mode");
+ }
+ }
+
+ public int getSelectedNavigationItem() {
+ switch (mActionView.getNavigationMode()) {
+ case NAVIGATION_MODE_TABS:
+ return mSelectedTab.getPosition();
+ case NAVIGATION_MODE_DROPDOWN_LIST:
+ return mActionView.getDropdownSelectedPosition();
+ default:
+ return -1;
+ }
+ }
+
private void cleanupTabs() {
if (mSelectedTab != null) {
selectTab(null);
@@ -330,11 +362,6 @@
trans.commit();
}
- @Override
- public void selectTabAt(int position) {
- selectTab(mTabs.get(position));
- }
-
/**
* @hide
*/
diff --git a/core/java/com/android/internal/widget/ActionBarView.java b/core/java/com/android/internal/widget/ActionBarView.java
index 8f8b3af..d703a2f 100644
--- a/core/java/com/android/internal/widget/ActionBarView.java
+++ b/core/java/com/android/internal/widget/ActionBarView.java
@@ -343,7 +343,15 @@
public void setDropdownAdapter(SpinnerAdapter adapter) {
mSpinner.setAdapter(adapter);
}
-
+
+ public void setDropdownSelectedPosition(int position) {
+ mSpinner.setSelection(position);
+ }
+
+ public int getDropdownSelectedPosition() {
+ return mSpinner.getSelectedItemPosition();
+ }
+
public View getCustomNavigationView() {
return mCustomNavView;
}