/* * Copyright (c) 2020 WildFireChat. All rights reserved. */ package cn.wildfire.chat.kit.search; import android.Manifest; import android.content.Context; import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.inputmethod.InputMethodManager; import android.widget.ImageView; import android.widget.LinearLayout; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; import cn.wildfire.chat.kit.R; import cn.wildfire.chat.kit.R2; import cn.wildfire.chat.kit.WfcScheme; import cn.wildfire.chat.kit.qrcode.QRCodeActivity; import cn.wildfire.chat.kit.qrcode.ScanQRCodeActivity; import cn.wildfire.chat.kit.user.UserViewModel; import cn.wildfirechat.model.UserInfo; import java.util.List; public class SearchFragment extends Fragment { @BindView(R2.id.recyclerView) RecyclerView recyclerView; @BindView(R2.id.emptyLinearLayout) LinearLayout emptyLinearLayout; @BindView(R2.id.descLinearLayout) LinearLayout descLinearLayout; @BindView(R2.id.ll_fast_option) LinearLayout mLlFastOption; @BindView(R2.id.iv_mine_card) ImageView mIvMineCard; @BindView(R2.id.iv_scan) ImageView mIvScan; private static final int REQUEST_CODE_SCAN_QR_CODE = 100; private static final int REQUEST_IGNORE_BATTERY_CODE = 101; private SearchResultAdapter adapter; private SearchViewModel searchViewModel; private Observer searchResultObserver = this::onSearchResult; private InputMethodManager inputManager; private boolean hideSearchDescView = false; public static final String HIDE_SEARCH_DESC_VIEW = "hideSearchDescView"; private SearchActivity activity; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle args = getArguments(); hideSearchDescView = args != null && args.getBoolean(HIDE_SEARCH_DESC_VIEW); activity = (SearchActivity) getActivity(); } @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.search_fragment, container, false); searchViewModel = ViewModelProviders.of(this).get(SearchViewModel.class); searchViewModel.getResultLiveData().observeForever(searchResultObserver); ButterKnife.bind(this, view); inputManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { inputManager.hideSoftInputFromWindow(view.getWindowToken(), 0); } }); descLinearLayout.setVisibility(hideSearchDescView ? View.GONE : View.VISIBLE); return view; } public void showFastOption() { if (mLlFastOption != null) { mLlFastOption.setVisibility(View.VISIBLE); } } @Override public void onDestroyView() { super.onDestroyView(); searchViewModel.getResultLiveData().removeObserver(searchResultObserver); } public void search(String keyword, List searchableModules) { if (adapter != null) { adapter.reset(); } descLinearLayout.setVisibility(View.GONE); searchViewModel.search(keyword, searchableModules); } public void reset() { if (adapter != null) { adapter.reset(); } descLinearLayout.setVisibility(View.VISIBLE); emptyLinearLayout.setVisibility(View.GONE); recyclerView.setVisibility(View.GONE); } private void onSearchResult(SearchResult result) { if (result == null) { recyclerView.setVisibility(View.GONE); emptyLinearLayout.setVisibility(View.VISIBLE); return; } else { recyclerView.setVisibility(View.VISIBLE); emptyLinearLayout.setVisibility(View.GONE); } if (adapter == null) { adapter = new SearchResultAdapter(this); recyclerView.setAdapter(adapter); recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); } adapter.submitSearResult(result); } @OnClick({R2.id.iv_mine_card, R2.id.iv_scan}) public void onViewClick(View view) { int id = view.getId(); if (id == R.id.iv_mine_card) { showUserQRCode(); } else if (id == R.id.iv_scan) { String[] permissions = new String[]{Manifest.permission.CAMERA}; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (!activity.checkPermission(permissions)) { requestPermissions(permissions, 100); } } startActivityForResult(new Intent(getActivity(), ScanQRCodeActivity.class), REQUEST_CODE_SCAN_QR_CODE); } } private void showUserQRCode() { UserViewModel userViewModel = ViewModelProviders.of(this).get(UserViewModel.class); UserInfo userInfo = userViewModel.getUserInfo(userViewModel.getUserId(), false); String qrCodeValue = WfcScheme.QR_CODE_PREFIX_USER + userInfo.uid; startActivity(QRCodeActivity.buildQRCodeIntent(getActivity(), "我的名片", userInfo.portrait, qrCodeValue)); } }