/*
* 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.app;
import greendroid.widget.GDActionBar;
import greendroid.widget.ActionBarItem;
import android.app.Activity;
import android.app.Application;
import android.view.View;
import android.widget.FrameLayout;
/**
* Defines all methods related to Activities embedding an {@link GDActionBar}
*
* @author Cyril Mottier
*/
public interface ActionBarActivity {
/**
* The optional title of the launched ActionBarActivity
*
* @see Activity#setTitle(CharSequence)
* @see Activity#setTitle(int)
*/
static final String GD_ACTION_BAR_TITLE = "greendroid.app.ActionBarActivity.GD_ACTION_BAR_TITLE";
/**
* An integer that can be used to force the ActionBar to a particular
* visibility. This is especially useful when using GDActivity inside a
* GDTabActivity.
*
* @see View#VISIBLE
* @see View#INVISIBLE
* @see View#GONE
*/
static final String GD_ACTION_BAR_VISIBILITY = "greendroid.app.ActionBarActivity.GD_ACTION_BAR_VISIBILITY";
/**
* Clients may use this method to listen to {@link ActionBarItem}s clicks.
*
* @param item The {@link ActionBarItem} that has been clicked
* @param position The position of the clicked item. This number is equal or
* greater to zero. 0 is the leftmost item.
* @return true if the method has handled the click on the
* {@link ActionBarItem} at position <em>position</em>. Otherwise it
* returns false.
*/
boolean onHandleActionBarItemClick(ActionBarItem item, int position);
/**
* Returns the content view. Please note the content view is not the entire
* view but a {@link FrameLayout} that contains everything but the
* {@link GDActionBar}.
*
* @return The content view
*/
FrameLayout getContentView();
/**
* Returns the {@link GDActionBar}. Listening to {@link GDActionBar} events
* should be done via the
* {@link ActionBarActivity#onHandleActionBarItemClick(ActionBarItem, int)}
* method. Most of the time, this method don't need to be used directly.
*
* @see {@link ActionBarActivity#onHandleActionBarItemClick(ActionBarItem, int)}
* @see {@link ActionBarActivity#addActionBarItem(ActionBarItem)}
* @see {@link ActionBarActivity#addActionBarItem(greendroid.widget.ActionBarItem.Type)}
* @return The {@link GDActionBar} currently displayed on screen
*/
GDActionBar getGDActionBar();
/**
* A simple utility method that casts the {@link Application} returned by
* {@link #getApplication()} into a {@link GDApplication}
*
* @return The current {@link GDApplication}
*/
GDApplication getGDApplication();
/**
* Add a new item to the {@link GDActionBar}.
*
* @param item The item to add to the {@link GDActionBar}
*/
ActionBarItem addActionBarItem(ActionBarItem item);
/**
* Add a new item to the {@link GDActionBar}.
*
* @param item The item to add to the {@link GDActionBar}
* @param itemId Unique item ID. Use {@link GDActionBar#NONE} if you do not
* need a unique ID.
*/
ActionBarItem addActionBarItem(ActionBarItem item, int itemId);
/**
* Adds a new item of type <em>type</em> to the {@link GDActionBar}.
*
* @param actionBarItemType The item to add to the {@link GDActionBar}
*/
ActionBarItem addActionBarItem(ActionBarItem.Type actionBarItemType);
/**
* Adds a new item of type <em>type</em> to the {@link GDActionBar}.
*
* @param actionBarItemType The item to add to the {@link GDActionBar}
* @param itemId Unique item ID. Use {@link GDActionBar#NONE} if you do not
* need a unique ID.
*/
ActionBarItem addActionBarItem(ActionBarItem.Type actionBarItemType, int itemId);
/**
* Returns the identifier of the layout that needs to be created for this
* {@link ActionBarActivity}
*
* @return The layout identifier of the layout to create
*/
int createLayout();
/**
* Called at the beginning of the {@link Activity#onContentChanged()}
* method. This may be used to initialize all references on elements.
*/
void onPreContentChanged();
/**
* Called at the end of the {@link Activity#onContentChanged()} method. This
* may be use to initialize the content of the layout (titles, etc.)
*/
void onPostContentChanged();
}