am ab9906c0: Merge "Support list navigation mode for toolbar action bars" into lmp-preview-dev
* commit 'ab9906c0735fb22017f3d673207897347edeba92': Support list navigation mode for toolbar action bars
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* Copyright (C) 2014 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.
|
||||
*/
|
||||
|
||||
|
||||
package com.android.internal.app;
|
||||
|
||||
import android.app.ActionBar;
|
||||
import android.view.View;
|
||||
import android.widget.AdapterView;
|
||||
|
||||
/**
|
||||
* Wrapper to adapt the ActionBar.OnNavigationListener in an AdapterView.OnItemSelectedListener
|
||||
* for use in Spinner widgets. Used by action bar implementations.
|
||||
*/
|
||||
class NavItemSelectedListener implements AdapterView.OnItemSelectedListener {
|
||||
private final ActionBar.OnNavigationListener mListener;
|
||||
|
||||
public NavItemSelectedListener(ActionBar.OnNavigationListener listener) {
|
||||
mListener = listener;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
|
||||
if (mListener != null) {
|
||||
mListener.onNavigationItemSelected(position, id);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNothingSelected(AdapterView<?> parent) {
|
||||
// Do nothing
|
||||
}
|
||||
}
|
||||
@@ -173,14 +173,19 @@ public class ToolbarActionBar extends ActionBar {
|
||||
|
||||
@Override
|
||||
public void setListNavigationCallbacks(SpinnerAdapter adapter, OnNavigationListener callback) {
|
||||
throw new UnsupportedOperationException(
|
||||
"Navigation modes are not supported in toolbar action bars");
|
||||
mDecorToolbar.setDropdownParams(adapter, new NavItemSelectedListener(callback));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSelectedNavigationItem(int position) {
|
||||
throw new UnsupportedOperationException(
|
||||
"Navigation modes are not supported in toolbar action bars");
|
||||
switch (mDecorToolbar.getNavigationMode()) {
|
||||
case NAVIGATION_MODE_LIST:
|
||||
mDecorToolbar.setDropdownSelectedPosition(position);
|
||||
break;
|
||||
default:
|
||||
throw new IllegalStateException(
|
||||
"setSelectedNavigationIndex not valid for current navigation mode");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -276,8 +281,7 @@ public class ToolbarActionBar extends ActionBar {
|
||||
|
||||
@Override
|
||||
public void setNavigationMode(@NavigationMode int mode) {
|
||||
throw new UnsupportedOperationException(
|
||||
"Navigation modes are not supported in toolbar action bars");
|
||||
mDecorToolbar.setNavigationMode(mode);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -288,67 +292,67 @@ public class ToolbarActionBar extends ActionBar {
|
||||
@Override
|
||||
public Tab newTab() {
|
||||
throw new UnsupportedOperationException(
|
||||
"Navigation modes are not supported in toolbar action bars");
|
||||
"Tabs are not supported in toolbar action bars");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addTab(Tab tab) {
|
||||
throw new UnsupportedOperationException(
|
||||
"Navigation modes are not supported in toolbar action bars");
|
||||
"Tabs are not supported in toolbar action bars");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addTab(Tab tab, boolean setSelected) {
|
||||
throw new UnsupportedOperationException(
|
||||
"Navigation modes are not supported in toolbar action bars");
|
||||
"Tabs are not supported in toolbar action bars");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addTab(Tab tab, int position) {
|
||||
throw new UnsupportedOperationException(
|
||||
"Navigation modes are not supported in toolbar action bars");
|
||||
"Tabs are not supported in toolbar action bars");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addTab(Tab tab, int position, boolean setSelected) {
|
||||
throw new UnsupportedOperationException(
|
||||
"Navigation modes are not supported in toolbar action bars");
|
||||
"Tabs are not supported in toolbar action bars");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeTab(Tab tab) {
|
||||
throw new UnsupportedOperationException(
|
||||
"Navigation modes are not supported in toolbar action bars");
|
||||
"Tabs are not supported in toolbar action bars");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeTabAt(int position) {
|
||||
throw new UnsupportedOperationException(
|
||||
"Navigation modes are not supported in toolbar action bars");
|
||||
"Tabs are not supported in toolbar action bars");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeAllTabs() {
|
||||
throw new UnsupportedOperationException(
|
||||
"Navigation modes are not supported in toolbar action bars");
|
||||
"Tabs are not supported in toolbar action bars");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void selectTab(Tab tab) {
|
||||
throw new UnsupportedOperationException(
|
||||
"Navigation modes are not supported in toolbar action bars");
|
||||
"Tabs are not supported in toolbar action bars");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Tab getSelectedTab() {
|
||||
throw new UnsupportedOperationException(
|
||||
"Navigation modes are not supported in toolbar action bars");
|
||||
"Tabs are not supported in toolbar action bars");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Tab getTabAt(int index) {
|
||||
throw new UnsupportedOperationException(
|
||||
"Navigation modes are not supported in toolbar action bars");
|
||||
"Tabs are not supported in toolbar action bars");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -18,9 +18,7 @@ package com.android.internal.app;
|
||||
|
||||
import android.animation.ValueAnimator;
|
||||
import android.content.res.TypedArray;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.ViewParent;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.Toolbar;
|
||||
import com.android.internal.R;
|
||||
import com.android.internal.view.ActionBarPolicy;
|
||||
@@ -30,7 +28,6 @@ import com.android.internal.view.menu.SubMenuBuilder;
|
||||
import com.android.internal.widget.ActionBarContainer;
|
||||
import com.android.internal.widget.ActionBarContextView;
|
||||
import com.android.internal.widget.ActionBarOverlayLayout;
|
||||
import com.android.internal.widget.ActionBarView;
|
||||
import com.android.internal.widget.DecorToolbar;
|
||||
import com.android.internal.widget.ScrollingTabContainerView;
|
||||
|
||||
@@ -59,7 +56,6 @@ import android.view.Window;
|
||||
import android.view.accessibility.AccessibilityEvent;
|
||||
import android.view.animation.AnimationUtils;
|
||||
import android.widget.SpinnerAdapter;
|
||||
import com.android.internal.widget.ToolbarWidgetWrapper;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.ArrayList;
|
||||
@@ -1313,23 +1309,4 @@ public class WindowDecorActionBar extends ActionBar implements
|
||||
}
|
||||
}
|
||||
|
||||
static class NavItemSelectedListener implements AdapterView.OnItemSelectedListener {
|
||||
private final OnNavigationListener mListener;
|
||||
|
||||
public NavItemSelectedListener(OnNavigationListener listener) {
|
||||
mListener = listener;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
|
||||
if (mListener != null) {
|
||||
mListener.onNavigationItemSelected(position, id);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNothingSelected(AdapterView<?> parent) {
|
||||
// Do nothing
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,6 +27,7 @@ import android.os.Parcelable;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
import android.util.SparseArray;
|
||||
import android.view.Gravity;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.Menu;
|
||||
import android.view.View;
|
||||
@@ -78,6 +79,8 @@ public class ToolbarWidgetWrapper implements DecorToolbar {
|
||||
private boolean mMenuPrepared;
|
||||
private ActionMenuPresenter mActionMenuPresenter;
|
||||
|
||||
private int mNavigationMode = ActionBar.NAVIGATION_MODE_STANDARD;
|
||||
|
||||
public ToolbarWidgetWrapper(Toolbar toolbar) {
|
||||
mToolbar = toolbar;
|
||||
|
||||
@@ -420,23 +423,51 @@ public class ToolbarWidgetWrapper implements DecorToolbar {
|
||||
|
||||
@Override
|
||||
public int getNavigationMode() {
|
||||
return 0;
|
||||
return mNavigationMode;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setNavigationMode(int mode) {
|
||||
if (mode != ActionBar.NAVIGATION_MODE_STANDARD) {
|
||||
throw new IllegalArgumentException(
|
||||
"Navigation modes not supported in this configuration");
|
||||
final int oldMode = mNavigationMode;
|
||||
if (mode != oldMode) {
|
||||
switch (oldMode) {
|
||||
case ActionBar.NAVIGATION_MODE_LIST:
|
||||
if (mSpinner != null && mSpinner.getParent() == mToolbar) {
|
||||
mToolbar.removeView(mSpinner);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
mNavigationMode = mode;
|
||||
|
||||
switch (mode) {
|
||||
case ActionBar.NAVIGATION_MODE_STANDARD:
|
||||
break;
|
||||
case ActionBar.NAVIGATION_MODE_LIST:
|
||||
ensureSpinner();
|
||||
mToolbar.addView(mSpinner, 0);
|
||||
break;
|
||||
case ActionBar.NAVIGATION_MODE_TABS:
|
||||
throw new IllegalStateException("Tabs not supported in this configuration");
|
||||
default:
|
||||
throw new IllegalArgumentException("Invalid navigation mode " + mode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void ensureSpinner() {
|
||||
if (mSpinner == null) {
|
||||
mSpinner = new Spinner(getContext());
|
||||
Toolbar.LayoutParams lp = new Toolbar.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
|
||||
ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.START | Gravity.CENTER_VERTICAL);
|
||||
mSpinner.setLayoutParams(lp);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDropdownParams(SpinnerAdapter adapter,
|
||||
AdapterView.OnItemSelectedListener listener) {
|
||||
if (mSpinner == null) {
|
||||
mSpinner = new Spinner(getContext());
|
||||
}
|
||||
ensureSpinner();
|
||||
mSpinner.setAdapter(adapter);
|
||||
mSpinner.setOnItemSelectedListener(listener);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user