Commit d2ea35d7 authored by chenyuling's avatar chenyuling

"更换UI-1"

parent 1212e6be
Pipeline #1621 canceled with stages
package com.srthinker.statinfo.uis;
import static com.srthinker.statinfo.constant.Const.DEVICE_SN;
import static com.srthinker.statinfo.constant.Const.DEVICE_TYPE;
import static com.srthinker.statinfo.constant.GroupConst.BUILD;
import static com.srthinker.statinfo.constant.GroupConst.BUILD_ID;
import static com.srthinker.statinfo.constant.GroupConst.OUTRIGGER;
import static com.srthinker.statinfo.constant.GroupConst.OUTRIGGER_ID;
import static com.srthinker.statinfo.constant.GroupConst.SUPERVISOR;
import static com.srthinker.statinfo.constant.GroupConst.SUPERVISOR_ID;
import static com.srthinker.statinfo.constant.GroupConst.WATERPROOF;
import static com.srthinker.statinfo.constant.GroupConst.WATERPROOF_ID;
import static com.srthinker.statinfo.constant.InOutType.ENTER_TYPE;
import static com.srthinker.statinfo.constant.InOutType.LEAVE_TYPE;
import static com.srthinker.statinfo.download.upper.DownStatus.DOWN_ERROR;
import static com.srthinker.statinfo.download.upper.DownStatus.DOWN_FINISH;
import static com.srthinker.statinfo.download.upper.DownStatus.DOWN_START;
import android.Manifest;
import android.content.Intent;
import android.os.Bundle;
import android.os.Environment;
import android.text.TextUtils;
import android.util.Log;
import android.widget.Toast;
import androidx.annotation.NonNull;
import com.srthinker.statinfo.database.entity.ConfigEntity;
import com.srthinker.statinfo.database.entity.PersonEntity;
import com.srthinker.statinfo.database.helper.ConfigHelper;
import com.srthinker.statinfo.database.helper.PersonHelper;
import com.srthinker.statinfo.databinding.ActivityNewMainBinding;
import com.srthinker.statinfo.download.upper.DownloadViewModel;
import com.srthinker.statinfo.download.upper.UpperDownloadCallback;
import com.srthinker.statinfo.listener.upper.UpperDevicesCallback;
import com.srthinker.statinfo.presenter.ApiQuest;
import com.srthinker.statinfo.presenter.StatSize;
import com.srthinker.statinfo.uis.news.SettingActivity;
import com.srthinker.statinfo.update.MDownloadCallBack;
import com.srthinker.statinfo.update.NetworkViewModel;
import com.srthinker.statinfo.update.UpdateInfo;
import com.srthinker.statinfo.util.common.FileUtil;
import com.srthinker.statinfo.util.common.GsonUtil;
import com.srthinker.statinfo.util.common.PermissionUtil;
import com.srthinker.statinfo.util.common.SharedUtil;
import com.srthinker.statinfo.util.common.ThreadPool;
import com.srthinker.statinfo.util.common.Utils;
import com.srthinker.statinfo.util.other.NetworkIPMonitor;
import com.srthinker.statinfo.wedget.LoadDialog;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MainActivity extends BaseActivity implements NetworkIPMonitor.OnIPChangeCallback, UpperDevicesCallback, MDownloadCallBack, UpperDownloadCallback {
private static final String TAG = "NewMainActivity";
private com.srthinker.statinfo.databinding.ActivityNewMainBinding mBinding;
private NetworkIPMonitor networkIPMonitor;
private float groupSize = 100;
private boolean isPermission;
private List<PersonEntity> enterBeans;
private List<PersonEntity> leaveBeans;
private String installPath = "";
private LoadDialog mLoadDialog;
//private String savePath = "/sdcard/update/StatInfo.apk";
//getFilesDir() + "/update", "StatInfo.apk"
private String savePath = Environment.getExternalStorageDirectory().getPath() + "/update";
private int lastEnterSize = 0;
private int lastLeaveSize = 0;
private int lastPresentSize = 0;
private List<PersonEntity> mQueryPersonList;
private HashMap<Integer, Integer> groupEnterHashMap=null;
private HashMap<Integer, Integer> groupLeaveHashMap=null;
private HashMap<Integer,Integer> groupPresentHashMap=null;
public static boolean NEED_NO_REPET = true; //是否需要去重,false:不需要,true:需要
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_new_main);
mBinding = ActivityNewMainBinding.inflate(getLayoutInflater());
setContentView(mBinding.getRoot());
checkAllPermission();
initData();
initView();
}
@Override
protected void initData() {
networkIPMonitor = new NetworkIPMonitor(this);
networkIPMonitor.startMonitoring();
networkIPMonitor.setOnIPChangeCallback(this);
enterBeans = new ArrayList<>();
leaveBeans = new ArrayList<>();
}
@Override
protected void initView() {
initGroup();
mBinding.tvSetting.setOnClickListener(v->{
Intent intent = new Intent(this, SettingActivity.class);
startActivity(intent);
});
}
private void initGroup() {
int waterproof = SharedUtil.getInstance(this).readShared(WATERPROOF, 0);
int outrigger = SharedUtil.getInstance(this).readShared(OUTRIGGER, 0);
int build = SharedUtil.getInstance(this).readShared(BUILD, 0);
int supervisor = SharedUtil.getInstance(this).readShared(SUPERVISOR, 0);
/*mBinding.ngvBuild.initItem("工地班组",build,groupSize);
mBinding.ngvWaterproof.initItem("防水班组",waterproof,groupSize);
mBinding.ngvOutrigger.initItem("外架班组",outrigger,groupSize);
mBinding.ngvSupervisor.initItem("监理单位",supervisor,groupSize);*/
mBinding.ngvBuild.initItem("工地班组",build);
mBinding.ngvWaterproof.initItem("防水班组",waterproof);
mBinding.ngvOutrigger.initItem("外架班组",outrigger);
mBinding.ngvSupervisor.initItem("监理单位",supervisor);
}
private void checkAllPermission() {
isPermission = PermissionUtil.checkMultiPermission(this, new String[]{
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.INTERNET
}, 4096);
if (!isPermission){
Toast.makeText(this, "需要允许权限才能正常使用哦", Toast.LENGTH_SHORT).show();
}
}
private void updateGroup() {
int waterproof = SharedUtil.getInstance(this).readShared(WATERPROOF, 0);
int outrigger = SharedUtil.getInstance(this).readShared(OUTRIGGER, 0);
int build = SharedUtil.getInstance(this).readShared(BUILD, 0);
int supervisor = SharedUtil.getInstance(this).readShared(SUPERVISOR, 0);
mBinding.ngvBuild.setNumber(build);
mBinding.ngvWaterproof.setNumber(waterproof);
mBinding.ngvOutrigger.setNumber(outrigger);
mBinding.ngvSupervisor.setNumber(supervisor);
}
@Override
protected void onResume() {
super.onResume();
Log.i(TAG, "onResume: Main-Resume");
//如果设置页面有更新,主页面也需要进行访问接口,绑定监听
updateApi();
//获取最新的人员信息列表
mQueryPersonList = PersonHelper.getInstance().queryAll();
//更新分组情况
groupEnterHashMap = getGroupSizeHashMap(enterBeans);
groupLeaveHashMap = getGroupSizeHashMap(leaveBeans);
updatePresentSize(groupEnterHashMap,groupLeaveHashMap);
detectUpgrade(); //检测版本升级
}
private void updateApi() {
boolean isModified = SharedUtil.getInstance(this).readShared("isModified", false);
if (isModified){
questApi();
SharedUtil.getInstance(this).writeShared("isModified",false);
}
}
private void detectUpgrade() {
NetworkViewModel networkViewModel = new NetworkViewModel();
networkViewModel.init(this,this);
networkViewModel.setDownloadCallback(this);
networkViewModel.getLastestVersion(DEVICE_SN,DEVICE_TYPE);
}
@Override
protected void onDestroy() {
Log.i(TAG, "onDestroy: Main--destroy");
networkIPMonitor.stopMonitoring();
ApiQuest.getInstance().stopApi();
super.onDestroy();
}
@Override
public void OnIPChange(String ipAddress, String networkType) {
Log.i(TAG, "OnIPChange: change==>");
//questApi();
questApi();
}
private void questApi() {
List<ConfigEntity> enterConfigList = ConfigHelper.getInstance().queryByType(ENTER_TYPE);
ApiQuest.getInstance().startApi(enterConfigList,ENTER_TYPE);
ApiQuest.getInstance().setOnUpperDevicesCallback(this);
List<ConfigEntity> leaveConfigList = ConfigHelper.getInstance().queryByType(LEAVE_TYPE);
ApiQuest.getInstance().startApi(leaveConfigList,LEAVE_TYPE);
ApiQuest.getInstance().setOnUpperDevicesCallback(this);
}
@Override
public void OnIPLost(String error) {
ApiQuest.getInstance().stopApi();
}
@Override
public void getAllPassInfo(List<PersonEntity> passAllEntities, int type) {
runOnUiThread(()->{
updatePassInfo(passAllEntities, type);
});
}
@Override
public void onAllConnectStatus(boolean hasConnect, int type) {
if (type==ENTER_TYPE){
SharedUtil.getInstance(this).writeShared("enter_connect",hasConnect);
}else if (type==LEAVE_TYPE){
SharedUtil.getInstance(this).writeShared("leave_connect",hasConnect);
}
}
private void updatePassInfo(List<PersonEntity> passEntities, int type) {
Log.i(TAG, "updatePassInfo: 获取的总数="+passEntities.size());
/*for (PersonEntity passEntity : passEntities) {
Log.i(TAG, "updatePassInfo: 获取到的name="+passEntity.getPerson_name());
}*/
if (type ==ENTER_TYPE){
if (passEntities != null) {
int size = passEntities.size();
if (size!=lastEnterSize){
/*//更新进出情况
//enterBeans = passEntities; 全局变量直接赋值会出现问题
enterBeans.clear();
enterBeans.addAll(passEntities);
enterAdapter.setDataList(passEntities);
//更新人员情况(是否要根据id去重)
if (NEED_NO_REPET) {
List<PersonEntity> enterListNo = StatSize.filterList(passEntities);
lastEnterSize = enterListNo.size();
}else{
lastEnterSize = size;
}
lastPresentSize = lastEnterSize-lastLeaveSize;
mBinding.nvEnter.setNumber(lastEnterSize);
mBinding.nvLeave.setNumber(lastLeaveSize);
mBinding.nvPresent.setNumber(lastPresentSize);*/
enterBeans.clear();
enterBeans.addAll(passEntities);
lastEnterSize = size;
//更新分组情况(是否要根据id去重)
groupEnterHashMap = getGroupSizeHashMap(passEntities);
updatePresentSize(groupEnterHashMap,groupLeaveHashMap);
}
}
}else if (type == LEAVE_TYPE){
//leaveBeans = passEntities;
if (passEntities != null) {
int size = passEntities.size();
//进出有变化时才更新
if (size!=lastLeaveSize){
/*leaveBeans.clear();
leaveBeans.addAll(passEntities);
//更新进出情况
leaveAdapter.setDataList(passEntities);
//更新人员情况(是否要根据id去重)
if (NEED_NO_REPET) {
List<PersonEntity> leaveListNo = StatSize.filterList(passEntities);
lastLeaveSize = leaveListNo.size();
}else{
lastLeaveSize = size;
}
lastPresentSize = lastEnterSize-lastLeaveSize;
mBinding.nvEnter.setNumber(lastEnterSize);
mBinding.nvLeave.setNumber(lastLeaveSize);
mBinding.nvPresent.setNumber(lastPresentSize);*/
leaveBeans.clear();
leaveBeans.addAll(passEntities);
lastLeaveSize = size;
//更新分组情况(是否要根据id去重)
groupLeaveHashMap = getGroupSizeHashMap(passEntities);
updatePresentSize(groupEnterHashMap,groupLeaveHashMap);
}
}
}
}
@NonNull
private HashMap<Integer, Integer> getGroupSizeHashMap(List<PersonEntity> personEntityList) {
HashMap<Integer, Integer> groupSizeHashMap = new HashMap<>();
if (NEED_NO_REPET) {
personEntityList = StatSize.filterList(personEntityList);
}
if (mQueryPersonList != null) {
for (PersonEntity entity : mQueryPersonList) {
int group = entity.getGroup();
if (!groupSizeHashMap.containsKey(group)){
groupSizeHashMap.put(group,0);
}
}
for (PersonEntity personEntity : personEntityList) {
String personId = personEntity.getId();
for (PersonEntity queryPerson : mQueryPersonList) {
String queryId = queryPerson.getId();
int group = queryPerson.getGroup();
if (TextUtils.equals(personId,queryId)&& groupSizeHashMap.containsKey(group)){
int totalSize = groupSizeHashMap.get(group);
groupSizeHashMap.put(group,totalSize+1);
}
}
}
}
return groupSizeHashMap;
}
private void updatePresentSize(HashMap<Integer,Integer> groupEnterHashMap,HashMap<Integer,Integer> groupLeaveHashMap){
groupPresentHashMap = new HashMap<>();
if (mQueryPersonList != null) {
for (PersonEntity entity : mQueryPersonList) {
int group = entity.getGroup();
if (!groupPresentHashMap.containsKey(group)) {
groupPresentHashMap.put(group, 0);
}
}
}
//更新分组情况
if (groupEnterHashMap != null) {
for (Map.Entry<Integer, Integer> enterEntry : groupEnterHashMap.entrySet()) {
int group = enterEntry.getKey();
int enterSize = enterEntry.getValue();
groupPresentHashMap.put(group,enterSize);
}
}
if (groupLeaveHashMap != null) {
for (Map.Entry<Integer, Integer> leaveEntry : groupLeaveHashMap.entrySet()) {
int group = leaveEntry.getKey();
int leaveSize = leaveEntry.getValue();
groupPresentHashMap.put(group,groupPresentHashMap.get(group)-leaveSize);
}
}
//如果只有一个人,从一个组换到另一个组,之前的数据没有清空,需要先进行清空,置空为0
SharedUtil.getInstance(this).writeShared(WATERPROOF,0);
SharedUtil.getInstance(this).writeShared(OUTRIGGER,0);
SharedUtil.getInstance(this).writeShared(BUILD,0);
SharedUtil.getInstance(this).writeShared(SUPERVISOR,0);
for (Map.Entry<Integer, Integer> presentEntry : groupPresentHashMap.entrySet()) {
int group = presentEntry.getKey();
int presentSize = presentEntry.getValue();
Log.i(TAG, "updatePresentSize: group="+group+",presentSize="+presentSize);
switch (group){
case WATERPROOF_ID:
SharedUtil.getInstance(this).writeShared(WATERPROOF,presentSize);
break;
case OUTRIGGER_ID:
SharedUtil.getInstance(this).writeShared(OUTRIGGER,presentSize);
break;
case BUILD_ID:
SharedUtil.getInstance(this).writeShared(BUILD,presentSize);
break;
case SUPERVISOR_ID:
SharedUtil.getInstance(this).writeShared(SUPERVISOR,presentSize);
break;
}
}
//要更新演示页面的分组请求
updateGroup();
}
@Override
public void checkResult(boolean needUpdate, boolean canInstall, UpdateInfo onlineInfo) {
if (needUpdate){
if (onlineInfo!=null){
Log.i(TAG, "checkResult: onlineInfo="+ GsonUtil.toJsonString(onlineInfo));
//Environment.getExternalStorageDirectory().getPath()=/storage/emulated/0
//getFilesDir()=installPath=/data/user/0/com.srthinker.statinfo/files
//String installPath = getFilesDir() + "/" + "StatInfo.apk";
//boolean isCreate = FileUtil.createFile(getFilesDir() + "/update", "StatInfo.apk");
FileUtil.deleteFile(savePath+ File.separator+"StatInfo.apk");
boolean isCreate = FileUtil.createFile( savePath+File.separator, "StatInfo.apk");
if (isCreate){
//installPath = getFilesDir()+"/update/StatInfo.apk";
installPath = savePath+File.separator+"StatInfo.apk";
DownloadViewModel downloadViewModel = new DownloadViewModel(this);
downloadViewModel.initData();
downloadViewModel.startDownload(onlineInfo.getDownloadUrl(),installPath);
downloadViewModel.setOnUpperDownloadCallback(this);
}
}
}
}
@Override
public void onProgress(String progress, String filePath) {
runOnUiThread(()->{
//Log.i(TAG, "onProgress: progress="+progress);
String desc = "下载更新中..."+progress;
if (mLoadDialog != null) {
mLoadDialog.setContent(desc);
mLoadDialog.showDialog();
}
});
}
@Override
public void onResult(int downStatus, String filePath) {
runOnUiThread(()->{
if (downStatus == DOWN_START){
String desc = "准备下载更新";
if (mLoadDialog != null) {
mLoadDialog.setContent(desc);
mLoadDialog.showDialog();
}
} else if (downStatus== DOWN_FINISH){
//安装更新
//Log.i(TAG, "onResult:进来多少次");
//showTips("更新版本,将进行安装");
String desc = "进行安装,请稍等";
if (mLoadDialog != null) {
mLoadDialog.setContent(desc);
mLoadDialog.showDialog();
}
//Utils.installApp(getApplicationContext(),new File(installPath));
//有静默安装的话需要开新线程,不然前面的弹框不进行显示
ThreadPool.getInstance().getThreadPoolExecutor().execute(() -> {
boolean restricted = Utils.isRootPermissionRestricted();
if (!restricted){
Utils.clientInstall(installPath, MainActivity.this,".uis.MainActivity");
}else{
Utils.installApp(getApplicationContext(),new File(installPath));
}
runOnUiThread(()->{
if (mLoadDialog != null) {
mLoadDialog.dismissDialog();
mLoadDialog=null;
}
});
});
}else if (downStatus==DOWN_ERROR){
showTips("下载更新失败");
FileUtil.deleteFile(installPath);
}
});
}
}
\ No newline at end of file
package com.srthinker.statinfo.uis.news;
import static com.srthinker.statinfo.constant.Const.DEVICE_SN;
import static com.srthinker.statinfo.constant.Const.DEVICE_TYPE;
import static com.srthinker.statinfo.constant.GroupConst.BUILD;
import static com.srthinker.statinfo.constant.GroupConst.BUILD_ID;
import static com.srthinker.statinfo.constant.GroupConst.OUTRIGGER;
import static com.srthinker.statinfo.constant.GroupConst.OUTRIGGER_ID;
import static com.srthinker.statinfo.constant.GroupConst.SUPERVISOR;
import static com.srthinker.statinfo.constant.GroupConst.SUPERVISOR_ID;
import static com.srthinker.statinfo.constant.GroupConst.WATERPROOF;
import static com.srthinker.statinfo.constant.GroupConst.WATERPROOF_ID;
import static com.srthinker.statinfo.constant.InOutType.ENTER_TYPE;
import static com.srthinker.statinfo.constant.InOutType.LEAVE_TYPE;
import android.content.Intent;
import android.os.Bundle;
import android.os.Environment;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import androidx.annotation.NonNull;
import com.srthinker.statinfo.database.PersonMgr;
import com.srthinker.statinfo.database.entity.ConfigEntity;
import com.srthinker.statinfo.database.entity.PersonEntity;
import com.srthinker.statinfo.databinding.ActivitySettingBinding;
import com.srthinker.statinfo.listener.ConfigCallback;
import com.srthinker.statinfo.listener.QueryPersonCallback;
import com.srthinker.statinfo.listener.upper.UpperDevicesCallback;
import com.srthinker.statinfo.presenter.ApiQuest;
import com.srthinker.statinfo.presenter.StatSize;
import com.srthinker.statinfo.uis.BaseActivity;
import com.srthinker.statinfo.uis.GroupActivity;
import com.srthinker.statinfo.uis.fragment.ConfigDlgFragment;
import com.srthinker.statinfo.util.common.ClickUtil;
import com.srthinker.statinfo.util.common.SharedUtil;
import com.srthinker.statinfo.util.common.Utils;
import com.srthinker.statinfo.util.other.NetworkIPMonitor;
import com.srthinker.statinfo.wedget.LoadDialog;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class SettingActivity extends BaseActivity implements ConfigCallback, QueryPersonCallback, UpperDevicesCallback {
private static final String TAG = "SettingActivity";
private com.srthinker.statinfo.databinding.ActivitySettingBinding mBinding;
private List<PersonEntity> enterBeans;
private List<PersonEntity> leaveBeans;
private NetworkIPMonitor networkIPMonitor;
private String installPath = "";
private LoadDialog mLoadDialog;
//private String savePath = "/sdcard/update/StatInfo.apk";
//getFilesDir() + "/update", "StatInfo.apk"
private String savePath = Environment.getExternalStorageDirectory().getPath() + "/update";
private int lastEnterSize = 0;
private int lastLeaveSize = 0;
private int lastPresentSize = 0;
private List<PersonEntity> mQueryPersonList;
private HashMap<Integer, Integer> groupEnterHashMap=null;
private HashMap<Integer, Integer> groupLeaveHashMap=null;
private HashMap<Integer,Integer> groupPresentHashMap=null;
public static boolean NEED_NO_REPET = true; //是否需要去重,false:不需要,true:需要
private boolean leave_connect;
private boolean enter_connect;
private boolean isModified = false; // 设置标志位表示有进行了修改
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_setting);
mBinding = ActivitySettingBinding.inflate(getLayoutInflater());
setContentView(mBinding.getRoot());
initData();
initView();
}
@Override
protected void initData() {
Log.i(TAG, "initData: Setting-init");
SharedUtil.getInstance(this).writeShared("isModified",isModified);
/*networkIPMonitor = new NetworkIPMonitor(this);
enterBeans = new ArrayList<>();
leaveBeans = new ArrayList<>();
networkIPMonitor.startMonitoring();
networkIPMonitor.setOnIPChangeCallback(this);*/
}
@Override
protected void initView() {
//mLoadDialog = LoadDialog.getInstance(this);
mLoadDialog = new LoadDialog(this);
//Log.i(TAG, "initView: deviceSn="+deviceSn+"V"+ Utils.getVersionName(this));
mBinding.tvDeviceDesc.setText(DEVICE_TYPE+" "+DEVICE_SN+" V"+ Utils.getVersionName(this));
//getResp();
mBinding.tvEnterText.setOnClickListener(v->{
showConfigDialog(ENTER_TYPE);
});
mBinding.tvLeaveText.setOnClickListener(v->{
showConfigDialog(LEAVE_TYPE);
});
mBinding.btnGroupDetail.setOnClickListener(v->{
boolean isQueryPersons = ApiQuest.getInstance().queryPersons(this);
//Log.i(TAG, "initView: isQueryPersons="+isQueryPersons);
if (!isQueryPersons) {
showTips("请先配置设备信息");
}else{
ClickUtil.disableClick(mBinding.btnGroupDetail);
}
});
mBinding.ivBack.setOnClickListener(v->{
onBackPressed();
});
}
private void showConfigDialog(int type) {
ConfigDlgFragment configDlgFragment = ConfigDlgFragment.getInstance(type);
configDlgFragment.setUsername("admin");
configDlgFragment.setConfigCallback(this);
if (configDlgFragment.isResumed()){
return;
}
configDlgFragment.showNow(getSupportFragmentManager(),configDlgFragment.getClass().getSimpleName());
configDlgFragment.setCancelable(false);
}
@Override
protected void onResume() {
super.onResume();
updateDeviceConnect();
/*//获取最新的人员信息列表
mQueryPersonList = PersonHelper.getInstance().queryAll();
//更新分组情况
groupEnterHashMap = getGroupSizeHashMap(enterBeans);
groupLeaveHashMap = getGroupSizeHashMap(leaveBeans);
updatePresentSize(groupEnterHashMap,groupLeaveHashMap);*/
// detectUpgrade(); //检测版本升级
}
private void updateDeviceConnect() {
enter_connect = SharedUtil.getInstance(this).readShared("enter_connect", false);
leave_connect = SharedUtil.getInstance(this).readShared("leave_connect", false);
if (enter_connect){
mBinding.tvEnterError.setVisibility(View.GONE);
}else{
mBinding.tvEnterError.setVisibility(View.VISIBLE);
}
if (leave_connect){
mBinding.tvLeaveError.setVisibility(View.GONE);
}else{
mBinding.tvLeaveError.setVisibility(View.VISIBLE);
}
}
@Override
protected void onDestroy() {
super.onDestroy();
}
/* @Override
public void checkResult(boolean needUpdate, boolean canInstall, UpdateInfo onlineInfo) {
if (needUpdate){
if (onlineInfo!=null){
Log.i(TAG, "checkResult: onlineInfo="+ GsonUtil.toJsonString(onlineInfo));
//Environment.getExternalStorageDirectory().getPath()=/storage/emulated/0
//getFilesDir()=installPath=/data/user/0/com.srthinker.statinfo/files
//String installPath = getFilesDir() + "/" + "StatInfo.apk";
//boolean isCreate = FileUtil.createFile(getFilesDir() + "/update", "StatInfo.apk");
FileUtil.deleteFile(savePath+ File.separator+"StatInfo.apk");
boolean isCreate = FileUtil.createFile( savePath+File.separator, "StatInfo.apk");
if (isCreate){
//installPath = getFilesDir()+"/update/StatInfo.apk";
installPath = savePath+File.separator+"StatInfo.apk";
DownloadViewModel downloadViewModel = new DownloadViewModel(this);
downloadViewModel.initData();
downloadViewModel.startDownload(onlineInfo.getDownloadUrl(),installPath);
downloadViewModel.setOnUpperDownloadCallback(this);
}
}
}
}
@Override
public void onProgress(String progress, String filePath) {
runOnUiThread(()->{
//Log.i(TAG, "onProgress: progress="+progress);
String desc = "下载更新中..."+progress;
if (mLoadDialog != null) {
mLoadDialog.setContent(desc);
mLoadDialog.showDialog();
}
});
}
@Override
public void onResult(int downStatus, String filePath) {
runOnUiThread(()->{
if (downStatus == DOWN_START){
String desc = "准备下载更新";
if (mLoadDialog != null) {
mLoadDialog.setContent(desc);
mLoadDialog.showDialog();
}
} else if (downStatus== DOWN_FINISH){
//安装更新
//Log.i(TAG, "onResult:进来多少次");
//showTips("更新版本,将进行安装");
String desc = "进行安装,请稍等";
if (mLoadDialog != null) {
mLoadDialog.setContent(desc);
mLoadDialog.showDialog();
}
//Utils.installApp(getApplicationContext(),new File(installPath));
//有静默安装的话需要开新线程,不然前面的弹框不进行显示
ThreadPool.getInstance().getThreadPoolExecutor().execute(() -> {
boolean restricted = Utils.isRootPermissionRestricted();
if (!restricted){
Utils.clientInstall(installPath, SettingActivity.this,".uis.MainActivity");
}else{
Utils.installApp(getApplicationContext(),new File(installPath));
}
runOnUiThread(()->{
if (mLoadDialog != null) {
mLoadDialog.dismissDialog();
mLoadDialog=null;
}
});
});
}else if (downStatus==DOWN_ERROR){
showTips("下载更新失败");
FileUtil.deleteFile(installPath);
}
});
}*/
private void updatePassInfo(List<PersonEntity> passEntities, int type) {
Log.i(TAG, "updatePassInfo: 获取的总数="+passEntities.size());
/*for (PersonEntity passEntity : passEntities) {
Log.i(TAG, "updatePassInfo: 获取到的name="+passEntity.getPerson_name());
}*/
if (type ==ENTER_TYPE){
if (passEntities != null) {
int size = passEntities.size();
if (size!=lastEnterSize){
/*//更新进出情况
//enterBeans = passEntities; 全局变量直接赋值会出现问题
enterBeans.clear();
enterBeans.addAll(passEntities);
enterAdapter.setDataList(passEntities);
//更新人员情况(是否要根据id去重)
if (NEED_NO_REPET) {
List<PersonEntity> enterListNo = StatSize.filterList(passEntities);
lastEnterSize = enterListNo.size();
}else{
lastEnterSize = size;
}
lastPresentSize = lastEnterSize-lastLeaveSize;
mBinding.nvEnter.setNumber(lastEnterSize);
mBinding.nvLeave.setNumber(lastLeaveSize);
mBinding.nvPresent.setNumber(lastPresentSize);*/
enterBeans.clear();
enterBeans.addAll(passEntities);
lastEnterSize = size;
//更新分组情况(是否要根据id去重)
groupEnterHashMap = getGroupSizeHashMap(passEntities);
updatePresentSize(groupEnterHashMap,groupLeaveHashMap);
}
}
}else if (type == LEAVE_TYPE){
//leaveBeans = passEntities;
if (passEntities != null) {
int size = passEntities.size();
//进出有变化时才更新
if (size!=lastLeaveSize){
/*leaveBeans.clear();
leaveBeans.addAll(passEntities);
//更新进出情况
leaveAdapter.setDataList(passEntities);
//更新人员情况(是否要根据id去重)
if (NEED_NO_REPET) {
List<PersonEntity> leaveListNo = StatSize.filterList(passEntities);
lastLeaveSize = leaveListNo.size();
}else{
lastLeaveSize = size;
}
lastPresentSize = lastEnterSize-lastLeaveSize;
mBinding.nvEnter.setNumber(lastEnterSize);
mBinding.nvLeave.setNumber(lastLeaveSize);
mBinding.nvPresent.setNumber(lastPresentSize);*/
leaveBeans.clear();
leaveBeans.addAll(passEntities);
lastLeaveSize = size;
//更新分组情况(是否要根据id去重)
groupLeaveHashMap = getGroupSizeHashMap(passEntities);
updatePresentSize(groupEnterHashMap,groupLeaveHashMap);
}
}
}
}
@NonNull
private HashMap<Integer, Integer> getGroupSizeHashMap(List<PersonEntity> personEntityList) {
HashMap<Integer, Integer> groupSizeHashMap = new HashMap<>();
if (NEED_NO_REPET) {
personEntityList = StatSize.filterList(personEntityList);
}
if (mQueryPersonList != null) {
for (PersonEntity entity : mQueryPersonList) {
int group = entity.getGroup();
if (!groupSizeHashMap.containsKey(group)){
groupSizeHashMap.put(group,0);
}
}
for (PersonEntity personEntity : personEntityList) {
String personId = personEntity.getId();
for (PersonEntity queryPerson : mQueryPersonList) {
String queryId = queryPerson.getId();
int group = queryPerson.getGroup();
if (TextUtils.equals(personId,queryId)&& groupSizeHashMap.containsKey(group)){
int totalSize = groupSizeHashMap.get(group);
groupSizeHashMap.put(group,totalSize+1);
}
}
}
}
return groupSizeHashMap;
}
private void updatePresentSize(HashMap<Integer,Integer> groupEnterHashMap,HashMap<Integer,Integer> groupLeaveHashMap){
groupPresentHashMap = new HashMap<>();
if (mQueryPersonList != null) {
for (PersonEntity entity : mQueryPersonList) {
int group = entity.getGroup();
if (!groupPresentHashMap.containsKey(group)) {
groupPresentHashMap.put(group, 0);
}
}
}
//更新分组情况
if (groupEnterHashMap != null) {
for (Map.Entry<Integer, Integer> enterEntry : groupEnterHashMap.entrySet()) {
int group = enterEntry.getKey();
int enterSize = enterEntry.getValue();
groupPresentHashMap.put(group,enterSize);
}
}
if (groupLeaveHashMap != null) {
for (Map.Entry<Integer, Integer> leaveEntry : groupLeaveHashMap.entrySet()) {
int group = leaveEntry.getKey();
int leaveSize = leaveEntry.getValue();
groupPresentHashMap.put(group,groupPresentHashMap.get(group)-leaveSize);
}
}
//如果只有一个人,从一个组换到另一个组,之前的数据没有清空,需要先进行清空,置空为0
SharedUtil.getInstance(this).writeShared(WATERPROOF,0);
SharedUtil.getInstance(this).writeShared(OUTRIGGER,0);
SharedUtil.getInstance(this).writeShared(BUILD,0);
SharedUtil.getInstance(this).writeShared(SUPERVISOR,0);
for (Map.Entry<Integer, Integer> presentEntry : groupPresentHashMap.entrySet()) {
int group = presentEntry.getKey();
int presentSize = presentEntry.getValue();
Log.i(TAG, "updatePresentSize: group="+group+",presentSize="+presentSize);
switch (group){
case WATERPROOF_ID:
SharedUtil.getInstance(this).writeShared(WATERPROOF,presentSize);
break;
case OUTRIGGER_ID:
SharedUtil.getInstance(this).writeShared(OUTRIGGER,presentSize);
break;
case BUILD_ID:
SharedUtil.getInstance(this).writeShared(BUILD,presentSize);
break;
case SUPERVISOR_ID:
SharedUtil.getInstance(this).writeShared(SUPERVISOR,presentSize);
break;
}
}
//要更新演示页面的分组请求
/*ArrayList<GroupBean> groupBeans = updateGroup();
if (groupAdapter != null) {
groupAdapter.setDataList(groupBeans);
}*/
}
@Override
public void onQueryStatus(String desc, boolean status) {
runOnUiThread(()->{
if (!status){
showTips(desc);
}
});
}
@Override
public void getTotalPerson(List<PersonEntity> personEntities,int type) {
Log.i(TAG, "getTotalPerson: 已获取总数:personEntities.size="+personEntities.size());
PersonMgr.getInstance().updatePersonThread(personEntities, () -> {
runOnUiThread(()->{
ClickUtil.enableClick(mBinding.btnGroupDetail);
});
Intent intent = new Intent(SettingActivity.this, GroupActivity.class);
startActivity(intent);
});
}
@Override
public void onUpdateConfig(List<ConfigEntity> configList, int type) {
//配置改变,更新接口
ApiQuest.getInstance().startApi(configList,type);
ApiQuest.getInstance().setOnUpperDevicesCallback(this);
//表示更新了配置
isModified = true;
SharedUtil.getInstance(this).writeShared("isModified",isModified);
}
@Override
public void getAllPassInfo(List<PersonEntity> passAllEntities, int type) {
/* runOnUiThread(()->{
updatePassInfo(passAllEntities, type);
});*/
}
@Override
public void onAllConnectStatus(boolean hasConnect, int type) {
Log.i(TAG, "onAllConnectStatus: 接收到的连接状态 hasConnect="+hasConnect);
Log.i(TAG, "onAllConnectStatus: type="+type);
runOnUiThread(()->{
if (type==ENTER_TYPE){
SharedUtil.getInstance(this).writeShared("enter_connect",hasConnect);
if (!hasConnect) {
mBinding.tvEnterError.setVisibility(View.VISIBLE);
}else{
mBinding.tvEnterError.setVisibility(View.GONE);
}
}else if (type == LEAVE_TYPE){
SharedUtil.getInstance(this).writeShared("leave_connect",hasConnect);
if (!hasConnect) {
mBinding.tvLeaveError.setVisibility(View.VISIBLE);
}else{
mBinding.tvLeaveError.setVisibility(View.GONE);
}
}
});
}
}
\ No newline at end of file
package com.srthinker.statinfo.wedget;
import android.annotation.SuppressLint;
import android.content.Context;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.widget.LinearLayout;
import androidx.annotation.Nullable;
import com.srthinker.statinfo.databinding.ItemGroupNewBinding;
public class NewGroupView extends LinearLayout {
private Context context;
private com.srthinker.statinfo.databinding.ItemGroupNewBinding mBinding;
public NewGroupView(Context context) {
super(context);
}
public NewGroupView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
this.context = context;
initView(context);
}
private void initView(Context context) {
mBinding = ItemGroupNewBinding.inflate(LayoutInflater.from(context), this, true);
}
@SuppressLint("SetTextI18n")
public void initItem(String name, int number,float textSize){
mBinding.tvGroupName.setText(name+":");
mBinding.tvGroupNumber.setText(number+"");
mBinding.tvGroupName.setTextSize(TypedValue.COMPLEX_UNIT_SP,textSize);
mBinding.tvGroupNumber.setTextSize(TypedValue.COMPLEX_UNIT_SP,textSize);
}
public void initItem(String name, int number){
mBinding.tvGroupName.setText(name+":");
mBinding.tvGroupNumber.setText(number+"");
}
public void setNumber(int number){
mBinding.tvGroupNumber.setText(number+"");
}
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black"
tools:context=".uis.MainActivity">
<TextView
android:id="@+id/tv_setting"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" "
android:textColor="@color/white"
android:textSize="40sp"
android:layout_alignParentRight="true"/>
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_centerVertical="true">
<com.srthinker.statinfo.wedget.NewGroupView
android:id="@+id/ngv_build"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<com.srthinker.statinfo.wedget.NewGroupView
android:id="@+id/ngv_waterproof"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<com.srthinker.statinfo.wedget.NewGroupView
android:id="@+id/ngv_outrigger"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<com.srthinker.statinfo.wedget.NewGroupView
android:id="@+id/ngv_supervisor"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
</RelativeLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="true"
android:focusableInTouchMode="true"
android:orientation="vertical"
android:background="@color/bg_070A2E"
tools:context=".uis.news.SettingActivity">
<ImageView
android:id="@+id/iv_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_back"
android:padding="10dp"/>
<LinearLayout
android:layout_width="255.5dp"
android:layout_height="wrap_content"
android:background="@drawable/bg_shape"
android:layout_marginLeft="15dp"
android:padding="15dp"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:text="进出配置"
android:textSize="@dimen/text_10"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/line_bottom"
android:layout_marginTop="5dp"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="17dp">
<TextView
android:id="@+id/tv_enter_text"
android:layout_width="60dp"
android:layout_height="22dp"
android:gravity="center"
android:text="进入设备"
android:textColor="@color/white"
android:textSize="@dimen/text_10"
android:background="@color/color_00A89C"
android:layout_alignParentLeft="true"/>
<TextView
android:id="@+id/tv_enter_error"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="!"
android:textColor="@color/white"
android:textSize="@dimen/text_12_5"
android:layout_toRightOf="@+id/tv_enter_text"
android:layout_alignBottom="@+id/tv_enter_text"
android:visibility="visible"
android:layout_marginLeft="5dp"/>
<TextView
android:id="@+id/tv_leave_text"
android:layout_width="60dp"
android:layout_height="22dp"
android:gravity="center"
android:text="出口设备"
android:textColor="@color/white"
android:textSize="@dimen/text_10"
android:background="@color/color_2D52E3"
android:layout_alignParentRight="true"/>
<TextView
android:id="@+id/tv_leave_error"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="!"
android:textColor="@color/white"
android:textSize="@dimen/text_12_5"
android:layout_toLeftOf="@+id/tv_leave_text"
android:layout_alignBottom="@+id/tv_leave_text"
android:visibility="visible"
android:layout_marginRight="5dp"/>
</RelativeLayout>
</LinearLayout>
<LinearLayout
android:layout_width="255.5dp"
android:layout_height="wrap_content"
android:background="@drawable/bg_shape"
android:layout_marginLeft="15dp"
android:padding="15dp"
android:layout_marginTop="15dp"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:text="人员信息"
android:textSize="@dimen/text_10"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/line_bottom"
android:layout_marginTop="5dp"/>
<Button
android:id="@+id/btn_group_detail"
android:layout_width="60dp"
android:layout_height="22dp"
android:background="@color/color_2D52E3"
android:layout_alignParentRight="true"
android:layout_marginRight="8dp"
android:layout_marginTop="17dp"
android:gravity="center"
android:text="人员详情"
android:textColor="@color/white"
android:textSize="@dimen/text_10"/>
</LinearLayout>
<LinearLayout
android:layout_width="255.5dp"
android:layout_height="wrap_content"
android:background="@drawable/bg_shape"
android:layout_marginLeft="15dp"
android:padding="15dp"
android:layout_marginTop="15dp"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:text="设备信息"
android:textSize="@dimen/text_10"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/line_bottom"
android:layout_marginTop="5dp"/>
<TextView
android:id="@+id/tv_device_desc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left|center"
android:layout_marginTop="17dp"
android:textColor="@color/white"
android:textSize="@dimen/text_10"/>
</LinearLayout>
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_group_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="bold"
android:text=""
android:textColor="@color/red"
android:gravity="center|left"
android:textSize="@dimen/display_text"/>
<TextView
android:id="@+id/tv_group_number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="bold"
android:text=""
android:textColor="@color/red"
android:gravity="center|left"
android:textSize="@dimen/display_text"/>
</LinearLayout>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment