/* * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) * * 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 greendroid.widget; import greendroid.graphics.drawable.ActionBarDrawable; import android.content.Context; import android.graphics.drawable.Drawable; import android.view.View; import com.cyrilmottier.android.greendroid.R; /** * Base class representing an {@link ActionBarItem} used in {@link GDActionBar}s. * The base implementation exposes a single Drawable as well as a content * description. * * @author Cyril Mottier */ public abstract class ActionBarItem { public enum Type { GoHome, // A house Search, // A magnifying glass Talk, // A speech bubble Compose, // A sheet of paper with a pen Export, // A dot with an arrow Share, // A dot with two arrows Refresh, // Two curved arrows TakePhoto, // A camera // PickPhoto, // Two pictures with an arrow Locate, // The traditional GMaps pin Edit, // A pencil Add, // A plus sign Star, // A star SortBySize, // Some bars LocateMyself, // A surrounded dot Compass, Help, Info, Settings, List, Trashcan, Eye, AllFriends, Group, Gallery, Slideshow, Mail } protected Drawable mDrawable; protected CharSequence mContentDescription; protected View mItemView; protected Context mContext; protected GDActionBar mActionBar; private int mItemId; void setActionBar(GDActionBar actionBar) { mContext = actionBar.getContext(); mActionBar = actionBar; } public Drawable getDrawable() { return mDrawable; } public ActionBarItem setDrawable(int drawableId) { return setDrawable(mContext.getResources().getDrawable(drawableId)); } public ActionBarItem setDrawable(Drawable drawable) { if (drawable != mDrawable) { mDrawable = drawable; if (mItemView != null) { onDrawableChanged(); } } return this; } public CharSequence getContentDescription() { return mContentDescription; } public ActionBarItem setContentDescription(int contentDescriptionId) { return setContentDescription(mContext.getString(contentDescriptionId)); } public ActionBarItem setContentDescription(CharSequence contentDescription) { if (contentDescription != mContentDescription) { mContentDescription = contentDescription; if (mItemView != null) { onContentDescriptionChanged(); } } return this; } public View getItemView() { if (mItemView == null) { mItemView = createItemView(); prepareItemView(); } return mItemView; } protected abstract View createItemView(); protected void prepareItemView() { } protected void onDrawableChanged() { } protected void onContentDescriptionChanged() { } protected void onItemClicked() { } void setItemId(int itemId) { mItemId = itemId; } public int getItemId() { return mItemId; } static ActionBarItem createWithType(GDActionBar actionBar, ActionBarItem.Type type) { int drawableId = 0; int descriptionId = 0; switch (type) { case GoHome: drawableId = R.drawable.gd_action_bar_home; descriptionId = R.string.gd_go_home; break; case Search: drawableId = R.drawable.gd_action_bar_search; descriptionId = R.string.gd_search; break; case Talk: drawableId = R.drawable.gd_action_bar_talk; descriptionId = R.string.gd_talk; break; case Compose: drawableId = R.drawable.gd_action_bar_compose; descriptionId = R.string.gd_compose; break; case Export: drawableId = R.drawable.gd_action_bar_export; descriptionId = R.string.gd_export; break; case Share: drawableId = R.drawable.gd_action_bar_share; descriptionId = R.string.gd_share; break; case Refresh: return actionBar.newActionBarItem(LoaderActionBarItem.class) .setDrawable(new ActionBarDrawable(actionBar.getResources(), R.drawable.gd_action_bar_refresh)) .setContentDescription(R.string.gd_refresh); case TakePhoto: drawableId = R.drawable.gd_action_bar_take_photo; descriptionId = R.string.gd_take_photo; break; // // case PickPhoto: // drawableId = R.drawable.gd_action_bar_pick_photo; // descriptionId = R.string.gd_pick_photo; // break; case Locate: drawableId = R.drawable.gd_action_bar_locate; descriptionId = R.string.gd_locate; break; case Edit: drawableId = R.drawable.gd_action_bar_edit; descriptionId = R.string.gd_edit; break; case Add: drawableId = R.drawable.gd_action_bar_add; descriptionId = R.string.gd_add; break; case Star: drawableId = R.drawable.gd_action_bar_star; descriptionId = R.string.gd_star; break; case SortBySize: drawableId = R.drawable.gd_action_bar_sort_by_size; descriptionId = R.string.gd_sort_by_size; break; case LocateMyself: drawableId = R.drawable.gd_action_bar_locate_myself; descriptionId = R.string.gd_locate_myself; break; case Compass: drawableId = R.drawable.gd_action_bar_compass; descriptionId = R.string.gd_compass; break; case Help: drawableId = R.drawable.gd_action_bar_help; descriptionId = R.string.gd_help; break; case Info: drawableId = R.drawable.gd_action_bar_info; descriptionId = R.string.gd_info; break; case Settings: drawableId = R.drawable.gd_action_bar_settings; descriptionId = R.string.gd_settings; break; case List: drawableId = R.drawable.gd_action_bar_list; descriptionId = R.string.gd_list; break; case Trashcan: drawableId = R.drawable.gd_action_bar_trashcan; descriptionId = R.string.gd_trashcan; break; case Eye: drawableId = R.drawable.gd_action_bar_eye; descriptionId = R.string.gd_eye; break; case AllFriends: drawableId = R.drawable.gd_action_bar_all_friends; descriptionId = R.string.gd_all_friends; break; case Group: drawableId = R.drawable.gd_action_bar_group; descriptionId = R.string.gd_group; break; case Gallery: drawableId = R.drawable.gd_action_bar_gallery; descriptionId = R.string.gd_gallery; break; case Slideshow: drawableId = R.drawable.gd_action_bar_slideshow; descriptionId = R.string.gd_slideshow; break; case Mail: drawableId = R.drawable.gd_action_bar_mail; descriptionId = R.string.gd_mail; break; default: // Do nothing but return null return null; } final Drawable d = new ActionBarDrawable(actionBar.getResources(), drawableId); return actionBar.newActionBarItem(NormalActionBarItem.class).setDrawable(d) .setContentDescription(descriptionId); } }