package net.coding.program.maopao; import android.content.Context; import android.text.TextUtils; import com.baidu.mapapi.model.LatLng; import net.coding.program.model.LocationObject; import java.util.List; /** * Created by Neutra on 2015/3/14. */ public abstract class LocationSearcher { private boolean isSearching = false; private boolean isComplete = false; private int keywordVersion; private int searchingVersion; private int page; private String keyword = ""; public String getKeyword() { return keyword; } public boolean isKeywordEmpty() { return TextUtils.isEmpty(keyword); } public synchronized void setKeyword(String keyword) { keyword = keyword == null ? "" : keyword.toString(); if (!keyword.equals(this.keyword)) { this.keyword = keyword; ++keywordVersion; page = 0; isSearching = false; isComplete = false; } } public boolean isComplete() { return isComplete; } public boolean isSearching() { return isSearching; } public synchronized void search() { if (isComplete || isSearching) return; isSearching = true; searchingVersion = ++keywordVersion; doSearch(page); } protected boolean shouldSkipThisResult() { isSearching = false; return searchingVersion != keywordVersion; } public void configure(Context context, LatLng latLng, final SearchResultListener listener) { isSearching = false; isComplete = false; page = 0; doConfigure(context, latLng, listener); } protected void scheduleNextPage() { ++page; } protected void setComplete(boolean isComplete) { this.isComplete = isComplete; } protected abstract void doConfigure(Context context, LatLng latLng, SearchResultListener listener); protected abstract void doSearch(int page); public abstract void destory(); public static interface SearchResultListener { void onSearchResult(List<LocationObject> locations); } }