package com.droid.views;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Canvas;
import android.graphics.Typeface;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Handler;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.droid.R;
import java.util.Timer;

public class TitleView extends RelativeLayout {

	private RelativeLayout layout;
	private View view;
	private Context context;
	private Typeface typeface;
	private final String TAG = "TitleView";
	private final boolean d = false;
	private ImageView imgWeather;
	private TextView tvTime, tvDate;
	private Timer timer;
	private ImageView imgNetWorkState;

	public TitleView(Context context) {
		super(context);
		this.context = context;
        if(!isInEditMode())
		initTitleView();
	}

	public TitleView(Context context, AttributeSet attrs) {
		super(context, attrs);
		this.context = context;
        if(!isInEditMode())
		initTitleView();
	}

	public void initTitleView() {
		view = LayoutInflater.from(context).inflate(R.layout.titleview,
				this, true);
		layout = (RelativeLayout) view.findViewById(R.id.home_title);
		tvTime = (TextView) view.findViewById(R.id.title_time_hour);
		tvDate = (TextView) view.findViewById(R.id.home_date);
		imgNetWorkState = (ImageView) view.findViewById(R.id.home_networkstate);
		typeface = Typeface.createFromAsset(context.getAssets(),
				"font/helvetica_neueltpro_thex.otf");
		tvTime.setTypeface(typeface);
		tvDate.setTypeface(typeface);
		timeHandle.post(timeRun);
		imgNetWorkState = (ImageView) this.findViewById(R.id.home_networkstate);
		context.getApplicationContext().registerReceiver(this.mConnReceiver,
				new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
		context.getApplicationContext().registerReceiver(wifiChange,
				new IntentFilter(WifiManager.RSSI_CHANGED_ACTION));
	}

	public void setTvTimeText(String text) {
		tvTime.setText(text);
	}

	public void setTvDateDate(String text) {
		tvDate.setText(text);
	}


	private Handler timeHandle = new Handler();

	private Runnable timeRun = new Runnable() {

		public void run() {
			setTvTimeText(TitleViewUtil.getTime());
			setTvDateDate(TitleViewUtil.getDate());
			timeHandle.postDelayed(this, 1000);
		}

	};

	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
	}

	private BroadcastReceiver wifiChange = new BroadcastReceiver() {

		@Override
		public void onReceive(Context context, Intent intent) {
			WifiManager wifiManager = (WifiManager) context
					.getSystemService(context.WIFI_SERVICE);
			WifiInfo wifiInfo = wifiManager.getConnectionInfo();
			if (wifiInfo.getBSSID() != null) {
				// wifi信号强度
				int signalLevel = WifiManager.calculateSignalLevel(
						wifiInfo.getRssi(), 4);
				if (signalLevel == 0) {
					imgNetWorkState.setImageDrawable(context.getResources()
							.getDrawable(R.drawable.wifi_1));

				} else if (signalLevel == 1) {
					imgNetWorkState.setImageDrawable(context.getResources()
							.getDrawable(R.drawable.wifi_2));

				} else if (signalLevel == 2) {
					imgNetWorkState.setImageDrawable(context.getResources()
							.getDrawable(R.drawable.wifi_3));

				} else if (signalLevel == 3) {
					imgNetWorkState.setImageDrawable(context.getResources()
							.getDrawable(R.drawable.networkstate_on));
				}
				if (d)
					Toast.makeText(context, "wifi level" + signalLevel,
							Toast.LENGTH_SHORT).show();
			}
		}
	};

	private BroadcastReceiver mConnReceiver = new BroadcastReceiver() {
		public void onReceive(Context context, Intent intent) {

			boolean noConnectivity = intent.getBooleanExtra(
					ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
			String reason = intent
					.getStringExtra(ConnectivityManager.EXTRA_REASON);
			boolean isFailover = intent.getBooleanExtra(
					ConnectivityManager.EXTRA_IS_FAILOVER, false);

			NetworkInfo currentNetworkInfo = (NetworkInfo) intent
					.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
			NetworkInfo otherNetworkInfo = (NetworkInfo) intent
					.getParcelableExtra(ConnectivityManager.EXTRA_OTHER_NETWORK_INFO);

			if (currentNetworkInfo.isConnected()
					&& currentNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
				if (d)
					Toast.makeText(context, "Connected", Toast.LENGTH_LONG)
							.show();

				imgNetWorkState.setImageDrawable(context.getResources()
						.getDrawable(R.drawable.networkstate_on));

			} else if (currentNetworkInfo.isConnected()
					&& currentNetworkInfo.getType() == ConnectivityManager.TYPE_ETHERNET) {

				imgNetWorkState.setImageDrawable(context.getResources()
						.getDrawable(R.drawable.networkstate_ethernet));

			} else if (!currentNetworkInfo.isConnected()) {
				imgNetWorkState.setImageDrawable(context.getResources()
						.getDrawable(R.drawable.networkstate_off));
			}

			if (d)
				Toast.makeText(
						context,
						"currentNetworkInfo.getType()=>>"
								+ currentNetworkInfo.getType()
								+ currentNetworkInfo.getTypeName(),
						Toast.LENGTH_LONG).show();
		}
	};
}