package com.ckkj.water.index; import android.Manifest; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.ckkj.water.AppConfig; import com.ckkj.water.R; import com.ckkj.water.base.BaseFragment; import com.ckkj.water.custom.view.CustomRefreshHeader; import com.ckkj.water.databinding.IndexFragmentLayoutBinding; import com.ckkj.water.device.AddDeviceActivity; import com.ckkj.water.device.AddDeviceActivity_copy; import com.ckkj.water.device.DeviceControlActivity; import com.ckkj.water.history.entity.WateringRecord; import com.ckkj.water.index.adapter.DeviceAdapter; import com.ckkj.water.index.entity.WaterDeviceEntity; import com.ckkj.water.index.mvp.IndexContract; import com.ckkj.water.index.mvp.IndexImpl; import com.ckkj.water.index.mvp.IndexPresenter; import com.ckkj.water.network.BaseBean; import com.ckkj.water.permission.PermissionActivity; import com.ckkj.water.plan.entity.WaterPlanWeekEntity; import com.ckkj.water.utils.show.ToastUtil; import com.maning.mlkitscanner.scan.MNScanManager; import com.maning.mlkitscanner.scan.callback.act.MNScanCallback; import com.scwang.smart.refresh.footer.ClassicsFooter; import com.scwang.smart.refresh.layout.api.RefreshHeader; import java.util.ArrayList; import java.util.List; import pub.devrel.easypermissions.EasyPermissions; public class IndexFragment extends BaseFragment implements IndexContract.IndexView , EasyPermissions.PermissionCallbacks{ private DeviceAdapter deviceAdapter; private List devList = new ArrayList<>(); private int mCurrentPage = 1; @Override protected void initArgs(Bundle bundle) { } @Override protected void onResumeInitData() { super.onResumeInitData(); if(AppConfig.USER_LOGIN){ showLoadingDialog(); mPresenter.getDevicesList(mCurrentPage); } } @Override public void initData(@Nullable Bundle savedInstanceState) { // 设置自定义刷新头 RefreshHeader header = new CustomRefreshHeader(mContext); viewBinding.refresh.setRefreshHeader(header); viewBinding.refresh.setRefreshFooter(new ClassicsFooter(mContext)); viewBinding.refresh.setOnRefreshListener(layout -> { mCurrentPage = 1; mPresenter.getDevicesList(mCurrentPage); }); viewBinding.refresh.setOnLoadMoreListener(layout -> { mCurrentPage++; mPresenter.getDevicesList(mCurrentPage); }); } @Override public IndexPresenter createPresenter() { return new IndexPresenter(new IndexImpl()); } @Override protected void initView() { super.initView(); setupRecyclerView(); initListener(); } private void initListener() { setClick(viewBinding.imgScan); setClick(viewBinding.imgAdd); } private void setClick(View view) { view.setOnClickListener(this::onClick); } public void onClick(View v){ switch (v.getId()){ case R.id.img_scan: //检测有无相机权限 String readPermission = Manifest.permission.CAMERA; if(!hasRecordPermission(readPermission)){ getPermissionRequst(readPermission,"权限申请", "智能浇水需要您的授权访问相机,并使用扫一扫",REQUEST_EVENT_CODE_10001); }else{ scanQrcode(); } break; case R.id.img_add: String permission = Manifest.permission.ACCESS_FINE_LOCATION; boolean hasPermission = hasRecordPermission(permission); if(!hasPermission){ goTo(mContext, PermissionActivity.class,null); }else{ goTo(mContext, AddDeviceActivity_copy.class,null); } break; } } private void scanQrcode() { //默认扫描 MNScanManager.startScan(mContext, new MNScanCallback() { @Override public void onActivityResult(int resultCode, Intent data) { switch (resultCode) { case MNScanManager.RESULT_SUCCESS: ArrayList results = data.getStringArrayListExtra(MNScanManager.INTENT_KEY_RESULT_SUCCESS); if(results != null){ ToastUtil.showShort(mContext,results.get(0).toString()); } break; case MNScanManager.RESULT_FAIL: String resultError = data.getStringExtra(MNScanManager.INTENT_KEY_RESULT_ERROR); break; case MNScanManager.RESULT_CANCLE: ToastUtil.showShort(mContext,"取消扫码"); break; } } }); } private void setupRecyclerView() { deviceAdapter = new DeviceAdapter(mContext,R.layout.index_device_list_item,devList); viewBinding.rvDevices.setAdapter(deviceAdapter); deviceAdapter.setOnItemClickListener((adapter, view, position) -> { Bundle bundle = new Bundle(); bundle.putSerializable("device_info",devList.get(position)); goTo(mContext, DeviceControlActivity.class,bundle); }); } /** * 获取设备列表成功 */ @Override public void getDeviceListSuccess(List list, int total) { hideDialogLoading(); List pageList = list == null ? new ArrayList<>() : list; if (mCurrentPage == 1) { viewBinding.refresh.finishRefresh(300); devList.clear(); // 只在刷新时清除 devList = pageList; } else { viewBinding.refresh.finishLoadMore(300); devList.addAll(pageList); } deviceAdapter.setNewData(devList); // 4. 判断是否还有更多数据 if (deviceAdapter.getItemCount() >= total || pageList.size() == 0) { // 使用 post 延迟调用,避免内部状态冲突导致的循环调用 viewBinding.refresh.postDelayed(() -> viewBinding.refresh.setNoMoreData(true), 300); viewBinding.relNoMore.setVisibility(View.VISIBLE); // 自定义底部提示"暂无更多数据" } else { viewBinding.refresh.setNoMoreData(false); viewBinding.relNoMore.setVisibility(View.GONE); } // 5. 控制空布局和内容显示 if (deviceAdapter.getItemCount() != 0) { viewBinding.refresh.setVisibility(View.VISIBLE); viewBinding.relNoresult.setVisibility(View.GONE); } else { viewBinding.refresh.setVisibility(View.GONE); viewBinding.relNoresult.setVisibility(View.VISIBLE); } } @Override public void onDestroyView() { super.onDestroyView(); } @Override public void onNetChange(int netModel) { } @Override public void showError(String message) { hideDialogLoading(); ToastUtil.showShort(mContext,message); } @Override public void logOut(BaseBean bean) { } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this); hidePermissionDialog(); if (requestCode == REQUEST_EVENT_CODE_10001) { scanQrcode(); } } }