From 12d6db5780d8a2121a3bef2d58bf897b24ff552a Mon Sep 17 00:00:00 2001 From: mac <user@users-MacBook-Pro.local> Date: 星期三, 12 六月 2024 15:54:29 +0800 Subject: [PATCH] Merge branch 'dev' --- app/src/main/java/com/hdl/photovoltaic/ui/powerstation/DeviceSearchActivity.java | 495 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 495 insertions(+), 0 deletions(-) diff --git a/app/src/main/java/com/hdl/photovoltaic/ui/powerstation/DeviceSearchActivity.java b/app/src/main/java/com/hdl/photovoltaic/ui/powerstation/DeviceSearchActivity.java new file mode 100644 index 0000000..2f3bfd8 --- /dev/null +++ b/app/src/main/java/com/hdl/photovoltaic/ui/powerstation/DeviceSearchActivity.java @@ -0,0 +1,495 @@ +package com.hdl.photovoltaic.ui.powerstation; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; + +import android.content.Context; +import android.os.Bundle; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.view.View; +import android.view.inputmethod.InputMethodManager; + +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.hdl.linkpm.sdk.core.exception.HDLException; +import com.hdl.photovoltaic.R; +import com.hdl.photovoltaic.base.CustomBaseActivity; +import com.hdl.photovoltaic.bean.PageNumberObject; +import com.hdl.photovoltaic.config.UserConfigManage; +import com.hdl.photovoltaic.databinding.ActivityDeviceSearchBinding; +import com.hdl.photovoltaic.enums.ShowErrorMode; +import com.hdl.photovoltaic.listener.CloudCallBeak; +import com.hdl.photovoltaic.other.HdlCommonLogic; +import com.hdl.photovoltaic.other.HdlDeviceLogic; +import com.hdl.photovoltaic.other.HdlFileLogic; +import com.hdl.photovoltaic.other.HdlLogLogic; +import com.hdl.photovoltaic.other.HdlThreadLogic; +import com.hdl.photovoltaic.other.HdlUniLogic; +import com.hdl.photovoltaic.ui.adapter.DeviceInfoAdapter; +import com.hdl.photovoltaic.ui.adapter.SearchDeviceAdapter; +import com.hdl.photovoltaic.ui.adapter.SearchHistoryAdapter; +import com.hdl.photovoltaic.ui.bean.CloudInverterDeviceBean; +import com.hdl.photovoltaic.uni.HDLUniMP; +import com.hdl.photovoltaic.utils.KeyboardStateObserverUtils; +import com.hdl.photovoltaic.utils.URLEncodingUtils; +import com.hdl.sdk.link.core.bean.gateway.GatewayBean; +import com.hdl.sdk.link.core.config.HDLLinkConfig; +import com.hdl.sdk.link.gateway.HDLLinkLocalGateway; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +/** + * 璁惧鎼滅储鐣岄潰 + */ +public class DeviceSearchActivity extends CustomBaseActivity { + + + private ActivityDeviceSearchBinding viewBinding; + + SearchDeviceAdapter searchDeviceAdapter;//璁惧閫傞厤鍣� + SearchHistoryAdapter searchHistoryAdapter;//鍘嗗彶璁板綍閫傞厤鍣� + + private List<CloudInverterDeviceBean> deviceList = new ArrayList<>(); + + private int currentHouseListPage = 0; // 褰撳墠鐢电珯鍒楄〃椤电爜 + private int currentHouseListTotal = 0; // 鐢电珯鍒楄〃鎬婚〉鐮� + private boolean isHouseLoadingMore = false; // 鏍囪鐢电珯鍒楄〃姝e湪鍔犺浇鏇村鏁版嵁 + + private String currSearchText; + + List<String> searchHistoryTitleList = new ArrayList<>(); + + @Override + public Object getContentView() { + viewBinding = ActivityDeviceSearchBinding.inflate(getLayoutInflater()); + return viewBinding.getRoot(); + } + + @Override + public void onBindView(Bundle savedInstanceState) { + setStatusBarTranslucent(); + //鍘嗗彶璁板綍鏂囦欢澶瑰垱寤� + HdlFileLogic.getInstance().createFileDir(HdlFileLogic.getInstance().getCurrentUserRootPath()); + //鍒濆鍖栨暟鎹� + initData(); + //鍒濆鍖� + initView(); + //鍒濆鍖栫晫闈㈢洃鍚櫒 + initEvent(); + } + + private void initData() { + try { + String json = HdlFileLogic.getInstance().readFile(getHistoryFileNamePath()); + if (TextUtils.isEmpty(json)) { + return; + } + searchHistoryTitleList = new Gson().fromJson(json, new TypeToken<List<String>>() { + }.getType()); + } catch (Exception ignored) { + } + } + + + private void initEvent() { + + //鍚庨�� + viewBinding.backRl.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + viewBinding.powerStationSearchEt.addTextChangedListener(textWatcher); + + + //鎼滅储 + viewBinding.powerStationSearchTv.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //鎼滅储鍏抽敭瀛� + currSearchText = viewBinding.powerStationSearchEt.getText().toString().replace(" ", ""); + if (TextUtils.isEmpty(currSearchText)) { + HdlThreadLogic.toast(_mActivity, R.string.search_content_null); + return; + } + viewBinding.powerStationSearchEt.clearFocus(); + hideSoftInputFromWindow(); + viewBinding.historyListParent.setVisibility(View.GONE); + viewBinding.listParent.setVisibility(View.VISIBLE); + addSearchTextToList(); + loadNextPageHouseList(true, 1, true); + } + }); + + + //涓嬫媺绠ご棰滆壊 + viewBinding.listSrl.setColorSchemeResources(R.color.text_FF245EC3); + //涓嬫媺璇诲彇 + viewBinding.listSrl.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { + @Override + public void onRefresh() { + viewBinding.listSrl.setRefreshing(false); + loadNextPageHouseList(true, 1, true); + } + }); + //涓婃媺璇诲彇 + viewBinding.listRcv.addOnScrollListener(new RecyclerView.OnScrollListener() { + @Override + public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { + LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager(); + if (layoutManager == null) { + return; + } + int visibleItemCount = layoutManager.getChildCount(); + int totalItemCount = layoutManager.getItemCount(); + int firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition(); + if (visibleItemCount > 0 && visibleItemCount + firstVisibleItemPosition == totalItemCount) { + if (!isHouseLoadingMore) { + // 婊戝姩鍒颁簡搴曢儴锛屾墽琛岀浉搴旂殑鎿嶄綔 + HdlLogLogic.print("--->婊戝姩鍒颁簡搴曢儴"); + loadNextPageHouseList(false, ++currentHouseListPage, false); + } + } + } + }); + //娓呴櫎 + viewBinding.powerStationClearIv.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + currSearchText = ""; + viewBinding.powerStationSearchEt.setText(""); + viewBinding.historyListParent.setVisibility(View.VISIBLE); + viewBinding.listParent.setVisibility(View.GONE); + viewBinding.deviceNullDataIc.getRoot().setVisibility(View.GONE); + searchHistoryAdapter.setList(searchHistoryTitleList); + clearData(); + viewBinding.powerStationSearchEt.requestFocus(); + showSoftInput(); + } + }); + //鍒犻櫎 + viewBinding.powerStationDelIv.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.powerStationSearchEt.clearFocus(); + hideSoftInputFromWindow(); + searchHistoryTitleList = new ArrayList<>(); + searchHistoryAdapter.setList(searchHistoryTitleList); + viewBinding.deviceNullDataIc.getRoot().setVisibility(View.GONE); + HdlFileLogic.getInstance().deleteFile(getHistoryFileNamePath()); + + } + }); + //鍘嗗彶璁板綍鐐瑰嚮浜嬩欢 + searchHistoryAdapter.setOnclickListener(new SearchHistoryAdapter.OnClickListener() { + @Override + public void onClick(int position, String title) { + viewBinding.powerStationSearchEt.setText(title); + //鎼滅储鍏抽敭瀛� + currSearchText = viewBinding.powerStationSearchEt.getText().toString().replace(" ", ""); + if (TextUtils.isEmpty(currSearchText)) { + HdlThreadLogic.toast(_mActivity, R.string.search_content_null); + return; + } + viewBinding.powerStationSearchEt.clearFocus(); + hideSoftInputFromWindow(); + viewBinding.historyListParent.setVisibility(View.GONE); + viewBinding.listParent.setVisibility(View.VISIBLE); + addSearchTextToList(); + loadNextPageHouseList(true, 1, true); + } + }); + //璁惧鐐瑰嚮鏄簨浠� + searchDeviceAdapter.setOnclickListener(new DeviceInfoAdapter.OnClickListener() { + @Override + public void onClick(int position, CloudInverterDeviceBean deviceBean) { + if (deviceBean.getDeviceStatus() == 4) { + HdlThreadLogic.toast(_mActivity, R.string.device_off); + return; + } + //閰嶇疆鏈湴閫氫俊鐨勪俊鎭� + HDLLinkConfig.getInstance().setHomeId(deviceBean.getHomeId()); + HDLLinkConfig.getInstance().setLocalSecret(deviceBean.getLocalSecret()); + List<CloudInverterDeviceBean> newList = new ArrayList<>(); + newList.add(deviceBean); + //鐩殑鏄负浜嗚幏鍙栨嬁鍒扮綉鍏矷D锛宮qtt閫氳绉橀挜绛変俊鎭紝鎷垮埌鍚庣紦瀛樺埌鏈湴閫嗗彉鍣ㄥ垪琛ㄩ噷闈紝鍙戦�佹暟鎹暟鎹椂鑷姩鍘荤紦瀛樺垪琛ㄩ噷闈㈠幓鏌ユ壘锛� + HdlDeviceLogic.getInstance().setDeviceRemoteInfo(newList, deviceBean.getHomeId(), new CloudCallBeak<List<GatewayBean>>() { + @Override + public void onSuccess(List<GatewayBean> obj) { + GatewayBean newGatewayBean = HDLLinkLocalGateway.getInstance().getLocalGateway(deviceBean.getOsn()); + String jsonEncryption = URLEncodingUtils.encodeURIComponent(new Gson().toJson(newGatewayBean)); + String path = HDLUniMP.UNI_EVENT_OPEN_DEVICE_DETAILS + "?inverterInfo=" + jsonEncryption; + HdlUniLogic.getInstance().openUniMP(path, null); + } + + @Override + public void onFailure(HDLException e) { + + } + }); + } + }); + + } + + + private void initView() { + viewBinding.historyListParent.setVisibility(View.VISIBLE); + viewBinding.listParent.setVisibility(View.GONE); + viewBinding.powerStationClearIv.setVisibility(View.GONE); + //鍒濆鍖栧巻鍙茶褰曢�傞厤鍣� + searchHistoryAdapter = new SearchHistoryAdapter(_mActivity); + viewBinding.historyListRcv.setLayoutManager(new LinearLayoutManager(_mActivity)); + viewBinding.historyListRcv.setAdapter(searchHistoryAdapter); + searchHistoryAdapter.setList(searchHistoryTitleList); + //鍒濆鍖栫數绔欓�傞厤鍣� + searchDeviceAdapter = new SearchDeviceAdapter(_mActivity); + viewBinding.listRcv.setLayoutManager(new LinearLayoutManager(_mActivity)); + viewBinding.listRcv.setAdapter(searchDeviceAdapter); + viewBinding.powerStationSearchEt.post(new Runnable() { + @Override + public void run() { + viewBinding.powerStationSearchEt.requestFocus(); + } + }); + + //鍦ㄧ晫闈腑浣跨敤 + KeyboardStateObserverUtils.getKeyboardStateObserver(_mActivity).setKeyboardVisibilityListener(new KeyboardStateObserverUtils.OnKeyboardVisibilityListener() { + @Override + public void onKeyboardShow(int h) { + //Toast.makeText(MainActivity.this,"閿洏寮瑰嚭",Toast.LENGTH_SHORT).show(); +// viewBinding.powerStationSearchEt.requestFocus(); + + } + + @Override + + public void onKeyboardHide(int h) { + viewBinding.powerStationSearchEt.clearFocus(); + } + + }); + } + + /** + * 鏄剧ず杞敭鐩� + */ + public void showSoftInput() { + InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputMethodManager.showSoftInput(viewBinding.powerStationSearchEt, 0); + + } + + /** + * 闅愯棌杞敭鐩� + */ + public void hideSoftInputFromWindow() { + InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputMethodManager.hideSoftInputFromWindow(viewBinding.getRoot().getWindowToken(), 0); + } + + /** + * 杈撳叆鐢电珯鍚嶇О杩涜杩囨护 + */ + private final TextWatcher textWatcher = new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + } + + @Override + public void afterTextChanged(Editable s) { + String et = viewBinding.powerStationSearchEt.getText().toString().replace(" ", ""); + if (TextUtils.isEmpty(et)) { + viewBinding.powerStationClearIv.setVisibility(View.GONE); + } else { + viewBinding.powerStationClearIv.setVisibility(View.VISIBLE); + } + viewBinding.powerStationSearchEt.setSelection(viewBinding.powerStationSearchEt.length()); + + } + }; + + /** + * 鐗╃悊鎸夐敭杩斿洖浜嬩欢 + */ + @Override + public void onBackPressed() { + super.onBackPressed(); + } + + @Override + protected void onDestroy() { + viewBinding.powerStationSearchEt.removeTextChangedListener(textWatcher); + if (searchHistoryTitleList.size() > 0) { + HdlFileLogic.getInstance().deleteFile(getHistoryFileNamePath()); + HdlFileLogic.getInstance().appendFile(getHistoryFileNamePath(), new Gson().toJson(searchHistoryTitleList)); + } + super.onDestroy(); + } + + /** + * 鍒锋柊UI锛堣澶囷級 + * + * @param isRefreshing 琛ㄧず鏄笅鎷夊埛鏂扮殑 + */ + private void loadNextPageHouseList(boolean isRefreshing, long pageNo, boolean isClear) { + + //鎼滅储鍏抽敭瀛� + if (TextUtils.isEmpty(currSearchText)) { + return; + } + + if (isClear) { + clearData(); + } + //绗竴椤佃鍙栨暟鎹己鍒惰鍙� + if (pageNo > 1 && currentHouseListPage > currentHouseListTotal) { + --currentHouseListPage; + //褰撳墠椤典笉鑳藉ぇ浜庢�婚〉鏁� + return; + } + isHouseLoadingMore = true;//鏍囪璇诲彇鐘舵�� + if (isRefreshing) { + showLoading(); + } + + //鑾峰彇浜戠涓婅澶囧垪琛� + HdlDeviceLogic.getInstance().getPowerStationDeviceList(currSearchText, pageNo, 20, new CloudCallBeak<PageNumberObject<CloudInverterDeviceBean>>() { + @Override + public void onSuccess(PageNumberObject<CloudInverterDeviceBean> deviceClass) { + HdlThreadLogic.runMainThread(new Runnable() { + @Override + public void run() { + if (isRefreshing) { + hideLoading(); + } + isHouseLoadingMore = false; + if (deviceClass != null) { + currentHouseListTotal = (int) deviceClass.getTotalPage(); + currentHouseListPage = (int) deviceClass.getPageNo(); + //鏇存柊缂撳瓨 + setDeviceList(deviceClass.getList()); + if (searchDeviceAdapter != null) { + //鏇存柊UI + searchDeviceAdapter.setList(deviceList); + } + nullDataUpdateUi(); + } + } + }, _mActivity, ShowErrorMode.YES); + + } + + @Override + public void onFailure(HDLException e) { + HdlThreadLogic.runMainThread(new Runnable() { + @Override + public void run() { + if (currentHouseListPage > 1) { + --currentHouseListPage; + } + isHouseLoadingMore = false; + if (isRefreshing) { + hideLoading(); + } + + } + }, _mActivity, ShowErrorMode.YES); + } + }); + } + + private void clearData() { + if (deviceList != null && deviceList.size() > 0) { + deviceList.clear(); + } + } + + public void setDeviceList(List<CloudInverterDeviceBean> list) { + if (list == null || list.size() == 0) { + return; + } + if (this.deviceList.size() == 0) { + this.deviceList.addAll(list); + return; + } + for (int i = 0; i < list.size(); i++) { + this.setSingleDevice(list.get(i)); + } + } + + /** + * 娣诲姞璁惧鍒板垪琛ㄩ噷闈� + * + * @param deviceBean -璁惧瀵硅薄 + */ + public void setSingleDevice(CloudInverterDeviceBean deviceBean) { + try { + if (deviceBean == null) { + return; + } + boolean if_boolean = false; + for (int i = 0; i < deviceList.size(); i++) { + if (deviceList.get(i).getOsn().equals(deviceBean.getOsn())) { + //瀛樺湪鏇挎崲 + deviceList.remove(i); + deviceList.add(i, deviceBean); + if_boolean = true; + break; + } + } + if (!if_boolean) { + //娌℃湁娣诲姞 + this.deviceList.add(deviceBean); + } + } catch (Exception e) { + String mes = e.getMessage(); + HdlLogLogic.print("--->" + mes); + } + } + + + /** + * 娌℃湁璁惧鍒楄〃鐨勬牱寮� + */ + private void nullDataUpdateUi() { + boolean is_data = deviceList != null && deviceList.size() > 0; + HdlCommonLogic.getInstance().nullDataUpdateUi(_mActivity, viewBinding.deviceNullDataIc.getRoot(), viewBinding.deviceNullDataIc.nullDataGifAnimationIv, viewBinding.deviceNullDataIc.nullDataTv, getString(R.string.no_equipment), is_data); + } + + /** + * 娣诲姞鍘嗗彶璁板綍 + */ + private void addSearchTextToList() { + for (int i = 0; i < searchHistoryTitleList.size(); i++) { + if (searchHistoryTitleList.get(i).equals(currSearchText)) { + searchHistoryTitleList.remove(searchHistoryTitleList.get(i)); + } + } + int maxValue = 10; + searchHistoryTitleList.add(0, currSearchText); + if (searchHistoryTitleList.size() > maxValue) { + //鍘嗗彶璁板綍涓嶈兘瓒呭嚭10 + searchHistoryTitleList.remove(searchHistoryTitleList.get(maxValue)); + } + } + + /** + * 鑾峰彇銆愭悳绱㈠巻鍙茶褰曟枃浠躲�戝叏璺緞 + */ + public String getHistoryFileNamePath() { + return HdlFileLogic.getInstance().getCurrentUserRootPath() + "/house_device.txt"; + } +} \ No newline at end of file -- Gitblit v1.8.0