package com.hdl.photovoltaic.ui.message; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; import android.view.View; import android.view.inputmethod.InputMethodManager; import androidx.recyclerview.widget.LinearLayoutManager; 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.config.ConstantManage; import com.hdl.photovoltaic.databinding.ActivityHouseSearchBinding; import com.hdl.photovoltaic.enums.HomepageTitleTabSwitch; import com.hdl.photovoltaic.listener.CloudCallBeak; import com.hdl.photovoltaic.other.HdlCommonLogic; import com.hdl.photovoltaic.other.HdlFileLogic; import com.hdl.photovoltaic.other.HdlLogLogic; import com.hdl.photovoltaic.other.HdlMessageLogic; import com.hdl.photovoltaic.other.HdlThreadLogic; import com.hdl.photovoltaic.ui.adapter.MessageHouseAdapter; import com.hdl.photovoltaic.ui.adapter.SearchHistoryAdapter; import com.hdl.photovoltaic.ui.bean.MessageBean; import com.hdl.photovoltaic.utils.KeyboardStateObserverUtils; import com.hdl.photovoltaic.widget.refreshlayout.BGARefreshLayout; import com.hdl.photovoltaic.widget.refreshlayout.HDLRefreshViewHolder; import com.hdl.sdk.link.core.bean.eventbus.BaseEventBus; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import java.util.ArrayList; import java.util.List; /** * 搜索电站消息 */ public class SearchMessageHouseActivity extends CustomBaseActivity { private ActivityHouseSearchBinding viewBinding; private Handler handler; private Runnable delayedRunnable; SearchHistoryAdapter searchHistoryAdapter; MessageHouseAdapter searchMessageHouseAdapter; List mList = new ArrayList<>(); List searchHistoryTitleList = new ArrayList<>(); private String currSearchText; @Override public Object getContentView() { viewBinding = ActivityHouseSearchBinding.inflate(getLayoutInflater()); return viewBinding.getRoot(); } @Override public void onBindView(Bundle savedInstanceState) { setStatusBarTranslucent(); getWindow().setNavigationBarColor(getColor(R.color.text_FF000000)); //历史记录文件夹创建 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>() { }.getType()); } catch (Exception ignored) { } } /** * 下拉刷新的逻辑 */ protected void pullToRefresh() { viewBinding.listSrl.setDelegate(new BGARefreshLayout.BGARefreshLayoutDelegate() { @Override public void onBGARefreshLayoutBeginRefreshing(BGARefreshLayout refreshLayout) { handler = new Handler(Looper.getMainLooper()); delayedRunnable = new Runnable() { @Override public void run() { viewBinding.listSrl.endRefreshing(); getMessageHouseList(currSearchText, false); } }; // 延迟 5 秒执行 handler.postDelayed(delayedRunnable, 1000); } @Override public boolean onBGARefreshLayoutBeginLoadingMore(BGARefreshLayout refreshLayout) { // handler = new Handler(Looper.getMainLooper()); // delayedRunnable = new Runnable() { // @Override // public void run() { // viewBinding.listSrl.endLoadingMore(); // //加载最新数据完成 // if (!isHouseLoadingMore) { // // 滑动到了底部,执行相应的操作 // getMessageHouseList(currSearchText,false); // } // } // }; // // 延迟 5 秒执行 // handler.postDelayed(delayedRunnable, 10); return true; } }); HDLRefreshViewHolder hdlRefreshViewHolder = new HDLRefreshViewHolder(_mActivity, true); hdlRefreshViewHolder.setPullDownImageResource(R.mipmap.loading_44); hdlRefreshViewHolder.setChangeToReleaseRefreshAnimResId(R.drawable.loading_refresh); hdlRefreshViewHolder.setRefreshingAnimResId(R.drawable.loading_refresh_end); viewBinding.listSrl.setRefreshViewHolder(hdlRefreshViewHolder); } 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(" ", ""); viewBinding.historyListParent.setVisibility(View.GONE); viewBinding.listParent.setVisibility(View.VISIBLE); viewBinding.powerStationSearchEt.clearFocus(); hideSoftInputFromWindow(); addSearchTextToList(); getMessageHouseList(currSearchText, true); } }); //清除 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); viewBinding.powerStationSearchEt.requestFocus(); showSoftInput(); mList.clear(); searchMessageHouseAdapter.setList(mList); } }); //删除 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(); getMessageHouseList(currSearchText, true); } }); //电站点击是事件 if (searchMessageHouseAdapter != null) { searchMessageHouseAdapter.setOnclickListener(new MessageHouseAdapter.OnClickListener() { @Override public void onClick(int position, MessageBean messageBean) { Intent intent = new Intent(); intent.putExtra("messageBean", new Gson().toJson(messageBean)); intent.setClass(_mActivity, MessageActivity.class); startActivity(intent); } }); } } /** * 显示软键盘 */ 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 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); //初始化电站适配器 searchMessageHouseAdapter = new MessageHouseAdapter(_mActivity); viewBinding.listRcv.setLayoutManager(new LinearLayoutManager(_mActivity)); viewBinding.listRcv.setAdapter(searchMessageHouseAdapter); viewBinding.powerStationSearchEt.post(new Runnable() { @Override public void run() { viewBinding.powerStationSearchEt.requestFocus(); } }); pullToRefresh(); //在界面中使用 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(); } }); } /** * 输入电站名称进行过滤 */ 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()); } }; /** * 重新更新列表数据 */ private void updateRecyclerViewList() { if (searchMessageHouseAdapter == null) { return; } searchMessageHouseAdapter.setList(mList); nullDataUpdateUi(); } /** * 物理按键返回事件 */ @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)); } if (handler != null && delayedRunnable != null) { handler.removeCallbacks(delayedRunnable); } super.onDestroy(); } /** * 添加历史记录 */ private void addSearchTextToList() { if (TextUtils.isEmpty(currSearchText.replace(" ", ""))) { return; } for (int i = 0; i < searchHistoryTitleList.size(); i++) { if (searchHistoryTitleList.get(i).equals(currSearchText)) { searchHistoryTitleList.remove(searchHistoryTitleList.get(i)); } } final int maxValue = 10; searchHistoryTitleList.add(0, currSearchText); if (searchHistoryTitleList.size() > maxValue) { //历史记录不能超出10 searchHistoryTitleList.remove(searchHistoryTitleList.get(maxValue)); } } @Subscribe(threadMode = ThreadMode.MAIN) public void onEventMessage(BaseEventBus eventBus) { super.onEventMessage(eventBus); if (eventBus == null) { return; } //接收外部点击事件 if (eventBus.getTopic().equals(ConstantManage.refresh_message_house)) { EventBus.getDefault().removeStickyEvent(eventBus); getMessageHouseList(currSearchText, false); } } /** * 获取账号下全部电站消息 * * @param homeName 电站名称(搜索用的),如果是空字符串默认读取全部 * @param isShowLoading 是否需要加载窗(true=需要,false=不需要) */ private void getMessageHouseList(String homeName, boolean isShowLoading) { if (isShowLoading) { showLoading(); } HdlMessageLogic.getInstance().getMessageHouseList(homeName, new CloudCallBeak>() { @Override public void onSuccess(List list) { if (isShowLoading) { hideLoading(); } mList.clear(); if (list != null && !list.isEmpty()) { mList.addAll(list); } updateRecyclerViewList(); } @Override public void onFailure(HDLException e) { if (isShowLoading) { hideLoading(); } } }); } /** * 没有电站列表的样式 */ private void nullDataUpdateUi() { boolean is_data = mList != null && mList.size() > 0; HdlCommonLogic.getInstance().nullDataUpdateUi(_mActivity, viewBinding.deviceNullDataIc.getRoot(), viewBinding.deviceNullDataIc.nullDataGifAnimationIv, viewBinding.deviceNullDataIc.nullDataTv, getString(R.string.my_power_station_data_null), is_data); } /** * 获取【搜索历史记录文件】全路径 */ public String getHistoryFileNamePath() { return HdlFileLogic.getInstance().getCurrentUserRootPath() + "/message_house_history.txt"; } }