package adonai.diary_browser.misc; import android.content.Context; import android.os.Build; import android.text.Editable; import android.text.TextWatcher; import android.view.KeyEvent; import android.view.View; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodManager; import android.webkit.WebView; import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import adonai.diary_browser.DiaryWebView; import adonai.diary_browser.R; /** * Логика поиска для {@link DiaryWebView}, для удобства вынесено в один класс */ public class SearchContainer { private final LinearLayout mSearchBar; private final WebView mWebContent; private EditText mSearchEdit; private ImageView mCloseSearchBar; public SearchContainer(LinearLayout searchLayout, final WebView mWebContent) { this.mSearchBar = searchLayout; this.mWebContent = mWebContent; mSearchEdit = (EditText) searchLayout.findViewById(R.id.search_edit); mCloseSearchBar = (ImageView) searchLayout.findViewById(R.id.close_search_bar); mCloseSearchBar.setOnClickListener(new SearchBarCloseAction()); mSearchEdit.addTextChangedListener(new RequestSearchAction()); mSearchEdit.setOnEditorActionListener(new SearchFurtherAction(mWebContent)); } public void setVisibility(int visibility) { mSearchBar.setVisibility(visibility); Context context = mSearchBar.getContext(); InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); if (visibility == View.VISIBLE) { mSearchEdit.requestFocus(); imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0); } else { imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0); } } public int getVisibility() { return mSearchBar.getVisibility(); } private static class SearchFurtherAction implements TextView.OnEditorActionListener { private final WebView mWebContent; public SearchFurtherAction(WebView mWebContent) { this.mWebContent = mWebContent; } @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { switch (actionId) { case EditorInfo.IME_ACTION_NEXT: mWebContent.findNext(true); return true; case EditorInfo.IME_ACTION_PREVIOUS: mWebContent.findNext(false); return true; } return false; } } /** * Closes the search bar */ private class SearchBarCloseAction implements View.OnClickListener { @Override public void onClick(View v) { Context context = mSearchBar.getContext(); InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0); mSearchBar.setVisibility(View.GONE); mWebContent.clearMatches(); } } /** * Находим значение по изменению строки */ private class RequestSearchAction implements 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) { } @SuppressWarnings("deprecation") @Override public void afterTextChanged(Editable s) { if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { mWebContent.findAllAsync(s.toString()); // API 16 } else { mWebContent.findAll(s.toString()); } } } }