This commit is contained in:
wangcongtao
2020-04-16 17:18:44 +08:00
parent 48ee99730e
commit c8cf947075
13 changed files with 275 additions and 246 deletions

View File

@@ -40,255 +40,225 @@ import kotlinx.android.synthetic.main.fragment_search_category.tv_navi_navi
* @author zyz
* 2020-01-09.
*/
class CategorySearchFragment : BaseFragment(), CategoryView, IMogoVoiceCmdCallBack {
class CategorySearchFragment : BaseFragment(), CategoryView, IMogoVoiceCmdCallBack, IMogoMarkerClickListener {
// override fun onMarkerClicked(marker: IMogoMarker?): Boolean {
//
// return true
// }
override fun onCmdSelected(cmd: String?) {
if (cmd?.startsWith("position") == true) {
var index = cmd.substring(8)
mAdapter.setCurrent(index.toInt())
updateMarker()
goPath()
override fun onCmdSelected(cmd: String?) {
if (cmd?.startsWith("position") == true) {
var index = cmd.substring(8)
mAdapter.current = index.toInt()
updateMarker(false)
goPath()
}
}
}
override fun onCmdAction(speakText: String?) {
}
override fun onCmdAction(speakText: String?) {
}
override fun onCmdCancel(speakText: String?) {
}
override fun onCmdCancel(speakText: String?) {
}
override fun onSpeakEnd(speakText: String?) {
}
override fun onSpeakEnd(speakText: String?) {
}
override fun onSpeakSelectTimeOut(speakText: String?) {
}
override fun onSpeakSelectTimeOut(speakText: String?) {
}
private val TAG: String = "CategorySearchFragment"
private var addMarkers: ArrayList<IMogoMarker> = ArrayList()
var arrayList = ArrayList<MogoMarkerOptions>()
var locationList = ArrayList<MogoLatLng>()
private val TAG: String = "CategorySearchFragment"
private var addMarkers: ArrayList<IMogoMarker> = ArrayList()
var arrayList = ArrayList<MogoMarkerOptions>()
var locationList = ArrayList<MogoLatLng>()
private lateinit var cmds: ArrayList<String>
override fun renderSearchPoiResult(datums: List<MogoPoiItem>?) {
mAdapter.setDatas(datums)
cv_search_result.visibility = View.VISIBLE
pb_path.visibility = View.GONE
AIAssist.getInstance(context)
.speakTTSVoice(String.format("搜索到%d个位置请选择", datums?.size))
private lateinit var cmds: ArrayList<String>
override fun renderSearchPoiResult(datums: List<MogoPoiItem>?) {
mAdapter.setDatas(datums)
cv_search_result.visibility = View.VISIBLE
pb_path.visibility = View.GONE
AIAssist.getInstance(context).speakTTSVoice(String.format("搜索到%d个位置请选择", datums?.size))
arrayList.clear()
locationList.clear()
arrayList.clear()
locationList.clear()
for (index in 0 until datums!!.size) {
var decodeResource =
BitmapFactory.decodeResource(
resources,
if (mAdapter.current == index) R.mipmap.icon_search_category_checked else R.mipmap.icon_search_category_unchecked
)
for (index in 0 until datums!!.size) {
var decodeResource = BitmapFactory.decodeResource(
resources,
if (mAdapter.current == index) R.mipmap.icon_search_category_checked else R.mipmap.icon_search_category_unchecked
)
var createWaterMask =
BitmapUtils.createWaterMask(
context, decodeResource, (index + 1).toString(), R.color.white, 18
)
val options = MogoMarkerOptions()
.icon(createWaterMask)
.latitude(datums[index].point?.lat ?: 0.0)
.owner("CategorySearchFragment")
.`object`(index)
var createWaterMask = BitmapUtils.createWaterMask(
context, decodeResource, (index + 1).toString(), R.color.white, 18
)
val options = MogoMarkerOptions()
.icon(createWaterMask)
.latitude(datums[index].point?.lat ?: 0.0)
.owner("CategorySearchFragment")
.`object`(index)
// .anchor(0.5f, 1f)
.longitude(datums[index].point?.lng ?: 0.0)
arrayList.add(options)
locationList.add(datums[index].point)
.longitude(datums[index].point?.lng ?: 0.0)
arrayList.add(options)
locationList.add(datums[index].point)
var int2String = StringUtils.int2String(index + 1)
AIAssist.getInstance(context)
.registerUnWakeupCommand(
"position" + index, arrayOf("" + int2String + "", "" + int2String + ""), this
)
cmds.add("position" + index)
var int2String = StringUtils.int2String(index + 1)
AIAssist.getInstance(context).registerUnWakeupCommand("position${index}", arrayOf("${int2String}", "${int2String}"), this)
cmds.add("position" + index)
}
addMarkers()
}
addMarkers()
}
private fun addMarkers() {
addMarkers.clear()
var marginBounder = resources.getDimensionPixelSize(R.dimen.dp_60) * 2
SearchServiceHolder.getMapUIController()
.showBounds(
TAG, null, locationList, Rect(
cv_search_result.width + marginBounder, marginBounder, marginBounder, marginBounder
), false
private fun addMarkers() {
addMarkers.clear()
var marginBounder = resources.getDimensionPixelSize(R.dimen.dp_60) * 2
SearchServiceHolder.getMapUIController().showBounds(TAG,
null,
locationList,
Rect(cv_search_result.width + marginBounder, marginBounder, marginBounder, marginBounder),
false
)
for (options in arrayList) {
var addMarker = SearchServiceHolder.getMarkerManger()
.addMarker(TAG, options)
addMarkers.add(addMarker)
}
addClick()
}
private fun registerVoice() {
for (index in 0 until cmds.size) {
var int2String = StringUtils.int2String(index + 1)
AIAssist.getInstance(context)
.registerUnWakeupCommand(
"position" + index, arrayOf("" + int2String + "", "" + int2String + ""), this
)
for (options in arrayList) {
var addMarker = SearchServiceHolder.getMarkerManger().addMarker(TAG, options)
addMarker.onMarkerClickListener = this
addMarkers.add(addMarker)
}
}
}
override fun onHiddenChanged(hidden: Boolean) {
super.onHiddenChanged(hidden)
if (!hidden) {
registerVoice()
addMarkers()
} else {
unRegisterVoice()
private fun registerVoice() {
for (index in 0 until cmds.size) {
var int2String = StringUtils.int2String(index + 1)
AIAssist.getInstance(context).registerUnWakeupCommand("position${index}", arrayOf("${int2String}", "${int2String}"), this)
}
}
}
private fun addClick() {
if (addMarkers != null) {
for (item in addMarkers!!) {
item.setOnMarkerClickListener {
override fun onHiddenChanged(hidden: Boolean) {
super.onHiddenChanged(hidden)
if (!hidden) {
registerVoice()
addMarkers()
} else {
unRegisterVoice()
}
}
var index = it.mogoMarkerOptions.`object` as Int
mAdapter.current = index
rv_search_result.smoothScrollToPosition(index)
updateMarker()
true
override fun onMarkerClicked(marker: IMogoMarker?): Boolean {
var index = marker?.mogoMarkerOptions?.`object` as Int
mAdapter.current = index
rv_search_result.smoothScrollToPosition(index)
updateMarker()
return true
}
private lateinit var mAdapter: SearchCategoryAdapter
private lateinit var mSearchPresenter: CategoryPresenter
private var category: String? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
category = arguments?.getString("category")
mSearchPresenter = CategoryPresenter(this)
lifecycle.addObserver(mSearchPresenter)
cmds = ArrayList<String>()
}
override fun getLayoutId(): Int {
return R.layout.fragment_search_category
}
override fun onViewCreated(
view: View,
savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
mAdapter = SearchCategoryAdapter(activity, ArrayList())
rv_search_result.layoutManager = LinearLayoutManager(activity, LinearLayoutManager.VERTICAL, false)
rv_search_result.adapter = mAdapter
et_navi_search.setText(category)
iv_navi_back.setOnClickListener {
SearchServiceHolder.fragmentManager.pop()
}
}
tv_navi_navi.setOnClickListener {
goPath()
}
mAdapter.setOnClickListener {
var position = it.getTag(R.id.tag_position) as Int
mAdapter.current = position
updateMarker()
}
AIAssist.getInstance(context).registerUnWakeupCommand("back", arrayOf("关闭", "返回"), this)
}
}
private lateinit var mAdapter: SearchCategoryAdapter
private lateinit var mSearchPresenter: CategoryPresenter
private var category: String? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
category = arguments?.getString("category")
mSearchPresenter = CategoryPresenter(this)
lifecycle.addObserver(mSearchPresenter)
cmds = ArrayList<String>()
}
override fun getLayoutId(): Int {
return R.layout.fragment_search_category
}
override fun onViewCreated(
view: View,
savedInstanceState: Bundle?
) {
super.onViewCreated(view, savedInstanceState)
mAdapter = SearchCategoryAdapter(activity, ArrayList())
rv_search_result.layoutManager =
LinearLayoutManager(activity, LinearLayoutManager.VERTICAL, false)
rv_search_result.adapter = mAdapter
et_navi_search.setText(category)
iv_navi_back.setOnClickListener {
SearchServiceHolder.fragmentManager.pop()
private fun goPath() {
mAdapter.currentItem?.let {
AddressManager.calculatePath(mAdapter.currentItem.point)
}
}
tv_navi_navi.setOnClickListener {
private fun updateMarker(moveToCenter:Boolean = true) {
goPath()
}
mAdapter.setOnClickListener {
var position = it.getTag(R.id.tag_position) as Int
mAdapter.setCurrent(position)
updateMarker()
addMarkers?.get(mAdapter.lastPosition)?.setIcon(getMarkerIcon(mAdapter.lastPosition))
var current = addMarkers?.get(mAdapter.current)
current?.setIcon(getMarkerIcon(mAdapter.current))
current?.setToTop()
arrayList.get(mAdapter.lastPosition).icon(getMarkerIcon(mAdapter.lastPosition))
arrayList.get(mAdapter.current).icon(getMarkerIcon(mAdapter.current))
if (moveToCenter) {
SearchServiceHolder.statusManager.setUserInteractionStatus(TAG, true, false)
SearchServiceHolder.getMapUIController().moveToCenter(current.position)
}
}
AIAssist.getInstance(context)
.registerUnWakeupCommand("back", arrayOf("关闭", "返回"), this)
private fun getMarkerIcon(index: Int): Bitmap {
var decodeResource = BitmapFactory.decodeResource(
resources,
if (mAdapter.current == index) R.mipmap.icon_search_category_checked else R.mipmap.icon_search_category_unchecked
)
}
private fun goPath() {
mAdapter.currentItem?.let {
AddressManager.calculatePath(mAdapter.currentItem.point)
var createWaterMask = BitmapUtils.createWaterMask(
context, decodeResource, (index + 1).toString(), R.color.white, 18
)
return createWaterMask
}
}
private fun updateMarker() {
addMarkers?.get(mAdapter.lastPosition)
?.setIcon(getMarkerIcon(mAdapter.lastPosition))
var current = addMarkers?.get(mAdapter.current)
current?.setIcon(getMarkerIcon(mAdapter.current))
current?.setToTop()
arrayList.get(mAdapter.lastPosition)
.icon(getMarkerIcon(mAdapter.lastPosition))
arrayList.get(mAdapter.current)
.icon(getMarkerIcon(mAdapter.current))
}
private fun getMarkerIcon(index: Int): Bitmap {
var decodeResource =
BitmapFactory.decodeResource(
resources,
if (mAdapter.current == index) R.mipmap.icon_search_category_checked else R.mipmap.icon_search_category_unchecked
)
var createWaterMask =
BitmapUtils.createWaterMask(
context, decodeResource, (index + 1).toString(), R.color.white, 18
)
return createWaterMask
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
mSearchPresenter.startSearchLocalPoiByInput(category)
}
override fun onDestroyView() {
super.onDestroyView()
mSearchPresenter.onDestroy(viewLifecycleOwner)
lifecycle.removeObserver(mSearchPresenter)
SearchServiceHolder.getMarkerManger()
.removeMarkers(TAG)
unRegisterVoice()
}
private fun unRegisterVoice() {
cmds.forEach {
AIAssist.getInstance(context)
.unregisterUnWakeupCommand(it)
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
mSearchPresenter.startSearchLocalPoiByInput(category)
}
}
override fun onDestroy() {
super.onDestroy()
}
override fun onDestroyView() {
super.onDestroyView()
mSearchPresenter.onDestroy(viewLifecycleOwner)
lifecycle.removeObserver(mSearchPresenter)
SearchServiceHolder.getMarkerManger().removeMarkers(TAG)
companion object {
fun newInstance(category: String): Fragment {
MapCenterPointStrategy.setMapCenterPointByScene(SearchServiceHolder.getMapUIController(), Scene.CATEGORY_SEARCH)
var bundle = Bundle()
bundle.putString("category", category)
var categorySerachFragment = CategorySearchFragment()
categorySerachFragment.arguments = bundle
return categorySerachFragment
unRegisterVoice()
}
private fun unRegisterVoice() {
cmds.forEach {
AIAssist.getInstance(context).unregisterUnWakeupCommand(it)
}
}
override fun onDestroy() {
super.onDestroy()
}
companion object {
fun newInstance(category: String): Fragment {
MapCenterPointStrategy.setMapCenterPointByScene(SearchServiceHolder.getMapUIController(), Scene.CATEGORY_SEARCH)
var bundle = Bundle()
bundle.putString("category", category)
var categorySerachFragment = CategorySearchFragment()
categorySerachFragment.arguments = bundle
return categorySerachFragment
}
}
}
}