package com.elphin.framework.app.fpstack; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.Parcelable; import java.net.URI; /** * 页面栈管理接口 * * @author elphin * @version 1.0 * @date 13-6-14 下午8:02 */ public interface TaskManager { // stack strategy //@Deprecated //int STACK_STRATEGY_ADD = 0; int STACK_STRATEGY_REPLACE = 1; /** * 页面栈页面切换的action定义 用于栈内page切换,Task切换不需要该参数 */ String ACTION_NAVIGATE_PAGE = "com.baidu.map.act.navigate_page"; String ACTION_NAVIGATE_BACK = "com.baidu.map.act.back"; String NAVIGATE_PAGE_NAME = "target_page_name"; String NAVIGATE_PAGE_PARAM = "target_page_param"; /** * 页面tag */ String NAVIGATE_PAGE_TAG = "target_page_tag"; /** * 页面 URI scheme */ String PAGE_SCHEME = "bdmapui"; /** * 注册页面栈 * @param task * @param page * @return */ abstract boolean registerPage(Class<?> task, Class<?> page); /** * 无参数跳转页面 * @param ctx * @param pageClsName * @see {@link #navigateTo(android.content.Context, String, android.os.Bundle)} */ abstract void navigateTo(Context ctx, String pageClsName); /** * 带参数跳转页面 * @param ctx Context * @param pageClsName 目标页面的类名(全限定名) * @param pageArgs 跳转参数 */ abstract void navigateTo(Context ctx, String pageClsName, Bundle pageArgs); /** * 指定页面Tag跳转页面 * </p> * 为跳转的页面添加标签,构造多实例页面 * * @param ctx Context * @param pageClsName 目标页面的类名(全限定名) * @param pageTagString 目标页面标签 */ abstract void navigateTo(Context ctx, String pageClsName,String pageTagString); /** * 指定页面Tag跳转页面,附加页面参数 * </p> * 为跳转的页面添加标签,构造多实例页面 * * @param ctx Context * @param pageClsName 目标页面的类名(全限定名) * @param pageTagString 目标页面标签 * @param pageArgs 页面参数 */ abstract void navigateTo(Context ctx, String pageClsName,String pageTagString, Bundle pageArgs); /** * 指定页面Tag跳转页面,附加页面参数 * </p> * 为跳转的页面添加标签,构造多实例页面 * * @param ctx Context * @param pageCategory 目标页面类型,区分Map还是组件 * @param pageClsName 目标页面的类名(全限定名) * @param pageTagString 目标页面标签 * @param pageArgs 页面参数 */ abstract void navigateTo(Context ctx, PageCategory pageCategory, String pageClsName, String pageTagString, Bundle pageArgs); /** * Task跳转 * <p>按默认方式(单实例)跳转Task。</p> * * @param ctx Context * @param intent Intent */ abstract void navigateToTask(Context ctx, Intent intent); /** * Task跳转 * <p>按给定 Intent Flag 进行 Task 跳转。</p> * * @param ctx Context * @param intent Activity Intent * @param flags Intent Flags */ abstract void navigateToTask(Context ctx, Intent intent, int flags); /** * 根据URI跳转页面 * <p/> * 扩展方法,暂未实现 * * @param ctx Context * @param uri URI * @param pageArgs Bundle */ abstract void navigateTo(Context ctx, URI uri, Bundle pageArgs); /** * 页面栈带参回退回退 * @param pageArgs */ abstract void onGoBack(Bundle pageArgs); /** * 页面栈无参回退回调 */ abstract void onGoBack(); /** * 添加历史记录 * * @param record */ abstract void track(HistoryRecord record); /** * 获取根页面记录 */ abstract HistoryRecord getRootRecord(); /** * 获取栈顶页面记录 * * @return HistoryRecord */ abstract HistoryRecord getLatestRecord(); /** * 获取当前页面栈记录集合 * * @return */ abstract ReorderStack<HistoryRecord> getHistoryRecords(); /** * 以record作为标记重置页面栈状态 * <p>切断历史记录,将record之前的记录清掉。</p> * * @return 成功返回 true,否则返回 false */ abstract boolean resetStackStatus(HistoryRecord record); /** * 重置当前页面栈 * </p> * 清空当前页面栈,并将 record作为新的根页面 * * @param record * @return */ abstract void resetRootRecord(HistoryRecord record); /** * 恢复页面状态到根页面 */ abstract void resetToRootRecord(); /** * 清除record在页面栈中的记录 * * @param record * @return 成功返回 true,否则返回 false */ abstract boolean removeStackRecord(HistoryRecord record); /** * 页面记录弹栈 * * @return 成功返回 true,否则返回 false */ abstract boolean pop(); /** * 调试信息输出 * * @return 页面栈状态调试信息字符串 */ abstract String dump(); /** * 页面进栈策略 * * @return */ abstract int getStackStrategy(); /** * 设置根页面 * * @param record */ abstract void setRootRecord(HistoryRecord record); /** * ClearTop操作 * </p> * 清除栈中record之后进栈的页面 * * @param record */ abstract void clearTop(HistoryRecord record); /** * 清理栈记录 */ abstract void clear(); /** * 销毁TaskManager */ abstract void destroy(); /** * 获取当前的Context * * @return 当前激活页面的 Activity Context */ abstract Context getContext(); /** * 保存页面栈状态 * @return */ abstract Parcelable saveState(); /** * 恢复页面栈状态 * @param state */ abstract void restoreState(Parcelable state); }