diff --git a/app/src/main/java/com/mogo/launcher/MogoApplication.java b/app/src/main/java/com/mogo/launcher/MogoApplication.java index f251be04c3..8ac0fd9188 100644 --- a/app/src/main/java/com/mogo/launcher/MogoApplication.java +++ b/app/src/main/java/com/mogo/launcher/MogoApplication.java @@ -6,7 +6,6 @@ import androidx.multidex.MultiDex; import com.mogo.commons.AbsMogoApplication; import com.mogo.commons.debug.DebugConfig; -import com.mogo.module.carchatting.CallChatConstant; import com.mogo.module.common.MogoModule; import com.mogo.module.common.MogoModulePaths; import com.mogo.module.onlinecar.OnLineCarConstants; diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/MogoCalculatePath.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/MogoCalculatePath.java index 6034fddefe..aca3259c58 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/MogoCalculatePath.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/MogoCalculatePath.java @@ -79,6 +79,24 @@ public class MogoCalculatePath { this.mTrafficLights = mTrafficLights; } + + + private StringBuilder mDescBuilder = null; + + public String getDesc() { + if ( mDescBuilder == null ) { + mDescBuilder = new StringBuilder(); + int lightsSize = getTrafficLights(); + if ( lightsSize > 0 ) { + mDescBuilder.append( "红绿灯" ).append( lightsSize ).append( "个" ); + } + //mDescBuilder.append( " " ); + //mDescBuilder.append( "收费" ).append( mPath.getTollCost() ).append( "元" ); + } + + return mDescBuilder.toString(); + } + public String getTagId() { return mTagId; } diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/MogoModulePaths.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/MogoModulePaths.java index adfffc5401..9a65d0cfe2 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/MogoModulePaths.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/MogoModulePaths.java @@ -42,7 +42,7 @@ public class MogoModulePaths { * 搜索页面模块实例化路径 */ @Keep - public static final String PATH_MODULE_SEARCH= "navi/search/ui"; + public static final String PATH_MODULE_SEARCH= "/navi/search/ui"; /** * 搜索页面Activity实例化路径 @@ -58,6 +58,16 @@ public class MogoModulePaths { public static final String PATH_FRAGMENT_SEARCH = "/navi/search"; + + /** + * 搜索 fragment + */ + @Keep + public static final String PATH_FRAGMENT_CHOOSE_PAHT = "/navi/search"; + + + + /** * 按类别搜索 fragment */ diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/constants/AMapConstants.java b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/constants/AMapConstants.java index 5429dfb3b5..5c75c27f04 100644 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/constants/AMapConstants.java +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/constants/AMapConstants.java @@ -20,6 +20,10 @@ public class AMapConstants { */ public static final String KEY_SET_HOME_COMPONY = "key_home"; + /** + * 序列号实体的Key + */ + public static final String KEY_PARCELABLE = "key_Parcelable"; /** * 点击当前位置按钮的地图缩放级别 diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/constants/SearchServiceHolder.kt b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/constants/SearchServiceHolder.kt index e0465d19a6..c6b92c006c 100644 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/constants/SearchServiceHolder.kt +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/constants/SearchServiceHolder.kt @@ -1,8 +1,14 @@ package com.mogo.module.navi.constants +import android.content.Context +import androidx.fragment.app.Fragment import com.alibaba.android.arouter.launcher.ARouter +import com.mogo.map.navi.IMogoNavi import com.mogo.service.MogoServicePaths +import com.mogo.service.fragmentmanager.FragmentDescriptor import com.mogo.service.fragmentmanager.IMogoFragmentManager +import com.mogo.service.map.IMogoMapService +import com.mogo.service.module.IMogoRegisterCenter /** *@author zyz @@ -13,7 +19,28 @@ object SearchServiceHolder { val fragmentManager:IMogoFragmentManager = ARouter.getInstance().build( MogoServicePaths.PATH_FRAGMENT_MANAGER ).navigation() as IMogoFragmentManager + val mapService:IMogoMapService = ARouter.getInstance().build( + MogoServicePaths.PATH_SERVICES_MAP + ).navigation() as IMogoMapService + val listenerCenter:IMogoRegisterCenter = ARouter.getInstance().build( + MogoServicePaths.PATH_REGISTER_CENTER + ).navigation() as IMogoRegisterCenter + fun push( + fragment: Fragment, + tag: String + ) { + val builder = FragmentDescriptor.Builder() + builder.fragment(fragment) + val build = builder.tag(tag) + .build() + fragmentManager.push(build) + } + + + fun getNavi(context: Context):IMogoNavi{ + return mapService.getNavi(context) + } } \ No newline at end of file diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/adapter/CalculatePathAdapter.java b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/adapter/CalculatePathAdapter.java new file mode 100644 index 0000000000..fdb90204a2 --- /dev/null +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/adapter/CalculatePathAdapter.java @@ -0,0 +1,73 @@ +package com.mogo.module.navi.ui.adapter; + +import android.content.Context; +import android.view.View; +import com.mogo.map.navi.MogoCalculatePath; +import com.mogo.map.search.inputtips.MogoTip; +import com.mogo.module.navi.R; +import com.mogo.module.navi.ui.adapter.base.RecycleBaseAdapter; +import com.mogo.module.navi.ui.adapter.base.RecycleViewHolder; +import java.util.List; + +/** + * @author zyz + * 2019-08-13. + */ +public class CalculatePathAdapter extends RecycleBaseAdapter { + + private int current = 0; + private int lastPosition = 0; + + /** + * + */ + public CalculatePathAdapter(Context context, List list) { + super(context, list, R.layout.item_calculate_path_map); + } + + private View.OnClickListener onClickListener; + + @Override + public void onBindViewHolder(RecycleViewHolder holder, MogoCalculatePath item) { + + //holder.setText(R.id.tv_position, tip.getName()); + //holder.setText(R.id.tv_position_des, tip.getAddress()); + + holder.itemView.setTag(R.id.tag_position, holder.getLayoutPosition()); + holder.itemView.setOnClickListener(onClickListener); + holder.itemView.setSelected(current == holder.getLayoutPosition()); + + View mName = holder.getView(R.id.amap_calculate_item_strategy_name); + holder.setText(R.id.amap_calculate_item_strategy_name, item.getStrategyName()); + mName.setBackgroundResource(getStrategyNameBkgResId(holder.getLayoutPosition())); + holder.setText(R.id.amap_calculate_item_strategy_time, item.getTime()); + holder.setText(R.id.amap_calculate_item_strategy_distance, item.getDistance()); + holder.setText(R.id.amap_calculate_item_strategy_desc, item.getDesc()); + } + + public void setOnClickListener(View.OnClickListener onClickListener) { + this.onClickListener = onClickListener; + } + + public void setCurrent(int current) { + this.current = current; + notifyItemChanged(lastPosition); + notifyItemChanged(current); + lastPosition = current; + } + + public MogoCalculatePath getCurrentItem() { + return list.get(current); + } + + private int getStrategyNameBkgResId(int position) { + switch (position) { + case 0: + return R.drawable.amap_calculate_navi_strategy1_bkg; + case 1: + return R.drawable.amap_calculate_navi_strategy2_bkg; + default: + return R.drawable.amap_calculate_navi_strategy3_bkg; + } + } +} diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/adapter/HistoryPoiAdapter.java b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/adapter/HistoryPoiAdapter.java index 824e6c6bcc..96c12aef52 100644 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/adapter/HistoryPoiAdapter.java +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/adapter/HistoryPoiAdapter.java @@ -32,7 +32,7 @@ public class HistoryPoiAdapter extends RecycleBaseAdapter { holder.setText(R.id.tv_position, tip.getName()); holder.setText(R.id.tv_position_des, tip.getAddress()); - holder.itemView.setTag(R.id.tag_position, tip); + holder.itemView.setTag(R.id.tag_item, tip); holder.itemView.setOnClickListener(onClickListener); } diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/adapter/SearchCategoryAdapter.java b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/adapter/SearchCategoryAdapter.java index 711a84c13d..6c4ade215f 100644 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/adapter/SearchCategoryAdapter.java +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/adapter/SearchCategoryAdapter.java @@ -4,6 +4,7 @@ import android.content.Context; import android.view.View; import com.mogo.map.search.inputtips.MogoTip; import com.mogo.module.navi.R; +import com.mogo.module.navi.bean.SearchPoi; import com.mogo.module.navi.ui.adapter.base.RecycleBaseAdapter; import com.mogo.module.navi.ui.adapter.base.RecycleViewHolder; import java.util.List; @@ -61,4 +62,9 @@ public class SearchCategoryAdapter extends RecycleBaseAdapter { notifyItemChanged(current); lastPosition = current; } + + + public MogoTip getCurrentItem(){ + return list.get(current); + } } diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/CategorySearchFragment.kt b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/CategorySearchFragment.kt index ca8db07eb7..e0727b9007 100644 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/CategorySearchFragment.kt +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/CategorySearchFragment.kt @@ -5,6 +5,7 @@ import android.view.View import androidx.fragment.app.Fragment import androidx.recyclerview.widget.LinearLayoutManager import com.mogo.map.search.inputtips.MogoTip +import com.mogo.module.common.MogoModulePaths import com.mogo.module.navi.R import com.mogo.module.navi.bean.SearchPoi import com.mogo.module.navi.constants.SearchServiceHolder @@ -53,6 +54,9 @@ class CategorySearchFragment : BaseSearchFragment() { tv_navi_navi.setOnClickListener { + var newInstance = ChoosePathFragment.newInstance(mAdapter.currentItem) + + SearchServiceHolder.push(newInstance, MogoModulePaths.PATH_FRAGMENT_CHOOSE_PAHT) } mAdapter.setOnClickListener { var position = it.getTag(R.id.tag_position) as Int diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/ChoosePathFragment.kt b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/ChoosePathFragment.kt new file mode 100644 index 0000000000..3548fb1c4c --- /dev/null +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/ChoosePathFragment.kt @@ -0,0 +1,105 @@ +package com.mogo.module.navi.ui.search + +import android.os.Bundle +import android.view.View +import androidx.fragment.app.Fragment +import androidx.recyclerview.widget.LinearLayoutManager +import com.mogo.map.navi.IMogoNaviListener +import com.mogo.map.navi.MogoCalculatePath +import com.mogo.map.navi.MogoNaviInfo +import com.mogo.map.search.inputtips.MogoTip +import com.mogo.module.common.MogoModulePaths +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.constants.AMapConstants +import com.mogo.module.navi.constants.SearchServiceHolder +import com.mogo.module.navi.ui.adapter.CalculatePathAdapter +import com.mogo.module.navi.ui.base.BaseFragment +import kotlinx.android.synthetic.main.fragment_search_category.rv_search_result +import kotlinx.android.synthetic.main.fragment_search_category.tv_navi_navi +import kotlinx.android.synthetic.main.include_search_bar.et_navi_search +import kotlinx.android.synthetic.main.include_search_bar.iv_navi_back + +/** + * @author zyz + * 2020-01-09. + */ +class ChoosePathFragment : BaseFragment(), IMogoNaviListener { + override fun onInitNaviFailure() { + } + + override fun onInitNaviSuccess() { + } + + override fun onNaviInfoUpdate(naviinfo: MogoNaviInfo?) { + } + + override fun onStartNavi() { + } + + override fun onStopNavi() { + } + + override fun onCalculateSuccess() { + mAdapter.setDatas(SearchServiceHolder.getNavi(activity!!).calculatedStrategies) + } + + override fun onoCalculateFailed() { + } + + private lateinit var mAdapter:CalculatePathAdapter + override fun getLayoutId(): Int { + return R.layout.fragment_search_category + } + var mogoTip: MogoTip?=null + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + mogoTip = arguments?.getParcelable(AMapConstants.KEY_PARCELABLE) + } + + override fun onViewCreated( + view: View, + savedInstanceState: Bundle? + ) { + super.onViewCreated(view, savedInstanceState) + iv_navi_back.setOnClickListener { + SearchServiceHolder.fragmentManager.pop() + } + + tv_navi_navi.text=getString(R.string.start_navi) + + et_navi_search.setText(getString(R.string.choose_path)) + et_navi_search.isEnabled=false + SearchServiceHolder.getNavi(context!!).naviTo(mogoTip?.point) + + SearchServiceHolder.listenerCenter.registerMogoNaviListener(MogoModulePaths.PATH_FRAGMENT_CHOOSE_PAHT,this) + + var arrayList = ArrayList() + mAdapter= CalculatePathAdapter(activity,arrayList) + rv_search_result.layoutManager=LinearLayoutManager(activity,LinearLayoutManager.VERTICAL,false) + + rv_search_result.adapter=mAdapter + tv_navi_navi.setOnClickListener { + SearchServiceHolder.getNavi(activity!!).startNavi(true) + } + + mAdapter.setOnClickListener { + var position = it.getTag(R.id.tag_position) as Int + mAdapter.setCurrent(position) + mAdapter.currentItem.onItemClickInteraction.onItemClicked(mAdapter.currentItem.mTagId) + + } + } + + + companion object{ + fun newInstance(searchPoi: MogoTip):Fragment{ + var bundle = Bundle() + bundle.putParcelable(AMapConstants.KEY_PARCELABLE, searchPoi) + var choosePathFragment = ChoosePathFragment() + choosePathFragment.arguments=bundle + return choosePathFragment + } + } +} diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/SearchFragment.java b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/SearchFragment.java index 8d716d88ae..fd430efb94 100644 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/SearchFragment.java +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/SearchFragment.java @@ -15,6 +15,7 @@ import com.mogo.module.common.MogoModulePaths; 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.constants.AMapConstants; import com.mogo.module.navi.constants.SearchServiceHolder; import com.mogo.module.navi.ui.adapter.HistoryPoiAdapter; import com.mogo.module.navi.ui.adapter.SearchPoiAdapter; @@ -70,7 +71,6 @@ public class SearchFragment extends BaseSearchFragment implements SearchView, Vi @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - } @Override @@ -112,7 +112,10 @@ public class SearchFragment extends BaseSearchFragment implements SearchView, Vi mHistoryAdapter.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - + SearchPoi item = (SearchPoi) v.getTag(R.id.tag_item); + MogoTip mogoTip = EntityConvertUtils.poi2MogoTip(item); + SearchServiceHolder.INSTANCE.push(ChoosePathFragment.Companion.newInstance(mogoTip), + MogoModulePaths.PATH_FRAGMENT_CHOOSE_PAHT); } }); @@ -121,6 +124,8 @@ public class SearchFragment extends BaseSearchFragment implements SearchView, Vi MogoTip tag = (MogoTip) v.getTag(R.id.tag_position); SearchPoi searchPoi = EntityConvertUtils.tipToPoi(tag); mSearchPresenter.insert(searchPoi); + SearchServiceHolder.INSTANCE.push(ChoosePathFragment.Companion.newInstance(tag), + MogoModulePaths.PATH_FRAGMENT_CHOOSE_PAHT); } }); @@ -132,7 +137,7 @@ public class SearchFragment extends BaseSearchFragment implements SearchView, Vi findViewById(R.id.tv_navi_setting).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - push(new NaviSettingFragment(),MogoModulePaths.PATH_FRAGMENT_SETTING); + push(new NaviSettingFragment(), MogoModulePaths.PATH_FRAGMENT_SETTING); } }); @@ -155,7 +160,7 @@ public class SearchFragment extends BaseSearchFragment implements SearchView, Vi findViewById(R.id.tv_navi_park).setOnClickListener(this); } - private void push(Fragment fragment,String tag) { + private void push(Fragment fragment, String tag) { FragmentDescriptor.Builder builder = new FragmentDescriptor.Builder(); builder.fragment(fragment); FragmentDescriptor build = @@ -386,7 +391,7 @@ public class SearchFragment extends BaseSearchFragment implements SearchView, Vi @Override public void onClick(View v) { TextView category = (TextView) v; String text = category.getText().toString(); - push(CategorySearchFragment.Companion.newInstance(text),MogoModulePaths.PATH_FRAGMENT_SEARCH_CATEGORY); - + push(CategorySearchFragment.Companion.newInstance(text), + MogoModulePaths.PATH_FRAGMENT_SEARCH_CATEGORY); } } diff --git a/modules/mogo-module-search/src/main/res/drawable/amap_calculate_navi_strategy1_bkg.xml b/modules/mogo-module-search/src/main/res/drawable/amap_calculate_navi_strategy1_bkg.xml new file mode 100644 index 0000000000..a3c21b02d5 --- /dev/null +++ b/modules/mogo-module-search/src/main/res/drawable/amap_calculate_navi_strategy1_bkg.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/mogo-module-search/src/main/res/drawable/amap_calculate_navi_strategy2_bkg.xml b/modules/mogo-module-search/src/main/res/drawable/amap_calculate_navi_strategy2_bkg.xml new file mode 100644 index 0000000000..c0f20a1c86 --- /dev/null +++ b/modules/mogo-module-search/src/main/res/drawable/amap_calculate_navi_strategy2_bkg.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/mogo-module-search/src/main/res/drawable/amap_calculate_navi_strategy3_bkg.xml b/modules/mogo-module-search/src/main/res/drawable/amap_calculate_navi_strategy3_bkg.xml new file mode 100644 index 0000000000..eef0c4f374 --- /dev/null +++ b/modules/mogo-module-search/src/main/res/drawable/amap_calculate_navi_strategy3_bkg.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/mogo-module-search/src/main/res/drawable/amap_calculate_navi_strategy_name_bkg.xml b/modules/mogo-module-search/src/main/res/drawable/amap_calculate_navi_strategy_name_bkg.xml new file mode 100644 index 0000000000..a3c21b02d5 --- /dev/null +++ b/modules/mogo-module-search/src/main/res/drawable/amap_calculate_navi_strategy_name_bkg.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/mogo-module-search/src/main/res/layout/fragment_search_category.xml b/modules/mogo-module-search/src/main/res/layout/fragment_search_category.xml index 6048efb724..2530d46b8d 100644 --- a/modules/mogo-module-search/src/main/res/layout/fragment_search_category.xml +++ b/modules/mogo-module-search/src/main/res/layout/fragment_search_category.xml @@ -24,6 +24,7 @@ android:id="@+id/rv_search_result" android:layout_width="match_parent" android:layout_height="match_parent" + android:layout_marginBottom="@dimen/dp_100" /> diff --git a/modules/mogo-module-search/src/main/res/layout/item_calculate_path_map.xml b/modules/mogo-module-search/src/main/res/layout/item_calculate_path_map.xml new file mode 100644 index 0000000000..8b46cc02a9 --- /dev/null +++ b/modules/mogo-module-search/src/main/res/layout/item_calculate_path_map.xml @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/mogo-module-search/src/main/res/values/ids.xml b/modules/mogo-module-search/src/main/res/values/ids.xml index ed4cc2c662..5f514a617e 100644 --- a/modules/mogo-module-search/src/main/res/values/ids.xml +++ b/modules/mogo-module-search/src/main/res/values/ids.xml @@ -1,4 +1,5 @@ + \ No newline at end of file diff --git a/modules/mogo-module-search/src/main/res/values/strings.xml b/modules/mogo-module-search/src/main/res/values/strings.xml index 6527ed6402..35f5830081 100644 --- a/modules/mogo-module-search/src/main/res/values/strings.xml +++ b/modules/mogo-module-search/src/main/res/values/strings.xml @@ -31,4 +31,6 @@ 设为家 设为公司 导航去这里 + 开始导航 + 路线选择