/* * Copyright (C) 2011 Steven Luo * * 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 jackpal.androidterm.compat; import android.app.ActionBar; import android.widget.SpinnerAdapter; /** * Provides ActionBar APIs. */ public abstract class ActionBarCompat { public static final int NAVIGATION_MODE_STANDARD = 0; public static final int NAVIGATION_MODE_LIST = 1; public static final int NAVIGATION_MODE_TABS = 2; public static final int DISPLAY_USE_LOGO = 1; public static final int DISPLAY_SHOW_HOME = 2; public static final int DISPLAY_HOME_AS_UP = 4; public static final int DISPLAY_SHOW_TITLE = 8; public static final int DISPLAY_SHOW_CUSTOM = 16; // Provides android.R.id.home from API 11 and up public static final int ID_HOME = 0x0102002c; public interface OnNavigationListener { public abstract boolean onNavigationItemSelected(int position, long id); } public static ActionBarCompat wrap(Object actionBar) { if (actionBar != null) { if (AndroidCompat.SDK >= 11) { return new ActionBarApi11OrLater(actionBar); } } return null; } public abstract int getDisplayOptions(); public abstract int getHeight(); public abstract int getNavigationItemCount(); public abstract int getNavigationMode(); public abstract int getSelectedNavigationIndex(); public abstract CharSequence getTitle(); public abstract void hide(); public abstract boolean isShowing(); public abstract void setDisplayOptions(int options); public abstract void setDisplayOptions(int options, int mask); public abstract void setListNavigationCallbacks(SpinnerAdapter adapter, OnNavigationListener callback); public abstract void setNavigationMode(int mode); public abstract void setSelectedNavigationItem(int position); public abstract void setTitle(int resId); public abstract void setTitle(CharSequence title); public abstract void show(); } class ActionBarApi11OrLater extends ActionBarCompat { private ActionBar bar; ActionBarApi11OrLater(Object bar) { this.bar = (ActionBar) bar; } private ActionBar.OnNavigationListener wrapOnNavigationCallback(OnNavigationListener callback) { final OnNavigationListener cb = callback; return new ActionBar.OnNavigationListener() { public boolean onNavigationItemSelected(int position, long id) { return cb.onNavigationItemSelected(position, id); } }; } public int getDisplayOptions() { return bar.getDisplayOptions(); } public int getHeight() { return bar.getHeight(); } public int getNavigationItemCount() { return bar.getNavigationItemCount(); } public int getNavigationMode() { return bar.getNavigationMode(); } public int getSelectedNavigationIndex() { return bar.getSelectedNavigationIndex(); } public CharSequence getTitle() { return bar.getTitle(); } public void hide() { bar.hide(); } public boolean isShowing() { return bar.isShowing(); } public void setDisplayOptions(int options) { bar.setDisplayOptions(options); } public void setDisplayOptions(int options, int mask) { bar.setDisplayOptions(options, mask); } public void setListNavigationCallbacks(SpinnerAdapter adapter, OnNavigationListener callback) { bar.setListNavigationCallbacks(adapter, wrapOnNavigationCallback(callback)); } public void setNavigationMode(int mode) { bar.setNavigationMode(mode); } public void setSelectedNavigationItem(int position) { bar.setSelectedNavigationItem(position); } public void setTitle(int resId) { bar.setTitle(resId); } public void setTitle(CharSequence title) { bar.setTitle(title); } public void show() { bar.show(); } }