package com.likebamboo.osa.android.ui.nav; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.text.TextUtils; import com.likebamboo.osa.android.R; import com.likebamboo.osa.android.ui.NavigationActivity; import com.likebamboo.osa.android.ui.WebViewActivity; import java.util.List; /** * Activity导航 * Created by wentaoli on 2015/5/11. */ public class ActivityNavigator { public static final ActivityNavigator nav = new ActivityNavigator(); private static final String NAV_ANIM_EXIT = "NAV_ANIM_EXIT"; private static final String NAV_ANIM_IN = "NAV_ANIM_EXIT"; /** * 动画模式 */ public enum AnimationMode { SLIDE_RIGHT, SLIDE_BOTTOM, FADE_SLOW, FADE_IN_OUT, POP, DEFAULT, DEFAULT_OUT, ZOOM_IN_OUT, NONE } /** * 添加动画效果 * * @param intent * @param animationMode * @return */ public static ActivityNavigator withAnim(Intent intent, AnimationMode animationMode) { if (intent == null) { return nav; } int anim = 0; switch (animationMode) { case SLIDE_RIGHT: break; case SLIDE_BOTTOM: break; case FADE_SLOW: break; case FADE_IN_OUT: intent.putExtra(NAV_ANIM_IN, R.anim.fade_in); //intent.putExtra(NAV_ANIM_EXIT, R.anim.fade_out); break; case POP: break; case DEFAULT: break; case DEFAULT_OUT: break; case ZOOM_IN_OUT: break; case NONE: default: break; } return nav; } /** * 将Activity带到最顶层[有BUG] * * @param i * @return */ public static ActivityNavigator reorderToTop(Intent i) { if (i == null) { return nav; } i.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); return nav; } /** * 将Activity清除某个Activity上边的Activity * * @param i * @return */ public static ActivityNavigator clearTop(Intent i) { if (i == null) { return nav; } // 清除目标Activity上方的Activity(同时会清掉目标activity,并重新建立一个目标activity) i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // 加SingleTop标志,防止同时清除目标Activity i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); return nav; } /** * 打开webview界面 * * @param activity * @param intent * @param url */ public static void openWebView(Activity activity, Intent intent, String url) { if (TextUtils.isEmpty(url)) { return; } if (intent == null) { intent = new Intent(); } // 跳转到Web页面 intent.setClass(activity, WebViewActivity.class); intent.putExtra(WebViewActivity.EXTRA_URL, url); intent.putExtra(NavigationActivity.EXTRA_SHOULD_DISABLE_DRAWER, true); ActivityNavigator.startActivity(activity, intent); } /** * 启动Activity * * @param activity * @param intent */ public static void startActivity(Activity activity, Intent intent) { if (intent == null || !isIntentAvailable(activity, intent)) { return; } int animIn = 0, animOut = 0; if (intent.hasExtra(NAV_ANIM_EXIT)) { animOut = intent.getIntExtra(NAV_ANIM_EXIT, 0); } if (intent.hasExtra(NAV_ANIM_IN)) { animIn = intent.getIntExtra(NAV_ANIM_IN, 0); } activity.startActivity(intent); activity.overridePendingTransition(animIn, animOut); } /** * 检验Intent是否有效 * * @param context * @param i * @return */ public static boolean isIntentAvailable(Context context, Intent i) { if (i == null) { return false; } final PackageManager packageManager = context.getPackageManager(); List<ResolveInfo> list = packageManager.queryIntentActivities(i, PackageManager.MATCH_DEFAULT_ONLY); return list.size() > 0; } }