| New file |
| | |
| | | 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<MessageBean> mList = new ArrayList<>(); |
| | | List<String> 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<List<String>>() { |
| | | }.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<List<MessageBean>>() { |
| | | @Override |
| | | public void onSuccess(List<MessageBean> 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"; |
| | | } |
| | | |
| | | |
| | | } |