/*
 * Copyright (C) 2006 The Android Open Source Project
 *
 * 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 com.plugin.core;

import android.annotation.TargetApi;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.UserHandle;

import com.plugin.util.PaLog;

public class PluginBaseContextWrapper extends ContextWrapper {

	public PluginBaseContextWrapper(Context base) {
		super(base);
	}

	/**
	 * startActivity有很多重载的方法,如有必要,可以相应的重写
	 */
	@Override
	public void startActivity(Intent intent) {
		PaLog.d(intent);
		PluginIntentResolver.resolveActivity(intent);
		super.startActivity(intent);
	}

	@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
	@Override
	public void startActivity(Intent intent, Bundle options) {
		PaLog.d(intent);
		PluginIntentResolver.resolveActivity(intent);
		super.startActivity(intent, options);
	}

	@Override
	public void sendBroadcast(Intent intent) {
		PaLog.d(intent);
		intent = PluginIntentResolver.resolveReceiver(intent);
		super.sendBroadcast(intent);
	}

	@Override
	public void sendBroadcast(Intent intent, String receiverPermission) {
		PaLog.d(intent);
		intent = PluginIntentResolver.resolveReceiver(intent);
		super.sendBroadcast(intent, receiverPermission);
	}

	@Override
	public void sendOrderedBroadcast(Intent intent, String receiverPermission) {
		PaLog.d(intent);
		intent = PluginIntentResolver.resolveReceiver(intent);
		super.sendOrderedBroadcast(intent, receiverPermission);
	}

	@Override
	public void sendOrderedBroadcast(Intent intent, String receiverPermission, BroadcastReceiver resultReceiver,
			Handler scheduler, int initialCode, String initialData, Bundle initialExtras) {
		PaLog.d(intent);
		intent = PluginIntentResolver.resolveReceiver(intent);
		super.sendOrderedBroadcast(intent, receiverPermission, resultReceiver,
				scheduler, initialCode, initialData, initialExtras);

	}

	@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
	@Override
	public void sendBroadcastAsUser(Intent intent, UserHandle user) {
		PaLog.d(intent);
		intent = PluginIntentResolver.resolveReceiver(intent);
		super.sendBroadcastAsUser(intent, user);
	}

	@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
	@Override
	public void sendBroadcastAsUser(Intent intent, UserHandle user, String receiverPermission) {
		PaLog.d(intent);
		intent = PluginIntentResolver.resolveReceiver(intent);
		super.sendBroadcastAsUser(intent, user, receiverPermission);
	}

	@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
	@Override
	public void sendOrderedBroadcastAsUser(Intent intent, UserHandle user, String receiverPermission,
			BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String initialData,
			Bundle initialExtras) {
		PaLog.d(intent);
		intent = PluginIntentResolver.resolveReceiver(intent);
		super.sendOrderedBroadcastAsUser(intent, user, receiverPermission, resultReceiver, scheduler, initialCode,
				initialData, initialExtras);
	}

	@Override
	public void sendStickyBroadcast(Intent intent) {
		PaLog.d(intent);
		intent = PluginIntentResolver.resolveReceiver(intent);
		super.sendStickyBroadcast(intent);
	}

	@Override
	public void sendStickyOrderedBroadcast(Intent intent, BroadcastReceiver resultReceiver, Handler scheduler,
			int initialCode, String initialData, Bundle initialExtras) {
		PaLog.d(intent);
		intent = PluginIntentResolver.resolveReceiver(intent);
		super.sendStickyOrderedBroadcast(intent, resultReceiver, scheduler, initialCode, initialData, initialExtras);
	}

	@Override
	public void removeStickyBroadcast(Intent intent) {
		PaLog.d(intent);
		intent = PluginIntentResolver.resolveReceiver(intent);
		super.removeStickyBroadcast(intent);
	}

	@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
	@Override
	public void sendStickyBroadcastAsUser(Intent intent, UserHandle user) {
		PaLog.d(intent);
		intent = PluginIntentResolver.resolveReceiver(intent);
		super.sendStickyBroadcastAsUser(intent, user);
	}

	@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
	@Override
	public void sendStickyOrderedBroadcastAsUser(Intent intent, UserHandle user, BroadcastReceiver resultReceiver,
			Handler scheduler, int initialCode, String initialData, Bundle initialExtras) {
		PaLog.d(intent);
		intent = PluginIntentResolver.resolveReceiver(intent);
		super.sendStickyOrderedBroadcastAsUser(intent, user, resultReceiver, scheduler, initialCode, initialData,
				initialExtras);
	}

	@Override
	public ComponentName startService(Intent service) {
		PaLog.d(service);
		PluginIntentResolver.resolveService(service);
		return super.startService(service);
	}

	@Override
	public boolean stopService(Intent name) {
		PaLog.d(name);
		PluginIntentResolver.resolveService(name);
		return super.stopService(name);
	}

	@Override
	public boolean bindService(Intent service, ServiceConnection conn, int flags) {
		PaLog.d(service);
		PluginIntentResolver.resolveService(service);
		return super.bindService(service, conn, flags);
		}

}