From eb1053e4ba0e5fba8aab6a9ef11438c9de644dde Mon Sep 17 00:00:00 2001 From: zhangyuanzhen Date: Tue, 7 Jan 2020 17:41:17 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=8E=86=E5=8F=B2=E5=88=97?= =?UTF-8?q?=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/mogo/module/map/MapFragment.java | 7 +- .../com/mogo/module/navi/ui/NaviActivity.kt | 6 +- .../navi/ui/adapter/SearchPoiAdapter.java | 19 +-- .../module/navi/ui/search/SearchFragment.java | 136 +++++++++++------- .../navi/ui/search/SearchPresenter.java | 30 +++- .../src/main/res/layout/fragment_search.xml | 65 +++++---- .../src/main/res/layout/item_search_poi.xml | 25 ++-- .../res/mipmap-xhdpi/icon_navi_position.png | Bin 0 -> 1847 bytes .../src/main/res/values/strings.xml | 8 ++ 9 files changed, 182 insertions(+), 114 deletions(-) create mode 100755 modules/mogo-module-navi/src/main/res/mipmap-xhdpi/icon_navi_position.png diff --git a/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapFragment.java b/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapFragment.java index 853f3ed188..ae1c0af2e7 100644 --- a/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapFragment.java +++ b/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapFragment.java @@ -15,6 +15,7 @@ import com.mogo.map.MogoMapView; import com.mogo.map.location.IMogoLocationClient; import com.mogo.map.location.MogoLocation; import com.mogo.map.uicontroller.IMogoMapUIController; +import com.mogo.module.common.MogoModulePaths; import com.mogo.service.MogoServicePaths; import com.mogo.service.map.IMogoMapService; @@ -55,14 +56,10 @@ public class MapFragment extends MvpFragment< MapView, MapPresenter > implements mMogoMapView = findViewById( R.id.module_map_id_map ); mMogoMap = mMogoMapView.getMap(); mMogoMap.getUIController().showMyLocation( true ); - findViewById(R.id.module_map_id_search).setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - ARouter.getInstance().build(MogoModulePaths.PATH_MODULE_NAV_ACTIVITY).navigation(getActivity()); - } - }); mSearch = findViewById( R.id.module_map_id_search ); mSearch.setOnClickListener( view -> { + ARouter.getInstance().build(MogoModulePaths.PATH_MODULE_NAV_ACTIVITY).navigation(getActivity()); } ); mHome = findViewById( R.id.module_map_id_home ); diff --git a/modules/mogo-module-navi/src/main/java/com/mogo/module/navi/ui/NaviActivity.kt b/modules/mogo-module-navi/src/main/java/com/mogo/module/navi/ui/NaviActivity.kt index c550adba13..108f47990b 100644 --- a/modules/mogo-module-navi/src/main/java/com/mogo/module/navi/ui/NaviActivity.kt +++ b/modules/mogo-module-navi/src/main/java/com/mogo/module/navi/ui/NaviActivity.kt @@ -1,5 +1,6 @@ package com.mogo.module.navi.ui +import android.app.Activity import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import androidx.fragment.app.Fragment @@ -7,9 +8,11 @@ import com.alibaba.android.arouter.facade.annotation.Route import com.alibaba.android.arouter.launcher.ARouter import com.mogo.module.common.MogoModulePaths import com.mogo.module.navi.R +import com.mogo.module.navi.ui.base.BaseActivity @Route(path = MogoModulePaths.PATH_MODULE_NAV_ACTIVITY) -class NaviActivity : AppCompatActivity() { +class NaviActivity : BaseActivity() { + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -18,6 +21,5 @@ class NaviActivity : AppCompatActivity() { .build("/navi/search") .navigation() as Fragment supportFragmentManager.beginTransaction().replace(R.id.fl_container,fragment).commitNow() - } } diff --git a/modules/mogo-module-navi/src/main/java/com/mogo/module/navi/ui/adapter/SearchPoiAdapter.java b/modules/mogo-module-navi/src/main/java/com/mogo/module/navi/ui/adapter/SearchPoiAdapter.java index cab52e9d76..149d35de5a 100644 --- a/modules/mogo-module-navi/src/main/java/com/mogo/module/navi/ui/adapter/SearchPoiAdapter.java +++ b/modules/mogo-module-navi/src/main/java/com/mogo/module/navi/ui/adapter/SearchPoiAdapter.java @@ -21,9 +21,6 @@ public class SearchPoiAdapter extends RecycleBaseAdapter { public SearchPoiAdapter(Context context, List list) { super(context, list, R.layout.item_search_poi); } - private OnItemClickedListener< MogoTip > mOnItemClickedListener; - private OnItemClickedListener< MogoTip > mOnDeleteAllClickedListener; - private OnItemClickedListener< MogoTip > mOnActionButtonClickedListener; private boolean mShowDelete = false; private View.OnClickListener onClickListener; @@ -42,17 +39,7 @@ public class SearchPoiAdapter extends RecycleBaseAdapter { public void setOnClickListener(View.OnClickListener onClickListener) { this.onClickListener = onClickListener; } - public void setOnItemClickedListener( OnItemClickedListener< MogoTip > onItemClickedListener ) { - this.mOnItemClickedListener = onItemClickedListener; - } - public void setOnDeleteAllClickedListener( OnItemClickedListener< MogoTip > onDeleteAllClickedListener ) { - this.mOnDeleteAllClickedListener = onDeleteAllClickedListener; - } - - public void setOnActionButtonClickedListener( OnItemClickedListener< MogoTip > onActionButtonClickedListener ) { - this.mOnActionButtonClickedListener = onActionButtonClickedListener; - } public void setShowDelete( boolean showDelete ) { this.mShowDelete = showDelete; } @@ -62,9 +49,5 @@ public class SearchPoiAdapter extends RecycleBaseAdapter { setDatas(datums); //notifyDataSetChanged(); } - public void clear(){ - mOnItemClickedListener = null; - mOnDeleteAllClickedListener = null; - mOnActionButtonClickedListener = null; - } + } diff --git a/modules/mogo-module-navi/src/main/java/com/mogo/module/navi/ui/search/SearchFragment.java b/modules/mogo-module-navi/src/main/java/com/mogo/module/navi/ui/search/SearchFragment.java index b867839e0c..da6345ec7b 100644 --- a/modules/mogo-module-navi/src/main/java/com/mogo/module/navi/ui/search/SearchFragment.java +++ b/modules/mogo-module-navi/src/main/java/com/mogo/module/navi/ui/search/SearchFragment.java @@ -20,11 +20,14 @@ import com.mogo.map.search.inputtips.MogoTip; import com.mogo.module.navi.R; import com.mogo.module.navi.bean.EntityConvertUtils; import com.mogo.module.navi.bean.SearchPoi; +import com.mogo.module.navi.database.AppDataBase; +import com.mogo.module.navi.ui.adapter.HistoryPoiAdapter; import com.mogo.module.navi.ui.adapter.SearchPoiAdapter; import com.mogo.module.navi.ui.base.BaseFragment; import com.mogo.module.navi.ui.base.UiController; import com.mogo.utils.WindowUtils; import io.reactivex.disposables.Disposable; +import java.util.ArrayList; import java.util.List; /** @@ -50,23 +53,22 @@ public class SearchFragment extends BaseFragment implements SearchView { private EditText mSearchBox; private RecyclerView mSearchResult; + private RecyclerView rvHistory; private SearchPoiAdapter mPoiAdapter; + private HistoryPoiAdapter mHistoryAdapter; - private View mMyLocation; - private View mChoicePoint; - private View mCurrentLocation; /** * 设置常用地址(我的位置、选点)时的设置按钮 */ private TextView mActionButton; - - /** * 地址设置是否完成 */ private boolean mActionSuccess = false; + private View rlHistory; + private TextView tvEmpty; @Override public void onAttach(Context context) { @@ -88,8 +90,54 @@ public class SearchFragment extends BaseFragment implements SearchView { @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - mSearchBox=view.findViewById(R.id.et_navi_search); - mSearchResult=view.findViewById(R.id.rv_navi_search); + mSearchBox = view.findViewById(R.id.et_navi_search); + mSearchResult = view.findViewById(R.id.rv_navi_search); + rvHistory = view.findViewById(R.id.rv_navi_history); + rlHistory = view.findViewById(R.id.rl_navi_history); + LinearLayoutManager linearManager = + new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false); + + rvHistory.setLayoutManager(linearManager); + LinearLayoutManager linearLayoutManager = + new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false); + mSearchResult.setLayoutManager(linearLayoutManager); + + mPoiAdapter= new SearchPoiAdapter(getActivity(),new ArrayList<>()); + mSearchResult.setAdapter(mPoiAdapter); + + mHistoryAdapter= new HistoryPoiAdapter(getActivity(),new ArrayList<>()); + rvHistory.setAdapter(mHistoryAdapter); + + tvEmpty = findViewById(R.id.tv_navi_list_empty); + + + findViewById(R.id.iv_navi_back).setOnClickListener(new View.OnClickListener() { + @Override public void onClick(View v) { + getActivity().finish(); + } + }); + + mHistoryAdapter.setOnClickListener(new View.OnClickListener() { + @Override public void onClick(View v) { + + } + }); + + mPoiAdapter.setOnClickListener(new View.OnClickListener() { + @Override public void onClick(View v) { + MogoTip tag = (MogoTip) v.getTag(R.id.tag_position); + SearchPoi searchPoi = EntityConvertUtils.tipToPoi(tag); + mSearchPresenter.insert(searchPoi); + } + }); + + + findViewById(R.id.tv_navi_history_clear).setOnClickListener(new View.OnClickListener() { + @Override public void onClick(View v) { + mSearchPresenter.deleteAllCachedPoi(); + } + }); + } /** @@ -179,42 +227,22 @@ public class SearchFragment extends BaseFragment implements SearchView { @Override public void renderSearchPoiResult(List datums, boolean showDelete) { - - if (datums == null || datums.isEmpty()) { - mSearchResult.setVisibility(View.GONE); - } else { - mSearchResult.setVisibility(View.VISIBLE); - } - - if (mPoiAdapter == null) { - mPoiAdapter = new SearchPoiAdapter(getContext(), datums); - mPoiAdapter.setOnItemClickedListener(item -> { - if (mSearchType == SearchConstants.SEARCH_TYPE_COMMON) { - final Disposable disposable = - mSearchPresenter.cacheSelectPoiItem(item).subscribe(output -> { - navi2Location(EntityConvertUtils.tipToPoi(item)); - }); - mSearchPresenter.addDisposable(disposable); - } else { - // do nothing. - } - }); - mPoiAdapter.setOnDeleteAllClickedListener(NULL -> { - mSearchPresenter.deleteAllCachedPoi(); - }); - - mPoiAdapter.setShowDelete(showDelete); - mSearchResult.setAdapter(mPoiAdapter); - } else { - if (datums != null && !datums.isEmpty()) { - mSearchResult.scrollToPosition(0); - } - mPoiAdapter.refresh(datums, showDelete); + if (datums==null||datums.isEmpty()) { + showEmpty(getString(R.string.search_empty)); + return; } + showResult(); + mPoiAdapter.setDatas(datums); } @Override public void showHistory(List datums) { + if (datums==null||datums.isEmpty()) { + showEmpty(getString(R.string.history_empty)); + return; + } + showHistory(); + mHistoryAdapter.setDatas(datums); } @Override @@ -287,17 +315,10 @@ public class SearchFragment extends BaseFragment implements SearchView { // } //} - /** - * @param searchPoi 导航目的地 - */ + private void navi2Location(SearchPoi searchPoi) { - if (searchPoi == null || searchPoi == SearchPoi.NULL) { - Toast.makeText(mContext, "未设置", Toast.LENGTH_SHORT).show(); - return; - } - //SearchPoiLiveData.getInstance().postValue( searchPoi ); - exitSearch(); + } /** @@ -327,11 +348,26 @@ public class SearchFragment extends BaseFragment implements SearchView { } mSearchBox.setTag(null); - if (mPoiAdapter != null) { - mPoiAdapter.clear(); - } mPoiAdapter = null; //removeChoicePointMarker(); + } + private void showResult() { + rlHistory.setVisibility(View.GONE); + mSearchResult.setVisibility(View.VISIBLE); + tvEmpty.setVisibility(View.GONE); + } + + private void showHistory() { + rlHistory.setVisibility(View.VISIBLE); + mSearchResult.setVisibility(View.GONE); + tvEmpty.setVisibility(View.GONE); + } + + private void showEmpty(String str){ + rlHistory.setVisibility(View.GONE); + tvEmpty.setText(str); + mSearchResult.setVisibility(View.GONE); + tvEmpty.setVisibility(View.VISIBLE); } } diff --git a/modules/mogo-module-navi/src/main/java/com/mogo/module/navi/ui/search/SearchPresenter.java b/modules/mogo-module-navi/src/main/java/com/mogo/module/navi/ui/search/SearchPresenter.java index 4a6c2ed6a5..cddd739670 100644 --- a/modules/mogo-module-navi/src/main/java/com/mogo/module/navi/ui/search/SearchPresenter.java +++ b/modules/mogo-module-navi/src/main/java/com/mogo/module/navi/ui/search/SearchPresenter.java @@ -19,6 +19,11 @@ import com.mogo.module.navi.constants.DataConstants; import com.mogo.module.navi.database.AppDataBase; import com.mogo.service.MogoServicePaths; import com.mogo.service.map.IMogoMapService; +import io.reactivex.Observable; +import io.reactivex.ObservableEmitter; +import io.reactivex.ObservableOnSubscribe; +import io.reactivex.Observer; +import io.reactivex.Scheduler; import io.reactivex.Single; import io.reactivex.SingleEmitter; import io.reactivex.android.schedulers.AndroidSchedulers; @@ -97,6 +102,8 @@ public class SearchPresenter extends Presenter< SearchView > mView.renderSearchPoiResult(result,false); } }); + inputtipsSearch.requestInputtipsAsyn(); + } @@ -145,7 +152,7 @@ public class SearchPresenter extends Presenter< SearchView > .subscribeOn( Schedulers.io() ) .observeOn( AndroidSchedulers.mainThread() ) .subscribe( count -> { - mView.renderSearchPoiResult( null, false ); + mView.showHistory( null ); } ); mCompositeDisposable.add( disposable ); } @@ -217,6 +224,27 @@ public class SearchPresenter extends Presenter< SearchView > } + public void navi2Positon(){ + //mMapService.getNavi(getContext()).naviTo(); + } + + public void insert(SearchPoi searchPoi){ + Observable.create(new ObservableOnSubscribe() { + @Override public void subscribe(ObservableEmitter emitter) throws Exception { + AppDataBase.getDatabase(getContext()).poiDao().insert(searchPoi); + } + }).subscribeOn(Schedulers.io()).subscribe(); + } + + public void clearHistory(List list){ + Observable.create(new ObservableOnSubscribe() { + @Override public void subscribe(ObservableEmitter emitter) throws Exception { + AppDataBase.getDatabase(getContext()).poiDao().deleteAll(list); + } + }).subscribeOn(Schedulers.io()).subscribe(); + } + + @Override public void onDestroy( @NonNull LifecycleOwner owner ) { diff --git a/modules/mogo-module-navi/src/main/res/layout/fragment_search.xml b/modules/mogo-module-navi/src/main/res/layout/fragment_search.xml index a5972fd90e..955c6f79e8 100644 --- a/modules/mogo-module-navi/src/main/res/layout/fragment_search.xml +++ b/modules/mogo-module-navi/src/main/res/layout/fragment_search.xml @@ -22,10 +22,18 @@ app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" > - + - + @@ -116,7 +118,7 @@ android:layout_height="wrap_content" android:layout_alignParentRight="true" - android:text="@string/history_search" + android:text="@string/history_clear" android:textColor="@color/txt_blue" android:textSize="@dimen/txt_normal" /> @@ -125,28 +127,42 @@ android:layout_width="match_parent" android:id="@+id/rv_navi_history" android:layout_height="match_parent" - android:layout_marginTop="@dimen/dp_120" + android:layout_marginTop="@dimen/dp_60" /> - - + android:id="@+id/rv_navi_search"/> + + + + @@ -155,7 +171,7 @@ android:id="@+id/tv_navi_gas" app:layout_constraintTop_toTopOf="@id/tv_navi_restaurant" app:layout_constraintLeft_toRightOf="@id/tv_navi_restaurant" - android:text="@string/navi_restrant" + android:text="@string/navi_gas" android:layout_marginLeft="@dimen/dp_32" style="@style/txt_navi_style" /> @@ -166,7 +182,7 @@ android:id="@+id/tv_navi_toilet" app:layout_constraintTop_toBottomOf="@id/tv_navi_restaurant" app:layout_constraintLeft_toLeftOf="@id/tv_navi_restaurant" - android:text="@string/navi_restrant" + android:text="@string/navi_toilet" android:layout_marginTop="@dimen/dp_32" style="@style/txt_navi_style" /> @@ -177,7 +193,7 @@ android:id="@+id/tv_navi_wash" app:layout_constraintTop_toBottomOf="@id/tv_navi_toilet" app:layout_constraintLeft_toLeftOf="@id/tv_navi_restaurant" - android:text="@string/navi_restrant" + android:text="@string/navi_park" android:layout_marginTop="@dimen/dp_32" style="@style/txt_navi_style" @@ -188,7 +204,7 @@ android:id="@+id/tv_navi_park" app:layout_constraintTop_toBottomOf="@id/tv_navi_gas" app:layout_constraintLeft_toLeftOf="@id/tv_navi_gas" - android:text="@string/navi_restrant" + android:text="@string/navi_wash" android:layout_marginTop="@dimen/dp_32" style="@style/txt_navi_style" @@ -199,12 +215,9 @@ android:id="@+id/tv_navi_setting" app:layout_constraintTop_toBottomOf="@id/tv_navi_park" app:layout_constraintLeft_toLeftOf="@id/tv_navi_gas" - android:text="@string/navi_restrant" + android:text="@string/navi_setting" android:layout_marginTop="@dimen/dp_32" - style="@style/txt_navi_style" /> - - \ No newline at end of file diff --git a/modules/mogo-module-navi/src/main/res/layout/item_search_poi.xml b/modules/mogo-module-navi/src/main/res/layout/item_search_poi.xml index ddff59b03a..ee74bd9f2a 100644 --- a/modules/mogo-module-navi/src/main/res/layout/item_search_poi.xml +++ b/modules/mogo-module-navi/src/main/res/layout/item_search_poi.xml @@ -3,13 +3,14 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" - android:layout_height="@dimen/dp_90" + android:layout_height="@dimen/dp_180" > Px*@kvBMRCodHTU~4wMHHUdz0g9937AmPg0#ScCcJ3klcCoF^+8m4Kp*^zF&b;C z_+Tv7+HPBw*au@Y5`#)G_C-xVjY=#+ZzXD?CJ4UxPy`hdMHBG{v_CuJciLWPF5BIm z-I?8MGMhAa@60*h`ObIG&d$tk8MB8~z$#!BunJfOtO8a6tAJI&Dqt0`3jEI$;MKx+ zZJ%7jrP#-KCK+E2a`lq2v*36d=cmzrj4^(QGv|{cV@ExYi@f>gD&TrgHcc?G z6(ZasrMyB#49@v)5ck#Eg0o|&i~p$NtJ5|Y0bBcJzM zTIUi$M?2^2^BU%E8uIul9e7a~nFzSHU#@1pD52^uiz1|>AJsUD8_kB2$4}_M3&U{2 zI(785JcXNsFAiiS9&yG{u}U!U={iqdr6Y$h45I?x@U&d&Pfm%qER2MaK2$sI@bBNa zT`n?$KLcu1z<(zE-Kd6@CKCw7ma_5hG5>YCd4<}g=rkr^(eocLeZz>8x0LLrVxM?4 zj%^YfBfm`1lPe?>-{67fJ@yt6P>z$7{b$D zfi&M6W8!;|u1!K1)iQ>Z4}w}rGI?^EByT`l5$of1P-A{l+?s;3TKBRq)iNq55s25G zNIcH5v}HRnfAcVZ`#Au607Jv2f(s9Q_d`gfA0M1*#wW$S@Fjn3hZ2c6QJX#gILNMu zV|&hq^Rt{gcZ~G#z319OPMUk=W+}xWL|hnRc0m`a`|yb8UVTAFiUzF$w)D%Dlav0a z5+78a%bm@`J^Wo2KUCu;OqTbkR$}cuce&2XSnEwh2(ey8gc;kHRK+7dT;}iKW5*0e z?2mC@+#K6DhM`sgG3RQI5%atWF5SBMPT%a!r7<2Upx67r$?a5lT3W#aO5)~R4)DNiG2idA)@ah#1cO*3dnKL!d z3lb)78>T&~7}YBvCUSLg6DK=gvI!OYAX`-oaJ)DOCuy73OBfaSrwS2=`KdQpRWZQv z4;7A4wps;5u-~Hs&h8hCUpM=ElJf)@cs#1_&@7--B8O_&xaB#yAZa?}OBibYY8<1m zH4DgohzdBnA4|SVPW>ewncb#xPQHYp;saYHj#1c}1>{Gf0#^28V%yc?N#*q^`H*iV zUi5c$j$xQu1;mu%XjrhoK5Pj1OuR?0b_DhZG?Fd(sBR_@R3eT69Li0F@`p&+@qj|njVpG3RePJtZ`!cN+TF<9?`?W|EGm;6Bz z=ih+4`DPyc!j$u1%RZ{;TKiw5bF+RlKLqWk}wMp3o zyKTPox5ctoGa_zU53OS$F~b<6ousae9qxRf3#*KyUBCs4*)X=4lqS?=GDbhasdf=7 z>5idYzHcPe_^R92xB(B4kI1m>dSV0)Z1oZF*J>D$X z9uzdoHsU~BOvN-NAQ5h1?jWW#>g!`&*&_B72VHmpINFzTl`-%Z!3HV(q006wzGLj8 z*L*)V8Ovw|5^=n)u^-D5?JIytQ4rI#c*McDfYU+TcGU;qkphJo;93W?@o7vDdF)#6!mjl_L48Tv zP<^|w+e~kuW_n~=f#u8=E_T|qj)xfcfcan6qKoSD;MErB1*iGknBzZTUs*TXOJ*)y&0jq#jz$#!BunJfO ltO8a6tAJI&Dv(lv{{WRw5%iJnAfEsL002ovPDHLkV1oZ-XaE2J literal 0 HcmV?d00001 diff --git a/modules/mogo-module-navi/src/main/res/values/strings.xml b/modules/mogo-module-navi/src/main/res/values/strings.xml index 30e397bbaa..52a805debd 100644 --- a/modules/mogo-module-navi/src/main/res/values/strings.xml +++ b/modules/mogo-module-navi/src/main/res/values/strings.xml @@ -5,4 +5,12 @@ 回家 去公司 餐馆 + 加油站 + 卫生间 + 停车场 + 洗车 + 更多设置 + 清空历史 + 暂无历史结果 + 暂无搜索结果