diff --git a/app/build.gradle b/app/build.gradle
index 2c8a0de..d88e941 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -169,6 +169,8 @@ dependencies {
implementation libs.androidx.emoji.bundled
//二维码扫描
implementation libs.barcode.scanning
+// //环型进度条
+// implementation 'io.github.lilongweidev:easyview:1.0.6'
// implementation('org.dom4j:dom4j:2.1.3') {
// exclude group: 'pull-parser', module: 'pull-parser'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a0a8692..8a134ed 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -82,6 +82,7 @@
tools:replace="android:allowBackup"
tools:targetApi="s">
+
@@ -448,6 +449,12 @@
+
+
diff --git a/app/src/main/java/com/rehome/zhdcoa/Contans.java b/app/src/main/java/com/rehome/zhdcoa/Contans.java
index 5dd2b24..1a1d2f8 100644
--- a/app/src/main/java/com/rehome/zhdcoa/Contans.java
+++ b/app/src/main/java/com/rehome/zhdcoa/Contans.java
@@ -55,9 +55,10 @@ public class Contans {
//public static String BASE_URL_EXTRANET = "https://172.16.25.75:7082/";
//App巡检,点检外网服务器
public static String IP_EXTRANET = "https://219.131.195.3:7081/";
+ //public static String IP_EXTRANET = "https://172.16.25.75:7081/";
// public static String BASE_URL_EXTRANET = "http://192.168.2.215:8082/";//app公司内网开发服务器
-// public static String IP_EXTRANET = "http://192.168.2.215:9005/";
+
@@ -69,11 +70,13 @@ public class Contans {
public static String BASE_URL_COMPANY_SERVER_INTRANET= "https://mobile.zhp.geg.com.cn:7011/";
//智慧安防平台登录 电厂外网
public static String BASE_URL_COMPANY_SERVER_EXTRANET= "https://219.131.195.3:7011/";
+ //public static String BASE_URL_COMPANY_SERVER_EXTRANET= "https://172.16.25.75:7011/";
//AI三维可视化安防平台登录 电厂内网
//public static String BASE_URL_AI_3D_SERVER_INTRANET= "http://10.19.0.114:8100/";
public static String BASE_URL_AI_3D_SERVER_INTRANET= "https://mobile.zhp.geg.com.cn:7100/";
//AI三维可视化安防平台登录 电厂外网
public static String BASE_URL_AI_3D_SERVER_EXTRANET= "https://219.131.195.3:7100/";
+ //public static String BASE_URL_AI_3D_SERVER_EXTRANET= "https://172.16.25.75:7100/";
//腾讯浏览服务key
public static String TBS_LICENSE_KEY= "4ktUk0LXU2iC2Dx/oesZcwiKAOZ4YXvjSQ4OFCcx+5e1csWD0cYNfCdXe2LpY+mB";
//考试列表页面刷新数据
@@ -536,6 +539,8 @@ public class Contans {
//设备预警信息列表
//http://10.19.0.17:1700/dserver/device/vibration/monitoring/list?deviceCode=002c005e&startTime=2026-01-21+14:37:00&endTime=2026-01-22+23:59:59&v=1769063841074
public final static String DeviceAlermInfoDataListUrl = "dserver/device/vibration/monitoring/list";
+ public final static String DeviceOnlineStatusUrl = "dserver/device/online/data";
+ public final static String DeviceOnlineStatusListUrl = "dserver/device/list";
//人员组织结构模块 用户验证接口token
public final static String AUTHENTICATIONLOGINTOKEN = "AUTHENTICATIONLOGINTOKEN";
//人员组织结构模块 下次登录时间
diff --git a/app/src/main/java/com/rehome/zhdcoa/bean/DeviceOnlineStatusBean.java b/app/src/main/java/com/rehome/zhdcoa/bean/DeviceOnlineStatusBean.java
new file mode 100644
index 0000000..1ea7151
--- /dev/null
+++ b/app/src/main/java/com/rehome/zhdcoa/bean/DeviceOnlineStatusBean.java
@@ -0,0 +1,56 @@
+package com.rehome.zhdcoa.bean;
+
+import java.util.List;
+
+public class DeviceOnlineStatusBean extends DeviceAlarmBaseBean{
+ private DeviceOnlineStatusData data;
+
+ public DeviceOnlineStatusData getData() {
+ return data;
+ }
+
+ public void setData(DeviceOnlineStatusData data) {
+ this.data = data;
+ }
+
+ public static class DeviceOnlineStatusData {
+ // --- 在线
+ private Integer onlineCount;
+ // --- 离线
+ private Integer offlineCount;
+ private List onlineDevices;
+ private List offlineDevices;
+
+ public Integer getOnlineCount() {
+ return onlineCount;
+ }
+
+ public void setOnlineCount(Integer onlineCount) {
+ this.onlineCount = onlineCount;
+ }
+
+ public Integer getOfflineCount() {
+ return offlineCount;
+ }
+
+ public void setOfflineCount(Integer offlineCount) {
+ this.offlineCount = offlineCount;
+ }
+
+ public List getOnlineDevices() {
+ return onlineDevices;
+ }
+
+ public void setOnlineDevices(List onlineDevices) {
+ this.onlineDevices = onlineDevices;
+ }
+
+ public List getOfflineDevices() {
+ return offlineDevices;
+ }
+
+ public void setOfflineDevices(List offlineDevices) {
+ this.offlineDevices = offlineDevices;
+ }
+ }
+}
diff --git a/app/src/main/java/com/rehome/zhdcoa/ui/activity/DeviceAlarmInfoActivity.kt b/app/src/main/java/com/rehome/zhdcoa/ui/activity/DeviceAlarmInfoActivity.kt
index d865927..d990028 100644
--- a/app/src/main/java/com/rehome/zhdcoa/ui/activity/DeviceAlarmInfoActivity.kt
+++ b/app/src/main/java/com/rehome/zhdcoa/ui/activity/DeviceAlarmInfoActivity.kt
@@ -116,7 +116,7 @@ class DeviceAlarmInfoActivity : BaseActivityOaToolbarViewBinding {
+public class DeviceAlarmInfoLineChartActivity extends BaseActivityOaToolbarViewBinding {
private String deviceCode;
private String deviceName;
//格式化日期的对象(转化成习惯的时间格式)
@@ -93,21 +95,41 @@ public class DeviceAlarmInfoLineChartActivity extends BaseViewBindingActivity xLabelListDataZqpl = new ArrayList<>();
private ArrayList xLabelListDataFreq = new ArrayList<>();
+// @Override
+// protected ActivityDeviceAlarmInfoLineChartBinding getBinding() {
+// return ActivityDeviceAlarmInfoLineChartBinding.inflate(LayoutInflater.from(this));
+// }
+
+ @NonNull
@Override
- protected ActivityDeviceAlarmInfoLineChartBinding getBinding() {
+ protected ActivityDeviceAlarmInfoLineChartBinding getViewBinding() {
return ActivityDeviceAlarmInfoLineChartBinding.inflate(LayoutInflater.from(this));
}
+ @NonNull
@Override
- protected Toolbar getToolbar() {
- return binding.toolbarView.toolbarYx;
+ protected OAToolbar getToolbar() {
+ return binding.toolbarView.toolbar;
}
+// @Override
+// protected Toolbar getToolbar() {
+// return binding.toolbarView.toolbarYx;
+// }
@Override
protected void initView() {
- this.setStatusBar();
- binding.toolbarView.titleYx.setText("曲线图-测振测温设备");
- setBack();
+// this.setStatusBar();
+// binding.toolbarView.titleYx.setText("曲线图-测振测温设备");
+// setBack();
+ initToolbar("图表-测振测温设备", "刷新", new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if(deviceCode!=null){
+ showLog(deviceCode);
+ getDeviceAlarmInfoLineChartData();
+ }
+ }
+ });
//静态方法getInstance()使用默认时区和语言环境获得一个日历。
Calendar calendarNow = Calendar.getInstance();
@@ -315,7 +337,7 @@ public class DeviceAlarmInfoLineChartActivity extends BaseViewBindingActivity item = new ArrayList<>();
+
+ String name = App.getInstance().getUserInfo().getManid().toUpperCase();
+
+ if (name.contains("CKCX")) {
+ item.add(0);
+ item.add(8);
+ item.add(9);
+ flag = false;
+ }
+ gv.setSelector(new ColorDrawable(Color.TRANSPARENT));
+ gv.setAdapter(new GridViewYXAdapter(this, getGridViewData(), item, flag));
+ gv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView> adapterView, View view, int i, long l) {
+ Intent intent;
+ switch (i) {
+ case 0:
+ intent = new Intent(DeviceEntryActivity.this, SbinfoActivity.class);
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ startActivity(intent);
+ break;
+ case 1:
+ intent = new Intent(DeviceEntryActivity.this, DeviceAlarmInfoActivity.class);
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ startActivity(intent);
+ break;
+ case 2:
+ intent = new Intent(DeviceEntryActivity.this, DeviceOnlineStatusActivity.class);
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ startActivity(intent);
+ break;
+ case 3:
+// intent = new Intent(DeviceEntryActivity.this, MaterialIssue.class);
+// intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+// startActivity(intent);
+ break;
+ case 4:
+// intent = new Intent(DeviceEntryActivity.this, TlrkActivity.class);
+// intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+// startActivity(intent);
+ break;
+ case 5:
+ intent = new Intent(DeviceEntryActivity.this, JstkActivity.class);
+ startActivity(intent);
+ break;
+ case 6:
+ intent = new Intent(DeviceEntryActivity.this, ShelvesShift.class);
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ startActivity(intent);
+ break;
+ case 7:
+ intent = new Intent(DeviceEntryActivity.this, WztpScActivity.class);
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ startActivity(intent);
+ break;
+ case 8:
+ intent = new Intent(DeviceEntryActivity.this, TmdyActivity.class);
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ startActivity(intent);
+ break;
+ case 9:
+ intent = new Intent(DeviceEntryActivity.this, HjbqdyActivity.class);
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ startActivity(intent);
+ break;
+ case 10:
+ intent = new Intent(DeviceEntryActivity.this, WztpblScActivity.class);
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ startActivity(intent);
+ break;
+ }
+ }
+ });
+ }
+
+ private List getGridViewData() {
+ List datas = new ArrayList<>();
+ for (int i = 0; i < str.length; i++) {
+ GridViewBean bean = new GridViewBean();
+ bean.setTitle(str[i]);
+ bean.setImageid(imageId[i]);
+ bean.setShow(false);
+ datas.add(bean);
+ }
+ return datas;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/rehome/zhdcoa/ui/activity/DeviceOnlineStatusActivity.java b/app/src/main/java/com/rehome/zhdcoa/ui/activity/DeviceOnlineStatusActivity.java
new file mode 100644
index 0000000..427472d
--- /dev/null
+++ b/app/src/main/java/com/rehome/zhdcoa/ui/activity/DeviceOnlineStatusActivity.java
@@ -0,0 +1,154 @@
+package com.rehome.zhdcoa.ui.activity;
+
+import static com.rehome.zhdcoa.utils.GsonUtils.GsonToBean;
+
+import android.annotation.SuppressLint;
+import android.graphics.Color;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+
+import androidx.activity.EdgeToEdge;
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.core.graphics.Insets;
+import androidx.core.view.ViewCompat;
+import androidx.core.view.WindowInsetsCompat;
+
+import com.rehome.zhdcoa.Contans;
+import com.rehome.zhdcoa.R;
+import com.rehome.zhdcoa.base.BaseActivityOaToolbarViewBinding;
+import com.rehome.zhdcoa.bean.DeviceAlarmInfoLineChartBean;
+import com.rehome.zhdcoa.bean.DeviceOnlineStatusBean;
+import com.rehome.zhdcoa.databinding.ActivityDeviceOnlineStatusBinding;
+import com.rehome.zhdcoa.utils.AuthenticationLoginAIUtils;
+import com.rehome.zhdcoa.utils.HttpListener;
+import com.rehome.zhdcoa.utils.NohttpUtils;
+import com.rehome.zhdcoa.utils.OnAuthenticationLoginListener;
+import com.rehome.zhdcoa.utils.RSAAndroid;
+import com.rehome.zhdcoa.weiget.OAToolbar;
+import com.yolanda.nohttp.NoHttp;
+import com.yolanda.nohttp.RequestMethod;
+import com.yolanda.nohttp.rest.Request;
+
+import java.math.RoundingMode;
+import java.text.DecimalFormat;
+
+
+/**
+ * 设备在线情况
+ */
+
+public class DeviceOnlineStatusActivity extends BaseActivityOaToolbarViewBinding {
+
+ @NonNull
+ @Override
+ protected ActivityDeviceOnlineStatusBinding getViewBinding() {
+ return ActivityDeviceOnlineStatusBinding.inflate(LayoutInflater.from(this));
+ }
+
+ @NonNull
+ @Override
+ protected OAToolbar getToolbar() {
+ return binding.toolbarView.toolbar;
+ }
+
+ @Override
+ protected void initView() {
+// this.setStatusBar();
+ initToolbar("设备在线情况", "刷新", new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ authenticationLoginDeviceAlarmInfoRsa();
+ }
+ });
+ //binding.basdLl.setBackgroundColor(Color.argb(178, 0, 45, 85));
+ //binding.circularProgressBar.setCustomAngle(0);
+ //0, 45, 85, 0.7
+
+// // 方法1:使用Color类
+// view.setBackgroundColor(Color.argb(128, 0, 0, 255))
+//
+//// 方法2:使用十六进制值
+// view.setBackgroundColor(0x800000FF.toInt())
+//
+//// 方法3:解析颜色字符串
+// view.setBackgroundColor(Color.parseColor("#800000FF"))
+
+ }
+
+ @Override
+ protected void initData() {
+ authenticationLoginDeviceAlarmInfoRsa();
+ }
+
+ private void authenticationLoginDeviceAlarmInfoRsa() {
+ try {
+ //AI三维登录接口
+ String userName = Contans.SP.DeviceAlermInfoAccount;
+ String strPublicDecode = RSAAndroid.decryptByPublicKeyForSpiltStr(
+ Contans.SP.DeviceAlermInfoPwd,
+ RSAAndroid.publicRsaKeyLocal
+ );
+ AuthenticationLoginAIUtils.authenticationDeviceAlermInfoRsaShowProgress(this,userName,strPublicDecode,new OnAuthenticationLoginListener(){
+ @Override
+ public void onAuthenticationSuccess(boolean result, String token) {
+ if(token!=null&&token.isEmpty()){
+ //登录失败
+ showToast("设备状态智能监测及分析平台登录失败");
+ }else{
+ //登录成功
+ getDeviceOnlineStatusData();
+ }
+ }
+ });
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ public void getDeviceOnlineStatusData() {
+
+ String url = Contans.IP + Contans.DeviceOnlineStatusUrl;
+ Request request = NoHttp.createStringRequest(url, RequestMethod.GET);
+
+ NohttpUtils.getInstance().add(this,0, request, new HttpListener() {
+
+ @SuppressLint({"SetTextI18n", "DefaultLocale"})
+ @Override
+ public void onSucceed(int what, com.yolanda.nohttp.rest.Response response) {
+
+ String result = response.get();
+ showLog(result);
+
+
+ DeviceOnlineStatusBean bean = GsonToBean(result, DeviceOnlineStatusBean.class);
+ if(bean!=null && bean.getCode()==20000 && bean.isSuccess() && bean.getData()!=null){
+ DeviceOnlineStatusBean.DeviceOnlineStatusData data = bean.getData();
+ int total = data.getOnlineCount()+data.getOfflineCount();
+ binding.tvOnline.setText(data.getOnlineCount().toString());
+ binding.tvOffline.setText(data.getOfflineCount().toString());
+ binding.tvTotal.setText(String.valueOf(total));
+ double progress = (data.getOnlineCount() / (double) total *100);
+
+ DecimalFormat df = new DecimalFormat("#.#");
+ df.setRoundingMode(RoundingMode.HALF_UP); // 设置截断模式
+ Double progressDouble = Double.valueOf(df.format(progress));
+
+ binding.circularProgressBar.setText(String.format("%.0f", progressDouble) + "%");
+ binding.circularProgressBar.setProgress((float) progress);
+
+ showLog(String.valueOf(progress));
+ showLog(String.valueOf(progressDouble));
+ //String.format("%.0f", progress)
+ }else{
+ showLog("数据加载失败");
+ }
+ }
+
+ @Override
+ public void onFailed(int what, com.yolanda.nohttp.rest.Response response) {
+
+ }
+ });
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/rehome/zhdcoa/ui/activity/LoginActivity.kt b/app/src/main/java/com/rehome/zhdcoa/ui/activity/LoginActivity.kt
index eea57f7..fb363a5 100644
--- a/app/src/main/java/com/rehome/zhdcoa/ui/activity/LoginActivity.kt
+++ b/app/src/main/java/com/rehome/zhdcoa/ui/activity/LoginActivity.kt
@@ -246,7 +246,9 @@ class LoginActivity : BaseActivityOaToolbarViewBinding() {
// binding.etUsername.setText("310249")
// binding.etPassword.setText("GZgs#@0249")
-
+ //张富荣
+// binding.etUsername.setText("310272")
+// binding.etPassword.setText("zh0272AS*")
//公司内网215管理员
// binding.etUsername.setText("ZHPS_Admin")
diff --git a/app/src/main/java/com/rehome/zhdcoa/ui/fragment/YunXingFragment.kt b/app/src/main/java/com/rehome/zhdcoa/ui/fragment/YunXingFragment.kt
index 4a97805..9ce3f1d 100644
--- a/app/src/main/java/com/rehome/zhdcoa/ui/fragment/YunXingFragment.kt
+++ b/app/src/main/java/com/rehome/zhdcoa/ui/fragment/YunXingFragment.kt
@@ -50,6 +50,7 @@ import com.rehome.zhdcoa.service.PushService
import com.rehome.zhdcoa.service.UploadDataService
import com.rehome.zhdcoa.ui.activity.AjhxcglActivity
import com.rehome.zhdcoa.ui.activity.DeviceAlarmInfoActivity
+import com.rehome.zhdcoa.ui.activity.DeviceEntryActivity
import com.rehome.zhdcoa.ui.activity.GdActivity
import com.rehome.zhdcoa.ui.activity.SbinfoActivity
import com.rehome.zhdcoa.ui.activity.SbxdjglActivity
@@ -97,8 +98,7 @@ class YunXingFragment : BaseViewBindingKotlinFragment()
"工单录入",
"巡视抄表",
"定期工作",
- "设备报表查询",
- "设备预警信息",
+ "设备"
)
private val imageId = intArrayOf(
R.drawable.icon8,
@@ -109,8 +109,7 @@ class YunXingFragment : BaseViewBindingKotlinFragment()
R.drawable.icon13,
R.drawable.icon6,
R.drawable.dingqi,
- R.drawable.icon_baobiao,
- R.drawable.icon_yujing
+ R.drawable.icon_device_entry
)
/**
@@ -168,6 +167,7 @@ class YunXingFragment : BaseViewBindingKotlinFragment()
binding?.gvYx?.onItemClickListener =
AdapterView.OnItemClickListener { parent: AdapterView<*>?, view: View?, position: Int, id: Long ->
val intent: Intent
+ //DeviceEntryActivity
when (position) {
0 -> {
intent = Intent(activity, SbxdjglActivity::class.java)
@@ -229,14 +229,14 @@ class YunXingFragment : BaseViewBindingKotlinFragment()
}
8 -> {
- intent = Intent(activity, SbinfoActivity::class.java)
+ intent = Intent(activity, DeviceEntryActivity::class.java)
startActivity(intent)
}
- 9 -> {
- intent = Intent(activity, DeviceAlarmInfoActivity::class.java)
- startActivity(intent)
- }
+// 9 -> {
+// intent = Intent(activity, DeviceAlarmInfoActivity::class.java)
+// startActivity(intent)
+// }
else -> {}
}
diff --git a/app/src/main/java/com/rehome/zhdcoa/utils/HttpUtils.java b/app/src/main/java/com/rehome/zhdcoa/utils/HttpUtils.java
index b6cb292..ff126d4 100644
--- a/app/src/main/java/com/rehome/zhdcoa/utils/HttpUtils.java
+++ b/app/src/main/java/com/rehome/zhdcoa/utils/HttpUtils.java
@@ -184,6 +184,14 @@ public class HttpUtils {
httpClientBuilder.hostnameVerifier((hostname, session) -> true); // 信任所有主机名
}
}
+ if(url.startsWith("https://172.16.25.75:7100")||url.startsWith("https://172.16.25.75:7011")||url.startsWith("https://172.16.25.75:7081")||url.startsWith("https://172.16.25.75:7082")){
+ SSLSocketFactory socketFactory = getSSLSocketFactory(context);
+ if (socketFactory != null) {
+ TrustManagerFactory trustManagerFactory = getTrustManagerFactory(context);
+ httpClientBuilder.sslSocketFactory(socketFactory, (X509TrustManager) trustManagerFactory.getTrustManagers()[0]);
+ httpClientBuilder.hostnameVerifier((hostname, session) -> true); // 信任所有主机名
+ }
+ }
return httpClientBuilder.build();
}
diff --git a/app/src/main/java/com/rehome/zhdcoa/utils/NohttpUtils.java b/app/src/main/java/com/rehome/zhdcoa/utils/NohttpUtils.java
index 7bac774..b2e6f21 100644
--- a/app/src/main/java/com/rehome/zhdcoa/utils/NohttpUtils.java
+++ b/app/src/main/java/com/rehome/zhdcoa/utils/NohttpUtils.java
@@ -101,6 +101,18 @@ public class NohttpUtils {
});
}
}
+ if(url.startsWith("https://172.16.25.75:7100")||url.startsWith("https://172.16.25.75:7011")||url.startsWith("https://172.16.25.75:7081")||url.startsWith("https://172.16.25.75:7082")){
+ SSLSocketFactory socketFactory = NohttpUtils.getSSLSocketFactory(mActivity);
+ if (socketFactory != null) {
+ request.setSSLSocketFactory(socketFactory);
+ request.setHostnameVerifier(new HostnameVerifier() {
+ @Override
+ public boolean verify(String s, SSLSession sslSession) {
+ return true;
+ }
+ });
+ }
+ }
}
mQueue.add(what, request, new HttpResponseListener(mActivity, request, callback, canCanel, isLoading, msg));
}
@@ -137,6 +149,18 @@ public class NohttpUtils {
});
}
}
+ if(url.startsWith("https://172.16.25.75:7100")||url.startsWith("https://172.16.25.75:7011")||url.startsWith("https://172.16.25.75:7081")||url.startsWith("https://172.16.25.75:7082")){
+ SSLSocketFactory socketFactory = NohttpUtils.getSSLSocketFactory(mActivity);
+ if (socketFactory != null) {
+ request.setSSLSocketFactory(socketFactory);
+ request.setHostnameVerifier(new HostnameVerifier() {
+ @Override
+ public boolean verify(String s, SSLSession sslSession) {
+ return true;
+ }
+ });
+ }
+ }
}
mQueue.add(what, request, new HttpResponseListener(mActivity, request, callback, canCanel, isLoading, msg));
}
@@ -166,6 +190,18 @@ public class NohttpUtils {
});
}
}
+ if(url.startsWith("https://172.16.25.75:7100")||url.startsWith("https://172.16.25.75:7011")||url.startsWith("https://172.16.25.75:7081")||url.startsWith("https://172.16.25.75:7082")){
+ SSLSocketFactory socketFactory = NohttpUtils.getSSLSocketFactory(mActivity);
+ if (socketFactory != null) {
+ request.setSSLSocketFactory(socketFactory);
+ request.setHostnameVerifier(new HostnameVerifier() {
+ @Override
+ public boolean verify(String s, SSLSession sslSession) {
+ return true;
+ }
+ });
+ }
+ }
}
mQueue.add(what, request, new HttpResponseListener(mActivity, request, callback, true, true, "数据加载中..."));
}
@@ -193,6 +229,18 @@ public class NohttpUtils {
});
}
}
+ if(url.startsWith("https://172.16.25.75:7100")||url.startsWith("https://172.16.25.75:7011")||url.startsWith("https://172.16.25.75:7081")||url.startsWith("https://172.16.25.75:7082")){
+ SSLSocketFactory socketFactory = NohttpUtils.getSSLSocketFactory(mActivity);
+ if (socketFactory != null) {
+ request.setSSLSocketFactory(socketFactory);
+ request.setHostnameVerifier(new HostnameVerifier() {
+ @Override
+ public boolean verify(String s, SSLSession sslSession) {
+ return true;
+ }
+ });
+ }
+ }
}
mQueue.add(what, request, new HttpResponseListener(mActivity, request, callback, true, true, progressTitle));
}
@@ -220,6 +268,18 @@ public class NohttpUtils {
});
}
}
+ if(url.startsWith("https://172.16.25.75:7100")||url.startsWith("https://172.16.25.75:7011")||url.startsWith("https://172.16.25.75:7081")||url.startsWith("https://172.16.25.75:7082")){
+ SSLSocketFactory socketFactory = NohttpUtils.getSSLSocketFactory(context);
+ if (socketFactory != null) {
+ request.setSSLSocketFactory(socketFactory);
+ request.setHostnameVerifier(new HostnameVerifier() {
+ @Override
+ public boolean verify(String s, SSLSession sslSession) {
+ return true;
+ }
+ });
+ }
+ }
}
mQueue.add(what, request, new HttpResponseListenerNoProgress(request, callback));
}
diff --git a/app/src/main/java/com/rehome/zhdcoa/weiget/CircularProgressBar.java b/app/src/main/java/com/rehome/zhdcoa/weiget/CircularProgressBar.java
new file mode 100644
index 0000000..031bf90
--- /dev/null
+++ b/app/src/main/java/com/rehome/zhdcoa/weiget/CircularProgressBar.java
@@ -0,0 +1,343 @@
+package com.rehome.zhdcoa.weiget;
+
+
+import android.animation.ValueAnimator;
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.LinearGradient;
+import android.graphics.Paint;
+import android.graphics.Rect;
+import android.graphics.RectF;
+import android.graphics.Shader;
+import android.util.AttributeSet;
+import android.util.TypedValue;
+import android.view.View;
+import androidx.annotation.Nullable;
+import androidx.core.content.ContextCompat;
+import com.rehome.zhdcoa.R;
+
+/**
+ * 圆环进度条
+ *
+ * @author llw
+ * @since 2023/4/3
+ */
+public class CircularProgressBar extends View {
+
+ /**
+ * 半径
+ */
+ private int mRadius;
+ /**
+ * 进度条宽度
+ */
+ private int mStrokeWidth;
+
+ /**
+ * 进度条背景颜色
+ */
+ private int mProgressbarBgColor;
+
+ /**
+ * 进度条进度颜色
+ */
+ private int mProgressColor;
+
+ /**
+ * 开始角度
+ */
+ private int mStartAngle = 0;
+
+ /**
+ * 当前角度
+ */
+ private float mCurrentAngle = 0;
+
+ /**
+ * 结束角度
+ */
+ private int mEndAngle = 360;
+ /**
+ * 最大进度
+ */
+ private float mMaxProgress;
+ /**
+ * 当前进度
+ */
+ private float mCurrentProgress;
+ /**
+ * 文字
+ */
+ private String mText;
+ /**
+ * 文字颜色
+ */
+ private int mTextColor;
+ /**
+ * 文字大小
+ */
+ private float mTextSize;
+ /**
+ * 是否渐变
+ */
+ private boolean isGradient;
+ /**
+ * 渐变颜色数组
+ */
+ private int[] colorArray;
+ /**
+ * 动画的执行时长
+ */
+ private long mDuration = 1000;
+ /**
+ * 是否执行动画
+ */
+ private boolean isAnimation = false;
+ /**
+ * 是否逆时针绘制
+ */
+ private boolean isCounterClockwise = false;
+
+ public CircularProgressBar(Context context) {
+ this(context, null);
+ }
+
+ public CircularProgressBar(Context context, @Nullable AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public CircularProgressBar(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.CircularProgressBar);
+ mRadius = array.getDimensionPixelSize(R.styleable.CircularProgressBar_radius, 80);
+ mStrokeWidth = array.getDimensionPixelSize(R.styleable.CircularProgressBar_strokeWidth, 8);
+ mProgressbarBgColor = array.getColor(R.styleable.CircularProgressBar_progressbarBackgroundColor, ContextCompat.getColor(context, R.color.teal_700));
+ mProgressColor = array.getColor(R.styleable.CircularProgressBar_progressbarColor, ContextCompat.getColor(context, R.color.teal_200));
+ mMaxProgress = array.getInt(R.styleable.CircularProgressBar_maxProgress, 100);
+ mCurrentProgress = array.getInt(R.styleable.CircularProgressBar_progress, 0);
+ String text = array.getString(R.styleable.CircularProgressBar_text);
+ mText = text == null ? "" : text;
+ mTextColor = array.getColor(R.styleable.CircularProgressBar_textColor, ContextCompat.getColor(context, R.color.black));
+ mTextSize = array.getDimensionPixelSize(R.styleable.CircularProgressBar_textSize, (int) TypedValue
+ .applyDimension(TypedValue.COMPLEX_UNIT_SP, 14, getResources().getDisplayMetrics()));
+ //是否渐变
+ isGradient = array.getBoolean(R.styleable.CircularProgressBar_gradient, false);
+ //渐变颜色数组
+ CharSequence[] textArray = array.getTextArray(R.styleable.CircularProgressBar_gradientColorArray);
+ if (textArray != null) {
+ colorArray = new int[textArray.length];
+ for (int i = 0; i < textArray.length; i++) {
+ colorArray[i] = Color.parseColor((String) textArray[i]);
+ }
+ }
+ // 开始角度
+ mStartAngle = array.getInt(R.styleable.CircularProgressBar_customAngle, 0);
+ // 是否逆时针绘制
+ isCounterClockwise = array.getBoolean(R.styleable.CircularProgressBar_counterClockwise, false);
+ array.recycle();
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ int width = 0;
+ switch (MeasureSpec.getMode(widthMeasureSpec)) {
+ case MeasureSpec.UNSPECIFIED:
+ case MeasureSpec.AT_MOST: //wrap_content
+ width = mRadius * 2;
+ break;
+ case MeasureSpec.EXACTLY: //match_parent
+ width = MeasureSpec.getSize(widthMeasureSpec);
+ break;
+ }
+ //Set the measured width and height
+ setMeasuredDimension(width, width);
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ int centerX = getWidth() / 2;
+ RectF rectF = new RectF();
+ rectF.left = mStrokeWidth / 2;
+ rectF.top = mStrokeWidth / 2;
+ rectF.right = centerX * 2 - mStrokeWidth / 2;
+ rectF.bottom = centerX * 2 - mStrokeWidth / 2;
+
+ //绘制进度条背景
+ drawProgressbarBg(canvas, rectF);
+ //绘制进度
+ drawProgress(canvas, rectF);
+ //绘制中心文本
+ drawCenterText(canvas, centerX);
+ }
+
+ /**
+ * 绘制进度条背景
+ */
+ private void drawProgressbarBg(Canvas canvas, RectF rectF) {
+ Paint mPaint = new Paint();
+ //画笔的填充样式,Paint.Style.STROKE 描边
+ mPaint.setStyle(Paint.Style.STROKE);
+ //圆弧的宽度
+ mPaint.setStrokeWidth(mStrokeWidth);
+ //抗锯齿
+ mPaint.setAntiAlias(true);
+ //画笔的颜色
+ mPaint.setColor(mProgressbarBgColor);
+ //画笔的样式 Paint.Cap.Round 圆形
+ mPaint.setStrokeCap(Paint.Cap.ROUND);
+ //开始画圆弧
+ canvas.drawArc(rectF, mStartAngle, mEndAngle, false, mPaint);
+ }
+
+ /**
+ * 绘制进度
+ */
+ private void drawProgress(Canvas canvas, RectF rectF) {
+ Paint paint = new Paint();
+ paint.setStyle(Paint.Style.STROKE);
+ paint.setStrokeWidth(mStrokeWidth);
+ paint.setColor(mProgressColor);
+
+ if (isGradient && colorArray != null) {
+ paint.setShader(new LinearGradient(0, 0, rectF.right, rectF.top, colorArray, null, Shader.TileMode.MIRROR));
+ }
+
+ paint.setAntiAlias(true);
+ paint.setStrokeCap(Paint.Cap.ROUND);
+ if (!isAnimation) {
+ mCurrentAngle = 360 * (mCurrentProgress / mMaxProgress);
+ }
+
+ // 根据 isCounterClockwise 调整绘制角度
+ float startAngle = mStartAngle;
+ float sweepAngle = mCurrentAngle;
+ if (isCounterClockwise) {
+ startAngle = mStartAngle - 360;
+ sweepAngle = -mCurrentAngle;
+ }
+
+ canvas.drawArc(rectF, startAngle, sweepAngle, false, paint);
+ }
+
+ /**
+ * 绘制中心文字
+ */
+ private void drawCenterText(Canvas canvas, int centerX) {
+ Paint paint = new Paint();
+ paint.setAntiAlias(true);
+ paint.setColor(mTextColor);
+ paint.setTextAlign(Paint.Align.CENTER);
+ paint.setTextSize(mTextSize);
+ Rect textBounds = new Rect();
+ paint.getTextBounds(mText, 0, mText.length(), textBounds);
+ canvas.drawText(mText, centerX, textBounds.height() / 2 + getHeight() / 2, paint);
+ }
+
+ /**
+ * 设置当前进度
+ */
+ public void setProgress(float progress) {
+ if (progress < 0) {
+ throw new IllegalArgumentException("Progress value can not be less than 0");
+ }
+ if (progress > mMaxProgress) {
+ progress = mMaxProgress;
+ }
+ mCurrentProgress = progress;
+ mCurrentAngle = 360 * (mCurrentProgress / mMaxProgress);
+ setAnimator(mStartAngle, mCurrentAngle);
+ }
+
+ /**
+ * 设置文本
+ */
+ public void setText(String text) {
+ mText = text;
+ }
+
+ /**
+ * 设置文本的颜色
+ */
+ public void setTextColor(int color) {
+ if (color <= 0) {
+ throw new IllegalArgumentException("Color value can not be less than 0");
+ }
+ mTextColor = color;
+ }
+
+ /**
+ * 设置文本的大小
+ */
+ public void setTextSize(float textSize) {
+ if (textSize <= 0) {
+ throw new IllegalArgumentException("textSize can not be less than 0");
+ }
+ mTextSize = textSize;
+ }
+
+ /**
+ * 设置角度
+ * @param angle 角度
+ */
+ public void setCustomAngle(int angle) {
+ if (angle >= 0 && angle < 90) {
+ mStartAngle = 0;
+ } else if (angle >= 90 && angle < 180) {
+ mStartAngle = 90;
+ } else if (angle >= 180 && angle < 270) {
+ mStartAngle = 180;
+ } else if (angle >= 270 && angle < 360) {
+ mStartAngle = 270;
+ } else if (angle >= 360) {
+ mStartAngle = 0;
+ }
+ invalidate();
+ }
+
+ /**
+ * 设置是否渐变
+ */
+ public void setGradient(boolean gradient) {
+ isGradient = gradient;
+ }
+
+ /**
+ * 设置是否逆时针
+ * @param counterClockwise
+ */
+ public void setCounterClockwise(boolean counterClockwise) {
+ isCounterClockwise = counterClockwise;
+ invalidate();
+ }
+
+ /**
+ * 设置渐变的颜色
+ */
+ public void setColorArray(int[] colorArr) {
+ if (colorArr == null) return;
+ colorArray = colorArr;
+ }
+
+
+ /**
+ * 设置动画
+ *
+ * @param start 开始位置
+ * @param target 结束位置
+ */
+ private void setAnimator(float start, float target) {
+ isAnimation = true;
+ ValueAnimator animator = ValueAnimator.ofFloat(start, target);
+ animator.setDuration(mDuration);
+ animator.setTarget(mCurrentAngle);
+ //动画更新监听
+ animator.addUpdateListener(valueAnimator -> {
+ mCurrentAngle = (float) valueAnimator.getAnimatedValue();
+ invalidate();
+ });
+ animator.start();
+ }
+}
diff --git a/app/src/main/res/drawable-xhdpi/icon_device_all_show.png b/app/src/main/res/drawable-xhdpi/icon_device_all_show.png
new file mode 100644
index 0000000..91d7681
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_device_all_show.png differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_device_entry.png b/app/src/main/res/drawable-xhdpi/icon_device_entry.png
new file mode 100644
index 0000000..08cc733
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_device_entry.png differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_device_manager.png b/app/src/main/res/drawable-xhdpi/icon_device_manager.png
new file mode 100644
index 0000000..143b475
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_device_manager.png differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_device_online_status.png b/app/src/main/res/drawable-xhdpi/icon_device_online_status.png
new file mode 100644
index 0000000..576c318
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_device_online_status.png differ
diff --git a/app/src/main/res/drawable/icon_more_vector_asset.xml b/app/src/main/res/drawable/icon_more_vector_asset.xml
new file mode 100644
index 0000000..2d967ea
--- /dev/null
+++ b/app/src/main/res/drawable/icon_more_vector_asset.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_device_alarm_info_line_chart.xml b/app/src/main/res/layout/activity_device_alarm_info_line_chart.xml
index 105ac6a..3114d93 100644
--- a/app/src/main/res/layout/activity_device_alarm_info_line_chart.xml
+++ b/app/src/main/res/layout/activity_device_alarm_info_line_chart.xml
@@ -8,7 +8,7 @@
+ layout="@layout/layout_base" />
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_device_online_status.xml b/app/src/main/res/layout/activity_device_online_status.xml
new file mode 100644
index 0000000..c0f7692
--- /dev/null
+++ b/app/src/main/res/layout/activity_device_online_status.xml
@@ -0,0 +1,184 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml
index fba836e..88a9a9c 100644
--- a/app/src/main/res/layout/activity_login.xml
+++ b/app/src/main/res/layout/activity_login.xml
@@ -180,7 +180,6 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp"
- android:checked="true"
android:text="aTrust" />
diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml
index 446363f..8c0b22e 100644
--- a/app/src/main/res/values/attrs.xml
+++ b/app/src/main/res/values/attrs.xml
@@ -80,5 +80,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 846d6cc..6ed0180 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -79,5 +79,10 @@
#90505050
#90FF0000
+ #FF03DAC5
+ #FF018786
+ #0aefcc
+ #129be0
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 1047bea..5c7be68 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -94,6 +94,11 @@
内网资源
外网资源
代理域名
+
+ - #00FFF7
+ - #FFDD00
+ - #FF0000
+