package com.emn.emf.android.basecommands.loading;

import org.json.JSONException;
import org.json.JSONObject;

import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

import com.emn.emf.android.AndroidBaseActivity;
import com.emn.emf.android.CommandObject;
import com.emn.emf.android.R;

public class Loading extends AndroidBaseActivity implements CommandObject {
 private ProgressDialog myDialog2 = null;
 private ProgressDialog myDialogTime = null;
 private long time = 0,time2 = 0,time3 = 0;
 private CustomDialog cd;
 private Dialog cd2;
 public  AlertDialog alertDialog;
 private String showCenterTipTitle = "",showCenterTipTitle2 = "",showCenterTipTitle3 = "",showCenterTipTitle4 = "";
 private String showCenterTipTime = "",showCenterTipTime2 = "",showCenterCallback3 = null,showCenterTipContent3 = "";
 private String showCenterTipContent = "",showCenterTipContent2 = "" ,showCenterTipTimeTitle = "";;
 private String showCenterCallback4 = null,showCenterTipContent4 = "";
 private String showCenterTipTimeTime = "",showCenterTipTiemContent = "",showCenterCallback = "";
 private Handler mHandler = new Handler();

 @Override
 public Boolean checkValidation(String checkCommand, Object parameters) {
  // TODO Auto-generated method stub
  return Boolean.TRUE;
 }
 /*
  * (non-Javadoc)
  * @see com.emn.emf.android.CommandObject#handleIt(java.lang.String, java.lang.Object)
  */
 @Override
 public Object handleIt(String checkCommand, Object parameters) {

  String jsonstartLoad = "";
  if (checkCommand.equals("startLoad")) {
   jsonstartLoad = getStartLoad(parameters);
  } else if (checkCommand.equals("finishLoad")) {
   jsonstartLoad = getFinishLoading();

  } else if (checkCommand.equals("showCenterTipMyTwoButton")) {
   jsonstartLoad = getshowCenterTipMyTwoButton(parameters);
  } else if (checkCommand.equals("showCenterTipMyTime")) {
   jsonstartLoad = getshowCenterTipMyTime(parameters);
  } else if (checkCommand.equals("showCenterTipButtonTwo")) {
   jsonstartLoad = getshowCenterTipButtonTwo(parameters);
  }
  else if (checkCommand.equals("showCenterTipButtonOne")) {
   jsonstartLoad = getshowCenterTipBttonOne(parameters);
  }else if (checkCommand.equals("showCenterTipTimeSystem")) {
   jsonstartLoad = getshowCenterTipTimeSystem(parameters);
  }
  return jsonstartLoad;

 }
 /*
  *  启动对话框,带有系统默认旋转图片,可以自定义标题,和内容提示部分。
  */
 private String getStartLoad(Object parameters) {

  String loadingTitle = "";
  String loadingContent = "";
  String strJSONParam = parameters.toString();
  JSONObject jsonObject;
  try {
   jsonObject = new JSONObject(strJSONParam);
   loadingTitle = jsonObject.getString("title");
   loadingContent = jsonObject.getString("content");
  } catch (JSONException e1) {
   e1.printStackTrace();
  }
  CharSequence strDialogTitle = (CharSequence) loadingTitle;
  CharSequence strDialogBody = (CharSequence) loadingContent;

  // 显示Progress对话框
  myDialog2 = ProgressDialog.show(AndroidBaseActivity.self,
    strDialogTitle, strDialogBody, true);

  

  return "{states:success}";
 }

 
    /*
     * 加载Loading效果,你可以自定义指定标题,内容。但没有自动取消。
     * 如果需要取消需要调用JS方法finishLoading()进行取消。
     */
 private String getshowCenterTipTimeSystem(Object parameters) {
  String strJSONParam = parameters.toString();
  JSONObject jsonObject;
  try {
   jsonObject = new JSONObject(strJSONParam);
   showCenterTipTimeTitle = jsonObject.getString("title");
   showCenterTipTimeTime = jsonObject.getString("time");
   showCenterTipTiemContent = jsonObject.getString("content");
   time2 = Long.parseLong(showCenterTipTimeTime);

  } catch (JSONException e1) {
   // TODO Auto-generated catch block
   e1.printStackTrace();
  }

  CharSequence strDialogTitle = (CharSequence) showCenterTipTimeTitle;
  CharSequence strDialogBody = (CharSequence) showCenterTipTiemContent;

  // 显示Progress对话框
  myDialogTime = ProgressDialog.show(AndroidBaseActivity.self,
    strDialogTitle, strDialogBody, true);

  new Thread() {
   public void run() {
    try {
     sleep(time2);
    } catch (Exception e) {
     e.printStackTrace();
    } finally { // 卸载所创建的myDialog对象。
     myDialogTime.dismiss();
    }
   }
  }.start(); // 开始运行运行线程

  return "{states:success}";
 }

 
 /*
  *  取消Loading效果,和getshowCenterTipTime(Object parameters)配对使用。
  */
 private String getFinishLoading() {
  if(myDialog2 == null) {
   return "{states:success}";
  }
  myDialog2.dismiss();
  return "{states:success}";
 }
 
 
 
