package com.limpoxe.fairy.manager;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;

import com.limpoxe.fairy.core.PluginContextTheme;
import com.limpoxe.fairy.core.RealPluginClassLoader;
import com.limpoxe.fairy.util.LogUtil;

import java.util.HashMap;

public class PluginActivityMonitor {

	public static final String ACTION_STOP_PLUGIN = ".fairy.action.ACTION_STOP_PLUGIN";

	private HashMap<Activity, BroadcastReceiver> receivers = new HashMap<Activity, BroadcastReceiver>();

	public void onActivityCreate(final Activity activity) {
		if (!activity.isChild()) {
			if (activity.getClass().getClassLoader() instanceof RealPluginClassLoader) {
				String pluginPackageName = ((PluginContextTheme)activity.getApplication().getBaseContext()).getPluginDescriptor().getPackageName();
				BroadcastReceiver br = new BroadcastReceiver() {
					@Override
					public void onReceive(Context context, Intent intent) {
						LogUtil.w("onReceive", intent.getAction(), "activity.finish()");
						activity.finish();
					}
				};
				receivers.put(activity, br);

				LogUtil.v("registerReceiver", pluginPackageName + ACTION_STOP_PLUGIN);
				activity.registerReceiver(br, new IntentFilter(pluginPackageName + ACTION_STOP_PLUGIN));
			}
		}
	}

	public void onActivityResume(Activity activity) {
		if (!activity.isChild()) {

		}
	}

	public void onActivityPause(Activity activity) {
		if (!activity.isChild()) {

		}
	}

	public void onActivityDestory(Activity activity) {
		if (!activity.isChild()) {
			if (activity.getClass().getClassLoader() instanceof RealPluginClassLoader) {
				BroadcastReceiver br = receivers.remove(activity);
				LogUtil.v("unregisterReceiver", br.getClass().getName());
				activity.unregisterReceiver(br);
			}
		}
	}
}