|
@@ -1,26 +1,44 @@
|
|
|
package com.compdfkit.tools.search;
|
|
|
|
|
|
import android.content.Context;
|
|
|
+import android.graphics.Color;
|
|
|
+import android.os.AsyncTask;
|
|
|
import android.text.TextUtils;
|
|
|
import android.util.AttributeSet;
|
|
|
+import android.util.Log;
|
|
|
import android.view.View;
|
|
|
import android.widget.Button;
|
|
|
import android.widget.EditText;
|
|
|
import android.widget.ImageView;
|
|
|
import android.widget.RelativeLayout;
|
|
|
+import android.widget.TextView;
|
|
|
|
|
|
+import com.compdfkit.core.document.CPDFDocument;
|
|
|
+import com.compdfkit.core.page.CPDFPage;
|
|
|
+import com.compdfkit.core.page.CPDFTextPage;
|
|
|
+import com.compdfkit.core.page.CPDFTextRange;
|
|
|
+import com.compdfkit.core.page.CPDFTextSearcher;
|
|
|
import com.compdfkit.tools.R;
|
|
|
+import com.compdfkit.ui.reader.CPDFReaderView;
|
|
|
+import com.compdfkit.ui.textsearch.ITextSearcher;
|
|
|
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
+import java.util.concurrent.locks.Lock;
|
|
|
+import java.util.concurrent.locks.ReentrantLock;
|
|
|
|
|
|
public class CSearchToolbar extends RelativeLayout implements View.OnClickListener {
|
|
|
- private Button completeBt;
|
|
|
+ private TextView completeBt;
|
|
|
private EditText searchEdit;
|
|
|
private ImageView leftImage;
|
|
|
private ImageView rightImage;
|
|
|
private ImageView listImage;
|
|
|
|
|
|
- private Context context;
|
|
|
+ private Context mContext;
|
|
|
+
|
|
|
+ private CPDFReaderView readerView;
|
|
|
+ private ITextSearcher textSearcher;
|
|
|
+ private CPDFDocument tpdfDocument;
|
|
|
|
|
|
OnSearchListener onSearchListener = null;
|
|
|
List<CSearchTextInfo> searchTextInfos = null;
|
|
@@ -46,8 +64,10 @@ public class CSearchToolbar extends RelativeLayout implements View.OnClickListen
|
|
|
}
|
|
|
|
|
|
private void init(Context context) {
|
|
|
- this.context = context;
|
|
|
+ this.mContext = context;
|
|
|
inflate(context, R.layout.search_toolbar, this);
|
|
|
+ setBackgroundColor(Color.WHITE);
|
|
|
+ setElevation(8);
|
|
|
completeBt = findViewById(R.id.complete);
|
|
|
searchEdit = findViewById(R.id.search_word);
|
|
|
leftImage = findViewById(R.id.left);
|
|
@@ -57,14 +77,58 @@ public class CSearchToolbar extends RelativeLayout implements View.OnClickListen
|
|
|
leftImage.setOnClickListener(this);
|
|
|
rightImage.setOnClickListener(this);
|
|
|
}
|
|
|
+ Lock lock = new ReentrantLock();
|
|
|
+ private AsyncTask<Void, Void, Boolean> searchTask;
|
|
|
+
|
|
|
+ private void cancelTask() {
|
|
|
+ try {
|
|
|
+ lock.lock();
|
|
|
+ if (searchTextInfos != null) {
|
|
|
+ searchTextInfos.clear();
|
|
|
+ }
|
|
|
+ if (searchTask != null && !searchTask.isCancelled()) {
|
|
|
+ searchTask.cancel(true);
|
|
|
+ }
|
|
|
+ } finally {
|
|
|
+ lock.unlock();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void startSearch() {
|
|
|
+ final String search = searchEdit.getText().toString();
|
|
|
+ if (null != onSearchListener && !TextUtils.isEmpty(search)) {
|
|
|
+ cancelTask();
|
|
|
+ searchTask = new AsyncTask<Void, Void, Boolean>() {
|
|
|
+ @Override
|
|
|
+ protected void onPreExecute() {
|
|
|
+ super.onPreExecute();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected Boolean doInBackground(Void... voids) {
|
|
|
+ if (null != onSearchListener) {
|
|
|
+ searchTextInfos = onSearchListener.onStartSearch(search);
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected void onPostExecute(Boolean aBoolean) {
|
|
|
+ super.onPostExecute(aBoolean);
|
|
|
+ if (null != onSearchListener) {
|
|
|
+ onSearchListener.onEndSearch(searchTextInfos);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
+ searchTask.execute();
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
@Override
|
|
|
public void onClick(View view) {
|
|
|
int id = view.getId();
|
|
|
if (id == R.id.complete) {
|
|
|
- if (null != onSearchListener && (!TextUtils.isEmpty(searchEdit.getText().toString()))) {
|
|
|
- searchTextInfos = onSearchListener.onSearch(searchEdit.getText().toString());
|
|
|
- }
|
|
|
+ startSearch();
|
|
|
} else if (id == R.id.left) {
|
|
|
|
|
|
} else if (id == R.id.right) {
|
|
@@ -74,11 +138,22 @@ public class CSearchToolbar extends RelativeLayout implements View.OnClickListen
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
public void setSearchListener(OnSearchListener onSearchListener) {
|
|
|
this.onSearchListener = onSearchListener;
|
|
|
}
|
|
|
|
|
|
+ public void setReaderView(CPDFReaderView readerView) {
|
|
|
+ if (null != readerView) {
|
|
|
+ this.readerView = readerView;
|
|
|
+ this.textSearcher = readerView.getTextSearcher();
|
|
|
+ tpdfDocument = readerView.getPDFDocument();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
public interface OnSearchListener {
|
|
|
- List<CSearchTextInfo> onSearch(String word);
|
|
|
+ List<CSearchTextInfo> onStartSearch(String word);
|
|
|
+ void onEndSearch(List<CSearchTextInfo> searchResult);
|
|
|
}
|
|
|
}
|