 /*
  * 自定义dialog,按确定,可以指定执行JS方法,可以指定标题,内容。
  * 暂时不支持指定时间,需要的话可以随时添加;
  */
 
 
 private String getshowCenterTipMyTwoButton(Object parameters) {

  String strJSONParam = parameters.toString();
  JSONObject jsonObject;
  try {
   jsonObject = new JSONObject(strJSONParam);
   showCenterTipTitle = jsonObject.getString("title");
   showCenterTipTime = jsonObject.getString("time");
   showCenterTipContent = jsonObject.getString("content");
   showCenterCallback = jsonObject.getString("callback");
   time = Long.parseLong(showCenterTipTime);

  } catch (JSONException e1) {
   // TODO Auto-generated catch block
   e1.printStackTrace();
  }
  cd = new CustomDialog(AndroidBaseActivity.self);
  cd.show();
  
  return "{states:success}";
 }

 /*
  *  自定义对话框
  */
 class CustomDialog extends Dialog {

  public CustomDialog(Context context) {
   super(context);
  }

  protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);

   setContentView(R.layout.custom_dialog);
   setTitle(showCenterTipTitle);

   TextView text = (TextView) findViewById(R.id.text);
   text.setText(showCenterTipContent);
   ImageView p_w_picpath = (ImageView) findViewById(R.id.p_w_picpath);
   p_w_picpath.setImageResource(R.drawable.icon);

