package nico.styTool;


import android.app.ProgressDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.preference.PreferenceManager;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.text.InputType;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnCreateContextMenuListener;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.Button;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.SimpleAdapter;
import android.widget.SimpleAdapter.ViewBinder;
import android.widget.Toast;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class HCActivity extends AppCompatActivity implements Runnable,OnClickListener
{
    /** Called when the activity is first created. */
    android.support.v7.widget.Toolbar toolbar;

    SharedPreferences sp;
    GridView list;
    Bitmap bitmapItem=null;
    ProgressDialog pa;
    Button bn_add,bn_clear,bn_hc;
    n ag;
    List<Map<String, Object>> items ;
    Map<String, Object> item;
    SimpleAdapter adapter;
    SimpleDateFormat formatter;
    String preferencePath;
    String nowStr;
    AlertDialog.Builder adlog;
    final String THIS_ACTION= "hcAction";
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.hc);
	StatusBarUtil.setColor(this, getResources().getColor(R.color.colorPrimary));
	toolbar = (android.support.v7.widget.Toolbar)
	    findViewById(R.id.toolbar);
//		初始化Toolbar控件
	setSupportActionBar(toolbar);
//		用Toolbar取代ActionBar
	//toolbar.setTitleTextColor(getResources().getColor(R.color.text_font_white));//标题颜色
	//	toolbar.setSubtitleTextColor(getResources().getColor(R.color.text_font_white));//副标题颜色


