DownloadFragment.java 7.1 KB
package com.sunvote.xpadapp.fragments;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.sunvote.util.LogUtil;
import com.sunvote.xpadapp.MainActivity;
import com.sunvote.xpadapp.R;
import com.sunvote.xpadapp.base.BaseFragment;
import com.sunvote.xpadcomm.DownloadFileModule;
import com.sunvote.xpadcomm.FileReciverInterface;

import java.util.Random;

public class DownloadFragment extends BaseFragment implements FileReciverInterface {
	private final String TAG = "DownloadFragment";
	private String serverIp = "127.0.0.1";
	private int serverPort = 15154;

	private String ssid = "";
	private String pwd = "";
	private int keypadId ;
	private boolean isConnectWifi;
	private TextView tv;
	private ImageView download_img;

	private final int msgConnectError = 1;
	private final int msgOnDownload = 2;
	private final int msgDownloadOver = 3;
	private final int msgDownloadDataError = 4;
	private final int msgDownloadUserStop = 5;
	private final int msgOnUnzipError = 6;
	private final int msgGoBack= 7;

	private boolean isUiActive;
	private int downloadRetryCount ;

	public boolean isFinishDownload;

	public void setInfo(String wifiSsid, String wifiPassword, String ip, int port,int deviceId) {
		if (wifiSsid != null) {
			ssid = wifiSsid;
		}
		if (wifiPassword != null) {
			pwd = wifiPassword;
		}
		if (ip != null) {
			serverIp = ip;
		}
		if (port != 0) {
			serverPort = port;
		}
		keypadId = deviceId;
		isFinishDownload = false;
	}

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
		Log.d(TAG, "onCreateView");
		View view = inflater.inflate(R.layout.fragment_download, container, false);
		view.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				;
			}
		});
		tv = (TextView) view.findViewById(R.id.download_title);
		download_img = view.findViewById(R.id.download_img);
		downloadRetryCount = 0;
		tv.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// connectWifiThread.run();
				// connectWifi();
			}
		});

		return view;
	}

	@Override
	public void onResume() {
		super.onResume();
		isUiActive = true;
	}

	@Override
	public void onPause() {
		super.onPause();
		isUiActive = false;
	}

	@Override
	public void onActivityCreated(Bundle savedInstanceState) {
		super.onActivityCreated(savedInstanceState);
		LogUtil.d(TAG, "onActivityCreated");
		connectServer();
	}

	@Override
	public void onDestroy() {
		super.onDestroy();
	}

	private Handler mHandler = new Handler() {

		public void handleMessage(Message msg) {
			switch (msg.what) {
			case msgConnectError:
				stopDownload();
				if(isUiActive) {
					download_img.setImageResource(R.drawable.download_fail);
					tv.setText(getString(R.string.connect_server_fail));
				}
				break;
			case msgOnDownload:
				LogUtil.d(TAG, getString(R.string.downloading) + msg.arg1 + "%");
				if(isUiActive) {
					int percent = msg.arg1;
					tv.setText(getString(R.string.downloading) + percent + "%");
					download_img.setImageResource(R.drawable.downloading);
					if(percent == 100){
						tv.setText(getString(R.string.download_over_unzip));
					}
				}
				break;
			case msgDownloadOver:
				try {
					LogUtil.d(TAG, "on msgDownloadOver");
					if(isUiActive) {
						download_img.setImageResource(R.drawable.download_complete);
						tv.setText(getString(R.string.download_over));
					}
					isFinishDownload = true;
					if(mMainActivity.dbm != null){
						mMainActivity.dbm.closeDB();
						mMainActivity.dbm = null;
					}
					Message message = new Message();
					message.what = msgGoBack;
					mHandler.sendMessageDelayed(message,10000);
				} catch (Exception e) {
					LogUtil.e(TAG,e);
				}

				break;
				case msgDownloadDataError:
					if(isUiActive) {
						if(++downloadRetryCount >= 3){//重试 n 次
							download_img.setImageResource(R.drawable.download_fail);
							tv.setText(getString(R.string.download_fail));
							break;
						}
						stopDownload();
						download_img.setImageResource(R.drawable.download_connect);
						tv.setText(getString(R.string.download_retry));
						getMeetingFilesFromServer();
					}
					break;
				case msgOnUnzipError:
					Log.d(TAG, "handleMessage: msgOnUnzipError");
					download_img.setImageResource(R.drawable.download_fail);
					tv.setText(getString(R.string.unzip_error));
					Toast.makeText(mMainActivity,getString(R.string.unzip_error),Toast.LENGTH_LONG).show();
					isFinishDownload = true;
					break;
				case msgDownloadUserStop:
					stopDownload();
					break;
				case msgGoBack:
					goBack();
			}

			super.handleMessage(msg);
		}
	};



	public void forceStopDownload(){
		LogUtil.i(TAG, "forceStopDownload: ");
		DownloadFileModule.getInstance().clean();
	}

	public void getMeetingFilesFromServer() {
		LogUtil.d(TAG, "getMeetingFilesFromServer");
		if(!DownloadFileModule.getInstance().isWork()) {
			DownloadFileModule.getInstance().setFileReciverInterface(this);
			DownloadFileModule.getInstance().downloadFile(serverIp, serverPort, keypadId);
		}
	}

	private void connectServer() {
		if(isUiActive) {
			download_img.setImageResource(R.drawable.download_connect);
			tv.setText(getString(R.string.connect_server_ing));
		}
		LogUtil.d(TAG, getString(R.string.connect_server_ing));
		getMeetingFilesFromServer();
	}

	@Override
	public void onConnectServerError() {
		Message message = new Message();
		message.what = msgConnectError;
		mHandler.sendMessage(message);
	}

	@Override
	public void onDownload(long percent) {
		Message message = new Message();
		message.what = msgOnDownload;
		message.arg1 = (int) percent;
		mHandler.sendMessage(message);

	}

	@Override
	public void onDownloadSuccess() {
		Message message = new Message();
		message.what = msgDownloadOver;
		mHandler.sendMessage(message);
	}

	@Override
	public void stopDownload() {
		LogUtil.i(TAG, "stopDownload...");
		DownloadFileModule.getInstance().clean();
	}

	@Override
	public void onDownloadDataError() {
		LogUtil.d(TAG,"onDownloadDataError");
		Message message = new Message();
		message.what = msgDownloadDataError;
		mHandler.sendMessage(message);
	}

	@Override
	public void onDownloadUserStop() {
		LogUtil.d(TAG,"onDownloadUserStop");

		Message message = new Message();
		message.what = msgDownloadUserStop;
		mHandler.sendMessage(message);
	}

	@Override
	public void onUnzipError() {

		LogUtil.d(TAG,"onUnzipError");
		Message message = new Message();
		message.what = msgOnUnzipError;
		mHandler.sendMessage(message);
	}

	private void goBack() {
//		FragmentManager fm = getFragmentManager();
//		FragmentTransaction tx = fm.beginTransaction();
//		tx.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out);
//		//tx.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
//		tx.remove(DownloadFragment.this);
//		tx.commit();
		((MainActivity)getActivity()).myHandler.sendEmptyMessage(MainActivity.Msg_StopDownload);

	}





}