Newer
Older
dxcgt / app / src / main / java / com / smartdot / cgt / activity / UserInfoActivity.java
wangxitong on 6 Apr 2021 16 KB first commit
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) {

    }
}