//		设置导航按钮监听
	//overridePendingTransition(R.anim.out_to_right, R.anim.in_from_left);
	bn_add = (Button)findViewById(R.id.bn_add);
	bn_clear = (Button)findViewById(R.id.bn_clear);
	bn_hc = (Button)findViewById(R.id.bn_hc);
	list = (GridView)findViewById(R.id.list);

	bn_add.setOnClickListener(this);
	bn_clear.setOnClickListener(this);
	bn_hc.setOnClickListener(this);
	IntentFilter intentFilter=new IntentFilter();
	intentFilter.addAction(THIS_ACTION);
	registerReceiver(br, intentFilter);
	//FileList.curpath = "/mnt/sdcard";
	FileList.curpath = Environment.getExternalStorageDirectory().getAbsolutePath();
	FileList.broadcastAction = THIS_ACTION;
	initAdapter();
	formatter = new SimpleDateFormat("yyyy-MM-dd HH_mm_ss"); 
	//广告初始化

	sp = PreferenceManager.getDefaultSharedPreferences(this);
	list.setOnCreateContextMenuListener(new OnCreateContextMenuListener(){
		@Override
		public void onCreateContextMenu(ContextMenu p1, View p2, ContextMenu.ContextMenuInfo p3)
		{
		    // TODO: Implement this method
		    //p1.setHeaderTitle("选项");
		    //第二个参数是id
		    p1.add(0, 0, 0, "设置持续时间");
		    p1.add(0, 1, 0, "移除该图片");

		}
	    });
    }


    //点击Context菜单的项时发生
    @Override
    public boolean onContextItemSelected(MenuItem item)
    {
	AdapterContextMenuInfo menuInfo =
	    (AdapterContextMenuInfo) item.getMenuInfo();
	// TODO: Implement this method
	if (item.getItemId() == 0)
	{
	    //修改持续时间
	    showEditTextDialog(HCActivity.this, "设置该图持续的时间(秒)", menuInfo.position);
	}
	else if (item.getItemId() == 1)
	{
	    //移除项
	    items.remove(menuInfo.position);
	    adapter.notifyDataSetChanged();
	    showToast("移除成功");
	}
	return super.onOptionsItemSelected(item);
    } 

    @Override
    public void run()
    {
	// TODO: Implement this method
	ag = new n();
	//如果不使用第一帧的大小
	if (!sp.getBoolean("cb_use_first_size", true))
	    ag.setSize(
		Integer.parseInt(sp.getString("edit_pic_width", "480")),
		Integer.parseInt(sp.getString("edit_pic_height", "800"))
	    );

	Date curDate = new Date(System.currentTimeMillis());//获取当前时间 
	nowStr = formatter.format(curDate);//转换时间格式

	preferencePath = sp.getString("edit_output_path1", "/mnt/sdcard/Android/gif");
	//if(preferencePath.charAt(preferencePath.length()-1)=='/')
	//preferencePath=preferencePath.substring(0,preferencePath.length()-2);

	ag.start(preferencePath + "/" + nowStr + ".gif");
	ag.setRepeat(0);
	for (int i=0;i < items.size();i++)
	{
	    ag.setDelay((int)(Float.parseFloat(items.get(i).get("delay").toString()) * 1000));
	    try
	    {
		ag.addFrame(BitmapFactory.decodeFile(items.get(i).get("filePath").toString()));
	    }
	    //要生成的图片太大,内存不足,捕获异常
	    catch (OutOfMemoryError oome)
	    {
		handler.sendEmptyMessage(1);
		return;
	    }

	}
	ag.finish();
	handler.sendEmptyMessage(0);
    }

    //载入列表,可以节省时间
    Runnable loadFileList=new Runnable()
    {

	@Override
	public void run()
	{
	    // TODO: Implement this method
	    FileList.filter = ".*.jpg|.*.png|.*.bmp|.*.gif$";
	    //FileList.curpath=;
	    FileList.getListFromPath(FileList.curpath);
	}


    };

    Handler handler=new Handler(){

	@Override
	public void handleMessage(Message msg)
	{
	    // TODO: Implement this method
	    if (msg.what == 0)
	    {
		pa.dismiss();
		adlog = new AlertDialog.Builder(HCActivity.this);
		adlog.setTitle("合成完成")
		    .setMessage("合成已完成" + "\n保存路径:" + sp.getString("edit_output_path1", "/mnt/sdcard/Android/gif") + "/" + nowStr + ".gif")
		    .setNegativeButton("确定", null)
		    //.setIcon(android.R.drawable.ic_menu_help)
		    .show();
		showToast("合成完成");

	    }
	    else if (msg.what == 1)
	    {
		pa.dismiss();
		adlog = new AlertDialog.Builder(HCActivity.this);
		adlog.setTitle("合成未完成")
		    .setMessage("要生成的图片太大,无法生成")
		    .setNegativeButton("确定", null)
		    //.setIcon(android.R.drawable.ic_menu_help)
		    .show();
		showToast("图片生成失败");
	    }
	}

    };
    //按钮事件*********
    @Override
    public void onClick(View p1)
    {
	// TODO: Implement this method
	if (p1.getId() == R.id.bn_add)
	{

	    Intent intent=new Intent();
	    intent.setClass(HCActivity.this, FileList.class);
	    startActivity(intent);
	    //overridePendingTransition(R.anim.out_to_bottom, R.anim.in_from_bottom);
	}
	else if (p1.getId() == R.id.bn_clear)
	{
	    if (items.size() > 0)
	    {

		adlog = new AlertDialog.Builder(this);
		adlog.setTitle("提示")
		    .setMessage("确定清空列表吗?")
		    .setPositiveButton("确定", new DialogInterface.OnClickListener(){
			@Override
			public void onClick(DialogInterface p1, int p2)
			{
			    // TODO: Implement this method
			    items.clear();
			    adapter.notifyDataSetChanged();
			}
		    })
		    .setNegativeButton("取消", null)
		    .show();
	    }
	}
	else if (p1.getId() == R.id.bn_hc)
	{
	    if (items.size() > 0)
	    {
		pa = ProgressDialog.show(HCActivity.this, null, "正在合成……");
		//让它不可返回
		pa.setCancelable(false);
		new Thread(this).start();
	    }
	    else
		showToast("请先添加图片");

	}
    }

    @Override
    public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter)
    {
	// TODO: Implement this method
	return super.registerReceiver(receiver, filter);
    }

    //实例化一个广播接收器
    BroadcastReceiver br=new BroadcastReceiver()
    {
	@Override
	public void onReceive(Context p1, Intent p2)
	{
	    // TODO: Implement this method
	    if (p2.getAction().equals(THIS_ACTION))
	    {
		bitmapItem = IO.getImageFromPath(FileList.selectedFilePath);

		item = new HashMap<String, Object>();    
		item.put("imageItem", bitmapItem); 
		item.put("filePath", FileList.selectedFilePath);
		item.put("fileName", new File(FileList.selectedFilePath).getName());  
		item.put("delay", sp.getString("edit_dely", "0.5"));

		items.add(item);  

		adapter.notifyDataSetChanged();

		list.setSelection(items.size() - 1);
	    }
	}
    };
    //设置时间的对话框
    public void showEditTextDialog(Context context, String title, final int itemPosition)
    {
	final EditText edit=new EditText(context);
	//设置只能输入小数
	edit.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
	edit.setText(items.get(itemPosition).get("delay") + "");
	new AlertDialog.Builder(context)
	    .setTitle(title)
	    .setView(edit)
	    .setPositiveButton("确定", 
	    new DialogInterface.OnClickListener(){
		@Override
		public void onClick(DialogInterface p1, int p2)
		{
		    // TODO: Implement this method
		    items.get(itemPosition).put("delay", edit.getText().toString());
		    adapter.notifyDataSetChanged();
		}
	    })
	    .setNegativeButton("取消", null).show();
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        getMenuInflater().inflate(R.menu.root, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item)
    {
        int id=item.getItemId();
        if (id == R.id.lxw_action_edi_user_profile)
	{

	    startActivity(new Intent(HCActivity.this, SettingActivity.class));
        }
        return super.onOptionsItemSelected(item);
    }

    public void showToast(String text)
    {
	Toast.makeText(HCActivity.this, text,Toast.LENGTH_SHORT).show();
    }

    //初始化adapter
    public void initAdapter()
    {
	items = new ArrayList<Map<String,Object>>(); 
	//实例化一个适配器  
	adapter = new SimpleAdapter(HCActivity.this, items,
				    R.layout.hc_list_item,
				    new String[]{"imageItem", "fileName","delay","filePath"},
				    new int[]{R.id.image_item, R.id.hc_tv_filename,R.id.tv_delay}
				    );  

	list.setAdapter(adapter);  
	adapter.setViewBinder(new ViewBinder(){

		@Override
		public boolean setViewValue(View p1, Object p2, String p3)
		{
		    if (p1 instanceof ImageView && p2 instanceof Bitmap)
		    {
			ImageView iv = (ImageView) p1;
			iv.setImageBitmap((Bitmap) p2);
			return true;
		    }
		    else
			return false;

		}
	    });
    }


    long cur=0;


    @Override
    protected void onStart()
    {
	// TODO: Implement this method
	super.onStart();
	toolbar.setTitle("GIF合成");
//		设置标题
//		设置副标题
	toolbar.setNavigationIcon(R.drawable.ic_arrow_back_white_24dp);
//		设置导航图标
	toolbar.setNavigationOnClickListener(new OnClickListener()
	    {
		@Override
		public void onClick(View p1)
		{
		    finish();
		}
	    });
    }
    @Override
    protected void onResume()
    {
	// TODO: Implement this method
	//当Activity被重新激活时
	//要重新给动作和筛选条件重新赋值
	//不让两个Activity的ListView和选择文件时乱
	FileList.broadcastAction = THIS_ACTION;
	FileList.filter = ".*.jpg|.*.png|.*.bmp|.*.gif$";
	//清空缓存数组
	FileList.dirs_name_cache = null;
	FileList.files_name_cache = null;
	//开启线程载入列表
	new Thread(loadFileList).start();
	//FileList.dirs_name=null;
	//FileList.files_name=null;
	//showToast(THIS_ACTION);
	super.onResume();
    }

}