/*
* Copyright (c) 2015 Zhang Hai <Dreaming.in.Code.ZH@Gmail.com>
* All Rights Reserved.
*/
package me.zhanghai.android.douya.util;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.NavUtils;
import android.support.v4.app.TaskStackBuilder;
import me.zhanghai.android.douya.R;
public class AppUtils {
private AppUtils() {}
@Nullable
public static Activity getActivityFromContext(Context context) {
if (context instanceof Activity) {
return (Activity) context;
} else if (context instanceof ContextWrapper) {
// Can be wrapped by a TintContextWrapper, etc.
return getActivityFromContext(((ContextWrapper) context).getBaseContext());
} else {
return null;
}
}
public static boolean isIntentHandled(Intent intent, Context context) {
return intent.resolveActivity(context.getPackageManager()) != null;
}
// From http://developer.android.com/training/implementing-navigation/ancestral.html#NavigateUp .
public static void navigateUp(Activity activity, Bundle extras) {
Intent upIntent = NavUtils.getParentActivityIntent(activity);
if (upIntent != null) {
if (extras != null) {
upIntent.putExtras(extras);
}
if (NavUtils.shouldUpRecreateTask(activity, upIntent)) {
// This activity is NOT part of this app's task, so create a new task
// when navigating up, with a synthesized back stack.
TaskStackBuilder.create(activity)
// Add all of this activity's parents to the back stack.
.addNextIntentWithParentStack(upIntent)
// Navigate up to the closest parent.
.startActivities();
} else {
// This activity is part of this app's task, so simply
// navigate up to the logical parent activity.
// According to http://stackoverflow.com/a/14792752/2420519
//NavUtils.navigateUpTo(activity, upIntent);
upIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
activity.startActivity(upIntent);
}
}
activity.finish();
}
public static void navigateUp(Activity activity) {
navigateUp(activity, null);
}
public static void startActivity(Intent intent, Context context) {
try {
context.startActivity(intent);
} catch (ActivityNotFoundException e) {
e.printStackTrace();
ToastUtils.show(R.string.activity_not_found, context);
}
}
public static void startActivityForResult(Activity activity, Intent intent, int requestCode) {
try {
activity.startActivityForResult(intent, requestCode);
} catch (ActivityNotFoundException e) {
e.printStackTrace();
ToastUtils.show(R.string.activity_not_found, activity);
}
}
}