diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b7f158e..0c3e54b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -82,7 +82,6 @@ tools:replace="android:allowBackup" tools:targetApi="s"> - @@ -458,6 +457,9 @@ + diff --git a/app/src/main/java/com/rehome/zhdcoa/Contans.java b/app/src/main/java/com/rehome/zhdcoa/Contans.java index 0078669..5a2bd6d 100644 --- a/app/src/main/java/com/rehome/zhdcoa/Contans.java +++ b/app/src/main/java/com/rehome/zhdcoa/Contans.java @@ -540,6 +540,10 @@ 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 getDevicePhotoListUrl = "dserver/device/img"; + + //设备在线列表 public final static String DeviceOnlineStatusListUrl = "dserver/device/list"; //人员组织结构模块 用户验证接口token diff --git a/app/src/main/java/com/rehome/zhdcoa/bean/DeviceOnlineStatusImgBean.java b/app/src/main/java/com/rehome/zhdcoa/bean/DeviceOnlineStatusImgBean.java new file mode 100644 index 0000000..f76f523 --- /dev/null +++ b/app/src/main/java/com/rehome/zhdcoa/bean/DeviceOnlineStatusImgBean.java @@ -0,0 +1,129 @@ +package com.rehome.zhdcoa.bean; + +import java.util.Date; +import java.util.List; + +/** + * 测振测温设备图片中间表 + * + * @author HuangWenfei + */ +public class DeviceOnlineStatusImgBean extends DeviceAlarmBaseBean{ + + private List data; + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DeviceOnlineStatusImg { + /** + * 设备名称 + */ + private String deviceName; + + /** + * id + */ + private Integer id; + + /** + * 设备id + */ + private String deviceId; + + /** + * 设备图片 + */ + private String imgUrl; + + /** + * 图片名称 + */ + private String fileName; + + /** + * 创建时间 + */ + private Date createTime; + + + /** + * 删除时间 + */ + private Date deleteTime; + + /** + * 逻辑删除 + */ + private Integer isDeleted; + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getImgUrl() { + return imgUrl; + } + + public void setImgUrl(String imgUrl) { + this.imgUrl = imgUrl; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getDeleteTime() { + return deleteTime; + } + + public void setDeleteTime(Date deleteTime) { + this.deleteTime = deleteTime; + } + + public Integer getIsDeleted() { + return isDeleted; + } + + public void setIsDeleted(Integer isDeleted) { + this.isDeleted = isDeleted; + } + } +} diff --git a/app/src/main/java/com/rehome/zhdcoa/ui/activity/DeviceOnlinePhotoManageActivity.java b/app/src/main/java/com/rehome/zhdcoa/ui/activity/DeviceOnlinePhotoManageActivity.java new file mode 100644 index 0000000..5fcc4db --- /dev/null +++ b/app/src/main/java/com/rehome/zhdcoa/ui/activity/DeviceOnlinePhotoManageActivity.java @@ -0,0 +1,1234 @@ +package com.rehome.zhdcoa.ui.activity; + +import static android.text.Html.FROM_HTML_MODE_LEGACY; +import static com.rehome.zhdcoa.utils.GsonUtils.GsonToBean; + +import android.Manifest; +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.graphics.drawable.Drawable; +import android.net.Uri; +import android.os.Bundle; +import android.os.Environment; +import android.os.Looper; +import android.provider.MediaStore; +import android.text.Html; +import android.text.Spannable; +import android.text.SpannableStringBuilder; +import android.text.TextUtils; +import android.text.style.AbsoluteSizeSpan; +import android.text.style.ForegroundColorSpan; +import android.util.Log; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.Spinner; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.constraintlayout.widget.ConstraintSet; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.recyclerview.widget.SimpleItemAnimator; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.target.CustomTarget; +import com.bumptech.glide.request.transition.Transition; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.luck.picture.lib.PictureSelectorPreviewFragment; +import com.luck.picture.lib.animators.AnimationType; +import com.luck.picture.lib.basic.IBridgeViewLifecycle; +import com.luck.picture.lib.basic.PictureSelectionModel; +import com.luck.picture.lib.basic.PictureSelector; +import com.luck.picture.lib.config.InjectResourceSource; +import com.luck.picture.lib.config.PictureMimeType; +import com.luck.picture.lib.config.PictureSelectionConfig; +import com.luck.picture.lib.config.SelectLimitType; +import com.luck.picture.lib.config.SelectMimeType; +import com.luck.picture.lib.config.SelectModeConfig; +import com.luck.picture.lib.decoration.GridSpacingItemDecoration; +import com.luck.picture.lib.engine.CompressFileEngine; +import com.luck.picture.lib.engine.CropFileEngine; +import com.luck.picture.lib.engine.ImageEngine; +import com.luck.picture.lib.engine.UriToFileTransformEngine; +import com.luck.picture.lib.engine.VideoPlayerEngine; +import com.luck.picture.lib.entity.LocalMedia; +import com.luck.picture.lib.entity.MediaExtraInfo; +import com.luck.picture.lib.interfaces.OnBitmapWatermarkEventListener; +import com.luck.picture.lib.interfaces.OnCameraInterceptListener; +import com.luck.picture.lib.interfaces.OnCustomLoadingListener; +import com.luck.picture.lib.interfaces.OnExternalPreviewEventListener; +import com.luck.picture.lib.interfaces.OnInjectActivityPreviewListener; +import com.luck.picture.lib.interfaces.OnInjectLayoutResourceListener; +import com.luck.picture.lib.interfaces.OnKeyValueResultCallbackListener; +import com.luck.picture.lib.interfaces.OnMediaEditInterceptListener; +import com.luck.picture.lib.interfaces.OnPermissionDeniedListener; +import com.luck.picture.lib.interfaces.OnPermissionDescriptionListener; +import com.luck.picture.lib.interfaces.OnPreviewInterceptListener; +import com.luck.picture.lib.interfaces.OnQueryFilterListener; +import com.luck.picture.lib.interfaces.OnRecordAudioInterceptListener; +import com.luck.picture.lib.interfaces.OnSelectLimitTipsListener; +import com.luck.picture.lib.interfaces.OnVideoThumbnailEventListener; +import com.luck.picture.lib.language.LanguageConfig; +import com.luck.picture.lib.permissions.PermissionChecker; +import com.luck.picture.lib.permissions.PermissionConfig; +import com.luck.picture.lib.permissions.PermissionResultCallback; +import com.luck.picture.lib.style.PictureSelectorStyle; +import com.luck.picture.lib.style.SelectMainStyle; +import com.luck.picture.lib.style.TitleBarStyle; +import com.luck.picture.lib.utils.DateUtils; +import com.luck.picture.lib.utils.DensityUtil; +import com.luck.picture.lib.utils.MediaUtils; +import com.luck.picture.lib.utils.PictureFileUtils; +import com.luck.picture.lib.utils.SandboxTransformUtils; +import com.luck.picture.lib.utils.StyleUtils; +import com.luck.picture.lib.utils.ToastUtils; +import com.luck.picture.lib.widget.MediumBoldTextView; +import com.rehome.zhdcoa.App; + +import com.rehome.zhdcoa.Listener.GlideEngine; +import com.rehome.zhdcoa.Listener.ImageLoaderUtils; +import com.rehome.zhdcoa.R; +import com.rehome.zhdcoa.adapter.luck.GridImageAdapter; +import com.rehome.zhdcoa.Contans; +import com.rehome.zhdcoa.base.BaseActivity; +import com.rehome.zhdcoa.bean.AIRiskListBaseBean; +import com.rehome.zhdcoa.bean.DeviceAlarmInfoLineChartBean; +import com.rehome.zhdcoa.bean.DeviceOnlineStatusBean; +import com.rehome.zhdcoa.bean.DeviceOnlineStatusImgBean; +import com.rehome.zhdcoa.bean.MemberInfoStatisticsV1Bean; +import com.rehome.zhdcoa.entity.StatusInfo; +import com.rehome.zhdcoa.utils.AuthenticationLoginAIUtils; +import com.rehome.zhdcoa.utils.BitmapCompressUtils; +import com.rehome.zhdcoa.utils.BitmapUtil; +import com.rehome.zhdcoa.utils.FullyGridLayoutManager; +import com.rehome.zhdcoa.utils.GsonUtils; +import com.rehome.zhdcoa.utils.HttpListener; +import com.rehome.zhdcoa.utils.HttpResponseListener; +import com.rehome.zhdcoa.utils.NohttpUtils; +import com.rehome.zhdcoa.utils.OnAuthenticationLoginListener; +import com.rehome.zhdcoa.utils.RSAAndroid; +import com.rehome.zhdcoa.utils.SPUtils; +import com.rehome.zhdcoa.utils.UiUtlis; +import com.rehome.zhdcoa.weiget.BaCheckDialog; +import com.rehome.zhdcoa.weiget.CommitDialog; +import com.rehome.zhdcoa.weiget.WaitDialog; +import com.yalantis.ucrop.UCrop; +import com.yalantis.ucrop.UCropImageEngine; +import com.yolanda.nohttp.NoHttp; +import com.yolanda.nohttp.RequestMethod; +import com.yolanda.nohttp.rest.Request; +import com.yolanda.nohttp.rest.RequestQueue; +import com.yolanda.nohttp.rest.Response; +import org.litepal.crud.DataSupport; + +import java.io.File; +import java.math.RoundingMode; +import java.nio.charset.StandardCharsets; +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Objects; + +import javax.net.ssl.HostnameVerifier; +import javax.net.ssl.SSLSession; +import javax.net.ssl.SSLSocketFactory; + +import cn.hutool.core.io.IoUtil; +import top.zibin.luban.CompressionPredicate; +import top.zibin.luban.Luban; +import top.zibin.luban.OnNewCompressListener; +import top.zibin.luban.OnRenameListener; + +public class DeviceOnlinePhotoManageActivity extends BaseActivity { + + EditText etMs; + + + private RecyclerView recycle; + private RecyclerView recycleDevicePhotoOnline; + private CheckBox cb_crop; + private CheckBox cb_compress; + private CheckBox cb_editor; + private String username; + private TextView tv_sbmc; + + + private static final String[] permission = new String[]{ + Manifest.permission.CAMERA, + Manifest.permission.WRITE_EXTERNAL_STORAGE + }; + private static final int QRCODE_SCAN_CAMERA_REQUEST_CODE = 4;//扫描二維码请求摄像头权限 + + private String path = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "com.rehome.zhdcoa/images"; + + private String stFileName; + private ArrayList videoList = new ArrayList<>(); + + + private GridImageAdapter mAdapter; + private int maxSelectNum = 16; + private List mData = new ArrayList<>(); + + private int language = LanguageConfig.UNKNOWN_LANGUAGE; + private ImageEngine imageEngine; + private VideoPlayerEngine videoPlayerEngine; + private PictureSelectorStyle selectorStyle; + private int chooseModePhoto = SelectMimeType.ofImage(); + private int chooseModeVideo = SelectMimeType.ofVideo(); + private int chooseMode = chooseModePhoto; + private final static String TAG_EXPLAIN_VIEW = "TAG_EXPLAIN_VIEW"; + private final static String TAG = "app"; + private int animationMode = AnimationType.DEFAULT_ANIMATION; + + + private final static int FILE_CHOOSER_RESULT_CODE = 10000; + + private ActivityResultLauncher launcherResult; + + + private ArrayList finalList = new ArrayList<>(); + + private String deviceId; + private String deviceName; + + private List deviceOnlineStatusImgList = new ArrayList<>(); + + private void findView() { + etMs = findViewById(R.id.et_ms); + recycle = findViewById(R.id.recycle); + cb_crop = findViewById(R.id.cb_crop); + cb_compress = findViewById(R.id.cb_compress); + cb_editor = findViewById(R.id.cb_editor); + tv_sbmc = findViewById(R.id.tv_sbmc); + recycleDevicePhotoOnline = findViewById(R.id.recycleDevicePhotoOnline); + } + + @Override + public int getLayoutId() { + return R.layout.activity_device_online_photo_manage; + } + + @Override + public void initView() { + username = App.getInstance().getUserInfo().getManid(); + Intent intent = getIntent(); + deviceId = intent.getStringExtra("deviceId"); + deviceName = intent.getStringExtra("deviceName"); + showLog("-----deviceName----"); + showLog(deviceName); + findView(); + if(!TextUtils.isEmpty(deviceName)){ + tv_sbmc.setText(deviceName); + } + + initToolbar("工作情况汇报", "提交", new View.OnClickListener() { + @Override + public void onClick(View v) { + if(TextUtils.isEmpty(etMs.getText().toString().trim())){ + showToast("汇报内容必填"); + }else{ + //提交汇报数据 + mData.clear(); + mData.addAll(mAdapter.getData()); + //authenticationLoginAI(); + } + } + }); + + //初始化获取照片和视频 + initTakePhoto(); + } + + @Override + public 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{ + //登录成功 + //获取照片列表 + //http://10.19.0.17:1700/dserver/device/img/002c00e9?v=1770446858996 + getDevicePhotoList(); + } + } + }); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public void getDevicePhotoList() { + + String url = Contans.IP + Contans.getDevicePhotoListUrl+"/"+deviceId; + 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); + + + DeviceOnlineStatusImgBean bean = GsonToBean(result, DeviceOnlineStatusImgBean.class); + if(bean!=null && bean.getCode()==20000 && bean.isSuccess() && bean.getData()!=null && !bean.getData().isEmpty()){ + deviceOnlineStatusImgList.clear(); + deviceOnlineStatusImgList.addAll(bean.getData()); + + + } + } + + @Override + public void onFailed(int what, com.yolanda.nohttp.rest.Response response) { + showLog("数据加载失败"); + } + }); + } + + public void uploadDataByReport() { + finalList.clear(); + for (LocalMedia media : mData) { + if(media.getCompressPath()!=null){ + finalList.add(media.getCompressPath()); + }else{ + if(media.getSandboxPath()!=null){ + finalList.add(media.getSandboxPath()); + } + } + showLog(new Gson().toJson(media)); + } + + showLog(finalList.toString().toLowerCase()); + upLoadReport(); + } + + + + + //上传单条缺陷工单 + private void upLoadReport() { + String url = Contans.BASE_URL_AI_3D_SERVER + Contans.DAYLY_RISK_LIST_SUBMIT_REPORT; + showLog(url); + Request request = NoHttp.createStringRequest(url, RequestMethod.POST); + + showLog("-----------"); +// showLog(id); + showLog(username); + + request.add("reporterNo", username); +// request.add("level", level); +// request.add("type", type); +// request.add("ticketId", id); + request.add("content",etMs.getText().toString().trim()); + + + if (mData!=null&&mData.size()>0) { + + for (LocalMedia localMedia : mData) { + showLog(new Gson().toJson(localMedia)); + if(localMedia.getCompressPath()!=null){ + request.add("fileList", new File(localMedia.getCompressPath())); + }else{ + if(localMedia.getSandboxPath()!=null){ + request.add("fileList", new File(localMedia.getSandboxPath())); + } + } + } + } + + + if(Contans.BASE_URL_AI_3D_SERVER.equals(Contans.BASE_URL_AI_3D_SERVER_EXTRANET)){ + 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; + } + }); + } + } + + NohttpUtils.getInstance().add(this,0, request, new HttpListener() { + + @Override + public void onSucceed(int what, Response response) { + + showLog("----------------"); + String result = response.get(); + showLog(result); + + AIRiskListBaseBean aiRiskListBaseBean = GsonToBean(result, AIRiskListBaseBean.class); + if (aiRiskListBaseBean != null && aiRiskListBaseBean.isSuccess() && aiRiskListBaseBean.getCode()==20000) { + //弹框提示 + BaCheckDialog dialog = new BaCheckDialog(context,"提交汇报成功", new BaCheckDialog.AuditDialogListener() { + + @Override + public void confirm(String notice) { + finish(); + } + }); + dialog.show(); + } + } + + @Override + public void onFailed(int what, Response response) { + + } + },true,true,"请稍候..."); + } + + private void clearView() { + etMs.setText(""); + mAdapter.getData().clear(); + mAdapter.notifyDataSetChanged(); + } + + + private void initTakePhoto() { + launcherResult = createActivityResultLauncher(); + + //android 10 以上 + if (getExternalFilesDir(null) != null) { + path = Objects.requireNonNull(getExternalFilesDir(null)).getPath() + "/images"; + } else { + path = getFilesDir().getPath() + "/images"; + } + + clearImageDiskCache(DeviceOnlinePhotoManageActivity.this); + + FullyGridLayoutManager manager = new FullyGridLayoutManager(this, + 4, GridLayoutManager.VERTICAL, false); + recycle.setLayoutManager(manager); + RecyclerView.ItemAnimator itemAnimator = recycle.getItemAnimator(); + if (itemAnimator != null) { + ((SimpleItemAnimator) itemAnimator).setSupportsChangeAnimations(false); + } + recycle.addItemDecoration(new GridSpacingItemDecoration(4, + DensityUtil.dip2px(this, 8), false)); + mAdapter = new GridImageAdapter(this, mData); + mAdapter.setSelectMax(maxSelectNum); + recycle.setAdapter(mAdapter); + + + imageEngine = GlideEngine.createGlideEngine(); + selectorStyle = new PictureSelectorStyle(); + mAdapter.setOnItemClickListener(new GridImageAdapter.OnItemClickListener() { + @Override + public void onItemClick(View v, int position) { + showLog("onItemClick"); + // 预览图片、视频、音频 + PictureSelector.create(DeviceOnlinePhotoManageActivity.this) + .openPreview() + .setImageEngine(imageEngine) + .setVideoPlayerEngine(videoPlayerEngine) + .setSelectorUIStyle(selectorStyle) + .setLanguage(language) + .isAutoVideoPlay(false) + .isLoopAutoVideoPlay(false) + .isPreviewFullScreenMode(true) + .isVideoPauseResumePlay(false) + .setCustomLoadingListener(getCustomLoadingListener()) + .isPreviewZoomEffect(chooseMode != SelectMimeType.ofAudio(), recycle) + .setAttachViewLifecycle(new IBridgeViewLifecycle() { + @Override + public void onViewCreated(Fragment fragment, View view, Bundle savedInstanceState) { +// PictureSelectorPreviewFragment previewFragment = (PictureSelectorPreviewFragment) fragment; +// MediumBoldTextView tvShare = view.findViewById(R.id.tv_share); +// tvShare.setVisibility(View.VISIBLE) +// previewFragment.addAminViews(tvShare); +// ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) tvShare.getLayoutParams(); +// layoutParams.topMargin = cb_preview_full.isChecked() ? DensityUtil.getStatusBarHeight(getContext()) : 0; +// tvShare.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// PicturePreviewAdapter previewAdapter = previewFragment.getAdapter(); +// ViewPager2 viewPager2 = previewFragment.getViewPager2(); +// LocalMedia media = previewAdapter.getItem(viewPager2.getCurrentItem()); +// ToastUtils.showToast(fragment.getContext(), "自定义分享事件:" + viewPager2.getCurrentItem()); +// } +// }); + } + + @Override + public void onDestroy(Fragment fragment) { + //取消注册广播,防止内存泄漏 + //localBroadcastManager.unregisterReceiver( myReceiver ); +// if (cb_preview_full.isChecked()) { +// // 如果是全屏预览模式且是startFragmentPreview预览,回到自己的界面时需要恢复一下自己的沉浸式状态 +// // 以下提供2种解决方案: +// // 1.通过ImmersiveManager.immersiveAboveAPI23重新设置一下沉浸式 +// int statusBarColor = ContextCompat.getColor(getContext(), R.color.ps_color_grey); +// int navigationBarColor = ContextCompat.getColor(getContext(), R.color.ps_color_grey); +// ImmersiveManager.immersiveAboveAPI23(MainActivityJava.this, +// true, true, +// statusBarColor, navigationBarColor, false); +// // 2.让自己的titleBar的高度加上一个状态栏高度且内容PaddingTop下沉一个状态栏的高度 +// } + } + }) + .setInjectLayoutResourceListener(new OnInjectLayoutResourceListener() { + @Override + public int getLayoutResourceId(Context context, int resourceSource) { + return resourceSource == InjectResourceSource.PREVIEW_LAYOUT_RESOURCE + ? R.layout.ps_custom_fragment_preview + : InjectResourceSource.DEFAULT_LAYOUT_RESOURCE; + } + }) + .setExternalPreviewEventListener(new MyExternalPreviewEventListener()) + .setInjectActivityPreviewFragment(new OnInjectActivityPreviewListener() { + @Override + public PictureSelectorPreviewFragment onInjectPreviewFragment() { + return null; + } + }) + .startActivityPreview(position, true, mAdapter.getData()); + } + + @Override + public void openPicture() { + showLog("openPicture"); + // 进入相册 + PictureSelectionModel selectionModel = PictureSelector.create(DeviceOnlinePhotoManageActivity.this) + .openGallery(chooseMode) + .setSelectorUIStyle(selectorStyle) + .setImageEngine(imageEngine) + .setVideoPlayerEngine(videoPlayerEngine) + .setCropEngine(getCropFileEngine()) + .setCompressEngine(getCompressFileEngine()) + .setSandboxFileEngine(new MeSandboxFileEngine()) + .setCameraInterceptListener(getCustomCameraEvent()) + .setRecordAudioInterceptListener(new MeOnRecordAudioInterceptListener()) + .setSelectLimitTipsListener(new MeOnSelectLimitTipsListener()) + .setEditMediaInterceptListener(getCustomEditMediaEvent()) + .setPermissionDescriptionListener(getPermissionDescriptionListener()) + .setPreviewInterceptListener(getPreviewInterceptListener()) + .setPermissionDeniedListener(getPermissionDeniedListener()) + .setAddBitmapWatermarkListener(getAddBitmapWatermarkListener()) + .setVideoThumbnailListener(getVideoThumbnailEventListener()) + .isAutoVideoPlay(false) + .isLoopAutoVideoPlay(false) + .isPageSyncAlbumCount(true) + .setRecordVideoMaxSecond(10) + .setCustomLoadingListener(getCustomLoadingListener()) + .setQueryFilterListener(new OnQueryFilterListener() { + @Override + public boolean onFilter(LocalMedia media) { + return false; + } + }) + .setSelectionMode(SelectModeConfig.MULTIPLE) + .setLanguage(language) + .setOutputCameraDir(getSandboxCameraOutputPath()) + .setQuerySandboxDir(getSandboxCameraOutputPath()) + .isDisplayTimeAxis(true) + .isOnlyObtainSandboxDir(false) + .isPageStrategy(true) + .isOriginalControl(false) + .isDisplayCamera(true) + .isOpenClickSound(false) + .setSkipCropMimeType(getNotSupportCrop()) + .isFastSlidingSelect(true) + //.setOutputCameraImageFileName("luck.jpeg") + //.setOutputCameraVideoFileName("luck.mp4") + .isWithSelectVideoImage(true) + .isPreviewFullScreenMode(true) + .isVideoPauseResumePlay(false) + .isPreviewZoomEffect(true) + .isPreviewImage(true) + .isPreviewVideo(true) + .isPreviewAudio(true) + .setGridItemSelectAnimListener(null) + //.setQueryOnlyMimeType(PictureMimeType.ofGIF()) + .isMaxSelectEnabledMask(true) + .setMaxSelectNum(maxSelectNum) + .setMaxVideoSelectNum(maxSelectNum) + .setRecyclerAnimationMode(animationMode) + .isGif(false) + .setSelectedData(mAdapter.getData()); + forSelectResult(selectionModel); + } + }); + + } + + + + /** + * 清除图片磁盘缓存 + */ + public void clearImageDiskCache(Context context) { + try { + if (Looper.myLooper() == Looper.getMainLooper()) { + new Thread(new Runnable() { + @Override + public void run() { + Glide.get(context).clearDiskCache(); + } + }).start(); + } else { + Glide.get(context).clearDiskCache(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + private void forSelectResult(PictureSelectionModel model) { + model.forResult(launcherResult); + } + + + /** + * 处理选择结果 + * + * @param result + */ + private void analyticalSelectResults(ArrayList result) { + showLog("result"); + showLog(String.valueOf(result.size())); + mData = result; + for (LocalMedia media : result) { + if (media.getWidth() == 0 || media.getHeight() == 0) { + if (PictureMimeType.isHasImage(media.getMimeType())) { + MediaExtraInfo imageExtraInfo = MediaUtils.getImageSize(context, media.getPath()); + media.setWidth(imageExtraInfo.getWidth()); + media.setHeight(imageExtraInfo.getHeight()); + } + } + + Log.i(TAG, "文件名: " + media.getFileName()); + Log.i(TAG, "是否压缩:" + media.isCompressed()); + Log.i(TAG, "压缩:" + media.getCompressPath()); + Log.i(TAG, "初始路径:" + media.getPath()); + Log.i(TAG, "绝对路径:" + media.getRealPath()); + Log.i(TAG, "是否裁剪:" + media.isCut()); + Log.i(TAG, "裁剪路径:" + media.getCutPath()); + Log.i(TAG, "是否开启原图:" + media.isOriginal()); + Log.i(TAG, "原图路径:" + media.getOriginalPath()); + Log.i(TAG, "沙盒路径:" + media.getSandboxPath()); + Log.i(TAG, "水印路径:" + media.getWatermarkPath()); + Log.i(TAG, "视频缩略图:" + media.getVideoThumbnailPath()); + Log.i(TAG, "原始宽高: " + media.getWidth() + "x" + media.getHeight()); + Log.i(TAG, "裁剪宽高: " + media.getCropImageWidth() + "x" + media.getCropImageHeight()); + Log.i(TAG, "文件大小: " + PictureFileUtils.formatAccurateUnitFileSize(media.getSize())); + Log.i(TAG, "文件时长: " + media.getDuration()); + + if(media.getCompressPath()!=null){ + + ///storage/emulated/0/Android/data/com.rehome.dywoa/cache/luban_disk_cache/CMP_20240627183056629.jpg + ///storage/emulated/0/Android/data/com.rehome.dywoa/files/Pictures/IMG_20240628100106501.jpeg + Bitmap bitmap =BitmapFactory.decodeFile(media.getSandboxPath()); + Bitmap bitmap1 =BitmapFactory.decodeFile(media.getCompressPath()); + + if(bitmap!=null){ + showLog("沙盒宽高---------------"); + showLog("w:"+String.valueOf(bitmap.getWidth()) + " h:" + bitmap.getHeight()); + } + + if(bitmap1!=null){ + showLog("压缩宽高---------------"); + showLog("w:"+String.valueOf(bitmap1.getWidth()) + " h:" + bitmap1.getHeight()); + showLog("压缩文件大小---------------"); + File fileCompressPath=new File(media.getCompressPath()); + showLog("压缩文件大小: " + String.valueOf(fileCompressPath.length())); + } + } +// if(media.getCompressPath()==null&&media.getSandboxPath()!=null){ +// int indexOf = media.getSandboxPath().lastIndexOf("."); +// String postfix = indexOf != -1 ? media.getSandboxPath().substring(indexOf) : ".jpg"; +// String fileName = DateUtils.getCreateFileName("CMP_") + postfix; +// +// String dirPic = media.getSandboxPath().substring(0,media.getSandboxPath().lastIndexOf("/")); +// String outputPath = dirPic + File.separator+fileName; +// showLog(dirPic); +// showLog(outputPath); +// //167903 读取图片路径按比例大小压缩方法 w:614 h:819 +// Bitmap bitmap = BitmapCompressUtils.getimage(media.getSandboxPath()); +// //66759 图片用BITMAP按比例压缩 w:384 h:512 +// //Bitmap bitmap = BitmapCompressUtils.compressScale(BitmapFactory.decodeFile(media.getSandboxPath())); +// BitmapUtil.saveBitmap(outputPath,bitmap); +// File fileCompressPath=new File(outputPath); +// Log.i(TAG, "压缩文件大小: " + String.valueOf(fileCompressPath.length())); +// } + + + + //BitmapCompressUtils + +// String extensionName = FileUtils.getFileType(videoFileName); +// videoCompressFilePath = context.getExternalFilesDir(null).getPath() + "/Movies/" + UUID.randomUUID() + "_compress_video." + extensionName; +// showLog(videoCompressFilePath); +// if(chooseMode==chooseModeVideo){ +// VideoCompress.compressVideoLow(videoFilePath, videoCompressFilePath, new VideoCompress.CompressListener() { +// @Override +// public void onStart() { +// progressDialog.show(); +// } +// +// @Override +// public void onSuccess() { +// progressDialog.dismiss(); +// showLog(videoCompressFilePath); +// File file = new File(videoCompressFilePath); +// showLog("压缩后文件大小:"+String.valueOf(file.length())); +// +// } +// +// @Override +// public void onFail() { +// progressDialog.dismiss(); +// } +// +// @Override +// public void onProgress(float percent) { +// progressDialog.setProgress((int) percent); +// } +// }); +// } + + + } + + runOnUiThread(new Runnable() { + @Override + public void run() { + boolean isMaxSize = result.size() == mAdapter.getSelectMax(); + int oldSize = mAdapter.getData().size(); + mAdapter.notifyItemRangeRemoved(0, isMaxSize ? oldSize + 1 : oldSize); + mAdapter.getData().clear(); + mAdapter.getData().addAll(result); + mAdapter.notifyItemRangeInserted(0, result.size()); + } + }); + } + + /** + * 自定义loading + * + * @return + */ + private OnCustomLoadingListener getCustomLoadingListener() { + return null; + } + + /** + * 外部预览监听事件 + */ + private class MyExternalPreviewEventListener implements OnExternalPreviewEventListener { + + @Override + public void onPreviewDelete(int position) { + mAdapter.remove(position); + mAdapter.notifyItemRemoved(position); + } + + @Override + public boolean onLongPressDownload(LocalMedia media) { + return false; + } + } + + /** + * 裁剪引擎 + * + * @return + */ + private ImageFileCropEngine getCropFileEngine() { + return cb_crop.isChecked() ? new ImageFileCropEngine() : null; + } + + /** + * 自定义裁剪 + */ + private class ImageFileCropEngine implements CropFileEngine { + + @Override + public void onStartCrop(Fragment fragment, Uri srcUri, Uri destinationUri, ArrayList dataSource, int requestCode) { + UCrop.Options options = buildOptions(); + UCrop uCrop = UCrop.of(srcUri, destinationUri, dataSource); + uCrop.withOptions(options); + uCrop.setImageEngine(new UCropImageEngine() { + @Override + public void loadImage(Context context, String url, ImageView imageView) { + if (!ImageLoaderUtils.assertValidRequest(context)) { + return; + } + Glide.with(context).load(url).override(180, 180).into(imageView); + } + + @Override + public void loadImage(Context context, Uri url, int maxWidth, int maxHeight, OnCallbackListener call) { + Glide.with(context).asBitmap().load(url).override(maxWidth, maxHeight).into(new CustomTarget() { + @Override + public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition transition) { + if (call != null) { + call.onCall(resource); + } + } + + @Override + public void onLoadCleared(@Nullable Drawable placeholder) { + if (call != null) { + call.onCall(null); + } + } + }); + } + }); + uCrop.start(fragment.requireActivity(), fragment, requestCode); + } + } + + /** + * 配制UCrop,可根据需求自我扩展 + * + * @return + */ + private UCrop.Options buildOptions() { + UCrop.Options options = new UCrop.Options(); + options.setHideBottomControls(false); + options.setFreeStyleCropEnabled(false); + options.setShowCropFrame(true); + options.setShowCropGrid(true); + options.setCircleDimmedLayer(false); + options.withAspectRatio(0, 0); + options.setCropOutputPathDir(getSandboxPath()); + options.isCropDragSmoothToCenter(false); + options.setSkipCropMimeType(getNotSupportCrop()); + options.isForbidCropGifWebp(false); + options.isForbidSkipMultipleCrop(true); + options.setMaxScaleMultiplier(100); + if (selectorStyle != null && selectorStyle.getSelectMainStyle().getStatusBarColor() != 0) { + SelectMainStyle mainStyle = selectorStyle.getSelectMainStyle(); + boolean isDarkStatusBarBlack = mainStyle.isDarkStatusBarBlack(); + int statusBarColor = mainStyle.getStatusBarColor(); + options.isDarkStatusBarBlack(isDarkStatusBarBlack); + if (StyleUtils.checkStyleValidity(statusBarColor)) { + options.setStatusBarColor(statusBarColor); + options.setToolbarColor(statusBarColor); + } else { + options.setStatusBarColor(ContextCompat.getColor(context, com.luck.picture.lib.R.color.ps_color_grey)); + options.setToolbarColor(ContextCompat.getColor(context, com.luck.picture.lib.R.color.ps_color_grey)); + } + TitleBarStyle titleBarStyle = selectorStyle.getTitleBarStyle(); + if (StyleUtils.checkStyleValidity(titleBarStyle.getTitleTextColor())) { + options.setToolbarWidgetColor(titleBarStyle.getTitleTextColor()); + } else { + options.setToolbarWidgetColor(ContextCompat.getColor(context, com.luck.picture.lib.R.color.ps_color_white)); + } + } else { + options.setStatusBarColor(ContextCompat.getColor(context, com.luck.picture.lib.R.color.ps_color_grey)); + options.setToolbarColor(ContextCompat.getColor(context, com.luck.picture.lib.R.color.ps_color_grey)); + options.setToolbarWidgetColor(ContextCompat.getColor(context, com.luck.picture.lib.R.color.ps_color_white)); + } + return options; + } + + /** + * 创建自定义输出目录 + * + * @return + */ + private String getSandboxPath() { + File externalFilesDir = context.getExternalFilesDir(""); + File customFile = new File(externalFilesDir.getAbsolutePath(), "Sandbox"); + if (!customFile.exists()) { + customFile.mkdirs(); + } + return customFile.getAbsolutePath() + File.separator; + } + + private String[] getNotSupportCrop() { + //跳过裁剪GIF +// if (true) { +// return new String[]{PictureMimeType.ofGIF(), PictureMimeType.ofWEBP()}; +// } + return null; + } + + /** + * 压缩引擎 + * + * @return + */ + private ImageFileCompressEngine getCompressFileEngine() { + return cb_compress.isChecked() ? new ImageFileCompressEngine() : null; + } + + /** + * 自定义压缩 + */ + private static class ImageFileCompressEngine implements CompressFileEngine { + + @Override + public void onStartCompress(Context context, ArrayList source, OnKeyValueResultCallbackListener call) { + Luban.with(context).load(source).ignoreBy(100).setRenameListener(new OnRenameListener() { + @Override + public String rename(String filePath) { + int indexOf = filePath.lastIndexOf("."); + String postfix = indexOf != -1 ? filePath.substring(indexOf) : ".jpg"; + return DateUtils.getCreateFileName("CMP_") + postfix; + } + }).filter(new CompressionPredicate() { + @Override + public boolean apply(String path) { + if (PictureMimeType.isUrlHasImage(path) && !PictureMimeType.isHasHttp(path)) { + return true; + } + return !PictureMimeType.isUrlHasGif(path); + } + }).setCompressListener(new OnNewCompressListener() { + @Override + public void onStart() { + + } + + @Override + public void onSuccess(String source, File compressFile) { + if (call != null) { + call.onCallback(source, compressFile.getAbsolutePath()); + } + } + + @Override + public void onError(String source, Throwable e) { + if (call != null) { + call.onCallback(source, null); + } + } + }).launch(); + } + } + + /** + * 自定义沙盒文件处理 + */ + private static class MeSandboxFileEngine implements UriToFileTransformEngine { + + @Override + public void onUriToFileAsyncTransform(Context context, String srcPath, String mineType, OnKeyValueResultCallbackListener call) { + if (call != null) { + call.onCallback(srcPath, SandboxTransformUtils.copyPathToSandbox(context, srcPath, mineType)); + } + } + } + + /** + * 自定义相机事件 + * + * @return + */ + private OnCameraInterceptListener getCustomCameraEvent() { + return null; + } + + /** + * 录音回调事件 + */ + private static class MeOnRecordAudioInterceptListener implements OnRecordAudioInterceptListener { + + @Override + public void onRecordAudio(Fragment fragment, int requestCode) { + String[] recordAudio = {android.Manifest.permission.RECORD_AUDIO}; + if (PermissionChecker.isCheckSelfPermission(fragment.getContext(), recordAudio)) { + startRecordSoundAction(fragment, requestCode); + } else { + addPermissionDescription(false, (ViewGroup) fragment.requireView(), recordAudio); + PermissionChecker.getInstance().requestPermissions(fragment, + new String[]{android.Manifest.permission.RECORD_AUDIO}, new PermissionResultCallback() { + @Override + public void onGranted() { + removePermissionDescription((ViewGroup) fragment.requireView()); + startRecordSoundAction(fragment, requestCode); + } + + @Override + public void onDenied() { + removePermissionDescription((ViewGroup) fragment.requireView()); + } + }); + } + } + } + + /** + * 启动录音意图 + * + * @param fragment + * @param requestCode + */ + private static void startRecordSoundAction(Fragment fragment, int requestCode) { + Intent recordAudioIntent = new Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION); + if (recordAudioIntent.resolveActivity(fragment.requireActivity().getPackageManager()) != null) { + fragment.startActivityForResult(recordAudioIntent, requestCode); + } else { + ToastUtils.showToast(fragment.getContext(), "The system is missing a recording component"); + } + } + + /** + * 添加权限说明 + * + * @param viewGroup + * @param permissionArray + */ + private static void addPermissionDescription(boolean isHasSimpleXCamera, ViewGroup viewGroup, String[] permissionArray) { + int dp10 = DensityUtil.dip2px(viewGroup.getContext(), 10); + int dp15 = DensityUtil.dip2px(viewGroup.getContext(), 15); + MediumBoldTextView view = new MediumBoldTextView(viewGroup.getContext()); + view.setTag(TAG_EXPLAIN_VIEW); + view.setTextSize(14); + view.setTextColor(Color.parseColor("#333333")); + view.setPadding(dp10, dp15, dp10, dp15); + + String title; + String explain; + + if (TextUtils.equals(permissionArray[0], PermissionConfig.CAMERA[0])) { + title = "相机权限使用说明"; + explain = "相机权限使用说明\n用户app用于拍照/录视频"; + } else if (TextUtils.equals(permissionArray[0], Manifest.permission.RECORD_AUDIO)) { + if (isHasSimpleXCamera) { + title = "麦克风权限使用说明"; + explain = "麦克风权限使用说明\n用户app用于录视频时采集声音"; + } else { + title = "录音权限使用说明"; + explain = "录音权限使用说明\n用户app用于采集声音"; + } + } else { + title = "存储权限使用说明"; + explain = "存储权限使用说明\n用户app写入/下载/保存/读取/修改/删除图片、视频、文件等信息"; + } + int startIndex = 0; + int endOf = startIndex + title.length(); + SpannableStringBuilder builder = new SpannableStringBuilder(explain); + builder.setSpan(new AbsoluteSizeSpan(DensityUtil.dip2px(viewGroup.getContext(), 16)), startIndex, endOf, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); + builder.setSpan(new ForegroundColorSpan(0xFF333333), startIndex, endOf, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); + view.setText(builder); + view.setBackground(ContextCompat.getDrawable(viewGroup.getContext(), R.drawable.ps_demo_permission_desc_bg)); + + if (isHasSimpleXCamera) { + RelativeLayout.LayoutParams layoutParams = + new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT); + layoutParams.topMargin = DensityUtil.getStatusBarHeight(viewGroup.getContext()); + layoutParams.leftMargin = dp10; + layoutParams.rightMargin = dp10; + viewGroup.addView(view, layoutParams); + } else { + ConstraintLayout.LayoutParams layoutParams = + new ConstraintLayout.LayoutParams(ConstraintLayout.LayoutParams.MATCH_PARENT, ConstraintLayout.LayoutParams.WRAP_CONTENT); + layoutParams.topToBottom = R.id.title_bar; + layoutParams.leftToLeft = ConstraintSet.PARENT_ID; + layoutParams.leftMargin = dp10; + layoutParams.rightMargin = dp10; + viewGroup.addView(view, layoutParams); + } + } + + /** + * 移除权限说明 + * + * @param viewGroup + */ + private static void removePermissionDescription(ViewGroup viewGroup) { + View tagExplainView = viewGroup.findViewWithTag(TAG_EXPLAIN_VIEW); + viewGroup.removeView(tagExplainView); + } + + /** + * 拦截自定义提示 + */ + private static class MeOnSelectLimitTipsListener implements OnSelectLimitTipsListener { + + @Override + public boolean onSelectLimitTips(Context context, @Nullable LocalMedia media, PictureSelectionConfig config, int limitType) { + if (limitType == SelectLimitType.SELECT_MIN_SELECT_LIMIT) { + ToastUtils.showToast(context, "图片最少不能低于" + config.minSelectNum + "张"); + return true; + } else if (limitType == SelectLimitType.SELECT_MIN_VIDEO_SELECT_LIMIT) { + ToastUtils.showToast(context, "视频最少不能低于" + config.minVideoSelectNum + "个"); + return true; + } else if (limitType == SelectLimitType.SELECT_MIN_AUDIO_SELECT_LIMIT) { + ToastUtils.showToast(context, "音频最少不能低于" + config.minAudioSelectNum + "个"); + return true; + } + return false; + } + } + + /** + * 自定义编辑事件 + * + * @return + */ + private OnMediaEditInterceptListener getCustomEditMediaEvent() { + return cb_editor.isChecked() ? new MeOnMediaEditInterceptListener(getSandboxPath(), buildOptions()) : null; + } + + + /** + * 自定义编辑 + */ + private static class MeOnMediaEditInterceptListener implements OnMediaEditInterceptListener { + private final String outputCropPath; + private final UCrop.Options options; + + public MeOnMediaEditInterceptListener(String outputCropPath, UCrop.Options options) { + this.outputCropPath = outputCropPath; + this.options = options; + } + + @Override + public void onStartMediaEdit(Fragment fragment, LocalMedia currentLocalMedia, int requestCode) { + String currentEditPath = currentLocalMedia.getAvailablePath(); + Uri inputUri = PictureMimeType.isContent(currentEditPath) + ? Uri.parse(currentEditPath) : Uri.fromFile(new File(currentEditPath)); + Uri destinationUri = Uri.fromFile( + new File(outputCropPath, DateUtils.getCreateFileName("CROP_") + ".jpeg")); + UCrop uCrop = UCrop.of(inputUri, destinationUri); + options.setHideBottomControls(false); + uCrop.withOptions(options); + uCrop.setImageEngine(new UCropImageEngine() { + @Override + public void loadImage(Context context, String url, ImageView imageView) { + if (!ImageLoaderUtils.assertValidRequest(context)) { + return; + } + Glide.with(context).load(url).override(180, 180).into(imageView); + } + + @Override + public void loadImage(Context context, Uri url, int maxWidth, int maxHeight, OnCallbackListener call) { + Glide.with(context).asBitmap().load(url).override(maxWidth, maxHeight).into(new CustomTarget() { + @Override + public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition transition) { + if (call != null) { + call.onCall(resource); + } + } + + @Override + public void onLoadCleared(@Nullable Drawable placeholder) { + if (call != null) { + call.onCall(null); + } + } + }); + } + }); + uCrop.startEdit(fragment.requireActivity(), fragment, requestCode); + } + } + + /** + * 权限说明 + * + * @return + */ + private OnPermissionDescriptionListener getPermissionDescriptionListener() { + return null; + } + + /** + * 自定义预览 + * + * @return + */ + private OnPreviewInterceptListener getPreviewInterceptListener() { + return null; + } + + /** + * 权限拒绝后回调 + * + * @return + */ + private OnPermissionDeniedListener getPermissionDeniedListener() { + return null; + } + + /** + * 给图片添加水印 + */ + private OnBitmapWatermarkEventListener getAddBitmapWatermarkListener() { + return null; + } + + /** + * 处理视频缩略图 + */ + private OnVideoThumbnailEventListener getVideoThumbnailEventListener() { + return null; + } + + /** + * 创建相机自定义输出目录 + * + * @return + */ + private String getSandboxCameraOutputPath() { + return ""; + } + + /** + * 创建一个ActivityResultLauncher + * + * @return + */ + private ActivityResultLauncher createActivityResultLauncher() { + return registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), + new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + int resultCode = result.getResultCode(); + if (resultCode == RESULT_OK) { + ArrayList selectList = PictureSelector.obtainSelectorList(result.getData()); + analyticalSelectResults(selectList); + } + } + }); + } +} diff --git a/app/src/main/java/com/rehome/zhdcoa/ui/activity/DeviceOnlineStatusListActivity.kt b/app/src/main/java/com/rehome/zhdcoa/ui/activity/DeviceOnlineStatusListActivity.kt index dd8eb3a..b4e3794 100644 --- a/app/src/main/java/com/rehome/zhdcoa/ui/activity/DeviceOnlineStatusListActivity.kt +++ b/app/src/main/java/com/rehome/zhdcoa/ui/activity/DeviceOnlineStatusListActivity.kt @@ -1,20 +1,15 @@ package com.rehome.zhdcoa.ui.activity -import android.os.Bundle +import android.content.Intent import android.text.TextUtils import android.view.View import android.widget.ArrayAdapter -import androidx.activity.enableEdgeToEdge -import androidx.appcompat.app.AppCompatActivity -import androidx.core.view.ViewCompat -import androidx.core.view.WindowInsetsCompat +import com.google.gson.GsonBuilder +import com.google.gson.reflect.TypeToken import com.rehome.zhdcoa.Contans -import com.rehome.zhdcoa.Listener.OnItemClickListener import com.rehome.zhdcoa.R -import com.rehome.zhdcoa.adapter.DeviceAlarmInfoAdapter import com.rehome.zhdcoa.adapter.DeviceOnlineStatusListAdapter import com.rehome.zhdcoa.base.BaseActivityOaToolbarViewBinding -import com.rehome.zhdcoa.bean.DeviceAlarmListResultBean import com.rehome.zhdcoa.bean.DeviceOnlineStatusListResultBean import com.rehome.zhdcoa.databinding.ActivityDeviceOnlineStatusListBinding import com.rehome.zhdcoa.utils.AuthenticationLoginAIUtils @@ -23,11 +18,11 @@ import com.rehome.zhdcoa.utils.HttpListener import com.rehome.zhdcoa.utils.NohttpUtils import com.rehome.zhdcoa.utils.RSAAndroid import com.rehome.zhdcoa.weiget.LoadListView -import com.rehome.zhdcoa.weiget.OAToolbar import com.yolanda.nohttp.NoHttp import com.yolanda.nohttp.RequestMethod import com.yolanda.nohttp.rest.Response + class DeviceOnlineStatusListActivity : BaseActivityOaToolbarViewBinding() { val typeList = mutableListOf("VIBRATION", "OIL", "FUEL", "THERMAL_IMAGER", "VIBRATION_ZB") @@ -67,11 +62,37 @@ class DeviceOnlineStatusListActivity : BaseActivityOaToolbarViewBinding run { val item = dataList[position] showLog(GsonUtils.GsonString(item)) + val type = object : TypeToken>() {}.type + val mapItem: Map? = gson.fromJson(GsonUtils.GsonString(item), type) + if(mapItem!=null){ + //val typeTemp:String = binding.spZy.selectedItem.toString() + val typeIndex:Int = binding.spZy.selectedItemPosition + //request.add("type",typeList[typeIndex]) + val intent = Intent(context,DeviceOnlinePhotoManageActivity::class.java) + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP) + intent.putExtra("deviceName", mapItem["name"].toString()) + if(typeIndex==0){ + intent.putExtra("deviceId", mapItem["id"].toString()) + } + if(typeIndex==4){ + intent.putExtra("deviceId", mapItem["deviceCode"].toString()) + } + startActivity(intent) + } + + //DeviceOnlinePhotoManageActivity + //R.layout.activity_device_online_photo_manage } } binding.lv.adapter = deviceOnlineStatusListAdapter diff --git a/app/src/main/res/layout/activity_device_online_photo_manage.xml b/app/src/main/res/layout/activity_device_online_photo_manage.xml new file mode 100644 index 0000000..28b19a2 --- /dev/null +++ b/app/src/main/res/layout/activity_device_online_photo_manage.xml @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file