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); } }