package com.smartdot.cgt.activity; import android.annotation.SuppressLint; import android.app.Activity; import android.app.ProgressDialog; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.os.Message; import android.os.PersistableBundle; import android.support.v4.app.ActivityCompat; import android.util.Log; import android.view.KeyEvent; import android.view.View; import android.view.Window; import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.esri.core.internal.catalog.User; import com.smartdot.cgt.R; import com.smartdot.cgt.model.ResponseResult; import com.smartdot.cgt.request.ApiClent; import com.smartdot.cgt.request.DownLoadingProgress; import com.smartdot.cgt.request.Request; import com.smartdot.cgt.util.ApplicationMain; import com.smartdot.cgt.util.BaseThread; import com.smartdot.cgt.util.HandlerStatus; import com.smartdot.cgt.util.HttpRequestTools; import com.smartdot.cgt.util.Msg; import com.smartdot.cgt.util.MsgCallback; import com.smartdot.cgt.util.RsaUtils; import com.smartdot.cgt.util.config.ConfigLoader; import com.smartdot.cgt.view.FootBar; import com.smartdot.cgt.view.TitleBar; import org.json.JSONException; import org.json.JSONObject; import java.io.File; import java.io.FileOutputStream; import java.security.PublicKey; /** * Created by W530 on 2019/9/25. */ @SuppressLint("NewApi") public class UserInfoActivity extends BaseActivity{ private FootBar footbar; TextView txtname; private TitleBar titlebar; private BaseThread thread; private ImageView upversion; private TextView txtversion; private String version; private static final int REQUEST_EXTERNAL_STORAGE = 1; private static String[] PERMISSIONS_STORAGE = { "android.permission.READ_EXTERNAL_STORAGE", "android.permission.WRITE_EXTERNAL_STORAGE" }; public static void verifyStoragePermissions(Activity activity) { try { //检测是否有写的权限 int permission = ActivityCompat.checkSelfPermission(activity, "android.permission.WRITE_EXTERNAL_STORAGE"); if (permission != PackageManager.PERMISSION_GRANTED) { // 没有写的权限,去申请写的权限,会弹出对话框 ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,REQUEST_EXTERNAL_STORAGE); } } catch (Exception e) { e.printStackTrace(); } } @Override public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) { super.onCreate(savedInstanceState, persistentState); MyApplication.getInstance().addActivity(this); verifyStoragePermissions(this); } @Override protected void setLayout() { initActivity(); setContentView(R.layout.show_me); titlebar = (TitleBar) this.findViewById(R.id.titlebar); titlebar.setTitleText(R.string.main_me); footbar = (FootBar) this.findViewById(R.id.footbar); footbar.setChoose(4); txtname = (TextView) findViewById(R.id.name); txtversion = (TextView) findViewById(R.id.txtversion); upversion = (ImageView) findViewById(R.id.upversion); version = txtversion.getText().toString(); } @Override protected void addEventListener() { findViewById(R.id.personal_button).setOnClickListener(btnOnClick); findViewById(R.id.pwd_allow_button).setOnClickListener(btnOnClick); findViewById(R.id.help_allow_button).setOnClickListener(btnOnClick); findViewById(R.id.logout_bt).setOnClickListener(btnOnClick); findViewById(R.id.upversion).setOnClickListener(btnOnClick); } private View.OnClickListener btnOnClick = new View.OnClickListener() { @Override public void onClick(View v) { switch ( v.getId() ) { case R.id.personal_button: Intent intent = new Intent(UserInfoActivity.this,PersonalActivity.class); startActivityForResult(intent,0x002); break; case R.id.pwd_allow_button: intent = new Intent(UserInfoActivity.this,ModPwdActivity.class); startActivity(intent); break; case R.id.help_allow_button: intent = new Intent(UserInfoActivity.this, FrmHelp.class); startActivity(intent); break; case R.id.logout_bt: logout(); break; case R.id.upversion: autoCheckPackage(); break; default: break; } } }; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); MyApplication.getInstance().addActivity(this); } /** * 自动升级程序 */ private void autoCheckPackage() { thread = new BaseThread(baseHandler) { @Override public void runThread() { final Message msg = thread.obtainMessage(); if (msg != null) { msg.what = HandlerStatus.REQUEST_CHECKPACKAGE; ApiClent.checkVersion( new ApiClent.ClientCallback() { @Override public void onSuccess(Object data) { try { JSONObject jsonObject = new JSONObject(data.toString()); JSONObject json = jsonObject.getJSONObject("data"); msg.obj = json; msg.arg1 = HandlerStatus.HANDLE_OK; } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); Log.i("list_error", e.getMessage()); msg.arg1 = HandlerStatus.HANDLE_FAIL; } } @Override public void onFailure(String message) { msg.arg1 = HandlerStatus.HANDLE_FAIL; } @Override public void onError(Exception e) { msg.arg1 = HandlerStatus.HANDLE_ERROR; } }); this.sendMessage(msg); } } }; thread.start(); } public void logout(){ thread = new BaseThread(baseHandler) { @Override public void runThread() { final Message msg = thread.obtainMessage(); if (msg != null) { msg.what = HandlerStatus.REQUEST_LIST; ApiClent.logout( new ApiClent.ClientCallback() { @Override public void onSuccess(Object data) { try { JSONObject jsonObject = new JSONObject(data.toString()); msg.obj = jsonObject; msg.arg1 = HandlerStatus.HANDLE_OK; } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); Log.i("list_error", e.getMessage()); msg.arg1 = HandlerStatus.HANDLE_FAIL; } } @Override public void onFailure(String message) { msg.arg1 = HandlerStatus.HANDLE_FAIL; } @Override public void onError(Exception e) { msg.arg1 = HandlerStatus.HANDLE_ERROR; } }); this.sendMessage(msg); } } }; thread.start(); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { Intent intent = new Intent(); finish(); } return super.onKeyDown(keyCode, event); } @SuppressWarnings("unchecked") @Override protected void handleMessage(Message msg) { if(msg.what == HandlerStatus.REQUEST_LIST){ if (msg.arg1 == HandlerStatus.HANDLE_OK) { JSONObject jsonObject= (JSONObject)msg.obj; try { if(jsonObject.getInt("code")==200){ Toast.makeText(UserInfoActivity.this, "登出成功!", Toast.LENGTH_SHORT).show(); new ConfigLoader().saveAutoLogin(false); Intent intent = new Intent(); intent.setClass(UserInfoActivity.this,FrmLogin.class); startActivity(intent); MyApplication.getInstance().exit(); } }catch (Exception e){ Toast.makeText(UserInfoActivity.this, "登出失败!", Toast.LENGTH_SHORT).show(); } } else if (msg.arg1 == HandlerStatus.HANDLE_FAIL) { Msg.showInfo(UserInfoActivity.this, "登出失败!"); } else { Msg.showInfo(UserInfoActivity.this, "登出时出现错误!"); } checkIsNeedCloseProgress(); } // 升级 else if (msg.what == HandlerStatus.REQUEST_CHECKPACKAGE) { if (msg.arg1 == HandlerStatus.HANDLE_OK) { final JSONObject jsonObject= (JSONObject)msg.obj; try { final String jsonversion = jsonObject.getString("version"); final String downloadUrl = jsonObject.getString("downloadUrl"); if (jsonversion.compareTo(version)>0 ) { StringBuffer msgSb = new StringBuffer(); msgSb.append("发现新版本城管通,\n版本号"); msgSb.append(jsonversion); msgSb.append(",\n点击确认将进行更新!"); Msg.confirm(UserInfoActivity.this, msgSb.toString(), "版本更新", new MsgCallback() { @Override public void callBack(Boolean result) { if (null != result && result.booleanValue()) { downloadPackage(jsonversion, downloadUrl); } } }); }else{ Msg.showInfo(UserInfoActivity.this, "暂无新版本!"); } }catch (Exception e){ e.printStackTrace(); } } else if (msg.arg1 == HandlerStatus.HANDLE_FAIL) { //Msg.showInfo(FrmLogin.this, "检查更新失败!"); } else { //Msg.showInfo(FrmLogin.this, "检查更新出错!"); } } } /** * 下载更新 * * @param packageId * @param fileName */ protected void downloadPackage(final String packageId, final String fileName) { final ProgressDialog pd; // 进度条对话框 pd = new ProgressDialog(this); pd.setCanceledOnTouchOutside(false); pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); pd.setMessage("正在下载更新"); pd.show(); Handler handler = new Handler() { @Override public void handleMessage(Message msg) { if (msg.what == HandlerStatus.DOWNLOAD_CHECKPACKAGE) { if (msg.arg1 == HandlerStatus.HANDLE_OK) { pd.setProgress((Integer) msg.obj); } else { // Msg.showInfo(UserInfoActivity.this, "更新失败,请确认网络已连接及SD已安装!"); Msg.showInfo(UserInfoActivity.this, "更新失败,请确认网络已连接!"); } } } }; final BaseThread thread = new BaseThread(handler) { @Override public void runThread() { try { String url = getCgtConfig().getRequestUrl() + "/static/"; url += fileName; File file = new File(getApplicationMain().getConfigPath(fileName.substring(4))); if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { // 如果相等的话表示当前的sdcard挂载在手机上并且是可用的 pd.setMax(100); final BaseThread downloadThread = this; FileOutputStream fos = new FileOutputStream(file); HttpRequestTools.get(url,ApplicationMain.getInstance().getCgtConfig().gettokenStr(), fos, new DownLoadingProgress() { @Override public void onProgressUpdate(Integer progress, int handlerStatus) { Message msg = downloadThread.obtainMessage(); msg.what = handlerStatus; msg.arg1 = HandlerStatus.HANDLE_OK; msg.obj = progress; downloadThread.sendMessage(msg); } }, HandlerStatus.DOWNLOAD_CHECKPACKAGE); fos.close(); sleep(3000); } else { Message msg = this.obtainMessage(); msg.what = HandlerStatus.DOWNLOAD_CHECKPACKAGE; msg.arg1 = HandlerStatus.HANDLE_ERROR; this.sendMessage(msg); } if (file.exists()) { ConfigLoader configLoader = new ConfigLoader(); configLoader.saveLastUserName(null); Intent intent = new Intent(); // 执行动作 intent.setAction(Intent.ACTION_VIEW); // 执行的数据类型 intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive"); startActivity(intent); } } catch (Exception e) { e.printStackTrace(); } finally { pd.dismiss(); // 结束掉进度条对话框 } } }; thread.start(); pd.setOnCancelListener(new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { thread.interrupt(); } }); } private boolean checkIsNeedCloseProgress() { boolean canCloseProgress = true; if (canCloseProgress) { try { closeProgress(); } catch (Exception e) { e.printStackTrace(); } } return canCloseProgress; } @Override protected void onCancelProgress(DialogInterface arg0) { } }