package safeluck.drive.evaluation;
|
|
|
import android.Manifest;
|
import android.app.AlertDialog;
|
|
import android.content.DialogInterface;
|
import android.os.AsyncTask;
|
import android.os.Build;
|
import android.os.Bundle;
|
|
import android.text.TextUtils;
|
import android.util.Log;
|
import android.view.View;
|
import android.view.Window;
|
import android.view.WindowManager;
|
import android.widget.Toast;
|
|
|
import androidx.annotation.NonNull;
|
import androidx.annotation.Nullable;
|
import androidx.lifecycle.Observer;
|
import androidx.lifecycle.ViewModelProviders;
|
import androidx.work.OneTimeWorkRequest;
|
import androidx.work.WorkManager;
|
|
import me.yokeyword.fragmentation.SupportActivity;
|
import safeluck.drive.evaluation.DB.rtktb.RTKConfig;
|
import safeluck.drive.evaluation.DB.rtktb.RTKConfigViewModel;
|
import safeluck.drive.evaluation.DB.signalConfigdb.SignalConfigViewModel;
|
import safeluck.drive.evaluation.DB.signalConfigdb.SingalConfig;
|
import safeluck.drive.evaluation.bean.ExamPlatformData;
|
import safeluck.drive.evaluation.bean.SignalConfigRemote;
|
import safeluck.drive.evaluation.cEventCenter.CEventCenter;
|
import safeluck.drive.evaluation.cEventCenter.ICEventListener;
|
import safeluck.drive.evaluation.fragment.HomeFragment;
|
|
import com.anyun.exam.lib.AYSdk;
|
import com.anyun.exam.lib.MyLog;
|
import com.anyun.im_lib.listener.IMSConnectStatusCallback;
|
import com.google.gson.Gson;
|
import com.safeluck.aykj.utils.BytesUtils;
|
|
import org.json.JSONException;
|
import org.json.JSONObject;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
|
import safeluck.drive.evaluation.im.IMSClientBootstrap;
|
import safeluck.drive.evaluation.im.MessageProcessor;
|
import safeluck.drive.evaluation.platformMessage.JKMessage0100;
|
import safeluck.drive.evaluation.platformMessage.JKMessage0101;
|
import safeluck.drive.evaluation.platformMessage.PlatFormConstant;
|
import safeluck.drive.evaluation.util.CThreadPoolExecutor;
|
import safeluck.drive.evaluation.util.FileUtil;
|
import safeluck.drive.evaluation.util.PermissionManager;
|
import safeluck.drive.evaluation.util.SPUtils;
|
import safeluck.drive.evaluation.util.Utils;
|
import safeluck.drive.evaluation.viewmodels.ExamPlatformModel;
|
|
public class MainActivity extends SupportActivity implements IMSConnectStatusCallback {
|
|
private static final int PERMISSIONS_REQUEST_CODE = 1001;
|
private String TAG = MainActivity.class.getCanonicalName();
|
SignalConfigViewModel signalConfigViewModel;
|
private PermissionManager mPermissionsManager;
|
private RTKConfig mRTKConfig;//RTK配置信息
|
private Gson gson = new Gson();
|
String[] PERMISSIONS = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA};
|
RTKConfigViewModel rtkConfigViewModel;
|
|
|
private ICEventListener icEventListener = new ICEventListener() {
|
@Override
|
public void onCEvent(String topic, int msgCode, int resultCode, Object obj) {
|
|
if (msgCode == Constant.RTK_PLATFORM_REGISTER_STATUS) {
|
try {
|
JSONObject jsonObject = new JSONObject((String) obj);
|
String rtkLoginPwd = jsonObject.getString("password");
|
int reg_code = jsonObject.getInt("register_code");
|
if (mRTKConfig != null) {
|
|
mRTKConfig.setPassword(rtkLoginPwd);
|
mRTKConfig.setRegistered(reg_code);
|
rtkConfigViewModel.insertRTKConfig(mRTKConfig);
|
}else{
|
MyLog.i(TAG,"mRTKConfig == null");
|
}
|
} catch (JSONException e) {
|
e.printStackTrace();
|
}
|
}
|
|
}
|
};
|
private List<SignalConfigRemote> signalConfiglist = new ArrayList<>();
|
|
|
public ExamPlatformModel examPlatformModel;
|
@Override
|
protected void onCreate(Bundle savedInstanceState) {
|
super.onCreate(savedInstanceState);
|
//全屏
|
requestWindowFeature(Window.FEATURE_NO_TITLE);
|
hideBottomUIMenu();
|
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
|
setContentView(R.layout.activity_main);
|
//初始化tts
|
ExamPlatformData.getInstance().initTTS(getApplicationContext());
|
// TODO
|
// 进行tcp连接
|
final String userId = "100002";
|
final String token = "token_" + userId;
|
examPlatformModel= ViewModelProviders.of(this).get(ExamPlatformModel.class);
|
examPlatformModel.getDataChange().observe(this, new Observer<Integer>() {
|
@Override
|
public void onChanged(Integer integer) {
|
Log.i(TAG, "ExamPlatformModel onChanged: integer=="+integer);
|
if (integer == 1){
|
MyLog.i("重新连接考试平台");
|
}else{
|
|
}
|
|
|
String str = ExamPlatformData.getInstance().getPlatformIP();
|
String hosts = "[{\"host\":"+str+","+ "\"port\":"+ExamPlatformData.getInstance().getPlatformPort()+"}]";
|
MyLog.i("hosts="+hosts);
|
IMSClientBootstrap.getInstance().close();
|
IMSClientBootstrap.getInstance().init(userId,token,hosts,1,MainActivity.this);
|
}
|
});
|
|
|
|
|
rtkConfigViewModel = ViewModelProviders.of(this).get(RTKConfigViewModel.class);
|
rtkConfigViewModel.getRTKConfig().observe(this, new Observer<RTKConfig>() {
|
@Override
|
public void onChanged(RTKConfig rtkConfig) {
|
|
MyLog.i(TAG, "RTKConfig Changed: " + (rtkConfig != null ? rtkConfig.toString() : "null"));
|
|
if (rtkConfig != null)
|
mRTKConfig = rtkConfig;
|
|
synchronized (MainActivity.this){
|
// if (onlySendOnceRTKConfig){
|
// MyLog.i(TAG,"进入 synchronized (MainActivity.this)");
|
// onlySendOnceRTKConfig = false;
|
// sendRtkConfigInfo();
|
// }
|
}
|
|
}
|
});
|
|
|
// signalConfigViewModel = ViewModelProviders.of(this).get(SignalConfigViewModel.class);
|
// signalConfigViewModel.getSignalConfigs().observe(this, new Observer<List<SingalConfig>>() {
|
// @Override
|
// public void onChanged(List<SingalConfig> singalConfigs) {
|
// signalConfiglist.clear();
|
// MyLog.i(TAG, "信号配置发生变化");
|
//
|
// for (int i = 0; i < singalConfigs.size(); i++) {
|
// SignalConfigRemote signalConfigRemote = new SignalConfigRemote();
|
// signalConfigRemote.setFunc_id(i);
|
// signalConfigRemote.setGpio_num(singalConfigs.get(i).getIndex());
|
// signalConfigRemote.setLevel(singalConfigs.get(i).getHighLevel());
|
// signalConfiglist.add(signalConfigRemote);
|
// }
|
// sendSignalConfigsToRemote();
|
// }
|
// });
|
|
mPermissionsManager = new PermissionManager(this) {
|
@Override
|
public void authorized(int requestCode) {
|
|
}
|
|
@Override
|
public void noAuthorization(int requestCode, String[] lackPermissions) {
|
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
|
builder.setTitle("提示");
|
builder.setMessage("缺少" + lackPermissions + "权限");
|
builder.setPositiveButton("设置权限", new DialogInterface.OnClickListener() {
|
@Override
|
public void onClick(DialogInterface dialog, int which) {
|
PermissionManager.startAppSettings(getApplicationContext());
|
}
|
});
|
builder.create().show();
|
}
|
|
@Override
|
public void ignore() {
|
|
}
|
};
|
|
|
MyLog.i(TAG, "onCreate");
|
|
//加载根Fragment
|
if (findFragment(HomeFragment.class) == null) {
|
loadRootFragment(R.id.fl_container, HomeFragment.newInstance());
|
}
|
|
CEventCenter.onBindEvent(true, icEventListener, Constant.BIND_CONNECT_RTK_TOPIC);//收到rtk连接 登录结果
|
|
}
|
|
@Override
|
protected void onDestroy() {
|
super.onDestroy();
|
|
CEventCenter.onBindEvent(false, icEventListener, Constant.BIND_CONNECT_RTK_TOPIC);
|
Log.i(TAG, "onDestroy: ");
|
}
|
private void sendSignalConfigsToRemote() {
|
if (signalConfiglist.size()>0){
|
new AsyncTask<Void, Void, List<Integer>>(
|
|
) {
|
@Override
|
protected List<Integer> doInBackground(Void... voids) {
|
return signalConfigViewModel.getAllIndexs();
|
}
|
|
@Override
|
protected void onPostExecute(List<Integer> indexs) {
|
if (listContainsSameValue(indexs)){
|
Log.i(TAG, "sendSignalConfigsToRemote: 有相同的index,不能发送"+gson.toJson(signalConfiglist));
|
Toast.makeText(getApplicationContext(), "不能有相同的物理所引!", Toast.LENGTH_SHORT).show();
|
}else{
|
AYSdk.getInstance().sendCmd(Constant.SEND_CONFIG_SIGNAL,gson.toJson(signalConfiglist));
|
}
|
}
|
}.execute();
|
|
}
|
|
|
|
}
|
|
@Override
|
protected void onResume() {
|
super.onResume();
|
mPermissionsManager.checkPermissions(PERMISSIONS_REQUEST_CODE, PERMISSIONS);
|
}
|
|
@Override
|
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
|
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
mPermissionsManager.recheckPermissions(PERMISSIONS_REQUEST_CODE, permissions, grantResults);
|
}
|
private boolean listContainsSameValue(List<Integer> indexs) {
|
for (int i = 0; i < indexs.size(); i++) {
|
//可以默认是0 0不判断是否有相同的index
|
if (indexs.get(i) == 0){
|
continue;
|
}
|
for (int j=i+1;j<indexs.size();j++){
|
|
if (indexs.get(i) == indexs.get(j)){
|
return true;
|
}
|
}
|
}
|
return false;
|
}
|
|
@Override
|
public void onConnecting() {
|
|
MyLog.i(TAG,"TCP onConnecting");
|
}
|
|
@Override
|
public void onConnected() {
|
ExamPlatformData.getInstance().setExamplatformStatus(ExamPlatformData.TCP_CONNECTED);
|
MyLog.i("TCP连接成功");
|
//TODO 判断SPUtils 是否保存有des密码;如果没有则进行注册JKMessage0100,如果有密码则进行鉴权JKMessage0101
|
String hexPwd = (String) SPUtils.get(this,SPUtils.DES_HEX_PWD,"");
|
hexPwd="";
|
MessageProcessor.getInstance().addBeatHeart(20);
|
if (TextUtils.isEmpty(hexPwd)){
|
|
MyLog.i(PlatFormConstant.TAG,"密码不存在,进行注册,发送注册消息");
|
|
JKMessage0100 jkRegisterMessage = new JKMessage0100();
|
if (mRTKConfig!=null){
|
jkRegisterMessage.proviceid = mRTKConfig.getProvince();
|
jkRegisterMessage.cityid = mRTKConfig.getCity();
|
jkRegisterMessage.imei = mRTKConfig.getImei();
|
jkRegisterMessage.model = mRTKConfig.getModel();
|
jkRegisterMessage.sn = mRTKConfig.getSn();
|
}
|
|
|
byte[] str = jkRegisterMessage.toBytes();
|
MessageProcessor.getInstance().sendMessage(jkRegisterMessage);
|
Log.i(TAG, "onClick: "+ BytesUtils.bytesToHexString(str)+" ============");
|
}else{
|
MyLog.i(PlatFormConstant.TAG,"密码存在,已注册过,直接发鉴权消息");
|
JKMessage0101 jkMessage0101 = new JKMessage0101();
|
String des = hexPwd;
|
long time = System.currentTimeMillis()/1000;
|
int unsignedInt = Utils.parseUnsignedInt(String.valueOf(time),10);
|
MyLog.i(String.format("总秒数(long)=%d,装换成unsigned int= %d",time,unsignedInt));
|
jkMessage0101.timestamp = unsignedInt;
|
|
|
byte[] miwen = Utils.encrypt(com.anyun.im_lib.util.ByteUtil.intGetBytes(unsignedInt),des);
|
MyLog.i(PlatFormConstant.TAG,"鉴权密文="+BytesUtils.bytesToHexString(miwen)+" time="+unsignedInt);
|
jkMessage0101.des = BytesUtils.bytesToHexString(miwen);
|
|
MessageProcessor.getInstance().sendMessage(jkMessage0101);
|
}
|
}
|
|
@Override
|
public void onConnectFailed() {
|
ExamPlatformData.getInstance().setExamplatformStatus(ExamPlatformData.TCP_DISCONNECT);
|
MyLog.i(TAG,"TCP连接失败");
|
}
|
/**
|
* 隐藏虚拟按键,并且全屏
|
*/
|
protected void hideBottomUIMenu() {
|
//隐藏虚拟按键,并且全屏
|
if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) { // lower api
|
View v = this.getWindow().getDecorView();
|
v.setSystemUiVisibility(View.GONE);
|
} else if (Build.VERSION.SDK_INT >= 19) {
|
//for new api versions.
|
View decorView = getWindow().getDecorView();
|
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
|
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_FULLSCREEN;
|
decorView.setSystemUiVisibility(uiOptions);
|
}
|
}
|
|
}
|