package cn.koolcloud.ipos.appstore.dialogs; import java.io.File; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.view.WindowManager; import android.widget.Button; import android.widget.RelativeLayout; import android.widget.TextView; import cn.koolcloud.ipos.appstore.AppStorePreference; import cn.koolcloud.ipos.appstore.R; import cn.koolcloud.ipos.appstore.api.ApiService; import cn.koolcloud.ipos.appstore.cache.DataCleanManager; import cn.koolcloud.ipos.appstore.constant.Constants; import cn.koolcloud.ipos.appstore.entity.Client; import cn.koolcloud.ipos.appstore.ui.BaseActivity; import cn.koolcloud.ipos.appstore.utils.ConvertUtils; import cn.koolcloud.ipos.appstore.utils.Env; import cn.koolcloud.ipos.appstore.utils.NetUtil; import cn.koolcloud.ipos.appstore.utils.Utils; public class UpdateClientDialog extends BaseActivity implements View.OnClickListener { private static final String TAG = "UpdateClientDialog"; public static final int UPDATE_CLIENT_DIALOG_REQUEST = 1; private TextView titleTextView; private TextView msgBodyTextView; private Button okButton; private Button cancelButton; private RelativeLayout progressLayout; private RelativeLayout buttonLayout; private Client client = null; private String savePath; private static final String APK_NAME = "newVersion.apk"; private File file; //downloaded file @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.dialog_soft_update_layout); client = (Client) getIntent().getSerializableExtra(Constants.SER_KEY); initViews(); // if (Constants.STRATEGY_UPDATE_NONE.equals(client.getStrategy()) || Constants.STRATEGY_UPDATE_FORCE.equals(client.getStrategy())) { if (client == null) { cancelButton.setVisibility(View.GONE); } else if (Constants.STRATEGY_UPDATE_FORCE.equals(client.getStrategy())) { //TODO:force download apk and install cancelButton.setVisibility(View.GONE); new DownloadThread().start(); progressLayout.setVisibility(View.VISIBLE); buttonLayout.setVisibility(View.GONE); //clean appstore data DataCleanManager.cleanApplicationData(application); } else { buttonLayout.setVisibility(View.VISIBLE); cancelButton.setVisibility(View.VISIBLE); } } private void initViews() { progressLayout = (RelativeLayout) findViewById(R.id.progressLayout); buttonLayout = (RelativeLayout) findViewById(R.id.okLayout); titleTextView = (TextView) findViewById(R.id.dialog_title_text); titleTextView.setText(Utils.getResourceString(getApplicationContext(), R.string.dialog_software_update_title)); msgBodyTextView = (TextView) findViewById(R.id.dialog_common_text); okButton = (Button) findViewById(R.id.ok); okButton.setVisibility(View.VISIBLE); okButton.setOnClickListener(this); cancelButton = (Button) findViewById(R.id.cancel); cancelButton.setText(Utils.getResourceString(getApplicationContext(), R.string.str_update_later)); cancelButton.setOnClickListener(this); StringBuffer strBuffer = new StringBuffer(); //network alarm /*if (NetUtil.isWifiConnected(getApplicationContext())) { strBuffer.append(Utils.getResourceString(getApplicationContext(), R.string.dialog_network_wifi_on)); } else if (NetUtil.isEthernetDataEnable(getApplicationContext())) { strBuffer.append(Utils.getResourceString(getApplicationContext(), R.string.dialog_network_ethernet_on)); } else if (NetUtil.isMobileConnected(getApplicationContext())) { strBuffer.append(Utils.getResourceString(getApplicationContext(), R.string.dialog_network_3g_on)); }*/ if (client == null) { strBuffer.append(Utils.getResourceString(getApplicationContext(), R.string.dialog_software_latest_version) + "\n"); } else { strBuffer.append(Utils.getResourceString(getApplicationContext(), R.string.dialog_software_update_or_not) + "\n"); } strBuffer.append(Utils.getResourceString(getApplicationContext(), R.string.dialog_software_current_version)); strBuffer.append(Env.getVersionName(getApplicationContext()) + "\n"); strBuffer.append(Utils.getResourceString(getApplicationContext(), R.string.dialog_software_found_version)); if (client != null) { strBuffer.append(client.getVersion() + "\n"); } else { strBuffer.append(Env.getVersionName(getApplicationContext()) + "\n"); } if (client != null) { strBuffer.append(Utils.getResourceString(getApplicationContext(), R.string.dialog_software_size)); strBuffer.append(ConvertUtils.bytes2kb(Long.parseLong(client.getSize())) + "\n"); } //check app when no update // if (Constants.STRATEGY_UPDATE_NONE.equals(client.getStrategy())) { if (client == null) { okButton.setText(Utils.getResourceString(getApplicationContext(), R.string.str_ok)); } else { okButton.setText(Utils.getResourceString(getApplicationContext(), R.string.str_update)); } msgBodyTextView.setText(strBuffer.toString()); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub if (keyCode == KeyEvent.KEYCODE_BACK && client.getStrategy().equals(Constants.STRATEGY_UPDATE_FORCE)) { return true; } return super.onKeyDown(keyCode, event); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.ok: //TODO download apk then install it // if (Constants.STRATEGY_UPDATE_NONE.equals(client.getStrategy())) { if (client == null) { finish(); } else { if (file != null && file.exists()) { Env.install(UpdateClientDialog.this, file, UPDATE_CLIENT_DIALOG_REQUEST); } else { new DownloadThread().start(); progressLayout.setVisibility(View.VISIBLE); buttonLayout.setVisibility(View.GONE); cancelButton.setVisibility(View.GONE); okButton.setText(Utils.getResourceString(getApplicationContext(), R.string.str_apk_downloading)); okButton.setClickable(false); } //clean appstore data DataCleanManager.cleanApplicationData(application); } break; case R.id.cancel: finish(); break; default: break; } } final Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { file = (File) msg.obj; finish(); Env.install(UpdateClientDialog.this, file, UPDATE_CLIENT_DIALOG_REQUEST); } }; class DownloadThread extends Thread { public void run() { String fileName = client.getVersion() + "_" + client.getId() + "_" + APK_NAME; String terminalId = AppStorePreference.getTerminalID(getApplicationContext()); File downloadFile = ApiService.downloadFile(getApplicationContext(), terminalId, client.getId(), fileName); Message msg = mHandler.obtainMessage(); msg.obj = downloadFile; mHandler.sendMessage(msg); } } /** * deal with not responding on clicking out side of dialog */ @Override public boolean onTouchEvent(MotionEvent event) { return false; } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); if (requestCode == UPDATE_CLIENT_DIALOG_REQUEST && resultCode == Activity.RESULT_CANCELED) { okButton.setClickable(true); if (file.exists()) { okButton.setText(Utils.getResourceString(getApplicationContext(), R.string.install)); } else { okButton.setText(Utils.getResourceString(getApplicationContext(), R.string.str_update)); } } } }