   Button buttonYes = (Button) findViewById(R.id.button_yes);
   buttonYes.setHeight(5);
   buttonYes.setOnClickListener(new Button.OnClickListener() {

    public void onClick(View v) {
     dismiss();
     mHandler.post(new Runnable() {
      public void run() {

       getWebView().loadUrl(
         "javascript:" + showCenterCallback);
      }
     });

    }
   });
   Button buttonNo = (Button) findViewById(R.id.button_no);
   buttonNo.setSingleLine(true);
   buttonNo.setOnClickListener(new Button.OnClickListener() {

    public void onClick(View v) {
     dismiss();

    }
   });
  }
 }
 
 /*
  * 自定义dialog,可以指定执行时间长度,标题,内容部分支持最大48*48像素PNG图片。
  *
  */
 private String getshowCenterTipMyTime(Object parameters) {

  String strJSONParam = parameters.toString();
  JSONObject jsonObject;
  try {
   jsonObject = new JSONObject(strJSONParam);
   showCenterTipTitle2 = jsonObject.getString("title");
   showCenterTipTime2 = jsonObject.getString("time");
   showCenterTipContent2 = jsonObject.getString("content");
   // showCenterCallback = jsonObject.getString("callback");
   time3 = Long.parseLong(showCenterTipTime2);

  } catch (JSONException e1) {
   // TODO Auto-generated catch block
   e1.printStackTrace();
  }
  cd2 = new CustomDialog2(AndroidBaseActivity.self);
  cd2.setContentView(R.layout.custom_dialog2);
  cd2.setTitle(showCenterTipTitle2);
  cd2.show();
  new Thread() {
   public void run() {
    try {
     sleep(time3);
    } catch (Exception e) {
     e.printStackTrace();
    } finally { // 卸载所创建的myDialog对象。
     cd2.dismiss();
    }
   }
  }.start(); // 开始运行运行线程
 return "{states:success}";
 }

 class CustomDialog2 extends Dialog {

  public CustomDialog2(Context context) {
   super(context);
  }

  protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);

   setContentView(R.layout.custom_dialog2);
   TextView text = (TextView) findViewById(R.id.text);
      text.setText(showCenterTipContent2);
   ImageView p_w_picpath = (ImageView) findViewById(R.id.p_w_picpath);
   p_w_picpath.setImageResource(R.drawable.icon);
  }

 }

 /*
  * 系统dialog的封装,可以指定执行时间,标题,内容。
  * 有确定按钮,和取消按钮,点击确定时执行一个JS方法,取消不执行。
  *
  */
 
 private String getshowCenterTipButtonTwo(Object parameters) {

  String strJSONParam = parameters.toString();
  JSONObject jsonObject;
  try {
   jsonObject = new JSONObject(strJSONParam);
   showCenterTipTitle3 = jsonObject.getString("title");
   //showCenterTipTime3 = jsonObject.getString("time");
   showCenterTipContent3 = jsonObject.getString("content");
   showCenterCallback3 = jsonObject.getString("callback");
   //time4 = Long.parseLong(showCenterTipTime3);

  } catch (JSONException e1) {
   // TODO Auto-generated catch block
   e1.printStackTrace();
  }
  
  new AlertDialog.Builder(AndroidBaseActivity.self)
     .setTitle(showCenterTipTitle3)//.setView(view)
     .setMessage(showCenterTipContent3)
     .setPositiveButton("确定",
         new DialogInterface.OnClickListener(){
             public void onClick(
                 DialogInterface dialoginterface, int i){
              getWebView().loadUrl(
       "javascript:" + showCenterCallback3);
                
                 }
             })
     .setNegativeButton("取消",
         new DialogInterface.OnClickListener(){
             public void onClick(
                 DialogInterface dialoginterface, int i){
                 }
             })
     .show();
  
 return "{states:success}";
 }
 
 
 

 /*
  * 系统dialog的封装,可以指定执行时间,标题,内容。
  * 只有确定按钮,,点击确定时执行一个JS方法。
  *
  */
 
 private String getshowCenterTipBttonOne(Object parameters) {

  String strJSONParam = parameters.toString();
  JSONObject jsonObject;
  try {
   jsonObject = new JSONObject(strJSONParam);
   showCenterTipTitle4 = jsonObject.getString("title");
   //showCenterTipTime3 = jsonObject.getString("time");
   showCenterTipContent4 = jsonObject.getString("content");
    showCenterCallback4 = jsonObject.getString("callback");
   //time4 = Long.parseLong(showCenterTipTime3);

  } catch (JSONException e1) {
   // TODO Auto-generated catch block
   e1.printStackTrace();
  }
  
  new AlertDialog.Builder(AndroidBaseActivity.self)
     .setTitle(showCenterTipTitle4)//.setView(view)
     .setMessage(showCenterTipContent4)
     .setPositiveButton("确定",
         new DialogInterface.OnClickListener(){
             public void onClick(
                 DialogInterface dialoginterface, int i){
              
              getWebView().loadUrl(
       "javascript:" + showCenterCallback4);
                 }
             })
    
     .show();
  
 return "{states:success}";
 }

 

 
 
}

2.custom_dialog.xml的代码

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/layout_root"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
               android:background="@drawable/bg3"
              android:padding="10dp"
              >
      <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:padding="2px"
        >
       
         <ImageView android:id="@+id/p_w_picpath"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginRight="2dp"
                />
      <TextView android:id="@+id/text"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:textColor="#FFF"
               android:paddingTop="12dp"
             
               />
             
      </LinearLayout>       
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:padding="5px"
   >
           <Button
               android:id="@+id/button_yes"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:text="      确定      "
               />
           <Button
               android:id="@+id/button_no"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:text="      取消       "
               />
    </LinearLayout>
   
</LinearLayout>

3.custom_dialog2.xml的代码

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            
              android:orientation="horizontal"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:padding="10dp"
              android:background="@drawable/bg3"
              >
             
             
      <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="2"
       
        android:padding="2px"
        >
         
         <ImageView android:id="@+id/p_w_picpath"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginRight="2dp"
                />
      <TextView android:id="@+id/text"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:paddingTop="18px"
               android:gravity="center_horizontal"
             
             
               />
             
      </LinearLayout>       
   
   
</LinearLayout>

 4.main.js代码

//加载效果,你可以自定义指定标题,内容。但没有自动取消。如果需要取消需要调用JS方法finishLoading()
function getStartLoading(){
 return emf.makeCall('startLoading.startLoad', "{title:'联系人',content:'请您稍等正在加载联系人...'}");
}
//与上面方法一对,负责关闭上面的方法。
function finishLoading(){
 return emf.makeCall('startLoading.finishLoad', "{}");
}
//自定义dialog,可以指定执行JS方法,可以指定标题,内容。暂时不支持指定时间,需要的话可以随时添加
function showCenterTipMyTwoButton(){
 return emf.makeCall('startLoading.showCenterTipMyTwoButton', "{title:'操作成功',content:'操作成功信息部分',time:'5000',callback:'showCenterTipMyTime()'}");
}
//自定义dialog,可以指定执行时间,标题,内容。内容部分支持最大48*48像素PNG图片
function showCenterTipMyTime(){
 return emf.makeCall('startLoading.showCenterTipMyTime', "{title:'操作成功时间',content:'时间操作成功信息部分',time:'5000'}");
}

//系统dialog的封装,可以指定执行时间,标题,内容。有确定,执行一个JS方法,取消不执行。
function showCenterTipButtonTwo(){
 return emf.makeCall('startLoading.showCenterTipButtonTwo', "{title:'操作标题',content:'时间操作成功信息部分呵呵!',callback:'showCenterTipButtonOne()'}");
}
function showCenterTipButtonOne(){
 return emf.makeCall('startLoading.showCenterTipButtonOne', "{title:'操作标题',content:'时间操作成功信息部分呵呵!',callback:'showCenterTipButtonTwo()'}");
}
//系统自带的Dialog,但可以指定执行时间,标题,内容。
function showCenterTipTimeSystem(){
 return emf.makeCall('startLoading.showCenterTipTimeSystem', "{title:'恭喜操作成功',content:'操作成功信息部分',time:'5000'}");
}

 

5.index.html页面代码

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>EMF</title>
<base href="mobile/">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<script type="text/javascript" src="file:///android_asset/main.js"
charset="utf-8"></script>


</head>
<body>
<label id='testlabel'>123 </label>
<br />
<br />
<input type="button" value="getStartLoading()" />
<input type="button" value="showCenterTipMyTwoButton()" />
<input type="button" value="showCenterTipMyTime()" />
<input type="button" value="showCenterTipTimeSystem()" />
<input type="button" value="showCenterTipButtonTwo()" />
<input type="button" value="showCenterTipButtonOne()" />
<br />
</body>
<script type="text/javascript">
//function showCenterTipTest(){

//}

//testlabel.innerText += "abc:" + getDownload();
//getStartLoading();
// window.setTimeout('finishLoading()',6000)
//testlabel.innerText = emf.makeCall('telePhone', '{query:query}');
//testlabel.innerText = "abc:" + getContactsId();
//testlabel.innerText += "abc:" + getDownload();
//testlabel.innerText += "abc:" + getStartLoading();

</script>
</html>