From 20a2e8f50659a0d0b367bb0a82b18beaeee326de Mon Sep 17 00:00:00 2001 From: tongchenfei Date: Wed, 13 May 2020 16:01:07 +0800 Subject: [PATCH 01/31] =?UTF-8?q?=E5=88=86=E4=BA=AB=E6=8C=89=E9=92=AE?= =?UTF-8?q?=E6=8D=A2=E6=88=90recyclerview=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/mogo-module-share/build.gradle | 1 + .../module/share/adapter/ShareBtnAdapter.kt | 52 ++++++ .../com/mogo/module/share/bean/ShareBtn.kt | 9 ++ .../module/share/constant/ShareConstants.java | 10 ++ .../share/dialog/LaucherShareDialog.java | 152 +++++++++++++----- .../share/listener/OnShareBtnClickListener.kt | 7 + .../src/main/res/layout/item_share_btn.xml | 28 ++++ .../res/layout/launcher_dialog_share_2.xml | 73 +-------- 8 files changed, 225 insertions(+), 107 deletions(-) create mode 100644 modules/mogo-module-share/src/main/java/com/mogo/module/share/adapter/ShareBtnAdapter.kt create mode 100644 modules/mogo-module-share/src/main/java/com/mogo/module/share/bean/ShareBtn.kt create mode 100644 modules/mogo-module-share/src/main/java/com/mogo/module/share/listener/OnShareBtnClickListener.kt create mode 100644 modules/mogo-module-share/src/main/res/layout/item_share_btn.xml diff --git a/modules/mogo-module-share/build.gradle b/modules/mogo-module-share/build.gradle index 41c1cbc2ec..e355181036 100644 --- a/modules/mogo-module-share/build.gradle +++ b/modules/mogo-module-share/build.gradle @@ -34,6 +34,7 @@ dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation rootProject.ext.dependencies.kotlinstdlibjdk7 implementation rootProject.ext.dependencies.androidxappcompat + implementation rootProject.ext.dependencies.androidxrecyclerview implementation rootProject.ext.dependencies.androidxccorektx implementation rootProject.ext.dependencies.androidxconstraintlayout implementation rootProject.ext.dependencies.arouter diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/adapter/ShareBtnAdapter.kt b/modules/mogo-module-share/src/main/java/com/mogo/module/share/adapter/ShareBtnAdapter.kt new file mode 100644 index 0000000000..6422eb7f07 --- /dev/null +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/adapter/ShareBtnAdapter.kt @@ -0,0 +1,52 @@ +package com.mogo.module.share.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import com.mogo.module.share.R +import com.mogo.module.share.bean.ShareBtn +import com.mogo.module.share.listener.OnShareBtnClickListener +import com.mogo.utils.glide.GlideApp +import com.mogo.utils.logger.Logger +import kotlinx.android.synthetic.main.item_share_btn.view.* + +class ShareBtnAdapter(val context: Context): RecyclerView.Adapter() { + private val TAG = "ShareBtnAdapter" + + private val btnList = ArrayList() + + var onShareBtnClickListener:OnShareBtnClickListener? = null + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ShareViewHolder { + return ShareViewHolder(LayoutInflater.from(context).inflate(R.layout.item_share_btn, parent, false)) + } + + override fun getItemCount(): Int { + return btnList.size + } + + override fun onBindViewHolder(holder: ShareViewHolder, position: Int) { + holder.bindData(btnList[position]) + } + + fun setShareBtnList(btns:List){ + btnList.clear() + btnList.addAll(btns) + Logger.d(TAG, "setShareBtnList: $btnList") + notifyDataSetChanged() + } + + inner class ShareViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView){ + init { + itemView.setOnClickListener { + onShareBtnClickListener?.onShareBtnClick(btnList[adapterPosition]) + } + } + fun bindData(shareBtn: ShareBtn) = with(itemView) { + tvShareContent.text = shareBtn.content + GlideApp.with(context).load(shareBtn.iconRes).into(ivShareIcon) + } + } +} \ No newline at end of file diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/bean/ShareBtn.kt b/modules/mogo-module-share/src/main/java/com/mogo/module/share/bean/ShareBtn.kt new file mode 100644 index 0000000000..5dc5675a02 --- /dev/null +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/bean/ShareBtn.kt @@ -0,0 +1,9 @@ +package com.mogo.module.share.bean + +/** + * 分享按钮内容封装 + * + * @param icon 分享按钮图标资源,暂时用不到,默认为空,以后如果引入服务端配置按钮,图片资源可以用这个参数 + * @param iconRes 分享按钮图标本地资源id,默认是-1 + */ +data class ShareBtn(var type: Int, var icon: String = "", var iconRes: Int = -1, var content: String) diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/constant/ShareConstants.java b/modules/mogo-module-share/src/main/java/com/mogo/module/share/constant/ShareConstants.java index a0134b5feb..9d5e0e6881 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/constant/ShareConstants.java +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/constant/ShareConstants.java @@ -20,4 +20,14 @@ public class ShareConstants { public static final int VOICE_CMD_SERVICE_SEEK_HELP = 1; public static final String VOICE_CMD_PUB_TROUBLE_HELP = "com.zhidao.auxiliaryDriving.pubTroubleHelp"; + + public static final int TYPE_BLOCK = 1; + public static final int TYPE_TRAFFIC_CHECK = 2; + public static final int TYPE_CLOSURE = 3; + public static final int TYPE_ACCIDENT = 4; + public static final int TYPE_REAL_TIME_TRAFFIC = 5; + public static final int TYPE_SEEK_HELP = 6; + public static final int TYPE_STAGNANT_WATER = 7; + public static final int TYPE_ROAD_ICY = 8; + public static final int TYPE_DENSE_FOG = 9; } diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/dialog/LaucherShareDialog.java b/modules/mogo-module-share/src/main/java/com/mogo/module/share/dialog/LaucherShareDialog.java index 6337780fac..60c33b3acc 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/dialog/LaucherShareDialog.java +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/dialog/LaucherShareDialog.java @@ -12,12 +12,17 @@ import android.view.WindowManager; import android.widget.TextView; import androidx.annotation.NonNull; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.module.common.utils.CarSeries; import com.mogo.module.share.R; import com.mogo.module.share.ShareControl; +import com.mogo.module.share.adapter.ShareBtnAdapter; +import com.mogo.module.share.bean.ShareBtn; import com.mogo.module.share.constant.ShareConstants; +import com.mogo.module.share.listener.OnShareBtnClickListener; import com.mogo.module.share.manager.ISeekHelpListener; import com.mogo.module.share.manager.SeekHelpManager; import com.mogo.service.IMogoServiceApis; @@ -27,7 +32,11 @@ import com.mogo.service.statusmanager.IMogoStatusManager; import com.mogo.utils.WindowUtils; import com.mogo.utils.logger.Logger; +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; @@ -43,14 +52,23 @@ public class LaucherShareDialog implements View.OnClickListener { private boolean isShown = false; - private TextView tvBlock; - private TextView tvTrafficCheck; - private TextView tvClosure; - private TextView tvNeedHelp; +// private TextView tvBlock; +// private TextView tvTrafficCheck; +// private TextView tvClosure; +// private TextView tvNeedHelp; +// +// private TextView tvAccident; +// private TextView tvRealTimeTraffic; +// private TextView tvStagnantWater; +// private TextView tvRoadIcy; +// private TextView tvDenseFog; + private Context mContext; private IMogoAnalytics mAnalytics; private IMogoStatusManager mStatusManager; private IMogoServiceApis mApis; + private RecyclerView rvShareBtnContainer; + private ShareBtnAdapter adapter; private WindowManager windowManager; @@ -72,55 +90,104 @@ public class LaucherShareDialog implements View.OnClickListener { dismiss(); } }); - tvBlock = body.findViewById(R.id.tvBlock); - tvTrafficCheck = body.findViewById(R.id.tvTrafficCheck); - tvClosure = body.findViewById(R.id.tvClosure); - tvNeedHelp = body.findViewById(R.id.tvNeedHelp); + + + rvShareBtnContainer = body.findViewById(R.id.rvShareBtnContainer); + LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext,RecyclerView.HORIZONTAL,false); + rvShareBtnContainer.setLayoutManager(linearLayoutManager); + adapter = new ShareBtnAdapter(mContext); + rvShareBtnContainer.setAdapter(adapter); + +// tvBlock = body.findViewById(R.id.tvBlock); +// tvTrafficCheck = body.findViewById(R.id.tvTrafficCheck); +// tvClosure = body.findViewById(R.id.tvClosure); +// tvNeedHelp = body.findViewById(R.id.tvNeedHelp); } private void initListener() { - tvBlock.setOnClickListener(this); - tvNeedHelp.setOnClickListener(this); - tvTrafficCheck.setOnClickListener(this); - tvClosure.setOnClickListener(this); + adapter.setOnShareBtnClickListener(new OnShareBtnClickListener() { + @Override + public void onShareBtnClick(@NotNull ShareBtn shareBtn) { + Logger.d(TAG,"分享按钮点击: "+shareBtn); +// traceData("1"); +// if (shareBtn.getType() == ShareConstants.TYPE_SEEK_HELP) { +// // 点击发起求助 +// SeekHelpManager.INSTANCE.seekHelp(mContext,seekListener,true); +// }else{ +// sendShareReceiver(shareBtn.getType() + ""); +// dismiss(); +// } + } + }); + +// tvBlock.setOnClickListener(this); +// tvNeedHelp.setOnClickListener(this); +// tvTrafficCheck.setOnClickListener(this); +// tvClosure.setOnClickListener(this); + } + + /** + * 初始化默认的分享按钮 + */ + private void initShareBtn(){ + List btns = new ArrayList<>(); + ShareBtn btn = new ShareBtn(ShareConstants.TYPE_BLOCK, "", R.drawable.share_block_up, "上报拥堵"); + btns.add(btn); + btn = new ShareBtn(ShareConstants.TYPE_TRAFFIC_CHECK, "", R.drawable.share_traffic_check, "上报交通检查"); + btns.add(btn); + btn = new ShareBtn(ShareConstants.TYPE_CLOSURE, "", R.drawable.share_road_closure, "上报封路"); + btns.add(btn); + btn = new ShareBtn(ShareConstants.TYPE_ACCIDENT, "", R.drawable.share_seek_help, "上报事故"); + btns.add(btn); + btn = new ShareBtn(ShareConstants.TYPE_REAL_TIME_TRAFFIC, "", R.drawable.share_seek_help, "实时路况"); + btns.add(btn); + btn = new ShareBtn(ShareConstants.TYPE_SEEK_HELP, "", R.drawable.share_seek_help, "发起求助"); + btns.add(btn); + btn = new ShareBtn(ShareConstants.TYPE_STAGNANT_WATER, "", R.drawable.share_seek_help, "道路积水"); + btns.add(btn); + btn = new ShareBtn(ShareConstants.TYPE_ROAD_ICY, "", R.drawable.share_seek_help, "道路结冰"); + btns.add(btn); + btn = new ShareBtn(ShareConstants.TYPE_DENSE_FOG, "", R.drawable.share_seek_help, "浓雾"); + btns.add(btn); + adapter.setShareBtnList(btns); } @Override public void onClick(View view) { int id = view.getId(); Logger.d(TAG, "onClick: " + id); - if (id == R.id.tvBlock) { - //拥堵 - traceTanluData("1"); - sendShareReceiver("1"); - traceTypeData("1"); - dismiss(); - } else if (id == R.id.oil_price_layout) { - // 分享油价,入口被屏蔽了 - traceData("1"); - Intent intent = new Intent(); - intent.setData(Uri.parse("freshthing://com.zhidao.fresh.things/shareOilPrice")); - mContext.startActivity(intent); - traceTypeData("2"); - dismiss(); - } else if (id == R.id.tvTrafficCheck) { - //交通检查 - traceData("1"); - sendShareReceiver("2"); - traceTypeData("3"); - dismiss(); - } else if (id == R.id.tvClosure) { - //封路 - traceData("1"); - sendShareReceiver("3"); - traceTypeData("4"); - dismiss(); - } else if (id == R.id.tvNeedHelp) { - // 故障求助 - SeekHelpManager.INSTANCE.seekHelp(mContext,seekListener,true); - } +// if (id == R.id.tvBlock) { +// //拥堵 +// traceTanluData("1"); +// sendShareReceiver("1"); +// traceTypeData("1"); +// dismiss(); +// } else if (id == R.id.oil_price_layout) { +// // 分享油价,入口被屏蔽了 +// traceData("1"); +// Intent intent = new Intent(); +// intent.setData(Uri.parse("freshthing://com.zhidao.fresh.things/shareOilPrice")); +// mContext.startActivity(intent); +// traceTypeData("2"); +// dismiss(); +// } else if (id == R.id.tvTrafficCheck) { +// //交通检查 +// traceData("1"); +// sendShareReceiver("2"); +// traceTypeData("3"); +// dismiss(); +// } else if (id == R.id.tvClosure) { +// //封路 +// traceData("1"); +// sendShareReceiver("3"); +// traceTypeData("4"); +// dismiss(); +// } else if (id == R.id.tvNeedHelp) { +// // 故障求助 +// SeekHelpManager.INSTANCE.seekHelp(mContext,seekListener,true); +// } } @@ -214,6 +281,7 @@ public class LaucherShareDialog implements View.OnClickListener { layoutParams.y = 0; initView(); initListener(); + initShareBtn(); windowManager.addView(body, layoutParams); isShown = true; } diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/listener/OnShareBtnClickListener.kt b/modules/mogo-module-share/src/main/java/com/mogo/module/share/listener/OnShareBtnClickListener.kt new file mode 100644 index 0000000000..e4c2eaf762 --- /dev/null +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/listener/OnShareBtnClickListener.kt @@ -0,0 +1,7 @@ +package com.mogo.module.share.listener + +import com.mogo.module.share.bean.ShareBtn + +interface OnShareBtnClickListener { + fun onShareBtnClick(shareBtn: ShareBtn) +} \ No newline at end of file diff --git a/modules/mogo-module-share/src/main/res/layout/item_share_btn.xml b/modules/mogo-module-share/src/main/res/layout/item_share_btn.xml new file mode 100644 index 0000000000..c732a3e2e5 --- /dev/null +++ b/modules/mogo-module-share/src/main/res/layout/item_share_btn.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/mogo-module-share/src/main/res/layout/launcher_dialog_share_2.xml b/modules/mogo-module-share/src/main/res/layout/launcher_dialog_share_2.xml index 7c4e60d6bc..b5403c8507 100644 --- a/modules/mogo-module-share/src/main/res/layout/launcher_dialog_share_2.xml +++ b/modules/mogo-module-share/src/main/res/layout/launcher_dialog_share_2.xml @@ -31,73 +31,16 @@ app:layout_constraintStart_toStartOf="@+id/vBg" app:layout_constraintTop_toTopOf="@+id/vBg" /> - - - - - - - - + app:layout_constraintTop_toBottomOf="@+id/btn_share_title" + app:layout_constraintLeft_toLeftOf="@+id/vBg"/> + + app:layout_constraintTop_toBottomOf="@+id/rvShareBtnContainer" /> \ No newline at end of file From bd9af07fb86c893dac28d7542387c1047f298200 Mon Sep 17 00:00:00 2001 From: tongchenfei Date: Wed, 13 May 2020 17:05:08 +0800 Subject: [PATCH 02/31] =?UTF-8?q?=E5=87=86=E5=A4=87=E6=8E=A5=E5=85=A5?= =?UTF-8?q?=E8=AF=AD=E9=9F=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/share/ShareVoiceCmdReceiver.kt | 43 +++++++++++++++---- .../com/mogo/module/share/bean/ShareBtn.kt | 2 +- .../module/share/constant/ShareConstants.java | 25 +++++++---- .../share/dialog/LaucherShareDialog.java | 28 +++++------- .../mogo/module/share/manager/UploadHelper.kt | 23 ++++++++++ 5 files changed, 85 insertions(+), 36 deletions(-) create mode 100644 modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/UploadHelper.kt diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareVoiceCmdReceiver.kt b/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareVoiceCmdReceiver.kt index 5a0d662a84..57f39019d6 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareVoiceCmdReceiver.kt +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareVoiceCmdReceiver.kt @@ -4,22 +4,49 @@ import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import com.mogo.module.share.constant.ShareConstants -import com.mogo.module.share.constant.ShareConstants.VOICE_CMD_PUB_TROUBLE_HELP +import com.mogo.module.share.constant.ShareConstants.* +import com.mogo.module.share.manager.UploadHelper import com.mogo.utils.logger.Logger /** * 用于接收唤醒词指令,现在只接收 com.zhidao.speech.awake.notify 这一条广播 */ class ShareVoiceCmdReceiver : BroadcastReceiver() { + private val TAG = "ShareVoiceCmdReceiver" override fun onReceive(context: Context, intent: Intent) { // 接收唤醒词指令 - val command = intent.getStringExtra("command") - Logger.d("ShareCmdReceiver", "收到唤醒词指令: $command") - if (command == VOICE_CMD_PUB_TROUBLE_HELP) { - // 开启服务,准备上报求助 - val seekHelp = Intent(context, VoiceCmdService::class.java) - seekHelp.putExtra(ShareConstants.VOICE_CMD_SERVICE_EVENT_KEY, ShareConstants.VOICE_CMD_SERVICE_SEEK_HELP) - context.startService(seekHelp) + val command = intent.getStringExtra("command")?:"" + Logger.d(TAG, "收到唤醒词指令: $command") + when (command) { + VOICE_CMD_PUB_TROUBLE_HELP -> { + // 开启服务,准备上报求助 + val seekHelp = Intent(context, VoiceCmdService::class.java) + seekHelp.putExtra(ShareConstants.VOICE_CMD_SERVICE_EVENT_KEY, ShareConstants.VOICE_CMD_SERVICE_SEEK_HELP) + context.startService(seekHelp) + } + VOICE_CMD_GO_TO_SHARE ->{ + when (intent.getStringExtra("ob") ?: "") { + "积水"->{ + UploadHelper.upload(context, TYPE_STAGNANT_WATER) + } + "积冰"->{ + UploadHelper.upload(context, TYPE_ROAD_ICY) + } + "大雾"->{ + UploadHelper.upload(context, TYPE_DENSE_FOG) + } + "事故"->{ + UploadHelper.upload(context, TYPE_ACCIDENT) + } + } + } + VOICE_CMD_PUB_ROAD_CONDITION->{ + if(intent.getStringExtra("ob")?:"" == "路况") { + // 上报实时路况 + Logger.d(TAG, "分享框准备触发上报实时路况") + UploadHelper.upload(context, TYPE_REAL_TIME_TRAFFIC) + } + } } } } \ No newline at end of file diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/bean/ShareBtn.kt b/modules/mogo-module-share/src/main/java/com/mogo/module/share/bean/ShareBtn.kt index 5dc5675a02..bbadda8f06 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/bean/ShareBtn.kt +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/bean/ShareBtn.kt @@ -6,4 +6,4 @@ package com.mogo.module.share.bean * @param icon 分享按钮图标资源,暂时用不到,默认为空,以后如果引入服务端配置按钮,图片资源可以用这个参数 * @param iconRes 分享按钮图标本地资源id,默认是-1 */ -data class ShareBtn(var type: Int, var icon: String = "", var iconRes: Int = -1, var content: String) +data class ShareBtn(var type: String, var icon: String = "", var iconRes: Int = -1, var content: String) diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/constant/ShareConstants.java b/modules/mogo-module-share/src/main/java/com/mogo/module/share/constant/ShareConstants.java index 9d5e0e6881..8a676c9061 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/constant/ShareConstants.java +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/constant/ShareConstants.java @@ -19,15 +19,22 @@ public class ShareConstants { public static final String VOICE_CMD_SERVICE_EVENT_KEY = "type"; public static final int VOICE_CMD_SERVICE_SEEK_HELP = 1; + // 此处只记录了事故、实时路况、道路积水、道路结冰、浓雾,至于拥堵、交通检查和封路是在extention模块里面管理 public static final String VOICE_CMD_PUB_TROUBLE_HELP = "com.zhidao.auxiliaryDriving.pubTroubleHelp"; + public static final String VOICE_CMD_GO_TO_SHARE = "com.zhidao.share"; + /** + * 这个是实时路况,不是拥堵,拥堵放在了extention模块里面处理 + */ + public static final String VOICE_CMD_PUB_ROAD_CONDITION = "com.zhidao.pathfinder.report" + + ".roadCondition"; - public static final int TYPE_BLOCK = 1; - public static final int TYPE_TRAFFIC_CHECK = 2; - public static final int TYPE_CLOSURE = 3; - public static final int TYPE_ACCIDENT = 4; - public static final int TYPE_REAL_TIME_TRAFFIC = 5; - public static final int TYPE_SEEK_HELP = 6; - public static final int TYPE_STAGNANT_WATER = 7; - public static final int TYPE_ROAD_ICY = 8; - public static final int TYPE_DENSE_FOG = 9; + public static final String TYPE_BLOCK = "1"; + public static final String TYPE_TRAFFIC_CHECK = "2"; + public static final String TYPE_CLOSURE = "3"; + public static final String TYPE_ACCIDENT = "10013"; + public static final String TYPE_REAL_TIME_TRAFFIC = "10015"; + public static final String TYPE_SEEK_HELP = "6"; + public static final String TYPE_STAGNANT_WATER = "10008"; + public static final String TYPE_ROAD_ICY = "10011"; + public static final String TYPE_DENSE_FOG = "10010"; } diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/dialog/LaucherShareDialog.java b/modules/mogo-module-share/src/main/java/com/mogo/module/share/dialog/LaucherShareDialog.java index 60c33b3acc..4e167b9c92 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/dialog/LaucherShareDialog.java +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/dialog/LaucherShareDialog.java @@ -25,6 +25,7 @@ import com.mogo.module.share.constant.ShareConstants; import com.mogo.module.share.listener.OnShareBtnClickListener; import com.mogo.module.share.manager.ISeekHelpListener; import com.mogo.module.share.manager.SeekHelpManager; +import com.mogo.module.share.manager.UploadHelper; import com.mogo.service.IMogoServiceApis; import com.mogo.service.MogoServicePaths; import com.mogo.service.analytics.IMogoAnalytics; @@ -106,19 +107,18 @@ public class LaucherShareDialog implements View.OnClickListener { private void initListener() { - adapter.setOnShareBtnClickListener(new OnShareBtnClickListener() { @Override public void onShareBtnClick(@NotNull ShareBtn shareBtn) { Logger.d(TAG,"分享按钮点击: "+shareBtn); -// traceData("1"); -// if (shareBtn.getType() == ShareConstants.TYPE_SEEK_HELP) { -// // 点击发起求助 -// SeekHelpManager.INSTANCE.seekHelp(mContext,seekListener,true); -// }else{ -// sendShareReceiver(shareBtn.getType() + ""); -// dismiss(); -// } + traceData("1"); + if (ShareConstants.TYPE_SEEK_HELP.equalsIgnoreCase(shareBtn.getType())) { + // 点击发起求助 + SeekHelpManager.INSTANCE.seekHelp(mContext,seekListener,true); + }else{ + sendShareReceiver(shareBtn.getType()); + dismiss(); + } } }); @@ -211,15 +211,7 @@ public class LaucherShareDialog implements View.OnClickListener { * 发送广播 1拥堵,2交通检查,3封路 */ private void sendShareReceiver(String type) { - mStatusManager.setUploadingStatus("CARD_TYPE_ROAD_CONDITION", true); - - Logger.d("LaucherShareDialog", "LaucherShareDialog sendShareReceiver ---->"); - Intent intent = new Intent(); - intent.setAction("com.zhidao.roadcondition.share"); - intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); - intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES); - intent.putExtra("type", type); - mContext.sendBroadcast(intent); + UploadHelper.INSTANCE.upload(mContext, type); } /** diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/UploadHelper.kt b/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/UploadHelper.kt new file mode 100644 index 0000000000..a5edbc9e34 --- /dev/null +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/UploadHelper.kt @@ -0,0 +1,23 @@ +package com.mogo.module.share.manager + +import android.content.Context +import android.content.Intent +import com.mogo.module.share.ShareControl +import com.mogo.module.share.dialog.LaucherShareDialog +import com.mogo.utils.logger.Logger + +/** + * 上报工具类 + */ +object UploadHelper { + fun upload(context:Context, type: String) { + ShareControl.getInstance(context).mogoServiceApis.statusManagerApi.setUploadingStatus("CARD_TYPE_ROAD_CONDITION", true) + Logger.d("UploadHelper", "upload ---->") + val intent = Intent() + intent.action = "com.zhidao.roadcondition.share" + intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND) + intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES) + intent.putExtra("type", type) + context.sendBroadcast(intent) + } +} \ No newline at end of file From 1d3dbb80412c4baffdff28a4e0d6f61bdebf3a36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Thu, 14 May 2020 19:00:58 +0800 Subject: [PATCH 03/31] =?UTF-8?q?=E5=8D=87=E7=BA=A7=E4=BA=86V2X=E6=94=AF?= =?UTF-8?q?=E6=8C=812.0.2=E4=B8=AD=E7=9A=84=E4=B8=80=E4=BA=9B=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index b6a4fe9fdd..7a2fa60048 100644 --- a/gradle.properties +++ b/gradle.properties @@ -66,7 +66,7 @@ MOGO_MODULE_GUIDESHOW_PROVIDER_VERSION=1.0.2-SNAPSHOT # 在线车辆F MOGO_MODULE_ONLINECAR_VERSION=1.0.3.2 # v2x -MOGO_MODULE_V2X_VERSION=1.0.6.28 +MOGO_MODULE_V2X_VERSION=1.0.7 # 媒体卡片 MOGO_MODULE_MEDIA_VERSION=1.0.4.3 # 推送 From 077e0e3a97aecc3053af369f373b134594e12c9a Mon Sep 17 00:00:00 2001 From: tongchenfei Date: Fri, 15 May 2020 10:37:40 +0800 Subject: [PATCH 04/31] =?UTF-8?q?=E4=BA=8B=E4=BB=B6=E4=B8=8A=E6=8A=A5?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../extensions/entrance/EntrancePresenter.java | 16 ++++++++++++++-- .../mogo/module/share/ShareVoiceCmdReceiver.kt | 13 +++++++++---- .../mogo/module/share/manager/UploadHelper.kt | 2 +- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntrancePresenter.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntrancePresenter.java index 2f1d174767..86605ad0ab 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntrancePresenter.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntrancePresenter.java @@ -27,6 +27,7 @@ import com.mogo.service.statusmanager.IMogoStatusManager; import com.mogo.service.statusmanager.StatusDescriptor; import com.mogo.utils.logger.Logger; +import org.json.JSONException; import org.json.JSONObject; import java.util.HashMap; @@ -203,8 +204,19 @@ public class EntrancePresenter extends Presenter< EntranceView > implements IMog if ( mIMogoAuthorizeModuleManager.needAuthorize( AUTHORIZE_TYPE_LAUNCHER_SHARE ) ) { mIMogoAuthorizeModuleManager.invokeAuthorization( AUTHORIZE_TYPE_LAUNCHER_SHARE ); } else { - uploadRoadCondition(); - Log.d( TAG, "mogoIntentListener 分享路况 唤醒 ----> " ); + JSONObject jsonObject = null; + try { + jsonObject = new JSONObject( data ); + String typeString = jsonObject.get( "obj" ).toString(); + Logger.d(TAG, "mogiIntentListener 准备上报拥堵: " + typeString); + if("拥堵".equals(typeString)) { + uploadRoadCondition(); + Log.d(TAG, "mogoIntentListener 上报拥堵 唤醒 ----> "); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } } else if ( intentStr.equals( ExtensionsModuleConst.SHARE_DIALOG_CLOSE ) ) { //关闭分享框 唤醒 if ( mIMogoAuthorizeModuleManager.needAuthorize( AUTHORIZE_TYPE_LAUNCHER_SHARE ) ) { diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareVoiceCmdReceiver.kt b/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareVoiceCmdReceiver.kt index 57f39019d6..4966611d75 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareVoiceCmdReceiver.kt +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareVoiceCmdReceiver.kt @@ -7,6 +7,7 @@ import com.mogo.module.share.constant.ShareConstants import com.mogo.module.share.constant.ShareConstants.* import com.mogo.module.share.manager.UploadHelper import com.mogo.utils.logger.Logger +import org.json.JSONObject /** * 用于接收唤醒词指令,现在只接收 com.zhidao.speech.awake.notify 这一条广播 @@ -25,23 +26,27 @@ class ShareVoiceCmdReceiver : BroadcastReceiver() { context.startService(seekHelp) } VOICE_CMD_GO_TO_SHARE ->{ - when (intent.getStringExtra("ob") ?: "") { + val ob = JSONObject(intent.getStringExtra("data") ?: "").opt("ob") + Logger.d(TAG, "ob: $ob") + when (ob) { "积水"->{ UploadHelper.upload(context, TYPE_STAGNANT_WATER) } "积冰"->{ UploadHelper.upload(context, TYPE_ROAD_ICY) } - "大雾"->{ + "雾"->{ UploadHelper.upload(context, TYPE_DENSE_FOG) } - "事故"->{ + "交通事故"->{ UploadHelper.upload(context, TYPE_ACCIDENT) } } } VOICE_CMD_PUB_ROAD_CONDITION->{ - if(intent.getStringExtra("ob")?:"" == "路况") { + val ob = JSONObject(intent.getStringExtra("data") ?: "").opt("obj") + Logger.d(TAG, "ob: $ob") + if(ob == "路况") { // 上报实时路况 Logger.d(TAG, "分享框准备触发上报实时路况") UploadHelper.upload(context, TYPE_REAL_TIME_TRAFFIC) diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/UploadHelper.kt b/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/UploadHelper.kt index a5edbc9e34..906c291da8 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/UploadHelper.kt +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/UploadHelper.kt @@ -12,7 +12,7 @@ import com.mogo.utils.logger.Logger object UploadHelper { fun upload(context:Context, type: String) { ShareControl.getInstance(context).mogoServiceApis.statusManagerApi.setUploadingStatus("CARD_TYPE_ROAD_CONDITION", true) - Logger.d("UploadHelper", "upload ---->") + Logger.d("UploadHelper", "upload ----> $type") val intent = Intent() intent.action = "com.zhidao.roadcondition.share" intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND) From 9e11eecc2e51e24299c244a654c1ca7f2291cb9f Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Fri, 15 May 2020 10:45:11 +0800 Subject: [PATCH 05/31] opt --- .idea/misc.xml | 2 +- config.gradle | 2 + gradle.properties | 4 +- .../mogo/map/listener/IMogoMapListener.java | 14 +- .../map/navi/IMogoAimlessModeListener.java | 4 +- .../main/java/com/mogo/map/MogoInitor.java | 16 - .../module/apps/AppNavigatorFragment.java | 273 ++---------------- .../module/apps/AppNavigatorPresenter.java | 5 +- .../mogo/module/apps/AppServiceHandler.java | 15 +- .../module/apps/AppsFragmentProvider.java | 2 +- .../com/mogo/module/apps/AppsPresenter.java | 124 ++++---- .../apps/adapter/AppIndicatorAdapter.java | 58 +--- .../apps/adapter/base/RecycleBaseAdapter.java | 95 +++--- .../module/apps/applaunch/AppLauncher.java | 2 + .../applaunch/InternalFunctionLauncher.java | 47 +++ .../mogo/module/apps/model/NavigatorApp.java | 32 +- .../mogo/module/apps/model/NavigatorApps.java | 56 +--- .../apps/utils/CardScaleTransformer.java | 122 -------- .../module_apps_fragment_apps_navigator.xml | 47 +-- .../layout/module_apps_item_app_indicator.xml | 18 +- .../back/BackToLauncherModuleProvider.java | 5 +- .../module/back/BackToMainHomeManager.java | 9 +- .../extensions/ExtensionsPresenter.java | 6 +- .../extensions/entrance/EntranceFragment.java | 88 ------ .../res/layout/module_ext_layout_entrance.xml | 81 +----- .../layout/module_ext_layout_extensions.xml | 1 + .../com/mogo/module/main/MainActivity.java | 116 +------- .../com/mogo/module/main/MainPresenter.java | 65 +---- .../java/com/mogo/module/main/MainView.java | 5 - .../module/main/cards/MogoModulesHandler.java | 26 -- .../module/main/cards/MogoModulesManager.java | 131 +-------- .../module/main/constants/MainConstants.java | 15 - .../res/layout/module_main_activity_main.xml | 11 +- .../com/mogo/module/map/MapPresenter.java | 64 +--- .../module/navi/constants/AMapConstants.java | 2 +- .../navi/constants/SearchServiceHolder.kt | 3 +- .../module/navi/manager/AddressManager.kt | 15 + .../navi/manager/MogoAddressManager.java | 16 +- .../navi/ui/search/ChoosePathFragment.kt | 37 +-- .../com/mogo/module/service/MogoServices.java | 112 ++----- .../service/marker/MapMarkerManager.java | 5 +- .../module/service/receiver/MogoReceiver.java | 1 + .../service/refresh/AutoRefreshStrategy.java | 4 +- .../service/adas/IMogoADASController.java | 13 +- .../statusmanager/IMogoStatusManager.java | 8 +- services/mogo-service/build.gradle | 1 + .../service/impl/adas/MogoADASController.java | 81 ++++-- .../mogo/service/impl/map/MogoMapService.java | 2 - .../impl/singleton/SingletonsHolder.java | 2 +- 49 files changed, 430 insertions(+), 1433 deletions(-) delete mode 100644 libraries/mogo-map/src/main/java/com/mogo/map/MogoInitor.java create mode 100644 modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/InternalFunctionLauncher.java delete mode 100644 modules/mogo-module-apps/src/main/java/com/mogo/module/apps/utils/CardScaleTransformer.java diff --git a/.idea/misc.xml b/.idea/misc.xml index 707ee6e613..2dc54c489f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/config.gradle b/config.gradle index e1158d2fd3..1b33af44ee 100644 --- a/config.gradle +++ b/config.gradle @@ -143,5 +143,7 @@ ext { gpssimulator : "com.mogo.module:module-gps-simulator:${MOGO_MODULE_GPS_SIMULATOR_VERSION}", gpssimulatordebug : "com.mogo.module:module-gps-simulator-debug:${MOGO_MODULE_GPS_SIMULATOR_DEBUG_VERSION}", gpssimulatornoop : "com.mogo.module:module-gps-simulator-noop:${MOGO_MODULE_GPS_SIMULATOR_NOOP_VERSION}", + + adasapi : "com.zhidao.autopilot.support:adas:1.0.0-SNAPSHOT", ] } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index b6a4fe9fdd..7e35f360fc 100644 --- a/gradle.properties +++ b/gradle.properties @@ -56,9 +56,9 @@ MOGO_MODULE_GUIDE_VERSION=1.0.3.12 # 探路 MOGO_MODULE_TANLU_VERSION=1.0.5.6 # 车聊聊 -CARCHATTING_VERSION=1.0.3.2-SNAPSHOT +CARCHATTING_VERSION=1.0.4-SNAPSHOT # 车聊聊接口 -CARCHATTINGPROVIDER_VERSION=1.0.3.2-SNAPSHOT +CARCHATTINGPROVIDER_VERSION=1.0.4-SNAPSHOT # 视频引导 MOGO_MODULE_GUIDESHOW_VERSION=1.0.2-SNAPSHOT # 视频引导接口 diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/listener/IMogoMapListener.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/listener/IMogoMapListener.java index 13f5e3ac4a..f5667e96c2 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/listener/IMogoMapListener.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/listener/IMogoMapListener.java @@ -18,42 +18,42 @@ public interface IMogoMapListener { /** * 地图加载完毕 */ - void onMapLoaded(); + default void onMapLoaded(){}; /** * 地图点击 * * @param motionEvent */ - void onTouch( MotionEvent motionEvent ); + default void onTouch( MotionEvent motionEvent ){}; /** * 地图上的任意poi点击 * * @param poi */ - void onPOIClick( MogoPoi poi ); + default void onPOIClick( MogoPoi poi ){}; /** * 地图点击 * * @param latLng */ - void onMapClick( MogoLatLng latLng ); + default void onMapClick( MogoLatLng latLng ){} /** * 地图锁定 * * @param isLock */ - void onLockMap( boolean isLock ); + default void onLockMap( boolean isLock ){} /** * 地图白天黑夜、导航视角切换 * * @param ui */ - void onMapModeChanged( EnumMapUI ui ); + default void onMapModeChanged( EnumMapUI ui ){} /** * @param latLng 中点的经纬度 @@ -61,5 +61,5 @@ public interface IMogoMapListener { * @param tilt 倾斜度 * @param bearing 旋转角度 */ - void onMapChanged( MogoLatLng latLng, float zoom, float tilt, float bearing ); + default void onMapChanged( MogoLatLng latLng, float zoom, float tilt, float bearing ){} } diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoAimlessModeListener.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoAimlessModeListener.java index 5138ad5729..4d36b30fb0 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoAimlessModeListener.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoAimlessModeListener.java @@ -11,12 +11,12 @@ public interface IMogoAimlessModeListener { /** * 巡航信息发生改变 */ - void onUpdateTraffic2( MogoTraffic traffic ); + default void onUpdateTraffic2( MogoTraffic traffic ){} /** * 拥堵信息 * * @param info */ - void onUpdateCongestion( MogoCongestionInfo info ); + default void onUpdateCongestion( MogoCongestionInfo info ){} } diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MogoInitor.java b/libraries/mogo-map/src/main/java/com/mogo/map/MogoInitor.java deleted file mode 100644 index 76d61012a6..0000000000 --- a/libraries/mogo-map/src/main/java/com/mogo/map/MogoInitor.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.mogo.map; - -import android.content.Context; - - -/** - * @author congtaowang - * @since 2019-12-26 - *

- * 描述 - */ -public class MogoInitor { - - public static void init( Context context ) { - } -} diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorFragment.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorFragment.java index d5b4006ee4..a1c65890ef 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorFragment.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorFragment.java @@ -1,37 +1,20 @@ package com.mogo.module.apps; import android.os.Bundle; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; - import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; -import com.alibaba.android.arouter.launcher.ARouter; + import com.mogo.commons.mvp.MvpFragment; import com.mogo.module.apps.adapter.AppIndicatorAdapter; -import com.mogo.module.apps.adapter.base.RecycleViewHolder; -import com.mogo.module.apps.model.NavigatorApp; +import com.mogo.module.apps.applaunch.AppLauncher; +import com.mogo.module.apps.applaunch.BaseAppLauncher; +import com.mogo.module.apps.applaunch.InternalFunctionLauncher; import com.mogo.module.apps.model.NavigatorApps; -import com.mogo.module.apps.utils.CardScaleTransformer; -import com.mogo.module.common.MogoModulePaths; -import com.mogo.service.MogoServicePaths; -import com.mogo.service.analytics.IMogoAnalytics; -import com.mogo.service.cardmanager.IMogoCardChangedListener; -import com.mogo.service.fragmentmanager.FragmentDescriptor; -import com.mogo.service.fragmentmanager.IMogoFragmentManager; -import com.mogo.service.module.IMogoModuleProvider; -import com.mogo.utils.logger.Logger; -import com.yarolegovich.discretescrollview.DiscreteScrollLayoutManager; -import com.yarolegovich.discretescrollview.DiscreteScrollView; -import java.util.ArrayList; + import java.util.HashMap; -import java.util.List; import java.util.Map; /** @@ -40,27 +23,14 @@ import java.util.Map; *

* 描述 */ -public class AppNavigatorFragment extends MvpFragment - implements AppNavigatorView, DiscreteScrollView.OnItemChangedListener, - DiscreteScrollView.ScrollStateChangeListener, - IMogoCardChangedListener { +public class AppNavigatorFragment extends MvpFragment< AppNavigatorView, AppNavigatorPresenter > implements AppNavigatorView { private static final String TAG = "AppNavigatorFragment"; - private View mApps; - private IMogoFragmentManager mMogoFragmentManager; - List apps; + private RecyclerView mNavigatorAppsList; + private AppIndicatorAdapter mAppIndicatorAdapter; - /** - * 搜索莫模块 - */ - private IMogoModuleProvider mSearchProvider; - - private IMogoAnalytics mMogoAnalytics; -// private DiscreteScrollView scroller; - - private static int CARD_SIZE = 6; - private AppIndicatorAdapter appIndicatorAdapter; + private BaseAppLauncher mLauncher; @Override protected int getLayoutId() { @@ -69,228 +39,49 @@ public class AppNavigatorFragment extends MvpFragment { +// openAppsPanel(); +// trackNavigatorClickEvent( 4 ); +// } ); + mLauncher = new InternalFunctionLauncher( getActivity() ); + mLauncher.setNext( new AppLauncher() ); - mMogoFragmentManager = (IMogoFragmentManager) ARouter.getInstance() - .build(MogoServicePaths.PATH_FRAGMENT_MANAGER) - .navigation(); - - mApps = findViewById(R.id.module_apps_id_apps); - -// scroller = findViewById(R.id.module_apps_id_scroller); -// -// scroller.setRatio(330 / 523F); -// //scroller.setRatio(176/279F); -// scroller.setSlideOnFling(true); -// scroller.addOnItemChangedListener(this); -// scroller.addScrollStateChangeListener(this); -// //scroller.setItemTransitionTimeMillis(DiscreteScrollViewOptions.getTransitionTime()); -// apps = NavigatorApps.getApps(); -// CARD_SIZE = apps.size(); -// scroller.setItemTransformer(new CardScaleTransformer.Builder() -// .setMinScale(0.84f) -// .build()); - - appIndicatorAdapter = new AppIndicatorAdapter(getContext(), apps); - - appIndicatorAdapter.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - NavigatorApp item = (NavigatorApp) v.getTag(); - AppServiceHandler.getMogoCardManager().switch2(item.mModuleType); - } - }); - -// scroller.setAdapter(appIndicatorAdapter); -// scroller.scrollToPosition(Integer.MAX_VALUE / 2 - 1); - //mNavigation.setOnClickListener( view -> { - // openSearchPanel(); - // trackNavigatorClickEvent( 1 ); - //} ); - //mMediaCenter.setOnClickListener( view -> { - // try { - // LaunchUtils.launchByPkg( getContext(), AppsConst.APP_PKG_MUSIC ); - // trackNavigatorClickEvent( 2 ); - // } catch ( Exception e ) { - // TipToast.shortTip( R.string.module_apps_str_no_app ); - // } - //} ); - //mCarSettings.setOnClickListener( view -> { - // try { - // LaunchUtils.launchByPkg( getContext(), AppsConst.APP_PKG_CAR_SETTINGS ); - // trackNavigatorClickEvent( 3 ); - // } catch ( Exception e ) { - // TipToast.shortTip( R.string.module_apps_str_no_app ); - // } - //} ); - mApps.setOnClickListener(view -> { - openAppsPanel(); - - //AppServiceHandler.getMogoCardManager() - // .switch2(apps.get((int) (Math.random() * 6)).mModuleType); - - trackNavigatorClickEvent(4); - }); - AppServiceHandler.init(getContext()); - - AppServiceHandler.getMogoCardManager().registerCardChangedListener(TAG, this); - } - - private void scrollToCenter(int index) { - + mNavigatorAppsList = findViewById( R.id.module_apps_id_apps_list ); + mNavigatorAppsList.setLayoutManager( new LinearLayoutManager( getActivity(), RecyclerView.VERTICAL, false ) ); + mAppIndicatorAdapter = new AppIndicatorAdapter( getContext(), NavigatorApps.getApps() ); + mAppIndicatorAdapter.setOnItemClickedListener( ( data, position ) -> { + mLauncher.launch( getContext(), data ); + } ); + mNavigatorAppsList.setAdapter( mAppIndicatorAdapter ); } @NonNull @Override protected AppNavigatorPresenter createPresenter() { - return new AppNavigatorPresenter(this); + return new AppNavigatorPresenter( this ); } @Override - public void onActivityCreated(@Nullable Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - mMogoFragmentManager = (IMogoFragmentManager) ARouter.getInstance() - .build(MogoServicePaths.PATH_FRAGMENT_MANAGER) - .navigation(getContext()); - mMogoAnalytics = (IMogoAnalytics) ARouter.getInstance() - .build(MogoServicePaths.PATH_UTILS_ANALYTICS) - .navigation(getContext()); + public void onActivityCreated( @Nullable Bundle savedInstanceState ) { + super.onActivityCreated( savedInstanceState ); } @Override public void openAppsPanel() { - AppsListActivity.start(getActivity()); + AppsListActivity.start( getActivity() ); } - private void trackNavigatorClickEvent(int type) { - final Map properties = new HashMap<>(); - properties.put("type", type); - mMogoAnalytics.track("Launcher_APP_Icon", properties); + private void trackNavigatorClickEvent( int type ) { + final Map< String, Object > properties = new HashMap<>(); + properties.put( "type", type ); + AppServiceHandler.getMogoAnalytics().track( "Launcher_APP_Icon", properties ); } @Override public void onDestroyView() { super.onDestroyView(); - if (mPresenter != null) { - mPresenter.onDestroy(getViewLifecycleOwner()); + if ( mPresenter != null ) { + mPresenter.onDestroy( getViewLifecycleOwner() ); } } - - @Override - public void onCurrentItemChanged(@Nullable RecycleViewHolder viewHolder, int i) { - Logger.d(TAG, "onCurrentItemChanged--position--" + i % CARD_SIZE); - int currentPosition = (i - 2) % CARD_SIZE; - - //if (!scroller.isComputingLayout()) { - // appIndicatorAdapter.setCurrentPos(i); - //} - //this.currentPosition=currentPosition; - AppServiceHandler.getMogoCardManager().switch2(apps.get(i % CARD_SIZE).mModuleType, true); - - //holder.showText(); - - //ImageView view = viewHolder.getView(R.id.module_apps_id_app_icon); - //view.setImageResource(apps.get(currentPosition).getmIconId()); - // - //TextView tvTitle = viewHolder.getView(R.id.module_apps_id_app_name); - //tvTitle.setTextColor(getResources().getColor(R.color.white)); - - } - - @Override public void onScrollStart(@NonNull RecycleViewHolder viewHolder, int i) { - int currentPosition = i % CARD_SIZE - 2; - // - //ImageView view = viewHolder.getView(R.id.module_apps_id_app_icon); - // - // - //view.setImageResource(apps.get(currentPosition).mUncheckedIconId); - //TextView tvTitle = viewHolder.getView(R.id.module_apps_id_app_name); - //tvTitle.setTextColor(getResources().getColor(R.color.white_80)); - - } - - @Override public void onScrollEnd(@NonNull RecycleViewHolder viewHolder, int i) { - - } - - @Override - public void onScroll(float v, int i, int i1, @Nullable RecycleViewHolder viewHolder, - @Nullable RecycleViewHolder t1) { - - } - - //private int currentPosition = 0; - - @Override public void onSwitched(int position, String moduleName) { - //int index = (position - scroller.getCurrentItem() % CARD_SIZE + 2) % CARD_SIZE; - //int i = scroller.getCurrentItem() + index; -// DiscreteScrollLayoutManager layoutManager = -// (DiscreteScrollLayoutManager) scroller.getLayoutManager(); -// -// int currentPosition = (scroller.getCurrentItem() - 2) % CARD_SIZE; -// -// int index = position - currentPosition; -// -// if (index == 0) { -// return; -// } -// if (index <= -3) { -// index += CARD_SIZE; -// } else if (index >= 3) { -// index = index - CARD_SIZE; -// } -// //RecyclerView 的特性,如果是否在屏幕内 -// //if (index < 0) { -// // index -= 2; -// //} -// -// Logger.d(TAG, "position--" -// + position -// + "index--" -// + index -// + "scroll-->" -// + scroller.getCurrentItem() -// + index); -// -// //scroller.setPendingScroll(getResources().getDimensionPixelSize(R.dimen.dp_137)*index); -// //layoutManager.scrollToPositionWithOffset(scroller.getCurrentItem() + index,0); -// //scroller.smoothScrollBy(getResources().getDimensionPixelSize(R.dimen.dp_137)*index,0); -// -// if (Math.abs(index) == 1) { -// scroller.smoothScrollBy(getResources().getDimensionPixelSize(R.dimen.dp_137) * index, -// 0, null, 10); -// } else { -// layoutManager.startSmoothPendingScroll(layoutManager.getCurrentPosition() + index); -// } - //layoutManager.smoothScrollToPosition(scroller.getCurrentItem() + index); - //currentPosition = position; - } - - private void printIds(View view) { - System.out.println(view.getId()); - if (view instanceof ViewGroup) { - int childCount = ((ViewGroup) view).getChildCount(); - for (int i = 0; i < childCount; i++) { - printIds(((ViewGroup) view).getChildAt(i)); - } - } - } - - private void print(View view) { - - ArrayList views = new ArrayList<>(); - views.add(view); - - while (views.size() > 0) { - System.out.println(view.getId()); - View remove = views.remove(0); - - if (remove instanceof ViewGroup) { - - int childCount = ((ViewGroup) view).getChildCount(); - for (int i = 0; i < childCount; i++) { - views.add(((ViewGroup) view).getChildAt(i)); - } - } - } - - } } diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorPresenter.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorPresenter.java index 378522b10b..6dbdc52ac9 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorPresenter.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorPresenter.java @@ -40,8 +40,8 @@ public class AppNavigatorPresenter extends Presenter< AppNavigatorView > impleme @Override public void onCreate( @NonNull LifecycleOwner owner ) { super.onCreate( owner ); - mIntentManager = ( IMogoIntentManager ) ARouter.getInstance().build( MogoServicePaths.PATH_INTENT_MANAGER ).navigation( getContext() ); - mMogoStatusManager = ( IMogoStatusManager ) ARouter.getInstance().build( MogoServicePaths.PATH_STATUS_MANAGER ).navigation( getContext() ); + mIntentManager = AppServiceHandler.getApis().getIntentManagerApi(); + mMogoStatusManager = AppServiceHandler.getApis().getStatusManagerApi(); // 预加载应用列表,空间换时间 AppsModel.getInstance( getContext() ).load( null ); } @@ -68,6 +68,7 @@ public class AppNavigatorPresenter extends Presenter< AppNavigatorView > impleme return; } try { + AppServiceHandler.getApis().getAdasControllerApi().closeADAS(); JSONObject object = new JSONObject( intent.getStringExtra( "data" ) ); String app = object.optString( "object" ); String operation = object.optString( "operation" ); diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppServiceHandler.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppServiceHandler.java index 7dc4ce40d3..9bf52fd3b0 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppServiceHandler.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppServiceHandler.java @@ -1,7 +1,9 @@ package com.mogo.module.apps; import android.content.Context; + import com.alibaba.android.arouter.launcher.ARouter; +import com.mogo.commons.AbsMogoApplication; import com.mogo.map.location.IMogoLocationClient; import com.mogo.map.marker.IMogoMarkerManager; import com.mogo.map.navi.IMogoNavi; @@ -27,6 +29,7 @@ import com.mogo.service.statusmanager.IMogoStatusManager; * version: 1.0 */ public class AppServiceHandler { + private static final String TAG = "AppServiceHandler"; private static IMogoServiceApis mApis; @@ -34,17 +37,18 @@ public class AppServiceHandler { private static IMogoAnalytics mMogoAnalytics; private static IGuideShowProvider mMogoGuideShow; - public static void init( final Context context ) { mApis = ( IMogoServiceApis ) ARouter.getInstance().build( MogoServicePaths.PATH_SERVICE_APIS ).navigation( context ); mMogoCardManager = mApis.getCardManagerApi(); mMogoAnalytics = mApis.getAnalyticsApi(); - mMogoGuideShow = (IGuideShowProvider) ARouter.getInstance().build(GuideShowProviderConstant.GUIDE_SHOW_PROVIDER).navigation(context); + mMogoGuideShow = ( IGuideShowProvider ) ARouter.getInstance().build( GuideShowProviderConstant.GUIDE_SHOW_PROVIDER ).navigation( context ); } + public static IMogoCardManager getMogoCardManager() { return mMogoCardManager; } + public static IMogoAnalytics getMogoAnalytics() { return mMogoAnalytics; } @@ -52,4 +56,11 @@ public class AppServiceHandler { public static IGuideShowProvider getMogoGuideShow() { return mMogoGuideShow; } + + public static IMogoServiceApis getApis() { + if ( mApis == null ) { + mApis = ( IMogoServiceApis ) ARouter.getInstance().build( MogoServicePaths.PATH_SERVICE_APIS ).navigation( AbsMogoApplication.getApp() ); + } + return mApis; + } } diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsFragmentProvider.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsFragmentProvider.java index 054707c758..1f0dc91f16 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsFragmentProvider.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsFragmentProvider.java @@ -74,7 +74,7 @@ public class AppsFragmentProvider implements IMogoModuleProvider { @Override public void init( Context context ) { - + AppServiceHandler.init( context ); } @Override diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsPresenter.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsPresenter.java index 54f42368d3..306c626b83 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsPresenter.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsPresenter.java @@ -6,6 +6,7 @@ import androidx.annotation.NonNull; import androidx.lifecycle.LifecycleOwner; import com.alibaba.android.arouter.launcher.ARouter; +import com.mogo.commons.debug.DebugConfig; import com.mogo.commons.mvp.Presenter; import com.mogo.module.apps.applaunch.AppLaunchFilter; import com.mogo.module.apps.applaunch.AppLauncher; @@ -36,7 +37,7 @@ import java.util.Set; *

* 描述 */ -public class AppsPresenter extends Presenter { +public class AppsPresenter extends Presenter< AppsView > { private static final String TAG = "AppsPresenter"; @@ -48,61 +49,62 @@ public class AppsPresenter extends Presenter { private IMogoCardManager mCardManager; private IMogoStatusManager mMogoStatusManager; - public AppsPresenter(AppsView view) { - super(view); - mApis = (IMogoServiceApis)ARouter.getInstance().build( MogoServicePaths.PATH_SERVICE_APIS ).navigation(getContext()); + public AppsPresenter( AppsView view ) { + super( view ); + mApis = ( IMogoServiceApis ) ARouter.getInstance().build( MogoServicePaths.PATH_SERVICE_APIS ).navigation( getContext() ); mCardManager = mApis.getCardManagerApi(); - CardAppLauncher cardAppLauncher = new CardAppLauncher(this, mCardManager); - GuideShowLauncher guideShowLauncher = new GuideShowLauncher(mApis.getMapServiceApi().getNavi( getContext() )); - cardAppLauncher.setNext(guideShowLauncher); - guideShowLauncher.setNext(new AppLauncher()); + CardAppLauncher cardAppLauncher = new CardAppLauncher( this, mCardManager ); + GuideShowLauncher guideShowLauncher = new GuideShowLauncher( mApis.getMapServiceApi().getNavi( getContext() ) ); + cardAppLauncher.setNext( guideShowLauncher ); + guideShowLauncher.setNext( new AppLauncher() ); mLauncher = cardAppLauncher; } @Override - public void onCreate(@NonNull LifecycleOwner owner) { - super.onCreate(owner); + public void onCreate( @NonNull LifecycleOwner owner ) { + super.onCreate( owner ); renderAppsList(); - AppsListChangedLiveData.getInstance().observeForever(bool -> { - if (mView != null) { + AppsListChangedLiveData.getInstance().observeForever( bool -> { + if ( mView != null ) { renderAppsList(); } - }); + } ); mAnalytics = mApis.getAnalyticsApi(); mMogoStatusManager = mApis.getStatusManagerApi(); - mMogoStatusManager.setAppListUIShow(TAG, true); + mMogoStatusManager.setAppListUIShow( TAG, true ); } private void renderAppsList() { - ThreadPoolService.execute(() -> { - AppsModel.getInstance(getContext()).load(appInfoList -> { + ThreadPoolService.execute( () -> { + AppsModel.getInstance( getContext() ).load( appInfoList -> { - Logger.d(TAG, "apps: %s", appInfoList); - final Map> result = addOthersEntrances( appInfoList ); - UiThreadHandler.post(() -> { - if (mView != null) { + Logger.d( TAG, "apps: %s", appInfoList ); + final Map< Integer, List< AppInfo > > result = addOthersEntrances( appInfoList ); + UiThreadHandler.post( () -> { + if ( mView != null ) { mView.renderApps( result ); } - }); - }); + } ); + } ); - }); + } ); } /** * 新增入口 + * * @param appInfoMap * @return */ - private Map> addOthersEntrances( Map> appInfoMap) { - Map> result = new HashMap<>(); + private Map< Integer, List< AppInfo > > addOthersEntrances( Map< Integer, List< AppInfo > > appInfoMap ) { + Map< Integer, List< AppInfo > > result = new HashMap<>(); if ( appInfoMap != null && !appInfoMap.isEmpty() ) { // val deep copy - Set keys = appInfoMap.keySet(); + Set< Integer > keys = appInfoMap.keySet(); for ( Integer key : keys ) { - List val = appInfoMap.get( key ); + List< AppInfo > val = appInfoMap.get( key ); try { result.put( key, new ArrayList<>( val ) ); } catch ( Exception e ) { @@ -112,16 +114,16 @@ public class AppsPresenter extends Presenter { } // 手动添加无法识别到的app - List apps = UnScannedApps.getUnScannedApps(); + List< AppInfo > apps = UnScannedApps.getUnScannedApps(); if ( apps != null && !apps.isEmpty() ) { for ( AppInfo app : apps ) { if ( app == null ) { continue; } - Set keys = result.keySet(); + Set< Integer > keys = result.keySet(); boolean addFlag = true; for ( Integer key : keys ) { - List val = result.get( key ); + List< AppInfo > val = result.get( key ); // 无法扫描到蓝牙电话app,这里手动添加 for ( AppInfo appInfo : val ) { if ( appInfo == null ) { @@ -137,71 +139,77 @@ public class AppsPresenter extends Presenter { } } if ( addFlag ) { - growthCapacity(result); - result.get(result.size() - 1).add(app); + growthCapacity( result ); + result.get( result.size() - 1 ).add( app ); } } } - growthCapacity(result); + growthCapacity( result ); // 添加介绍入口 - result.get(result.size() - 1).add(new AppInfo(GuideShowLauncher.APP_INFO_NAME_GUIDE_SHOW, getContext().getPackageName(), null, 0, null, R.drawable.module_apps_ic_guide_show)); + result.get( result.size() - 1 ).add( new AppInfo( GuideShowLauncher.APP_INFO_NAME_GUIDE_SHOW, getContext().getPackageName(), null, 0, null, R.drawable.module_apps_ic_guide_show ) ); + if ( DebugConfig.isDebug() ) { + // 添加测试入口 + growthCapacity( result ); + result.get( result.size() - 1 ).add( new AppInfo( "包管理程序", "com.mogo.packages.manager", null, 0, null, -1 ) ); + } return result; } /** * 扩容 + * * @param target */ - private void growthCapacity( Map> target ){ + private void growthCapacity( Map< Integer, List< AppInfo > > target ) { if ( target == null ) { return; } - if (target.isEmpty()) { - target.put(0, new ArrayList<>()); - } else if (target.get(target.size() - 1) == null) { - target.put(target.size() - 1, new ArrayList<>()); - } else if (target.get(target.size() - 1).size() == AppsConst.TOTAL_SIZE_EACH_PAGE) { - target.put(target.size(), new ArrayList<>()); + if ( target.isEmpty() ) { + target.put( 0, new ArrayList<>() ); + } else if ( target.get( target.size() - 1 ) == null ) { + target.put( target.size() - 1, new ArrayList<>() ); + } else if ( target.get( target.size() - 1 ).size() == AppsConst.TOTAL_SIZE_EACH_PAGE ) { + target.put( target.size(), new ArrayList<>() ); } } - public void launch(AppInfo appInfo) { - if (appInfo == null) { + public void launch( AppInfo appInfo ) { + if ( appInfo == null ) { return; } - trackAppClicked(appInfo); + trackAppClicked( appInfo ); try { - mLauncher.launch(getContext(), appInfo); - } catch (Exception e) { + mLauncher.launch( getContext(), appInfo ); + } catch ( Exception e ) { } } - private void trackAppClicked(AppInfo appInfo) { - if (appInfo == null) { + private void trackAppClicked( AppInfo appInfo ) { + if ( appInfo == null ) { return; } - Map properties = new HashMap<>(); - properties.put("appname", appInfo.getName()); - properties.put("packagename", appInfo.getPackageName()); - properties.put("appversion", appInfo.getVersionName()); - properties.put("from", 1); - mAnalytics.track("appenterfront", properties); + Map< String, Object > properties = new HashMap<>(); + properties.put( "appname", appInfo.getName() ); + properties.put( "packagename", appInfo.getPackageName() ); + properties.put( "appversion", appInfo.getVersionName() ); + properties.put( "from", 1 ); + mAnalytics.track( "appenterfront", properties ); } @Override - public void onDestroy(@NonNull LifecycleOwner owner) { - super.onDestroy(owner); - mMogoStatusManager.setAppListUIShow(TAG, false); + public void onDestroy( @NonNull LifecycleOwner owner ) { + super.onDestroy( owner ); + mMogoStatusManager.setAppListUIShow( TAG, false ); AppsListChangedLiveData.getInstance().release(); mView = null; mLauncher.destroy(); } public void exit() { - if (mView != null) { + if ( mView != null ) { mView.exit(); } } diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/adapter/AppIndicatorAdapter.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/adapter/AppIndicatorAdapter.java index 9b78d95c2e..dfd77cce0c 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/adapter/AppIndicatorAdapter.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/adapter/AppIndicatorAdapter.java @@ -1,62 +1,34 @@ package com.mogo.module.apps.adapter; import android.content.Context; -import android.view.View; import android.widget.ImageView; -import android.widget.TextView; -import androidx.core.content.ContextCompat; + import com.mogo.module.apps.R; import com.mogo.module.apps.adapter.base.RecycleBaseAdapter; import com.mogo.module.apps.adapter.base.RecycleViewHolder; +import com.mogo.module.apps.model.AppInfo; import com.mogo.module.apps.model.NavigatorApp; + import java.util.List; /** * @author zyz * 2020-03-09. */ -public class AppIndicatorAdapter extends RecycleBaseAdapter { +public class AppIndicatorAdapter extends RecycleBaseAdapter< AppInfo > { - - private int currentPos; - - private View.OnClickListener onClickListener; - /** - * - */ - public AppIndicatorAdapter(Context context, List list - ) { - super(context, list, R.layout.module_apps_item_app_indicator); + public AppIndicatorAdapter( Context context, List< AppInfo > list ) { + super( context, list, R.layout.module_apps_item_app_indicator ); } - @Override public int getItemCount() { - return Integer.MAX_VALUE; - } - - @Override public void onBindViewHolder(RecycleViewHolder holder, NavigatorApp integer) { - ImageView ivIndicator = holder.getView(R.id.module_apps_id_app_icon); - ivIndicator.setImageResource(integer.getmIconId()); - holder.setText(R.id.module_apps_id_app_name,integer.getmName() ); - - TextView tvTitle = holder.getView(R.id.module_apps_id_app_name); - if (currentPos==holder.getLayoutPosition()) { - ivIndicator.setImageResource(integer.getmIconId()); - tvTitle.setTextColor(ContextCompat.getColor(context,R.color.white)); - }else { - tvTitle.setTextColor(ContextCompat.getColor(context,R.color.white_80)); - ivIndicator.setImageResource(integer.getmUncheckedIconId()); - } - holder.itemView.setTag(integer); - holder.itemView.setOnClickListener(onClickListener); - - } - - public void setOnClickListener(View.OnClickListener onClickListener) { - this.onClickListener = onClickListener; - } - - public void setCurrentPos(int currentPos){ - this.currentPos=currentPos; - notifyDataSetChanged(); + @Override + public void onBindViewHolder( RecycleViewHolder holder, AppInfo app, int position ) { + ImageView ivIndicator = holder.getView( R.id.module_apps_id_app_icon ); + ivIndicator.setImageResource( app.getIconResId() ); + holder.itemView.setOnClickListener( view -> { + if ( getOnItemClickedListener() != null ) { + getOnItemClickedListener().onItemClicked( app, position ); + } + } ); } } diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/adapter/base/RecycleBaseAdapter.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/adapter/base/RecycleBaseAdapter.java index 2a8cc64079..d39ca569b9 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/adapter/base/RecycleBaseAdapter.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/adapter/base/RecycleBaseAdapter.java @@ -5,7 +5,9 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Toast; + import androidx.recyclerview.widget.RecyclerView; + import java.util.List; /** @@ -21,20 +23,19 @@ import java.util.List; *

*

*/ -public abstract class RecycleBaseAdapter extends - RecyclerView.Adapter -{ +public abstract class RecycleBaseAdapter< T > extends + RecyclerView.Adapter< RecycleViewHolder > { protected Context context; - protected List list; + protected List< T > list; private int resourceID; - private Toast toast; + + protected OnItemClickListener mOnItemClickedListener; /** * @param context */ - public RecycleBaseAdapter(Context context, List list, int resourceID) - { + public RecycleBaseAdapter( Context context, List< T > list, int resourceID ) { super(); this.context = context; this.list = list; @@ -42,81 +43,75 @@ public abstract class RecycleBaseAdapter extends } @Override - public RecycleViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) - { - View v = LayoutInflater.from(context).inflate(resourceID, viewGroup, - false); + public RecycleViewHolder onCreateViewHolder( ViewGroup viewGroup, int viewType ) { + View v = LayoutInflater.from( context ).inflate( resourceID, viewGroup, + false ); RecycleViewHolder holder = RecycleViewHolder - .get(v); + .get( v ); - initHolder(holder); + initHolder( holder ); return holder; } @Override - public void onBindViewHolder( - RecycleViewHolder viewHolder, int position) - { - onBindViewHolder(viewHolder, list.get(position % list.size())); + public void onBindViewHolder( RecycleViewHolder viewHolder, int position ) { + onBindViewHolder( viewHolder, list.get( position % list.size()), position ); } @Override - public int getItemCount() - { + public int getItemCount() { return list == null ? 0 : list.size(); } - public abstract void onBindViewHolder( - RecycleViewHolder holder, T t); + public abstract void onBindViewHolder( RecycleViewHolder holder, T t, int position ); - public void initHolder(RecycleViewHolder holder) - { + public void initHolder( RecycleViewHolder holder ) { } - public void setDatas(List list) - { - setDatas(list, false); + + public void setDatas( List< T > list ) { + setDatas( list, false ); } - public void setDatas(List list, boolean add) - { - if (add) - { - this.list.addAll(list); - } - else - { + public void setDatas( List< T > list, boolean add ) { + if ( add ) { + this.list.addAll( list ); + } else { this.list = list; } notifyDataSetChanged(); } - public void clear(){ - if (list != null) { + + public void clear() { + if ( list != null ) { list.clear(); notifyDataSetChanged(); } } - public void messageShow(String mes) - { - if (toast==null){ - toast= Toast.makeText(context,mes, Toast.LENGTH_LONG); - } - else{ - toast.setText(mes); - } - toast.show(); - } - public T getItem(int position){ - if (list==null||list.size()==0){ + public T getItem( int position ) { + if ( list == null || list.size() == 0 ) { return null; } - return list.get(position); + return list.get( position ); } - public List getList() { + public List< T > getList() { return list; } + + public interface OnItemClickListener< T > { + void onItemClicked( T data, int position ); + } + + public RecycleBaseAdapter< T > setOnItemClickedListener( OnItemClickListener< T > onItemClickedListener ) { + this.mOnItemClickedListener = onItemClickedListener; + return this; + } + + public OnItemClickListener< T > getOnItemClickedListener() { + return mOnItemClickedListener; + } } diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/AppLauncher.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/AppLauncher.java index 0ce9ae3b23..fe9e34b244 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/AppLauncher.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/AppLauncher.java @@ -2,6 +2,7 @@ package com.mogo.module.apps.applaunch; import android.content.Context; +import com.mogo.module.apps.AppServiceHandler; import com.mogo.module.apps.R; import com.mogo.module.apps.model.AppInfo; import com.mogo.module.apps.utils.LaunchUtils; @@ -21,6 +22,7 @@ public class AppLauncher extends BaseAppLauncher { @Override public void launch( Context context, AppInfo appInfo ) { try { + AppServiceHandler.getApis().getAdasControllerApi().closeADAS(); LaunchUtils.launchByPkg( context, appInfo.getPackageName() ); } catch ( Exception e ) { Logger.e( TAG, e, "error." ); diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/InternalFunctionLauncher.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/InternalFunctionLauncher.java new file mode 100644 index 0000000000..5db46d1315 --- /dev/null +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/InternalFunctionLauncher.java @@ -0,0 +1,47 @@ +package com.mogo.module.apps.applaunch; + +import android.app.Activity; +import android.content.Context; + +import com.mogo.module.apps.AppServiceHandler; +import com.mogo.module.apps.AppsListActivity; +import com.mogo.module.apps.model.AppInfo; + +/** + * @author congtaowang + * @since 2020-05-14 + *

+ * 描述 + */ +public class InternalFunctionLauncher extends BaseAppLauncher { + + private Activity mActivity; + + public InternalFunctionLauncher( Activity activity ) { + this.mActivity = activity; + } + + @Override + public void launch( Context context, AppInfo appInfo ) { + switch ( appInfo.getPackageName() ) { + case "com.mogo.launcher.navi.search": + AppServiceHandler.getApis().getSearchManagerApi().showSearch(); + break; + case "com.mogo.launcher.applist": + AppServiceHandler.getApis().getAdasControllerApi().closeADAS(); + AppsListActivity.start( mActivity ); + break; + default: + if ( getNext() != null ) { + getNext().launch( context, appInfo ); + } + } + } + + @Override + public void destroy() { + if ( getNext() != null ) { + getNext().destroy(); + } + } +} diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/NavigatorApp.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/NavigatorApp.java index d5f7df5b9b..9681af74b6 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/NavigatorApp.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/NavigatorApp.java @@ -15,44 +15,18 @@ public class NavigatorApp { @DrawableRes public int mUncheckedIconId; public String mName; - public String mModuleType; - public NavigatorApp( int mIconId,int mUncheckedIconId, String mName, String mModuleType ) { + public NavigatorApp( int mIconId, int mUncheckedIconId, String mName ) { this.mIconId = mIconId; this.mUncheckedIconId = mUncheckedIconId; this.mName = mName; - this.mModuleType = mModuleType; } - public int getmIconId() { + public int getIconId() { return mIconId; } - public void setmIconId(int mIconId) { - this.mIconId = mIconId; - } - - public int getmUncheckedIconId() { - return mUncheckedIconId; - } - - public void setmUncheckedIconId(int mUncheckedIconId) { - this.mUncheckedIconId = mUncheckedIconId; - } - - public String getmName() { + public String getName() { return mName; } - - public void setmName(String mName) { - this.mName = mName; - } - - public String getmModuleType() { - return mModuleType; - } - - public void setmModuleType(String mModuleType) { - this.mModuleType = mModuleType; - } } diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/NavigatorApps.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/NavigatorApps.java index 3ff8bc8b09..9e5a98be45 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/NavigatorApps.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/NavigatorApps.java @@ -1,9 +1,6 @@ package com.mogo.module.apps.model; import com.mogo.module.apps.R; -import com.mogo.module.common.ModuleNames; -import com.mogo.module.common.MogoModule; -import com.mogo.module.common.MogoModulePaths; import java.util.ArrayList; import java.util.List; @@ -16,48 +13,15 @@ import java.util.List; */ public class NavigatorApps { - public static List< NavigatorApp > getApps() { - List< NavigatorApp > apps = new ArrayList<>(); - apps.add( new NavigatorApp( R.drawable.module_apps_ic_online_car,R.drawable.module_apps_ic_online_car_unchecked, "在线车辆", ModuleNames.CARD_TYPE_USER_DATA ) ); - apps.add( new NavigatorApp( R.drawable.module_apps_ic_interest, R.drawable.module_apps_ic_interest_unchecked,"新鲜事", ModuleNames.CARD_TYPE_NOVELTY ) ); - apps.add( new NavigatorApp( R.drawable.module_apps_ic_news,R.drawable.module_apps_ic_news_unchecked, "首页", ModuleNames.CARD_TYPE_BUSINESS_OPERATION ) ); - apps.add( new NavigatorApp( R.drawable.module_apps_ic_media_center, R.drawable.module_apps_ic_media_center_checked, "媒体中心", ModuleNames.CARD_TYPE_SHARE_MUSIC ) ); - apps.add( new NavigatorApp( R.drawable.module_apps_ic_chat_icon, R.drawable.module_apps_ic_chat_unchecked,"车聊聊", ModuleNames.CARD_TYPE_CARS_CHATTING ) ); - apps.add( new NavigatorApp( R.drawable.module_apps_ic_tanlu, R.drawable.module_apps_ic_tanlu_unchecked,"探路", ModuleNames.CARD_TYPE_ROAD_CONDITION ) ); - return apps; - } + private static List< AppInfo > sApps = new ArrayList<>(); -// public static List< NavigatorApp > getApps() { -// List< NavigatorApp > apps = new ArrayList<>(); -// List< MogoModule > modules = MogoModulePaths.getModules(); -// for ( MogoModule module : modules ) { -// NavigatorApp app = getApp( module ); -// if ( app == null ) { -// continue; -// } -// apps.add( app ); -// } -// return apps; -// } -// -// private static NavigatorApp getApp( MogoModule module ) { -// if ( module == null ) { -// return null; -// } -// switch ( module.getName() ) { -// case ModuleNames.CARD_TYPE_USER_DATA: -// return new NavigatorApp( R.drawable.module_apps_ic_online_car, R.drawable.module_apps_ic_online_car_unchecked, "在线车辆", ModuleNames.CARD_TYPE_USER_DATA ); -// case ModuleNames.CARD_TYPE_NOVELTY: -// return new NavigatorApp( R.drawable.module_apps_ic_interest, R.drawable.module_apps_ic_interest_unchecked, "新鲜事", ModuleNames.CARD_TYPE_NOVELTY ); -// case ModuleNames.CARD_TYPE_BUSINESS_OPERATION: -// return new NavigatorApp( R.drawable.module_apps_ic_news, R.drawable.module_apps_ic_news_unchecked, "首页", ModuleNames.CARD_TYPE_BUSINESS_OPERATION ); -// case ModuleNames.CARD_TYPE_SHARE_MUSIC: -// return new NavigatorApp( R.drawable.module_apps_ic_media_center, R.drawable.module_apps_ic_media_center_checked, "媒体中心", ModuleNames.CARD_TYPE_SHARE_MUSIC ); -// case ModuleNames.CARD_TYPE_CARS_CHATTING: -// return new NavigatorApp( R.drawable.module_apps_ic_chat_icon, R.drawable.module_apps_ic_chat_unchecked, "车聊聊", ModuleNames.CARD_TYPE_CARS_CHATTING ); -// case ModuleNames.CARD_TYPE_ROAD_CONDITION: -// return new NavigatorApp( R.drawable.module_apps_ic_tanlu, R.drawable.module_apps_ic_tanlu_unchecked, "探路", ModuleNames.CARD_TYPE_ROAD_CONDITION ); -// } -// return null; -// } + public static List< AppInfo > getApps() { + if ( sApps.isEmpty() ) { + sApps.add( new AppInfo( "导航", "com.mogo.launcher.navi.search", "", 0, null, R.drawable.module_apps_ic_apps ) ); + sApps.add( new AppInfo( "音乐", "com.pvetec.musics", "", 0, null, R.drawable.module_apps_ic_apps ) ); + sApps.add( new AppInfo( "个人中心", "com.zhidao.auto.personal", "", 0, null, R.drawable.module_apps_ic_apps ) ); + sApps.add( new AppInfo( "全部应用", "com.mogo.launcher.applist", "", 0, null, R.drawable.module_apps_ic_apps ) ); + } + return sApps; + } } diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/utils/CardScaleTransformer.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/utils/CardScaleTransformer.java deleted file mode 100644 index 771fc71f2d..0000000000 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/utils/CardScaleTransformer.java +++ /dev/null @@ -1,122 +0,0 @@ -package com.mogo.module.apps.utils; - -import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; -import androidx.annotation.FloatRange; -import androidx.core.content.ContextCompat; -import androidx.recyclerview.widget.RecyclerView; -import com.mogo.module.apps.R; -import com.mogo.module.apps.model.NavigatorApp; -import com.yarolegovich.discretescrollview.transform.DiscreteScrollItemTransformer; -import com.yarolegovich.discretescrollview.transform.Pivot; -import com.yarolegovich.discretescrollview.transform.ScaleTransformer; -import java.util.List; - -/** - * @author zyz - * 2020-03-11. - */ -public class CardScaleTransformer implements DiscreteScrollItemTransformer { - - private Pivot pivotX; - private Pivot pivotY; - private float minScale; - private float maxMinDiff; - private static final int CARD_SIZE = 6; - - List apps; - - public CardScaleTransformer() { - pivotX = Pivot.X.CENTER.create(); - pivotY = Pivot.Y.BOTTOM.create(); - minScale = 0.8f; - maxMinDiff = 0.2f; - } - - public void setApps(List apps) { - this.apps = apps; - } - - @Override - public void transformItem(View item, RecyclerView.ViewHolder childViewHolder, float position) { - - ImageView ivItem = item.findViewById(R.id.module_apps_id_app_icon); - - TextView tvTitle = item.findViewById(R.id.module_apps_id_app_name); - NavigatorApp tag = (NavigatorApp) item.getTag(); - - pivotX.setOn(ivItem); - pivotY.setOn(ivItem); - float closenessToCenter = 1f - Math.abs(position); - float scale = minScale + maxMinDiff * closenessToCenter; - ivItem.setScaleX(scale); - ivItem.setScaleY(scale); - - if (tag != null) { - if (scale == 1) { - ivItem.setImageResource(tag.getmIconId()); - tvTitle.setTextColor(ContextCompat.getColor(item.getContext(),R.color.white)); - } else { - ivItem.setImageResource(tag.getmUncheckedIconId()); - tvTitle.setTextColor(ContextCompat.getColor(item.getContext(),R.color.white_80)); - } - - } - - //int currentPosition = (position - 2) % CARD_SIZE; - - } - - public static class Builder { - - private CardScaleTransformer transformer; - private float maxScale; - - public Builder() { - transformer = new CardScaleTransformer(); - maxScale = 1f; - } - - public Builder setMinScale(@FloatRange(from = 0.01) float scale) { - transformer.minScale = scale; - return this; - } - - public Builder setMaxScale(@FloatRange(from = 0.01) float scale) { - maxScale = scale; - return this; - } - - public Builder setPivotX(Pivot.X pivotX) { - return setPivotX(pivotX.create()); - } - - public Builder setPivotX(Pivot pivot) { - assertAxis(pivot, Pivot.AXIS_X); - transformer.pivotX = pivot; - return this; - } - - public Builder setPivotY(Pivot.Y pivotY) { - return setPivotY(pivotY.create()); - } - - public Builder setPivotY(Pivot pivot) { - assertAxis(pivot, Pivot.AXIS_Y); - transformer.pivotY = pivot; - return this; - } - - public CardScaleTransformer build() { - transformer.maxMinDiff = maxScale - transformer.minScale; - return transformer; - } - - private void assertAxis(Pivot pivot, @Pivot.Axis int axis) { - if (pivot.getAxis() != axis) { - throw new IllegalArgumentException("You passed a Pivot for wrong axis."); - } - } - } -} diff --git a/modules/mogo-module-apps/src/main/res/layout/module_apps_fragment_apps_navigator.xml b/modules/mogo-module-apps/src/main/res/layout/module_apps_fragment_apps_navigator.xml index 1a0b739e7f..2ea21751a8 100644 --- a/modules/mogo-module-apps/src/main/res/layout/module_apps_fragment_apps_navigator.xml +++ b/modules/mogo-module-apps/src/main/res/layout/module_apps_fragment_apps_navigator.xml @@ -1,47 +1,16 @@ + android:paddingBottom="@dimen/module_apps_navigation_icon_paddingBottom"> - - - - - - - + \ No newline at end of file diff --git a/modules/mogo-module-apps/src/main/res/layout/module_apps_item_app_indicator.xml b/modules/mogo-module-apps/src/main/res/layout/module_apps_item_app_indicator.xml index 8e02e01c0e..3e37557a76 100644 --- a/modules/mogo-module-apps/src/main/res/layout/module_apps_item_app_indicator.xml +++ b/modules/mogo-module-apps/src/main/res/layout/module_apps_item_app_indicator.xml @@ -2,23 +2,13 @@ - - + android:layout_width="@dimen/module_apps_all_icon_width" + android:layout_height="@dimen/module_apps_all_icon_height" + android:scaleType="fitXY" /> \ No newline at end of file diff --git a/modules/mogo-module-back/src/main/java/com/mogo/module/back/BackToLauncherModuleProvider.java b/modules/mogo-module-back/src/main/java/com/mogo/module/back/BackToLauncherModuleProvider.java index c7fc69be71..74c6826eed 100644 --- a/modules/mogo-module-back/src/main/java/com/mogo/module/back/BackToLauncherModuleProvider.java +++ b/modules/mogo-module-back/src/main/java/com/mogo/module/back/BackToLauncherModuleProvider.java @@ -10,15 +10,12 @@ import androidx.fragment.app.Fragment; import com.alibaba.android.arouter.facade.annotation.Route; import com.alibaba.android.arouter.launcher.ARouter; -import com.alibaba.idst.nls.internal.utils.L; -import com.mogo.commons.AbsMogoApplication; import com.mogo.map.listener.IMogoMapListener; import com.mogo.map.location.IMogoLocationListener; import com.mogo.map.marker.IMogoMarkerClickListener; import com.mogo.map.navi.IMogoNaviListener; import com.mogo.service.IMogoServiceApis; import com.mogo.service.MogoServicePaths; -import com.mogo.service.fragmentmanager.IMogoFragmentManager; import com.mogo.service.intent.IMogoIntentListener; import com.mogo.service.intent.IMogoIntentManager; import com.mogo.service.module.IMogoModuleLifecycle; @@ -104,7 +101,7 @@ public class BackToLauncherModuleProvider implements IMogoModuleProvider, IMogoI mServiceApis = ( IMogoServiceApis ) ARouter.getInstance().build( MogoServicePaths.PATH_SERVICE_APIS ).navigation(); mIntentManager = mServiceApis.getIntentManagerApi(); mIntentManager.registerIntentListener( COMMAND_BACK, this ); - BackToMainHomeManager.init( mServiceApis.getFragmentManagerApi(), mServiceApis.getStatusManagerApi() ); + BackToMainHomeManager.init( mServiceApis ); } @Override diff --git a/modules/mogo-module-back/src/main/java/com/mogo/module/back/BackToMainHomeManager.java b/modules/mogo-module-back/src/main/java/com/mogo/module/back/BackToMainHomeManager.java index 64fb84055d..93a1eec5d3 100644 --- a/modules/mogo-module-back/src/main/java/com/mogo/module/back/BackToMainHomeManager.java +++ b/modules/mogo-module-back/src/main/java/com/mogo/module/back/BackToMainHomeManager.java @@ -11,6 +11,7 @@ import android.view.WindowManager; import com.mogo.commons.AbsMogoApplication; import com.mogo.module.back.utils.WindowManagerViewHelper; +import com.mogo.service.IMogoServiceApis; import com.mogo.service.fragmentmanager.IMogoFragmentManager; import com.mogo.service.statusmanager.IMogoStatusManager; import com.mogo.utils.AppUtils; @@ -24,10 +25,12 @@ public class BackToMainHomeManager { private static IMogoFragmentManager mFragmentManager; private static IMogoStatusManager mStatusManager; + private static IMogoServiceApis mApis; - public static void init( IMogoFragmentManager manager, IMogoStatusManager statusManager ) { - mFragmentManager = manager; - mStatusManager = statusManager; + public static void init( IMogoServiceApis apis ) { + mApis = apis; + mFragmentManager = apis.getFragmentManagerApi(); + mStatusManager = apis.getStatusManagerApi(); } public static void backToLauncher() { diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsPresenter.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsPresenter.java index 3581fa2353..6621be43bd 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsPresenter.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsPresenter.java @@ -202,7 +202,7 @@ public class ExtensionsPresenter extends Presenter< ExtensionsView > implements switch ( descriptor ) { case APP_LIST_UI: case SEARCH_UI: - changeAutoSwitchVoiceTipsWordsStatus( !isTrue ); +// changeAutoSwitchVoiceTipsWordsStatus( !isTrue ); break; } } @@ -210,13 +210,13 @@ public class ExtensionsPresenter extends Presenter< ExtensionsView > implements @Override public void onResume( @NonNull LifecycleOwner owner ) { super.onResume( owner ); - changeAutoSwitchVoiceTipsWordsStatus( true ); +// changeAutoSwitchVoiceTipsWordsStatus( true ); } @Override public void onPause( @NonNull LifecycleOwner owner ) { super.onPause( owner ); - changeAutoSwitchVoiceTipsWordsStatus( true ); +// changeAutoSwitchVoiceTipsWordsStatus( true ); } private void changeAutoSwitchVoiceTipsWordsStatus( boolean autoChange ) { diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java index e5aeabede9..7d95097c3e 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java @@ -77,12 +77,6 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent private static final String TAG = "EntranceFragment"; - private View mSearch; - - private View mCommonAddress; - private View mHome; - private View mCompany; - private View mUploadRoadCondition; private TextView mUpload; private ImageView mUploading; @@ -188,29 +182,6 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent mStatusManager = mApis.getStatusManagerApi(); - mCommonAddress = findViewById( R.id.module_entrance_id_common_address ); - - mSearch = findViewById( R.id.module_entrance_id_search ); - - mSearch.setOnClickListener( view -> { - mApis.getAddressManagerApi().goSearch(); - mApis.getAdasControllerApi().closeADAS(); - } ); - - mHome = findViewById( R.id.module_entrance_id_home ); - mHome.setOnClickListener( view -> { - mMogoAddressManager.goHome(); - mApis.getAdasControllerApi().closeADAS(); - - } ); - - mCompany = findViewById( R.id.module_entrance_id_company ); - mCompany.setOnClickListener( view -> { - mMogoAddressManager.goCompany(); - mApis.getAdasControllerApi().closeADAS(); - - } ); - mUploadRoadCondition = findViewById( R.id.module_entrance_id_upload_road_condition ); mUpload = findViewById( R.id.module_entrance_id_upload ); mUploading = findViewById( R.id.module_entrance_id_uploading ); @@ -354,14 +325,6 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent } - @Override - public void onInitNaviFailure() { - } - - @Override - public void onInitNaviSuccess() { - } - @Override public void onNaviInfoUpdate( MogoNaviInfo naviinfo ) { if ( naviinfo == null ) { @@ -372,8 +335,6 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent @Override public void onStartNavi() { - mSearch.setVisibility( View.GONE ); - mCommonAddress.setVisibility( View.GONE ); mNaviInfo.setVisibility( View.VISIBLE ); mCameraMode.setVisibility( View.VISIBLE ); mExitNavi.setVisibility( View.VISIBLE ); @@ -386,8 +347,6 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent @Override public void onStopNavi() { - mSearch.setVisibility( View.VISIBLE ); - mCommonAddress.setVisibility( View.VISIBLE ); mNaviInfo.setVisibility( View.GONE ); mCameraMode.setVisibility( View.GONE ); mExitNavi.setVisibility( View.GONE ); @@ -396,18 +355,6 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent MapCenterPointStrategy.setMapCenterPointByScene( mMApUIController, Scene.AIMLESS ); } - @Override - public void onCalculateSuccess() { - } - - @Override - public void onoCalculateFailed() { - } - - @Override - public void onUpdateTraffic( MogoTraffic traffic ) { - } - @Override public void onUpdateTraffic2( MogoTraffic traffic ) { if ( traffic == null ) { @@ -423,31 +370,6 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent } } - @Override - public void onUpdateCongestion( MogoCongestionInfo info ) { - - } - - @Override - public void onMapLoaded() { - - } - - @Override - public void onTouch( MotionEvent motionEvent ) { - - } - - @Override - public void onPOIClick( MogoPoi poi ) { - - } - - @Override - public void onMapClick( MogoLatLng latLng ) { - - } - @Override public void onLockMap( boolean isLock ) { mIsLock = isLock; @@ -461,16 +383,6 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent } } - @Override - public void onMapModeChanged( EnumMapUI ui ) { - - } - - @Override - public void onMapChanged( MogoLatLng latLng, float zoom, float tilt, float bearing ) { - - } - private void traceData( String from ) { Map< String, Object > properties = new HashMap<>(); properties.put( "from", from ); diff --git a/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml b/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml index 42400dbae6..6e91ac92d1 100644 --- a/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml +++ b/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml @@ -5,73 +5,6 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - - - - - - - - - - - - - - - - - - - - + app:layout_goneMarginRight="@dimen/module_ext_operation_panel_share_goneMarginRight"> + + + android:textSize="@dimen/module_ext_operation_panel_share_textSize" + android:visibility="gone" /> diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java index d6dd637cc9..debafa9007 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java @@ -24,17 +24,12 @@ import com.mogo.module.common.MogoModulePaths; import com.mogo.module.common.map.MapCenterPointStrategy; import com.mogo.module.common.map.Scene; import com.mogo.module.main.cards.CardIntroduceConfigs; -import com.mogo.module.main.cards.CardModulesAdapter; -import com.mogo.module.main.cards.HorizentalStackTransformer; import com.mogo.module.main.cards.MogoModulesHandler; import com.mogo.module.main.cards.MogoModulesManager; -import com.mogo.module.main.cards.OnPageChangeListenerAdapter; -import com.mogo.module.main.cards.OrientedViewPager; import com.mogo.module.main.windowview.FloatingViewHandler; import com.mogo.module.service.ServiceConst; import com.mogo.service.IMogoServiceApis; import com.mogo.service.MogoServicePaths; -import com.mogo.service.cardmanager.IMogoCardManager; import com.mogo.service.fragmentmanager.IMogoFragmentManager; import com.mogo.service.map.IMogoMapService; import com.mogo.service.module.IMogoModuleProvider; @@ -59,16 +54,10 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme private IMogoMapService mMogoMapService; private IMogoMapUIController mMogoMapUIController; private MogoModulesHandler mMogoModuleHandler; - private IMogoCardManager mMogoCardManager; private IMogoFragmentManager mMogoFragmentManager; private IMogoStatusManager mMogoStatusManager; - private OrientedViewPager mCardsContainer; - private HorizentalStackTransformer mTransformer; - private CardModulesAdapter mCardModulesAdapter; - private View mHeader; - private View mCards; private View mApps; private View mEntrance; private FrameLayout mFloatingLayout; @@ -102,82 +91,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme getWindow().setBackgroundDrawable( null ); - mCardsContainer = findViewById( R.id.module_main_id_cards_container ); - mCardsContainer.setOrientation( OrientedViewPager.Orientation.HORIZONTAL ); - mTransformer = new HorizentalStackTransformer( this ); - mCardsContainer.setOnPageChangeListener( mOnPageChangeListener = new OnPageChangeListenerAdapter() { - private boolean mIsLast = true; - private boolean mCardFlipStatus = false; - - @Override - public void onPageSelected( int position ) { - final long start = System.currentTimeMillis(); - try { - IMogoModuleProvider provider = mCardModulesAdapter.getProvider( mCurrentPosition ); - if ( mCurrentPosition != position ) { - mPresenter.postTrackLastCardShowEvent( provider ); - } - mCurrentPosition = position; - provider = mCardModulesAdapter.getProvider( mCurrentPosition ); - mMogoModuleHandler.setModuleEnable( provider.getModuleName() ); - mMogoCardManager.invoke( position, mMogoModuleHandler.getCurrentModuleName() ); - - if ( mLockCarStatus ) { - mMogoStatusManager.setUserInteractionStatus( TAG, true, false ); - mMogoMapUIController.setLockZoom( 16 ); - mMogoMapUIController.recoverLockMode(); - } - mLockCarStatus = true; - - } catch ( Exception e ) { - e.printStackTrace(); - } - Logger.i( TAG, "onPageSelected cost " + ( System.currentTimeMillis() - start ) + "ms" ); - } - - @Override - public void onPageScrollStateChanged( int state ) { - final long start = System.currentTimeMillis(); - super.onPageScrollStateChanged( state ); - if ( state == ViewPager.SCROLL_STATE_DRAGGING ) { - if ( !mCardFlipStatus ) { - mCardFlipStatus = true; - final IMogoModuleProvider provider = mCardModulesAdapter.getProvider( mCurrentPosition ); - mPresenter.postTrackCardFlipEvent( provider ); - } - } else if ( state == ViewPager.SCROLL_STATE_IDLE ) { - mCardFlipStatus = false; - mTransformer.resetOffsetScroll(); - } - - int cardSize = mCardModulesAdapter.getCount(); - - if ( state == ViewPager.SCROLL_STATE_SETTLING ) { - mIsLast = false; - } else if ( state == ViewPager.SCROLL_STATE_IDLE && mIsLast ) { - //此处为你需要的情况,再加入当前页码判断可知道是第一页还是最后一页 - if ( cardSize != 1 && mCurrentPosition == ( cardSize - 1 ) ) { - mCardsContainer.setCurrentItem( 0, false ); - } else if ( cardSize != 1 && mCurrentPosition == 0 ) { - mCardsContainer.setCurrentItem( cardSize - 1, false ); - } - } else { - mIsLast = true; - } - Logger.i( TAG, "onPageScrollStateChanged cost " + ( System.currentTimeMillis() - start ) + "ms" ); - } - - @Override - public void onPageScrolled( int position, float positionOffset, - int positionOffsetPixels ) { - super.onPageScrolled( position, positionOffset, positionOffsetPixels ); - Logger.d( TAG, "pageScrolled : offset --- " + positionOffset ); - mTransformer.offsetScrollChanged( positionOffset ); - } - } ); - mHeader = findViewById( R.id.module_main_id_header_fragment_container ); - mCards = findViewById( R.id.module_main_id_cards_container ); mApps = findViewById( R.id.module_main_id_apps_fragment_container ); mEntrance = findViewById( R.id.module_main_id_entrance_fragment_container ); mFloatingLayout = findViewById( R.id.module_main_id_floating_view ); @@ -194,7 +108,6 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme // 隐藏布局 private void hideLayout() { mHeader.setVisibility( View.GONE ); - mCards.setVisibility( View.GONE ); mApps.setVisibility( View.GONE ); mEntrance.setVisibility( View.GONE ); mFloatingLayout.setVisibility( View.GONE ); @@ -205,7 +118,6 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme // 显示布局 private void showLayout() { mHeader.setVisibility( View.VISIBLE ); - mCards.setVisibility( View.VISIBLE ); mApps.setVisibility( View.VISIBLE ); mEntrance.setVisibility( View.VISIBLE ); mFloatingLayout.setVisibility( View.VISIBLE ); @@ -249,6 +161,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme loadContainerModules(); mMogoModuleHandler.loadModules(); mPresenter.delayOperations(); + mPresenter.initADAS(); hideCoverUpLayout(); // 显示左边遮罩 @@ -264,8 +177,6 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme } ); mMogoModuleHandler.loadMapModule( R.id.module_main_id_map_fragment_container ); - mMogoCardManager = mServiceApis.getCardManagerApi(); - mMogoFragmentManager = mServiceApis.getFragmentManagerApi(); mMogoFragmentManager.init( this, R.id.module_main_id_search_fragment ); mMogoFragmentManager.registerMainFragmentStackTransactionListener( ( size ) -> { @@ -291,17 +202,10 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme mMogoModuleHandler.loadEntrancesModule( R.id.module_main_id_entrance_fragment_container ); } - @Override - public void postPickFirstCardEvent() { - if ( mOnPageChangeListener != null ) { - // 默认触发第一个卡片 - mOnPageChangeListener.onPageSelected( 0 ); - } - } - @Override public void hideCoverUpLayout() { mCoverUpLayout.setVisibility( View.GONE ); + mServiceApis.getAdasControllerApi().showADAS(); } @Override @@ -336,23 +240,15 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme @Override public void switch2Card( String cardType, boolean lockCar ) { - if ( mCardModulesAdapter == null ) { - return; - } - mLockCarStatus = lockCar; - int position = mCardModulesAdapter.getProviderPosition( cardType ); - if ( position != -1 ) { - int lastFactPosition = mCardModulesAdapter.getFactPosition( mCurrentPosition ); - mCardsContainer.setCurrentItem( mCurrentPosition + position - lastFactPosition, Math.abs( lastFactPosition - position ) == 1 ); - } else { - Logger.e( TAG, "Can't find type of %s's position", cardType ); - } } @Override protected void onResume() { super.onResume(); mMogoStatusManager.setMainPageResumeStatus( TAG, true ); + if ( mCoverUpLayout.getVisibility() == View.VISIBLE ) { + mServiceApis.getAdasControllerApi().showADAS(); + } } @Override @@ -360,6 +256,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme super.onPause(); mMogoStatusManager.setMainPageResumeStatus( TAG, false ); CardIntroduceConfigs.flush( getApplicationContext() ); + mServiceApis.getAdasControllerApi().closeADAS(); } @Override @@ -400,7 +297,6 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme mMogoModuleHandler = null; mMogoMapService = null; mMogoMapUIController = null; - mMogoCardManager = null; mMogoFragmentManager = null; AIAssist.getInstance( this ).release(); } diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainPresenter.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainPresenter.java index 9b002249ca..9d15afb925 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainPresenter.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainPresenter.java @@ -1,7 +1,6 @@ package com.mogo.module.main; import android.content.Intent; -import android.net.Uri; import android.os.Handler; import android.os.Looper; import android.os.Message; @@ -12,7 +11,6 @@ import androidx.lifecycle.LifecycleOwner; import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.commons.mvp.Presenter; -import com.mogo.map.navi.IMogoNavi; import com.mogo.module.main.constants.MainConstants; import com.mogo.module.main.livedata.CardSwitchLiveData; import com.mogo.service.MogoServicePaths; @@ -33,8 +31,6 @@ public class MainPresenter extends Presenter< MainView > { // 埋点接口 private IMogoAnalytics mAnalytics; - private long mCardStartShowTime = 0; - private Handler mMsgHandler = new Handler( Looper.getMainLooper() ) { @Override public void handleMessage( Message msg ) { @@ -42,16 +38,6 @@ public class MainPresenter extends Presenter< MainView > { switch ( msg.what ) { case MainConstants.MSG_LOAD_CARD_MODULES: mView.loadCardModules(); - mMsgHandler.sendEmptyMessageDelayed( MainConstants.MSG_LOAD_INVOKE_FIRST_CARD_PERFORM_EVENT, 1_000L ); - break; - case MainConstants.MSG_LOAD_INVOKE_FIRST_CARD_PERFORM_EVENT: - mView.postPickFirstCardEvent(); - break; - case MainConstants.MSG_TRACK_LAST_CARD_DISPLAY_EVENT: - trackLastCardShowEvent( ( IMogoModuleProvider ) msg.obj ); - break; - case MainConstants.MSG_TRACK_CARD_FLIP_EVENT: - trackCardFlipEvent( ( IMogoModuleProvider ) msg.obj ); break; case MainConstants.MSG_HIDE_MAP_COVER_FRAME: mView.hideCoverUpLayout(); @@ -65,7 +51,6 @@ public class MainPresenter extends Presenter< MainView > { public MainPresenter( MainView view ) { super( view ); - mCardStartShowTime = System.currentTimeMillis(); SchemeIntent.getInstance().init( getContext(), mView.getApis() ); } @@ -81,38 +66,6 @@ public class MainPresenter extends Presenter< MainView > { mAnalytics = ( IMogoAnalytics ) ARouter.getInstance().build( MogoServicePaths.PATH_UTILS_ANALYTICS ).navigation( getContext() ); } - /** - * 卡片展示时长埋点 - * - * @param provider - */ - public void trackLastCardShowEvent( IMogoModuleProvider provider ) { - if ( provider == null ) { - return; - } - Map< String, Object > properties = new HashMap<>(); - properties.put( "appname", provider.getAppName() ); - properties.put( "packagename", provider.getAppPackage() ); - properties.put( "activeTime", System.currentTimeMillis() - mCardStartShowTime ); - properties.put( "type", provider.getModuleName() ); - mAnalytics.track( "Launcher_Card_Show", properties ); - mCardStartShowTime = System.currentTimeMillis(); - } - - /** - * 卡片滑动埋点,WTF - */ - public void trackCardFlipEvent( IMogoModuleProvider provider ) { - if ( provider == null ) { - return; - } - Map< String, Object > properties = new HashMap<>(); - properties.put( "appname", provider.getAppName() ); - properties.put( "packagename", provider.getAppPackage() ); - properties.put( "type", provider.getModuleName() ); - mAnalytics.track( "Launcher_Card_Slide", properties ); - } - /** * 延时操作 */ @@ -121,20 +74,6 @@ public class MainPresenter extends Presenter< MainView > { mMsgHandler.sendEmptyMessageDelayed( MainConstants.MSG_HIDE_MAP_COVER_FRAME, 150L ); } - public void postTrackLastCardShowEvent( IMogoModuleProvider provider ) { - Message msg = Message.obtain(); - msg.what = MainConstants.MSG_TRACK_LAST_CARD_DISPLAY_EVENT; - msg.obj = provider; - mMsgHandler.sendMessage( msg ); - } - - public void postTrackCardFlipEvent( IMogoModuleProvider provider ) { - Message msg = Message.obtain(); - msg.what = MainConstants.MSG_TRACK_CARD_FLIP_EVENT; - msg.obj = provider; - mMsgHandler.sendMessage( msg ); - } - public void postLoadModuleMsg() { Message msg = Message.obtain(); msg.what = MainConstants.MSG_LOAD_MODULES; @@ -144,4 +83,8 @@ public class MainPresenter extends Presenter< MainView > { public void handleSchemeIntent( Intent intent ) { SchemeIntent.getInstance().handle( intent ); } + + public void initADAS(){ + + } } diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainView.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainView.java index 8ab476a7c4..ec93570a23 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainView.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainView.java @@ -23,11 +23,6 @@ public interface MainView extends IView { */ void loadCardModules(); - /** - * 触发第一张卡片选中 - */ - void postPickFirstCardEvent(); - /** * 隐藏背景 */ diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesHandler.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesHandler.java index b42e719706..ed57a10838 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesHandler.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesHandler.java @@ -1,21 +1,9 @@ package com.mogo.module.main.cards; -import com.mogo.map.listener.IMogoMapListener; -import com.mogo.map.location.IMogoLocationClient; -import com.mogo.map.location.IMogoLocationListener; -import com.mogo.map.marker.IMogoMarker; -import com.mogo.map.marker.IMogoMarkerClickListener; -import com.mogo.map.navi.IMogoAimlessModeListener; -import com.mogo.map.navi.IMogoCarLocationChangedListener; -import com.mogo.map.navi.IMogoCarLocationChangedListener2; -import com.mogo.map.navi.IMogoNaviListener; import com.mogo.service.module.IMogoModuleProvider; -import java.util.Collection; import java.util.List; -import javax.security.auth.callback.Callback; - /** * @author congtaowang * @since 2019-12-24 @@ -64,22 +52,8 @@ public interface MogoModulesHandler { */ void loadEntrancesModule( int containerId ); - /** - * 设置某一个module可用 - * - * @param module - */ - void setModuleEnable( String module ); - /** * 销毁 */ void destroy(); - - /** - * 当前卡片名称 - * - * @return - */ - String getCurrentModuleName(); } diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesManager.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesManager.java index be86c4e7ad..bc4f9ae071 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesManager.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesManager.java @@ -1,7 +1,6 @@ package com.mogo.module.main.cards; import android.content.Context; -import android.text.TextUtils; import androidx.fragment.app.Fragment; @@ -11,24 +10,13 @@ import com.mogo.module.common.MogoModulePaths; import com.mogo.module.extensions.ExtensionsModuleConst; import com.mogo.module.main.EventDispatchCenter; import com.mogo.module.main.MainActivity; -import com.mogo.module.main.registercenter.MogoRegisterCenterHandler; import com.mogo.service.IMogoServiceApis; -import com.mogo.service.MogoServicePaths; -import com.mogo.service.intent.IMogoIntentManager; -import com.mogo.service.module.IMogoModuleLifecycle; import com.mogo.service.module.IMogoModuleProvider; -import com.mogo.service.module.ModuleType; import com.mogo.utils.ResourcesHelper; import com.mogo.utils.logger.Logger; -import com.mogo.utils.network.utils.GsonUtil; -import com.mogo.utils.storage.SharedPrefsMgr; - -import org.json.JSONArray; -import org.json.JSONException; import java.util.ArrayList; import java.util.HashMap; -import java.util.Iterator; import java.util.List; import java.util.Map; @@ -38,7 +26,7 @@ import java.util.Map; *

* 卡片加载 */ -public class MogoModulesManager implements MogoModulesHandler{ +public class MogoModulesManager implements MogoModulesHandler { private static final String TAG = "MogoModulesManager"; @@ -48,17 +36,12 @@ public class MogoModulesManager implements MogoModulesHandler{ // 空间换效率 private Map< String, IMogoModuleProvider > mModuleNameProviders = new HashMap<>(); - private String mEnableModuleName = null; - - public static final String KEY_SORTED_CARD_MODULES = "sortedCards"; - private List< String > mSortedCards = new ArrayList<>(); - - public MogoModulesManager( MainActivity activity , IMogoServiceApis apis) { + public MogoModulesManager( MainActivity activity, IMogoServiceApis apis ) { if ( activity == null ) { throw new NullPointerException( "activity can't be null." ); } this.mActivity = activity; - EventDispatchCenter.getInstance().registerReceiver(apis.getIntentManagerApi()); + EventDispatchCenter.getInstance().registerReceiver( apis.getIntentManagerApi() ); CardIntroduceConfigs.init( getContext(), apis ); } @@ -88,61 +71,13 @@ public class MogoModulesManager implements MogoModulesHandler{ @Override public List< IMogoModuleProvider > loadCardsModule() { - String sortedJson = SharedPrefsMgr.getInstance( getContext() ).getString( KEY_SORTED_CARD_MODULES ); - try { - JSONArray array = new JSONArray( sortedJson ); - mSortedCards = new ArrayList<>( array.length() ); - for ( int i = 0; i < array.length(); i++ ) { - mSortedCards.add( array.getString( i ) ); - } - Logger.d( TAG, "Last cache card: %s", mSortedCards ); - } catch ( JSONException e ) { - e.printStackTrace(); - } - final List< MogoModule > modules = MogoModulePaths.getModules(); final ArrayList< IMogoModuleProvider > providers = new ArrayList<>(); for ( MogoModule module : modules ) { IMogoModuleProvider provider = mModuleProviders.get( module ); - if ( provider.getType() == ModuleType.TYPE_CARD_FRAGMENT ) { - if ( mEnableModuleName == null ) { - mEnableModuleName = provider.getModuleName(); - } - providers.add( provider ); - } + providers.add( provider ); } return providers; -// return sort( providers ); v2.0.2暂不支持变顺序 - } - - private List< IMogoModuleProvider > sort( List< IMogoModuleProvider > modules ) { - if ( modules == null || modules.size() == 0 ) { - return modules; - } - if ( mSortedCards == null ) { - mSortedCards = new ArrayList<>(); - } - List< IMogoModuleProvider > sortedList = new ArrayList<>( modules.size() ); - - for ( String sortedCard : mSortedCards ) { - for ( IMogoModuleProvider module : modules ) { - if ( TextUtils.equals( module.getModuleName(), sortedCard ) ) { - sortedList.add( module ); - Logger.d( TAG, "%s sorted.", sortedCard ); - break; - } - } - } - for ( IMogoModuleProvider module : modules ) { - if ( !sortedList.contains( module ) ) { - sortedList.add( module ); - } - } - mSortedCards.clear(); - for ( IMogoModuleProvider provider : sortedList ) { - mSortedCards.add( provider.getModuleName() ); - } - return sortedList; } @Override @@ -183,14 +118,12 @@ public class MogoModulesManager implements MogoModulesHandler{ private void addFragment( IMogoModuleProvider provider, int containerId ) { if ( provider == null ) { - Logger.e( TAG, "add fragment fail cause provider == null, container is %s", - ResourcesHelper.getResNameById( getApplicationContext(), containerId ) ); + Logger.e( TAG, "add fragment fail cause provider == null, container is %s", ResourcesHelper.getResNameById( getApplicationContext(), containerId ) ); return; } final Fragment fragment = provider.createFragment( getContext(), null ); if ( fragment == null ) { - Logger.e( TAG, "add fragment fail cause fragment == null, container is %s", - ResourcesHelper.getResNameById( getApplicationContext(), containerId ) ); + Logger.e( TAG, "add fragment fail cause fragment == null, container is %s", ResourcesHelper.getResNameById( getApplicationContext(), containerId ) ); return; } mActivity.getSupportFragmentManager().beginTransaction() @@ -198,52 +131,6 @@ public class MogoModulesManager implements MogoModulesHandler{ .commitAllowingStateLoss(); } - @Override - public void setModuleEnable( String module ) { - final long start1 = System.currentTimeMillis(); - // 仅操作上一个模块和当前模块 - Iterator< IMogoModuleProvider > iterator = mModuleProviders.values().iterator(); - int counter = 0; - - // 上一个卡片设置为 disable - IMogoModuleProvider prev = mModuleNameProviders.get( mEnableModuleName ); - if ( prev != null ) { - final IMogoModuleLifecycle lifecycle = MogoRegisterCenterHandler.getInstance().getLifecycleListener( mEnableModuleName ); - if ( lifecycle != null ) { - try { - final long start = System.currentTimeMillis(); - lifecycle.onDisable(); - Logger.i( TAG, "set %s module disable event cost " + ( System.currentTimeMillis() - start ) + "ms", mEnableModuleName ); - } catch ( Exception e ) { - Logger.e( TAG, e, "error." ); - } - } - } - - // 当前卡片设置为 perform - IMogoModuleProvider current = mModuleNameProviders.get( module ); - if ( current != null ) { - final IMogoModuleLifecycle lifecycle = MogoRegisterCenterHandler.getInstance().getLifecycleListener( module ); - if ( lifecycle != null ) { - try { - final long start = System.currentTimeMillis(); - lifecycle.onPerform(); - Logger.i( TAG, "set %s module perform event cost " + ( System.currentTimeMillis() - start ) + "ms", module ); - } catch ( Exception e ) { - Logger.e( TAG, e, "error." ); - } - } - } - - mEnableModuleName = module; - mSortedCards.remove( mEnableModuleName ); - mSortedCards.add( 0, mEnableModuleName ); - SharedPrefsMgr.getInstance( getContext() ).putString( KEY_SORTED_CARD_MODULES, GsonUtil.jsonFromObject( mSortedCards ) ); - Logger.i( TAG, "enable & disable card cost " + ( System.currentTimeMillis() - start1 ) + "ms" ); - - CardIntroduceConfigs.broadcastCardIntroduce( mActivity, mEnableModuleName ); - } - @Override public void destroy() { mActivity = null; @@ -251,11 +138,5 @@ public class MogoModulesManager implements MogoModulesHandler{ mModuleProviders.clear(); } mModuleProviders = null; - mEnableModuleName = null; - } - - @Override - public String getCurrentModuleName() { - return mEnableModuleName; } } diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/constants/MainConstants.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/constants/MainConstants.java index 5689102e6d..deb859893a 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/constants/MainConstants.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/constants/MainConstants.java @@ -13,21 +13,6 @@ public class MainConstants { */ public static final int MSG_LOAD_CARD_MODULES = 5000; - /** - * 消息:触发第一张卡片的onPerform 时间 - */ - public static final int MSG_LOAD_INVOKE_FIRST_CARD_PERFORM_EVENT = 5001; - - /** - * 消息:卡片展示事件 - */ - public static final int MSG_TRACK_LAST_CARD_DISPLAY_EVENT = 5002; - - /** - * 消息:卡片滑动事件 - */ - public static final int MSG_TRACK_CARD_FLIP_EVENT = 5003; - /** * 消息:隐藏地图遮罩(避免地图加载白屏) */ diff --git a/modules/mogo-module-main/src/main/res/layout/module_main_activity_main.xml b/modules/mogo-module-main/src/main/res/layout/module_main_activity_main.xml index 603a0ecaed..9ba1c6ea16 100644 --- a/modules/mogo-module-main/src/main/res/layout/module_main_activity_main.xml +++ b/modules/mogo-module-main/src/main/res/layout/module_main_activity_main.xml @@ -37,19 +37,10 @@ android:layout_marginLeft="@dimen/module_main_card_container_marginLeft" android:layout_marginTop="@dimen/module_main_card_container_marginTop"> - - diff --git a/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapPresenter.java b/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapPresenter.java index 127ad28b9e..a1cec4be2c 100644 --- a/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapPresenter.java +++ b/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapPresenter.java @@ -20,11 +20,8 @@ import com.mogo.map.navi.IMogoNavi; import com.mogo.map.navi.IMogoNaviListener2; import com.mogo.map.navi.MogoNaviConfig; import com.mogo.map.navi.MogoNaviInfo; -import com.mogo.map.navi.MogoTraffic; import com.mogo.map.uicontroller.EnumMapUI; import com.mogo.map.uicontroller.MapControlResult; -import com.mogo.module.common.map.MapCenterPointStrategy; -import com.mogo.module.common.map.Scene; import com.mogo.service.IMogoServiceApis; import com.mogo.service.MogoServicePaths; import com.mogo.service.intent.IMogoIntentListener; @@ -242,7 +239,7 @@ public class MapPresenter extends Presenter< MapView > implements Logger.d( TAG, "未开始导航." ); return; } - if ( mStatusManager.isADASShow() ) { + if ( mStatusManager.isV2XShow() ) { Logger.d( TAG, "ADAS模式忽略该请求." ); return; } @@ -282,8 +279,8 @@ public class MapPresenter extends Presenter< MapView > implements mMogoMapService.getMapUIController().recoverLockMode();//缩放地图会导致锁车发生改变,这里强制锁车 }, 1_000 ); } else { - // 20s后锁车刷新 - mRefreshStrategyController.restartAutoRefreshAtTime( 20_000 ); + // 30s后锁车刷新 + mRefreshStrategyController.restartAutoRefreshAtTime( 30_000 ); } } @@ -461,46 +458,6 @@ public class MapPresenter extends Presenter< MapView > implements } } - @Override - public void onCmdAction( String speakText ) { - - } - - @Override - public void onCmdCancel( String speakText ) { - - } - - @Override - public void onSpeakEnd( String speakText ) { - - } - - @Override - public void onSpeakSelectTimeOut( String speakText ) { - - } - - @Override - public void onArriveDestination() { - - } - - @Override - public void onEndEmulatorNavi() { - - } - - @Override - public void onInitNaviFailure() { - - } - - @Override - public void onInitNaviSuccess() { - - } - @Override public void onNaviInfoUpdate( MogoNaviInfo naviinfo ) { MapBroadCastHelper.getInstance( getContext() ).notifyXiaozhi( naviinfo ); @@ -515,19 +472,4 @@ public class MapPresenter extends Presenter< MapView > implements public void onStopNavi() { MapBroadCastHelper.getInstance( getContext() ).stopNavi(); } - - @Override - public void onCalculateSuccess() { - - } - - @Override - public void onoCalculateFailed() { - - } - - @Override - public void onUpdateTraffic( MogoTraffic traffic ) { - - } } 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 a3a709ce12..375936ee6b 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 @@ -47,6 +47,6 @@ public class AMapConstants { */ public static final String COMMAND_START_NAVI = "com.ileja.navi.route.confirm"; - public static final String COMMAND_CHOOSE_PATH = "com.zhidao.route.plan"; + public static final String COMMAND_CHOOSE_PATH = "com.zhidao.route.choice"; } 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 a74f3e6118..ace72751bb 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 @@ -14,6 +14,7 @@ import com.mogo.module.gps.simulator.GpsSimulatorConstants import com.mogo.module.gps.simulator.IMogoGpsSimulatorManager import com.mogo.module.guideshow.provider.GuideShowProviderConstant import com.mogo.module.guideshow.provider.IGuideShowProvider +import com.mogo.service.IMogoServiceApis import com.mogo.service.MogoServicePaths import com.mogo.service.analytics.IMogoAnalytics import com.mogo.service.fragmentmanager.FragmentDescriptor @@ -42,7 +43,7 @@ object SearchServiceHolder { val mogoLauncher: IMogoLauncher = ARouter.getInstance().build(MogoServicePaths.PATH_LAUNCHER_API).navigation() as IMogoLauncher val gpsSimulator = ARouter.getInstance().build(GpsSimulatorConstants.API_PATH).navigation() as IMogoGpsSimulatorManager val intentManager = ARouter.getInstance().build(MogoServicePaths.PATH_INTENT_MANAGER).navigation() as IMogoIntentManager - + val apis = ARouter.getInstance().navigation(IMogoServiceApis::class.java) var geoSearch: IMogoGeoSearch? = null fun init(context: Context) { this.context = context diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/AddressManager.kt b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/AddressManager.kt index 7e57736dad..1817c3163b 100644 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/AddressManager.kt +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/AddressManager.kt @@ -122,6 +122,7 @@ object AddressManager { * 回家 */ fun goHome() { + closeADAS() SearchServiceHolder.statusManager.setSearchUIShow(TAG, true) if (homeAddress == null) { choosePoint(DataConstants.TYPE_HOME_ADDRESS) @@ -134,6 +135,7 @@ object AddressManager { * 去公司 */ fun goCompany() { + closeADAS() SearchServiceHolder.statusManager.setSearchUIShow(TAG, true) if (companyAddress == null) { choosePoint( DataConstants.TYPE_COMPANY_ADDRESS) @@ -146,6 +148,7 @@ object AddressManager { * 搜索 */ fun goSearch() { + closeADAS() SearchServiceHolder.statusManager.setSearchUIShow(TAG, true) SearchServiceHolder.fragmentManager.push( FragmentDescriptor.Builder().fragment(SearchFragment()) @@ -160,12 +163,14 @@ object AddressManager { */ fun calculatePath(destination: MogoLatLng?) { destination?.let { + closeADAS() var newInstance = ChoosePathFragment.newInstance(destination) SearchServiceHolder.push(newInstance, AMapConstants.PATH_FRAGMENT_CHOOSE_PATH) } } fun categorySearch(category: String){ + closeADAS() val searchFragment = CategorySearchFragment.newInstance(category) SearchServiceHolder.fragmentManager.push(FragmentDescriptor.Builder().fragment(searchFragment) .tag(AMapConstants.PATH_FRAGMENT_SEARCH_CATEGORY) @@ -174,6 +179,7 @@ object AddressManager { } fun goSettings(){ + closeADAS() val naviSettingFragment = NaviSettingFragment() SearchServiceHolder.fragmentManager.push(FragmentDescriptor.Builder().fragment(naviSettingFragment) .tag(AMapConstants.PATH_FRAGMENT_NAVI_SETTING) @@ -181,4 +187,13 @@ object AddressManager { .build()) } + + private fun closeADAS() { + try { + SearchServiceHolder.apis.adasControllerApi.closeADAS() + } catch (e: Exception) { + e.printStackTrace() + } + + } } diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/MogoAddressManager.java b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/MogoAddressManager.java index 6c290d1675..8c2204f9f8 100644 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/MogoAddressManager.java +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/MogoAddressManager.java @@ -1,6 +1,7 @@ package com.mogo.module.navi.manager; import android.content.Context; + import com.alibaba.android.arouter.facade.annotation.Route; import com.mogo.map.MogoLatLng; import com.mogo.module.navi.constants.SearchServiceHolder; @@ -14,11 +15,13 @@ import com.mogo.service.module.IMogoAddressManager; @Route( path = MogoServicePaths.PATH_ADDRESS_MANAGER ) public class MogoAddressManager implements IMogoAddressManager { - @Override public void goHome() { + @Override + public void goHome() { AddressManager.INSTANCE.goHome(); } - @Override public void goCompany() { + @Override + public void goCompany() { AddressManager.INSTANCE.goCompany(); } @@ -42,9 +45,10 @@ public class MogoAddressManager implements IMogoAddressManager { AddressManager.INSTANCE.goSettings(); } - @Override public void init( Context context) { - AddressManager.INSTANCE.init(context); - SearchServiceHolder.INSTANCE.init(context); - SettingManager.INSTANCE.init(context); + @Override + public void init( Context context ) { + AddressManager.INSTANCE.init( context ); + SearchServiceHolder.INSTANCE.init( context ); + SettingManager.INSTANCE.init( context ); } } 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 index 750335c1be..0abd48fc46 100644 --- 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 @@ -38,8 +38,8 @@ import org.json.JSONObject */ class ChoosePathFragment : BaseFragment(), IMogoNaviListener, IMogoVoiceCmdCallBack, IMogoIntentListener { - var mTimeShortestPosition = -1 - var mDistanceShortestPosition = -1 + private var mTimeShortestPosition = -1 + private var mDistanceShortestPosition = -1 override fun onCmdSelected(cmd: String?) { when (cmd) { @@ -270,45 +270,18 @@ class ChoosePathFragment : BaseFragment(), IMogoNaviListener, IMogoVoiceCmdCallB var dataJsonStr = intent?.getStringExtra("data") ?: "" try { var jsonObj = JSONObject(dataJsonStr) - var routePlan = jsonObj.optString("route_plan", " ") + var routePlan = jsonObj.optString("route_choice", " ") when (routePlan) { - "最快" -> { + "fastest" -> { // 时间最短 selectItem(mTimeShortestPosition) startNavi() } - "不走高速" -> { - // 仅在导航场景下,⽀持第三⽅进⾏路线偏好的重新选择。 - // 避免收费 | 1 - // 多策略算路 | 2 - // 不走高速 | 3 - // 躲避拥堵 | 4 - // 不走高速且避免收费 | 5 - // 不走高速且躲避拥堵 | 6 - // 躲避收费和拥堵 | 7 - // 不走高速躲避收费和拥堵 | 8 - // 高速优先 | 20 - // 躲避拥堵且高速优先 | 24 - var prefer = 3 - val config = MogoNaviConfig().congestion(prefer == 4) - .cost(prefer == 1 || prefer == 7) - .highSpeed(prefer == 20) - .avoidSpeed(prefer == 3) - SearchServiceHolder.getNavi().reCalculateRoute(config) - } - "最近" -> { + "nearest" -> { // 路程最短 selectItem(mDistanceShortestPosition) startNavi() } - "躲避拥堵" -> { - var prefer = 4 - val config = MogoNaviConfig().congestion(prefer == 4) - .cost(prefer == 1 || prefer == 7) - .highSpeed(prefer == 20) - .avoidSpeed(prefer == 3) - SearchServiceHolder.getNavi().reCalculateRoute(config) - } } } catch (e: Exception) { diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java index 8b72b40756..88f0bf02e7 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java @@ -172,7 +172,7 @@ public class MogoServices implements IMogoMapListener, super.handleMessage( msg ); switch ( msg.what ) { case ServiceConst.MSG_TYPE_REFRESH_DECREASE: - if ( mStatusManager.isSearchUIShow() || mStatusManager.isADASShow() ) { + if ( mStatusManager.isSearchUIShow() || mStatusManager.isV2XShow() ) { stopAutoRefreshStrategy(); return; } @@ -185,7 +185,7 @@ public class MogoServices implements IMogoMapListener, } break; case ServiceConst.MSG_LOOP_REQUEST: - if ( mStatusManager.isSearchUIShow() || mStatusManager.isADASShow() ) { + if ( mStatusManager.isSearchUIShow() || mStatusManager.isV2XShow() ) { return; } if ( mLoopRequest ) { @@ -200,7 +200,7 @@ public class MogoServices implements IMogoMapListener, * 自动刷新:锁车、缩放比例:16、半径 2KM */ private void invokeAutoRefresh() { - if ( mStatusManager.isSearchUIShow() || mStatusManager.isADASShow() ) { + if ( mStatusManager.isSearchUIShow() || mStatusManager.isV2XShow() ) { mStatusManager.setUserInteractionStatus( TAG, true, false ); mUiController.recoverLockMode(); return; @@ -230,7 +230,7 @@ public class MogoServices implements IMogoMapListener, */ private RefreshCallback mCustomRefreshCallback = new RefreshCallback() { @Override - public void onSuccess(Object o) { + public void onSuccess( Object o ) { mLoopRequest = false; // 用户手动操作地图刷新成功后,设置状态为 true,引发延时策略 mStatusManager.setUserInteractionStatus( ServiceConst.TYPE, true, true ); @@ -248,7 +248,7 @@ public class MogoServices implements IMogoMapListener, */ private RefreshCallback mAutoRefreshCallback = new RefreshCallback() { @Override - public void onSuccess(Object o) { + public void onSuccess( Object o ) { mLoopRequest = false; Logger.d( TAG, "request Success." ); invokeAutoRefreshStrategy(); @@ -348,11 +348,11 @@ public class MogoServices implements IMogoMapListener, if ( msg.obj instanceof RefreshObject ) { RefreshObject ro = ( ( RefreshObject ) msg.obj ); mRefreshModel.refreshData( ro.mLonLat, ro.mRadius, ro.mAmount, ro.mCallback ); - MapMarkerManager.getInstance().getOnlineCarData(ro.mLonLat); + MapMarkerManager.getInstance().getOnlineCarData( ro.mLonLat ); Logger.i( TAG, "刷新半径 = %s, 点 = %s, zoomLevel = %s, amount = %s", ro.mRadius, ro.mLonLat, mLastZoomLevel, ro.mAmount ); } - } else if( msg.what == ServiceConst.MSG_LOCK_CAR ){ + } else if ( msg.what == ServiceConst.MSG_LOCK_CAR ) { if ( mStatusManager.isSearchUIShow() ) { return; } @@ -436,8 +436,7 @@ public class MogoServices implements IMogoMapListener, */ private float getMapCameraFactHeight() { try { - return Utils.calculateLineDistance( mCameraSouthWestPosition, - new MogoLatLng( mCameraNorthEastPosition.lat, mCameraSouthWestPosition.lng ) ); + return Utils.calculateLineDistance( mCameraSouthWestPosition, new MogoLatLng( mCameraNorthEastPosition.lat, mCameraSouthWestPosition.lng ) ); } catch ( Exception e ) { return ServiceConst.DEFAULT_AUTO_REFRESH_DATA_RADIUS; } @@ -468,16 +467,6 @@ public class MogoServices implements IMogoMapListener, mHandler.removeMessages( ServiceConst.MSG_TYPE_REFRESH_DECREASE ); } - @Override - public void onPOIClick( MogoPoi poi ) { - - } - - @Override - public void onMapClick( MogoLatLng latLng ) { - - } - @Override public void onLockMap( boolean isLock ) { mThreadHandler.removeMessages( ServiceConst.MSG_LOCK_CAR ); @@ -486,15 +475,10 @@ public class MogoServices implements IMogoMapListener, } } - @Override - public void onMapModeChanged( EnumMapUI ui ) { - - } - @Override public void onMapChanged( MogoLatLng latLng, float zoom, float tilt, float bearing ) { - MapMarkerManager.getInstance().syncLocation( latLng.lon, latLng. lat ); + MapMarkerManager.getInstance().syncLocation( latLng.lon, latLng.lat ); if ( mIsCameraInited ) { mLastZoomLevel = zoom; @@ -513,7 +497,7 @@ public class MogoServices implements IMogoMapListener, } // v2x // adas 状态下不做任何操作 - if ( mStatusManager.isADASShow() ) { + if ( mStatusManager.isV2XShow() ) { mLastCustomRefreshCenterLocation = latLng; mLastZoomLevel = zoom; return; @@ -585,7 +569,7 @@ public class MogoServices implements IMogoMapListener, @Override public void onCarLocationChanged2( Location latLng ) { - if ( mStatusManager.isADASShow() ) { + if ( mStatusManager.isV2XShow() ) { return; } @@ -637,28 +621,6 @@ public class MogoServices implements IMogoMapListener, mThreadHandler.sendMessage( msg ); } - @Override - public void onInitNaviFailure() { - - } - - @Override - public void onInitNaviSuccess() { - - } - - @Override - public void onNaviInfoUpdate( MogoNaviInfo naviinfo ) { - } - - @Override - public void onStartNavi() { - } - - @Override - public void onStopNavi() { - } - @Override public void onStatusChanged( StatusDescriptor descriptor, boolean isTrue ) { //Logger.d( TAG, "状态发生改变---descriptor---" + descriptor + "----isTrue---" + isTrue ); @@ -675,7 +637,7 @@ public class MogoServices implements IMogoMapListener, } else { // 搜索后,打开打点策略 if ( mAutoRefreshCallback != null ) { - mAutoRefreshCallback.onSuccess(null); + mAutoRefreshCallback.onSuccess( null ); } } break; @@ -730,7 +692,7 @@ public class MogoServices implements IMogoMapListener, refreshStrategy(); // ADAS关闭后,打开打点策略 if ( mAutoRefreshCallback != null ) { - mAutoRefreshCallback.onSuccess(null); + mAutoRefreshCallback.onSuccess( null ); } } @@ -756,21 +718,6 @@ public class MogoServices implements IMogoMapListener, notifyRefreshData( mLastAutoRefreshLocation, getQueryRadius(), mAutoRefreshCallback ); } - @Override - public void onCalculateSuccess() { - - } - - @Override - public void onoCalculateFailed() { - - } - - @Override - public void onUpdateTraffic( MogoTraffic traffic ) { - - } - @Override public void onUpdateTraffic2( MogoTraffic traffic ) { @@ -816,9 +763,9 @@ public class MogoServices implements IMogoMapListener, mStatusManager.setVoiceUIShow( TAG, true ); } } else if ( ServiceConst.COMMAND_NEXT.equals( command ) ) { - onActionDown( MogoAction.Next ); + onActionDone( MogoAction.Next ); } else if ( ServiceConst.COMMAND_PREVIOUS.equals( command ) ) { - onActionDown( MogoAction.Prev ); + onActionDone( MogoAction.Prev ); } else if ( ServiceConst.COMMAND_SWITCH_CARD.equals( command ) ) { IntentHandlerFactory.getInstance().handle( mContext, command, intent ); } else if ( MogoReceiver.ACTION_ADAS_STATUS.equals( command ) ) { @@ -909,9 +856,9 @@ public class MogoServices implements IMogoMapListener, @Override public void onCmdSelected( String cmd ) { if ( TextUtils.equals( ServiceConst.CMD_UN_WAKE_PREV, cmd ) ) { - onActionDown( MogoAction.Prev ); + onActionDone( MogoAction.Prev ); } else if ( TextUtils.equals( ServiceConst.CMD_UN_WAKE_NEXT, cmd ) ) { - onActionDown( MogoAction.Next ); + onActionDone( MogoAction.Next ); } else if ( TextUtils.equals( ServiceConst.CMD_UN_WAKEUP_MY_LOCATION, cmd ) ) { if ( mStatusManager.isMainPageOnResume() ) { mUiController.recoverLockMode(); @@ -921,11 +868,11 @@ public class MogoServices implements IMogoMapListener, } } - private void onActionDown(MogoAction action){ + private void onActionDone( MogoAction action ) { if ( !mStatusManager.isMainPageOnResume() ) { return; } - if ( mStatusManager.isADASShow() ) { + if ( mStatusManager.isV2XShow() ) { // 分发到V2X mActionManager.invoke( "V2X_UI", action ); } else { @@ -934,26 +881,6 @@ public class MogoServices implements IMogoMapListener, } } - @Override - public void onCmdAction( String speakText ) { - - } - - @Override - public void onCmdCancel( String speakText ) { - - } - - @Override - public void onSpeakEnd( String speakText ) { - - } - - @Override - public void onSpeakSelectTimeOut( String speakText ) { - - } - @Override public void onTransaction( int size ) { if ( size == 0 ) { @@ -968,6 +895,7 @@ public class MogoServices implements IMogoMapListener, MapCenterPointStrategy.setMapCenterPointByScene( mUiController, Scene.AIMLESS ); } mUiController.recoverLockMode(); + mADASController.showADAS(); } else { mUiController.showMyLocation( false ); AIAssist.getInstance( mContext ).registerUnWakeupCommand( ServiceConst.CMD_BACK, ServiceConst.CMD_BACK_WORDS, this ); diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java index 77024d794b..806a4d37a8 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java @@ -105,8 +105,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener, // 长连接 MarkerServiceHandler.getMogoSocketManager().registerOnMessageListener( 401001, this ); - MarkerServiceHandler.getMogoCardManager().registerCardChangedListener( - "LAUNCHER_MARKER_MODULE", this ); + MarkerServiceHandler.getMogoCardManager().registerCardChangedListener( TAG, this ); MarkerServiceHandler.getActionManager().registerBizActionDoneListener( this ); } @@ -269,6 +268,8 @@ public class MapMarkerManager implements IMogoMarkerClickListener, if ( !mogoMarker.isDestroyed() ) { mogoMarker.setInfoWindowAdapter( UserDataMarkerInfoWindowAdapter.getInstance( mContext ) ); mogoMarker.showInfoWindow(); + MarkerServiceHandler.getMogoStatusManager().setUserInteractionStatus( TAG, true, false ); + MarkerServiceHandler.getMapUIController().moveToCenter( mogoMarker.getPosition() ); Logger.d( TAG, "打开info window" ); } } else { diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/receiver/MogoReceiver.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/receiver/MogoReceiver.java index cdb891aed0..ede5636b6e 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/receiver/MogoReceiver.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/receiver/MogoReceiver.java @@ -71,6 +71,7 @@ public class MogoReceiver extends BroadcastReceiver { if (TextUtils.equals(VOICE_ACTION, action)) { String cmd = intent.getStringExtra(PARAM_COMMAND); if (!TextUtils.isEmpty(cmd)) { + Logger.d( TAG, "receive command: %s", cmd ); mMogoIntentManager.invoke(cmd, intent); } } else { diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/refresh/AutoRefreshStrategy.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/refresh/AutoRefreshStrategy.java index 47d96799f4..ba15e2424f 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/refresh/AutoRefreshStrategy.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/refresh/AutoRefreshStrategy.java @@ -13,12 +13,12 @@ public class AutoRefreshStrategy { /** * 距离(米) */ - private int distance = 2_000; + private int distance = 1_000; /** * 时间间距(s) */ - private long interval = 3 * ONE_MINUTE; + private long interval = 3 * ONE_MINUTE / 6; /** * 用户打断后的延时(s)【2.0.2后不再延时】 diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoADASController.java b/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoADASController.java index 5a6f90560d..468c965b26 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoADASController.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoADASController.java @@ -13,11 +13,22 @@ public interface IMogoADASController extends IProvider { /** * 打开adas */ + @Deprecated void openADAS(); /** - * 关闭adas + * 隐藏adas */ void closeADAS(); + /** + * 显示 + */ + void showADAS(); + + /** + * 关闭 + */ + void killADAS(); + } diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/statusmanager/IMogoStatusManager.java b/services/mogo-service-api/src/main/java/com/mogo/service/statusmanager/IMogoStatusManager.java index c5126c1a0a..07930bc5fb 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/statusmanager/IMogoStatusManager.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/statusmanager/IMogoStatusManager.java @@ -22,16 +22,14 @@ public interface IMogoStatusManager extends IProvider { * * @return */ + @Deprecated boolean isADASShow(); /** * v2x UI 是否在展示 - *

- * Deprecated, use {@link #isADASShow()} instead. * * @return */ - @Deprecated boolean isV2XShow(); /** @@ -119,18 +117,16 @@ public interface IMogoStatusManager extends IProvider { * @param tag 业务类型 * @param show true - 显示 false - 隐藏 */ + @Deprecated void setADASUIShow( String tag, boolean show ); /** * 设置 V2X UI 状态 *

- *

- * Deprecated, use {@link #setADASUIShow} instead. * * @param tag 业务类型 * @param show true - 显示 false - 隐藏 */ - @Deprecated void setV2XUIShow( String tag, boolean show ); /** diff --git a/services/mogo-service/build.gradle b/services/mogo-service/build.gradle index 66f2a244d6..3cd53dffe6 100644 --- a/services/mogo-service/build.gradle +++ b/services/mogo-service/build.gradle @@ -40,6 +40,7 @@ dependencies { implementation rootProject.ext.dependencies.arouter annotationProcessor rootProject.ext.dependencies.aroutercompiler + implementation rootProject.ext.dependencies.adasapi if (Boolean.valueOf(RELEASE)) { api rootProject.ext.dependencies.mogomap implementation rootProject.ext.dependencies.mogomapapi diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java index f2d6092c5e..cadd1e446f 100644 --- a/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java +++ b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java @@ -3,6 +3,7 @@ package com.mogo.service.impl.adas; import android.app.Application; import android.content.Context; import android.content.Intent; +import android.os.RemoteException; import com.alibaba.android.arouter.facade.annotation.Route; import com.mogo.commons.AbsMogoApplication; @@ -13,7 +14,9 @@ import com.mogo.service.impl.MogoServiceApis; import com.mogo.service.impl.singleton.SingletonsHolder; import com.mogo.service.impl.statusmanager.MogoStatusManager; import com.mogo.service.statusmanager.IMogoStatusManager; +import com.mogo.utils.UiThreadHandler; import com.mogo.utils.logger.Logger; +import com.zhidao.autopilot.support.api.AutopilotServiceManage; import org.json.JSONObject; @@ -38,49 +41,71 @@ public class MogoADASController implements IMogoADASController { public static final String VAL_OPEN = "打开"; public static final String VAL_CLOSE = "关闭"; - private MogoStatusManager mStatusManager = SingletonsHolder.get( IMogoStatusManager.class ); + private IMogoStatusManager mStatusManager = SingletonsHolder.get( IMogoStatusManager.class ); @Override public void openADAS() { + showADAS(); + } - if ( mStatusManager.isADASShow() ) { - return; - } - - Logger.d( TAG, "open adas" ); - - Intent intent = new Intent( ACTION ); - intent.putExtra( PARAM_COMMAND, VAL_COMMAND ); - JSONObject object = new JSONObject(); + @Override + public void killADAS() { try { - object.put( PARAM_OBJECT, VAL_OBJECT ); - object.put( PARAM_OPERATION, VAL_OPEN ); - intent.putExtra( PARAM_DATA, object.toString() ); - sendBroadcast( intent ); + AutopilotServiceManage.getInstance().kill(); } catch ( Exception e ) { - Logger.e( TAG, e, "error." ); + } } + @Override + public void showADAS() { + + Logger.d( TAG, "show adas" ); + + UiThreadHandler.postDelayed( () -> { + try { + if ( mStatusManager.isSearchUIShow() ) { + return; + } + if ( !mStatusManager.isMainPageOnResume() ) { + return; + } + AutopilotServiceManage.getInstance().showAdas(); + } catch ( Exception e ) { + Intent intent = new Intent( ACTION ); + intent.putExtra( PARAM_COMMAND, VAL_COMMAND ); + JSONObject object = new JSONObject(); + try { + object.put( PARAM_OBJECT, VAL_OBJECT ); + object.put( PARAM_OPERATION, VAL_OPEN ); + intent.putExtra( PARAM_DATA, object.toString() ); + sendBroadcast( intent ); + } catch ( Exception e1 ) { + Logger.e( TAG, e1, "error." ); + } + } + }, 500 ); + } + @Override public void closeADAS() { - if ( !mStatusManager.isADASShow() ) { - return; - } - Logger.d( TAG, "close adas" ); - Intent intent = new Intent( ACTION ); - intent.putExtra( PARAM_COMMAND, VAL_COMMAND ); - JSONObject object = new JSONObject(); try { - object.put( PARAM_OBJECT, VAL_OBJECT ); - object.put( PARAM_OPERATION, VAL_CLOSE ); - intent.putExtra( PARAM_DATA, object.toString() ); - sendBroadcast( intent ); + AutopilotServiceManage.getInstance().hideAdas(); } catch ( Exception e ) { - Logger.e( TAG, e, "error." ); + Intent intent = new Intent( ACTION ); + intent.putExtra( PARAM_COMMAND, VAL_COMMAND ); + JSONObject object = new JSONObject(); + try { + object.put( PARAM_OBJECT, VAL_OBJECT ); + object.put( PARAM_OPERATION, VAL_CLOSE ); + intent.putExtra( PARAM_DATA, object.toString() ); + sendBroadcast( intent ); + } catch ( Exception e1 ) { + Logger.e( TAG, e1, "error." ); + } } } @@ -95,6 +120,6 @@ public class MogoADASController implements IMogoADASController { @Override public void init( Context context ) { - + AutopilotServiceManage.getInstance().init( context ); } } diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/map/MogoMapService.java b/services/mogo-service/src/main/java/com/mogo/service/impl/map/MogoMapService.java index 2f454add44..87a3ae0491 100644 --- a/services/mogo-service/src/main/java/com/mogo/service/impl/map/MogoMapService.java +++ b/services/mogo-service/src/main/java/com/mogo/service/impl/map/MogoMapService.java @@ -4,7 +4,6 @@ import android.content.Context; import com.alibaba.android.arouter.facade.annotation.Route; import com.mogo.map.MogoGeoSearch; -import com.mogo.map.MogoInitor; import com.mogo.map.MogoInputtipsSearch; import com.mogo.map.MogoLocationClient; import com.mogo.map.MogoMapUIController; @@ -88,6 +87,5 @@ public class MogoMapService implements IMogoMapService { @Override public void init( Context context ) { - MogoInitor.init( context ); } } diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/singleton/SingletonsHolder.java b/services/mogo-service/src/main/java/com/mogo/service/impl/singleton/SingletonsHolder.java index 84f241d427..6f54efc813 100644 --- a/services/mogo-service/src/main/java/com/mogo/service/impl/singleton/SingletonsHolder.java +++ b/services/mogo-service/src/main/java/com/mogo/service/impl/singleton/SingletonsHolder.java @@ -33,7 +33,7 @@ public class SingletonsHolder { sSingletons.put( IMogoStatusManager.class, new MogoStatusManager() ); } - public static < T > T get( Class clazz ) { + public static < T > T get( Class clazz ) { return ( T ) sSingletons.get( clazz ); } From ecb1d702aec16d7fcbf9d8ff5eb6c40b6eeb1d61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Fri, 15 May 2020 10:50:58 +0800 Subject: [PATCH 06/31] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86toString?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/misc.xml | 2 +- .../com/mogo/map/search/geo/MogoAoiItem.java | 11 ++++++ .../mogo/map/search/geo/MogoBusinessArea.java | 8 +++++ .../mogo/map/search/geo/MogoCrossroad.java | 12 +++++++ .../map/search/geo/MogoGeocodeAddress.java | 16 +++++++++ .../map/search/geo/MogoGeocodeResult.java | 7 ++++ .../mogo/map/search/geo/MogoIndoorData.java | 9 +++++ .../com/mogo/map/search/geo/MogoPhoto.java | 8 +++++ .../com/mogo/map/search/geo/MogoPoiItem.java | 34 +++++++++++++++++++ .../map/search/geo/MogoRegeocodeAddress.java | 23 +++++++++++++ .../map/search/geo/MogoRegeocodeResult.java | 7 ++++ .../map/search/geo/MogoRegeocodeRoad.java | 11 ++++++ .../mogo/map/search/geo/MogoStreetNumber.java | 11 ++++++ .../mogo/map/search/geo/MogoSubPoiItem.java | 13 +++++++ 14 files changed, 171 insertions(+), 1 deletion(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index 2dc54c489f..707ee6e613 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoAoiItem.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoAoiItem.java index 957c920f60..98b4c8ef03 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoAoiItem.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoAoiItem.java @@ -96,4 +96,15 @@ public class MogoAoiItem implements Parcelable { return new MogoAoiItem[size]; } }; + + @Override + public String toString() { + return "MogoAoiItem{" + + "aoiId='" + aoiId + '\'' + + ", aoiName='" + aoiName + '\'' + + ", adCode='" + adCode + '\'' + + ", aoiCenterPoint=" + aoiCenterPoint + + ", aoiArea=" + aoiArea + + '}'; + } } diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoBusinessArea.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoBusinessArea.java index 5b04b34c93..d8e48978e1 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoBusinessArea.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoBusinessArea.java @@ -63,4 +63,12 @@ public class MogoBusinessArea implements Parcelable { return new MogoBusinessArea[size]; } }; + + @Override + public String toString() { + return "MogoBusinessArea{" + + "centerPoint=" + centerPoint + + ", name='" + name + '\'' + + '}'; + } } diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoCrossroad.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoCrossroad.java index b2899e33a4..3dcd6ea798 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoCrossroad.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoCrossroad.java @@ -105,4 +105,16 @@ public class MogoCrossroad implements Parcelable { return new MogoCrossroad[size]; } }; + + @Override + public String toString() { + return "MogoCrossroad{" + + "distance=" + distance + + ", direction='" + direction + '\'' + + ", firstRoadId='" + firstRoadId + '\'' + + ", firstRoadName='" + firstRoadName + '\'' + + ", secondRoadId='" + secondRoadId + '\'' + + ", secondRoadName='" + secondRoadName + '\'' + + '}'; + } } diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoGeocodeAddress.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoGeocodeAddress.java index ddeac51edc..f92f294de2 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoGeocodeAddress.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoGeocodeAddress.java @@ -100,4 +100,20 @@ public class MogoGeocodeAddress { public void setLevel( String level ) { this.level = level; } + + @Override + public String toString() { + return "MogoGeocodeAddress{" + + "formatAddress='" + formatAddress + '\'' + + ", province='" + province + '\'' + + ", city='" + city + '\'' + + ", district='" + district + '\'' + + ", township='" + township + '\'' + + ", neighborhood='" + neighborhood + '\'' + + ", building='" + building + '\'' + + ", adcode='" + adcode + '\'' + + ", latlng=" + latlng + + ", level='" + level + '\'' + + '}'; + } } diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoGeocodeResult.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoGeocodeResult.java index 5105908e9a..004bdda363 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoGeocodeResult.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoGeocodeResult.java @@ -20,4 +20,11 @@ public class MogoGeocodeResult { public void setAddresses( List< MogoGeocodeAddress > addresses ) { this.addresses = addresses; } + + @Override + public String toString() { + return "MogoGeocodeResult{" + + "addresses=" + addresses + + '}'; + } } diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoIndoorData.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoIndoorData.java index 263b5544ab..bae861260a 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoIndoorData.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoIndoorData.java @@ -72,4 +72,13 @@ public class MogoIndoorData implements Parcelable { return new MogoIndoorData[size]; } }; + + @Override + public String toString() { + return "MogoIndoorData{" + + "poiId='" + poiId + '\'' + + ", floor=" + floor + + ", floorName='" + floorName + '\'' + + '}'; + } } diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoPhoto.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoPhoto.java index ba393665a1..88f3b38427 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoPhoto.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoPhoto.java @@ -61,4 +61,12 @@ public class MogoPhoto implements Parcelable { return new MogoPhoto[size]; } }; + + @Override + public String toString() { + return "MogoPhoto{" + + "title='" + title + '\'' + + ", url='" + url + '\'' + + '}'; + } } diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoPoiItem.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoPoiItem.java index b378a59abc..27ed374472 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoPoiItem.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoPoiItem.java @@ -352,4 +352,38 @@ public class MogoPoiItem implements Parcelable { return new MogoPoiItem[size]; } }; + + @Override + public String toString() { + return "MogoPoiItem{" + + "businessArea='" + businessArea + '\'' + + ", adName='" + adName + '\'' + + ", cityName='" + cityName + '\'' + + ", provinceName='" + provinceName + '\'' + + ", typeDes='" + typeDes + '\'' + + ", tel='" + tel + '\'' + + ", adCode='" + adCode + '\'' + + ", poiId='" + poiId + '\'' + + ", distance=" + distance + + ", title='" + title + '\'' + + ", snippet='" + snippet + '\'' + + ", point=" + point + + ", cityCode='" + cityCode + '\'' + + ", enter=" + enter + + ", exit=" + exit + + ", website='" + website + '\'' + + ", postcode='" + postcode + '\'' + + ", email='" + email + '\'' + + ", direction='" + direction + '\'' + + ", indoorMap=" + indoorMap + + ", provinceCode='" + provinceCode + '\'' + + ", parkingType='" + parkingType + '\'' + + ", subPois=" + subPois + + ", indoorData=" + indoorData + + ", photos=" + photos + + ", poiExtension=" + poiExtension + + ", typeCode='" + typeCode + '\'' + + ", shopID='" + shopID + '\'' + + '}'; + } } diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoRegeocodeAddress.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoRegeocodeAddress.java index a15f7eb132..2026ac051a 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoRegeocodeAddress.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoRegeocodeAddress.java @@ -228,4 +228,27 @@ public class MogoRegeocodeAddress implements Parcelable { return new MogoRegeocodeAddress[size]; } }; + + @Override + public String toString() { + return "MogoRegeocodeAddress{" + + "formatAddress='" + formatAddress + '\'' + + ", province='" + province + '\'' + + ", city='" + city + '\'' + + ", cityCode='" + cityCode + '\'' + + ", adCode='" + adCode + '\'' + + ", district='" + district + '\'' + + ", township='" + township + '\'' + + ", neighborhood='" + neighborhood + '\'' + + ", building='" + building + '\'' + + ", streetNumber=" + streetNumber + + ", roads=" + roads + + ", pois=" + pois + + ", crossroads=" + crossroads + + ", businessAreas=" + businessAreas + + ", aois=" + aois + + ", towncode='" + towncode + '\'' + + ", country='" + country + '\'' + + '}'; + } } diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoRegeocodeResult.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoRegeocodeResult.java index d5f83828b4..1c2bcca713 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoRegeocodeResult.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoRegeocodeResult.java @@ -50,4 +50,11 @@ public class MogoRegeocodeResult implements Parcelable { return new MogoRegeocodeResult[size]; } }; + + @Override + public String toString() { + return "MogoRegeocodeResult{" + + "regeocodeAddress=" + regeocodeAddress + + '}'; + } } diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoRegeocodeRoad.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoRegeocodeRoad.java index 6ec6a29d0b..59b32cbcf2 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoRegeocodeRoad.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoRegeocodeRoad.java @@ -95,4 +95,15 @@ public class MogoRegeocodeRoad implements Parcelable { return new MogoRegeocodeRoad[size]; } }; + + @Override + public String toString() { + return "MogoRegeocodeRoad{" + + "id='" + id + '\'' + + ", name='" + name + '\'' + + ", distance=" + distance + + ", direction='" + direction + '\'' + + ", point=" + point + + '}'; + } } diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoStreetNumber.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoStreetNumber.java index 1d3f953c7c..c026129e36 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoStreetNumber.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoStreetNumber.java @@ -95,4 +95,15 @@ public class MogoStreetNumber implements Parcelable { return new MogoStreetNumber[size]; } }; + + @Override + public String toString() { + return "MogoStreetNumber{" + + "street='" + street + '\'' + + ", number='" + number + '\'' + + ", latLonPoint=" + latLonPoint + + ", direction='" + direction + '\'' + + ", distance=" + distance + + '}'; + } } diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoSubPoiItem.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoSubPoiItem.java index b3796963d6..b43ff95317 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoSubPoiItem.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/geo/MogoSubPoiItem.java @@ -118,4 +118,17 @@ public class MogoSubPoiItem implements Parcelable { return new MogoSubPoiItem[size]; } }; + + @Override + public String toString() { + return "MogoSubPoiItem{" + + "poiId='" + poiId + '\'' + + ", title='" + title + '\'' + + ", subName='" + subName + '\'' + + ", distance=" + distance + + ", point=" + point + + ", snippet='" + snippet + '\'' + + ", subTypeDes='" + subTypeDes + '\'' + + '}'; + } } From d082ccf28514e25cb953b894e8e53f4b8758bfec Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Fri, 15 May 2020 11:16:18 +0800 Subject: [PATCH 07/31] opt --- .idea/misc.xml | 2 +- gradle.properties | 47 ++++++++++--------- .../impl/network/MogoNetWorkService.java | 2 - 3 files changed, 25 insertions(+), 26 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index 707ee6e613..2dc54c489f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index ad6b79f528..4c551048f3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -27,29 +27,29 @@ PASSWORD=xintai2018 RELEASE=false # 模块版本 ## 工程内模块 -MOGO_COMMONS_VERSION=1.0.3.12 -MOGO_UTILS_VERSION=1.0.3.12 -MAP_AMAP_VERSION=1.0.3.12 -MOGO_MAP_VERSION=1.0.3.12 -MOGO_MAP_API_VERSION=1.0.3.12 -MOGO_SERVICE_VERSION=1.0.3.12 -MOGO_SERVICE_API_VERSION=1.0.3.12 -MOGO_CONNECTION_VERSION=1.0.3.12 -MOGO_MODULE_APPS_VERSION=1.0.3.12 -MOGO_MODULE_NAVI_VERSION=1.0.3.12 -MOGO_MODULE_SHARE_VERSION=1.0.3.12 -MOGO_MODULE_COMMON_VERSION=1.0.3.12 -MOGO_MODULE_MAIN_VERSION=1.0.3.12 -MOGO_MODULE_MAP_VERSION=1.0.3.12 -MOGO_MODULE_SERVICE_VERSION=1.0.3.12 -MOGO_MODULE_EXTENSIONS_VERSION=1.0.3.12 -MOGO_MODULE_SEARCH_VERSION=1.0.3.12 -MOGO_MODULE_BACK_VERSION=1.0.3.12 -MOGO_MODULE_GPS_SIMULATOR_VERSION=1.0.3.12 -MOGO_MODULE_GPS_SIMULATOR_DEBUG_VERSION=1.0.3.12 -MOGO_MODULE_GPS_SIMULATOR_NOOP_VERSION=1.0.3.12 -MOGO_MODULE_AUTHORIZE_VERSION=1.0.3.12 -MOGO_MODULE_GUIDE_VERSION=1.0.3.12 +MOGO_COMMONS_VERSION=1.1.0.1 +MOGO_UTILS_VERSION=1.1.0.1 +MAP_AMAP_VERSION=1.1.0.1 +MOGO_MAP_VERSION=1.1.0.1 +MOGO_MAP_API_VERSION=1.1.0.1 +MOGO_SERVICE_VERSION=1.1.0.1 +MOGO_SERVICE_API_VERSION=1.1.0.1 +MOGO_CONNECTION_VERSION=1.1.0.1 +MOGO_MODULE_APPS_VERSION=1.1.0.1 +MOGO_MODULE_NAVI_VERSION=1.1.0.1 +MOGO_MODULE_SHARE_VERSION=1.1.0.1 +MOGO_MODULE_COMMON_VERSION=1.1.0.1 +MOGO_MODULE_MAIN_VERSION=1.1.0.1 +MOGO_MODULE_MAP_VERSION=1.1.0.1 +MOGO_MODULE_SERVICE_VERSION=1.1.0.1 +MOGO_MODULE_EXTENSIONS_VERSION=1.1.0.1 +MOGO_MODULE_SEARCH_VERSION=1.1.0.1 +MOGO_MODULE_BACK_VERSION=1.1.0.1 +MOGO_MODULE_GPS_SIMULATOR_VERSION=1.1.0.1 +MOGO_MODULE_GPS_SIMULATOR_DEBUG_VERSION=1.1.0.1 +MOGO_MODULE_GPS_SIMULATOR_NOOP_VERSION=1.1.0.1 +MOGO_MODULE_AUTHORIZE_VERSION=1.1.0.1 +MOGO_MODULE_GUIDE_VERSION=1.1.0.1 ## 工程外部模块 @@ -73,5 +73,6 @@ MOGO_MODULE_MEDIA_VERSION=1.0.4.3 MOGO_MODULE_PUSH_VERSION=1.0.1 # 广告资源位 MOGO_MODULE_AD_CARD_VERSION=1.0.1 + # 新鲜事 MOGO_MODULE_FRESH_NEWS_VERSION=1.0.3.4 diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/network/MogoNetWorkService.java b/services/mogo-service/src/main/java/com/mogo/service/impl/network/MogoNetWorkService.java index 9c6942f7a7..eda4617702 100644 --- a/services/mogo-service/src/main/java/com/mogo/service/impl/network/MogoNetWorkService.java +++ b/services/mogo-service/src/main/java/com/mogo/service/impl/network/MogoNetWorkService.java @@ -3,7 +3,6 @@ package com.mogo.service.impl.network; import android.content.Context; import com.alibaba.android.arouter.facade.annotation.Route; -import com.mogo.map.MogoInitor; import com.mogo.service.MogoServicePaths; import com.mogo.service.network.IMogoNetwork; import com.mogo.utils.network.RetrofitFactory; @@ -19,7 +18,6 @@ public class MogoNetWorkService implements IMogoNetwork { @Override public void init(Context context) { - MogoInitor.init(context); } @Override From 7d2506e33fd783227fd486603af440c8685b7637 Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Fri, 15 May 2020 11:23:49 +0800 Subject: [PATCH 08/31] rm fresh thing module --- app/build.gradle | 3 --- app/src/main/java/com/mogo/launcher/MogoApplication.java | 4 ---- config.gradle | 1 - gradle.properties | 5 +---- 4 files changed, 1 insertion(+), 12 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 515a43bb57..9172cdd059 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -153,9 +153,6 @@ dependencies { implementation rootProject.ext.dependencies.guideshowprovider implementation rootProject.ext.dependencies.guideshow implementation rootProject.ext.dependencies.modulemedia - implementation rootProject.ext.dependencies.modulefreshnews, { - exclude group: 'com.mogo.module', module: 'module-onlinecar' - } implementation rootProject.ext.dependencies.modulepush, { exclude group: 'com.mogo.module', module: 'module-common' diff --git a/app/src/main/java/com/mogo/launcher/MogoApplication.java b/app/src/main/java/com/mogo/launcher/MogoApplication.java index 6ade51c351..3b339d9a2d 100644 --- a/app/src/main/java/com/mogo/launcher/MogoApplication.java +++ b/app/src/main/java/com/mogo/launcher/MogoApplication.java @@ -9,7 +9,6 @@ import com.alibaba.android.arouter.launcher.ARouter; import com.auto.zhidao.logsdk.CrashSystem; import com.mogo.commons.AbsMogoApplication; import com.mogo.commons.debug.DebugConfig; -import com.mogo.launcher.news.FreshNewsConstants; import com.mogo.module.adcard.AdCardConstants; import com.mogo.module.back.BackToLauncherConst; import com.mogo.module.carchatting.card.CallChatConstant; @@ -27,8 +26,6 @@ import com.mogo.utils.logger.Logger; import static com.mogo.module.authorize.authprovider.invoke.AuthorizeConstant.PATH_AGREEMENT_FRAGMENT; import static com.mogo.module.authorize.authprovider.invoke.AuthorizeConstant.PATH_AGREEMENT_MODULE_NAME; -import static com.mogo.module.guide.GuideConstant.PATH_GUIDE_FRAGMENT; -import static com.mogo.module.guide.GuideConstant.PATH_GUIDE_MODULE_NAME; /** * @author congtaowang @@ -60,7 +57,6 @@ public class MogoApplication extends AbsMogoApplication { MogoModulePaths.addModule(new MogoModule(CallChatConstant.PROVIDER, CallChatConstant.MODULE_NAME)); MogoModulePaths.addModule(new MogoModule(TanluConstants.TAG, TanluConstants.MODEL_NAME)); MogoModulePaths.addModule(new MogoModule(OnLineCarConstants.TAG, OnLineCarConstants.MODULE_NAME)); - MogoModulePaths.addModule(new MogoModule(FreshNewsConstants.TAG, FreshNewsConstants.MODULE_NAME)); MogoModulePaths.addModule(new MogoModule(V2XConst.PATH_V2X_UI, V2XConst.PATH_V2X_UI)); MogoModulePaths.addModule(new MogoModule(PushUIConstants.TAG, PushUIConstants.TAG)); diff --git a/config.gradle b/config.gradle index 1b33af44ee..60aa4d1cf8 100644 --- a/config.gradle +++ b/config.gradle @@ -109,7 +109,6 @@ ext { modulepush : "com.mogo.module:module-push:${MOGO_MODULE_PUSH_VERSION}", //运营位卡片 moduleadcard : "com.mogo.module:module-adcard:${MOGO_MODULE_AD_CARD_VERSION}", - modulefreshnews : "com.mogo.module:module-freshnews:${MOGO_MODULE_FRESH_NEWS_VERSION}", //统一返回键 mogomoduleback : "com.mogo.module:module-back:${MOGO_MODULE_BACK_VERSION}", mogomoduleauth : "com.mogo.module:module-authorize:${MOGO_MODULE_AUTHORIZE_VERSION}", diff --git a/gradle.properties b/gradle.properties index 4c551048f3..a4ddce33ff 100644 --- a/gradle.properties +++ b/gradle.properties @@ -72,7 +72,4 @@ MOGO_MODULE_MEDIA_VERSION=1.0.4.3 # 推送 MOGO_MODULE_PUSH_VERSION=1.0.1 # 广告资源位 -MOGO_MODULE_AD_CARD_VERSION=1.0.1 - -# 新鲜事 -MOGO_MODULE_FRESH_NEWS_VERSION=1.0.3.4 +MOGO_MODULE_AD_CARD_VERSION=1.0.1 \ No newline at end of file From 696491509cd769d73d5076f42ce77497a54a9f12 Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Fri, 15 May 2020 11:24:38 +0800 Subject: [PATCH 09/31] opt tanlu version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index a4ddce33ff..bf7b67a9c8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -54,7 +54,7 @@ MOGO_MODULE_GUIDE_VERSION=1.1.0.1 ## 工程外部模块 # 探路 -MOGO_MODULE_TANLU_VERSION=1.0.5.6 +MOGO_MODULE_TANLU_VERSION=1.0.6-SNAPSHOT # 车聊聊 CARCHATTING_VERSION=1.0.4-SNAPSHOT # 车聊聊接口 From 8d7e09f81d0225169efcc1f2870a572428915c2d Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Fri, 15 May 2020 17:00:47 +0800 Subject: [PATCH 10/31] add window manager dialog --- .../module/apps/applaunch/AppLauncher.java | 4 +- .../mogo/module/apps/utils/LaunchUtils.java | 8 +- modules/mogo-module-common/build.gradle | 2 +- .../mogo/module/common/dialog/WMDialog.java | 198 +++++ .../discretescrollview/DSVOrientation.java | 220 ----- .../discretescrollview/Direction.java | 38 - .../DiscreteScrollLayoutManager.java | 836 ------------------ .../DiscreteScrollView.java | 302 ------- .../InfiniteScrollAdapter.java | 179 ---- .../discretescrollview/RecyclerViewProxy.java | 107 --- .../DiscreteScrollItemTransformer.java | 12 - .../discretescrollview/transform/Pivot.java | 116 --- .../transform/ScaleTransformer.java | 85 -- .../util/ScrollListenerAdapter.java | 45 - ...ddule_commons_shape_react_blue_grident.xml | 14 + ...odule_commons_shape_react_gray_grident.xml | 11 + .../module_commons_shape_round_gray.xml | 7 + .../module_commons_layout_wm_dialog.xml | 54 ++ .../src/main/res/values/strings.xml | 5 +- .../extensions/entrance/EntranceFragment.java | 19 +- .../com/mogo/module/main/MainActivity.java | 2 +- .../com/mogo/module/main/SchemeIntent.java | 2 +- .../com/mogo/module/map/MapPresenter.java | 11 +- .../navi/manager/MogoAddressManager.java | 25 +- .../navi/manager/MogoSearchManager.java | 45 +- .../service/intent/MockIntentHandler.java | 46 +- .../com/mogo/service/IMogoServiceApis.java | 2 + .../com/mogo/service/map/IMogoMapService.java | 1 + .../service/module/IMogoAddressManager.java | 11 +- .../service/module/IMogoSearchManager.java | 33 +- 30 files changed, 455 insertions(+), 1985 deletions(-) create mode 100644 modules/mogo-module-common/src/main/java/com/mogo/module/common/dialog/WMDialog.java delete mode 100644 modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/DSVOrientation.java delete mode 100644 modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/Direction.java delete mode 100644 modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/DiscreteScrollLayoutManager.java delete mode 100644 modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/DiscreteScrollView.java delete mode 100644 modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/InfiniteScrollAdapter.java delete mode 100644 modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/RecyclerViewProxy.java delete mode 100644 modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/transform/DiscreteScrollItemTransformer.java delete mode 100644 modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/transform/Pivot.java delete mode 100644 modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/transform/ScaleTransformer.java delete mode 100644 modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/util/ScrollListenerAdapter.java create mode 100644 modules/mogo-module-common/src/main/res/drawable/moddule_commons_shape_react_blue_grident.xml create mode 100644 modules/mogo-module-common/src/main/res/drawable/module_commons_shape_react_gray_grident.xml create mode 100644 modules/mogo-module-common/src/main/res/drawable/module_commons_shape_round_gray.xml create mode 100644 modules/mogo-module-common/src/main/res/layout/module_commons_layout_wm_dialog.xml diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/AppLauncher.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/AppLauncher.java index fe9e34b244..83ed40c2d8 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/AppLauncher.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/AppLauncher.java @@ -22,7 +22,9 @@ public class AppLauncher extends BaseAppLauncher { @Override public void launch( Context context, AppInfo appInfo ) { try { - AppServiceHandler.getApis().getAdasControllerApi().closeADAS(); + if ( LaunchUtils.getLaunchIntentForPackage( context, appInfo.getPackageName() ) != null ) { + AppServiceHandler.getApis().getAdasControllerApi().closeADAS(); + } LaunchUtils.launchByPkg( context, appInfo.getPackageName() ); } catch ( Exception e ) { Logger.e( TAG, e, "error." ); diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/utils/LaunchUtils.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/utils/LaunchUtils.java index b328070501..1e704842d2 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/utils/LaunchUtils.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/utils/LaunchUtils.java @@ -20,9 +20,13 @@ public class LaunchUtils { * @param context * @param pkg 包名 */ - public static void launchByPkg( Context context, String pkg ) throws Exception{ - Intent intent = context.getPackageManager().getLaunchIntentForPackage( pkg ); + public static void launchByPkg( Context context, String pkg ) throws Exception { + Intent intent = getLaunchIntentForPackage( context, pkg ); intent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK ); context.startActivity( intent ); } + + public static Intent getLaunchIntentForPackage( Context context, String pkg ) { + return context.getPackageManager().getLaunchIntentForPackage( pkg ); + } } diff --git a/modules/mogo-module-common/build.gradle b/modules/mogo-module-common/build.gradle index 6b8c0ae9c3..c3f39b9c50 100644 --- a/modules/mogo-module-common/build.gradle +++ b/modules/mogo-module-common/build.gradle @@ -31,7 +31,7 @@ dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation rootProject.ext.dependencies.androidxappcompat implementation rootProject.ext.dependencies.androidxrecyclerview - + implementation rootProject.ext.dependencies.androidxconstraintlayout if (Boolean.valueOf(RELEASE)) { api rootProject.ext.dependencies.mogomap api rootProject.ext.dependencies.mogomapapi diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/dialog/WMDialog.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/dialog/WMDialog.java new file mode 100644 index 0000000000..097330f871 --- /dev/null +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/dialog/WMDialog.java @@ -0,0 +1,198 @@ +package com.mogo.module.common.dialog; + +import android.content.Context; +import android.content.DialogInterface; +import android.graphics.PixelFormat; +import android.os.Build; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.WindowManager; +import android.widget.TextView; + +import androidx.annotation.StringRes; + +import com.mogo.module.common.R; +import com.mogo.module.common.utils.CarSeries; +import com.mogo.utils.WindowUtils; + +/** + * @author congtaowang + * @since 2020-04-24 + *

+ * 显示在最上层的对话框 + */ +public class WMDialog implements DialogInterface { + + private WMDialogParams mParams; + private WindowManager mWindowManager; + private boolean mIsShowing = false; + private View mContentView; + private WindowManager.LayoutParams mLayoutParams; + + private WMDialog( WMDialogParams params ) { + this.mParams = params; + } + + public void show() { + if ( mIsShowing ) { + return; + } + mIsShowing = true; + if ( mWindowManager == null ) { + mWindowManager = ( WindowManager ) mParams.mContext.getApplicationContext().getSystemService( Context.WINDOW_SERVICE ); + } + if ( mContentView == null ) { + mLayoutParams = new WindowManager.LayoutParams(); + if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ) { + mLayoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; + } else { + mLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT; + } + mLayoutParams.format = PixelFormat.TRANSLUCENT; + mLayoutParams.gravity = Gravity.CENTER; + mLayoutParams.flags = WindowManager.LayoutParams.FLAG_DIM_BEHIND | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH; + + if ( CarSeries.getSeries() == CarSeries.CAR_SERIES_F80X ) { + mLayoutParams.width = 1920; + mLayoutParams.height = 1080; + } else { + mLayoutParams.width = WindowUtils.getScreenWidth( mParams.mContext ); + mLayoutParams.height = WindowUtils.getScreenHeight( mParams.mContext ); + } + mLayoutParams.dimAmount = 0.5f; + mLayoutParams.x = 0; + mLayoutParams.y = 0; + mContentView = initViews(); + } + mWindowManager.addView( mContentView, mLayoutParams ); + } + + private View initViews() { + View contentView = LayoutInflater.from( mParams.mContext ).inflate( R.layout.module_commons_layout_wm_dialog, null ); + TextView ok = contentView.findViewById( R.id.module_commons_wm_dialog_button_ok ); + TextView cancel = contentView.findViewById( R.id.module_commons_wm_dialog_button_cancel ); + TextView content = contentView.findViewById( R.id.module_commons_wm_dialog_content ); + + ok.setText( mParams.mOkButtonText ); + if ( mParams.mOnOkButtonClickListener != null ) { + ok.setOnClickListener( view -> { + if ( mParams.mOnOkButtonClickListener != null ) { + mParams.mOnOkButtonClickListener.onClick( WMDialog.this, DialogInterface.BUTTON_POSITIVE ); + } + } ); + } + cancel.setText( mParams.mCancelButtonText ); + if ( mParams.mOnCancelButtonClickListener != null ) { + cancel.setOnClickListener( view -> { + if ( mParams.mOnCancelButtonClickListener != null ) { + mParams.mOnCancelButtonClickListener.onClick( WMDialog.this, DialogInterface.BUTTON_NEGATIVE ); + } + } ); + } + + content.setText( mParams.mContent ); + return contentView; + } + + @Override + public void cancel() { + dismiss(); + } + + @Override + public void dismiss() { + if ( !mIsShowing ) { + return; + } + if ( mContentView != null ) { + mWindowManager.removeViewImmediate( mContentView ); + } + if ( mParams.mOnDialogDismissListener != null ) { + mParams.mOnDialogDismissListener.onDismiss( this ); + } + mIsShowing = false; + } + + public boolean isShowing() { + return mIsShowing; + } + + public static class Builder { + + private Context mContext; + private WMDialogParams mParams; + + public Builder( Context context ) { + this.mContext = context; + mParams = new WMDialogParams(); + mParams.mContext = context; + } + +// public Builder setTitle( CharSequence title ) { +// mParams.mTitle = title; +// return this; +// } +// +// public Builder setTitle( @StringRes int title ) { +// mParams.mTitle = mContext.getString( title ); +// return this; +// } + + public Builder setContent( CharSequence content ) { + mParams.mContent = content; + return this; + } + + public Builder setContent( @StringRes int content ) { + mParams.mContent = mContext.getString( content ); + return this; + } + + public Builder setOkButton( CharSequence buttonText, OnClickListener listener ) { + mParams.mOkButtonText = buttonText; + mParams.mOnOkButtonClickListener = listener; + return this; + } + + public Builder setOkButton( @StringRes int buttonText, OnClickListener listener ) { + mParams.mOkButtonText = mContext.getText( buttonText ); + mParams.mOnOkButtonClickListener = listener; + return this; + } + + public Builder setCancelButton( CharSequence buttonText, OnClickListener listener ) { + mParams.mCancelButtonText = buttonText; + mParams.mOnCancelButtonClickListener = listener; + return this; + } + + public Builder setCancelButton( @StringRes int buttonText, OnClickListener listener ) { + mParams.mCancelButtonText = mContext.getText( buttonText ); + mParams.mOnCancelButtonClickListener = listener; + return this; + } + + public Builder setOnDialogDismissListener( OnDismissListener onDialogDismissListener ) { + mParams.mOnDialogDismissListener = onDialogDismissListener; + return this; + } + + public WMDialog build() { + WMDialog dialog = new WMDialog( mParams ); + return dialog; + } + } + + public static class WMDialogParams { + + // public CharSequence mTitle; + public CharSequence mOkButtonText; + public CharSequence mCancelButtonText; + public CharSequence mContent; + public OnClickListener mOnOkButtonClickListener; + public OnClickListener mOnCancelButtonClickListener; + public OnDismissListener mOnDialogDismissListener; + public Context mContext; + } +} diff --git a/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/DSVOrientation.java b/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/DSVOrientation.java deleted file mode 100644 index ce167a9870..0000000000 --- a/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/DSVOrientation.java +++ /dev/null @@ -1,220 +0,0 @@ -package com.yarolegovich.discretescrollview; - -import android.graphics.Point; -import android.view.View; - -/** - * Created by yarolegovich on 16.03.2017. - */ -public enum DSVOrientation { - - HORIZONTAL { - @Override - Helper createHelper() { - return new HorizontalHelper(); - } - }, - VERTICAL { - @Override - Helper createHelper() { - return new VerticalHelper(); - } - }; - - //Package private - abstract Helper createHelper(); - - interface Helper { - - int getViewEnd(int recyclerWidth, int recyclerHeight); - - int getDistanceToChangeCurrent(int childWidth, int childHeight); - - void setCurrentViewCenter(Point recyclerCenter, int scrolled, Point outPoint); - - void shiftViewCenter(Direction direction, int shiftAmount, Point outCenter); - - int getFlingVelocity(int velocityX, int velocityY); - - int getPendingDx(int pendingScroll); - - int getPendingDy(int pendingScroll); - - void offsetChildren(int amount, RecyclerViewProxy lm); - - float getDistanceFromCenter(Point center, int viewCenterX, int viewCenterY); - - boolean isViewVisible(Point center, int halfWidth, int halfHeight, int endBound, - int extraSpace); - - boolean hasNewBecomeVisible(DiscreteScrollLayoutManager lm); - - boolean canScrollVertically(); - - boolean canScrollHorizontally(); - } - - protected static class HorizontalHelper implements Helper { - - @Override - public int getViewEnd(int recyclerWidth, int recyclerHeight) { - return recyclerWidth; - } - - @Override - public int getDistanceToChangeCurrent(int childWidth, int childHeight) { - return childWidth; - } - - @Override - public void setCurrentViewCenter(Point recyclerCenter, int scrolled, Point outPoint) { - int newX = recyclerCenter.x - scrolled; - outPoint.set(newX, recyclerCenter.y); - } - - @Override - public void shiftViewCenter(Direction direction, int shiftAmount, Point outCenter) { - int newX = outCenter.x + direction.applyTo(shiftAmount); - outCenter.set(newX, outCenter.y); - } - - @Override - public boolean isViewVisible( - Point viewCenter, int halfWidth, int halfHeight, int endBound, - int extraSpace) { - int viewLeft = viewCenter.x - halfWidth; - int viewRight = viewCenter.x + halfWidth; - return viewLeft < (endBound + extraSpace) && viewRight > -extraSpace; - } - - @Override - public boolean hasNewBecomeVisible(DiscreteScrollLayoutManager lm) { - View firstChild = lm.getFirstChild(), lastChild = lm.getLastChild(); - int leftBound = -lm.getExtraLayoutSpace(); - int rightBound = lm.getWidth() + lm.getExtraLayoutSpace(); - boolean isNewVisibleFromLeft = lm.getDecoratedLeft(firstChild) > leftBound - && lm.getPosition(firstChild) > 0; - boolean isNewVisibleFromRight = lm.getDecoratedRight(lastChild) < rightBound - && lm.getPosition(lastChild) < lm.getItemCount() - 1; - return isNewVisibleFromLeft || isNewVisibleFromRight; - } - - @Override - public void offsetChildren(int amount, RecyclerViewProxy helper) { - helper.offsetChildrenHorizontal(amount); - } - - @Override - public float getDistanceFromCenter(Point center, int viewCenterX, int viewCenterY) { - return viewCenterX - center.x; - } - - @Override - public int getFlingVelocity(int velocityX, int velocityY) { - return velocityX; - } - - @Override - public boolean canScrollHorizontally() { - return true; - } - - @Override - public boolean canScrollVertically() { - return false; - } - - @Override - public int getPendingDx(int pendingScroll) { - return pendingScroll; - } - - @Override - public int getPendingDy(int pendingScroll) { - return 0; - } - } - - - protected static class VerticalHelper implements Helper { - - @Override - public int getViewEnd(int recyclerWidth, int recyclerHeight) { - return recyclerHeight; - } - - @Override - public int getDistanceToChangeCurrent(int childWidth, int childHeight) { - return childHeight; - } - - @Override - public void setCurrentViewCenter(Point recyclerCenter, int scrolled, Point outPoint) { - int newY = recyclerCenter.y - scrolled; - outPoint.set(recyclerCenter.x, newY); - } - - @Override - public void shiftViewCenter(Direction direction, int shiftAmount, Point outCenter) { - int newY = outCenter.y + direction.applyTo(shiftAmount); - outCenter.set(outCenter.x, newY); - } - - @Override - public void offsetChildren(int amount, RecyclerViewProxy helper) { - helper.offsetChildrenVertical(amount); - } - - @Override - public float getDistanceFromCenter(Point center, int viewCenterX, int viewCenterY) { - return viewCenterY - center.y; - } - - @Override - public boolean isViewVisible( - Point viewCenter, int halfWidth, int halfHeight, int endBound, - int extraSpace) { - int viewTop = viewCenter.y - halfHeight; - int viewBottom = viewCenter.y + halfHeight; - return viewTop < (endBound + extraSpace) && viewBottom > -extraSpace; - } - - @Override - public boolean hasNewBecomeVisible(DiscreteScrollLayoutManager lm) { - View firstChild = lm.getFirstChild(), lastChild = lm.getLastChild(); - int topBound = -lm.getExtraLayoutSpace(); - int bottomBound = lm.getHeight() + lm.getExtraLayoutSpace(); - boolean isNewVisibleFromTop = lm.getDecoratedTop(firstChild) > topBound - && lm.getPosition(firstChild) > 0; - boolean isNewVisibleFromBottom = lm.getDecoratedBottom(lastChild) < bottomBound - && lm.getPosition(lastChild) < lm.getItemCount() - 1; - return isNewVisibleFromTop || isNewVisibleFromBottom; - } - - @Override - public int getFlingVelocity(int velocityX, int velocityY) { - return velocityY; - } - - @Override - public boolean canScrollHorizontally() { - return false; - } - - @Override - public boolean canScrollVertically() { - return true; - } - - @Override - public int getPendingDx(int pendingScroll) { - return 0; - } - - @Override - public int getPendingDy(int pendingScroll) { - return pendingScroll; - } - } - -} diff --git a/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/Direction.java b/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/Direction.java deleted file mode 100644 index e4d1c386ce..0000000000 --- a/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/Direction.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.yarolegovich.discretescrollview; - -/** - * Created by yarolegovich on 16.03.2017. - */ -enum Direction { - - START { - @Override - public int applyTo(int delta) { - return delta * -1; - } - - @Override - public boolean sameAs(int direction) { - return direction < 0; - } - }, - END { - @Override - public int applyTo(int delta) { - return delta; - } - - @Override - public boolean sameAs(int direction) { - return direction > 0; - } - }; - - public abstract int applyTo(int delta); - - public abstract boolean sameAs(int direction); - - public static Direction fromDelta(int delta) { - return delta > 0 ? END : START; - } -} diff --git a/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/DiscreteScrollLayoutManager.java b/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/DiscreteScrollLayoutManager.java deleted file mode 100644 index 777d950bed..0000000000 --- a/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/DiscreteScrollLayoutManager.java +++ /dev/null @@ -1,836 +0,0 @@ -package com.yarolegovich.discretescrollview; - -import android.content.Context; -import android.graphics.Point; -import android.graphics.PointF; -import android.os.Bundle; -import android.os.Parcelable; -import android.util.DisplayMetrics; -import android.util.SparseArray; -import android.view.View; -import android.view.ViewGroup; -import android.view.accessibility.AccessibilityEvent; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.core.view.accessibility.AccessibilityEventCompat; -import androidx.core.view.accessibility.AccessibilityRecordCompat; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.LinearSmoothScroller; -import androidx.recyclerview.widget.RecyclerView; -import com.alibaba.idst.nls.internal.utils.L; -import com.mogo.utils.logger.Logger; -import com.yarolegovich.discretescrollview.transform.DiscreteScrollItemTransformer; - -import java.util.Locale; - -/** - * Created by yarolegovich on 17.02.2017. - */ -public class DiscreteScrollLayoutManager extends LinearLayoutManager { - - static final int NO_POSITION = -1; - - private static final String EXTRA_POSITION = "extra_position"; - private static final int DEFAULT_TIME_FOR_ITEM_SETTLE = 300; - private static final int DEFAULT_FLING_THRESHOLD = 2100; //Decrease to increase sensitivity. - private static final int DEFAULT_TRANSFORM_CLAMP_ITEM_COUNT = 1; - - protected static final float SCROLL_TO_SNAP_TO_ANOTHER_ITEM = 0.6f; - - //This field will take value of all visible view's center points during the fill phase - protected Point viewCenterIterator; - protected Point recyclerCenter; - protected Point currentViewCenter; - protected int childHalfWidth, childHalfHeight; - protected int extraLayoutSpace; - - //Max possible distance a view can travel during one scroll phase - protected int scrollToChangeCurrent; - protected int currentScrollState; - - protected int scrolled; - protected int pendingScroll; - protected int currentPosition; - protected int pendingPosition; - - protected SparseArray detachedCache; - - private DSVOrientation.Helper orientationHelper; - - protected boolean isFirstOrEmptyLayout; - - private Context context; - - private int timeForItemSettle; - private int offscreenItems; - private int transformClampItemCount; - - private boolean dataSetChangeShiftedPosition; - - private int flingThreshold; - private boolean shouldSlideOnFling; - - private int viewWidth, viewHeight; - - private float ratio=0.5F; - - private static final String TAG = "DiscreteScrollLayoutMan"; - @NonNull - private final ScrollStateListener scrollStateListener; - private DiscreteScrollItemTransformer itemTransformer; - - private RecyclerViewProxy recyclerViewProxy; - - public DiscreteScrollLayoutManager( - @NonNull Context c, - @NonNull ScrollStateListener scrollStateListener, - @NonNull DSVOrientation orientation) { - super(c); - this.context = c; - this.timeForItemSettle = DEFAULT_TIME_FOR_ITEM_SETTLE; - this.pendingPosition = NO_POSITION; - this.currentPosition = NO_POSITION; - this.flingThreshold = DEFAULT_FLING_THRESHOLD; - this.shouldSlideOnFling = false; - this.recyclerCenter = new Point(); - this.currentViewCenter = new Point(); - this.viewCenterIterator = new Point(); - this.detachedCache = new SparseArray<>(); - this.scrollStateListener = scrollStateListener; - this.orientationHelper = orientation.createHelper(); - this.recyclerViewProxy = new RecyclerViewProxy(this); - this.transformClampItemCount = DEFAULT_TRANSFORM_CLAMP_ITEM_COUNT; - } - - @Override - public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) { - if (state.getItemCount() == 0) { - recyclerViewProxy.removeAndRecycleAllViews(recycler); - currentPosition = pendingPosition = NO_POSITION; - scrolled = pendingScroll = 0; - return; - } - - ensureValidPosition(state); - - updateRecyclerDimensions(state); - - //onLayoutChildren may be called multiple times and this check is required so that the flag - //won't be cleared until onLayoutCompleted - if (!isFirstOrEmptyLayout) { - isFirstOrEmptyLayout = recyclerViewProxy.getChildCount() == 0; - if (isFirstOrEmptyLayout) { - initChildDimensions(recycler); - } - } - - recyclerViewProxy.detachAndScrapAttachedViews(recycler); - - fill(recycler); - - applyItemTransformToChildren(); - } - - private void ensureValidPosition(RecyclerView.State state) { - if (currentPosition == NO_POSITION || currentPosition >= state.getItemCount()) { - //currentPosition might have been assigned in onRestoreInstanceState() - //which can lead to a crash (position out of bounds) when data set - //is not persisted across rotations - currentPosition = 0; - } - } - - public void setRatio(float ratio) { - this.ratio = ratio; - } - - @Override - public void onLayoutCompleted(RecyclerView.State state) { - if (isFirstOrEmptyLayout) { - scrollStateListener.onCurrentViewFirstLayout(); - isFirstOrEmptyLayout = false; - } else if (dataSetChangeShiftedPosition) { - scrollStateListener.onDataSetChangeChangedPosition(); - dataSetChangeShiftedPosition = false; - } - } - - protected void initChildDimensions(RecyclerView.Recycler recycler) { - View viewToMeasure = recyclerViewProxy.getMeasuredChildForAdapterPosition(0, recycler); - - int childViewWidth = recyclerViewProxy.getMeasuredWidthWithMargin(viewToMeasure); - int childViewHeight = recyclerViewProxy.getMeasuredHeightWithMargin(viewToMeasure); - - childHalfWidth = childViewWidth / 2; - childHalfHeight = childViewHeight / 2; - - scrollToChangeCurrent = orientationHelper.getDistanceToChangeCurrent( - childViewWidth, - childViewHeight); - - extraLayoutSpace = scrollToChangeCurrent * offscreenItems; - - recyclerViewProxy.detachAndScrapView(viewToMeasure, recycler); - } - - protected void updateRecyclerDimensions(RecyclerView.State state) { - boolean dimensionsChanged = !state.isMeasuring() - && (recyclerViewProxy.getWidth() != viewWidth - || recyclerViewProxy.getHeight() != viewHeight); - if (dimensionsChanged) { - viewWidth = recyclerViewProxy.getWidth(); - viewHeight = recyclerViewProxy.getHeight(); - recyclerViewProxy.removeAllViews(); - } - recyclerCenter.set( - (int) (recyclerViewProxy.getWidth() * ratio), - recyclerViewProxy.getHeight() / 2); - } - - protected void fill(RecyclerView.Recycler recycler) { - cacheAndDetachAttachedViews(); - - orientationHelper.setCurrentViewCenter(recyclerCenter, scrolled, currentViewCenter); - - final int endBound = orientationHelper.getViewEnd( - recyclerViewProxy.getWidth(), - recyclerViewProxy.getHeight()); - - //Layout current - if (isViewVisible(currentViewCenter, endBound)) { - layoutView(recycler, currentPosition, currentViewCenter); - } - - //Layout items before the current item - layoutViews(recycler, Direction.START, endBound); - - //Layout items after the current item - layoutViews(recycler, Direction.END, endBound); - - recycleDetachedViewsAndClearCache(recycler); - } - - private void layoutViews(RecyclerView.Recycler recycler, Direction direction, int endBound) { - final int positionStep = direction.applyTo(1); - - //Predictive layout is required when we are doing smooth fast scroll towards pendingPosition - boolean noPredictiveLayoutRequired = pendingPosition == NO_POSITION - || !direction.sameAs(pendingPosition - currentPosition); - - viewCenterIterator.set(currentViewCenter.x, currentViewCenter.y); - for (int pos = currentPosition + positionStep; isInBounds(pos); pos += positionStep) { - if (pos == pendingPosition) { - noPredictiveLayoutRequired = true; - } - orientationHelper.shiftViewCenter(direction, scrollToChangeCurrent, viewCenterIterator); - if (isViewVisible(viewCenterIterator, endBound)) { - layoutView(recycler, pos, viewCenterIterator); - } else if (noPredictiveLayoutRequired) { - break; - } - } - } - - protected void layoutView(RecyclerView.Recycler recycler, int position, Point viewCenter) { - if (position < 0) return; - View v = detachedCache.get(position); - if (v == null) { - v = recyclerViewProxy.getMeasuredChildForAdapterPosition(position, recycler); - recyclerViewProxy.layoutDecoratedWithMargins(v, - viewCenter.x - childHalfWidth, viewCenter.y - childHalfHeight, - viewCenter.x + childHalfWidth, viewCenter.y + childHalfHeight); - } else { - recyclerViewProxy.attachView(v); - detachedCache.remove(position); - } - } - - protected void cacheAndDetachAttachedViews() { - detachedCache.clear(); - for (int i = 0; i < recyclerViewProxy.getChildCount(); i++) { - View child = recyclerViewProxy.getChildAt(i); - detachedCache.put(recyclerViewProxy.getPosition(child), child); - } - - for (int i = 0; i < detachedCache.size(); i++) { - recyclerViewProxy.detachView(detachedCache.valueAt(i)); - } - } - - protected void recycleDetachedViewsAndClearCache(RecyclerView.Recycler recycler) { - for (int i = 0; i < detachedCache.size(); i++) { - View viewToRemove = detachedCache.valueAt(i); - recyclerViewProxy.recycleView(viewToRemove, recycler); - } - detachedCache.clear(); - } - - @Override - public void onItemsAdded(RecyclerView recyclerView, int positionStart, int itemCount) { - int newPosition = currentPosition; - if (currentPosition == NO_POSITION) { - newPosition = 0; - } else if (currentPosition >= positionStart) { - newPosition = Math.min(currentPosition + itemCount, recyclerViewProxy.getItemCount() - 1); - } - onNewPosition(newPosition); - } - - @Override - public void onItemsRemoved(RecyclerView recyclerView, int positionStart, int itemCount) { - int newPosition = currentPosition; - if (recyclerViewProxy.getItemCount() == 0) { - newPosition = NO_POSITION; - } else if (currentPosition >= positionStart) { - if (currentPosition < positionStart + itemCount) { - //If currentPosition is in the removed items, then the new item became current - currentPosition = NO_POSITION; - } - newPosition = Math.max(0, currentPosition - itemCount); - } - onNewPosition(newPosition); - } - - @Override - public void onItemsChanged(RecyclerView recyclerView) { - //notifyDataSetChanged() was called. We need to ensure that currentPosition is not out of bounds - currentPosition = Math.min(Math.max(0, currentPosition), recyclerViewProxy.getItemCount() - 1); - dataSetChangeShiftedPosition = true; - } - - private void onNewPosition(int position) { - if (currentPosition != position) { - currentPosition = position; - dataSetChangeShiftedPosition = true; - } - } - - @Override - public int scrollHorizontallyBy(int dx, RecyclerView.Recycler recycler, RecyclerView.State state) { - return scrollBy(dx, recycler); - } - - @Override - public int scrollVerticallyBy(int dy, RecyclerView.Recycler recycler, RecyclerView.State state) { - return scrollBy(dy, recycler); - } - - protected int scrollBy(int amount, RecyclerView.Recycler recycler) { - if (recyclerViewProxy.getChildCount() == 0) { - return 0; - } - - Direction direction = Direction.fromDelta(amount); - int leftToScroll = calculateAllowedScrollIn(direction); - if (leftToScroll <= 0) { - return 0; - } - int delta = direction.applyTo(Math.min(leftToScroll, Math.abs(amount))); - Logger.d(TAG,"leftToScroll--》"+leftToScroll+"---amount--》"+amount); - - scrolled += delta; - if (pendingScroll != 0) { - pendingScroll -= delta; - } - - orientationHelper.offsetChildren(-delta, recyclerViewProxy); - - if (orientationHelper.hasNewBecomeVisible(this)) { - fill(recycler); - } - - notifyScroll(); - - applyItemTransformToChildren(); - - return delta; - } - - protected void applyItemTransformToChildren() { - if (itemTransformer != null) { - int clampAfterDistance = scrollToChangeCurrent * transformClampItemCount; - for (int i = 0; i < recyclerViewProxy.getChildCount(); i++) { - View child = recyclerViewProxy.getChildAt(i); - - //RecyclerView.ViewHolder childViewHolder = recyclerView.getChildViewHolder(child); - float position = getCenterRelativePositionOf(child, clampAfterDistance); - itemTransformer.transformItem(child,null, position); - } - } - } - - @Override - public void scrollToPosition(int position) { - if (currentPosition == position) { - return; - } - - currentPosition = position; - recyclerViewProxy.requestLayout(); - } - - //@Override - //public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, int position) { - // if (currentPosition == position || pendingPosition != NO_POSITION) { - // return; - // } - // checkTargetPosition(state, position); - // if (currentPosition == NO_POSITION) { - // //Layout not happened yet - // currentPosition = position; - // } else { - // startSmoothPendingScroll(position); - // } - //} - - - @Override - public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, int position) { - LinearSmoothScroller smoothScroller = - new LinearSmoothScroller(recyclerView.getContext()) { - @Override - protected float calculateSpeedPerPixel(DisplayMetrics displayMetrics) { - // 返回:滑过1px时经历的时间(ms)。 - return 10f / displayMetrics.densityDpi; - } - - @Override - public int calculateDtToFit(int viewStart, int viewEnd, int boxStart, int boxEnd, int snapPreference) { - return boxStart - viewStart; - } - }; - - smoothScroller.setTargetPosition(position); - startSmoothScroll(smoothScroller); - } - - @Override - public boolean canScrollHorizontally() { - return orientationHelper.canScrollHorizontally(); - } - - @Override - public boolean canScrollVertically() { - return orientationHelper.canScrollVertically(); - } - - @Override - public void onScrollStateChanged(int state) { - if (currentScrollState == RecyclerView.SCROLL_STATE_IDLE && currentScrollState != state) { - scrollStateListener.onScrollStart(); - } - - if (state == RecyclerView.SCROLL_STATE_IDLE) { - //Scroll is not finished until current view is centered - boolean isScrollEnded = onScrollEnd(); - if (isScrollEnded) { - scrollStateListener.onScrollEnd(); - } else { - //Scroll continues and we don't want to set currentScrollState to STATE_IDLE, - //because this will then trigger .scrollStateListener.onScrollStart() - return; - } - } else if (state == RecyclerView.SCROLL_STATE_DRAGGING) { - onDragStart(); - } - currentScrollState = state; - } - - /** - * @return true if scroll is ended and we don't need to settle items - */ - private boolean onScrollEnd() { - if (pendingPosition != NO_POSITION) { - currentPosition = pendingPosition; - pendingPosition = NO_POSITION; - scrolled = 0; - } - - Direction scrollDirection = Direction.fromDelta(scrolled); - if (Math.abs(scrolled) == scrollToChangeCurrent) { - currentPosition += scrollDirection.applyTo(1); - scrolled = 0; - } - - if (isAnotherItemCloserThanCurrent()) { - pendingScroll = getHowMuchIsLeftToScroll(scrolled); - } else { - pendingScroll = -scrolled; - } - - if (pendingScroll == 0) { - return true; - } else { - startSmoothPendingScroll(); - return false; - } - } - - private void onDragStart() { - //Here we need to: - //1. Stop any pending scroll - //2. Set currentPosition to position of the item that is closest to the center - boolean isScrollingThroughMultiplePositions = Math.abs(scrolled) > scrollToChangeCurrent; - if (isScrollingThroughMultiplePositions) { - int scrolledPositions = scrolled / scrollToChangeCurrent; - currentPosition += scrolledPositions; - scrolled -= scrolledPositions * scrollToChangeCurrent; - } - if (isAnotherItemCloserThanCurrent()) { - Direction direction = Direction.fromDelta(scrolled); - currentPosition += direction.applyTo(1); - scrolled = -getHowMuchIsLeftToScroll(scrolled); - } - pendingPosition = NO_POSITION; - pendingScroll = 0; - } - - public void onFling(int velocityX, int velocityY) { - int velocity = orientationHelper.getFlingVelocity(velocityX, velocityY); - int throttleValue = shouldSlideOnFling ? Math.abs(velocity / flingThreshold) : 1; - int newPosition = currentPosition + Direction.fromDelta(velocity).applyTo(throttleValue); - newPosition = checkNewOnFlingPositionIsInBounds(newPosition); - boolean isInScrollDirection = velocity * scrolled >= 0; - boolean canFling = isInScrollDirection && isInBounds(newPosition); - if (canFling) { - startSmoothPendingScroll(newPosition); - } else { - returnToCurrentPosition(); - } - - Logger.d(TAG,"onFling"+newPosition); - } - - public void returnToCurrentPosition() { - pendingScroll = -scrolled; - if (pendingScroll != 0) { - startSmoothPendingScroll(); - } - } - - protected int calculateAllowedScrollIn(Direction direction) { - if (pendingScroll != 0) { - return Math.abs(pendingScroll); - } - int allowedScroll; - boolean isBoundReached; - boolean isScrollDirectionAsBefore = direction.applyTo(scrolled) > 0; - if (direction == Direction.START && currentPosition == 0) { - //We can scroll to the left when currentPosition == 0 only if we scrolled to the right before - isBoundReached = scrolled == 0; - allowedScroll = isBoundReached ? 0 : Math.abs(scrolled); - } else if (direction == Direction.END && currentPosition == recyclerViewProxy.getItemCount() - 1) { - //We can scroll to the right when currentPosition == last only if we scrolled to the left before - isBoundReached = scrolled == 0; - allowedScroll = isBoundReached ? 0 : Math.abs(scrolled); - } else { - isBoundReached = false; - allowedScroll = isScrollDirectionAsBefore ? - scrollToChangeCurrent - Math.abs(scrolled) : - scrollToChangeCurrent + Math.abs(scrolled); - } - scrollStateListener.onIsBoundReachedFlagChange(isBoundReached); - return allowedScroll; - } - - private void startSmoothPendingScroll() { - LinearSmoothScroller scroller = new DiscreteLinearSmoothScroller(context); - scroller.setTargetPosition(currentPosition); - recyclerViewProxy.startSmoothScroll(scroller); - } - - public void startSmoothPendingScroll(int position) { - if (currentPosition == position) return; - pendingScroll = -scrolled; - Direction direction = Direction.fromDelta(position - currentPosition); - int distanceToScroll = Math.abs(position - currentPosition) * scrollToChangeCurrent; - pendingScroll += direction.applyTo(distanceToScroll); - pendingPosition = position; - startSmoothPendingScroll(); - } - - - - - @Override - public boolean isAutoMeasureEnabled() { - return true; - } - - @Override - public int computeVerticalScrollRange(RecyclerView.State state) { - return computeScrollRange(state); - } - - @Override - public int computeVerticalScrollOffset(RecyclerView.State state) { - return computeScrollOffset(state); - } - - @Override - public int computeVerticalScrollExtent(RecyclerView.State state) { - return computeScrollExtent(state); - } - - @Override - public int computeHorizontalScrollRange(RecyclerView.State state) { - return computeScrollRange(state); - } - - @Override - public int computeHorizontalScrollOffset(RecyclerView.State state) { - return computeScrollOffset(state); - } - - @Override - public int computeHorizontalScrollExtent(RecyclerView.State state) { - return computeScrollExtent(state); - } - - private int computeScrollOffset(RecyclerView.State state) { - int scrollbarSize = computeScrollExtent(state); - int offset = (int) ((scrolled / (float) scrollToChangeCurrent) * scrollbarSize); - return (currentPosition * scrollbarSize) + offset; - } - - private int computeScrollExtent(RecyclerView.State state) { - if (getItemCount() == 0) { - return 0; - } else { - return (int) (computeScrollRange(state) / (float) getItemCount()); - } - } - - private int computeScrollRange(RecyclerView.State state) { - if (getItemCount() == 0) { - return 0; - } else { - return scrollToChangeCurrent * (getItemCount() - 1); - } - } - - @Override - public void onAdapterChanged(RecyclerView.Adapter oldAdapter, RecyclerView.Adapter newAdapter) { - pendingPosition = NO_POSITION; - scrolled = pendingScroll = 0; - if (newAdapter instanceof InitialPositionProvider) { - currentPosition = ((InitialPositionProvider) newAdapter).getInitialPosition(); - } else { - currentPosition = 0; - } - recyclerViewProxy.removeAllViews(); - } - - @Override - public Parcelable onSaveInstanceState() { - Bundle bundle = new Bundle(); - if (pendingPosition != NO_POSITION) { - currentPosition = pendingPosition; - } - bundle.putInt(EXTRA_POSITION, currentPosition); - return bundle; - } - - @Override - public void onRestoreInstanceState(Parcelable state) { - Bundle bundle = (Bundle) state; - currentPosition = bundle.getInt(EXTRA_POSITION); - } - - @Override - public RecyclerView.LayoutParams generateDefaultLayoutParams() { - return new RecyclerView.LayoutParams( - ViewGroup.LayoutParams.WRAP_CONTENT, - ViewGroup.LayoutParams.WRAP_CONTENT); - } - - public int getNextPosition() { - if (scrolled == 0) { - return currentPosition; - } else if (pendingPosition != NO_POSITION) { - return pendingPosition; - } else { - return currentPosition + Direction.fromDelta(scrolled).applyTo(1); - } - } - - public void setItemTransformer(DiscreteScrollItemTransformer itemTransformer) { - this.itemTransformer = itemTransformer; - } - - public void setTimeForItemSettle(int timeForItemSettle) { - this.timeForItemSettle = timeForItemSettle; - } - - public void setOffscreenItems(int offscreenItems) { - this.offscreenItems = offscreenItems; - extraLayoutSpace = scrollToChangeCurrent * offscreenItems; - recyclerViewProxy.requestLayout(); - } - - public void setTransformClampItemCount(int transformClampItemCount) { - this.transformClampItemCount = transformClampItemCount; - applyItemTransformToChildren(); - } - - public void setOrientation(DSVOrientation orientation) { - orientationHelper = orientation.createHelper(); - recyclerViewProxy.removeAllViews(); - recyclerViewProxy.requestLayout(); - } - - public void setShouldSlideOnFling(boolean result) { - shouldSlideOnFling = result; - } - - public void setSlideOnFlingThreshold(int threshold) { - flingThreshold = threshold; - } - - public int getCurrentPosition() { - return currentPosition; - } - - @Override - public void onInitializeAccessibilityEvent(AccessibilityEvent event) { - super.onInitializeAccessibilityEvent(event); - if (recyclerViewProxy.getChildCount() > 0) { - final AccessibilityRecordCompat record = AccessibilityEventCompat.asRecord(event); - record.setFromIndex(getPosition(getFirstChild())); - record.setToIndex(getPosition(getLastChild())); - } - } - - private float getCenterRelativePositionOf(View v, int maxDistance) { - float distanceFromCenter = orientationHelper.getDistanceFromCenter(recyclerCenter, - getDecoratedLeft(v) + childHalfWidth, - getDecoratedTop(v) + childHalfHeight); - return Math.min(Math.max(-1f, distanceFromCenter / maxDistance), 1f); - } - - private int checkNewOnFlingPositionIsInBounds(int position) { - final int itemCount = recyclerViewProxy.getItemCount(); - //The check is required in case slide through multiple items is turned on - if (currentPosition != 0 && position < 0) { - //If currentPosition == 0 && position < 0 we forbid scroll to the left, - //but if currentPosition != 0 we can slide to the first item - return 0; - } else if (currentPosition != itemCount - 1 && position >= itemCount) { - return itemCount - 1; - } - return position; - } - - private int getHowMuchIsLeftToScroll(int dx) { - return Direction.fromDelta(dx).applyTo(scrollToChangeCurrent - Math.abs(scrolled)); - } - - private boolean isAnotherItemCloserThanCurrent() { - return Math.abs(scrolled) >= scrollToChangeCurrent * SCROLL_TO_SNAP_TO_ANOTHER_ITEM; - } - - public View getFirstChild() { - return recyclerViewProxy.getChildAt(0); - } - - public View getLastChild() { - return recyclerViewProxy.getChildAt(recyclerViewProxy.getChildCount() - 1); - } - - public int getExtraLayoutSpace() { - return extraLayoutSpace; - } - - private void notifyScroll() { - float amountToScroll = pendingPosition != NO_POSITION ? - Math.abs(scrolled + pendingScroll) : - scrollToChangeCurrent; - float position = -Math.min(Math.max(-1f, scrolled / amountToScroll), 1f); - scrollStateListener.onScroll(position); - } - - private boolean isInBounds(int itemPosition) { - return itemPosition >= 0 && itemPosition < recyclerViewProxy.getItemCount(); - } - - private boolean isViewVisible(Point viewCenter, int endBound) { - return orientationHelper.isViewVisible( - viewCenter, childHalfWidth, childHalfHeight, - endBound, extraLayoutSpace); - } - - - public void setPendingScroll(int pendingScroll){ - this.pendingScroll=pendingScroll; - } - - private void checkTargetPosition(RecyclerView.State state, int targetPosition) { - if (targetPosition < 0 || targetPosition >= state.getItemCount()) { - throw new IllegalArgumentException(String.format(Locale.US, - "target position out of bounds: position=%d, itemCount=%d", - targetPosition, state.getItemCount())); - } - } - - protected void setRecyclerViewProxy(RecyclerViewProxy recyclerViewProxy) { - this.recyclerViewProxy = recyclerViewProxy; - } - - protected void setOrientationHelper(DSVOrientation.Helper orientationHelper) { - this.orientationHelper = orientationHelper; - } - - private class DiscreteLinearSmoothScroller extends LinearSmoothScroller { - - public DiscreteLinearSmoothScroller(Context context) { - super(context); - } - - @Override - public int calculateDxToMakeVisible(View view, int snapPreference) { - return orientationHelper.getPendingDx(-pendingScroll); - } - - @Override - public int calculateDyToMakeVisible(View view, int snapPreference) { - return orientationHelper.getPendingDy(-pendingScroll); - } - - @Override - protected int calculateTimeForScrolling(int dx) { - float dist = Math.min(Math.abs(dx), scrollToChangeCurrent); - return (int) (Math.max(0.01f, dist / scrollToChangeCurrent) * timeForItemSettle); - } - - @Nullable - @Override - public PointF computeScrollVectorForPosition(int targetPosition) { - return new PointF( - orientationHelper.getPendingDx(pendingScroll), - orientationHelper.getPendingDy(pendingScroll)); - } - - @Override protected float calculateSpeedPerPixel(DisplayMetrics displayMetrics) { - return 10f / displayMetrics.densityDpi; - } - } - - public interface ScrollStateListener { - void onIsBoundReachedFlagChange(boolean isBoundReached); - - void onScrollStart(); - - void onScrollEnd(); - - void onScroll(float currentViewPosition); - - void onCurrentViewFirstLayout(); - - void onDataSetChangeChangedPosition(); - } - - public interface InitialPositionProvider { - int getInitialPosition(); - } -} diff --git a/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/DiscreteScrollView.java b/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/DiscreteScrollView.java deleted file mode 100644 index bf37a87cd7..0000000000 --- a/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/DiscreteScrollView.java +++ /dev/null @@ -1,302 +0,0 @@ -package com.yarolegovich.discretescrollview; - -import android.content.Context; -import android.content.res.TypedArray; -import android.util.AttributeSet; -import android.view.View; - -import androidx.annotation.IntRange; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.recyclerview.widget.RecyclerView; -import com.mogo.module.common.R; -import com.yarolegovich.discretescrollview.transform.DiscreteScrollItemTransformer; -import com.yarolegovich.discretescrollview.util.ScrollListenerAdapter; - -import java.util.ArrayList; -import java.util.List; - -/** - * Created by yarolegovich on 18.02.2017. - */ -@SuppressWarnings("unchecked") -public class DiscreteScrollView extends RecyclerView { - - public static final int NO_POSITION = DiscreteScrollLayoutManager.NO_POSITION; - - private static final int DEFAULT_ORIENTATION = DSVOrientation.HORIZONTAL.ordinal(); - - private DiscreteScrollLayoutManager layoutManager; - - private List scrollStateChangeListeners; - private List onItemChangedListeners; - - private boolean isOverScrollEnabled; - - public DiscreteScrollView(Context context) { - super(context); - init(null); - } - - public DiscreteScrollView(Context context, AttributeSet attrs) { - super(context, attrs); - init(attrs); - } - - public DiscreteScrollView(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - init(attrs); - } - - private void init(AttributeSet attrs) { - scrollStateChangeListeners = new ArrayList<>(); - onItemChangedListeners = new ArrayList<>(); - - int orientation = DEFAULT_ORIENTATION; - if (attrs != null) { - TypedArray ta = getContext().obtainStyledAttributes(attrs, R.styleable.DiscreteScrollView); - orientation = ta.getInt(R.styleable.DiscreteScrollView_dsv_orientation, DEFAULT_ORIENTATION); - ta.recycle(); - } - - isOverScrollEnabled = getOverScrollMode() != OVER_SCROLL_NEVER; - - layoutManager = new DiscreteScrollLayoutManager( - getContext(), new ScrollStateListener(), - DSVOrientation.values()[orientation]); - setLayoutManager(layoutManager); - } - - public void setRatio(float ratio){ - layoutManager.setRatio(ratio); - } - - @Override - public void setLayoutManager(LayoutManager layout) { - if (layout instanceof DiscreteScrollLayoutManager) { - super.setLayoutManager(layout); - } else { - throw new IllegalArgumentException(getContext().getString(R.string.dsv_ex_msg_dont_set_lm)); - } - } - - - @Override - public boolean fling(int velocityX, int velocityY) { - boolean isFling = super.fling(velocityX, velocityY); - if (isFling) { - layoutManager.onFling(velocityX, velocityY); - } else { - layoutManager.returnToCurrentPosition(); - } - return isFling; - } - - @Nullable - public ViewHolder getViewHolder(int position) { - View view = layoutManager.findViewByPosition(position); - return view != null ? getChildViewHolder(view) : null; - } - - /** - * @return adapter position of the current item or -1 if nothing is selected - */ - public int getCurrentItem() { - return layoutManager.getCurrentPosition(); - } - - public void setItemTransformer(DiscreteScrollItemTransformer transformer) { - layoutManager.setItemTransformer(transformer); - } - - public void setItemTransitionTimeMillis(@IntRange(from = 10) int millis) { - layoutManager.setTimeForItemSettle(millis); - } - - public void setSlideOnFling(boolean result){ - layoutManager.setShouldSlideOnFling(result); - } - - public void setSlideOnFlingThreshold(int threshold){ - layoutManager.setSlideOnFlingThreshold(threshold); - } - - public void setOrientation(DSVOrientation orientation) { - layoutManager.setOrientation(orientation); - } - - public void setOffscreenItems(int items) { - layoutManager.setOffscreenItems(items); - } - - public void setClampTransformProgressAfter(@IntRange(from = 1) int itemCount) { - if (itemCount <= 1) { - throw new IllegalArgumentException("must be >= 1"); - } - layoutManager.setTransformClampItemCount(itemCount); - } - - public void setOverScrollEnabled(boolean overScrollEnabled) { - isOverScrollEnabled = overScrollEnabled; - setOverScrollMode(OVER_SCROLL_NEVER); - } - - public void addScrollStateChangeListener(@NonNull ScrollStateChangeListener scrollStateChangeListener) { - scrollStateChangeListeners.add(scrollStateChangeListener); - } - - public void addScrollListener(@NonNull ScrollListener scrollListener) { - addScrollStateChangeListener(new ScrollListenerAdapter(scrollListener)); - } - - public void addOnItemChangedListener(@NonNull OnItemChangedListener onItemChangedListener) { - onItemChangedListeners.add(onItemChangedListener); - } - - public void removeScrollStateChangeListener(@NonNull ScrollStateChangeListener scrollStateChangeListener) { - scrollStateChangeListeners.remove(scrollStateChangeListener); - } - - public void removeScrollListener(@NonNull ScrollListener scrollListener) { - removeScrollStateChangeListener(new ScrollListenerAdapter<>(scrollListener)); - } - - public void removeItemChangedListener(@NonNull OnItemChangedListener onItemChangedListener) { - onItemChangedListeners.remove(onItemChangedListener); - } - - private void notifyScrollStart(ViewHolder holder, int current) { - for (ScrollStateChangeListener listener : scrollStateChangeListeners) { - listener.onScrollStart(holder, current); - } - } - - private void notifyScrollEnd(ViewHolder holder, int current) { - for (ScrollStateChangeListener listener : scrollStateChangeListeners) { - listener.onScrollEnd(holder, current); - } - } - - private void notifyScroll(float position, - int currentIndex, int newIndex, - ViewHolder currentHolder, ViewHolder newHolder) { - for (ScrollStateChangeListener listener : scrollStateChangeListeners) { - listener.onScroll(position, currentIndex, newIndex, - currentHolder, - newHolder); - } - } - - private void notifyCurrentItemChanged(ViewHolder holder, int current) { - for (OnItemChangedListener listener : onItemChangedListeners) { - listener.onCurrentItemChanged(holder, current); - } - } - - private void notifyCurrentItemChanged() { - if (onItemChangedListeners.isEmpty()) { - return; - } - int current = layoutManager.getCurrentPosition(); - ViewHolder currentHolder = getViewHolder(current); - notifyCurrentItemChanged(currentHolder, current); - } - - public void setPendingScroll(int PendingScroll ) { - layoutManager.setPendingScroll(PendingScroll); - } - - private class ScrollStateListener implements DiscreteScrollLayoutManager.ScrollStateListener { - - @Override - public void onIsBoundReachedFlagChange(boolean isBoundReached) { - if (isOverScrollEnabled) { - setOverScrollMode(isBoundReached ? OVER_SCROLL_ALWAYS : OVER_SCROLL_NEVER); - } - } - - @Override - public void onScrollStart() { - if (scrollStateChangeListeners.isEmpty()) { - return; - } - int current = layoutManager.getCurrentPosition(); - ViewHolder holder = getViewHolder(current); - if (holder != null) { - notifyScrollStart(holder, current); - } - } - - @Override - public void onScrollEnd() { - if (onItemChangedListeners.isEmpty() && scrollStateChangeListeners.isEmpty()) { - return; - } - int current = layoutManager.getCurrentPosition(); - ViewHolder holder = getViewHolder(current); - if (holder != null) { - notifyScrollEnd(holder, current); - notifyCurrentItemChanged(holder, current); - } - } - - @Override - public void onScroll(float currentViewPosition) { - if (scrollStateChangeListeners.isEmpty()) { - return; - } - int currentIndex = getCurrentItem(); - int newIndex = layoutManager.getNextPosition(); - if (currentIndex != newIndex) { - notifyScroll(currentViewPosition, - currentIndex, newIndex, - getViewHolder(currentIndex), - getViewHolder(newIndex)); - } - } - - @Override - public void onCurrentViewFirstLayout() { - post(new Runnable() { - @Override - public void run() { - notifyCurrentItemChanged(); - } - }); - } - - @Override - public void onDataSetChangeChangedPosition() { - notifyCurrentItemChanged(); - } - } - - public interface ScrollStateChangeListener { - - void onScrollStart(@NonNull T currentItemHolder, int adapterPosition); - - void onScrollEnd(@NonNull T currentItemHolder, int adapterPosition); - - void onScroll(float scrollPosition, - int currentPosition, - int newPosition, - @Nullable T currentHolder, - @Nullable T newCurrent); - } - - public interface ScrollListener { - - void onScroll(float scrollPosition, - int currentPosition, int newPosition, - @Nullable T currentHolder, - @Nullable T newCurrent); - } - - public interface OnItemChangedListener { - /* - * This method will be also triggered when view appears on the screen for the first time. - * If data set is empty, viewHolder will be null and adapterPosition will be NO_POSITION - */ - void onCurrentItemChanged(@Nullable T viewHolder, int adapterPosition); - } -} diff --git a/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/InfiniteScrollAdapter.java b/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/InfiniteScrollAdapter.java deleted file mode 100644 index 36fb35c94d..0000000000 --- a/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/InfiniteScrollAdapter.java +++ /dev/null @@ -1,179 +0,0 @@ -package com.yarolegovich.discretescrollview; - -import android.view.ViewGroup; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; -import com.mogo.module.common.R; -import java.util.Locale; - -/** - * Created by yarolegovich on 28-Apr-17. - */ - -public class InfiniteScrollAdapter extends RecyclerView.Adapter - implements DiscreteScrollLayoutManager.InitialPositionProvider { - - private static final int CENTER = Integer.MAX_VALUE / 2; - private static final int RESET_BOUND = 100; - - public static InfiniteScrollAdapter wrap( - @NonNull RecyclerView.Adapter adapter) { - return new InfiniteScrollAdapter<>(adapter); - } - - private RecyclerView.Adapter wrapped; - private DiscreteScrollLayoutManager layoutManager; - - public InfiniteScrollAdapter(@NonNull RecyclerView.Adapter wrapped) { - this.wrapped = wrapped; - this.wrapped.registerAdapterDataObserver(new DataSetChangeDelegate()); - } - - @Override - public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) { - wrapped.onAttachedToRecyclerView(recyclerView); - if (recyclerView instanceof DiscreteScrollView) { - layoutManager = (DiscreteScrollLayoutManager) recyclerView.getLayoutManager(); - } else { - String msg = recyclerView.getContext().getString(R.string.dsv_ex_msg_adapter_wrong_recycler); - throw new RuntimeException(msg); - } - } - - @Override - public void onDetachedFromRecyclerView(@NonNull RecyclerView recyclerView) { - wrapped.onDetachedFromRecyclerView(recyclerView); - layoutManager = null; - } - - @Override - public @NonNull T onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return wrapped.onCreateViewHolder(parent, viewType); - } - - @Override - public void onBindViewHolder(@NonNull T holder, int position) { - if (isResetRequired(position)) { - int resetPosition = CENTER + mapPositionToReal(layoutManager.getCurrentPosition()); - setPosition(resetPosition); - return; - } - wrapped.onBindViewHolder(holder, mapPositionToReal(position)); - } - - @Override - public int getItemViewType(int position) { - return wrapped.getItemViewType(mapPositionToReal(position)); - } - - @Override - public int getItemCount() { - return isInfinite() ? Integer.MAX_VALUE : wrapped.getItemCount(); - } - - public int getRealItemCount() { - return wrapped.getItemCount(); - } - - public int getRealCurrentPosition() { - return getRealPosition(layoutManager.getCurrentPosition()); - } - - public int getRealPosition(int position) { - return mapPositionToReal(position); - } - - public int getClosestPosition(int position) { - ensureValidPosition(position); - int adapterCurrent = layoutManager.getCurrentPosition(); - int current = mapPositionToReal(adapterCurrent); - if (position == current) { - return adapterCurrent; - } - int delta = position - current; - int target = adapterCurrent + delta; - int wraparoundTarget = adapterCurrent + (position > current ? - delta - wrapped.getItemCount() : - wrapped.getItemCount() + delta); - int distance = Math.abs(adapterCurrent - target); - int wraparoundDistance = Math.abs(adapterCurrent - wraparoundTarget); - if (distance == wraparoundDistance) { - //Scroll to the right feels more natural, so prefer it - return target > adapterCurrent ? target : wraparoundTarget; - } else { - return distance < wraparoundDistance ? target : wraparoundTarget; - } - } - - private int mapPositionToReal(int position) { - if (position < CENTER) { - int rem = (CENTER - position) % wrapped.getItemCount(); - return rem == 0 ? 0 : wrapped.getItemCount() - rem; - } else { - return (position - CENTER) % wrapped.getItemCount(); - } - } - - private boolean isResetRequired(int requestedPosition) { - return isInfinite() - && (requestedPosition <= RESET_BOUND - || requestedPosition >= (Integer.MAX_VALUE - RESET_BOUND)); - } - - private void ensureValidPosition(int position) { - if (position >= wrapped.getItemCount()) { - throw new IndexOutOfBoundsException(String.format(Locale.US, - "requested position is outside adapter's bounds: position=%d, size=%d", - position, wrapped.getItemCount())); - } - } - - private boolean isInfinite() { - return wrapped.getItemCount() > 1; - } - - @Override - public int getInitialPosition() { - return isInfinite() ? CENTER : 0; - } - - private void setPosition(int position) { - layoutManager.scrollToPosition(position); - } - - //TODO: handle proper data set change notifications - private class DataSetChangeDelegate extends RecyclerView.AdapterDataObserver { - - @Override - public void onChanged() { - setPosition(getInitialPosition()); - notifyDataSetChanged(); - } - - @Override - public void onItemRangeRemoved(int positionStart, int itemCount) { - onChanged(); - } - - @Override - public void onItemRangeInserted(int positionStart, int itemCount) { - onChanged(); - } - - @Override - public void onItemRangeMoved(int fromPosition, int toPosition, int itemCount) { - onChanged(); - } - - @Override - public void onItemRangeChanged(int positionStart, int itemCount) { - notifyItemRangeChanged(0, getItemCount()); - } - - @Override - public void onItemRangeChanged(int positionStart, int itemCount, Object payload) { - notifyItemRangeChanged(0, getItemCount(), payload); - } - } -} \ No newline at end of file diff --git a/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/RecyclerViewProxy.java b/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/RecyclerViewProxy.java deleted file mode 100644 index cbafbf4f6b..0000000000 --- a/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/RecyclerViewProxy.java +++ /dev/null @@ -1,107 +0,0 @@ -package com.yarolegovich.discretescrollview; - -import android.view.View; -import android.view.ViewGroup; -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -/** - * Created by yarolegovich on 10/25/17. - */ -public class RecyclerViewProxy { - - private RecyclerView.LayoutManager layoutManager; - - public RecyclerViewProxy(@NonNull RecyclerView.LayoutManager layoutManager) { - this.layoutManager = layoutManager; - } - - public void attachView(View view) { - layoutManager.attachView(view); - } - - public void detachView(View view) { - layoutManager.detachView(view); - } - - public void detachAndScrapView(View view, RecyclerView.Recycler recycler) { - layoutManager.detachAndScrapView(view, recycler); - } - - public void detachAndScrapAttachedViews(RecyclerView.Recycler recycler) { - layoutManager.detachAndScrapAttachedViews(recycler); - } - - public void recycleView(View view, RecyclerView.Recycler recycler) { - recycler.recycleView(view); - } - - public void removeAndRecycleAllViews(RecyclerView.Recycler recycler) { - layoutManager.removeAndRecycleAllViews(recycler); - } - - public int getChildCount() { - return layoutManager.getChildCount(); - } - - public int getItemCount() { - return layoutManager.getItemCount(); - } - - public View getMeasuredChildForAdapterPosition(int position, RecyclerView.Recycler recycler) { - View view = recycler.getViewForPosition(position); - layoutManager.addView(view); - layoutManager.measureChildWithMargins(view, 0, 0); - return view; - } - - public void layoutDecoratedWithMargins(View v, int left, int top, int right, int bottom) { - layoutManager.layoutDecoratedWithMargins(v, left, top, right, bottom); - } - - public View getChildAt(int index) { - return layoutManager.getChildAt(index); - } - - public int getPosition(View view) { - return layoutManager.getPosition(view); - } - - public int getMeasuredWidthWithMargin(View child) { - ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) child.getLayoutParams(); - return layoutManager.getDecoratedMeasuredWidth(child) + lp.leftMargin + lp.rightMargin; - } - - public int getMeasuredHeightWithMargin(View child) { - ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) child.getLayoutParams(); - return layoutManager.getDecoratedMeasuredHeight(child) + lp.topMargin + lp.bottomMargin; - } - - public int getWidth() { - return layoutManager.getWidth(); - } - - public int getHeight() { - return layoutManager.getHeight(); - } - - public void offsetChildrenHorizontal(int amount) { - layoutManager.offsetChildrenHorizontal(amount); - } - - public void offsetChildrenVertical(int amount) { - layoutManager.offsetChildrenVertical(amount); - } - - public void requestLayout() { - layoutManager.requestLayout(); - } - - public void startSmoothScroll(RecyclerView.SmoothScroller smoothScroller) { - layoutManager.startSmoothScroll(smoothScroller); - } - - public void removeAllViews() { - layoutManager.removeAllViews(); - } -} diff --git a/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/transform/DiscreteScrollItemTransformer.java b/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/transform/DiscreteScrollItemTransformer.java deleted file mode 100644 index 5be48cd737..0000000000 --- a/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/transform/DiscreteScrollItemTransformer.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.yarolegovich.discretescrollview.transform; - -import android.view.View; -import androidx.recyclerview.widget.RecyclerView; - -/** - * Created by yarolegovich on 02.03.2017. - */ - -public interface DiscreteScrollItemTransformer { - void transformItem(View item, RecyclerView.ViewHolder childViewHolder,float position); -} diff --git a/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/transform/Pivot.java b/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/transform/Pivot.java deleted file mode 100644 index fc5fcd11d2..0000000000 --- a/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/transform/Pivot.java +++ /dev/null @@ -1,116 +0,0 @@ -package com.yarolegovich.discretescrollview.transform; - -import android.view.View; - -import androidx.annotation.IntDef; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; - -/** - * Created by yarolegovich on 03.03.2017. - */ - -public class Pivot { - - public static final int AXIS_X = 0; - public static final int AXIS_Y = 1; - - private static final int PIVOT_CENTER = -1; - private static final int PIVOT_MAX = -2; - - private int axis; - private int pivotPoint; - - public Pivot(@Axis int axis, int pivotPoint) { - this.axis = axis; - this.pivotPoint = pivotPoint; - } - - public void setOn(View view) { - if (axis == AXIS_X) { - switch (pivotPoint) { - case PIVOT_CENTER: - view.setPivotX(view.getWidth() * 0.5f); - break; - case PIVOT_MAX: - view.setPivotX(view.getWidth()); - break; - default: - view.setPivotX(pivotPoint); - break; - } - return; - } - - if (axis == AXIS_Y) { - switch (pivotPoint) { - case PIVOT_CENTER: - view.setPivotY(view.getHeight() * 0.5f); - break; - case PIVOT_MAX: - view.setPivotY(view.getHeight()); - break; - default: - view.setPivotY(pivotPoint); - break; - } - } - } - - @Axis - public int getAxis() { - return axis; - } - - public enum X { - LEFT { - @Override - public Pivot create() { - return new Pivot(AXIS_X, 0); - } - }, - CENTER { - @Override - public Pivot create() { - return new Pivot(AXIS_X, PIVOT_CENTER); - } - }, - RIGHT { - @Override - public Pivot create() { - return new Pivot(AXIS_X, PIVOT_MAX); - } - }; - - public abstract Pivot create(); - } - - public enum Y { - TOP { - @Override - public Pivot create() { - return new Pivot(AXIS_Y, 0); - } - }, - CENTER { - @Override - public Pivot create() { - return new Pivot(AXIS_Y, PIVOT_CENTER); - } - }, - BOTTOM { - @Override - public Pivot create() { - return new Pivot(AXIS_Y, PIVOT_MAX); - } - }; - - public abstract Pivot create(); - } - - @IntDef({AXIS_X, AXIS_Y}) - @Retention(RetentionPolicy.SOURCE) - public @interface Axis{ - } -} - diff --git a/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/transform/ScaleTransformer.java b/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/transform/ScaleTransformer.java deleted file mode 100644 index 89ec6c9b34..0000000000 --- a/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/transform/ScaleTransformer.java +++ /dev/null @@ -1,85 +0,0 @@ -package com.yarolegovich.discretescrollview.transform; - -import android.view.View; -import androidx.annotation.FloatRange; -import androidx.recyclerview.widget.RecyclerView; - -/** - * Created by yarolegovich on 03.03.2017. - */ -public class ScaleTransformer implements DiscreteScrollItemTransformer { - - private Pivot pivotX; - private Pivot pivotY; - private float minScale; - private float maxMinDiff; - - public ScaleTransformer() { - pivotX = Pivot.X.CENTER.create(); - pivotY = Pivot.Y.CENTER.create(); - minScale = 0.8f; - maxMinDiff = 0.2f; - } - - @Override - public void transformItem(View item, RecyclerView.ViewHolder childViewHolder, float position) { - pivotX.setOn(item); - pivotY.setOn(item); - float closenessToCenter = 1f - Math.abs(position); - float scale = minScale + maxMinDiff * closenessToCenter; - item.setScaleX(scale); - item.setScaleY(scale); - } - - public static class Builder { - - private ScaleTransformer transformer; - private float maxScale; - - public Builder() { - transformer = new ScaleTransformer(); - maxScale = 1f; - } - - public Builder setMinScale(@FloatRange(from = 0.01) float scale) { - transformer.minScale = scale; - return this; - } - - public Builder setMaxScale(@FloatRange(from = 0.01) float scale) { - maxScale = scale; - return this; - } - - public Builder setPivotX(Pivot.X pivotX) { - return setPivotX(pivotX.create()); - } - - public Builder setPivotX(Pivot pivot) { - assertAxis(pivot, Pivot.AXIS_X); - transformer.pivotX = pivot; - return this; - } - - public Builder setPivotY(Pivot.Y pivotY) { - return setPivotY(pivotY.create()); - } - - public Builder setPivotY(Pivot pivot) { - assertAxis(pivot, Pivot.AXIS_Y); - transformer.pivotY = pivot; - return this; - } - - public ScaleTransformer build() { - transformer.maxMinDiff = maxScale - transformer.minScale; - return transformer; - } - - private void assertAxis(Pivot pivot, @Pivot.Axis int axis) { - if (pivot.getAxis() != axis) { - throw new IllegalArgumentException("You passed a Pivot for wrong axis."); - } - } - } -} diff --git a/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/util/ScrollListenerAdapter.java b/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/util/ScrollListenerAdapter.java deleted file mode 100644 index 7611c52a18..0000000000 --- a/modules/mogo-module-common/src/main/java/com/yarolegovich/discretescrollview/util/ScrollListenerAdapter.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.yarolegovich.discretescrollview.util; - - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.recyclerview.widget.RecyclerView; -import com.yarolegovich.discretescrollview.DiscreteScrollView; - -/** - * Created by yarolegovich on 16.03.2017. - */ -public class ScrollListenerAdapter implements DiscreteScrollView.ScrollStateChangeListener { - - private DiscreteScrollView.ScrollListener adaptee; - - public ScrollListenerAdapter(@NonNull DiscreteScrollView.ScrollListener adaptee) { - this.adaptee = adaptee; - } - - @Override - public void onScrollStart(@NonNull T currentItemHolder, int adapterPosition) { - - } - - @Override - public void onScrollEnd(@NonNull T currentItemHolder, int adapterPosition) { - - } - - @Override - public void onScroll(float scrollPosition, - int currentIndex, int newIndex, - @Nullable T currentHolder, @Nullable T newCurrentHolder) { - adaptee.onScroll(scrollPosition, currentIndex, newIndex, currentHolder, newCurrentHolder); - } - - @Override - public boolean equals(Object obj) { - if (obj instanceof ScrollListenerAdapter) { - return adaptee.equals(((ScrollListenerAdapter) obj).adaptee); - } else { - return super.equals(obj); - } - } -} diff --git a/modules/mogo-module-common/src/main/res/drawable/moddule_commons_shape_react_blue_grident.xml b/modules/mogo-module-common/src/main/res/drawable/moddule_commons_shape_react_blue_grident.xml new file mode 100644 index 0000000000..3c91cb81a9 --- /dev/null +++ b/modules/mogo-module-common/src/main/res/drawable/moddule_commons_shape_react_blue_grident.xml @@ -0,0 +1,14 @@ + + + + + + + + diff --git a/modules/mogo-module-common/src/main/res/drawable/module_commons_shape_react_gray_grident.xml b/modules/mogo-module-common/src/main/res/drawable/module_commons_shape_react_gray_grident.xml new file mode 100644 index 0000000000..5d90ff43e3 --- /dev/null +++ b/modules/mogo-module-common/src/main/res/drawable/module_commons_shape_react_gray_grident.xml @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/modules/mogo-module-common/src/main/res/drawable/module_commons_shape_round_gray.xml b/modules/mogo-module-common/src/main/res/drawable/module_commons_shape_round_gray.xml new file mode 100644 index 0000000000..37f8498d8c --- /dev/null +++ b/modules/mogo-module-common/src/main/res/drawable/module_commons_shape_round_gray.xml @@ -0,0 +1,7 @@ + + + + + + diff --git a/modules/mogo-module-common/src/main/res/layout/module_commons_layout_wm_dialog.xml b/modules/mogo-module-common/src/main/res/layout/module_commons_layout_wm_dialog.xml new file mode 100644 index 0000000000..ae4839f484 --- /dev/null +++ b/modules/mogo-module-common/src/main/res/layout/module_commons_layout_wm_dialog.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/mogo-module-common/src/main/res/values/strings.xml b/modules/mogo-module-common/src/main/res/values/strings.xml index f6affe31b5..74f2951c89 100644 --- a/modules/mogo-module-common/src/main/res/values/strings.xml +++ b/modules/mogo-module-common/src/main/res/values/strings.xml @@ -1,5 +1,6 @@ mogo-module-common - You should not set LayoutManager on DiscreteScrollView.class instance. Library uses a special one. Just don\'t call the method. - InfiniteScrollAdapter is supposed to work only with DiscreteScrollView + 确认 + 取消 + 是否退出导航? diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java index 7d95097c3e..41275ad0cc 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java @@ -34,6 +34,7 @@ import com.mogo.map.uicontroller.IMogoMapUIController; import com.mogo.module.authorize.authprovider.invoke.AuthorizeConstant; import com.mogo.module.authorize.authprovider.module.IMogoAcquireAuthorizeListener; import com.mogo.module.authorize.authprovider.module.IMogoAuthorizeModuleManager; +import com.mogo.module.common.dialog.WMDialog; import com.mogo.module.common.map.MapCenterPointStrategy; import com.mogo.module.common.map.Scene; import com.mogo.module.extensions.ExtensionsModuleConst; @@ -97,7 +98,6 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent private IMogoLocationClient mMogoLocationClient; private IMogoNavi mMogoNavi; private IMogoFragmentManager mMogoFragmentManager; - private IMogoAddressManager mMogoAddressManager; private IMogoMarkerManager mMogoMarkerManager; private IMogoRegisterCenter mMogoRegisterCenter; @@ -178,7 +178,6 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent mEntrancePresenter = new EntrancePresenter( getContext(), this, mIMogoAuthorizeModuleManager ); mMogoFragmentManager = mApis.getFragmentManagerApi(); - mMogoAddressManager = mApis.getAddressManagerApi(); mStatusManager = mApis.getStatusManagerApi(); @@ -217,8 +216,16 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent mExitNavi.setOnClickListener( view -> { if ( mMogoNavi != null ) { if ( mIsLock ) { - NaviNoticeDialog naviNoticeDialog = new NaviNoticeDialog( getContext() ); - naviNoticeDialog.show(); + new WMDialog.Builder( getContext() ) + .setOkButton( R.string.module_commons_button_ok, ( dlg, which ) -> { + mMogoNavi.stopNavi(); + } ) + .setCancelButton( R.string.module_commons_button_cancel, ( dlg, which ) -> { + dlg.dismiss(); + } ) + .setContent( R.string.module_commons_exit_navi_content ) + .build() + .show(); } else { MapCenterPointStrategy.setMapCenterPointByScene( mMApUIController, Scene.NAVI ); mMApUIController.recoverLockMode(); @@ -466,10 +473,10 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent if ( mCurrentUploadFrame == mUploadingFrameRes.length ) { mCurrentUploadFrame = 12; } - mUploading.setImageResource( mUploadingFrameRes[mCurrentUploadFrame++%mUploadingFrameRes.length] ); + mUploading.setImageResource( mUploadingFrameRes[mCurrentUploadFrame++ % mUploadingFrameRes.length] ); } mUploadFrameAnimHandler.sendEmptyMessageDelayed( MSG_FRAME_ANIM, TIME_FRAME_INTERVAL_TIME ); - } else if( msg.what == MSG_STOP_ANIM ){ + } else if ( msg.what == MSG_STOP_ANIM ) { mStatusManager.setUploadingStatus( TAG, false ); } } diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java index debafa9007..b46e8c7656 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java @@ -246,7 +246,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme protected void onResume() { super.onResume(); mMogoStatusManager.setMainPageResumeStatus( TAG, true ); - if ( mCoverUpLayout.getVisibility() == View.VISIBLE ) { + if ( mCoverUpLayout.getVisibility() != View.VISIBLE ) { mServiceApis.getAdasControllerApi().showADAS(); } } diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/SchemeIntent.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/SchemeIntent.java index 81185341b8..14ec2be9ab 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/SchemeIntent.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/SchemeIntent.java @@ -125,7 +125,7 @@ public class SchemeIntent implements IMogoStatusChangedListener { if ( mApis.getMapServiceApi().getNavi( mContext ).isNaviing() ) { mApis.getMapServiceApi().getNavi( mContext ).naviTo( new MogoLatLng( dlat, dlon ) ); } else { - mApis.getAddressManagerApi().calculatePath( new MogoLatLng( dlat, dlon ) ); + mApis.getSearchManagerApi().calculatePath( new MogoLatLng( dlat, dlon ) ); } } catch ( Exception e ) { TipToast.shortTip( "目的地异常,不能导航" ); diff --git a/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapPresenter.java b/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapPresenter.java index a1cec4be2c..650f4d3998 100644 --- a/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapPresenter.java +++ b/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapPresenter.java @@ -28,7 +28,6 @@ import com.mogo.service.intent.IMogoIntentListener; import com.mogo.service.intent.IMogoIntentManager; import com.mogo.service.launcher.IMogoLauncher; import com.mogo.service.map.IMogoMapService; -import com.mogo.service.module.IMogoAddressManager; import com.mogo.service.module.IMogoRegisterCenter; import com.mogo.service.module.IMogoSearchManager; import com.mogo.service.statusmanager.IMogoStatusManager; @@ -59,7 +58,7 @@ public class MapPresenter extends Presenter< MapView > implements private IMogoStatusManager mStatusManager; private IMogoRegisterCenter mRegisterCenter; private IMogoLauncher mLauncher; - private IMogoAddressManager mMogoAddressManager; + private IMogoSearchManager mMogoSearchManager; private Rect mDisplayOverviewBounds; public MapPresenter( MapView view ) { @@ -208,7 +207,7 @@ public class MapPresenter extends Presenter< MapView > implements lon = intent.getDoubleExtra( "LON", 0.0 ); } - mMogoAddressManager.calculatePath( new MogoLatLng( lat, lon ) ); + mMogoSearchManager.calculatePath( new MogoLatLng( lat, lon ) ); } /** @@ -287,7 +286,7 @@ public class MapPresenter extends Presenter< MapView > implements private void onOpenNavi() { mLauncher.backToLauncher( getContext() ); if ( !mMogoMapService.getNavi( getContext() ).isNaviing() && !mStatusManager.isSearchUIShow() ) { - mMogoAddressManager.goSearch(); + mSearchManager.showSearch(); } AIAssist.getInstance( getContext() ).speakTTSVoice( "已打开" ); } @@ -305,7 +304,7 @@ public class MapPresenter extends Presenter< MapView > implements mRegisterCenter = apis.getRegisterCenterApi(); mRegisterCenter.registerMogoNaviListener( TAG, this ); mLauncher = apis.getLauncherApi(); - mMogoAddressManager = apis.getAddressManagerApi(); + mMogoSearchManager = apis.getSearchManagerApi(); IMogoNavi mogoNavi = mMogoMapService.getNavi( getContext() ); mogoNavi.setCalculatePathDisplayBounds( new Rect( @@ -418,7 +417,7 @@ public class MapPresenter extends Presenter< MapView > implements break; case VoiceConstants.CMD_MAP_STOP_NAVI_MODE_UN_WAKEUP: case VoiceConstants.CMD_MAP_STOP_NAVI_MODE: - mSearchManager.showMain(); + mLauncher.backToLauncher( getContext() ); break; case VoiceConstants.CMD_MAP_NIGHT_MODE_UN_WAKEUP: case VoiceConstants.CMD_MAP_NIGHT_MODE: diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/MogoAddressManager.java b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/MogoAddressManager.java index 8c2204f9f8..e5b4c314f6 100644 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/MogoAddressManager.java +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/MogoAddressManager.java @@ -4,51 +4,56 @@ import android.content.Context; import com.alibaba.android.arouter.facade.annotation.Route; import com.mogo.map.MogoLatLng; -import com.mogo.module.navi.constants.SearchServiceHolder; import com.mogo.service.MogoServicePaths; import com.mogo.service.module.IMogoAddressManager; +import com.mogo.service.module.IMogoSearchManager; +import com.mogo.utils.logger.Logger; /** * @author zyz * 2020-01-12. + *

+ * Deprecated, use {@link IMogoSearchManager} instead. */ + +@Deprecated @Route( path = MogoServicePaths.PATH_ADDRESS_MANAGER ) public class MogoAddressManager implements IMogoAddressManager { + private static final String TAG = "MogoAddressManager"; + @Override public void goHome() { - AddressManager.INSTANCE.goHome(); + Logger.w( TAG, "Deprecated, use IMogoSearchManager instead." ); } @Override public void goCompany() { - AddressManager.INSTANCE.goCompany(); + Logger.w( TAG, "Deprecated, use IMogoSearchManager instead." ); } @Override public void goSearch() { - AddressManager.INSTANCE.goSearch(); + Logger.w( TAG, "Deprecated, use IMogoSearchManager instead." ); } @Override public void calculatePath( MogoLatLng destination ) { - AddressManager.INSTANCE.calculatePath( destination ); + Logger.w( TAG, "Deprecated, use IMogoSearchManager instead." ); } @Override public void categorySearch( String category ) { - AddressManager.INSTANCE.categorySearch( category ); + Logger.w( TAG, "Deprecated, use IMogoSearchManager instead." ); } @Override public void goSettings() { - AddressManager.INSTANCE.goSettings(); + Logger.w( TAG, "Deprecated, use IMogoSearchManager instead." ); } @Override public void init( Context context ) { - AddressManager.INSTANCE.init( context ); - SearchServiceHolder.INSTANCE.init( context ); - SettingManager.INSTANCE.init( context ); + Logger.w( TAG, "Deprecated, use IMogoSearchManager instead." ); } } diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/MogoSearchManager.java b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/MogoSearchManager.java index 75a749ba67..dfd463a490 100644 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/MogoSearchManager.java +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/MogoSearchManager.java @@ -1,8 +1,11 @@ package com.mogo.module.navi.manager; import android.content.Context; + import androidx.fragment.app.Fragment; + import com.alibaba.android.arouter.facade.annotation.Route; +import com.mogo.map.MogoLatLng; import com.mogo.map.constants.BroadcastMode; import com.mogo.module.common.MogoModulePaths; import com.mogo.module.navi.constants.AMapConstants; @@ -17,37 +20,57 @@ import com.mogo.service.module.IMogoSearchManager; * @author zyz * 2020-01-13. */ -@Route(path = MogoServicePaths.PATH_SEARCH_MANAGER) +@Route( path = MogoServicePaths.PATH_SEARCH_MANAGER ) public class MogoSearchManager implements IMogoSearchManager { - @Override public void goHome() { + @Override + public void goHome() { AddressManager.INSTANCE.goHome(); } - @Override public void goCompany() { + @Override + public void goCompany() { AddressManager.INSTANCE.goCompany(); } - @Override public void showSearch() { + @Override + public void showSearch() { AddressManager.INSTANCE.goSearch(); } - @Override public void showMain() { + @Override + public void showMain() { SearchServiceHolder.INSTANCE.getFragmentManager().clearAll(); } - @Override public void speakDraft() { - SearchServiceHolder.INSTANCE.getNavi().setBroadcastMode(BroadcastMode.CONCISE); + @Override + public void speakDraft() { + SearchServiceHolder.INSTANCE.getNavi().setBroadcastMode( BroadcastMode.CONCISE ); } - @Override public void speakDetail() { - SearchServiceHolder.INSTANCE.getNavi().setBroadcastMode(BroadcastMode.DETAIL); + @Override + public void speakDetail() { + SearchServiceHolder.INSTANCE.getNavi().setBroadcastMode( BroadcastMode.DETAIL ); } - @Override public void showCategory(String keyword) { + @Override + public void categorySearch( String keyword ) { AddressManager.INSTANCE.categorySearch( keyword ); } - @Override public void init(Context context) { + @Override + public void calculatePath( MogoLatLng destination ) { + AddressManager.INSTANCE.calculatePath( destination ); + } + @Override + public void goSettings() { + AddressManager.INSTANCE.goSettings(); + } + + @Override + public void init( Context context ) { + AddressManager.INSTANCE.init( context ); + SearchServiceHolder.INSTANCE.init( context ); + SettingManager.INSTANCE.init( context ); } } diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MockIntentHandler.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MockIntentHandler.java index 108ba2ec75..972aa61212 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MockIntentHandler.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MockIntentHandler.java @@ -9,9 +9,20 @@ import android.view.View; import android.widget.TextView; import com.mogo.commons.debug.DebugConfig; +import com.mogo.map.MogoLatLng; +import com.mogo.map.search.geo.IMogoGeoSearch; +import com.mogo.map.search.geo.IMogoGeoSearchListener; +import com.mogo.map.search.geo.MogoGeocodeResult; +import com.mogo.map.search.geo.MogoRegeocodeResult; +import com.mogo.map.search.geo.query.MogoRegeocodeQuery; +import com.mogo.module.common.dialog.WMDialog; import com.mogo.module.service.MarkerServiceHandler; +import com.mogo.module.service.MogoServiceProvider; +import com.mogo.module.service.R; import com.mogo.service.entrance.ButtonIndex; import com.mogo.utils.TipToast; +import com.mogo.utils.logger.Logger; +import com.mogo.utils.network.utils.GsonUtil; /** * @author congtaowang @@ -71,10 +82,10 @@ public class MockIntentHandler implements IntentHandler { button11.setVisibility( View.VISIBLE ); button11.setBackgroundColor( Color.RED ); button11.setOnClickListener( view -> { - Intent intent1 = new Intent( ); + Intent intent1 = new Intent(); intent1.setAction( Intent.ACTION_VIEW ); intent1.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK ); - intent1.setData( Uri.parse("wechathelper://com.zhidao.wechathelper/main/transform?type=navi&lon=116.327007&lat=39.977639&from=os2.0") ); + intent1.setData( Uri.parse( "wechathelper://com.zhidao.wechathelper/main/transform?type=navi&lon=116.327007&lat=39.977639&from=os2.0" ) ); try { view.setOnClickListener( null ); view.getContext().startActivity( intent1 ); @@ -89,6 +100,37 @@ public class MockIntentHandler implements IntentHandler { float bearing = intent.getFloatExtra( "bearing", 0 ); MarkerServiceHandler.getMapUIController().changeBearing( bearing ); break; + case 9: + new WMDialog.Builder( context ) + .setOkButton( "确认", ( dlg, which ) -> { + dlg.dismiss(); + } ) + .setCancelButton( "取消", ( dlg, which ) -> { + dlg.dismiss(); + } ) + .setContent( "内容内容内容内容内容内容内容内容" ) + .build() + .show(); + break; + case 10: + IMogoGeoSearch geoSearch = MarkerServiceHandler.getMapService().getGeoSearch( context ); + geoSearch.setGeoSearchListener( new IMogoGeoSearchListener() { + @Override + public void onRegeocodeSearched( MogoRegeocodeResult regeocodeResult ) { + Logger.d( TAG, GsonUtil.jsonFromObject( regeocodeResult ) ); + } + + @Override + public void onGeocodeSearched( MogoGeocodeResult geocodeResult ) { + + } + } ); + MogoRegeocodeQuery query = new MogoRegeocodeQuery(); + query.setLatlngType( "autonavi" ); + query.setPoint( new MogoLatLng( intent.getFloatExtra( "lat", 39.917366f ), intent.getFloatExtra( "lon", 116.39962f ) ) ); + query.setRadius( 1000 ); + geoSearch.getFromLocationAsyn( query ); + break; } } } diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/IMogoServiceApis.java b/services/mogo-service-api/src/main/java/com/mogo/service/IMogoServiceApis.java index b2c827db12..346667562f 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/IMogoServiceApis.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/IMogoServiceApis.java @@ -160,9 +160,11 @@ public interface IMogoServiceApis extends IProvider { /** * 地址操作 + * Deprecated, use {@link IMogoSearchManager} instead. * * @return */ + @Deprecated IMogoAddressManager getAddressManagerApi(); /** diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/map/IMogoMapService.java b/services/mogo-service-api/src/main/java/com/mogo/service/map/IMogoMapService.java index d4a794ea16..dce52487ec 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/map/IMogoMapService.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/map/IMogoMapService.java @@ -41,6 +41,7 @@ public interface IMogoMapService extends IProvider { * @param context * @return 定位实例 */ + @Deprecated IMogoLocationClient getLocationClient( Context context ); /** diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoAddressManager.java b/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoAddressManager.java index 617023ea53..cd83a54470 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoAddressManager.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoAddressManager.java @@ -6,22 +6,28 @@ import com.mogo.map.MogoLatLng; /** * @author zyz * 2020-01-12. + *

+ * Deprecated, use {@link IMogoSearchManager} instead." */ +@Deprecated public interface IMogoAddressManager extends IProvider { /** * 回家 */ + @Deprecated void goHome(); /** * 去公司 */ + @Deprecated void goCompany(); /** * 打开搜索 */ + @Deprecated void goSearch(); /** @@ -29,12 +35,15 @@ public interface IMogoAddressManager extends IProvider { * * @param destination 目的地 */ + @Deprecated void calculatePath( MogoLatLng destination ); /** * 分类搜索 */ - void categorySearch(String category); + @Deprecated + void categorySearch( String category ); + @Deprecated void goSettings(); } diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoSearchManager.java b/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoSearchManager.java index c477e5ecf0..106880c33a 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoSearchManager.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoSearchManager.java @@ -1,6 +1,7 @@ package com.mogo.service.module; import com.alibaba.android.arouter.facade.template.IProvider; +import com.mogo.map.MogoLatLng; /** * @author zyz @@ -8,11 +9,41 @@ import com.alibaba.android.arouter.facade.template.IProvider; */ public interface IMogoSearchManager extends IProvider { + /** + * 回家 + */ void goHome(); + + /** + * 去公司 + */ void goCompany(); + + /** + * 打开搜索 + */ void showSearch(); + void showMain(); + void speakDraft(); + void speakDetail(); - void showCategory(String keyword); + + /** + * 规划路线 + * + * @param destination 目的地 + */ + void calculatePath( MogoLatLng destination ); + + /** + * 分类搜索 + */ + void categorySearch( String keyword ); + + /** + * 打开导航设置 + */ + void goSettings(); } From f5a1925532db6c6243ceb2b11c3fc7e85280df7a Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Mon, 18 May 2020 17:05:58 +0800 Subject: [PATCH 11/31] opt --- .../map/impl/amap/AMapNaviViewWrapper.java | 8 +- .../amap/uicontroller/AMapUIController.java | 4 +- .../uicontroller/IMogoMapUIController.java | 9 +- .../com/mogo/map/MogoMapUIController.java | 4 +- .../apps/applaunch/CardAppLauncher.java | 9 +- .../apps/applaunch/GuideShowLauncher.java | 21 +- .../module/back/BackToMainHomeManager.java | 2 +- .../com/mogo/module/map/MapPresenter.java | 7 +- .../src/main/AndroidManifest.xml | 1 - .../module/navi/constants/DataConstants.java | 4 +- .../navi/constants/SearchApisHolder.java | 123 +++++ .../navi/constants/SearchServiceHolder.kt | 83 ---- .../module/navi/manager/AddressManager.kt | 85 ++-- .../navi/manager/MogoSearchManager.java | 29 +- .../navi/manager/MogoSettingManager.java | 40 +- .../module/navi/manager/SettingManager.kt | 29 +- .../com/mogo/module/navi/ui/NaviActivity.kt | 20 - .../module/navi/ui/base/BaseFragment.java | 4 +- .../navi/ui/search/BaseSearchFragment.java | 4 - .../navi/ui/search/CategoryPresenter.java | 79 ++-- .../navi/ui/search/CategorySearchFragment.kt | 29 +- .../navi/ui/search/ChoosePathFragment.kt | 52 +-- .../module/navi/ui/search/SearchFragment.java | 419 +++++++++--------- .../navi/ui/search/SearchPresenter.java | 19 +- .../module/navi/ui/search/SearchUtils.java | 39 -- .../module/navi/ui/search/SearchView.java | 20 +- .../navi/ui/setting/NaviSettingFragment.kt | 59 ++- .../navi/ui/setting/SettingAddressFragment.kt | 37 +- .../src/main/res/layout/activity_navi.xml | 15 - .../module/service/MarkerServiceHandler.java | 5 +- .../com/mogo/module/service/MogoServices.java | 7 +- .../service/marker/MapMarkerManager.java | 388 +++++----------- .../service/module/IMogoSearchManager.java | 6 - .../service/module/IMogoSettingManager.java | 43 ++ 34 files changed, 725 insertions(+), 978 deletions(-) create mode 100644 modules/mogo-module-search/src/main/java/com/mogo/module/navi/constants/SearchApisHolder.java delete mode 100644 modules/mogo-module-search/src/main/java/com/mogo/module/navi/constants/SearchServiceHolder.kt delete mode 100644 modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/NaviActivity.kt delete mode 100644 modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/SearchUtils.java delete mode 100644 modules/mogo-module-search/src/main/res/layout/activity_navi.xml diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapNaviViewWrapper.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapNaviViewWrapper.java index 13f075f63f..5c62d54fd3 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapNaviViewWrapper.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapNaviViewWrapper.java @@ -492,7 +492,7 @@ public class AMapNaviViewWrapper implements IMogoMapView, } @Override - public void moveToCenter( MogoLatLng latLng ) { + public void moveToCenter( MogoLatLng latLng, boolean animate ) { Logger.d( TAG, "move to center %s", latLng ); if ( latLng == null || latLng.lat == 0.0d || latLng.lng == 0.0d ) { Logger.e( TAG, "latlng = null or is illegal" ); @@ -502,7 +502,11 @@ public class AMapNaviViewWrapper implements IMogoMapView, Logger.d( TAG, Log.getStackTraceString( new Throwable() ) ); } loseLockMode(); - mMapView.getMap().moveCamera( CameraUpdateFactory.newLatLng( new LatLng( latLng.lat, latLng.lng ) ) ); + if ( animate ) { + mMapView.getMap().animateCamera( CameraUpdateFactory.newLatLng( new LatLng( latLng.lat, latLng.lng ) ) ); + } else { + mMapView.getMap().moveCamera( CameraUpdateFactory.newLatLng( new LatLng( latLng.lat, latLng.lng ) ) ); + } } @Override diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/uicontroller/AMapUIController.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/uicontroller/AMapUIController.java index 175a4e2529..2e874886ae 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/uicontroller/AMapUIController.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/uicontroller/AMapUIController.java @@ -85,9 +85,9 @@ public class AMapUIController implements IMogoMapUIController { } @Override - public void moveToCenter(MogoLatLng latLng) { + public void moveToCenter(MogoLatLng latLng, boolean animate) { if (mClient != null) { - mClient.moveToCenter(latLng); + mClient.moveToCenter(latLng, animate); } } diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java index 73c3f244b1..419f4cc00a 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java @@ -50,7 +50,14 @@ public interface IMogoMapUIController { /** * 将地图移动至当前位置 */ - void moveToCenter( MogoLatLng latLng ); + default void moveToCenter( MogoLatLng latLng ){ + moveToCenter(latLng, false); + } + + /** + * 将地图移动至当前位置 + */ + void moveToCenter( MogoLatLng latLng, boolean animate ); /** * 显示我的位置 diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java index 89cdb35eb8..f4642f2440 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java @@ -79,9 +79,9 @@ public class MogoMapUIController implements IMogoMapUIController { @Override - public void moveToCenter(MogoLatLng latLng) { + public void moveToCenter(MogoLatLng latLng, boolean animate) { if (mDelegate != null) { - mDelegate.moveToCenter(latLng); + mDelegate.moveToCenter(latLng, animate); } } diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/CardAppLauncher.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/CardAppLauncher.java index fb0906f4c4..117dd06cb8 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/CardAppLauncher.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/CardAppLauncher.java @@ -35,13 +35,8 @@ public class CardAppLauncher extends BaseAppLauncher { @Override public void launch( Context context, AppInfo appInfo ) { - if ( sCardApps.containsKey( appInfo.getPackageName() ) ) { - mCardManager.switch2( sCardApps.get( appInfo.getPackageName() ) ); - mAppsPresenter.exit(); - } else { - if ( getNext() != null ) { - getNext().launch( context, appInfo ); - } + if ( getNext() != null ) { + getNext().launch( context, appInfo ); } } diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/GuideShowLauncher.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/GuideShowLauncher.java index 88e5068c61..fea3414ea7 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/GuideShowLauncher.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/GuideShowLauncher.java @@ -1,16 +1,9 @@ package com.mogo.module.apps.applaunch; -import android.app.Activity; import android.content.Context; -import com.mogo.commons.voice.AIAssist; import com.mogo.map.navi.IMogoNavi; -import com.mogo.module.apps.AppServiceHandler; -import com.mogo.module.apps.R; import com.mogo.module.apps.model.AppInfo; -import com.mogo.utils.logger.Logger; - -import kotlin.Unit; public class GuideShowLauncher extends BaseAppLauncher { @@ -25,19 +18,7 @@ public class GuideShowLauncher extends BaseAppLauncher { @Override public void launch(Context context, AppInfo appInfo) { - if (appInfo != null && APP_INFO_NAME_GUIDE_SHOW.equals(appInfo.getName())) { - if ( mNavi != null && !mNavi.isNaviing()) { - AppServiceHandler.getMogoGuideShow().playGuideVideo((Activity) context, (s) -> { - Logger.d(TAG, s); - return Unit.INSTANCE; - }); - } else { - AIAssist.getInstance(context).speakTTSVoice(context.getString(R.string.module_apps_str_guide_warning)); - processChain(context,appInfo); - } - } else { - processChain(context, appInfo); - } + processChain(context, appInfo); } private void processChain(Context context, AppInfo appInfo) { diff --git a/modules/mogo-module-back/src/main/java/com/mogo/module/back/BackToMainHomeManager.java b/modules/mogo-module-back/src/main/java/com/mogo/module/back/BackToMainHomeManager.java index 93a1eec5d3..feba1d3563 100644 --- a/modules/mogo-module-back/src/main/java/com/mogo/module/back/BackToMainHomeManager.java +++ b/modules/mogo-module-back/src/main/java/com/mogo/module/back/BackToMainHomeManager.java @@ -35,7 +35,7 @@ public class BackToMainHomeManager { public static void backToLauncher() { - if ( mFragmentManager != null ) { + if ( !mStatusManager.isSearchUIShow() ) { mFragmentManager.clearAll(); } diff --git a/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapPresenter.java b/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapPresenter.java index 650f4d3998..4b740e501a 100644 --- a/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapPresenter.java +++ b/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapPresenter.java @@ -30,6 +30,7 @@ import com.mogo.service.launcher.IMogoLauncher; import com.mogo.service.map.IMogoMapService; import com.mogo.service.module.IMogoRegisterCenter; import com.mogo.service.module.IMogoSearchManager; +import com.mogo.service.module.IMogoSettingManager; import com.mogo.service.statusmanager.IMogoStatusManager; import com.mogo.service.strategy.IMogoRefreshStrategyController; import com.mogo.utils.ResourcesHelper; @@ -59,6 +60,7 @@ public class MapPresenter extends Presenter< MapView > implements private IMogoRegisterCenter mRegisterCenter; private IMogoLauncher mLauncher; private IMogoSearchManager mMogoSearchManager; + private IMogoSettingManager mSettingManager; private Rect mDisplayOverviewBounds; public MapPresenter( MapView view ) { @@ -305,6 +307,7 @@ public class MapPresenter extends Presenter< MapView > implements mRegisterCenter.registerMogoNaviListener( TAG, this ); mLauncher = apis.getLauncherApi(); mMogoSearchManager = apis.getSearchManagerApi(); + mSettingManager = apis.getSettingManagerApi(); IMogoNavi mogoNavi = mMogoMapService.getNavi( getContext() ); mogoNavi.setCalculatePathDisplayBounds( new Rect( @@ -442,12 +445,12 @@ public class MapPresenter extends Presenter< MapView > implements break; case VoiceConstants.CMD_MAP_SPEAK_DRAFT_MODE: case VoiceConstants.CMD_MAP_SPEAK_DRAFT_MODE_UN_WAKEUP: - mSearchManager.speakDraft(); + mSettingManager.speakDraft(); AIAssist.getInstance( getContext() ).speakTTSVoice( "已切换", null ); break; case VoiceConstants.CMD_MAP_SPEAK_DETAIL_MODE: case VoiceConstants.CMD_MAP_SPEAK_DETAIL_MODE_UN_WAKEUP: - mSearchManager.speakDetail(); + mSettingManager.speakDetail(); AIAssist.getInstance( getContext() ).speakTTSVoice( "已切换", null ); break; case VoiceConstants.CMD_MAP_SPEAK_REMAIN: diff --git a/modules/mogo-module-search/src/main/AndroidManifest.xml b/modules/mogo-module-search/src/main/AndroidManifest.xml index 2d0a21723d..99b0239918 100644 --- a/modules/mogo-module-search/src/main/AndroidManifest.xml +++ b/modules/mogo-module-search/src/main/AndroidManifest.xml @@ -6,7 +6,6 @@ - + * 描述 + */ +public class SearchApisHolder { + + private static IMogoServiceApis sApis; + private static IMogoMapService sMapServiceApis; + private static IMogoMapUIController sUiControllerApis; + private static IMogoNavi sNaviApis; + private static IMogoMarkerManager sMarkerManagerApis; + private static IMogoFragmentManager sFragmentManagerApis; + private static IMogoAnalytics sAnalyticsApis; + private static IMogoLocationClient sLocationClientApis; + private static IMogoStatusManager sStatusManager; + private static IMogoRegisterCenter sRegisterCenterApis; + private static IMogoIntentManager sIntentManager; + private static IGuideShowProvider sGuideShowApis; + private static IMogoSettingManager sSettingManager; + private static IMogoGpsSimulatorManager sGpsSimulatorManager; + private static IMogoSearchManager sSearchManager; + + static { + sApis = ARouter.getInstance().navigation( IMogoServiceApis.class ); + sMapServiceApis = sApis.getMapServiceApi(); + sUiControllerApis = sMapServiceApis.getMapUIController(); + sNaviApis = sMapServiceApis.getNavi( AbsMogoApplication.getApp() ); + sMarkerManagerApis = sMapServiceApis.getMarkerManager( AbsMogoApplication.getApp() ); + sFragmentManagerApis = sApis.getFragmentManagerApi(); + sAnalyticsApis = sApis.getAnalyticsApi(); + sLocationClientApis = sMapServiceApis.getSingletonLocationClient( AbsMogoApplication.getApp() ); + sStatusManager = sApis.getStatusManagerApi(); + sRegisterCenterApis = sApis.getRegisterCenterApi(); + sIntentManager = sApis.getIntentManagerApi(); + sSettingManager = sApis.getSettingManagerApi(); + sSearchManager = sApis.getSearchManagerApi(); + sGpsSimulatorManager = ARouter.getInstance().navigation( IMogoGpsSimulatorManager.class); + sGuideShowApis = ARouter.getInstance().navigation( IGuideShowProvider.class ); + } + + public static IMogoServiceApis getApis() { + return sApis; + } + + public static IMogoMapService getMapServiceApis() { + return sMapServiceApis; + } + + public static IMogoMapUIController getUiControllerApis() { + return sUiControllerApis; + } + + public static IMogoNavi getNaviApis() { + return sNaviApis; + } + + public static IMogoMarkerManager getMarkerManager() { + return sMarkerManagerApis; + } + + public static IMogoFragmentManager getFragmentManager() { + return sFragmentManagerApis; + } + + public static IMogoAnalytics getAnalyticsApis() { + return sAnalyticsApis; + } + + public static IMogoLocationClient getLocationClientApis() { + return sLocationClientApis; + } + + public static IMogoStatusManager getStatusManager() { + return sStatusManager; + } + + public static IMogoRegisterCenter getRegisterCenterApis() { + return sRegisterCenterApis; + } + + public static IMogoIntentManager getIntentManager() { + return sIntentManager; + } + + public static IGuideShowProvider getGuideShowApis() { + return sGuideShowApis; + } + + public static IMogoSettingManager getSettingManager() { + return sSettingManager; + } + + public static IMogoGpsSimulatorManager getGpsSimulatorManager() { + return sGpsSimulatorManager; + } + + public static IMogoSearchManager getSearchManager() { + return sSearchManager; + } +} 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 deleted file mode 100644 index ace72751bb..0000000000 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/constants/SearchServiceHolder.kt +++ /dev/null @@ -1,83 +0,0 @@ -package com.mogo.module.navi.constants - -import android.annotation.SuppressLint -import android.content.Context -import androidx.fragment.app.Fragment -import com.alibaba.android.arouter.launcher.ARouter -import com.mogo.map.location.IMogoLocationClient -import com.mogo.map.marker.IMogoMarkerManager -import com.mogo.map.navi.IMogoNavi -import com.mogo.map.search.geo.IMogoGeoSearch -import com.mogo.map.uicontroller.IMogoMapUIController -import com.mogo.module.common.MogoModulePaths -import com.mogo.module.gps.simulator.GpsSimulatorConstants -import com.mogo.module.gps.simulator.IMogoGpsSimulatorManager -import com.mogo.module.guideshow.provider.GuideShowProviderConstant -import com.mogo.module.guideshow.provider.IGuideShowProvider -import com.mogo.service.IMogoServiceApis -import com.mogo.service.MogoServicePaths -import com.mogo.service.analytics.IMogoAnalytics -import com.mogo.service.fragmentmanager.FragmentDescriptor -import com.mogo.service.fragmentmanager.IMogoFragmentManager -import com.mogo.service.intent.IMogoIntentManager -import com.mogo.service.launcher.IMogoLauncher -import com.mogo.service.map.IMogoMapService -import com.mogo.service.module.IMogoRegisterCenter -import com.mogo.service.statusmanager.IMogoStatusManager - -/** - *@author zyz - * 2020-01-08. - */ -@SuppressLint("StaticFieldLeak") -object SearchServiceHolder { - // 单例对象,要使用Application Context - private lateinit var context: Context - - 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 - val statusManager: IMogoStatusManager = ARouter.getInstance().build(MogoServicePaths.PATH_STATUS_MANAGER).navigation() as IMogoStatusManager - val analyticsManager: IMogoAnalytics = ARouter.getInstance().build(MogoServicePaths.PATH_UTILS_ANALYTICS).navigation() as IMogoAnalytics - val guideShowProvider: IGuideShowProvider = ARouter.getInstance().build(GuideShowProviderConstant.GUIDE_SHOW_PROVIDER).navigation() as IGuideShowProvider - val mogoLauncher: IMogoLauncher = ARouter.getInstance().build(MogoServicePaths.PATH_LAUNCHER_API).navigation() as IMogoLauncher - val gpsSimulator = ARouter.getInstance().build(GpsSimulatorConstants.API_PATH).navigation() as IMogoGpsSimulatorManager - val intentManager = ARouter.getInstance().build(MogoServicePaths.PATH_INTENT_MANAGER).navigation() as IMogoIntentManager - val apis = ARouter.getInstance().navigation(IMogoServiceApis::class.java) - var geoSearch: IMogoGeoSearch? = null - fun init(context: Context) { - this.context = context - - } - - fun push(fragment: Fragment, tag: String) { - val builder = FragmentDescriptor.Builder() - builder.fragment(fragment) - val build = builder.tag(tag).build() - fragmentManager.push(build) - } - - fun getNavi(): IMogoNavi { - return mapService.getNavi(context) - } - - fun getLocationClient(): IMogoLocationClient { - return mapService.getLocationClient(context) - } - - fun getMapUIController(): IMogoMapUIController { - return mapService.mapUIController - } - - fun getMarkerManger(): IMogoMarkerManager { - return mapService.getMarkerManager(context) - } - - fun getGeoSearcher(): IMogoGeoSearch { - if (geoSearch == null) { - geoSearch = mapService.getGeoSearch(context) - } - return geoSearch!! - } - -} \ No newline at end of file diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/AddressManager.kt b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/AddressManager.kt index 1817c3163b..85ec044c4a 100644 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/AddressManager.kt +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/AddressManager.kt @@ -2,15 +2,15 @@ package com.mogo.module.navi.manager import android.annotation.SuppressLint import android.content.Context +import androidx.fragment.app.Fragment import com.mogo.map.MogoLatLng -import com.mogo.module.common.MogoModulePaths import com.mogo.module.common.map.MapCenterPointStrategy import com.mogo.module.common.map.Scene 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.DataConstants -import com.mogo.module.navi.constants.SearchServiceHolder +import com.mogo.module.navi.constants.SearchApisHolder import com.mogo.module.navi.cp.AddressHelper import com.mogo.module.navi.dao.SearchPoiDao import com.mogo.module.navi.database.AppDataBase @@ -47,14 +47,6 @@ object AddressManager { return companyAddress != null } - private fun choosePoint(type: Int){ - MapCenterPointStrategy.setMapCenterPointByScene(SearchServiceHolder.getMapUIController(), Scene.CHOOSE_POINT) - val builder = FragmentDescriptor.Builder() - builder.fragment(SettingAddressFragment.newInstance(type)) - val build = builder.tag(AMapConstants.PATH_FRAGMENT_SETTING_HOME).build() - SearchServiceHolder.fragmentManager.push(build) - } - private lateinit var context: Context @SuppressLint("CheckResult") fun init(context: Context) { @@ -64,7 +56,7 @@ object AddressManager { poiDao.companyAddress .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe { t1, t2 -> + .subscribe { t1, _ -> if (t1.size > 0) { companyAddress = t1[0] } @@ -73,7 +65,7 @@ object AddressManager { poiDao.homeAddress .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe { t1, t2 -> + .subscribe { t1, _ -> if (t1.size > 0) { homeAddress = t1[0] } @@ -90,7 +82,7 @@ object AddressManager { } } - fun deleteHome(context: Context) { + fun deleteHome() { Observable.create( ObservableOnSubscribe { poiDao.delete(homeAddress) @@ -105,7 +97,7 @@ object AddressManager { } - fun deleteCompany(context: Context) { + fun deleteCompany() { Observable.create( ObservableOnSubscribe { poiDao.delete(companyAddress) @@ -122,8 +114,6 @@ object AddressManager { * 回家 */ fun goHome() { - closeADAS() - SearchServiceHolder.statusManager.setSearchUIShow(TAG, true) if (homeAddress == null) { choosePoint(DataConstants.TYPE_HOME_ADDRESS) } else { @@ -131,14 +121,18 @@ object AddressManager { } } + private fun choosePoint(type: Int) { + beforePushFragment() + MapCenterPointStrategy.setMapCenterPointByScene(SearchApisHolder.getUiControllerApis(), Scene.CHOOSE_POINT) + pushFragment(SettingAddressFragment.newInstance(type), AMapConstants.PATH_FRAGMENT_SETTING_HOME, true) + } + /** * 去公司 */ fun goCompany() { - closeADAS() - SearchServiceHolder.statusManager.setSearchUIShow(TAG, true) if (companyAddress == null) { - choosePoint( DataConstants.TYPE_COMPANY_ADDRESS) + choosePoint(DataConstants.TYPE_COMPANY_ADDRESS) } else { calculatePath(EntityConvertUtils.poi2MogoTip(companyAddress).point) } @@ -148,14 +142,8 @@ object AddressManager { * 搜索 */ fun goSearch() { - closeADAS() - SearchServiceHolder.statusManager.setSearchUIShow(TAG, true) - SearchServiceHolder.fragmentManager.push( - FragmentDescriptor.Builder().fragment(SearchFragment()) - .tag(AMapConstants.PATH_FRAGMENT_SEARCH) - .notifyMainModule(true) - .build() - ) + beforePushFragment() + pushFragment(SearchFragment(), AMapConstants.PATH_FRAGMENT_SEARCH, true) } /** @@ -163,34 +151,43 @@ object AddressManager { */ fun calculatePath(destination: MogoLatLng?) { destination?.let { - closeADAS() - var newInstance = ChoosePathFragment.newInstance(destination) - SearchServiceHolder.push(newInstance, AMapConstants.PATH_FRAGMENT_CHOOSE_PATH) + beforePushFragment() + MapCenterPointStrategy.setMapCenterPointByScene(SearchApisHolder.getUiControllerApis(), Scene.CALCULATE_PATH) + pushFragment(ChoosePathFragment.newInstance(destination), AMapConstants.PATH_FRAGMENT_CHOOSE_PATH, true) } } - fun categorySearch(category: String){ - closeADAS() - val searchFragment = CategorySearchFragment.newInstance(category) - SearchServiceHolder.fragmentManager.push(FragmentDescriptor.Builder().fragment(searchFragment) - .tag(AMapConstants.PATH_FRAGMENT_SEARCH_CATEGORY) - .notifyMainModule(true) - .build()) + fun categorySearch(category: String) { + beforePushFragment() + pushFragment(CategorySearchFragment.newInstance(category), AMapConstants.PATH_FRAGMENT_SEARCH_CATEGORY, true) } - fun goSettings(){ + fun goSettings() { + beforePushFragment() + pushFragment(NaviSettingFragment(), AMapConstants.PATH_FRAGMENT_NAVI_SETTING, true) + } + + private fun beforePushFragment() { closeADAS() - val naviSettingFragment = NaviSettingFragment() - SearchServiceHolder.fragmentManager.push(FragmentDescriptor.Builder().fragment(naviSettingFragment) - .tag(AMapConstants.PATH_FRAGMENT_NAVI_SETTING) - .notifyMainModule(true) - .build()) + if (!SearchApisHolder.getStatusManager().isSearchUIShow) { + SearchApisHolder.getStatusManager().setSearchUIShow(TAG, true) + } + } + + private fun pushFragment(fragment: Fragment, tag: String, notifyMain: Boolean) { + SearchApisHolder.getFragmentManager().push( + FragmentDescriptor.Builder() + .fragment(fragment) + .tag(tag) + .notifyMainModule(notifyMain) + .build() + ) } private fun closeADAS() { try { - SearchServiceHolder.apis.adasControllerApi.closeADAS() + SearchApisHolder.getApis().adasControllerApi.closeADAS() } catch (e: Exception) { e.printStackTrace() } diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/MogoSearchManager.java b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/MogoSearchManager.java index dfd463a490..db988b10af 100644 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/MogoSearchManager.java +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/MogoSearchManager.java @@ -2,18 +2,10 @@ package com.mogo.module.navi.manager; import android.content.Context; -import androidx.fragment.app.Fragment; - import com.alibaba.android.arouter.facade.annotation.Route; import com.mogo.map.MogoLatLng; -import com.mogo.map.constants.BroadcastMode; -import com.mogo.module.common.MogoModulePaths; -import com.mogo.module.navi.constants.AMapConstants; -import com.mogo.module.navi.constants.SearchServiceHolder; -import com.mogo.module.navi.ui.search.CategorySearchFragment; -import com.mogo.module.navi.ui.search.SearchFragment; +import com.mogo.module.navi.constants.SearchApisHolder; import com.mogo.service.MogoServicePaths; -import com.mogo.service.fragmentmanager.FragmentDescriptor; import com.mogo.service.module.IMogoSearchManager; /** @@ -34,24 +26,12 @@ public class MogoSearchManager implements IMogoSearchManager { @Override public void showSearch() { + if ( SearchApisHolder.getNaviApis().isNaviing() ) { + return; + } AddressManager.INSTANCE.goSearch(); } - @Override - public void showMain() { - SearchServiceHolder.INSTANCE.getFragmentManager().clearAll(); - } - - @Override - public void speakDraft() { - SearchServiceHolder.INSTANCE.getNavi().setBroadcastMode( BroadcastMode.CONCISE ); - } - - @Override - public void speakDetail() { - SearchServiceHolder.INSTANCE.getNavi().setBroadcastMode( BroadcastMode.DETAIL ); - } - @Override public void categorySearch( String keyword ) { AddressManager.INSTANCE.categorySearch( keyword ); @@ -70,7 +50,6 @@ public class MogoSearchManager implements IMogoSearchManager { @Override public void init( Context context ) { AddressManager.INSTANCE.init( context ); - SearchServiceHolder.INSTANCE.init( context ); SettingManager.INSTANCE.init( context ); } } diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/MogoSettingManager.java b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/MogoSettingManager.java index c5272a9e4e..89e2199d60 100644 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/MogoSettingManager.java +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/MogoSettingManager.java @@ -1,7 +1,7 @@ package com.mogo.module.navi.manager; import android.content.Context; -import android.content.SharedPreferences; + import com.alibaba.android.arouter.facade.annotation.Route; import com.mogo.service.MogoServicePaths; import com.mogo.service.module.IMogoSettingManager; @@ -14,23 +14,49 @@ import com.mogo.service.module.IMogoSettingManager; @Route( path = MogoServicePaths.PATH_SETTING_MANAGER ) public class MogoSettingManager implements IMogoSettingManager { - @Override public int getPathPrefer() { + @Override + public int getPathPrefer() { return SettingManager.INSTANCE.getPathPrefer(); } - @Override public int getVolume() { + @Override + public int getVolume() { return SettingManager.INSTANCE.getVolume(); } - @Override public int getVoiceStyle() { + @Override + public int getVoiceStyle() { return SettingManager.INSTANCE.getVoiceStyle(); } - @Override public int getMapType() { + @Override + public int getMapType() { return SettingManager.INSTANCE.getMapType(); } - @Override public void init(Context context) { - SettingManager.INSTANCE.init(context); + @Override + public void init( Context context ) { + SettingManager.INSTANCE.init( context ); + } + + + @Override + public void speakDraft() { + SettingManager.INSTANCE.speakDraft(); + } + + @Override + public void speakDetail() { + SettingManager.INSTANCE.speakDetail(); + } + + @Override + public void openAimlessMode() { + SettingManager.INSTANCE.openAimlessMode(); + } + + @Override + public void closeAimlessMode() { + SettingManager.INSTANCE.closeAimlessMode(); } } diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/SettingManager.kt b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/SettingManager.kt index 4237428e43..064460aa8c 100644 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/SettingManager.kt +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/SettingManager.kt @@ -2,9 +2,9 @@ package com.mogo.module.navi.manager import android.content.Context import android.content.SharedPreferences -import com.mogo.map.navi.MogoNaviConfig +import com.mogo.map.constants.BroadcastMode import com.mogo.module.navi.R -import com.mogo.module.navi.constants.SearchServiceHolder +import com.mogo.module.navi.constants.SearchApisHolder import com.mogo.service.module.IMogoSettingManager /** @@ -187,7 +187,7 @@ object SettingManager : IMogoSettingManager { } private fun updateConfig() { - SearchServiceHolder.getNavi() + SearchApisHolder.getNaviApis() .naviConfig .cost(cost) .avoidSpeed(avoidSpeed) @@ -195,12 +195,31 @@ object SettingManager : IMogoSettingManager { .congestion(congestion) } - fun setAimlessMode(type: Int){ + fun setAimlessMode(type: Int) { settings.edit().putInt(KEY_AIMLESS_MODE_TYPE, type).apply() } - fun getAimlessMode():Int { + fun getAimlessMode(): Int { return settings.getInt(KEY_AIMLESS_MODE_TYPE, R.id.aimlessModeClose) } + override fun speakDraft() { + voiceStyle = R.id.rb_navi_draft + SearchApisHolder.getNaviApis().setBroadcastMode(BroadcastMode.CONCISE) + } + + override fun speakDetail() { + voiceStyle = R.id.rb_navi_detail + SearchApisHolder.getNaviApis().setBroadcastMode(BroadcastMode.DETAIL) + } + + override fun openAimlessMode() { + setAimlessMode(R.id.aimlessModeOpen) + SearchApisHolder.getNaviApis().setAimlessModeStatus(true) + } + + override fun closeAimlessMode() { + setAimlessMode(R.id.aimlessModeClose) + SearchApisHolder.getNaviApis().setAimlessModeStatus(false) + } } diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/NaviActivity.kt b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/NaviActivity.kt deleted file mode 100644 index 70eb32f28f..0000000000 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/NaviActivity.kt +++ /dev/null @@ -1,20 +0,0 @@ -package com.mogo.module.navi.ui - -import android.os.Bundle -import androidx.fragment.app.Fragment -import com.alibaba.android.arouter.launcher.ARouter -import com.mogo.module.navi.R -import com.mogo.module.navi.ui.base.BaseActivity - -class NaviActivity : BaseActivity() { - - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_navi) - var fragment = ARouter.getInstance() - .build("/navi/search") - .navigation() as Fragment - supportFragmentManager.beginTransaction().replace(R.id.fl_container,fragment).commitNow() - } -} diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/base/BaseFragment.java b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/base/BaseFragment.java index 73b329da13..4843914c4a 100644 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/base/BaseFragment.java +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/base/BaseFragment.java @@ -6,12 +6,12 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Toast; + import androidx.annotation.IdRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; -import com.mogo.module.common.MogoModulePaths; -import com.mogo.module.navi.constants.SearchServiceHolder; + import com.mogo.utils.NetworkUtils; /** diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/BaseSearchFragment.java b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/BaseSearchFragment.java index a1651a052a..59be513933 100644 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/BaseSearchFragment.java +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/BaseSearchFragment.java @@ -101,10 +101,6 @@ public abstract class BaseSearchFragment extends BaseFragment implements SearchV return mSearchType; } - @Override public void startJumpAnimation() { - - } - //@Override //public void renderChoicePointResult( RegeocodeAddress address ) { // if ( address == null ) { diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/CategoryPresenter.java b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/CategoryPresenter.java index 4dc1c77384..13ca942301 100644 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/CategoryPresenter.java +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/CategoryPresenter.java @@ -1,41 +1,17 @@ package com.mogo.module.navi.ui.search; -import android.app.AlertDialog; -import android.text.Editable; -import android.text.TextUtils; -import android.widget.EditText; import androidx.annotation.NonNull; import androidx.lifecycle.LifecycleOwner; -import com.alibaba.android.arouter.launcher.ARouter; + import com.mogo.commons.mvp.Presenter; import com.mogo.map.search.geo.MogoPoiItem; -import com.mogo.map.search.inputtips.IMogoInputtipsListener; -import com.mogo.map.search.inputtips.IMogoInputtipsSearch; -import com.mogo.map.search.inputtips.MogoTip; -import com.mogo.map.search.inputtips.query.MogoInputtipsQuery; import com.mogo.map.search.poisearch.IMogoPoiSearch; import com.mogo.map.search.poisearch.IMogoPoiSearchListener; import com.mogo.map.search.poisearch.MogoPoiResult; import com.mogo.map.search.poisearch.query.MogoPoiSearchQuery; -import com.mogo.module.common.TextWatcherAdapter; -import com.mogo.module.navi.bean.EntityConvertUtils; -import com.mogo.module.navi.bean.SearchPoi; -import com.mogo.module.navi.constants.DataConstants; -import com.mogo.module.navi.constants.SearchServiceHolder; -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.Single; -import io.reactivex.SingleEmitter; -import io.reactivex.android.schedulers.AndroidSchedulers; +import com.mogo.module.navi.constants.SearchApisHolder; + import io.reactivex.disposables.CompositeDisposable; -import io.reactivex.disposables.Disposable; -import io.reactivex.functions.Consumer; -import io.reactivex.schedulers.Schedulers; -import java.util.List; /** * @author congtaowang @@ -43,55 +19,50 @@ import java.util.List; *

* 搜搜页逻辑处理 */ -public class CategoryPresenter extends Presenter { +public class CategoryPresenter extends Presenter< CategoryView > { private CompositeDisposable mCompositeDisposable; - private IMogoMapService mMapService; - public CategoryPresenter(CategoryView view) { - super(view); + public CategoryPresenter( CategoryView view ) { + super( view ); mCompositeDisposable = new CompositeDisposable(); } @Override - public void onCreate(@NonNull LifecycleOwner owner) { - super.onCreate(owner); - mMapService = (IMogoMapService) ARouter.getInstance() - .build(MogoServicePaths.PATH_SERVICES_MAP) - .navigation(getContext()); + public void onCreate( @NonNull LifecycleOwner owner ) { + super.onCreate( owner ); } - public void startSearchLocalPoiByInput(String keyword) { - MogoPoiSearchQuery mogoInputtipsQuery = new MogoPoiSearchQuery(keyword, keyword); - mogoInputtipsQuery.setPageSize(10); - mogoInputtipsQuery.setLocation( - SearchServiceHolder.INSTANCE.getMapUIController().getWindowCenterLocation()); - IMogoPoiSearch inputtipsSearch = - mMapService.getPoiSearch(getContext(), mogoInputtipsQuery); + public void startSearchLocalPoiByInput( String keyword ) { - inputtipsSearch.setPoiSearchListener(new IMogoPoiSearchListener() { - @Override public void onPoiSearched(MogoPoiResult result, int errorCode) { + MogoPoiSearchQuery poiSearchQuery = new MogoPoiSearchQuery( keyword, keyword ); + poiSearchQuery.setPageSize( 10 ); + poiSearchQuery.setLocation( SearchApisHolder.getUiControllerApis().getWindowCenterLocation() ); + IMogoPoiSearch poiSearch = SearchApisHolder.getMapServiceApis().getPoiSearch( getContext(), poiSearchQuery ); + + poiSearch.setPoiSearchListener( new IMogoPoiSearchListener() { + @Override + public void onPoiSearched( MogoPoiResult result, int errorCode ) { if ( result != null ) { - mView.renderSearchPoiResult(result.getPois()); + mView.renderSearchPoiResult( result.getPois() ); } } - @Override public void onPoiItemSearched(MogoPoiItem item, int errorCode) { + @Override + public void onPoiItemSearched( MogoPoiItem item, int errorCode ) { } - }); - inputtipsSearch.searchPOIAsyn(); + } ); + poiSearch.searchPOIAsyn(); } - @Override - public void onDestroy(@NonNull LifecycleOwner owner) { - super.onDestroy(owner); - if (mCompositeDisposable != null && !mCompositeDisposable.isDisposed()) { + public void onDestroy( @NonNull LifecycleOwner owner ) { + super.onDestroy( owner ); + if ( mCompositeDisposable != null && !mCompositeDisposable.isDisposed() ) { mCompositeDisposable.dispose(); mCompositeDisposable = null; } - //CameraChangedLiveData.getInstance().removeAllObserver(); } } 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 3fbb093871..1d5fc1d0af 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 @@ -4,7 +4,6 @@ import android.graphics.Bitmap import android.graphics.BitmapFactory import android.graphics.Rect import android.os.Bundle -import android.text.TextUtils import android.view.View import androidx.fragment.app.Fragment import androidx.recyclerview.widget.LinearLayoutManager @@ -15,26 +14,16 @@ import com.mogo.map.marker.IMogoMarker import com.mogo.map.marker.IMogoMarkerClickListener import com.mogo.map.marker.MogoMarkerOptions import com.mogo.map.search.geo.MogoPoiItem -import com.mogo.map.search.inputtips.MogoTip -import com.mogo.module.common.MogoModulePaths import com.mogo.module.common.map.MapCenterPointStrategy import com.mogo.module.common.map.Scene import com.mogo.module.navi.R -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.constants.SearchApisHolder import com.mogo.module.navi.manager.AddressManager import com.mogo.module.navi.ui.adapter.SearchCategoryAdapter import com.mogo.module.navi.ui.base.BaseFragment import com.mogo.module.navi.uitls.BitmapUtils import com.mogo.module.navi.uitls.StringUtils -import com.mogo.utils.UiThreadHandler -import kotlinx.android.synthetic.main.fragment_search_category.cv_search_result -import kotlinx.android.synthetic.main.fragment_search_category.et_navi_search -import kotlinx.android.synthetic.main.fragment_search_category.iv_navi_back -import kotlinx.android.synthetic.main.fragment_search_category.pb_path -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.fragment_search_category.* /** * @author zyz @@ -112,7 +101,7 @@ class CategorySearchFragment : BaseFragment(), CategoryView, IMogoVoiceCmdCallBa private fun addMarkers() { addMarkers.clear() var marginBounder = resources.getDimensionPixelSize(R.dimen.dp_60) * 2 - SearchServiceHolder.getMapUIController().showBounds(TAG, + SearchApisHolder.getUiControllerApis().showBounds(TAG, null, locationList, Rect(cv_search_result.width + marginBounder, marginBounder, marginBounder, marginBounder), @@ -120,7 +109,7 @@ class CategorySearchFragment : BaseFragment(), CategoryView, IMogoVoiceCmdCallBa ) for (options in arrayList) { - var addMarker = SearchServiceHolder.getMarkerManger().addMarker(TAG, options) + var addMarker = SearchApisHolder.getMarkerManager().addMarker(TAG, options) addMarker.onMarkerClickListener = this addMarkers.add(addMarker) } @@ -180,7 +169,7 @@ class CategorySearchFragment : BaseFragment(), CategoryView, IMogoVoiceCmdCallBa iv_navi_back.setOnClickListener { - SearchServiceHolder.fragmentManager.pop() + SearchApisHolder.getFragmentManager().pop() } tv_navi_navi.setOnClickListener { @@ -210,8 +199,8 @@ class CategorySearchFragment : BaseFragment(), CategoryView, IMogoVoiceCmdCallBa 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) + SearchApisHolder.getStatusManager().setUserInteractionStatus(TAG, true, false) + SearchApisHolder.getUiControllerApis().moveToCenter(current.position, true) } } @@ -236,7 +225,7 @@ class CategorySearchFragment : BaseFragment(), CategoryView, IMogoVoiceCmdCallBa super.onDestroyView() mSearchPresenter.onDestroy(viewLifecycleOwner) lifecycle.removeObserver(mSearchPresenter) - SearchServiceHolder.getMarkerManger().removeMarkers(TAG) + SearchApisHolder.getMarkerManager().removeMarkers(TAG) unRegisterVoice() } @@ -253,7 +242,7 @@ class CategorySearchFragment : BaseFragment(), CategoryView, IMogoVoiceCmdCallBa companion object { fun newInstance(category: String): Fragment { - MapCenterPointStrategy.setMapCenterPointByScene(SearchServiceHolder.getMapUIController(), Scene.CATEGORY_SEARCH) + MapCenterPointStrategy.setMapCenterPointByScene(SearchApisHolder.getUiControllerApis(), Scene.CATEGORY_SEARCH) var bundle = Bundle() bundle.putString("category", category) var categorySerachFragment = CategorySearchFragment() 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 index 0abd48fc46..c3d8767760 100644 --- 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 @@ -11,13 +11,10 @@ import com.mogo.commons.voice.IMogoVoiceCmdCallBack import com.mogo.map.MogoLatLng import com.mogo.map.navi.IMogoNaviListener import com.mogo.map.navi.MogoCalculatePath -import com.mogo.map.navi.MogoNaviConfig -import com.mogo.module.common.map.MapCenterPointStrategy -import com.mogo.module.common.map.Scene import com.mogo.module.navi.R import com.mogo.module.navi.constants.AMapConstants import com.mogo.module.navi.constants.DataConstants -import com.mogo.module.navi.constants.SearchServiceHolder +import com.mogo.module.navi.constants.SearchApisHolder import com.mogo.module.navi.manager.SettingManager import com.mogo.module.navi.ui.adapter.CalculatePathAdapter import com.mogo.module.navi.ui.base.BaseFragment @@ -72,7 +69,7 @@ class ChoosePathFragment : BaseFragment(), IMogoNaviListener, IMogoVoiceCmdCallB retry() } "cancel" -> { - SearchServiceHolder.fragmentManager.clearAll() + SearchApisHolder.getFragmentManager().clearAll() } } } @@ -84,7 +81,7 @@ class ChoosePathFragment : BaseFragment(), IMogoNaviListener, IMogoVoiceCmdCallB } override fun onCalculateSuccess() { - var calculatedStrategies = SearchServiceHolder.getNavi().calculatedStrategies + var calculatedStrategies = SearchApisHolder.getNaviApis().calculatedStrategies if (calculatedStrategies != null && calculatedStrategies.size > 0) { mAdapter.setDatas(calculatedStrategies) mAdapter.selectTag = calculatedStrategies[0].tagId @@ -95,7 +92,9 @@ class ChoosePathFragment : BaseFragment(), IMogoNaviListener, IMogoVoiceCmdCallB if (calculatedStrategies.isNullOrEmpty()) { return@postDelayed } - SearchServiceHolder.getNavi().itemClickInteraction.onItemClicked(calculatedStrategies[0].tagId) + if (SearchApisHolder.getNaviApis().itemClickInteraction != null) { + SearchApisHolder.getNaviApis().itemClickInteraction.onItemClicked(calculatedStrategies[0].tagId) + } if (calculatedStrategies.size == 1) { // 一条路线,自动开启导航 @@ -157,16 +156,16 @@ class ChoosePathFragment : BaseFragment(), IMogoNaviListener, IMogoVoiceCmdCallB super.onViewCreated(view, savedInstanceState) iv_navi_back.setOnClickListener { - SearchServiceHolder.fragmentManager.pop() + SearchApisHolder.getFragmentManager().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().naviTo(mogoTip) + SearchApisHolder.getNaviApis().naviTo(mogoTip) - SearchServiceHolder.listenerCenter.registerMogoNaviListener(AMapConstants.PATH_FRAGMENT_CHOOSE_PATH, this) + SearchApisHolder.getRegisterCenterApis().registerMogoNaviListener(AMapConstants.PATH_FRAGMENT_CHOOSE_PATH, this) var arrayList = ArrayList() mAdapter = CalculatePathAdapter(activity, arrayList) @@ -181,7 +180,7 @@ class ChoosePathFragment : BaseFragment(), IMogoNaviListener, IMogoVoiceCmdCallB } } - SearchServiceHolder.getNavi().setLineClickInteraction { + SearchApisHolder.getNaviApis().setLineClickInteraction { mAdapter.selectTag = it } @@ -190,7 +189,7 @@ class ChoosePathFragment : BaseFragment(), IMogoNaviListener, IMogoVoiceCmdCallB selectPath(item) } - SearchServiceHolder.getMarkerManger().removeMarkers() + SearchApisHolder.getMarkerManager().removeMarkers() DataConstants.sCmds.entries.filter { it != null && !TextUtils.isEmpty(it.key) && (it.value?.isNotEmpty() ?: false) @@ -198,8 +197,8 @@ class ChoosePathFragment : BaseFragment(), IMogoNaviListener, IMogoVoiceCmdCallB AIAssist.getInstance(mContext).registerUnWakeupCommand(it.key, it.value, this@ChoosePathFragment) } - SearchServiceHolder.intentManager.registerIntentListener(AMapConstants.COMMAND_START_NAVI, this) - SearchServiceHolder.intentManager.registerIntentListener(AMapConstants.COMMAND_CHOOSE_PATH, this) + SearchApisHolder.getIntentManager().registerIntentListener(AMapConstants.COMMAND_START_NAVI, this) + SearchApisHolder.getIntentManager().registerIntentListener(AMapConstants.COMMAND_CHOOSE_PATH, this) } private fun registerRetryVoice() { @@ -211,7 +210,7 @@ class ChoosePathFragment : BaseFragment(), IMogoNaviListener, IMogoVoiceCmdCallB } private fun retry() { - SearchServiceHolder.getNavi().naviTo(mogoTip) + SearchApisHolder.getNaviApis().naviTo(mogoTip) pb_path.visibility = View.VISIBLE group_path.visibility = View.GONE } @@ -221,28 +220,30 @@ class ChoosePathFragment : BaseFragment(), IMogoNaviListener, IMogoVoiceCmdCallB return } - SearchServiceHolder.getNavi().startNavi(!SettingManager.isMonitor()) - SearchServiceHolder.getMapUIController().recoverLockMode() + SearchApisHolder.getNaviApis().startNavi(!SettingManager.isMonitor()) + SearchApisHolder.getUiControllerApis().recoverLockMode() - if (SearchServiceHolder.guideShowProvider.isPlayingVideo()) { - SearchServiceHolder.guideShowProvider.closeGuideShowView() + if (SearchApisHolder.getGuideShowApis().isPlayingVideo()) { + SearchApisHolder.getGuideShowApis().closeGuideShowView() } isStartedNavi = true - SearchServiceHolder.fragmentManager.clearAll() + SearchApisHolder.getFragmentManager().clearAll() } private fun selectPath(item: MogoCalculatePath?) { item?.let { mAdapter.setSelectTag(item.tagId) - SearchServiceHolder.getNavi().itemClickInteraction.onItemClicked(item.tagId) + if (SearchApisHolder.getNaviApis().itemClickInteraction != null) { + SearchApisHolder.getNaviApis().itemClickInteraction.onItemClicked(item.tagId) + } } } override fun onDestroyView() { super.onDestroyView() - SearchServiceHolder.listenerCenter.unregisterMogoNaviListener(AMapConstants.PATH_FRAGMENT_CHOOSE_PATH) + SearchApisHolder.getRegisterCenterApis().unregisterMogoNaviListener(AMapConstants.PATH_FRAGMENT_CHOOSE_PATH) if (!isStartedNavi) { - SearchServiceHolder.getNavi().clearCalculatePaths() + SearchApisHolder.getNaviApis().clearCalculatePaths() } DataConstants.sCmds.entries.filter { @@ -251,8 +252,8 @@ class ChoosePathFragment : BaseFragment(), IMogoNaviListener, IMogoVoiceCmdCallB AIAssist.getInstance(mContext).unregisterUnWakeupCommand(it.key) } - SearchServiceHolder.intentManager.unregisterIntentListener(AMapConstants.COMMAND_START_NAVI, this) - SearchServiceHolder.intentManager.unregisterIntentListener(AMapConstants.COMMAND_CHOOSE_PATH, this) + SearchApisHolder.getIntentManager().unregisterIntentListener(AMapConstants.COMMAND_START_NAVI, this) + SearchApisHolder.getIntentManager().unregisterIntentListener(AMapConstants.COMMAND_CHOOSE_PATH, this) } override fun onIntentReceived(intentStr: String?, intent: Intent?) { @@ -294,7 +295,6 @@ class ChoosePathFragment : BaseFragment(), IMogoNaviListener, IMogoVoiceCmdCallB val TAG: String = "ChoosePathFragment" fun newInstance(searchPoi: MogoLatLng): Fragment { - MapCenterPointStrategy.setMapCenterPointByScene(SearchServiceHolder.getMapUIController(), Scene.CALCULATE_PATH) var bundle = Bundle() bundle.putParcelable(AMapConstants.KEY_PARCELABLE, searchPoi) var choosePathFragment = 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 00a7321047..6e2d965b2f 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 @@ -2,34 +2,29 @@ package com.mogo.module.navi.ui.search; import android.content.Context; import android.os.Bundle; -import android.os.health.ServiceHealthStats; import android.text.TextUtils; import android.view.View; import android.widget.TextView; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; -import com.alibaba.android.arouter.facade.annotation.Route; -import com.mogo.commons.analytics.AnalyticsUtils; + import com.mogo.commons.voice.AIAssist; import com.mogo.commons.voice.IMogoVoiceCmdCallBack; 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.SearchApisHolder; import com.mogo.module.navi.manager.AddressManager; -import com.mogo.module.navi.constants.SearchServiceHolder; import com.mogo.module.navi.ui.adapter.HistoryPoiAdapter; import com.mogo.module.navi.ui.adapter.SearchPoiAdapter; import com.mogo.module.navi.ui.base.UiController; -import com.mogo.module.navi.ui.setting.NaviSettingFragment; import com.mogo.module.navi.uitls.StringUtils; -import com.mogo.service.fragmentmanager.FragmentDescriptor; import com.mogo.service.fragmentmanager.FragmentStackTransactionListener; + import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -45,8 +40,8 @@ import java.util.List; * {@link SearchConstants#SEARCH_TYPE_MULTI_HOME} */ public class SearchFragment extends BaseSearchFragment - implements SearchView, View.OnClickListener, IMogoVoiceCmdCallBack, - FragmentStackTransactionListener { + implements SearchView, View.OnClickListener, IMogoVoiceCmdCallBack, + FragmentStackTransactionListener { public static final String TAG = "search"; @@ -72,14 +67,15 @@ public class SearchFragment extends BaseSearchFragment private TextView tvEmpty; @Override - public void onAttach(Context context) { - super.onAttach(context); - if (context instanceof UiController) { + public void onAttach( Context context ) { + super.onAttach( context ); + if ( context instanceof UiController ) { } } - @Override public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); + @Override + public void onCreate( @Nullable Bundle savedInstanceState ) { + super.onCreate( savedInstanceState ); } @Override @@ -88,114 +84,117 @@ public class SearchFragment extends BaseSearchFragment } @Override - public void onActivityCreated(@Nullable Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - SearchServiceHolder.INSTANCE.getMarkerManger().removeMarkers(); - SearchServiceHolder.INSTANCE.getMapUIController().showMyLocation(false); + public void onActivityCreated( @Nullable Bundle savedInstanceState ) { + super.onActivityCreated( savedInstanceState ); + SearchApisHolder.getMarkerManager().removeMarkers(); + SearchApisHolder.getUiControllerApis().showMyLocation( false ); } - @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - mSearchResult = view.findViewById(R.id.rv_navi_search); - rvHistory = view.findViewById(R.id.rv_navi_history); - rlHistory = view.findViewById(R.id.rl_navi_history); + @Override + public void onViewCreated( @NonNull View view, @Nullable Bundle savedInstanceState ) { + super.onViewCreated( view, savedInstanceState ); + 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); + new LinearLayoutManager( getActivity(), LinearLayoutManager.VERTICAL, false ); - rvHistory.setLayoutManager(linearManager); + rvHistory.setLayoutManager( linearManager ); LinearLayoutManager linearLayoutManager = - new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false); - mSearchResult.setLayoutManager(linearLayoutManager); + new LinearLayoutManager( getActivity(), LinearLayoutManager.VERTICAL, false ); + mSearchResult.setLayoutManager( linearLayoutManager ); - mPoiAdapter = new SearchPoiAdapter(getActivity(), new ArrayList<>()); - mSearchResult.setAdapter(mPoiAdapter); + mPoiAdapter = new SearchPoiAdapter( getActivity(), new ArrayList<>() ); + mSearchResult.setAdapter( mPoiAdapter ); - mHistoryAdapter = new HistoryPoiAdapter(getActivity(), new ArrayList<>()); - rvHistory.setAdapter(mHistoryAdapter); + mHistoryAdapter = new HistoryPoiAdapter( getActivity(), new ArrayList<>() ); + rvHistory.setAdapter( mHistoryAdapter ); - tvEmpty = findViewById(R.id.tv_navi_list_empty); + tvEmpty = findViewById( R.id.tv_navi_list_empty ); - findViewById(R.id.iv_navi_back).setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - SearchServiceHolder.INSTANCE.getFragmentManager().pop(); + findViewById( R.id.iv_navi_back ).setOnClickListener( v -> { + SearchApisHolder.getFragmentManager().pop(); + } ); + + mHistoryAdapter.setOnClickListener( new View.OnClickListener() { + @Override + public void onClick( View v ) { + SearchApisHolder.getAnalyticsApis().track( "Navigation_History_destination", new HashMap< String, Object >() ); + SearchPoi item = ( SearchPoi ) v.getTag( R.id.tag_item ); + goHistory( item ); } - }); + } ); - mHistoryAdapter.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - SearchServiceHolder.INSTANCE.getAnalyticsManager() - .track("Navigation_History_destination", new HashMap()); - SearchPoi item = (SearchPoi) v.getTag(R.id.tag_item); - goHistory(item); + mPoiAdapter.setOnClickListener( new View.OnClickListener() { + @Override + public void onClick( View v ) { + MogoTip tag = ( MogoTip ) v.getTag( R.id.tag_position ); + goResult( tag ); } - }); + } ); - mPoiAdapter.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - MogoTip tag = (MogoTip) v.getTag(R.id.tag_position); - goResult(tag); - } - }); - - findViewById(R.id.tv_navi_history_clear).setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { + findViewById( R.id.tv_navi_history_clear ).setOnClickListener( new View.OnClickListener() { + @Override + public void onClick( View v ) { mSearchPresenter.deleteAllCachedPoi(); } - }); + } ); - findViewById(R.id.tv_navi_setting).setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { + findViewById( R.id.tv_navi_setting ).setOnClickListener( new View.OnClickListener() { + @Override + public void onClick( View v ) { goSetting(); } - }); + } ); - findViewById(R.id.tv_navi_company).setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { + findViewById( R.id.tv_navi_company ).setOnClickListener( new View.OnClickListener() { + @Override + public void onClick( View v ) { AddressManager.INSTANCE.goCompany(); } - }); + } ); - findViewById(R.id.tv_navi_home).setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { + findViewById( R.id.tv_navi_home ).setOnClickListener( new View.OnClickListener() { + @Override + public void onClick( View v ) { AddressManager.INSTANCE.goHome(); } - }); + } ); - findViewById(R.id.tv_navi_wash).setOnClickListener(this); - findViewById(R.id.tv_navi_toilet).setOnClickListener(this); - findViewById(R.id.tv_navi_gas).setOnClickListener(this); - findViewById(R.id.tv_navi_restaurant).setOnClickListener(this); - findViewById(R.id.tv_navi_park).setOnClickListener(this); + findViewById( R.id.tv_navi_wash ).setOnClickListener( this ); + findViewById( R.id.tv_navi_toilet ).setOnClickListener( this ); + findViewById( R.id.tv_navi_gas ).setOnClickListener( this ); + findViewById( R.id.tv_navi_restaurant ).setOnClickListener( this ); + findViewById( R.id.tv_navi_park ).setOnClickListener( this ); - findViewById(R.id.tv_navi_search).setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - SearchServiceHolder.INSTANCE.getAnalyticsManager() - .track("Navigation_button_search", new HashMap()); - - mSearchPresenter.startSearchPoiByInput(mSearchBox.getText().toString()); + findViewById( R.id.tv_navi_search ).setOnClickListener( new View.OnClickListener() { + @Override + public void onClick( View v ) { + SearchApisHolder.getAnalyticsApis().track( "Navigation_button_search", new HashMap< String, Object >() ); + mSearchPresenter.startSearchPoiByInput( mSearchBox.getText().toString() ); } - }); + } ); - registerVoidCmd(); + registerVoidCmd(); } - private void goResult(MogoTip tag) { - SearchPoi searchPoi = EntityConvertUtils.tipToPoi(tag); - if (tag.getPoint() == null) { - goCategory(tag.getName()); + private void goResult( MogoTip tag ) { + SearchPoi searchPoi = EntityConvertUtils.tipToPoi( tag ); + if ( tag.getPoint() == null ) { + goCategory( tag.getName() ); } else { - mSearchPresenter.insert(searchPoi); + mSearchPresenter.insert( searchPoi ); AddressManager.INSTANCE.calculatePath( tag.getPoint() ); } } private void goSetting() { - SearchServiceHolder.INSTANCE.getAnalyticsManager().track("Navigation_button_setting", new HashMap()); + SearchApisHolder.getAnalyticsApis().track( "Navigation_button_setting", new HashMap< String, Object >() ); AddressManager.INSTANCE.goSettings(); } - private void goHistory(SearchPoi item) { - MogoTip mogoTip = EntityConvertUtils.poi2MogoTip(item); + private void goHistory( SearchPoi item ) { + MogoTip mogoTip = EntityConvertUtils.poi2MogoTip( item ); AddressManager.INSTANCE.calculatePath( mogoTip.getPoint() ); } @@ -211,99 +210,95 @@ public class SearchFragment extends BaseSearchFragment private void registerVoidCmd() { - AIAssist.getInstance(getContext()) - .registerUnWakeupCommand(GO_HOME_CMD, new String[] { "回家" }, this); - AIAssist.getInstance(getContext()) - .registerUnWakeupCommand(GO_COMPANY_CMD, new String[] { "去公司" }, this); - AIAssist.getInstance(getContext()) - .registerUnWakeupCommand(GAS_CMD, new String[] { "加油站" }, this); - AIAssist.getInstance(getContext()) - .registerUnWakeupCommand(RESTAURANT_CMD, new String[] { "餐馆" }, this); - AIAssist.getInstance(getContext()) - .registerUnWakeupCommand(TOILET_CMD, new String[] { "卫生间", "厕所" }, this); - AIAssist.getInstance(getContext()) - .registerUnWakeupCommand(PARK_CMD, new String[] { "停车场" }, this); - AIAssist.getInstance(getContext()) - .registerUnWakeupCommand(NAVI_SETTING_CMD, new String[] { "导航设置" }, this); - AIAssist.getInstance(getContext()) - .registerUnWakeupCommand(CLEAN_CMD, new String[] { "清空历史目的地" }, this); - AIAssist.getInstance(getContext()) - .registerUnWakeupCommand(WASH_CMD, new String[] { "洗车" }, this); + AIAssist.getInstance( getContext() ) + .registerUnWakeupCommand( GO_HOME_CMD, new String[]{"回家"}, this ); + AIAssist.getInstance( getContext() ) + .registerUnWakeupCommand( GO_COMPANY_CMD, new String[]{"去公司"}, this ); + AIAssist.getInstance( getContext() ) + .registerUnWakeupCommand( GAS_CMD, new String[]{"加油站"}, this ); + AIAssist.getInstance( getContext() ) + .registerUnWakeupCommand( RESTAURANT_CMD, new String[]{"餐馆"}, this ); + AIAssist.getInstance( getContext() ) + .registerUnWakeupCommand( TOILET_CMD, new String[]{"卫生间", "厕所"}, this ); + AIAssist.getInstance( getContext() ) + .registerUnWakeupCommand( PARK_CMD, new String[]{"停车场"}, this ); + AIAssist.getInstance( getContext() ) + .registerUnWakeupCommand( NAVI_SETTING_CMD, new String[]{"导航设置"}, this ); + AIAssist.getInstance( getContext() ) + .registerUnWakeupCommand( CLEAN_CMD, new String[]{"清空历史目的地"}, this ); + AIAssist.getInstance( getContext() ) + .registerUnWakeupCommand( WASH_CMD, new String[]{"洗车"}, this ); } @Override - public void renderSearchPoiResult(List datums, boolean showDelete) { - if (datums == null || datums.isEmpty()) { - showEmpty(getString(R.string.search_empty)); + public void renderSearchPoiResult( List< MogoTip > datums, boolean showDelete ) { + if ( datums == null || datums.isEmpty() ) { + showEmpty( getString( R.string.search_empty ) ); return; } showResult(); - mPoiAdapter.setDatas(datums); + mPoiAdapter.setDatas( datums ); registerResult(); } - @Override public void showHistory(List datums) { + @Override + public void showHistory( List< SearchPoi > datums ) { - if (datums == null || datums.isEmpty()) { - showEmpty(getString(R.string.history_empty)); + if ( datums == null || datums.isEmpty() ) { + showEmpty( getString( R.string.history_empty ) ); return; } showHistory(); - mHistoryAdapter.setDatas(datums); + mHistoryAdapter.setDatas( datums ); registerHistory(); } private void registerHistory() { - List datums = mHistoryAdapter.getList(); - for (int i = 0; i < datums.size(); i++) { - String s = StringUtils.int2String(i + 1); - AIAssist.getInstance(getContext()) - .registerUnWakeupCommand("history" + i, - new String[] { "第" + s + "个", "第" + s + "条" }, this); - if (cmds.contains("history" + i)) { + List< SearchPoi > datums = mHistoryAdapter.getList(); + for ( int i = 0; i < datums.size(); i++ ) { + String s = StringUtils.int2String( i + 1 ); + AIAssist.getInstance( getContext() ) + .registerUnWakeupCommand( "history" + i, + new String[]{"第" + s + "个", "第" + s + "条"}, this ); + if ( cmds.contains( "history" + i ) ) { continue; } - cmds.add("history" + i); + cmds.add( "history" + i ); } } private void registerResult() { - List datums = mPoiAdapter.getList(); - for (int i = 0; i < datums.size(); i++) { - String s = StringUtils.int2String(i + 1); - AIAssist.getInstance(getContext()) - .registerUnWakeupCommand("history" + i, - new String[] { "第" + s + "个", "第" + s + "条" }, this); - if (cmds.contains("history" + i)) { + List< MogoTip > datums = mPoiAdapter.getList(); + for ( int i = 0; i < datums.size(); i++ ) { + String s = StringUtils.int2String( i + 1 ); + AIAssist.getInstance( getContext() ) + .registerUnWakeupCommand( "history" + i, + new String[]{"第" + s + "个", "第" + s + "条"}, this ); + if ( cmds.contains( "history" + i ) ) { continue; } - cmds.add("history" + i); + cmds.add( "history" + i ); } } - private List cmds = new ArrayList(); + private List< String > cmds = new ArrayList< String >(); @Override public int getSearchType() { return mSearchType; } - @Override public void startJumpAnimation() { - - } - - /** * 退出搜索,进行清理 */ private void exitSearch() { - switch (mSearchType) { + switch ( mSearchType ) { case SearchConstants.SEARCH_TYPE_COMMON: try { - } catch (Exception e) { + } catch ( Exception e ) { e.printStackTrace(); } break; @@ -313,97 +308,79 @@ public class SearchFragment extends BaseSearchFragment } private void showResult() { - rlHistory.setVisibility(View.GONE); - mSearchResult.setVisibility(View.VISIBLE); - tvEmpty.setVisibility(View.GONE); + 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); + 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); + private void showEmpty( String str ) { + rlHistory.setVisibility( View.GONE ); + tvEmpty.setText( str ); + mSearchResult.setVisibility( View.GONE ); + tvEmpty.setVisibility( View.VISIBLE ); } - private boolean isHistory(){ - return rlHistory.getVisibility()==View.VISIBLE; + private boolean isHistory() { + return rlHistory.getVisibility() == View.VISIBLE; } /** * 类别 */ - @Override public void onClick(View v) { - TextView category = (TextView) v; + @Override + public void onClick( View v ) { + TextView category = ( TextView ) v; String text = category.getText().toString(); - goCategory(text); + goCategory( text ); } - private void goCategory(String text) { + private void goCategory( String text ) { AddressManager.INSTANCE.categorySearch( text ); } - @Override public void onResume() { + @Override + public void onResume() { super.onResume(); } - @Override public void onPause() { + @Override + public void onPause() { super.onPause(); } @Override public void onDestroyView() { super.onDestroyView(); - SearchServiceHolder.INSTANCE.getMapUIController().showMyLocation(true); -// moveMapToRight(); + SearchApisHolder.getUiControllerApis().showMyLocation( true ); unRegisterVoice(); } private void unRegisterVoice() { - //private static final String GO_HOME_CMD="goHome"; - //private static final String GO_COMPANY_CMD="goCompany"; - //private static final String GAS_CMD="gas"; - //private static final String RESTAURANT_CMD="restaurant"; - //private static final String TOILET_CMD="toilet"; - //private static final String PARK_CMD="park"; - //private static final String WASH_CMD="wash"; - //private static final String NAVI_SETTING_CMD="setting"; - //private static final String CLEAN_CMD="clean"; - //private static final String BACK_CMD="back"; - AIAssist.getInstance(getContext()).unregisterUnWakeupCommand(GO_HOME_CMD); - AIAssist.getInstance(getContext()).unregisterUnWakeupCommand(GO_COMPANY_CMD); - AIAssist.getInstance(getContext()).unregisterUnWakeupCommand(GAS_CMD); - AIAssist.getInstance(getContext()).unregisterUnWakeupCommand(RESTAURANT_CMD); - AIAssist.getInstance(getContext()).unregisterUnWakeupCommand(TOILET_CMD); - AIAssist.getInstance(getContext()).unregisterUnWakeupCommand(PARK_CMD); - AIAssist.getInstance(getContext()).unregisterUnWakeupCommand(WASH_CMD); - AIAssist.getInstance(getContext()).unregisterUnWakeupCommand(NAVI_SETTING_CMD); - AIAssist.getInstance(getContext()).unregisterUnWakeupCommand(CLEAN_CMD); - for (String cmd : cmds) { - AIAssist.getInstance(getContext()).unregisterUnWakeupCommand(cmd); + AIAssist.getInstance( getContext() ).unregisterUnWakeupCommand( GO_HOME_CMD ); + AIAssist.getInstance( getContext() ).unregisterUnWakeupCommand( GO_COMPANY_CMD ); + AIAssist.getInstance( getContext() ).unregisterUnWakeupCommand( GAS_CMD ); + AIAssist.getInstance( getContext() ).unregisterUnWakeupCommand( RESTAURANT_CMD ); + AIAssist.getInstance( getContext() ).unregisterUnWakeupCommand( TOILET_CMD ); + AIAssist.getInstance( getContext() ).unregisterUnWakeupCommand( PARK_CMD ); + AIAssist.getInstance( getContext() ).unregisterUnWakeupCommand( WASH_CMD ); + AIAssist.getInstance( getContext() ).unregisterUnWakeupCommand( NAVI_SETTING_CMD ); + AIAssist.getInstance( getContext() ).unregisterUnWakeupCommand( CLEAN_CMD ); + for ( String cmd : cmds ) { + AIAssist.getInstance( getContext() ).unregisterUnWakeupCommand( cmd ); } } - //@Override public void onPause() { - // super.onPause(); - // unRegisterVoice(); - //} - // - //@Override public void onResume() { - // super.onResume(); - // registerVoidCmd(); - // registerHistory(); - //} - - @Override public void onHiddenChanged(boolean hidden) { - super.onHiddenChanged(hidden); - if (hidden) { + @Override + public void onHiddenChanged( boolean hidden ) { + super.onHiddenChanged( hidden ); + if ( hidden ) { unRegisterVoice(); } else { registerVoidCmd(); @@ -411,36 +388,37 @@ public class SearchFragment extends BaseSearchFragment } } - @Override public void onCmdSelected(String cmd) { - if (!TextUtils.isEmpty(cmd) && cmd.startsWith("history")) { - String index = cmd.substring(7); - Integer integer = Integer.valueOf(index); - if (isHistory()){ - if (integer < mHistoryAdapter.getItemCount()) { - SearchPoi item = mHistoryAdapter.getItem(integer); - goHistory(item); - } - }else { - if (integer < mPoiAdapter.getItemCount()) { - MogoTip item = mPoiAdapter.getItem(integer); - goResult(item); + @Override + public void onCmdSelected( String cmd ) { + if ( !TextUtils.isEmpty( cmd ) && cmd.startsWith( "history" ) ) { + String index = cmd.substring( 7 ); + Integer integer = Integer.valueOf( index ); + if ( isHistory() ) { + if ( integer < mHistoryAdapter.getItemCount() ) { + SearchPoi item = mHistoryAdapter.getItem( integer ); + goHistory( item ); + } + } else { + if ( integer < mPoiAdapter.getItemCount() ) { + MogoTip item = mPoiAdapter.getItem( integer ); + goResult( item ); } } return; } - switch (cmd) { + switch ( cmd ) { case CLEAN_CMD: mSearchPresenter.deleteAllCachedPoi(); - AIAssist.getInstance(getContext()) - .speakQAndACmd(getString(R.string.notice_clean_history), - new String[] { "确定","立即清空" }, new String[] { "取消" }, this); + AIAssist.getInstance( getContext() ) + .speakQAndACmd( getString( R.string.notice_clean_history ), + new String[]{"确定", "立即清空"}, new String[]{"取消"}, this ); break; case GAS_CMD: - goCategory(getString(R.string.navi_gas)); + goCategory( getString( R.string.navi_gas ) ); break; case GO_COMPANY_CMD: @@ -455,20 +433,20 @@ public class SearchFragment extends BaseSearchFragment break; case PARK_CMD: - goCategory(getString(R.string.navi_park)); + goCategory( getString( R.string.navi_park ) ); break; case RESTAURANT_CMD: - goCategory(getString(R.string.navi_restrant)); + goCategory( getString( R.string.navi_restrant ) ); break; case TOILET_CMD: - goCategory(getString(R.string.navi_toilet)); + goCategory( getString( R.string.navi_toilet ) ); break; case WASH_CMD: - goCategory(getString(R.string.navi_wash)); + goCategory( getString( R.string.navi_wash ) ); break; @@ -477,26 +455,31 @@ public class SearchFragment extends BaseSearchFragment } } - @Override public void onCmdAction(String speakText) { + @Override + public void onCmdAction( String speakText ) { mSearchPresenter.hideDialog(); mSearchPresenter.deleteAllCachedPoiImpl(); } - @Override public void onCmdCancel(String speakText) { + @Override + public void onCmdCancel( String speakText ) { mSearchPresenter.hideDialog(); } - @Override public void onSpeakEnd(String speakText) { + @Override + public void onSpeakEnd( String speakText ) { } - @Override public void onSpeakSelectTimeOut(String speakText) { + @Override + public void onSpeakSelectTimeOut( String speakText ) { } - @Override public void onTransaction(int size) { + @Override + public void onTransaction( int size ) { } } diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/SearchPresenter.java b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/SearchPresenter.java index c50fde48ec..d6ebbb5cfc 100644 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/SearchPresenter.java +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/SearchPresenter.java @@ -1,39 +1,36 @@ package com.mogo.module.navi.ui.search; -import android.app.AlertDialog; import android.text.Editable; import android.text.TextUtils; import android.view.View; import android.widget.EditText; + import androidx.annotation.NonNull; import androidx.lifecycle.LifecycleOwner; + import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.commons.mvp.Presenter; import com.mogo.map.location.MogoLocation; -import com.mogo.map.search.geo.MogoPoiItem; import com.mogo.map.search.inputtips.IMogoInputtipsListener; import com.mogo.map.search.inputtips.IMogoInputtipsSearch; import com.mogo.map.search.inputtips.MogoTip; import com.mogo.map.search.inputtips.query.MogoInputtipsQuery; -import com.mogo.map.search.poisearch.IMogoPoiSearch; -import com.mogo.map.search.poisearch.IMogoPoiSearchListener; -import com.mogo.map.search.poisearch.MogoPoiResult; -import com.mogo.map.search.poisearch.query.MogoPoiSearchQuery; import com.mogo.module.common.TextWatcherAdapter; 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.DataConstants; -import com.mogo.module.navi.constants.SearchServiceHolder; +import com.mogo.module.navi.constants.SearchApisHolder; import com.mogo.module.navi.database.AppDataBase; import com.mogo.module.navi.dialog.NoticeDialog; import com.mogo.service.MogoServicePaths; import com.mogo.service.map.IMogoMapService; + +import java.util.List; + 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; @@ -41,7 +38,6 @@ import io.reactivex.disposables.CompositeDisposable; import io.reactivex.disposables.Disposable; import io.reactivex.functions.Consumer; import io.reactivex.schedulers.Schedulers; -import java.util.List; /** * @author congtaowang @@ -105,8 +101,7 @@ public class SearchPresenter extends Presenter { MogoInputtipsQuery mogoInputtipsQuery = new MogoInputtipsQuery(); mogoInputtipsQuery.setKeyword(keyword); - MogoLocation lastKnowLocation = - SearchServiceHolder.INSTANCE.getLocationClient().getLastKnowLocation(); + MogoLocation lastKnowLocation = SearchApisHolder.getLocationClientApis().getLastKnowLocation(); mogoInputtipsQuery.setCity(lastKnowLocation.getCityName()); mogoInputtipsQuery.setCityLimit(true); IMogoInputtipsSearch inputtipsSearch = diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/SearchUtils.java b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/SearchUtils.java deleted file mode 100644 index 976a5e209e..0000000000 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/SearchUtils.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.mogo.module.navi.ui.search; - -/** - * @author congtaowang - * @since 2019-12-08 - *

- * 搜索工具类 - */ -public class SearchUtils { - - /** - * @param searchType - * @return - */ - public static int checkAndResetSearchType( int searchType ) { - switch ( searchType ) { - case SearchConstants.SEARCH_TYPE_COMMON: - case SearchConstants.SEARCH_TYPE_MULTI_HOME: - case SearchConstants.SEARCH_TYPE_MULTI_COMPANY: - break; - default: - searchType = SearchConstants.SEARCH_TYPE_COMMON; - break; - } - return searchType; - } - - public static String getSearchTypeActionName( int searchType ) { - switch ( searchType ) { - case SearchConstants.SEARCH_TYPE_COMMON: - return null; - case SearchConstants.SEARCH_TYPE_MULTI_HOME: - return "设为家"; - case SearchConstants.SEARCH_TYPE_MULTI_COMPANY: - return "设为公司"; - } - return null; - } -} diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/SearchView.java b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/SearchView.java index 633435465e..0153a600ef 100644 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/SearchView.java +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/SearchView.java @@ -1,9 +1,11 @@ package com.mogo.module.navi.ui.search; import android.widget.EditText; + import com.mogo.commons.mvp.IView; import com.mogo.map.search.inputtips.MogoTip; import com.mogo.module.navi.bean.SearchPoi; + import java.util.List; /** @@ -20,25 +22,11 @@ public interface SearchView extends IView { * @param datums * @param showDelete 是否显示清空历史记录项 */ - void renderSearchPoiResult(List datums, boolean showDelete); + void renderSearchPoiResult( List< MogoTip > datums, boolean showDelete ); - void showHistory(List datums); + void showHistory( List< SearchPoi > datums ); int getSearchType(); - - - ///** - // * 显示逆地理位置编码结果 - // * - // * @param address - // */ - //void renderChoicePointResult(RegeocodeAddress address); - - /** - * 选点完毕后marker动画 - */ - void startJumpAnimation(); - } diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/setting/NaviSettingFragment.kt b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/setting/NaviSettingFragment.kt index ac06e82a34..1c2ccc322d 100644 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/setting/NaviSettingFragment.kt +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/setting/NaviSettingFragment.kt @@ -4,25 +4,19 @@ import android.os.Bundle import android.view.View import android.widget.CompoundButton import android.widget.CompoundButton.OnCheckedChangeListener -import android.widget.CompoundButton.VISIBLE import android.widget.SeekBar import android.widget.SeekBar.OnSeekBarChangeListener -import com.alibaba.android.arouter.facade.annotation.Route import com.mogo.commons.debug.DebugConfig import com.mogo.commons.voice.AIAssist -import com.mogo.map.constants.BroadcastMode import com.mogo.map.uicontroller.EnumMapUI -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.DataConstants -import com.mogo.module.navi.constants.SearchServiceHolder -import com.mogo.module.navi.cp.AddressHelper +import com.mogo.module.navi.constants.SearchApisHolder import com.mogo.module.navi.manager.AddressManager import com.mogo.module.navi.manager.SettingManager import com.mogo.module.navi.manager.VolumeManager import com.mogo.module.navi.ui.base.BaseFragment -import com.mogo.utils.UiThreadHandler import kotlinx.android.synthetic.main.fragment_navi_setting.* import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.Subscribe @@ -66,7 +60,7 @@ class NaviSettingFragment : BaseFragment(), OnCheckedChangeListener { } if (isChecked) { - SearchServiceHolder.analyticsManager.track("Navigation_preference", mapOf("type" to type)) + SearchApisHolder.getAnalyticsApis().track("Navigation_preference", mapOf("type" to type)) } } @@ -109,7 +103,7 @@ class NaviSettingFragment : BaseFragment(), OnCheckedChangeListener { private fun initEvent() { rl_navi_setting_title.setOnClickListener { - SearchServiceHolder.fragmentManager.pop() + SearchApisHolder.getFragmentManager().pop() } iv_sound_plus.setOnClickListener { VolumeManager.getInstance(context).incVolume() @@ -134,8 +128,7 @@ class NaviSettingFragment : BaseFragment(), OnCheckedChangeListener { sb_navi_volume_progress.setOnSeekBarChangeListener(object : OnSeekBarChangeListener { override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) { if (fromUser) { - VolumeManager.getInstance(context) - .setSysVolume(progress) + VolumeManager.getInstance(context).setSysVolume(progress) SettingManager.volume = sb_navi_volume_progress.progress } @@ -156,39 +149,37 @@ class NaviSettingFragment : BaseFragment(), OnCheckedChangeListener { SettingManager.mapType = checkedId when (checkedId) { R.id.rb_navi_day -> { - SearchServiceHolder.getMapUIController().changeMapMode(EnumMapUI.Type_Light) + SearchApisHolder.getUiControllerApis().changeMapMode(EnumMapUI.Type_Light) } R.id.rb_navi_night -> { - SearchServiceHolder.getMapUIController().changeMapMode(EnumMapUI.Type_Night) + SearchApisHolder.getUiControllerApis().changeMapMode(EnumMapUI.Type_Night) } R.id.rb_navi_auto -> { - SearchServiceHolder.getMapUIController().changeMapMode(EnumMapUI.Type_AUTO_LIGHT_Night) + SearchApisHolder.getUiControllerApis().changeMapMode(EnumMapUI.Type_AUTO_LIGHT_Night) } } } rg_navi_sound_type.setOnCheckedChangeListener { group, checkedId -> - SettingManager.voiceStyle = checkedId - SearchServiceHolder.getNavi().setBroadcastMode( - if (checkedId == R.id.rb_navi_detail) BroadcastMode.DETAIL else BroadcastMode.CONCISE - ) - - if (checkedId == R.id.rb_navi_detail) { - SearchServiceHolder.analyticsManager.track("Navigation_guide_type", mapOf("type" to 1)) - } else { - SearchServiceHolder.analyticsManager.track("Navigation_guide_type", mapOf("type" to 2)) + when (checkedId) { + R.id.rb_navi_detail -> { + SearchApisHolder.getSettingManager().speakDetail() + SearchApisHolder.getAnalyticsApis().track("Navigation_guide_type", mapOf("type" to 1)) + } + R.id.rb_navi_draft -> { + SearchApisHolder.getSettingManager().speakDraft() + SearchApisHolder.getAnalyticsApis().track("Navigation_guide_type", mapOf("type" to 2)) + } } } aimlessModeGroup.setOnCheckedChangeListener { group, checkedId -> - - SettingManager.setAimlessMode(checkedId) - when (checkedId){ + when (checkedId) { R.id.aimlessModeClose -> { - SearchServiceHolder.getNavi().setAimlessModeStatus(false) + SearchApisHolder.getSettingManager().closeAimlessMode() AIAssist.getInstance(mContext).speakTTSVoice("已为您关闭巡航模式") } R.id.aimlessModeOpen -> { - SearchServiceHolder.getNavi().setAimlessModeStatus(true) + SearchApisHolder.getSettingManager().openAimlessMode() AIAssist.getInstance(mContext).speakTTSVoice("已为您开启巡航模式") } } @@ -196,24 +187,24 @@ class NaviSettingFragment : BaseFragment(), OnCheckedChangeListener { tv_navi_clear_home_address.setOnClickListener { - AddressManager.deleteHome(context!!) + AddressManager.deleteHome() clearHome() } tv_navi_clear_company_address.setOnClickListener { - AddressManager.deleteCompany(context!!) + AddressManager.deleteCompany() clearCompany() } tv_navi_company_address.setOnClickListener { if (!AddressManager.hasCompany()) { - AddressManager.goCompany() + SearchApisHolder.getSearchManager().goCompany() } } tv_navi_home_address.setOnClickListener { if (!AddressManager.hasHome()) { - AddressManager.goHome() + SearchApisHolder.getSearchManager().goHome() } } @@ -231,9 +222,9 @@ class NaviSettingFragment : BaseFragment(), OnCheckedChangeListener { SettingManager.setGpsSimulator(isChecked) if (isChecked) { - SearchServiceHolder.gpsSimulator.open() + SearchApisHolder.getGpsSimulatorManager().open() } else { - SearchServiceHolder.gpsSimulator.close() + SearchApisHolder.getGpsSimulatorManager().close() } } tb_navi.isChecked = SettingManager.isMonitor() diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/setting/SettingAddressFragment.kt b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/setting/SettingAddressFragment.kt index 099248bac1..b6eb204bd9 100644 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/setting/SettingAddressFragment.kt +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/setting/SettingAddressFragment.kt @@ -9,6 +9,7 @@ import com.mogo.map.MogoLatLng import com.mogo.map.listener.IMogoMapListener import com.mogo.map.marker.IMogoMarker import com.mogo.map.marker.MogoMarkerOptions +import com.mogo.map.search.geo.IMogoGeoSearch import com.mogo.map.search.geo.IMogoGeoSearchListener import com.mogo.map.search.geo.MogoGeocodeResult import com.mogo.map.search.geo.MogoRegeocodeResult @@ -20,7 +21,7 @@ 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.DataConstants -import com.mogo.module.navi.constants.SearchServiceHolder +import com.mogo.module.navi.constants.SearchApisHolder import com.mogo.module.navi.cp.AddressHelper import com.mogo.module.navi.database.AppDataBase import com.mogo.module.navi.manager.AddressManager @@ -37,6 +38,8 @@ import kotlinx.android.synthetic.main.fragment_setting_address.* * 2020-01-07. */ class SettingAddressFragment : BaseFragment(), IMogoGeoSearchListener { + + override fun onRegeocodeSearched(regeocodeResult: MogoRegeocodeResult?) { et_navi_search.setText(regeocodeResult?.regeocodeAddress?.formatAddress) var formatAddress = regeocodeResult?.regeocodeAddress?.formatAddress @@ -58,6 +61,8 @@ class SettingAddressFragment : BaseFragment(), IMogoGeoSearchListener { private var style: Int = DataConstants.TYPE_HOME_ADDRESS var addMarker: IMogoMarker? = null + private lateinit var mGeoSearch: IMogoGeoSearch + private var selectPoi: SearchPoi? = null private var mapListener: IMogoMapListener = object : MogoMapListenerAdapter() { override fun onMapChanged( @@ -69,7 +74,7 @@ class SettingAddressFragment : BaseFragment(), IMogoGeoSearchListener { selectPoi = EntityConvertUtils.geoToPoi(latLng?.lat ?: 0.0, latLng?.lng ?: 0.0, style) var mogoRegeocodeQuery = MogoRegeocodeQuery() mogoRegeocodeQuery.point = latLng - SearchServiceHolder.getGeoSearcher().getFromLocationAsyn(mogoRegeocodeQuery) + mGeoSearch.getFromLocationAsyn(mogoRegeocodeQuery) addMarker?.startJumpAnimation( 150f, 600, @@ -86,12 +91,13 @@ class SettingAddressFragment : BaseFragment(), IMogoGeoSearchListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - style = arguments?.getInt(AMapConstants.KEY_SET_HOME_COMPONY) - ?: DataConstants.TYPE_HOME_ADDRESS - SearchServiceHolder.listenerCenter.registerMogoMapListener(AMapConstants.PATH_FRAGMENT_SETTING_HOME, mapListener) - SearchServiceHolder.getMapUIController().showMyLocation(false) - SearchServiceHolder.getGeoSearcher().setGeoSearchListener(this) - SearchServiceHolder.getMarkerManger().removeMarkers() + style = arguments?.getInt(AMapConstants.KEY_SET_HOME_COMPONY) ?: DataConstants.TYPE_HOME_ADDRESS + SearchApisHolder.getRegisterCenterApis().registerMogoMapListener(AMapConstants.PATH_FRAGMENT_SETTING_HOME, mapListener) + SearchApisHolder.getUiControllerApis().showMyLocation(false) + SearchApisHolder.getMarkerManager().removeMarkers() + + mGeoSearch = SearchApisHolder.getMapServiceApis().getGeoSearch(context) + mGeoSearch.setGeoSearchListener(this) } override fun getLayoutId(): Int { @@ -119,7 +125,7 @@ class SettingAddressFragment : BaseFragment(), IMogoGeoSearchListener { } iv_navi_back.setOnClickListener { - SearchServiceHolder.fragmentManager.pop() + SearchApisHolder.getFragmentManager().pop() } tv_set_as_home.setOnClickListener { if (selectPoi == null) { @@ -127,12 +133,12 @@ class SettingAddressFragment : BaseFragment(), IMogoGeoSearchListener { return@setOnClickListener } insert(selectPoi!!) - SearchServiceHolder.fragmentManager.pop() + SearchApisHolder.getFragmentManager().pop() } et_navi_search.isEnabled = false et_navi_search.setText(getString(string.drag_map_to_choose)) - var location = SearchServiceHolder.getMapUIController().windowCenterLocation + var location = SearchApisHolder.getUiControllerApis().windowCenterLocation UiThreadHandler.postDelayed({ if (!isAdded) { @@ -145,10 +151,9 @@ class SettingAddressFragment : BaseFragment(), IMogoGeoSearchListener { .owner(TAG) .anchor(0.5f, 1f) .longitude(location?.lng ?: 0.0) - addMarker = SearchServiceHolder.getMarkerManger() - .addMarker(AMapConstants.PATH_FRAGMENT_SETTING_HOME, options) + addMarker = SearchApisHolder.getMarkerManager().addMarker(AMapConstants.PATH_FRAGMENT_SETTING_HOME, options) - var locationPointInScreen = SearchServiceHolder.getMapUIController().getLocationPointInScreen(location) + var locationPointInScreen = SearchApisHolder.getUiControllerApis().getLocationPointInScreen(location) addMarker?.setPositionByPixels(locationPointInScreen) }, 500L) } @@ -169,9 +174,7 @@ class SettingAddressFragment : BaseFragment(), IMogoGeoSearchListener { override fun onDestroyView() { super.onDestroyView() - SearchServiceHolder.listenerCenter.unregisterMogoMapListener( - AMapConstants.PATH_FRAGMENT_SETTING_HOME - ) + SearchApisHolder.getRegisterCenterApis().unregisterMogoMapListener(AMapConstants.PATH_FRAGMENT_SETTING_HOME) addMarker?.destroy() } diff --git a/modules/mogo-module-search/src/main/res/layout/activity_navi.xml b/modules/mogo-module-search/src/main/res/layout/activity_navi.xml deleted file mode 100644 index dbec94d82e..0000000000 --- a/modules/mogo-module-search/src/main/res/layout/activity_navi.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MarkerServiceHandler.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MarkerServiceHandler.java index a1774a2d4a..b2f2391ff6 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MarkerServiceHandler.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MarkerServiceHandler.java @@ -26,6 +26,7 @@ import com.mogo.service.map.IMogoMapService; import com.mogo.service.module.IMogoActionManager; import com.mogo.service.module.IMogoRegisterCenter; import com.mogo.service.statusmanager.IMogoStatusManager; +import com.mogo.utils.logger.Logger; import com.zhidao.carchattingprovider.CallChattingProviderConstant; /** @@ -195,11 +196,9 @@ public class MarkerServiceHandler { /** * 对指定类型高亮处理 * 建议使用 - * - * @see MapMarkerManager#highlightedMarker(String, boolean) */ @Deprecated public static void highlightedMarker( String typeTag ) { - getMapMarkerManager().highlightedMarker( typeTag, false ); + Logger.w( TAG, "do not invoke this method any more." ); } } diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java index 88f0bf02e7..cf67cd97c5 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java @@ -493,6 +493,7 @@ public class MogoServices implements IMogoMapListener, if ( mStatusManager.isUserInteracted() ) { mLastCustomRefreshCenterLocation = latLng; mLastZoomLevel = zoom; + Logger.d( TAG, "user interacted" ); return; } @@ -500,6 +501,7 @@ public class MogoServices implements IMogoMapListener, if ( mStatusManager.isV2XShow() ) { mLastCustomRefreshCenterLocation = latLng; mLastZoomLevel = zoom; + Logger.d( TAG, "user v2x show" ); return; } @@ -507,6 +509,7 @@ public class MogoServices implements IMogoMapListener, if ( mStatusManager.isSearchUIShow() ) { mLastCustomRefreshCenterLocation = latLng; mLastZoomLevel = zoom; + Logger.d( TAG, "user search Ui show" ); return; } @@ -555,7 +558,7 @@ public class MogoServices implements IMogoMapListener, } float distance = Utils.calculateLineDistance( latLng, mLastCustomRefreshCenterLocation ); Logger.d( TAG, "move distance = %s, factor = %s", distance, factor ); - return distance > factor; + return distance > factor / 2; } catch ( Exception e ) { Logger.e( TAG, e, "warming. " ); return false; @@ -684,8 +687,6 @@ public class MogoServices implements IMogoMapListener, private void onAdasOn() { // ADAS 时,不在自动刷新打点策略 stopAutoRefreshStrategy(); - // 清除所有的打点信息记录 - MarkerServiceHandler.getMapMarkerManager().alreadySmallMarker.clear(); } private void onAdasClosed() { diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java index 806a4d37a8..b8a97d8206 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java @@ -1,19 +1,13 @@ package com.mogo.module.service.marker; import android.content.Context; -import android.content.Intent; import android.text.TextUtils; -import android.util.Log; -import android.view.animation.BounceInterpolator; -import android.view.animation.OvershootInterpolator; import com.mogo.map.MogoLatLng; -import com.mogo.map.location.MogoLocation; import com.mogo.map.marker.IMogoMarker; import com.mogo.map.marker.IMogoMarkerClickListener; import com.mogo.map.marker.IMogoMarkerManager; import com.mogo.map.marker.MogoMarkerOptions; -import com.mogo.map.marker.MogoMarkersHandler; import com.mogo.module.common.ModuleNames; import com.mogo.module.common.entity.MarkerCarPois; import com.mogo.module.common.entity.MarkerCardResult; @@ -30,7 +24,6 @@ import com.mogo.module.service.Utils; import com.mogo.module.service.network.RefreshCallback; import com.mogo.module.service.network.RefreshModel; import com.mogo.module.service.utils.ViewUtils; -import com.mogo.service.cardmanager.IMogoCardChangedListener; import com.mogo.service.connection.IMogoOnMessageListener; import com.mogo.service.module.IMogoBizActionDoneListener; import com.mogo.utils.ThreadPoolService; @@ -54,28 +47,18 @@ import java.util.Map; * version: 1.0 */ public class MapMarkerManager implements IMogoMarkerClickListener, - IMogoOnMessageListener< MarkerResponse >, IMogoCardChangedListener, + IMogoOnMessageListener< MarkerResponse >, IMogoBizActionDoneListener { private static final String TAG = "MapMarkerManager"; - // 是否选中在线卡片及气泡,语音搜索触发 - private boolean mIsAISearchOnlineData = false; private Context mContext; // 最后一次选中的气泡 private IMogoMarker mLastCheckMarker; private static MapMarkerManager mMarkerManager; - private String mCurrentModuleName = ServiceConst.CARD_TYPE_BUSINESS_OPERATION; - // 记录其它已经缩小的Marker - public ArrayList< String > alreadySmallMarker = new ArrayList<>(); - // 存储所有汽车marker -// public ArrayList carMarkers = new ArrayList<>(); - // 距离用户最近的Marker - private IMogoMarker mNearlyMarker = null; // 记录上次请求数据,切换卡片时做数据处理 private MarkerCardResult mLastDataResult; - private boolean mIsMarkerClicked = false; private RefreshModel mRefreshModel; private MogoLatLng mCarLatLng; // 平滑移动事件间隔(单位:秒) @@ -105,7 +88,6 @@ public class MapMarkerManager implements IMogoMarkerClickListener, // 长连接 MarkerServiceHandler.getMogoSocketManager().registerOnMessageListener( 401001, this ); - MarkerServiceHandler.getMogoCardManager().registerCardChangedListener( TAG, this ); MarkerServiceHandler.getActionManager().registerBizActionDoneListener( this ); } @@ -115,30 +97,11 @@ public class MapMarkerManager implements IMogoMarkerClickListener, Logger.e( TAG, "do not invoke anymore." ); } - @Override - public void onSwitched( int position, String moduleName ) { - Logger.d( TAG, "当前C位卡片:" + moduleName ); - if ( ( TextUtils.isEmpty( mCurrentModuleName ) || TextUtils.equals( mCurrentModuleName, - ServiceConst.CARD_TYPE_BUSINESS_OPERATION ) ) && mIsMarkerClicked ) { - mIsMarkerClicked = false; - // 在广告位(默认位置)点击marker造成卡片切换的,还是现实全部marker 【需求:os2.0.2-2.5-4】 - highlightedMarker( moduleName, false ); - mCurrentModuleName = moduleName; - } else { - mCurrentModuleName = moduleName; - runOnTargetThread( () -> { - MarkerServiceHandler.getMarkerManager().removeMarkersExcept( ModuleNames.CARD_TYPE_USER_DATA ); - drawMarkerByCurrentType( mLastDataResult ); - } ); - } - } - /** * 地图上的Marker点击回调 */ @Override public boolean onMarkerClicked( IMogoMarker marker ) { - mIsMarkerClicked = true; Logger.d( TAG, "onMarkerClicked 点击了大而全中的Marker:" + marker ); try { boolean result = switchMarkerOpenStatus( marker ); @@ -173,90 +136,6 @@ public class MapMarkerManager implements IMogoMarkerClickListener, return true; } - - // 对指定类型高亮处理 - public synchronized void highlightedMarker( final String typeTag ) { - highlightedMarker( typeTag, false ); - } - - public synchronized void highlightedMarker( final String typeTag, final boolean netDataRefresh ) { - try { - Logger.e( TAG, "上一次选中的卡片类型:mCurrentModuleName==" + mCurrentModuleName ); - if ( !TextUtils.isEmpty( mCurrentModuleName ) && TextUtils.equals( mCurrentModuleName, - typeTag ) && !netDataRefresh ) { - return; - } - // 从已经缩小的记录删除 - alreadySmallMarker.remove( typeTag ); - List< IMogoMarker > currentHighLightList = - MarkerServiceHandler.getMarkerManager().getMarkers( typeTag ); - - if ( currentHighLightList == null || currentHighLightList.size() == 0 ) { - alreadySmallMarker.clear(); - // 放大所有的气泡 - Map< String, List< IMogoMarker > > lastHighLightList = - MarkerServiceHandler.getMarkerManager().getAllMarkers(); - for ( String markerName : lastHighLightList.keySet() ) { - setMarkersBig( lastHighLightList.get( markerName ) ); - } - } else { - // 缩小其他的气泡 - Map< String, List< IMogoMarker > > lastHighLightList = - MarkerServiceHandler.getMarkerManager().getAllMarkers(); - for ( String markerName : lastHighLightList.keySet() ) { - if ( !markerName.equals( typeTag ) ) { - if ( !alreadySmallMarker.contains( markerName ) ) { - alreadySmallMarker.add( markerName ); - setMarkersSmall( lastHighLightList.get( markerName ) ); - } - } - } - - // 将当前卡片选中的气泡放大 - setMarkersBig( currentHighLightList ); - } - - } catch ( Exception e ) { - e.printStackTrace(); - } - } - - private static void setMarkersBig( List< IMogoMarker > markers ) { - if ( markers == null || markers.isEmpty() ) { - return; - } - for ( IMogoMarker mogoMarker : markers ) { - if ( mogoMarker == null || mogoMarker.isDestroyed() ) { - continue; - } - try { - mogoMarker.startScaleAnimation( 0.6f, 1f, 0.6f, 1f, 1000, new BounceInterpolator() ); - } catch ( Exception e ) { - Logger.e( TAG, e, "error." ); - } - } - } - - private static void setMarkersSmall( List< IMogoMarker > markers ) { - if ( markers == null || markers.isEmpty() ) { - return; - } - for ( IMogoMarker mogoMarker : markers ) { - smallMarker( mogoMarker ); - } - } - - private static void smallMarker( IMogoMarker mogoMarker ) { - if ( mogoMarker == null || mogoMarker.isDestroyed() ) { - return; - } - try { - mogoMarker.startScaleAnimation( 1f, 0.6f, 1f, 0.6f, 300, new OvershootInterpolator() ); - } catch ( Exception e ) { - Logger.e( TAG, e, "error." ); - } - } - // 展开气泡 private void openMarker( IMogoMarker mogoMarker ) { if ( mogoMarker == null ) { @@ -339,21 +218,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener, dispatchDataToBiz(); } ); - // 语音触发的在线车辆搜索,采用增量的形式绘制 - if ( mIsAISearchOnlineData = isOnlineCarDataOnly( mLastDataResult ) ) { - MarkerServiceHandler.getMarkerManager().removeMarkers( ServiceConst.CARD_TYPE_USER_DATA ); - MarkerServiceHandler.getMogoCardManager().switch2( ServiceConst.CARD_TYPE_USER_DATA ); - } else { - mLastCheckMarker = null; - // 清空所有地图上绘制的Marker - MarkerServiceHandler.getMarkerManager().removeMarkersExcept( ModuleNames.CARD_TYPE_USER_DATA ); - } - drawMarkerByCurrentType( mLastDataResult ); - // 同步新绘制的气泡状态 - alreadySmallMarker.clear(); -// highlightedMarker( mCurrentModuleName, true ); - trackData( mLastDataResult ); } @@ -385,11 +250,6 @@ public class MapMarkerManager implements IMogoMarkerClickListener, return; } - if ( TextUtils.isEmpty( mCurrentModuleName ) ) { - // 默认大而全 - mCurrentModuleName = ServiceConst.CARD_TYPE_BUSINESS_OPERATION; - } - drawAllMarker( markerCardResult ); } @@ -399,14 +259,12 @@ public class MapMarkerManager implements IMogoMarkerClickListener, * @param markerCardResult */ private void drawAllMarker( MarkerCardResult markerCardResult ) { -// List onlineCarList = markerCardResult.getOnlineCar(); List< MarkerExploreWay > exploreWayList = markerCardResult.getExploreWay(); - List< MarkerShareMusic > shareMusicList = markerCardResult.getShareMusic(); +// List< MarkerShareMusic > shareMusicList = markerCardResult.getShareMusic(); List< MarkerNoveltyInfo > noveltyInfoList = markerCardResult.getNoveltyInfo(); -// drawOnlineCarMarkers(onlineCarList, ServiceConst.MAX_AMOUNT_ALL); drawRoadConditionMarker( exploreWayList, ServiceConst.MAX_AMOUNT_ALL ); - drawShareMusicMarker( shareMusicList, ServiceConst.MAX_AMOUNT_ALL ); +// drawShareMusicMarker( shareMusicList, ServiceConst.MAX_AMOUNT_ALL ); drawNoveltyMarker( noveltyInfoList, ServiceConst.MAX_AMOUNT_ALL ); } @@ -421,10 +279,9 @@ public class MapMarkerManager implements IMogoMarkerClickListener, return; } - double nearlyDistance = Float.MAX_VALUE; int size = getAppropriateSize( maxAmount, onlineCarList ); - Map< String, IMogoMarker > existCarMap = purgeCarsData( onlineCarList ); + Map< String, IMogoMarker > existCarMap = purgeMarkerData( onlineCarList, ModuleNames.CARD_TYPE_USER_DATA ); for ( int i = 0; i < size; i++ ) { MarkerOnlineCar markerOnlineCar = onlineCarList.get( i ); @@ -439,119 +296,13 @@ public class MapMarkerManager implements IMogoMarkerClickListener, markerShowEntity.setIconUrl( markerOnlineCar.getUserInfo().getUserHead() ); } - if ( markerOnlineCar.getUserInfo() == null || TextUtils.isEmpty( markerOnlineCar.getUserInfo().getSn() ) ) { - continue; - } - IMogoMarker mogoMarker = existCarMap.get( markerOnlineCar.getUserInfo().getSn() ); + String sn = getCarSnFromEntity( markerOnlineCar ); + IMogoMarker mogoMarker = existCarMap.get( sn ); if ( mogoMarker == null ) { - Logger.d( TAG, "car [%s] need be create.", markerOnlineCar.getUserInfo().getSn() ); mogoMarker = drawMapMarker( markerShowEntity ); } startSmooth( mogoMarker, markerOnlineCar, markerLocation ); - - // 计算在线车辆距离当前车辆的距离,每次都与最后一次距离最近的进行比较,保留距离最近的车辆,进行卡片展示 - try { - // 当前车辆的位置 - MogoLocation currentLocation = MarkerServiceHandler.getMogoLocationClient().getLastKnowLocation(); - - // 计算车辆距离指定气泡的距离 - float calculateDistance = - Utils.calculateLineDistance( new MogoLatLng( markerLocation.getLat(), - markerLocation.getLon() ), - new MogoLatLng( currentLocation.getLatitude(), - currentLocation.getLongitude() ) ); - - // 进行比较,保留最近的一个数据 - if ( calculateDistance < nearlyDistance ) { - nearlyDistance = calculateDistance; - mNearlyMarker = mogoMarker; - } - - } catch ( Exception e ) { - e.printStackTrace(); - } } - Logger.d( TAG, "距离当前车辆位置最近的距离为:" + nearlyDistance ); - - try { - // 在ACC on 之后第一次获取到了在线车辆数据,选中最近的一个Marker - if ( !mIsAISearchOnlineData ) { - return; - } - if ( mNearlyMarker == null ) { - return; - } - Logger.d( TAG, "语音搜索触发,默认选中最近的在线车辆:" + mNearlyMarker ); - // 移动地图到指定位置 - MarkerServiceHandler.getMogoStatusManager().setUserInteractionStatus( ServiceConst.TYPE, true, false ); - MarkerServiceHandler.getMapUIController().moveToCenter( mNearlyMarker.getPosition() ); - onMarkerClicked( mNearlyMarker ); - MogoMarkersHandler.getInstance().onMarkerClicked( mNearlyMarker ); - mIsAISearchOnlineData = false; - - } catch ( Exception e ) { - e.printStackTrace(); - } - } - - /** - * 根据新的在线车辆列表,选出已存在的在线车辆,并从视图和内存中移除不存在的在线车辆 - * - * @param newCarsList - * @return - */ - private Map< String, IMogoMarker > purgeCarsData( List< MarkerOnlineCar > newCarsList ) { - - final long start = System.currentTimeMillis(); - Map< String, IMogoMarker > existCarsMap = new HashMap<>(); - List< IMogoMarker > allCarsList = MarkerServiceHandler.getMarkerManager().getMarkers( ModuleNames.CARD_TYPE_USER_DATA ); - if ( allCarsList == null || allCarsList.isEmpty() ) { - return existCarsMap; - } - if ( newCarsList == null || newCarsList.isEmpty() ) { - return existCarsMap; - } - - Map< String, IMogoMarker > allCarsMap = new HashMap<>(); - for ( IMogoMarker marker : allCarsList ) { - String sn = getCarSnFromMarker( marker ); - Logger.d( TAG, "sn = [%s]", sn ); - allCarsMap.put( sn, marker ); - } - for ( MarkerOnlineCar markerOnlineCar : newCarsList ) { - String sn = markerOnlineCar.getUserInfo().getSn(); - if ( allCarsMap.containsKey( sn ) ) { - Logger.d( TAG, " car [%s] is cached.", sn ); - existCarsMap.put( sn, allCarsMap.get( sn ) ); - } - } - for ( String sn : allCarsMap.keySet() ) { - if ( !existCarsMap.containsKey( sn ) ) { - IMogoMarker dirtyMarker = allCarsMap.get( sn ); - allCarsList.remove( dirtyMarker ); - dirtyMarker.destroy(); - Logger.d( TAG, " car [%s] is destroy.", sn ); - } - } - allCarsMap.clear(); - Logger.i( "timer", "purge data cost " + ( System.currentTimeMillis() - start ) + "ms" ); - return existCarsMap; - } - - private String getCarSnFromMarker( IMogoMarker marker ) { - if ( marker == null || marker.getObject() == null || marker.isDestroyed() ) { - return null; - } - if ( !( marker.getObject() instanceof MarkerShowEntity ) ) { - return null; - } - if ( !( ( ( MarkerShowEntity ) marker.getObject() ).getBindObj() instanceof MarkerOnlineCar ) ) { - return null; - } - if ( ( ( MarkerOnlineCar ) ( ( MarkerShowEntity ) marker.getObject() ).getBindObj() ).getUserInfo() == null ) { - return null; - } - return ( ( MarkerOnlineCar ) ( ( MarkerShowEntity ) marker.getObject() ).getBindObj() ).getUserInfo().getSn(); } /** @@ -562,9 +313,11 @@ public class MapMarkerManager implements IMogoMarkerClickListener, private void drawRoadConditionMarker( List< MarkerExploreWay > exploreWayList, int maxAmount ) { // 将数据同步给探路,避免探路每次 perform 的时候去拉取,造成消耗 if ( exploreWayList == null || exploreWayList.isEmpty() ) { + MarkerServiceHandler.getMarkerManager().removeMarkers( ModuleNames.CARD_TYPE_ROAD_CONDITION ); return; } int size = getAppropriateSize( maxAmount, exploreWayList ); + Map< String, IMogoMarker > existCarMap = purgeMarkerData( exploreWayList, ModuleNames.CARD_TYPE_ROAD_CONDITION ); for ( int i = 0; i < size; i++ ) { MarkerExploreWay markerExploreWay = exploreWayList.get( i ); if ( !markerExploreWay.getCanLive() ) { @@ -576,21 +329,28 @@ public class MapMarkerManager implements IMogoMarkerClickListener, markerShowEntity.setMarkerType( markerExploreWay.getType() ); markerShowEntity.setTextContent( markerExploreWay.getAddr() ); - drawMapMarker( markerShowEntity ); + String sn = getCarSnFromEntity( markerExploreWay ); + IMogoMarker mogoMarker = existCarMap.get( sn ); + if ( mogoMarker == null ) { + drawMapMarker( markerShowEntity ); + } } } } + /** * 共享音乐 * * @param shareMusicList */ private void drawShareMusicMarker( List< MarkerShareMusic > shareMusicList, int maxAmount ) { - if ( shareMusicList == null ) { + if ( shareMusicList == null || shareMusicList.isEmpty() ) { + MarkerServiceHandler.getMarkerManager().removeMarkers( ModuleNames.CARD_TYPE_SHARE_MUSIC ); return; } int size = getAppropriateSize( maxAmount, shareMusicList ); + Map< String, IMogoMarker > existCarMap = purgeMarkerData( shareMusicList, ModuleNames.CARD_TYPE_SHARE_MUSIC ); for ( int i = 0; i < size; i++ ) { MarkerShareMusic markerShareMusic = shareMusicList.get( i ); MarkerLocation markerLocation = markerShareMusic.getLocation(); @@ -601,7 +361,11 @@ public class MapMarkerManager implements IMogoMarkerClickListener, markerShowEntity.setTextContent( markerShareMusic.getMediaName() ); markerShowEntity.setIconUrl( markerShareMusic.getMediaImg() ); - drawMapMarker( markerShowEntity ); + String sn = getCarSnFromEntity( markerShareMusic ); + IMogoMarker mogoMarker = existCarMap.get( sn ); + if ( mogoMarker == null ) { + drawMapMarker( markerShowEntity ); + } } } @@ -611,10 +375,12 @@ public class MapMarkerManager implements IMogoMarkerClickListener, * @param noveltyInfoList */ private void drawNoveltyMarker( List< MarkerNoveltyInfo > noveltyInfoList, int maxAmount ) { - if ( noveltyInfoList == null ) { + if ( noveltyInfoList == null || noveltyInfoList.isEmpty() ) { + MarkerServiceHandler.getMarkerManager().removeMarkers( ModuleNames.CARD_TYPE_NOVELTY ); return; } int size = getAppropriateSize( maxAmount, noveltyInfoList ); + Map< String, IMogoMarker > existCarMap = purgeMarkerData( noveltyInfoList, ModuleNames.CARD_TYPE_NOVELTY ); for ( int i = 0; i < size; i++ ) { MarkerNoveltyInfo noveltyInfo = noveltyInfoList.get( i ); MarkerLocation markerLocation = noveltyInfo.getLocation(); @@ -628,10 +394,83 @@ public class MapMarkerManager implements IMogoMarkerClickListener, } else { markerShowEntity.setTextContent( noveltyInfo.getContentData().getTitle() ); } - drawMapMarker( markerShowEntity ); + String sn = getCarSnFromEntity( noveltyInfo ); + IMogoMarker mogoMarker = existCarMap.get( sn ); + if ( mogoMarker == null ) { + drawMapMarker( markerShowEntity ); + } } } + /** + * S = (A ∩ B) ∪ B + * (A ∩ B)作为旧列表需要保留的部分 + * + * @param newList + * @return + */ + private Map< String, IMogoMarker > purgeMarkerData( List newList, String markerType ) { + + final long start = System.currentTimeMillis(); + Map< String, IMogoMarker > existMap = new HashMap<>(); + List< IMogoMarker > allCarsList = MarkerServiceHandler.getMarkerManager().getMarkers( markerType ); + if ( allCarsList == null || allCarsList.isEmpty() ) { + return existMap; + } + if ( newList == null || newList.isEmpty() ) { + return existMap; + } + + Map< String, IMogoMarker > allMap = new HashMap<>(); + for ( IMogoMarker marker : allCarsList ) { + String sn = getCarSnFromMarker( marker ); + allMap.put( sn, marker ); + } + for ( Object entity : newList ) { + String sn = getCarSnFromEntity( entity ); + if ( allMap.containsKey( sn ) ) { + existMap.put( sn, allMap.get( sn ) ); + } + } + for ( String sn : allMap.keySet() ) { + if ( !existMap.containsKey( sn ) ) { + IMogoMarker dirtyMarker = allMap.get( sn ); + allCarsList.remove( dirtyMarker ); + dirtyMarker.destroy(); + } + } + allMap.clear(); + Logger.i( "timer", "purge data cost " + ( System.currentTimeMillis() - start ) + "ms" ); + return existMap; + } + + private String getCarSnFromEntity( Object entity ) { + try { + if ( entity instanceof MarkerOnlineCar ) { + return ( ( MarkerOnlineCar ) entity ).getUserInfo().getSn(); + } else if ( entity instanceof MarkerShareMusic ) { + return ( ( MarkerShareMusic ) entity ).getUserInfo().getSn(); + } else if ( entity instanceof MarkerNoveltyInfo ) { + return ( ( MarkerNoveltyInfo ) entity ).getSn(); + } else if ( entity instanceof MarkerExploreWay ) { + return ( ( MarkerExploreWay ) entity ).getUserInfo().getSn(); + } + } catch ( Exception e ) { + + } + return ""; + } + + private String getCarSnFromMarker( IMogoMarker marker ) { + if ( marker == null || marker.getObject() == null || marker.isDestroyed() ) { + return null; + } + if ( !( marker.getObject() instanceof MarkerShowEntity ) ) { + return null; + } + return getCarSnFromEntity( ( ( MarkerShowEntity ) marker.getObject() ).getBindObj() ); + } + /** * @param maxAmount 展示的最大数量 * @param list @@ -811,18 +650,14 @@ public class MapMarkerManager implements IMogoMarkerClickListener, */ public synchronized IMogoMarker drawMapMarker( MarkerShowEntity markerShowEntity ) { try { - return drawMapMarker( markerShowEntity, isSmallType() ); + return drawMapMarkerImpl( markerShowEntity ); } catch ( Exception e ) { e.printStackTrace(); return null; } } - private boolean isSmallType() { - return !TextUtils.isEmpty( mCurrentModuleName ) && mLastCheckMarker != null && !mLastCheckMarker.isDestroyed() && TextUtils.equals( mCurrentModuleName, mLastCheckMarker.getOwner() ); - } - - private IMogoMarker drawMapMarker( MarkerShowEntity markerShowEntity, boolean isSmall ) { + private IMogoMarker drawMapMarkerImpl( MarkerShowEntity markerShowEntity ) { if ( markerShowEntity == null || markerShowEntity.getMarkerLocation() == null ) { return null; } @@ -843,12 +678,6 @@ public class MapMarkerManager implements IMogoMarkerClickListener, marker.setOwner( markerShowEntity.getMarkerType() ); markerView.setMarker( marker ); marker.setOnMarkerClickListener( this ); - - if ( isSmall ) { - List< IMogoMarker > markers = new ArrayList<>(); - markers.add( marker ); - setMarkersSmall( markers ); - } markerShowEntity.setMarker( marker ); return marker; } @@ -906,9 +735,6 @@ public class MapMarkerManager implements IMogoMarkerClickListener, } List< MarkerOnlineCar > onlineCarList = result.getOnlineCar(); - if ( !MarkerServiceHandler.getMogoStatusManager().isADASShow() ) { - dispatchDataToBis( ServiceConst.CARD_TYPE_USER_DATA, onlineCarList == null ? new ArrayList<>() : onlineCarList ); - } if ( MarkerServiceHandler.getMogoStatusManager().isSearchUIShow() ) { return; } @@ -933,15 +759,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener, if ( MarkerServiceHandler.getMogoStatusManager().isSearchUIShow() ) { return true; } - if ( MarkerServiceHandler.getMogoStatusManager().isADASShow() ) { - return false; - } - if ( TextUtils.equals( ServiceConst.CARD_TYPE_USER_DATA, mCurrentModuleName ) - || TextUtils.equals( ServiceConst.CARD_TYPE_BUSINESS_OPERATION, mCurrentModuleName ) - || TextUtils.equals( ServiceConst.CARD_TYPE_CARS_CHATTING, mCurrentModuleName ) ) { - return false; - } - return true; + return false; } private void removeCarMarkers() { @@ -1016,7 +834,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener, } public String getCurrentModuleName() { - return mCurrentModuleName; + return ""; } @Override diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoSearchManager.java b/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoSearchManager.java index 106880c33a..92b1fe5067 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoSearchManager.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoSearchManager.java @@ -24,12 +24,6 @@ public interface IMogoSearchManager extends IProvider { */ void showSearch(); - void showMain(); - - void speakDraft(); - - void speakDetail(); - /** * 规划路线 * diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoSettingManager.java b/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoSettingManager.java index 5c7bacd731..f043179468 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoSettingManager.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoSettingManager.java @@ -8,8 +8,51 @@ import com.alibaba.android.arouter.facade.template.IProvider; */ public interface IMogoSettingManager extends IProvider { + /** + * 路线偏好 + * + * @return + */ int getPathPrefer(); + + /** + * 音量 + * + * @return + */ int getVolume(); + + /** + * 获取播报模式 + * + * @return + */ int getVoiceStyle(); + + /** + * 日夜墨水 + * + * @return + */ int getMapType(); + + /** + * 简洁播报 + */ + void speakDraft(); + + /** + * 详细播报 + */ + void speakDetail(); + + /** + * 打开巡航模式 + */ + void openAimlessMode(); + + /** + * 关闭巡航模式 + */ + void closeAimlessMode(); } From eacfde25e4fb49951836a00f65c833c9293c8d41 Mon Sep 17 00:00:00 2001 From: tongchenfei Date: Tue, 19 May 2020 17:19:58 +0800 Subject: [PATCH 12/31] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=88=86=E4=BA=AB?= =?UTF-8?q?=E6=A1=86=E7=95=8C=E9=9D=A2=EF=BC=8C=E9=80=82=E9=85=8D=E7=82=B9?= =?UTF-8?q?=E5=87=BB=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/share/ShareVoiceCmdReceiver.kt | 3 + .../module/share/adapter/ShareBtnAdapter.kt | 52 ----- .../com/mogo/module/share/bean/ShareBtn.kt | 9 - .../module/share/constant/ShareConstants.java | 1 + .../share/dialog/LaucherShareDialog.java | 185 ++++++++---------- .../share/listener/OnShareBtnClickListener.kt | 7 - .../main/res/drawable-ldpi/share_accident.png | Bin 0 -> 4482 bytes .../main/res/drawable-ldpi/share_block_up.png | Bin 5911 -> 4327 bytes .../res/drawable-ldpi/share_dense_fog.png | Bin 0 -> 3765 bytes .../drawable-ldpi/share_real_time_traffic.png | Bin 0 -> 4384 bytes .../res/drawable-ldpi/share_road_closure.png | Bin 5515 -> 4354 bytes .../drawable-ldpi/share_road_construction.png | Bin 0 -> 4694 bytes .../main/res/drawable-ldpi/share_road_icy.png | Bin 0 -> 4941 bytes .../res/drawable-ldpi/share_seek_help.png | Bin 6265 -> 4198 bytes .../drawable-ldpi/share_stagnant_water.png | Bin 0 -> 4546 bytes .../res/drawable-ldpi/share_traffic_check.png | Bin 7200 -> 4082 bytes .../res/drawable-xhdpi/share_accident.png | Bin 0 -> 9887 bytes .../res/drawable-xhdpi/share_block_up.png | Bin 14219 -> 9125 bytes .../res/drawable-xhdpi/share_dense_fog.png | Bin 0 -> 8119 bytes .../share_real_time_traffic.png | Bin 0 -> 9382 bytes .../res/drawable-xhdpi/share_road_closure.png | Bin 10591 -> 9480 bytes .../share_road_construction.png | Bin 0 -> 10017 bytes .../res/drawable-xhdpi/share_road_icy.png | Bin 0 -> 10858 bytes .../res/drawable-xhdpi/share_seek_help.png | Bin 14802 -> 9086 bytes .../drawable-xhdpi/share_stagnant_water.png | Bin 0 -> 9932 bytes .../drawable-xhdpi/share_traffic_check.png | Bin 16238 -> 8780 bytes .../res/drawable/shape_bg_222533_20px.xml | 7 +- .../res/layout/launcher_dialog_share_2.xml | 149 ++++++++++++-- .../src/main/res/values-ldpi/dimens.xml | 4 +- .../src/main/res/values-xhdpi/dimens.xml | 4 +- 30 files changed, 223 insertions(+), 198 deletions(-) delete mode 100644 modules/mogo-module-share/src/main/java/com/mogo/module/share/adapter/ShareBtnAdapter.kt delete mode 100644 modules/mogo-module-share/src/main/java/com/mogo/module/share/bean/ShareBtn.kt delete mode 100644 modules/mogo-module-share/src/main/java/com/mogo/module/share/listener/OnShareBtnClickListener.kt create mode 100644 modules/mogo-module-share/src/main/res/drawable-ldpi/share_accident.png create mode 100644 modules/mogo-module-share/src/main/res/drawable-ldpi/share_dense_fog.png create mode 100644 modules/mogo-module-share/src/main/res/drawable-ldpi/share_real_time_traffic.png create mode 100644 modules/mogo-module-share/src/main/res/drawable-ldpi/share_road_construction.png create mode 100644 modules/mogo-module-share/src/main/res/drawable-ldpi/share_road_icy.png create mode 100644 modules/mogo-module-share/src/main/res/drawable-ldpi/share_stagnant_water.png create mode 100644 modules/mogo-module-share/src/main/res/drawable-xhdpi/share_accident.png create mode 100644 modules/mogo-module-share/src/main/res/drawable-xhdpi/share_dense_fog.png create mode 100644 modules/mogo-module-share/src/main/res/drawable-xhdpi/share_real_time_traffic.png create mode 100644 modules/mogo-module-share/src/main/res/drawable-xhdpi/share_road_construction.png create mode 100644 modules/mogo-module-share/src/main/res/drawable-xhdpi/share_road_icy.png create mode 100644 modules/mogo-module-share/src/main/res/drawable-xhdpi/share_stagnant_water.png diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareVoiceCmdReceiver.kt b/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareVoiceCmdReceiver.kt index 4966611d75..6c4593b685 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareVoiceCmdReceiver.kt +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareVoiceCmdReceiver.kt @@ -41,6 +41,9 @@ class ShareVoiceCmdReceiver : BroadcastReceiver() { "交通事故"->{ UploadHelper.upload(context, TYPE_ACCIDENT) } + "施工"->{ + UploadHelper.upload(context, TYPE_ROAD_CONSTRUCTION) + } } } VOICE_CMD_PUB_ROAD_CONDITION->{ diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/adapter/ShareBtnAdapter.kt b/modules/mogo-module-share/src/main/java/com/mogo/module/share/adapter/ShareBtnAdapter.kt deleted file mode 100644 index 6422eb7f07..0000000000 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/adapter/ShareBtnAdapter.kt +++ /dev/null @@ -1,52 +0,0 @@ -package com.mogo.module.share.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.recyclerview.widget.RecyclerView -import com.mogo.module.share.R -import com.mogo.module.share.bean.ShareBtn -import com.mogo.module.share.listener.OnShareBtnClickListener -import com.mogo.utils.glide.GlideApp -import com.mogo.utils.logger.Logger -import kotlinx.android.synthetic.main.item_share_btn.view.* - -class ShareBtnAdapter(val context: Context): RecyclerView.Adapter() { - private val TAG = "ShareBtnAdapter" - - private val btnList = ArrayList() - - var onShareBtnClickListener:OnShareBtnClickListener? = null - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ShareViewHolder { - return ShareViewHolder(LayoutInflater.from(context).inflate(R.layout.item_share_btn, parent, false)) - } - - override fun getItemCount(): Int { - return btnList.size - } - - override fun onBindViewHolder(holder: ShareViewHolder, position: Int) { - holder.bindData(btnList[position]) - } - - fun setShareBtnList(btns:List){ - btnList.clear() - btnList.addAll(btns) - Logger.d(TAG, "setShareBtnList: $btnList") - notifyDataSetChanged() - } - - inner class ShareViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView){ - init { - itemView.setOnClickListener { - onShareBtnClickListener?.onShareBtnClick(btnList[adapterPosition]) - } - } - fun bindData(shareBtn: ShareBtn) = with(itemView) { - tvShareContent.text = shareBtn.content - GlideApp.with(context).load(shareBtn.iconRes).into(ivShareIcon) - } - } -} \ No newline at end of file diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/bean/ShareBtn.kt b/modules/mogo-module-share/src/main/java/com/mogo/module/share/bean/ShareBtn.kt deleted file mode 100644 index bbadda8f06..0000000000 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/bean/ShareBtn.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.mogo.module.share.bean - -/** - * 分享按钮内容封装 - * - * @param icon 分享按钮图标资源,暂时用不到,默认为空,以后如果引入服务端配置按钮,图片资源可以用这个参数 - * @param iconRes 分享按钮图标本地资源id,默认是-1 - */ -data class ShareBtn(var type: String, var icon: String = "", var iconRes: Int = -1, var content: String) diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/constant/ShareConstants.java b/modules/mogo-module-share/src/main/java/com/mogo/module/share/constant/ShareConstants.java index 8a676c9061..36fd5aeb72 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/constant/ShareConstants.java +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/constant/ShareConstants.java @@ -37,4 +37,5 @@ public class ShareConstants { public static final String TYPE_STAGNANT_WATER = "10008"; public static final String TYPE_ROAD_ICY = "10011"; public static final String TYPE_DENSE_FOG = "10010"; + public static final String TYPE_ROAD_CONSTRUCTION = "10006"; } diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/dialog/LaucherShareDialog.java b/modules/mogo-module-share/src/main/java/com/mogo/module/share/dialog/LaucherShareDialog.java index 4e167b9c92..1e19c2da2f 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/dialog/LaucherShareDialog.java +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/dialog/LaucherShareDialog.java @@ -12,17 +12,12 @@ import android.view.WindowManager; import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.module.common.utils.CarSeries; import com.mogo.module.share.R; import com.mogo.module.share.ShareControl; -import com.mogo.module.share.adapter.ShareBtnAdapter; -import com.mogo.module.share.bean.ShareBtn; import com.mogo.module.share.constant.ShareConstants; -import com.mogo.module.share.listener.OnShareBtnClickListener; import com.mogo.module.share.manager.ISeekHelpListener; import com.mogo.module.share.manager.SeekHelpManager; import com.mogo.module.share.manager.UploadHelper; @@ -33,11 +28,7 @@ import com.mogo.service.statusmanager.IMogoStatusManager; import com.mogo.utils.WindowUtils; import com.mogo.utils.logger.Logger; -import org.jetbrains.annotations.NotNull; - -import java.util.ArrayList; import java.util.HashMap; -import java.util.List; import java.util.Map; @@ -53,24 +44,22 @@ public class LaucherShareDialog implements View.OnClickListener { private boolean isShown = false; -// private TextView tvBlock; -// private TextView tvTrafficCheck; -// private TextView tvClosure; -// private TextView tvNeedHelp; -// -// private TextView tvAccident; -// private TextView tvRealTimeTraffic; -// private TextView tvStagnantWater; -// private TextView tvRoadIcy; -// private TextView tvDenseFog; + private TextView tvBlock; + private TextView tvTrafficCheck; + private TextView tvClosure; + private TextView tvNeedHelp; + + private TextView tvAccident; + private TextView tvRealTimeTraffic; + private TextView tvStagnantWater; + private TextView tvRoadIcy; + private TextView tvDenseFog; + private TextView tvConstruction; private Context mContext; private IMogoAnalytics mAnalytics; private IMogoStatusManager mStatusManager; private IMogoServiceApis mApis; - private RecyclerView rvShareBtnContainer; - private ShareBtnAdapter adapter; - private WindowManager windowManager; @@ -93,101 +82,86 @@ public class LaucherShareDialog implements View.OnClickListener { }); - rvShareBtnContainer = body.findViewById(R.id.rvShareBtnContainer); - LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext,RecyclerView.HORIZONTAL,false); - rvShareBtnContainer.setLayoutManager(linearLayoutManager); - adapter = new ShareBtnAdapter(mContext); - rvShareBtnContainer.setAdapter(adapter); + tvBlock = body.findViewById(R.id.tvBlock); + tvTrafficCheck = body.findViewById(R.id.tvTrafficCheck); + tvClosure = body.findViewById(R.id.tvClosure); + tvNeedHelp = body.findViewById(R.id.tvSeekHelp); -// tvBlock = body.findViewById(R.id.tvBlock); -// tvTrafficCheck = body.findViewById(R.id.tvTrafficCheck); -// tvClosure = body.findViewById(R.id.tvClosure); -// tvNeedHelp = body.findViewById(R.id.tvNeedHelp); + tvAccident = body.findViewById(R.id.tvAccident); + tvRealTimeTraffic = body.findViewById(R.id.tvRealTimeTraffic); + tvStagnantWater = body.findViewById(R.id.tvStagnantWater); + tvRoadIcy = body.findViewById(R.id.tvRoadIcy); + tvDenseFog = body.findViewById(R.id.tvDenseFog); + tvConstruction = body.findViewById(R.id.tvConstruction); } private void initListener() { - adapter.setOnShareBtnClickListener(new OnShareBtnClickListener() { - @Override - public void onShareBtnClick(@NotNull ShareBtn shareBtn) { - Logger.d(TAG,"分享按钮点击: "+shareBtn); - traceData("1"); - if (ShareConstants.TYPE_SEEK_HELP.equalsIgnoreCase(shareBtn.getType())) { - // 点击发起求助 - SeekHelpManager.INSTANCE.seekHelp(mContext,seekListener,true); - }else{ - sendShareReceiver(shareBtn.getType()); - dismiss(); - } - } - }); + tvBlock.setOnClickListener(this); + tvNeedHelp.setOnClickListener(this); + tvTrafficCheck.setOnClickListener(this); + tvClosure.setOnClickListener(this); -// tvBlock.setOnClickListener(this); -// tvNeedHelp.setOnClickListener(this); -// tvTrafficCheck.setOnClickListener(this); -// tvClosure.setOnClickListener(this); - } - - /** - * 初始化默认的分享按钮 - */ - private void initShareBtn(){ - List btns = new ArrayList<>(); - ShareBtn btn = new ShareBtn(ShareConstants.TYPE_BLOCK, "", R.drawable.share_block_up, "上报拥堵"); - btns.add(btn); - btn = new ShareBtn(ShareConstants.TYPE_TRAFFIC_CHECK, "", R.drawable.share_traffic_check, "上报交通检查"); - btns.add(btn); - btn = new ShareBtn(ShareConstants.TYPE_CLOSURE, "", R.drawable.share_road_closure, "上报封路"); - btns.add(btn); - btn = new ShareBtn(ShareConstants.TYPE_ACCIDENT, "", R.drawable.share_seek_help, "上报事故"); - btns.add(btn); - btn = new ShareBtn(ShareConstants.TYPE_REAL_TIME_TRAFFIC, "", R.drawable.share_seek_help, "实时路况"); - btns.add(btn); - btn = new ShareBtn(ShareConstants.TYPE_SEEK_HELP, "", R.drawable.share_seek_help, "发起求助"); - btns.add(btn); - btn = new ShareBtn(ShareConstants.TYPE_STAGNANT_WATER, "", R.drawable.share_seek_help, "道路积水"); - btns.add(btn); - btn = new ShareBtn(ShareConstants.TYPE_ROAD_ICY, "", R.drawable.share_seek_help, "道路结冰"); - btns.add(btn); - btn = new ShareBtn(ShareConstants.TYPE_DENSE_FOG, "", R.drawable.share_seek_help, "浓雾"); - btns.add(btn); - adapter.setShareBtnList(btns); + tvAccident.setOnClickListener(this); + tvRealTimeTraffic.setOnClickListener(this); + tvStagnantWater.setOnClickListener(this); + tvRoadIcy.setOnClickListener(this); + tvDenseFog.setOnClickListener(this); + tvConstruction.setOnClickListener(this); } @Override public void onClick(View view) { int id = view.getId(); Logger.d(TAG, "onClick: " + id); -// if (id == R.id.tvBlock) { -// //拥堵 -// traceTanluData("1"); -// sendShareReceiver("1"); -// traceTypeData("1"); -// dismiss(); -// } else if (id == R.id.oil_price_layout) { -// // 分享油价,入口被屏蔽了 -// traceData("1"); -// Intent intent = new Intent(); -// intent.setData(Uri.parse("freshthing://com.zhidao.fresh.things/shareOilPrice")); -// mContext.startActivity(intent); -// traceTypeData("2"); -// dismiss(); -// } else if (id == R.id.tvTrafficCheck) { -// //交通检查 -// traceData("1"); -// sendShareReceiver("2"); -// traceTypeData("3"); -// dismiss(); -// } else if (id == R.id.tvClosure) { -// //封路 -// traceData("1"); -// sendShareReceiver("3"); -// traceTypeData("4"); -// dismiss(); -// } else if (id == R.id.tvNeedHelp) { -// // 故障求助 -// SeekHelpManager.INSTANCE.seekHelp(mContext,seekListener,true); -// } + if (id == R.id.tvBlock) { + //拥堵 + traceTanluData("1"); + sendShareReceiver("1"); + traceTypeData("1"); + dismiss(); + } else if (id == R.id.oil_price_layout) { + // 分享油价,入口被屏蔽了 + traceData("1"); + Intent intent = new Intent(); + intent.setData(Uri.parse("freshthing://com.zhidao.fresh.things/shareOilPrice")); + mContext.startActivity(intent); + traceTypeData("2"); + dismiss(); + } else if (id == R.id.tvTrafficCheck) { + //交通检查 + traceData("1"); + sendShareReceiver("2"); + traceTypeData("3"); + dismiss(); + } else if (id == R.id.tvClosure) { + //封路 + traceData("1"); + sendShareReceiver("3"); + traceTypeData("4"); + dismiss(); + } else if (id == R.id.tvSeekHelp) { + // 故障求助 + SeekHelpManager.INSTANCE.seekHelp(mContext,seekListener,true); + } else if (id == R.id.tvAccident) { + // 事故 + sendShareReceiver(ShareConstants.TYPE_ACCIDENT); + } else if (id == R.id.tvConstruction) { + // 道路施工 + sendShareReceiver(ShareConstants.TYPE_ROAD_CONSTRUCTION); + } else if (id == R.id.tvRealTimeTraffic) { + // 实时路况 + sendShareReceiver(ShareConstants.TYPE_REAL_TIME_TRAFFIC); + } else if (id == R.id.tvStagnantWater) { + // 道路积水 + sendShareReceiver(ShareConstants.TYPE_STAGNANT_WATER); + } else if (id == R.id.tvRoadIcy) { + // 道路结冰 + sendShareReceiver(ShareConstants.TYPE_ROAD_ICY); + } else if (id == R.id.tvDenseFog) { + // 浓雾 + sendShareReceiver(ShareConstants.TYPE_DENSE_FOG); + } } @@ -273,7 +247,6 @@ public class LaucherShareDialog implements View.OnClickListener { layoutParams.y = 0; initView(); initListener(); - initShareBtn(); windowManager.addView(body, layoutParams); isShown = true; } diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/listener/OnShareBtnClickListener.kt b/modules/mogo-module-share/src/main/java/com/mogo/module/share/listener/OnShareBtnClickListener.kt deleted file mode 100644 index e4c2eaf762..0000000000 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/listener/OnShareBtnClickListener.kt +++ /dev/null @@ -1,7 +0,0 @@ -package com.mogo.module.share.listener - -import com.mogo.module.share.bean.ShareBtn - -interface OnShareBtnClickListener { - fun onShareBtnClick(shareBtn: ShareBtn) -} \ No newline at end of file diff --git a/modules/mogo-module-share/src/main/res/drawable-ldpi/share_accident.png b/modules/mogo-module-share/src/main/res/drawable-ldpi/share_accident.png new file mode 100644 index 0000000000000000000000000000000000000000..9dd6d425c9f3ff63c97ff575e37abb235764080f GIT binary patch literal 4482 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 UbB9tU0ssI207*qoM6N<$f>MN{q5uE@ literal 0 HcmV?d00001 diff --git a/modules/mogo-module-share/src/main/res/drawable-ldpi/share_block_up.png b/modules/mogo-module-share/src/main/res/drawable-ldpi/share_block_up.png index d2f7197cce71558b9ea6d99cf2562d3bdbe0207a..b504cffe879776634b1e0fe4ea95217b67f6bcfa 100644 GIT binary patch literal 4327 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 Vw%lO&tfc?|002ovPDHLkV1jDdcm@Cf literal 5911 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

&plyCC?;%cB|_w?sb@?gw>B z$u|1`NF*q=V_>pp=`A%S>fFnxg@5c1Z;U@-xl$UUmEZ6<8K}4N^>1! zHeDU$)SND1dLlIY+I%CMnqHE7HBrN2;^g_u0Qg^?6>rnYnyQsf7WHJAYI681pyiGG zw#dIctE*Y;nm9SF5vJF>Wz~01mq;e)oLgiIC;X{t|Gu_tAo|sAF^6p2lm$awtR7

YtF+xbm%dr3e6?INrTzV=FH1g~h5jqUbnpgvdawpv8Kxhwb+ zp}vI^6L?N8Vd+RY>1|CvBl& zpr)t1!rGN>o%L~&#dL-Y{`)(rzT?M^o1K8E&$c)|{^{>+dyy?yx5d#_k8DD~&R!{L zU31-K2!UeP_(|?3LAWKM}RJeXbqtd%Ecj?}IV{D4I3IWufMd zCg#kYJ!^ei%Tyan}+0e;5EhdMH{6E)g-34yYl_xSTno zq5X6P^K1@WTa<{PNowl@(+;@!v4aiUE{>nBuqu8-cJT;e(4(00000NkvXXu0mjftng5H literal 0 HcmV?d00001 diff --git a/modules/mogo-module-share/src/main/res/drawable-ldpi/share_real_time_traffic.png b/modules/mogo-module-share/src/main/res/drawable-ldpi/share_real_time_traffic.png new file mode 100644 index 0000000000000000000000000000000000000000..7defe6986d161a05c2fbfd2794fe8d0826205997 GIT binary patch literal 4384 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 diff --git a/modules/mogo-module-share/src/main/res/drawable-ldpi/share_road_construction.png b/modules/mogo-module-share/src/main/res/drawable-ldpi/share_road_construction.png new file mode 100644 index 0000000000000000000000000000000000000000..3c2ba1225c5923448a260855d2f81d3f122c6925 GIT binary patch literal 4694 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 YzjR`=bDMxNkN^Mx07*qoM6N<$g56Cc{{R30 literal 0 HcmV?d00001 diff --git a/modules/mogo-module-share/src/main/res/drawable-ldpi/share_road_icy.png b/modules/mogo-module-share/src/main/res/drawable-ldpi/share_road_icy.png new file mode 100644 index 0000000000000000000000000000000000000000..53585d40d114c8f7e4060c123a47782f837796c0 GIT binary patch literal 4941 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 LNkvXXu0mjfeDi2{ literal 0 HcmV?d00001 diff --git a/modules/mogo-module-share/src/main/res/drawable-ldpi/share_seek_help.png b/modules/mogo-module-share/src/main/res/drawable-ldpi/share_seek_help.png index c87f75fd0d509c818ef2f3a449f7a7be3df36bbd..30f26921aac6b9732ae7e729537ab7b0a2062337 100644 GIT binary patch literal 4198 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 literal 6265 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 diff --git a/modules/mogo-module-share/src/main/res/drawable-ldpi/share_stagnant_water.png b/modules/mogo-module-share/src/main/res/drawable-ldpi/share_stagnant_water.png new file mode 100644 index 0000000000000000000000000000000000000000..f125b9f22eeb09a629f2e6899ab3e0a104b94617 GIT binary patch literal 4546 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 literal 0 HcmV?d00001 diff --git a/modules/mogo-module-share/src/main/res/drawable-ldpi/share_traffic_check.png b/modules/mogo-module-share/src/main/res/drawable-ldpi/share_traffic_check.png index 737a4c75a8417bf01904426b906650ba7b0f8c01..1b5af5fe54d7392bc63d6cfe027ad8bc72ffa9f4 100644 GIT binary patch literal 4082 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 literal 7200 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 Ruv`ED002ovPDHLkV1hHfJJSFF literal 0 HcmV?d00001 diff --git a/modules/mogo-module-share/src/main/res/drawable-xhdpi/share_block_up.png b/modules/mogo-module-share/src/main/res/drawable-xhdpi/share_block_up.png index 0d33d14d6c8f59b2f6b5b0eaf4e18cccfc42c7e5..0a54b48badf8fa0ccb58530a2f0e48254e17bdc1 100644 GIT binary patch literal 9125 zcmV;WBU;>vP)005u}1^@s6i_d2*001BWNklTafrvTMdLS$z@aRyTOW`zUS zu|n;L`ATNG6hM-lCPV=YXJ7S^RecNstgDC4*;K;NSvYcvCv_F{;n$O3oG7v>W9+r zkIg&c5`bC#CSBu8;?ZChVm8@MS|^Q8z9+%Ti$Sz7;HT$vmQ4OMHeptR2O*w1-1m-2 zS3y;u1R;wVBm}MIh7*EGa+R2$Ygjphkpo3}V%dVp|B9D+jSCK#HDF>ZA9ykd{hVAU z@j~pX=qC}WD)SNsP0Cp`Wp7nHvm(!kX#fgmG1Uq@4)9QB)T+opYg%0*6an-S7y14Y z%TDfC1t4V)m@tGuQy6Gc)4&tW@e**5!4sD+dU~$m0*Gew6>cl$04T(*0?Y-tV}(cO zH6T%dwy406SQE=J1Hb_T2Kb7oW^Z_jitd*%8HkDX@X7b@@( zCj0n{X^R#u3dF+u8501^95C@>ANWmx+gpi35T+f${BI|jS6)8)(6#_*(8@(qzNu~y zRyzQ*2Rt^IfjI)d|9C17KR(!zrot z>(5ac4}`6b8E6YGsJTd0uiOx{6`>E&Yel~uAC{Z@VqtXvv04Bqme44`OPFy(bqv~j zrcKcye9S)TR~<`wRSv+c+yC4F3N0hgy%JOJfpFI-3in;Q@R_Yu*|91GV0OPr16c{Y z0Tx!Scf}wD3W$C8E?+WvVO905$^h7B;Dm9+c-mV^tE#Cj_j6PL6ILvKdRn<#C_}|6 z0bo}D$EFc@tlqB#i$w_|c4CZ=LDO>2o z!dkrYn556kD;7UJtTLDIDieT|-G9Ps4E#ZWEa;pM#!BhK5;0X?dF;|hA^Q9B#ZNy_ zSs<)50QTuW;Uxw?v|KW_luDHXz^wj%o(6`Y^HoN- zy*8_y0)*)~i=TiZUQztrBG>WFe0PNF$!dz8l;V05B9d)67lJ+D8UU?$X=e3nf zrw*xzx=|qjX5Rki!2ssDr@OEVVS73ZuUwxzw{#(~PamHT_bgxZOu2(v%MCygMh`Xc z8JHVXsl+Oce^d3VBg2d6DH=HViK%VTZbu*0@(*gDF6yg8AB2%chl>E;s@J zj$Z+AmPtydQ#Is9yz-EokhR~MNk7V2wQOpil3v3S0hrZq{51iUw;LJK!UA3F2MuY= zS$50VbYQQ%#?gm;3SF18WU6cS{t^M$yYKinnfdoF`3^nX!^v|U$F_sUsiNF}0=>0r z+0;R9T+kJOBFfpX`1gUs&*7-SnvFN~vQmIhoTMgQ;ubya3c!r)vCjcCx~$Lh?)NAV zP62*?_44Us+~ zI~Zr)Q6wNZ`rB zpXYd>cnN+!tpjmZetv^vNWW}1Zo1%GG^_WUK4t+v?a%yd`>zcWfC7AfqgBUJXNX6i* zwxeI0o$&e85a0y3#G<1c2+eX6gak}o*ArX5x-6Uv#_;&7Wqyfvu30|qN;^b?-!uA- zZOtk^Pjp9uLX5E;HlgE1U+Y6vByJ~v*FaVRCp0+Zm?izN`{#2LoorDVA1P?FdfD{d zW@8o(n9+CaW2`3rW+TD*?ris&p)Z)?RM%FRfD=WvwEsap&;^7-2VA?WEf#IRE-I5# z6B;34;_4OCgPWHu08H;Q_I&^y5}6P!8vTmdX)B;8A+am6a&O$%67TK13||~-ibB7$ zQIW`Wslu^sU9)2PEnyrmBV&9cPErp5NV0BCkuhpd9b|V{#(w$aTi4>+bAJqqR?*{W zTe@P)H<#Kn6vzskNv_x*U-$xj%*~&l{7Tc+tEV0jR1NknJ$u|hFfS0`3x!na3B~mr zLncwYmN%_?0)NY107cXJbkUo$rwv~DsC`0=Pk&8ffBryx$C~BOX*mW%0POSVD-1kX zg{-*BA9Z)TPci7~PYm6TQOrIJUif<)FHEWOzSQIg67cGp70>>+4S-{JFu0xD!GW%3 zyLGuFd}C>hlndY1-?A6t>;}IDjgKwgwZJoZw}o$Waq6>4Ew}wYUU|gfc_iF1E2eAi z7>xspEtf@{{Htqf-2`yyU)k(uOzpA8;#PTLV=sLCL-VjTqjT#0hOEnWx_AuA90F7Z4xg@r9lxA|RiC%TSBDxqGsXm_JG}Pc%}_NTP=a5qr01@jmaC04J?qhl3`|ah zAq!5|_2PYK-ryK&CHaG#>%vAykSx9%{=J1euEOj8ywNh`+gt6z16Tgjx(Xf!7708S z5X!$t3chfTx^{1CypS)lTO{_yz@)V~&rZ?E+be7A0s@!1g)Wv!;!{+Nxbc15cJV%! zWwj6}R01AcG5|jwJ0m!x<_(VGT>D?1oV;*gGYLSTGyT`zp} z-9@oX?h5yfK?~RBOuxeb;F#S6y4&>{HgkXt-kSF;1qD| z6X4_*7Ts{iPv>CVO6z8_Sf_v4`^S6M<~-M$y4?3fYVE_PglU*0h0cVfjnxkslrJk> ztF!#Nvwy;rTh|+tD6ijIqgX_bH-FPY17A_V7ukFmaO&$I*Hu9nH2)qPIVGMQ z^25d|{k3%bBOfhxzq*r}uF4`QHacZ;`5C#ojhJa=NxL zEXK*=6zo0N1m7K%b{QC3z^-h%AJe+54`me-!@g<)aK$4bvIq`lf=L6S0V45R@Usa@ z35af>)WB)n|JyF$XW^F(iQ$*uzXdD*ErOD)u(Qrne9VuVye8r+s8{bt(?Psi7dSZE&AtnfB!yJX`|KLLz2oZeal7>Y;p;y_dW*e=fnrq4*a9?c8EQl0 zdL{=nz!Ur~fF#Oozsn%gfa<~x1E+znX8pU%Ui4Lu|7*7fK7h{>Jam5cxeS`P!R ze%wX;N}MbRG#A}Z2AW+r6lF4pJpLJQaGk}1pS!I+mVWBM$s- zSE)<;58m(*vM>KU$TdzBC*$q~cWV}|eJw%Q@MqL6K(Zp-Ao^4#`4}(uScN*t#i5C> z-4y7v10W+An6Q3>)~p0TQ|AjaKwLl=ym89Nvrve>l)@Yr_X=r*e(UGzj- zy$SXEba66fzuOggdn6;t=yANvpFS-52ldJvy^ldH;;G}J^Bpeu4wJgP7vfwBW5lXV z>^aypOcFibArI}(`(B?#b0W=&wXMmb{aoMz$@;wf8uTabn^4p)HCzZUjS|voHb26nR{Vvvd<`rh4TM* z>$|wAx$ynz&gSorHN+p6^*6+;wg1oFwhrx@958aDNvy(&6W%aG=YrZ;h4pJQI_%$N zeNGmwLf

L`_V~V%JFw7XyVq00$(UHYk?Dmj#cVu8lihdBB<~I)>&)-&I~3erUhY z0gr%LUlcX{ORjzR6gQps zBa(y;XkUxf#%^$!dM$ukR{*uo)|byTAlY3mkyyQwgIWO4E^g)T5Jt#J;7~45BvSI& zHbe!*FoT)!um7BfdE0Kp=Rclf<@Rwhe-h4)3ILu2qfR_|+`F{+8sj@{4uU4Yz~BXU z;;^=K<#g!+N@P6fec2bdv&|0FvhM{Bf)YS-J>abCfh4h#BGzz)S59yt@n8NE28vi8 zwwF2Ft7Yyq>W04TQ9T%R>SCybg=fi;GA^9U z!qIGzHg+{Y4t|xuxBHi782NUBxnu|d>X|v(4-NrPHs_sYG*-&*xawc%)p9TXbG#vD zzkdr3ovf>MHH$d7dH}e+<-kNPLaz&85Ie)bGxSm4jIvY66dJwN8TEMJwFQzUD{OZBzNPZ zd_VQ*J!&7A^u<#<`$(|w9WMADk9XP>?uL=YXh|-b5_Q9pjEitTUYJ8X5)Mhg%1_&2 z&ITjTW1P$Q@%b zR2ch@*T+4t-fzTf+BI~O>zeVLFx<8)fuH|Bz((+dES?E?YI!f@?{P?oSsD>ytelDFQ;&>MT0p9-PQ-%= z@1$dwRId|K*pBX(}1pJz#uMIoshHq@S8EU-SGAJMbaz4xf0 zV8m@mexxsT+olIFqt{yJrLNS*K!$KkJGf{?K*6qwz&EcL9FT#QE=;%0Rpvzj|tYBEAP6;gIanNnha2Nc}8?>LwrmFWr+$8sgtJ@Ffu z!}HRXwyY3GQ) z3^Ip!oF9cbeSPjMJwauc>=9=q7tycAAyw|WMI4t15j-=aBqPKv^vb5IMI?sZ_H@X) zVFXrknAq3r2oXH5Bpoou=SgHIF0RFA<(VmZbvHD&6 z()MfvfG#@Vo`X&B@UqO%>sO8AzrXVbxVwW$73^%ZXaL+~bHl`o?V-JU{OX1^v#iH7 zbW0yO5R3&D1{e?Ke1z^84S<>MI^doIjq&i(EGz%7rt#n3RRHi~y)R+bIBN#Tyu3K} z0}}4oxMrsHpqg7U{?sT{O*M|{N<2B-rr80^&RXpnjQaWhCU`{VfYnHXdpm!KK^^~L zjX{(w^fxx$j5jyO?OL$EKq+YY{_4M4kLuFgF=->i4lAriNfcEtSN+sNynXjVq-dG* z!wriiJFdWAx84*JE0Q-{@-3deJI6I1aMIhE_;BwfQKe56uDEX9m^(B4utE)h8KWM9 z%2PsqKDQ`+(@z**1i#?`Z&53DxCa6-Fds!_G8@sB3Z z&W*VosyBgC{#~zn6J_Sk15%yKsVg^~0H$Or->;4>3*JxOV205&_sV zYviT=A{HmMgqDGW?f^-mnZG${uWtKa%qM&0R!Lto=*vkewOqGurV)`FB0(6Zx;1S? z9x)RCz_J=I6swK^M6`Kh?o4Ata|t3?6y26K;`d;@>C`=0HTTNhwG6kZt+DhY40<Aw$N|NToqCLFo}{Sa01adNzidIcR*Nu0pI6^~ z(h^Qc7yDJ^lKk~E#4f9_t0W`{UGPn2{9do+CQQvHymDt@TeImyL~p&DJ1dmV-v+@F z0oX0=;cHY?*={&w3=Eoy$_-4)E(8sOUb(iP*uL-(e1~fkeOOV{>o(@T_^BJmFA;#6 zMcixTa%Q!UB@aYNywoi`N@fIJeRo-uK=dP`74NQ{WjpfII`mQj*tO@VtBBN3z-&Dm zs#ML>yP-x?fJkKyT)S!Ai!Mobbn27}KylNpy&hS}i~;fzxaW2W5wHfjRf1`PT|*oQ zi{4v1+t}*s{whWUz^=U>X+@wN%v?)u$_bEOd58ivl|DpN#NaD8t)0EMG${}f01YlU zgBc@BYtSqAC_sdn@2#CZDiTUW48Sg3Mw~$@T9AU2y(f}Kc=yyW3LNA@YMGZe>u4n7 zju?QVv97&_{}D{DM$)i%PYtC2@q?SzzVJVhj=oF)6h_OfJx6S2Ry(>r!0jMIvw~M{ zBp7$0U>wtjNZIn+KMs-(S&mVuWQfDi@=RQ?P=s*c-RfqNV#S3zOFqVnE>YC#*#8O;8jRG3J^WEY2ECn%Q~yn6*^UC9%KEOd0N!PhWIhO^H z73P5E!@71K)`3AA0n+?~a(-z&PSpxLuRN50JHF_{1qAN4X~UeYWdWMoy-@?8ctF>l zBL}J+c-xE}ltXnyx%b^F9O8{0AW{_-cWv7Ef|lDa8dp>Ss2L^QA07wLRKelgQLks< z_sX3qV4hGAYxE&teBOo^r$qyJW*bolplG;r_u9T*?B}$^@WhcXaMCe2&Hmowg0jJ@v|C@AONZ^9`#k@R^2bSpZwEdo`Vq z4V}<#`q^9b%1h=oRYf1F9G%Z;y2}NsvR3M(S;u&q7~1wuIghdUrY9o|U0!)8&vRAM zhe;e>j0yQswszeu`m!Ra0{3_AHhf?J>Kl46t9;U&*{F4spZ-l&J-qS|dyGE)2q<7E z_vS~@&sQ2;Dq9B(d%jpPQJI!8*kN;%r3p~*000AENklhmHZid? zzT-s7u+1CFA520tVf4`e zUbX6gP6H4do%SDTHXgu4W~4g38TRyp_IA8-YkI~oI*YB7z?5c<_D?O(2BK&JFXjMf zcBn(wM_T!mz+478TAePT;k#w#GVk!pbxPRiw5i)Fcey9IP;yh^F}X2 zpOxp4AXO27mwf)DzeJiSsJtMmNWGW_U`QsTbh$4z z;H%eP%g{jFiA6kv%N6HY)|f!~AiU-aoLHQf_j=gbYtaHmRkf240F;TO6C z69zJ)omo~nOepl^%50wqJBhJSQTd&`yq7KK?N${~D(g832SAxnow_~LT2+@Jaiq#G8zyH@Gu>+IJ>q(6Ppq+%m$z81YZzk|{fF`Q11aK*U zBsuEX{g6h{V!0gSegHy@?f|fpLEDqnqz_`*SzLMWi}0kR%IrWawXGX7DJ@hr=^|2a zF)?4npk@F!CeT?7ZVXUe04V@!0i0rhun-`z@*pxrodj?Q;9mhcMBx2Q^ewCSMp69V j`T~VtCxY=1t$F)D=8q3!UMa0r00000NkvXXu0mjfQgedd literal 14219 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 wn~-RhVMsW;5;{ihEdSj3asS@n=9@uR7RiIipS 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 UP=dL+U3W`ERrh7J^1F!t2TXQ0ng9R* diff --git a/modules/mogo-module-share/src/main/res/drawable-xhdpi/share_dense_fog.png b/modules/mogo-module-share/src/main/res/drawable-xhdpi/share_dense_fog.png new file mode 100644 index 0000000000000000000000000000000000000000..160cdee6a6decee5d67f97da0ee6c3a05417944f GIT binary patch literal 8119 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 literal 0 HcmV?d00001 diff --git a/modules/mogo-module-share/src/main/res/drawable-xhdpi/share_road_closure.png b/modules/mogo-module-share/src/main/res/drawable-xhdpi/share_road_closure.png index 0356075b5d9c4ec39955e4717f556cbfc0b5734b..a050e2b61ca08c59b130c769e1397e4873f87517 100644 GIT binary patch literal 9480 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 diff --git a/modules/mogo-module-share/src/main/res/drawable-xhdpi/share_road_construction.png b/modules/mogo-module-share/src/main/res/drawable-xhdpi/share_road_construction.png new file mode 100644 index 0000000000000000000000000000000000000000..4b82b87aa7435bba5c31eee6308f90301defe39b GIT binary patch literal 10017 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

;{XY3EvAAfM!bN&dk}f zr>`mjHG+c11T-R0eFn7-K(#?s2aHt%p%R#9XQq-y=R637U^oxZX@DIC=okS<8Q5V4 r?1PHE31IuGRH^o3MQ|S60_Fb)KBPDGt%=;;00000NkvXXu0mjfLPo7V literal 0 HcmV?d00001 diff --git a/modules/mogo-module-share/src/main/res/drawable-xhdpi/share_road_icy.png b/modules/mogo-module-share/src/main/res/drawable-xhdpi/share_road_icy.png new file mode 100644 index 0000000000000000000000000000000000000000..9edf8ac119f6c3c9414deacf0b56cf2b94709f9d GIT binary patch literal 10858 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 AV*mgE literal 0 HcmV?d00001 diff --git a/modules/mogo-module-share/src/main/res/drawable-xhdpi/share_seek_help.png b/modules/mogo-module-share/src/main/res/drawable-xhdpi/share_seek_help.png index 018f787003a815f1da2897640f31650646b3981c..6ac62048b6483f45f519f650e1a05ee8e2dc9932 100644 GIT binary patch literal 9086 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 literal 14802 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 z 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 diff --git a/modules/mogo-module-share/src/main/res/drawable-xhdpi/share_stagnant_water.png b/modules/mogo-module-share/src/main/res/drawable-xhdpi/share_stagnant_water.png new file mode 100644 index 0000000000000000000000000000000000000000..de26656f736b9d99b937da224c509f0e87b1ab89 GIT binary patch literal 9932 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 diff --git a/modules/mogo-module-share/src/main/res/drawable/shape_bg_222533_20px.xml b/modules/mogo-module-share/src/main/res/drawable/shape_bg_222533_20px.xml index 0fa61ad26e..1b1f5226d5 100644 --- a/modules/mogo-module-share/src/main/res/drawable/shape_bg_222533_20px.xml +++ b/modules/mogo-module-share/src/main/res/drawable/shape_bg_222533_20px.xml @@ -1,5 +1,8 @@ - - + + \ No newline at end of file diff --git a/modules/mogo-module-share/src/main/res/layout/launcher_dialog_share_2.xml b/modules/mogo-module-share/src/main/res/layout/launcher_dialog_share_2.xml index b5403c8507..d88e11d825 100644 --- a/modules/mogo-module-share/src/main/res/layout/launcher_dialog_share_2.xml +++ b/modules/mogo-module-share/src/main/res/layout/launcher_dialog_share_2.xml @@ -31,25 +31,138 @@ app:layout_constraintStart_toStartOf="@+id/vBg" app:layout_constraintTop_toTopOf="@+id/vBg" /> - - - + android:drawableTop="@drawable/share_block_up" + android:text="拥堵" + android:textSize="@dimen/dp_32" + android:textColor="#fff" + app:layout_constraintHorizontal_chainStyle="spread_inside" + android:gravity="center" + app:layout_constraintTop_toBottomOf="@+id/btn_share_title" + app:layout_constraintRight_toLeftOf="@+id/tvTrafficCheck" + app:layout_constraintLeft_toLeftOf="@+id/vBg" + android:layout_marginStart="@dimen/dp_116" + android:layout_marginTop="@dimen/dp_78" + android:drawablePadding="@dimen/dp_30" /> + + + + + + + + + \ No newline at end of file diff --git a/modules/mogo-module-share/src/main/res/values-ldpi/dimens.xml b/modules/mogo-module-share/src/main/res/values-ldpi/dimens.xml index d28bf549bd..e74470a9b8 100644 --- a/modules/mogo-module-share/src/main/res/values-ldpi/dimens.xml +++ b/modules/mogo-module-share/src/main/res/values-ldpi/dimens.xml @@ -1,8 +1,8 @@ - 693px - 320px + 776px + 428px 34px 43px 100px diff --git a/modules/mogo-module-share/src/main/res/values-xhdpi/dimens.xml b/modules/mogo-module-share/src/main/res/values-xhdpi/dimens.xml index ba3a919930..c50ed40d1e 100644 --- a/modules/mogo-module-share/src/main/res/values-xhdpi/dimens.xml +++ b/modules/mogo-module-share/src/main/res/values-xhdpi/dimens.xml @@ -1,7 +1,7 @@ - 1300px - 600px + 1464px + 808px 64px 80px 200px From a5b3ce58319ae1b8006e17130a44940895e6634e Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Wed, 20 May 2020 09:46:45 +0800 Subject: [PATCH 13/31] opt --- config.gradle | 2 +- .../poisearch/query/MogoPoiSearchQuery.java | 2 +- .../module/apps/AppNavigatorFragment.java | 55 ++++- .../module/apps/AppNavigatorPresenter.java | 36 ++- .../mogo/module/apps/AppNavigatorView.java | 4 + .../java/com/mogo/module/apps}/anim/Anim.java | 2 +- .../com/mogo/module/apps}/anim/AnimRes.java | 5 +- .../mogo/module/apps}/anim/AnimWrapper.java | 4 +- .../mogo/module/apps}/anim/JSurfaceView.java | 3 +- .../mogo/module/apps}/anim/KitkatAnim.java | 2 +- .../mogo/module/apps}/anim/OthersAnim.java | 2 +- .../mogo/module/apps/model/NavigatorApps.java | 24 +- .../res/drawable-ldpi/mogo_tts_icon_00000.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00001.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00002.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00003.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00004.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00005.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00006.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00007.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00008.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00009.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00010.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00011.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00012.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00013.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00014.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00015.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00016.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00017.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00018.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00019.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00020.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00021.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00022.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00023.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00024.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00025.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00026.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00027.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00028.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00029.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00030.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00031.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00032.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00033.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00034.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00035.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00036.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00037.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00038.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00039.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00040.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00041.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00042.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00043.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00044.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00045.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00046.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00047.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00048.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00049.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00050.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00051.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00052.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00053.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00054.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00055.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00056.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00057.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00058.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00059.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00060.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00061.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00062.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00063.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00064.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00065.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00066.png | Bin .../res/drawable-ldpi/mogo_tts_icon_00067.png | Bin .../module_apps_ic_ai_assist.png | Bin 0 -> 32785 bytes .../module_apps_ic_ai_assist_bkg.png | Bin 0 -> 4091 bytes .../module_apps_ic_navigator_applist.png | Bin 0 -> 13351 bytes .../module_apps_ic_navigator_media.png | Bin 0 -> 10330 bytes .../module_apps_ic_navigator_navi.png | Bin 0 -> 11384 bytes .../module_apps_ic_navigator_personcenter.png | Bin 0 -> 10390 bytes .../drawable-xhdpi/mogo_tts_icon_00000.png | Bin .../drawable-xhdpi/mogo_tts_icon_00001.png | Bin .../drawable-xhdpi/mogo_tts_icon_00002.png | Bin .../drawable-xhdpi/mogo_tts_icon_00003.png | Bin .../drawable-xhdpi/mogo_tts_icon_00004.png | Bin .../drawable-xhdpi/mogo_tts_icon_00005.png | Bin .../drawable-xhdpi/mogo_tts_icon_00006.png | Bin .../drawable-xhdpi/mogo_tts_icon_00007.png | Bin .../drawable-xhdpi/mogo_tts_icon_00008.png | Bin .../drawable-xhdpi/mogo_tts_icon_00009.png | Bin .../drawable-xhdpi/mogo_tts_icon_00010.png | Bin .../drawable-xhdpi/mogo_tts_icon_00011.png | Bin .../drawable-xhdpi/mogo_tts_icon_00012.png | Bin .../drawable-xhdpi/mogo_tts_icon_00013.png | Bin .../drawable-xhdpi/mogo_tts_icon_00014.png | Bin .../drawable-xhdpi/mogo_tts_icon_00015.png | Bin .../drawable-xhdpi/mogo_tts_icon_00016.png | Bin .../drawable-xhdpi/mogo_tts_icon_00017.png | Bin .../drawable-xhdpi/mogo_tts_icon_00018.png | Bin .../drawable-xhdpi/mogo_tts_icon_00019.png | Bin .../drawable-xhdpi/mogo_tts_icon_00020.png | Bin .../drawable-xhdpi/mogo_tts_icon_00021.png | Bin .../drawable-xhdpi/mogo_tts_icon_00022.png | Bin .../drawable-xhdpi/mogo_tts_icon_00023.png | Bin .../drawable-xhdpi/mogo_tts_icon_00024.png | Bin .../drawable-xhdpi/mogo_tts_icon_00025.png | Bin .../drawable-xhdpi/mogo_tts_icon_00026.png | Bin .../drawable-xhdpi/mogo_tts_icon_00027.png | Bin .../drawable-xhdpi/mogo_tts_icon_00028.png | Bin .../drawable-xhdpi/mogo_tts_icon_00029.png | Bin .../drawable-xhdpi/mogo_tts_icon_00030.png | Bin .../drawable-xhdpi/mogo_tts_icon_00031.png | Bin .../drawable-xhdpi/mogo_tts_icon_00032.png | Bin .../drawable-xhdpi/mogo_tts_icon_00033.png | Bin .../drawable-xhdpi/mogo_tts_icon_00034.png | Bin .../drawable-xhdpi/mogo_tts_icon_00035.png | Bin .../drawable-xhdpi/mogo_tts_icon_00036.png | Bin .../drawable-xhdpi/mogo_tts_icon_00037.png | Bin .../drawable-xhdpi/mogo_tts_icon_00038.png | Bin .../drawable-xhdpi/mogo_tts_icon_00039.png | Bin .../drawable-xhdpi/mogo_tts_icon_00040.png | Bin .../drawable-xhdpi/mogo_tts_icon_00041.png | Bin .../drawable-xhdpi/mogo_tts_icon_00042.png | Bin .../drawable-xhdpi/mogo_tts_icon_00043.png | Bin .../drawable-xhdpi/mogo_tts_icon_00044.png | Bin .../drawable-xhdpi/mogo_tts_icon_00045.png | Bin .../drawable-xhdpi/mogo_tts_icon_00046.png | Bin .../drawable-xhdpi/mogo_tts_icon_00047.png | Bin .../drawable-xhdpi/mogo_tts_icon_00048.png | Bin .../drawable-xhdpi/mogo_tts_icon_00049.png | Bin .../drawable-xhdpi/mogo_tts_icon_00050.png | Bin .../drawable-xhdpi/mogo_tts_icon_00051.png | Bin .../drawable-xhdpi/mogo_tts_icon_00052.png | Bin .../drawable-xhdpi/mogo_tts_icon_00053.png | Bin .../drawable-xhdpi/mogo_tts_icon_00054.png | Bin .../drawable-xhdpi/mogo_tts_icon_00055.png | Bin .../drawable-xhdpi/mogo_tts_icon_00056.png | Bin .../drawable-xhdpi/mogo_tts_icon_00057.png | Bin .../drawable-xhdpi/mogo_tts_icon_00058.png | Bin .../drawable-xhdpi/mogo_tts_icon_00059.png | Bin .../drawable-xhdpi/mogo_tts_icon_00060.png | Bin .../drawable-xhdpi/mogo_tts_icon_00061.png | Bin .../drawable-xhdpi/mogo_tts_icon_00062.png | Bin .../drawable-xhdpi/mogo_tts_icon_00063.png | Bin .../drawable-xhdpi/mogo_tts_icon_00064.png | Bin .../drawable-xhdpi/mogo_tts_icon_00065.png | Bin .../drawable-xhdpi/mogo_tts_icon_00066.png | Bin .../drawable-xhdpi/mogo_tts_icon_00067.png | Bin .../module_apps_fragment_apps_navigator.xml | 21 +- .../layout/module_apps_item_app_indicator.xml | 13 +- .../src/main/res/values-ldpi/dimens.xml | 6 + .../src/main/res/values-xhdpi/dimens.xml | 6 + .../src/main/res/values/dimens.xml | 6 + .../module/back/BackToMainHomeManager.java | 11 +- .../module/extensions/ExtensionsFragment.java | 58 ----- .../extensions/ExtensionsPresenter.java | 167 +------------ .../module/extensions/ExtensionsView.java | 15 -- .../extensions/entrance/EntranceFragment.java | 98 ++++---- .../entrance/EntrancePresenter.java | 26 +- .../extensions/entrance/EntranceView.java | 3 - .../extensions/navi/BaseNaviInfoView.java | 68 +++++- .../module/extensions/navi/NaviInfoView.java | 58 ++--- .../drawable-ldpi/module_ext_ic_message.png | Bin 467 -> 0 bytes .../module_ext_ic_display_overview.png | Bin 0 -> 1484 bytes .../drawable-xhdpi/module_ext_ic_message.png | Bin 834 -> 0 bytes .../drawable-xhdpi/module_ext_ic_message2.png | Bin 0 -> 1152 bytes .../module_ext_ic_navi_info1.png | Bin 0 -> 1986 bytes .../module_ext_ic_navi_info2.png | Bin 0 -> 2003 bytes .../module_ext_ic_navi_info3.png | Bin 0 -> 2127 bytes .../drawable/module_ext_drawable_msg_bkg.xml | 5 +- .../module_ext_drawable_msg_container_bkg.xml | 8 + .../module_ext_drawable_weather_bkg.xml | 9 + .../module_ext_dw_common_corner_bkg.xml | 12 +- .../module_ext_dw_navi_info_panel_bkg.xml | 4 +- ...odule_ext_dw_upload_road_condition_bkg.xml | 14 +- .../res/drawable/shape_react_gray_round.xml | 5 +- .../res/layout/module_ext_layout_entrance.xml | 106 +++------ .../layout/module_ext_layout_extensions.xml | 117 ++------- .../module_map_layout_navi_info_panel.xml | 224 ++++++++++++++---- .../src/main/res/values-ldpi/dimens.xml | 25 +- .../src/main/res/values-xhdpi/dimens.xml | 36 ++- .../src/main/res/values/dimens.xml | 47 +++- .../com/mogo/module/main/MainActivity.java | 18 -- .../module/main/cards/MogoModulesManager.java | 1 - .../module_main_dw_left_frame_bkg.xml | 8 +- .../res/layout/module_main_activity_main.xml | 46 ++-- .../src/main/res/values-ldpi/dimens.xml | 9 +- .../src/main/res/values-xhdpi/dimens.xml | 9 +- .../src/main/res/values/dimens.xml | 11 +- .../navi/ui/search/CategoryPresenter.java | 27 ++- .../navi/ui/search/CategorySearchFragment.kt | 32 +-- .../module/navi/ui/search/CategoryView.java | 2 - 198 files changed, 703 insertions(+), 769 deletions(-) rename modules/{mogo-module-extensions/src/main/java/com/mogo/module/extensions => mogo-module-apps/src/main/java/com/mogo/module/apps}/anim/Anim.java (76%) rename modules/{mogo-module-extensions/src/main/java/com/mogo/module/extensions => mogo-module-apps/src/main/java/com/mogo/module/apps}/anim/AnimRes.java (97%) rename modules/{mogo-module-extensions/src/main/java/com/mogo/module/extensions => mogo-module-apps/src/main/java/com/mogo/module/apps}/anim/AnimWrapper.java (95%) rename modules/{mogo-module-extensions/src/main/java/com/mogo/module/extensions => mogo-module-apps/src/main/java/com/mogo/module/apps}/anim/JSurfaceView.java (98%) rename modules/{mogo-module-extensions/src/main/java/com/mogo/module/extensions => mogo-module-apps/src/main/java/com/mogo/module/apps}/anim/KitkatAnim.java (83%) rename modules/{mogo-module-extensions/src/main/java/com/mogo/module/extensions => mogo-module-apps/src/main/java/com/mogo/module/apps}/anim/OthersAnim.java (93%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00000.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00001.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00002.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00003.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00004.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00005.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00006.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00007.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00008.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00009.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00010.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00011.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00012.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00013.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00014.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00015.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00016.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00017.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00018.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00019.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00020.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00021.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00022.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00023.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00024.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00025.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00026.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00027.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00028.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00029.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00030.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00031.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00032.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00033.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00034.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00035.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00036.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00037.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00038.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00039.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00040.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00041.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00042.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00043.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00044.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00045.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00046.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00047.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00048.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00049.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00050.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00051.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00052.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00053.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00054.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00055.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00056.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00057.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00058.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00059.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00060.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00061.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00062.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00063.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00064.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00065.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00066.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-ldpi/mogo_tts_icon_00067.png (100%) create mode 100755 modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_ai_assist.png create mode 100644 modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_ai_assist_bkg.png create mode 100755 modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_navigator_applist.png create mode 100755 modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_navigator_media.png create mode 100755 modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_navigator_navi.png create mode 100755 modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_navigator_personcenter.png rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00000.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00001.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00002.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00003.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00004.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00005.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00006.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00007.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00008.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00009.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00010.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00011.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00012.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00013.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00014.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00015.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00016.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00017.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00018.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00019.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00020.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00021.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00022.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00023.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00024.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00025.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00026.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00027.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00028.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00029.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00030.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00031.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00032.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00033.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00034.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00035.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00036.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00037.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00038.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00039.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00040.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00041.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00042.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00043.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00044.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00045.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00046.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00047.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00048.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00049.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00050.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00051.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00052.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00053.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00054.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00055.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00056.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00057.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00058.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00059.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00060.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00061.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00062.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00063.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00064.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00065.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00066.png (100%) rename modules/{mogo-module-extensions => mogo-module-apps}/src/main/res/drawable-xhdpi/mogo_tts_icon_00067.png (100%) delete mode 100755 modules/mogo-module-extensions/src/main/res/drawable-ldpi/module_ext_ic_message.png create mode 100644 modules/mogo-module-extensions/src/main/res/drawable-xhdpi/module_ext_ic_display_overview.png delete mode 100644 modules/mogo-module-extensions/src/main/res/drawable-xhdpi/module_ext_ic_message.png create mode 100644 modules/mogo-module-extensions/src/main/res/drawable-xhdpi/module_ext_ic_message2.png create mode 100644 modules/mogo-module-extensions/src/main/res/drawable-xhdpi/module_ext_ic_navi_info1.png create mode 100644 modules/mogo-module-extensions/src/main/res/drawable-xhdpi/module_ext_ic_navi_info2.png create mode 100644 modules/mogo-module-extensions/src/main/res/drawable-xhdpi/module_ext_ic_navi_info3.png create mode 100644 modules/mogo-module-extensions/src/main/res/drawable/module_ext_drawable_msg_container_bkg.xml create mode 100644 modules/mogo-module-extensions/src/main/res/drawable/module_ext_drawable_weather_bkg.xml diff --git a/config.gradle b/config.gradle index 60aa4d1cf8..eaf710f48d 100644 --- a/config.gradle +++ b/config.gradle @@ -13,7 +13,7 @@ ext { // androidx androidxappcompat : "androidx.appcompat:appcompat:1.0.2", androidxccorektx : "androidx.core:core-ktx:1.2.0", - androidxconstraintlayout : "androidx.constraintlayout:constraintlayout:1.1.3", + androidxconstraintlayout : "androidx.constraintlayout:constraintlayout:2.0.0-alpha5", androidxmultidex : "androidx.multidex:multidex:2.0.1", androidxviewpager2 : "androidx.viewpager2:viewpager2:1.0.0", androidxrecyclerview : "androidx.recyclerview:recyclerview:1.1.0", diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/search/poisearch/query/MogoPoiSearchQuery.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/poisearch/query/MogoPoiSearchQuery.java index 27076edba2..b3b539fca3 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/search/poisearch/query/MogoPoiSearchQuery.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/poisearch/query/MogoPoiSearchQuery.java @@ -21,7 +21,7 @@ public class MogoPoiSearchQuery implements Parcelable { private int pageSize; private boolean isCityLimit; private boolean isSubPois; - private boolean isDistanceSort; + private boolean isDistanceSort = true; private MogoLatLng location; /** diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorFragment.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorFragment.java index a1c65890ef..f3d240be7b 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorFragment.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorFragment.java @@ -1,6 +1,8 @@ package com.mogo.module.apps; import android.os.Bundle; +import android.view.View; +import android.widget.ImageView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -8,7 +10,9 @@ import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.mogo.commons.mvp.MvpFragment; +import com.mogo.commons.voice.AIAssist; import com.mogo.module.apps.adapter.AppIndicatorAdapter; +import com.mogo.module.apps.anim.AnimWrapper; import com.mogo.module.apps.applaunch.AppLauncher; import com.mogo.module.apps.applaunch.BaseAppLauncher; import com.mogo.module.apps.applaunch.InternalFunctionLauncher; @@ -30,6 +34,10 @@ public class AppNavigatorFragment extends MvpFragment< AppNavigatorView, AppNavi private RecyclerView mNavigatorAppsList; private AppIndicatorAdapter mAppIndicatorAdapter; + private ImageView mAIAssist; + private View mAIAssistContainer; + private AnimWrapper mAnim = new AnimWrapper(); + private BaseAppLauncher mLauncher; @Override @@ -39,10 +47,7 @@ public class AppNavigatorFragment extends MvpFragment< AppNavigatorView, AppNavi @Override protected void initViews() { -// mApps.setOnClickListener( view -> { -// openAppsPanel(); -// trackNavigatorClickEvent( 4 ); -// } ); + mLauncher = new InternalFunctionLauncher( getActivity() ); mLauncher.setNext( new AppLauncher() ); @@ -53,6 +58,48 @@ public class AppNavigatorFragment extends MvpFragment< AppNavigatorView, AppNavi mLauncher.launch( getContext(), data ); } ); mNavigatorAppsList.setAdapter( mAppIndicatorAdapter ); + + mAIAssistContainer = findViewById( R.id.module_apps_id_ai_assist_container ); + mAIAssist = findViewById( R.id.module_apps_id_ai_assist ); + mAnim.initAnim( mAIAssist ); + mAIAssist.setOnClickListener( view -> { + AIAssist.startAssistant( getContext() ); + AppServiceHandler.getApis().getAnalyticsApi().track( "Launcher_xiaozhi_Click", null ); + } ); + mAIAssistContainer.setOnClickListener( view -> { + mAIAssist.performClick(); + } ); + + AppServiceHandler.getApis().getFragmentManagerApi().addMainFragmentStackTransactionListener( size -> { + // 主页 fragment 栈变化的时候,改变动画状态 + if ( size == 0 ) { + mAnim.start(); + } else { + mAnim.stop(); + } + } ); + } + + @Override + public void hideNavigationEntrance() { + mAppIndicatorAdapter.setDatas( NavigatorApps.getAppsWithoutNavigation() ); + } + + @Override + public void showNavigationEntrance() { + mAppIndicatorAdapter.setDatas( NavigatorApps.getApps() ); + } + + @Override + public void onResume() { + super.onResume(); + mAnim.start(); + } + + @Override + public void onPause() { + super.onPause(); + mAnim.stop(); } @NonNull diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorPresenter.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorPresenter.java index 6dbdc52ac9..1abbfd47cc 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorPresenter.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorPresenter.java @@ -9,6 +9,7 @@ import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.commons.mvp.Presenter; import com.mogo.commons.voice.AIAssist; import com.mogo.commons.voice.IMogoVoiceCmdCallBack; +import com.mogo.map.navi.IMogoNaviListener2; import com.mogo.module.apps.model.AppsModel; import com.mogo.module.apps.utils.LaunchUtils; import com.mogo.service.MogoServicePaths; @@ -26,7 +27,9 @@ import org.json.JSONObject; *

u8(sF;% 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 literal 0 HcmV?d00001 diff --git a/modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_navigator_navi.png b/modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_navigator_navi.png new file mode 100755 index 0000000000000000000000000000000000000000..deee86ed158d9f8a824b944e713919ad0a9d6c81 GIT binary patch literal 11384 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 literal 0 HcmV?d00001 diff --git a/modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_navigator_personcenter.png b/modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_navigator_personcenter.png new file mode 100755 index 0000000000000000000000000000000000000000..f6ad6f732ad52df0393b2bcaf76f45725d2103d8 GIT binary patch literal 10390 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 + android:layout_height="match_parent"> + + + + + + + \ No newline at end of file diff --git a/modules/mogo-module-apps/src/main/res/values-ldpi/dimens.xml b/modules/mogo-module-apps/src/main/res/values-ldpi/dimens.xml index 63bacfaa26..faac054011 100644 --- a/modules/mogo-module-apps/src/main/res/values-ldpi/dimens.xml +++ b/modules/mogo-module-apps/src/main/res/values-ldpi/dimens.xml @@ -20,4 +20,10 @@ 18px 50px 50px + + 140px + 140px + 30px + 64px + 64px \ No newline at end of file diff --git a/modules/mogo-module-apps/src/main/res/values-xhdpi/dimens.xml b/modules/mogo-module-apps/src/main/res/values-xhdpi/dimens.xml index 2d59d27b6e..993c7c44b2 100644 --- a/modules/mogo-module-apps/src/main/res/values-xhdpi/dimens.xml +++ b/modules/mogo-module-apps/src/main/res/values-xhdpi/dimens.xml @@ -20,4 +20,10 @@ 35px 94px 94px + + 140px + 140px + 30px + 120px + 120px \ No newline at end of file diff --git a/modules/mogo-module-apps/src/main/res/values/dimens.xml b/modules/mogo-module-apps/src/main/res/values/dimens.xml index c534a52e39..b31ac60e8f 100644 --- a/modules/mogo-module-apps/src/main/res/values/dimens.xml +++ b/modules/mogo-module-apps/src/main/res/values/dimens.xml @@ -20,4 +20,10 @@ 37px 120px 120px + + 140px + 140px + 30px + 120px + 120px \ No newline at end of file diff --git a/modules/mogo-module-back/src/main/java/com/mogo/module/back/BackToMainHomeManager.java b/modules/mogo-module-back/src/main/java/com/mogo/module/back/BackToMainHomeManager.java index feba1d3563..b356e030de 100644 --- a/modules/mogo-module-back/src/main/java/com/mogo/module/back/BackToMainHomeManager.java +++ b/modules/mogo-module-back/src/main/java/com/mogo/module/back/BackToMainHomeManager.java @@ -35,14 +35,11 @@ public class BackToMainHomeManager { public static void backToLauncher() { - if ( !mStatusManager.isSearchUIShow() ) { - mFragmentManager.clearAll(); - } - - if ( mStatusManager != null ) { - if ( mStatusManager.isMainPageOnResume() ) { - return; + if ( mStatusManager.isMainPageOnResume() ) { + if ( mStatusManager.isSearchUIShow() ) { + mFragmentManager.clearAll(); } + return; } Logger.d( TAG, "返回桌面" ); diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsFragment.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsFragment.java index eb6788ead6..41dffb39d1 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsFragment.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsFragment.java @@ -11,11 +11,6 @@ import androidx.annotation.Nullable; import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.commons.mvp.MvpFragment; -import com.mogo.commons.voice.AIAssist; -import com.mogo.module.extensions.anim.AnimWrapper; -import com.mogo.service.MogoServicePaths; -import com.mogo.service.analytics.IMogoAnalytics; -import com.mogo.service.fragmentmanager.IMogoFragmentManager; /** * @author congtaowang @@ -29,24 +24,13 @@ public class ExtensionsFragment extends MvpFragment< ExtensionsView, ExtensionsP public static final int MAX_DISPLAY_MSG_AMOUNT = 99; - private ImageView mVoiceIcon; - private AnimWrapper mAnim = new AnimWrapper(); - private TextView mVoiceMsg; - - private TextView mTime; - private TextView mDate; - private View mWeatherContainer; private ImageView mWeatherIcon; private TextView mWeatherTemp; - private TextView mWeatherDesc; private View mMsgContainer; private TextView mMsgCounter; - private IMogoAnalytics mAnalytics; - private IMogoFragmentManager mMogoFragmentManager; - @Override protected int getLayoutId() { return R.layout.module_ext_layout_extensions; @@ -54,25 +38,10 @@ public class ExtensionsFragment extends MvpFragment< ExtensionsView, ExtensionsP @Override protected void initViews() { - mVoiceIcon = findViewById( R.id.module_ext_id_voice ); - mAnim.initAnim( mVoiceIcon ); - mVoiceMsg = findViewById( R.id.module_ext_id_voice_msg ); - - mVoiceIcon.setOnClickListener( view -> { - mVoiceMsg.performClick(); - } ); - mVoiceMsg.setOnClickListener( view -> { - AIAssist.startAssistant( getContext() ); - mAnalytics.track( "Launcher_xiaozhi_Click", null ); - } ); - - mTime = findViewById( R.id.module_ext_id_time ); - mDate = findViewById( R.id.module_ext_id_date ); mWeatherContainer = findViewById( R.id.module_ext_id_weather_container ); mWeatherIcon = findViewById( R.id.module_ext_id_weather_icon ); mWeatherTemp = findViewById( R.id.module_ext_id_weather_temp ); - mWeatherDesc = findViewById( R.id.module_ext_id_weather_desc ); mMsgContainer = findViewById( R.id.module_ext_id_msg ); mMsgContainer.setOnClickListener( view -> { @@ -90,35 +59,16 @@ public class ExtensionsFragment extends MvpFragment< ExtensionsView, ExtensionsP @Override public void onActivityCreated( @Nullable Bundle savedInstanceState ) { super.onActivityCreated( savedInstanceState ); - mAnalytics = ( IMogoAnalytics ) ARouter.getInstance().build( MogoServicePaths.PATH_UTILS_ANALYTICS ).navigation( getContext() ); - mMogoFragmentManager = ( IMogoFragmentManager ) ARouter.getInstance().build( MogoServicePaths.PATH_FRAGMENT_MANAGER ).navigation( getContext() ); - - mMogoFragmentManager.addMainFragmentStackTransactionListener( size -> { - // 主页 fragment 栈变化的时候,改变动画状态 - if ( size == 0 ) { - mAnim.start(); - } else { - mAnim.stop(); - } - } ); } @Override public void onResume() { super.onResume(); - mAnim.start(); } @Override public void onStop() { super.onStop(); - mAnim.stop(); - } - - @Override - public void renderTime( String date, String time ) { - mDate.setText( date ); - mTime.setText( time ); } @Override @@ -134,7 +84,6 @@ public class ExtensionsFragment extends MvpFragment< ExtensionsView, ExtensionsP hidden |= TextUtils.isEmpty( temp ); hidden |= TextUtils.isEmpty( desc ); mWeatherTemp.setText( temp ); - mWeatherDesc.setText( desc ); mWeatherContainer.setVisibility( hidden ? View.GONE : View.VISIBLE ); } @@ -143,11 +92,4 @@ public class ExtensionsFragment extends MvpFragment< ExtensionsView, ExtensionsP mMsgContainer.setVisibility( hasMsg ? View.VISIBLE : View.GONE ); mMsgCounter.setText( amount > MAX_DISPLAY_MSG_AMOUNT ? getString( R.string.module_ext_str_dots ) : String.valueOf( amount ) ); } - - @Override - public void renderAITipWords( String word ) { - if ( !TextUtils.isEmpty( word ) ) { - mVoiceMsg.setText( word ); - } - } } diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsPresenter.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsPresenter.java index 6621be43bd..f779f76aec 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsPresenter.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsPresenter.java @@ -1,13 +1,5 @@ package com.mogo.module.extensions; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.os.Handler; -import android.os.Looper; -import android.os.Message; - import androidx.annotation.NonNull; import androidx.lifecycle.LifecycleOwner; @@ -20,23 +12,6 @@ import com.mogo.module.extensions.weather.WeatherModel; import com.mogo.service.MogoServicePaths; import com.mogo.service.statusmanager.IMogoMsgCenter; import com.mogo.service.statusmanager.IMogoMsgCenterListener; -import com.mogo.service.statusmanager.IMogoStatusChangedListener; -import com.mogo.service.statusmanager.IMogoStatusManager; -import com.mogo.service.statusmanager.StatusDescriptor; -import com.mogo.utils.UiThreadHandler; -import com.mogo.utils.WorkThreadHandler; -import com.mogo.utils.logger.Logger; - -import java.util.ArrayDeque; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.HashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.Queue; -import java.util.Random; -import java.util.Set; /** @@ -46,136 +21,26 @@ import java.util.Set; * 描述 */ public class ExtensionsPresenter extends Presenter< ExtensionsView > implements WeatherCallback, - IMogoMsgCenterListener, - IMogoStatusChangedListener { + IMogoMsgCenterListener { private static final String TAG = "ExtensionsPresenter"; - private String[] mWeeks; - private WeatherModel mWeatherModel; - public static final int MSG_SWITCH_AI_TIP_WORDS = 4000; - public static final long INTERVAL_TIME = 8_000L; - private String[] mAITipWords; - private int mCurrentIndex = 0; - private Handler mHandler = new Handler( Looper.getMainLooper() ) { - @Override - public void handleMessage( Message msg ) { - super.handleMessage( msg ); - if ( msg.what == MSG_SWITCH_AI_TIP_WORDS ) { - if ( mView != null ) { - if ( mCurrentIndex < mAITipWords.length ) { - mView.renderAITipWords( mAITipWords[mCurrentIndex++] ); - } else { - mCurrentIndex = 0; - mHasTipWords = generateTipWordsSequence(); - } - } - if ( mHasTipWords ) { - mHandler.sendEmptyMessageDelayed( MSG_SWITCH_AI_TIP_WORDS, INTERVAL_TIME ); - } - } - } - }; - private boolean mHasTipWords = false; - - private boolean mHasStarted = false; - - /** - * 接收时间变化的广播 - */ - private BroadcastReceiver mReceiver = new BroadcastReceiver() { - @Override - public void onReceive( Context context, Intent intent ) { - try { - WorkThreadHandler.getInstance().post( () -> { - refreshTimeAndDate(); - } ); - } catch ( Exception e ) { - Logger.e( TAG, e, "error. " ); - } - } - }; - private IMogoMsgCenter mMsgCenter; - private IMogoStatusManager mStatusManager; - - private boolean generateTipWordsSequence() { - if ( mAITipWords != null && mAITipWords.length > 0 ) { - Random random = new Random( System.currentTimeMillis() ); - int loop = mAITipWords.length / 2; - int bound = mAITipWords.length; - for ( int i = 0; i < loop; i++ ) { - int target = random.nextInt( bound ); - int sweepTarget = random.nextInt( bound ); - if ( target != sweepTarget ) { - String targetStr = mAITipWords[target]; - mAITipWords[target] = mAITipWords[sweepTarget]; - mAITipWords[sweepTarget] = targetStr; - } - } - Logger.d( TAG, "next generate sequence: " + mAITipWords ); - return true; - } - return false; - } - public ExtensionsPresenter( ExtensionsView view ) { super( view ); - mWeeks = getContext().getResources().getStringArray( R.array.module_ext_str_arr_week ); - mAITipWords = getContext().getResources().getStringArray( R.array.module_ext_str_arr_ai_tips ); mWeatherModel = new WeatherModel( getContext() ); } @Override public void onCreate( @NonNull LifecycleOwner owner ) { super.onCreate( owner ); - registerTimerReceiver(); mWeatherModel.init( this ); mWeatherModel.queryWeatherInformation(); - refreshTimeAndDate(); mMsgCenter = ( IMogoMsgCenter ) ARouter.getInstance().build( MogoServicePaths.PATH_MSG_CENTER ).navigation(); mMsgCenter.registerMsgCenterListener( this ); - mHasTipWords = generateTipWordsSequence(); - - mStatusManager = ( IMogoStatusManager ) ARouter.getInstance().build( MogoServicePaths.PATH_STATUS_MANAGER ).navigation(); - mStatusManager.registerStatusChangedListener( TAG, StatusDescriptor.APP_LIST_UI, this ); - mStatusManager.registerStatusChangedListener( TAG, StatusDescriptor.SEARCH_UI, this ); - } - - /** - * 注册时间变化监听 - */ - private void registerTimerReceiver() { - IntentFilter filter = new IntentFilter(); - filter.addAction( Intent.ACTION_TIME_TICK ); - filter.addAction( Intent.ACTION_TIME_CHANGED ); - filter.addAction( Intent.ACTION_TIMEZONE_CHANGED ); - filter.addAction( Intent.ACTION_CONFIGURATION_CHANGED ); - getContext().registerReceiver( mReceiver, filter ); - } - - private void refreshTimeAndDate() { - Calendar calendar = Calendar.getInstance(); - int hour = calendar.get( Calendar.HOUR_OF_DAY ); - int minute = calendar.get( Calendar.MINUTE ); - - int month = calendar.get( Calendar.MONTH ); - int day = calendar.get( Calendar.DAY_OF_MONTH ); - int week = calendar.get( Calendar.DAY_OF_WEEK ); - - String timeStr = getContext().getResources().getString( R.string.module_ext_str_time_format, hour, minute > 9 ? String.valueOf( minute ) : "0" + minute ); - String dateStr = getContext().getResources().getString( R.string.module_ext_str_date_format, month + 1, day, mWeeks[week - 1] ); - - UiThreadHandler.post( () -> { - try { - mView.renderTime( dateStr, timeStr ); - } catch ( Exception e ) { - e.printStackTrace(); - } - } ); } @Override @@ -197,43 +62,14 @@ public class ExtensionsPresenter extends Presenter< ExtensionsView > implements } } - @Override - public void onStatusChanged( StatusDescriptor descriptor, boolean isTrue ) { - switch ( descriptor ) { - case APP_LIST_UI: - case SEARCH_UI: -// changeAutoSwitchVoiceTipsWordsStatus( !isTrue ); - break; - } - } - @Override public void onResume( @NonNull LifecycleOwner owner ) { super.onResume( owner ); -// changeAutoSwitchVoiceTipsWordsStatus( true ); } @Override public void onPause( @NonNull LifecycleOwner owner ) { super.onPause( owner ); -// changeAutoSwitchVoiceTipsWordsStatus( true ); - } - - private void changeAutoSwitchVoiceTipsWordsStatus( boolean autoChange ) { - if ( !mHasTipWords ) { - return; - } - if ( mHasStarted ) { - return; - } - mHasStarted = true; - if ( autoChange ) { - mHandler.sendEmptyMessageDelayed( MSG_SWITCH_AI_TIP_WORDS, INTERVAL_TIME ); - Logger.d( TAG, "auto switch" ); - } else { - mHandler.removeMessages( MSG_SWITCH_AI_TIP_WORDS ); - Logger.d( TAG, "stop auto switch" ); - } } @Override @@ -242,7 +78,6 @@ public class ExtensionsPresenter extends Presenter< ExtensionsView > implements if ( mWeatherModel != null ) { mWeatherModel.destroy(); } - getContext().unregisterReceiver( mReceiver ); if ( mMsgCenter != null ) { mMsgCenter.unregisterMsgCenterListener( this ); } diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsView.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsView.java index 91f3d5e19c..fa1ef5e128 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsView.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsView.java @@ -11,14 +11,6 @@ import com.mogo.module.extensions.weather.WeatherInfo; */ public interface ExtensionsView extends IView { - /** - * 刷新日期、时间 - * - * @param date 日期 - * @param time 时间 - */ - void renderTime( String date, String time ); - /** * 天气信息 * @@ -35,11 +27,4 @@ public interface ExtensionsView extends IView { * @param amount 消息数量 */ void renderMsgInfo( boolean hasMsg, int amount ); - - /** - * 更换小智语音提示词 - * - * @param word - */ - void renderAITipWords( String word ); } diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java index 41275ad0cc..bc82a3cdc3 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java @@ -1,12 +1,12 @@ package com.mogo.module.extensions.entrance; import android.content.Intent; +import android.graphics.Rect; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.util.Log; -import android.view.MotionEvent; import android.view.View; import android.widget.ImageView; import android.widget.TextView; @@ -17,16 +17,13 @@ import androidx.annotation.Nullable; import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.commons.mvp.MvpFragment; -import com.mogo.map.MogoLatLng; import com.mogo.map.listener.IMogoMapListener; import com.mogo.map.location.IMogoLocationClient; import com.mogo.map.location.MogoLocation; import com.mogo.map.marker.IMogoMarkerManager; -import com.mogo.map.model.MogoPoi; import com.mogo.map.navi.IMogoAimlessModeListener; import com.mogo.map.navi.IMogoNavi; import com.mogo.map.navi.IMogoNaviListener; -import com.mogo.map.navi.MogoCongestionInfo; import com.mogo.map.navi.MogoNaviInfo; import com.mogo.map.navi.MogoTraffic; import com.mogo.map.uicontroller.EnumMapUI; @@ -39,7 +36,6 @@ import com.mogo.module.common.map.MapCenterPointStrategy; import com.mogo.module.common.map.Scene; import com.mogo.module.extensions.ExtensionsModuleConst; import com.mogo.module.extensions.R; -import com.mogo.module.extensions.dialog.NaviNoticeDialog; import com.mogo.module.extensions.navi.NaviInfoView; import com.mogo.module.share.ShareControl; import com.mogo.service.IMogoServiceApis; @@ -49,12 +45,11 @@ import com.mogo.service.entrance.ButtonIndex; import com.mogo.service.fragmentmanager.IMogoFragmentManager; import com.mogo.service.intent.IMogoIntentListener; import com.mogo.service.map.IMogoMapService; -import com.mogo.service.module.IMogoAddressManager; import com.mogo.service.module.IMogoRegisterCenter; import com.mogo.service.statusmanager.IMogoStatusChangedListener; import com.mogo.service.statusmanager.IMogoStatusManager; import com.mogo.service.statusmanager.StatusDescriptor; -import com.mogo.utils.UiThreadHandler; +import com.mogo.utils.ResourcesHelper; import com.mogo.utils.logger.Logger; import java.util.HashMap; @@ -82,15 +77,15 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent private TextView mUpload; private ImageView mUploading; - private View mVRMode; private View mMove2CurrentLocation; private NaviInfoView mNaviInfo; private TextView mExitNavi; - private View mSpeedLimit; - private TextView mSpeedLimitValue; - private View mSpeedLimitUnit; + + private View mDisplayOverview; + private ImageView mDisplayOverviewIcon; + private TextView mDisplayOverviewText; private IMogoServiceApis mApis; private IMogoMapService mService; @@ -165,6 +160,8 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent public static final int MSG_STOP_ANIM = 308; public static final long TIME_FRAME_INTERVAL_TIME = 80; + private Rect mDisplayOverviewBounds; + @Override protected int getLayoutId() { return R.layout.module_ext_layout_entrance; @@ -193,15 +190,24 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent traceData( "1" ); } } ); - mVRMode = findViewById( R.id.module_entrance_id_vr_mode ); - mVRMode.setOnClickListener( view -> { + + mDisplayOverview = findViewById( R.id.module_ext_id_display_overview ); + mDisplayOverviewText = findViewById( R.id.module_ext_id_display_overview_text ); + mDisplayOverviewIcon = findViewById( R.id.module_ext_id_display_overview_icon ); + mDisplayOverview.setOnClickListener( view -> { + if ( !mStatusManager.isDisplayOverview() ) { + mMApUIController.displayOverview( mDisplayOverviewBounds ); + } else { + mMApUIController.recoverLockMode(); + } + mStatusManager.setDisplayOverview( TAG, !mStatusManager.isDisplayOverview() ); } ); mMove2CurrentLocation = findViewById( R.id.module_entrance_id_move2_current_location ); mMove2CurrentLocation.setOnClickListener( view -> { final MogoLocation location = mMogoLocationClient.getLastKnowLocation(); if ( location != null ) { - if ( !mMogoStatusManager.isADASShow() ) { + if ( !mMogoStatusManager.isV2XShow() ) { mMogoStatusManager.setUserInteractionStatus( TAG, true, false ); mMApUIController.setLockZoom( 16 ); mMApUIController.changeZoom( 16.0f ); @@ -218,6 +224,7 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent if ( mIsLock ) { new WMDialog.Builder( getContext() ) .setOkButton( R.string.module_commons_button_ok, ( dlg, which ) -> { + dlg.dismiss(); mMogoNavi.stopNavi(); } ) .setCancelButton( R.string.module_commons_button_cancel, ( dlg, which ) -> { @@ -244,10 +251,6 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent mCameraMode.setText( getString( mCameraMode.isSelected() ? R.string.mode_car_up : R.string.mode_north_up ) ); } ); - mSpeedLimit = findViewById( R.id.module_entrance_id_speed_limit_container ); - mSpeedLimitValue = findViewById( R.id.module_entrance_id_speed_limit_value ); - mSpeedLimitUnit = findViewById( R.id.module_entrance_id_speed_limit_unit ); - mApis.getIntentManagerApi().registerIntentListener( AUTONAVI_STANDARD_BROADCAST_RECV, new IMogoIntentListener() { @Override @@ -268,6 +271,12 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent MogoEntranceButtons.save( ButtonIndex.BUTTON1, findViewById( R.id.module_entrance_id_button1 ) ); MogoEntranceButtons.save( ButtonIndex.BUTTON2, findViewById( R.id.module_entrance_id_button2 ) ); + mDisplayOverviewBounds = new Rect( + ResourcesHelper.getDimensionPixelSize( getContext(), R.dimen.module_map_display_overview_left_margin ), + ResourcesHelper.getDimensionPixelSize( getContext(), R.dimen.module_map_display_overview_top_margin ), + ResourcesHelper.getDimensionPixelSize( getContext(), R.dimen.module_map_display_overview_right_margin ), + ResourcesHelper.getDimensionPixelSize( getContext(), R.dimen.module_map_display_overview_bottom_margin ) + ); } private static final String AUTONAVI_STANDARD_BROADCAST_RECV = "AUTONAVI_STANDARD_BROADCAST_RECV"; @@ -296,6 +305,7 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent mMogoMarkerManager = mService.getMarkerManager( getContext() ); mMogoStatusManager.registerStatusChangedListener( TAG, StatusDescriptor.UPLOADING, this ); + mMogoStatusManager.registerStatusChangedListener( TAG, StatusDescriptor.DISPLAY_OVERVIEW, this ); } @Override @@ -343,22 +353,21 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent @Override public void onStartNavi() { mNaviInfo.setVisibility( View.VISIBLE ); - mCameraMode.setVisibility( View.VISIBLE ); mExitNavi.setVisibility( View.VISIBLE ); mMApUIController.changeMapMode( mCameraMode.isSelected() ? EnumMapUI.NorthUP_2D : EnumMapUI.CarUp_2D ); MapCenterPointStrategy.setMapCenterPointBySceneAndDelay( mMApUIController, Scene.NAVI, 500, () -> { return !mMogoNavi.isNaviing(); } ); + mDisplayOverview.setVisibility( View.VISIBLE ); mApis.getAnalyticsApi().track( "Navigation_begin", new HashMap<>() ); } @Override public void onStopNavi() { mNaviInfo.setVisibility( View.GONE ); - mCameraMode.setVisibility( View.GONE ); mExitNavi.setVisibility( View.GONE ); - mSpeedLimit.setVisibility( View.GONE ); mMApUIController.changeMapMode( EnumMapUI.NorthUP_2D ); + mDisplayOverview.setVisibility( View.GONE ); MapCenterPointStrategy.setMapCenterPointByScene( mMApUIController, Scene.AIMLESS ); } @@ -367,14 +376,6 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent if ( traffic == null ) { return; } - if ( traffic.getSpeedLimit() <= 0 ) { - mSpeedLimit.setVisibility( View.INVISIBLE ); - mSpeedLimitValue.setText( "--" ); - } else { - // 暂时不显示限速,等有好的显示方案在放开 - mSpeedLimit.setVisibility( View.INVISIBLE ); - mSpeedLimitValue.setText( String.valueOf( traffic.getSpeedLimit() ) ); - } } @Override @@ -396,34 +397,6 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent mAnalytics.track( "Launcher_Share_Click", properties ); } - @Override - public void showNaviPanelWidgets() { - if ( !mMogoNavi.isNaviing() ) { - return; - } - mNaviInfo.setVisibility( View.VISIBLE ); - mCameraMode.setVisibility( View.VISIBLE ); - try { - mApis.getWindowManagerApi().showAll(); - } catch ( Exception e ) { - Logger.e( TAG, e, "error." ); - } - } - - @Override - public void hideNaviPanelWidgets() { - if ( !mMogoNavi.isNaviing() ) { - return; - } - mNaviInfo.setVisibility( View.GONE ); - mCameraMode.setVisibility( View.GONE ); - try { - mApis.getWindowManagerApi().hideAll(); - } catch ( Exception e ) { - Logger.e( TAG, e, "error." ); - } - } - @Override public void onStatusChanged( StatusDescriptor descriptor, boolean isTrue ) { if ( mUploadRoadCondition == null ) { @@ -446,6 +419,17 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent mUploading.setVisibility( View.GONE ); mUpload.setVisibility( View.VISIBLE ); } + } else if ( descriptor == StatusDescriptor.DISPLAY_OVERVIEW ) { + if ( !mMogoNavi.isNaviing() ) { + return; + } + if ( isTrue ) { + mDisplayOverviewText.setText( "退出全览" ); + mCameraMode.setVisibility( View.GONE ); + } else { + mDisplayOverviewText.setText( "全览" ); + mCameraMode.setVisibility( View.VISIBLE ); + } } } diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntrancePresenter.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntrancePresenter.java index 2f1d174767..41e6ccc4fa 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntrancePresenter.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntrancePresenter.java @@ -2,7 +2,6 @@ package com.mogo.module.extensions.entrance; import android.content.Context; import android.content.Intent; -import android.net.Uri; import android.text.TextUtils; import android.util.Log; @@ -13,7 +12,6 @@ import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.commons.mvp.Presenter; import com.mogo.commons.voice.AIAssist; import com.mogo.commons.voice.IMogoVoiceCmdCallBack; -import com.mogo.module.authorize.authprovider.invoke.AuthorizeInvokerConstant; import com.mogo.module.authorize.authprovider.module.IMogoAuthorizeModuleManager; import com.mogo.module.extensions.ExtensionsModuleConst; import com.mogo.module.share.ShareControl; @@ -22,9 +20,7 @@ import com.mogo.service.MogoServicePaths; import com.mogo.service.analytics.IMogoAnalytics; import com.mogo.service.intent.IMogoIntentListener; import com.mogo.service.intent.IMogoIntentManager; -import com.mogo.service.statusmanager.IMogoStatusChangedListener; import com.mogo.service.statusmanager.IMogoStatusManager; -import com.mogo.service.statusmanager.StatusDescriptor; import com.mogo.utils.logger.Logger; import org.json.JSONObject; @@ -40,7 +36,7 @@ import static com.mogo.module.authorize.authprovider.invoke.AuthorizeInvokerCons *

* 描述 */ -public class EntrancePresenter extends Presenter< EntranceView > implements IMogoStatusChangedListener { +public class EntrancePresenter extends Presenter< EntranceView > { private Context mContext; private IMogoAnalytics mAnalytics; @@ -82,7 +78,7 @@ public class EntrancePresenter extends Presenter< EntranceView > implements IMog Log.d( TAG, "免唤醒 mogoVoiceListener needAuthorize = " + mIMogoAuthorizeModuleManager.needAuthorize( AUTHORIZE_TYPE_LAUNCHER_SHARE ) + " >>>cmd = " + cmd ); mVoiceCmdType = cmd; if ( cmd.equals( ExtensionsModuleConst.CANCLE_SHARE ) - /*|| cmd.equals( ExtensionsModuleConst.CLOSE ) */) { //取消分享,关闭页面 + /*|| cmd.equals( ExtensionsModuleConst.CLOSE ) */ ) { //取消分享,关闭页面 if ( mIMogoAuthorizeModuleManager.needAuthorize( AUTHORIZE_TYPE_LAUNCHER_SHARE ) ) { mIMogoAuthorizeModuleManager.invokeAuthorization( AUTHORIZE_TYPE_LAUNCHER_SHARE ); } else { @@ -129,7 +125,6 @@ public class EntrancePresenter extends Presenter< EntranceView > implements IMog @Override public void onCreate( @NonNull LifecycleOwner owner ) { super.onCreate( owner ); - mStatusManager.registerStatusChangedListener( TAG, StatusDescriptor.DISPLAY_OVERVIEW, this ); } /** @@ -276,7 +271,7 @@ public class EntrancePresenter extends Presenter< EntranceView > implements IMog } private void uploadRoadCondition() { - mStatusManager.setUploadingStatus("CARD_TYPE_ROAD_CONDITION", true); + mStatusManager.setUploadingStatus( "CARD_TYPE_ROAD_CONDITION", true ); traceTanluData( "2" ); sendShareReceiver( "1" ); @@ -286,7 +281,7 @@ public class EntrancePresenter extends Presenter< EntranceView > implements IMog } private void uploadTrfficCheck() { - mStatusManager.setUploadingStatus("CARD_TYPE_ROAD_CONDITION", true); + mStatusManager.setUploadingStatus( "CARD_TYPE_ROAD_CONDITION", true ); sendShareReceiver( "2" ); Logger.d( "EntrancePresenter", "mogoIntentListener 分享交通检查 ----> " ); traceTypeData( "3" ); @@ -294,7 +289,7 @@ public class EntrancePresenter extends Presenter< EntranceView > implements IMog } private void uploadRoadClosed() { - mStatusManager.setUploadingStatus("CARD_TYPE_ROAD_CONDITION", true); + mStatusManager.setUploadingStatus( "CARD_TYPE_ROAD_CONDITION", true ); sendShareReceiver( "3" ); Logger.d( "EntrancePresenter", "mogoIntentListener 分享封路 ----> " ); traceTypeData( "4" ); @@ -364,15 +359,4 @@ public class EntrancePresenter extends Presenter< EntranceView > implements IMog AIAssist.getInstance( mContext ).unregisterUnWakeupCommand( ExtensionsModuleConst.UPLOAD_TRAFFIC_CHECK ); AIAssist.getInstance( mContext ).unregisterUnWakeupCommand( ExtensionsModuleConst.UPLOAD_ROAD_CLOSURE ); } - - @Override - public void onStatusChanged( StatusDescriptor descriptor, boolean isTrue ) { - if ( descriptor == StatusDescriptor.DISPLAY_OVERVIEW ) { - if ( isTrue ) { - mView.hideNaviPanelWidgets(); - } else { - mView.showNaviPanelWidgets(); - } - } - } } diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceView.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceView.java index 6309e1b02c..55f070eb71 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceView.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceView.java @@ -10,7 +10,4 @@ import com.mogo.commons.mvp.IView; */ public interface EntranceView extends IView { - void showNaviPanelWidgets(); - - void hideNaviPanelWidgets(); } diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/navi/BaseNaviInfoView.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/navi/BaseNaviInfoView.java index a0c76b7dad..700c23d406 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/navi/BaseNaviInfoView.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/navi/BaseNaviInfoView.java @@ -51,21 +51,58 @@ public abstract class BaseNaviInfoView extends RelativeLayout { protected void fillNextCrossDistance( TextView target, TextView unit, int distance ) { if ( distance >= 1000 ) { target.setText( String.format( "%.1f", distance / 1000f ) ); - unit.setText( "公里" ); + unit.setText( "km" ); } else { target.setText( distance + "" ); - unit.setText( "米" ); + unit.setText( "m" ); } } protected void fillFormatSurplusDistance( int m, StringBuilder builder ) { if ( m >= 1000 ) { - builder.append( String.format( "%.1f公里", m / 1000f ) ); + builder.append( String.format( "%.1fkm", m / 1000f ) ); } else { - builder.append( m ).append( "米" ); + builder.append( m ).append( "m" ); } } + protected String getFormatSurplusDistance( int m ) { + if ( m >= 1000 ) { + mFormatSurplusDistanceUnit = "km"; + return String.format( "%.1f", m / 1000f ); + } else { + mFormatSurplusDistanceUnit = "m"; + return String.format( "%d", m ); + } + } + + private String mFormatSurplusDistanceUnit = ""; + + protected String getFormatSurplusDistanceUnit() { + return mFormatSurplusDistanceUnit; + } + + protected String getFormatSurplusTime( int seconds ) { + if ( seconds > 60 * 60 ) { + mFormatSurplusDistanceUnit = "h"; + return String.format( "%.1f", ( ( float ) seconds ) / 60 * 60 ); + } + + if ( seconds > 60 ) { + mFormatSurplusTimeUnit = "min"; + return String.format( "%.1f", ( ( float ) seconds ) / 60 ); + } + + mFormatSurplusTimeUnit = "s"; + return String.format( "%d", seconds ); + } + + private String mFormatSurplusTimeUnit = ""; + + protected String getFormatSurplusTimeUnit() { + return mFormatSurplusTimeUnit; + } + protected void fillFormatTime( int seconds, StringBuilder builder ) { int days = seconds / ( 24 * 60 * 60 ); if ( days > 0 ) { @@ -81,6 +118,29 @@ public abstract class BaseNaviInfoView extends RelativeLayout { builder.append( min > 1 ? min : 1 ).append( "分钟" ); } + protected String getArriveTime( int seconds ) { + int days = seconds / ( 24 * 60 * 60 ); + if ( days > 0 ) { + return String.format( "%d天后", days ); + } else { + seconds -= days * 24 * 60 * 60; + int hours = seconds / ( 60 * 60 ); + seconds -= hours * 60 * 60; + int min = seconds / 60; + Calendar calendar = Calendar.getInstance(); + int curHour = calendar.get( Calendar.HOUR_OF_DAY ); + int curMin = calendar.get( Calendar.MINUTE ); + if ( curHour + hours + ( curMin + min ) / 60 > 24 ) { + return "一天后"; + } else { + calendar.add( Calendar.HOUR_OF_DAY, hours ); + calendar.add( Calendar.MINUTE, min ); + SimpleDateFormat dateFormat = new SimpleDateFormat( "HH:mm" ); + return dateFormat.format( calendar.getTime() ); + } + } + } + protected void fillArriveTime( int seconds, StringBuilder builder ) { int days = seconds / ( 24 * 60 * 60 ); diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/navi/NaviInfoView.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/navi/NaviInfoView.java index 8c34869f9c..c15abd7991 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/navi/NaviInfoView.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/navi/NaviInfoView.java @@ -23,9 +23,12 @@ public class NaviInfoView extends BaseNaviInfoView { private TextView distance; private TextView distanceUnit; private TextView nextRoad; - private TextView estimateInfo; - private StringBuilder mBuilder = new StringBuilder(); + private TextView remainingDistance; + private TextView remainingDistanceUnit; + private TextView remainingTime; + private TextView remainingTimeUnit; + private TextView arriveTime; public NaviInfoView( Context context ) { this( context, null ); @@ -42,7 +45,12 @@ public class NaviInfoView extends BaseNaviInfoView { distance = findViewById( R.id.module_map_id_navi_next_info_distance ); distanceUnit = findViewById( R.id.module_map_id_navi_next_info_distance_unit ); nextRoad = findViewById( R.id.module_map_id_navi_next_info_road ); - estimateInfo = findViewById( R.id.module_map_id_navi_arrive_destination_estimate_info ); + + remainingDistance = findViewById( R.id.module_map_id_remaining_distance ); + remainingDistanceUnit = findViewById( R.id.module_map_id_remaining_distance_unit ); + remainingTime = findViewById( R.id.module_map_id_remaining_time ); + remainingTimeUnit = findViewById( R.id.module_map_id_remaining_time_unit ); + arriveTime = findViewById( R.id.module_map_id_arrive_time ); } @Override @@ -55,46 +63,12 @@ public class NaviInfoView extends BaseNaviInfoView { fillNextCrossIconType( turnIcon, naviInfo.getIconResId() ); nextRoad.setText( naviInfo.getNextRoadName() ); - try { - mBuilder.delete( 0, mBuilder.length() ); - } catch ( Exception e ) { - e.printStackTrace(); - } - mBuilder.append( "剩余" ); - fillFormatSurplusDistance( naviInfo.getPathRetainDistance(), mBuilder ); - mBuilder.append( " " ); - fillFormatTime( naviInfo.getPathRetainTime(), mBuilder ); - mBuilder.append( "\n" ); - fillArriveTime( naviInfo.getPathRetainTime(), mBuilder ); + remainingDistance.setText( getFormatSurplusDistance( naviInfo.getPathRetainDistance() ) ); + remainingDistanceUnit.setText( getFormatSurplusDistanceUnit() ); - final String text = mBuilder.toString(); - estimateInfo.setText( text ); - } + remainingTime.setText( getFormatSurplusTime( naviInfo.getPathRetainTime() ) ); + remainingTimeUnit.setText( getFormatSurplusTimeUnit() ); - /** - * 获取当行信息 - * - * @return - */ - public String getGuideInfo() { - StringBuilder builder = new StringBuilder(); - if ( getVisibility() == VISIBLE ) { - builder.append( distance.getText() ); - builder.append( nextRoad.getText() ); - } - return builder.toString(); - } - - /** - * 获取剩余里程 - * - * @return - */ - public String getPathRetainDistance() { - StringBuilder builder = new StringBuilder(); - if ( getVisibility() == VISIBLE ) { - builder.append( estimateInfo.getText() ); - } - return builder.toString(); + arriveTime.setText( getArriveTime( naviInfo.getPathRetainTime() ) ); } } diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/module_ext_ic_message.png b/modules/mogo-module-extensions/src/main/res/drawable-ldpi/module_ext_ic_message.png deleted file mode 100755 index 09af5d28bdfed0c4782c8d08e9861b13f956df2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 467 zcmV;^0WAKBP)Px$jY&j7R7ef&mAy&>K@^2|5-mi*!auYS323KS=o8pl8t@SW8^t%U(O!ES1q(Y# zXQ_>qMFc^Jg@pzb6;Tl}<9EXjZk90KT_Xh910TDybLO7SFnbdOnX(=DZ#!VLKge1u z-bomRHz*rps$Bn0gcji%qN*_{fxJj-MbS>!2hk;LfV{*K?7%xbL9wOD6kG?<7Iejn z^K1&v;T6W?^Qp!ZnuZT3`3f*U0TO)d^Qq@3v<;%dPmAzu)}7YM;ZrH+am_Gy!^y39 zJZ|bFypc63`GWhYaG|R5?Hf?~17EOwx1Y*F&Zq7RzF=i$I$L`Mb3$dydcZ1wkMnga z{mpFz&xfDKT60I^Q@lBl&UOX)#@PfT79YVg^lF#kT?WyDW=%)j#KIAt%|RKYCyQqY z9^nO|8e~v|J8;`9!3U5`1m)oj(rPtXV#H0NfiWnAoN|?Zycmw9KktHQ1)Og{4n9uDc_dt5VRJJ4P`@C6ofZG?@V6Dj}z002ov JPDHLkV1nXo$E^SW diff --git a/modules/mogo-module-extensions/src/main/res/drawable-xhdpi/module_ext_ic_display_overview.png b/modules/mogo-module-extensions/src/main/res/drawable-xhdpi/module_ext_ic_display_overview.png new file mode 100644 index 0000000000000000000000000000000000000000..9adb3bbe3003382d0bd079da49f72be12d5b6886 GIT binary patch literal 1484 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 FV1nt!5@P@W literal 0 HcmV?d00001 diff --git a/modules/mogo-module-extensions/src/main/res/drawable/module_ext_drawable_msg_bkg.xml b/modules/mogo-module-extensions/src/main/res/drawable/module_ext_drawable_msg_bkg.xml index 58d86caa09..670765d49a 100644 --- a/modules/mogo-module-extensions/src/main/res/drawable/module_ext_drawable_msg_bkg.xml +++ b/modules/mogo-module-extensions/src/main/res/drawable/module_ext_drawable_msg_bkg.xml @@ -1,9 +1,8 @@ - - - + + \ No newline at end of file diff --git a/modules/mogo-module-extensions/src/main/res/drawable/module_ext_drawable_msg_container_bkg.xml b/modules/mogo-module-extensions/src/main/res/drawable/module_ext_drawable_msg_container_bkg.xml new file mode 100644 index 0000000000..12a3b15758 --- /dev/null +++ b/modules/mogo-module-extensions/src/main/res/drawable/module_ext_drawable_msg_container_bkg.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/modules/mogo-module-extensions/src/main/res/drawable/module_ext_drawable_weather_bkg.xml b/modules/mogo-module-extensions/src/main/res/drawable/module_ext_drawable_weather_bkg.xml new file mode 100644 index 0000000000..700b8df8e0 --- /dev/null +++ b/modules/mogo-module-extensions/src/main/res/drawable/module_ext_drawable_weather_bkg.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/mogo-module-extensions/src/main/res/drawable/module_ext_dw_common_corner_bkg.xml b/modules/mogo-module-extensions/src/main/res/drawable/module_ext_dw_common_corner_bkg.xml index e90fdc8ce3..9c3715fa3a 100644 --- a/modules/mogo-module-extensions/src/main/res/drawable/module_ext_dw_common_corner_bkg.xml +++ b/modules/mogo-module-extensions/src/main/res/drawable/module_ext_dw_common_corner_bkg.xml @@ -1,15 +1,9 @@ - + - - - - - - - - + + \ No newline at end of file diff --git a/modules/mogo-module-extensions/src/main/res/drawable/module_ext_dw_navi_info_panel_bkg.xml b/modules/mogo-module-extensions/src/main/res/drawable/module_ext_dw_navi_info_panel_bkg.xml index f21cba570e..c364a86f0c 100644 --- a/modules/mogo-module-extensions/src/main/res/drawable/module_ext_dw_navi_info_panel_bkg.xml +++ b/modules/mogo-module-extensions/src/main/res/drawable/module_ext_dw_navi_info_panel_bkg.xml @@ -2,8 +2,8 @@ - - + + \ No newline at end of file diff --git a/modules/mogo-module-extensions/src/main/res/drawable/module_ext_dw_upload_road_condition_bkg.xml b/modules/mogo-module-extensions/src/main/res/drawable/module_ext_dw_upload_road_condition_bkg.xml index 375afdd8f9..16e096724d 100644 --- a/modules/mogo-module-extensions/src/main/res/drawable/module_ext_dw_upload_road_condition_bkg.xml +++ b/modules/mogo-module-extensions/src/main/res/drawable/module_ext_dw_upload_road_condition_bkg.xml @@ -1,15 +1,9 @@ - - - - - - - - - - + + + + \ No newline at end of file diff --git a/modules/mogo-module-extensions/src/main/res/drawable/shape_react_gray_round.xml b/modules/mogo-module-extensions/src/main/res/drawable/shape_react_gray_round.xml index bb02f81c07..c2e7581ff4 100644 --- a/modules/mogo-module-extensions/src/main/res/drawable/shape_react_gray_round.xml +++ b/modules/mogo-module-extensions/src/main/res/drawable/shape_react_gray_round.xml @@ -1,11 +1,12 @@ - + - + diff --git a/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml b/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml index 6e91ac92d1..77d36f91e1 100644 --- a/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml +++ b/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml @@ -5,99 +5,70 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - - - - - - - + + + + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintTop_toBottomOf="@+id/module_entrance_id_navi_info_panel" + tools:visibility="visible"> + + + + + + - - - - - - - + app:layout_goneMarginBottom="@dimen/module_ext_operation_panel_share_goneMarginBottom"> @@ -149,8 +117,6 @@ android:id="@+id/module_entrance_id_buttons_container" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginLeft="@dimen/module_ext_button_container_marginLeft" - android:layout_marginBottom="@dimen/module_ext_button_container_marginBottom" android:orientation="vertical" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent"> diff --git a/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_extensions.xml b/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_extensions.xml index 1e6cd901f3..87b42bda50 100644 --- a/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_extensions.xml +++ b/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_extensions.xml @@ -4,85 +4,21 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="@dimen/module_ext_height" - android:orientation="vertical" - android:paddingLeft="@dimen/module_ext_paddingLeft" - android:paddingRight="@dimen/module_ext_paddingRight"> - - - - - - - - - - - - - - + android:orientation="vertical"> + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintTop_toTopOf="parent" + tools:visibility="visible"> - - - - - + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toTopOf="parent" + tools:visibility="visible"> + android:layout_gravity="center" + android:scaleType="fitXY" + android:src="@drawable/module_ext_ic_message2" /> + android:background="@drawable/module_ext_dw_navi_info_panel_bkg"> - + android:orientation="vertical"> - + + + + + + + + + + + + + + android:layout_alignParentRight="true" + android:layout_centerVertical="true" + android:orientation="horizontal"> - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/mogo-module-extensions/src/main/res/values-ldpi/dimens.xml b/modules/mogo-module-extensions/src/main/res/values-ldpi/dimens.xml index 57dca9bae6..b1ced3e457 100644 --- a/modules/mogo-module-extensions/src/main/res/values-ldpi/dimens.xml +++ b/modules/mogo-module-extensions/src/main/res/values-ldpi/dimens.xml @@ -59,8 +59,7 @@ 64px 32px 32px - 64px - 64px + 22px 28px 22px @@ -78,8 +77,8 @@ 11.73px - 244px - 170px + 1058px + 210px 85px 85px 13px @@ -87,8 +86,8 @@ 20px 32px 7px - 8px - 16px + 5px + 40px 15px 24px @@ -99,4 +98,18 @@ 18px 18px -1px + + 30px + 40px + 40px + 15px + 15px + 5px + + + 534px + 100px + 68px + 32px + 240px \ No newline at end of file diff --git a/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml b/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml index c4c5d9e9a2..b062b26c4a 100644 --- a/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml +++ b/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml @@ -29,18 +29,18 @@ 32px 2px - 90px + 120px 32px 60px 92px 24px 48px 2px - 90px - 90px - 90px + 120px + 120px + 120px 40px - 24px + 30px 32px 32px @@ -57,8 +57,6 @@ 120px 60px 60px - 120px - 120px 32px 48px 80px @@ -70,14 +68,14 @@ 34px 26px 28px - 28px + 30px 30px 30px 20px - 458px - 318px + 1058px + 210px 159px 159px 24px @@ -85,8 +83,8 @@ 40px 60px 12px - 16px - 28px + 10px + 40px 28px 24px 28px @@ -97,4 +95,18 @@ 36px -2px + 30px + 40px + 40px + 15px + 15px + 5px + + + 952px + 170px + 122px + 61px + 240px + \ No newline at end of file diff --git a/modules/mogo-module-extensions/src/main/res/values/dimens.xml b/modules/mogo-module-extensions/src/main/res/values/dimens.xml index 027c19d25e..65fd20b2ac 100644 --- a/modules/mogo-module-extensions/src/main/res/values/dimens.xml +++ b/modules/mogo-module-extensions/src/main/res/values/dimens.xml @@ -29,18 +29,18 @@ 32px 2px - 90px + 120px 32px 60px 92px 24px 48px 2px - 90px - 90px - 90px + 120px + 120px + 120px 40px - 24px + 30px 32px 32px @@ -57,8 +57,7 @@ 120px 60px 60px - 120px - 120px + 32px 48px 80px @@ -70,14 +69,14 @@ 34px 26px 28px - 28px + 30px 30px 30px 20px - 458px - 318px + 1058px + 210px 159px 159px 24px @@ -85,8 +84,8 @@ 10px 60px 12px - 16px - 28px + 10px + 40px 28px 24px 28px @@ -97,4 +96,28 @@ 36px -2px + 30px + 40px + 40px + 15px + 15px + 5px + 37px + 26px + 37px + 26px + 37px + 26px + 50px + 15px + 15px + + + 952px + 170px + 122px + 61px + 30px + 240px + \ No newline at end of file diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java index b46e8c7656..f4b8d04f5a 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java @@ -23,7 +23,6 @@ import com.mogo.module.common.MogoModule; import com.mogo.module.common.MogoModulePaths; import com.mogo.module.common.map.MapCenterPointStrategy; import com.mogo.module.common.map.Scene; -import com.mogo.module.main.cards.CardIntroduceConfigs; import com.mogo.module.main.cards.MogoModulesHandler; import com.mogo.module.main.cards.MogoModulesManager; import com.mogo.module.main.windowview.FloatingViewHandler; @@ -63,24 +62,12 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme private FrameLayout mFloatingLayout; private FrameLayout mCoverUpLayout; private View mLeftShadowFrame; - private View mTopShadowFrame; /** * 主模块管控定位,可以向各个模块发送统一定位信息 */ private IMogoLocationClient mLocationClient; - private int mCurrentPosition = 0; - - private ViewPager.OnPageChangeListener mOnPageChangeListener; - - /** - * 手势切换卡片必须为true - *

- * 业务切换则由业务控制 - */ - private boolean mLockCarStatus = true; - @Override protected int getLayoutId() { return R.layout.module_main_activity_main; @@ -96,7 +83,6 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme mEntrance = findViewById( R.id.module_main_id_entrance_fragment_container ); mFloatingLayout = findViewById( R.id.module_main_id_floating_view ); mLeftShadowFrame = findViewById( R.id.module_main_id_map_left_shadow_frame ); - mTopShadowFrame = findViewById( R.id.module_main_id_map_top_shadow_frame ); mCoverUpLayout = findViewById( R.id.module_main_id_cover_up ); // 避免事件穿透导致地图被滑动 @@ -112,7 +98,6 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme mEntrance.setVisibility( View.GONE ); mFloatingLayout.setVisibility( View.GONE ); mLeftShadowFrame.setVisibility( View.GONE ); - mTopShadowFrame.setVisibility( View.GONE ); } // 显示布局 @@ -122,7 +107,6 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme mEntrance.setVisibility( View.VISIBLE ); mFloatingLayout.setVisibility( View.VISIBLE ); mLeftShadowFrame.setVisibility( View.VISIBLE ); - mTopShadowFrame.setVisibility( View.VISIBLE ); } @Override @@ -166,7 +150,6 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme // 显示左边遮罩 mLeftShadowFrame.setVisibility( View.VISIBLE ); - mTopShadowFrame.setVisibility( View.VISIBLE ); // 右移地图中心点 mMogoMapUIController = mMogoMapService.getMapUIController(); @@ -255,7 +238,6 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme protected void onPause() { super.onPause(); mMogoStatusManager.setMainPageResumeStatus( TAG, false ); - CardIntroduceConfigs.flush( getApplicationContext() ); mServiceApis.getAdasControllerApi().closeADAS(); } diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesManager.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesManager.java index bc4f9ae071..5834ab346d 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesManager.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesManager.java @@ -42,7 +42,6 @@ public class MogoModulesManager implements MogoModulesHandler { } this.mActivity = activity; EventDispatchCenter.getInstance().registerReceiver( apis.getIntentManagerApi() ); - CardIntroduceConfigs.init( getContext(), apis ); } private Context getContext() { diff --git a/modules/mogo-module-main/src/main/res/drawable/module_main_dw_left_frame_bkg.xml b/modules/mogo-module-main/src/main/res/drawable/module_main_dw_left_frame_bkg.xml index b9d160ac66..08a1055bcc 100644 --- a/modules/mogo-module-main/src/main/res/drawable/module_main_dw_left_frame_bkg.xml +++ b/modules/mogo-module-main/src/main/res/drawable/module_main_dw_left_frame_bkg.xml @@ -2,7 +2,13 @@ - + \ No newline at end of file diff --git a/modules/mogo-module-main/src/main/res/layout/module_main_activity_main.xml b/modules/mogo-module-main/src/main/res/layout/module_main_activity_main.xml index 9ba1c6ea16..9965a54479 100644 --- a/modules/mogo-module-main/src/main/res/layout/module_main_activity_main.xml +++ b/modules/mogo-module-main/src/main/res/layout/module_main_activity_main.xml @@ -1,5 +1,6 @@ @@ -10,51 +11,36 @@ android:layout_width="match_parent" android:layout_height="match_parent" /> - - + android:visibility="gone" + tools:visibility="visible" /> + + android:layout_height="@dimen/module_ext_height" + android:layout_marginLeft="@dimen/module_main_header_fragment_container_marginLeft" + android:layout_marginTop="@dimen/module_main_header_fragment_container_marginTop" /> + - - - - - - - + android:padding="@dimen/module_main_apps_fragment_container_padding" /> + android:padding="@dimen/module_main_entrance_fragment_container_padding" + android:layout_marginLeft="@dimen/module_main_id_entrance_fragment_container_marginLeft" /> + android:background="@drawable/module_main_launcher_bg" + android:visibility="visible" + tools:visibility="gone" /> \ No newline at end of file diff --git a/modules/mogo-module-main/src/main/res/values-ldpi/dimens.xml b/modules/mogo-module-main/src/main/res/values-ldpi/dimens.xml index f94f83a779..410eaa7f32 100644 --- a/modules/mogo-module-main/src/main/res/values-ldpi/dimens.xml +++ b/modules/mogo-module-main/src/main/res/values-ldpi/dimens.xml @@ -1,7 +1,7 @@ - 384px + 200px 8px 352px 370px @@ -16,4 +16,11 @@ 320px 319px + 200px + 30px + 30px + 830px + 800px + 30px + \ No newline at end of file diff --git a/modules/mogo-module-main/src/main/res/values-xhdpi/dimens.xml b/modules/mogo-module-main/src/main/res/values-xhdpi/dimens.xml index 05f521641d..4d1f9fdb5b 100644 --- a/modules/mogo-module-main/src/main/res/values-xhdpi/dimens.xml +++ b/modules/mogo-module-main/src/main/res/values-xhdpi/dimens.xml @@ -1,7 +1,7 @@ - 720px + 200px 10px 660px 690px @@ -15,4 +15,11 @@ 600px 599px + 200px + 30px + 30px + 830px + 800px + 30px + \ No newline at end of file diff --git a/modules/mogo-module-main/src/main/res/values/dimens.xml b/modules/mogo-module-main/src/main/res/values/dimens.xml index 9b62f05a55..3589fe1e5d 100644 --- a/modules/mogo-module-main/src/main/res/values/dimens.xml +++ b/modules/mogo-module-main/src/main/res/values/dimens.xml @@ -1,7 +1,7 @@ - - 720px + + 200px 10px 660px 690px @@ -12,4 +12,11 @@ 15px 270px 352px + + 200px + 30px + 30px + 830px + 800px + 30px \ No newline at end of file diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/CategoryPresenter.java b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/CategoryPresenter.java index 13ca942301..3e4c2924e5 100644 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/CategoryPresenter.java +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/CategoryPresenter.java @@ -1,9 +1,14 @@ package com.mogo.module.navi.ui.search; +import android.location.Location; + import androidx.annotation.NonNull; import androidx.lifecycle.LifecycleOwner; +import com.amap.api.maps.model.LatLng; import com.mogo.commons.mvp.Presenter; +import com.mogo.map.MogoLatLng; +import com.mogo.map.location.MogoLocation; import com.mogo.map.search.geo.MogoPoiItem; import com.mogo.map.search.poisearch.IMogoPoiSearch; import com.mogo.map.search.poisearch.IMogoPoiSearchListener; @@ -37,7 +42,7 @@ public class CategoryPresenter extends Presenter< CategoryView > { MogoPoiSearchQuery poiSearchQuery = new MogoPoiSearchQuery( keyword, keyword ); poiSearchQuery.setPageSize( 10 ); - poiSearchQuery.setLocation( SearchApisHolder.getUiControllerApis().getWindowCenterLocation() ); + poiSearchQuery.setLocation( getCurrentLatLon() ); IMogoPoiSearch poiSearch = SearchApisHolder.getMapServiceApis().getPoiSearch( getContext(), poiSearchQuery ); poiSearch.setPoiSearchListener( new IMogoPoiSearchListener() { @@ -56,6 +61,26 @@ public class CategoryPresenter extends Presenter< CategoryView > { poiSearch.searchPOIAsyn(); } + private MogoLatLng getCurrentLatLon() { + MogoLatLng latLon = SearchApisHolder.getNaviApis().getCarLocation(); + if ( latLon == null ) { + Location location = SearchApisHolder.getNaviApis().getCarLocation2(); + if ( location != null ) { + latLon = new MogoLatLng( location.getLatitude(), location.getLongitude() ); + } + } + if ( latLon == null ) { + MogoLocation location = SearchApisHolder.getLocationClientApis().getLastKnowLocation(); + if ( location != null ) { + latLon = new MogoLatLng( location.getLatitude(), location.getLongitude() ); + } + } + if ( latLon == null ) { + latLon = SearchApisHolder.getUiControllerApis().getWindowCenterLocation(); + } + return latLon; + } + @Override public void onDestroy( @NonNull LifecycleOwner owner ) { 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 1d5fc1d0af..4dccdb5b3f 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 @@ -16,6 +16,7 @@ import com.mogo.map.marker.MogoMarkerOptions import com.mogo.map.search.geo.MogoPoiItem import com.mogo.module.common.map.MapCenterPointStrategy import com.mogo.module.common.map.Scene +import com.mogo.module.common.utils.CarSeries import com.mogo.module.navi.R import com.mogo.module.navi.constants.SearchApisHolder import com.mogo.module.navi.manager.AddressManager @@ -30,10 +31,6 @@ import kotlinx.android.synthetic.main.fragment_search_category.* * 2020-01-09. */ class CategorySearchFragment : BaseFragment(), CategoryView, IMogoVoiceCmdCallBack, IMogoMarkerClickListener { -// override fun onMarkerClicked(marker: IMogoMarker?): Boolean { -// -// return true -// } override fun onCmdSelected(cmd: String?) { if (cmd?.startsWith("position") == true) { @@ -44,24 +41,13 @@ class CategorySearchFragment : BaseFragment(), CategoryView, IMogoVoiceCmdCallBa } } - override fun onCmdAction(speakText: String?) { - } - - override fun onCmdCancel(speakText: String?) { - } - - override fun onSpeakEnd(speakText: String?) { - } - - override fun onSpeakSelectTimeOut(speakText: String?) { - } - private val TAG: String = "CategorySearchFragment" private var addMarkers: ArrayList = ArrayList() var arrayList = ArrayList() var locationList = ArrayList() private lateinit var cmds: ArrayList + override fun renderSearchPoiResult(datums: List?) { mAdapter.setDatas(datums) cv_search_result.visibility = View.VISIBLE @@ -88,7 +74,9 @@ class CategorySearchFragment : BaseFragment(), CategoryView, IMogoVoiceCmdCallBa // .anchor(0.5f, 1f) .longitude(datums[index].point?.lng ?: 0.0) arrayList.add(options) - locationList.add(datums[index].point) + if( locationList.size < 3 ){ + locationList.add(datums[index].point) + } var int2String = StringUtils.int2String(index + 1) AIAssist.getInstance(context).registerUnWakeupCommand("position${index}", arrayOf("第${int2String}个", "第${int2String}条"), this) @@ -102,10 +90,10 @@ class CategorySearchFragment : BaseFragment(), CategoryView, IMogoVoiceCmdCallBa addMarkers.clear() var marginBounder = resources.getDimensionPixelSize(R.dimen.dp_60) * 2 SearchApisHolder.getUiControllerApis().showBounds(TAG, - null, + locationList[0], locationList, Rect(cv_search_result.width + marginBounder, marginBounder, marginBounder, marginBounder), - false + true ) for (options in arrayList) { @@ -200,7 +188,7 @@ class CategorySearchFragment : BaseFragment(), CategoryView, IMogoVoiceCmdCallBa arrayList.get(mAdapter.current).icon(getMarkerIcon(mAdapter.current)) if (moveToCenter) { SearchApisHolder.getStatusManager().setUserInteractionStatus(TAG, true, false) - SearchApisHolder.getUiControllerApis().moveToCenter(current.position, true) + SearchApisHolder.getUiControllerApis().moveToCenter(current.position, CarSeries.CAR_SERIES_F80X == CarSeries.getSeries()) } } @@ -236,10 +224,6 @@ class CategorySearchFragment : BaseFragment(), CategoryView, IMogoVoiceCmdCallBa } } - override fun onDestroy() { - super.onDestroy() - } - companion object { fun newInstance(category: String): Fragment { MapCenterPointStrategy.setMapCenterPointByScene(SearchApisHolder.getUiControllerApis(), Scene.CATEGORY_SEARCH) diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/CategoryView.java b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/CategoryView.java index fad125dcb7..d18de66647 100644 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/CategoryView.java +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/CategoryView.java @@ -19,6 +19,4 @@ public interface CategoryView extends IView { * @param datums */ void renderSearchPoiResult(List datums); - - } From f18586e102e88ae62ee5f447d18d00173e926b40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Wed, 20 May 2020 15:57:22 +0800 Subject: [PATCH 14/31] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E6=8E=A2?= =?UTF-8?q?=E8=B7=AF=E6=95=B0=E6=8D=AEID?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/misc.xml | 2 +- .../common/entity/MarkerExploreWay.java | 30 ++++++++++++------- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index 2dc54c489f..707ee6e613 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerExploreWay.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerExploreWay.java index 073c45bee0..de2d743cca 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerExploreWay.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerExploreWay.java @@ -10,6 +10,7 @@ import java.util.List; public class MarkerExploreWay implements Serializable { private String type;//卡片类型, + private String infoId; private String sn; private MarkerLocation location;//位置信息 private int direction;//方位角度 @@ -121,21 +122,30 @@ public class MarkerExploreWay implements Serializable { this.userInfo = userInfo; } + public String getInfoId() { + return infoId; + } + + public void setInfoId(String infoId) { + this.infoId = infoId; + } + @Override public String toString() { return "MarkerExploreWay{" + - "addr='" + addr + '\'' + - ", canLive=" + canLive + - ", cityName='" + cityName + '\'' + - ", direction=" + direction + - ", distance=" + distance + - ", fileType=" + fileType + - ", generateTime=" + generateTime + - ", items=" + items + - ", location=" + location + + "type='" + type + '\'' + + ", infoId='" + infoId + '\'' + ", sn='" + sn + '\'' + - ", type='" + type + '\'' + + ", location=" + location + + ", direction=" + direction + + ", canLive=" + canLive + + ", fileType=" + fileType + + ", addr='" + addr + '\'' + + ", generateTime=" + generateTime + + ", cityName='" + cityName + '\'' + + ", distance=" + distance + ", userInfo=" + userInfo + + ", items=" + items + '}'; } } From 873291c7019198424da431751d6059019ccc02e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Wed, 20 May 2020 16:00:17 +0800 Subject: [PATCH 15/31] =?UTF-8?q?=E5=8D=87=E7=BA=A7=E4=BA=86common?= =?UTF-8?q?=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index bf7b67a9c8..7a3c3bbf90 100644 --- a/gradle.properties +++ b/gradle.properties @@ -24,7 +24,7 @@ SNAPSHOT_REPOSITORY_URL=http://nexus.zhidaoauto.com/repository/maven-snapshots/ USERNAME=xintai PASSWORD=xintai2018 # 编译模式: false - 依赖本地版本, true - 依赖 maven 版本 -RELEASE=false +RELEASE=true # 模块版本 ## 工程内模块 MOGO_COMMONS_VERSION=1.1.0.1 @@ -38,7 +38,7 @@ MOGO_CONNECTION_VERSION=1.1.0.1 MOGO_MODULE_APPS_VERSION=1.1.0.1 MOGO_MODULE_NAVI_VERSION=1.1.0.1 MOGO_MODULE_SHARE_VERSION=1.1.0.1 -MOGO_MODULE_COMMON_VERSION=1.1.0.1 +MOGO_MODULE_COMMON_VERSION=1.1.0.2 MOGO_MODULE_MAIN_VERSION=1.1.0.1 MOGO_MODULE_MAP_VERSION=1.1.0.1 MOGO_MODULE_SERVICE_VERSION=1.1.0.1 From 684c02562451b3868713f20ef5e215abba30d35e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Wed, 20 May 2020 16:00:26 +0800 Subject: [PATCH 16/31] =?UTF-8?q?=E5=8D=87=E7=BA=A7=E4=BA=86common?= =?UTF-8?q?=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 7a3c3bbf90..f2934055d4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -24,7 +24,7 @@ SNAPSHOT_REPOSITORY_URL=http://nexus.zhidaoauto.com/repository/maven-snapshots/ USERNAME=xintai PASSWORD=xintai2018 # 编译模式: false - 依赖本地版本, true - 依赖 maven 版本 -RELEASE=true +RELEASE=false # 模块版本 ## 工程内模块 MOGO_COMMONS_VERSION=1.1.0.1 From 855f9f64da01a0af863c9ba91ed031b4287c611b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Wed, 20 May 2020 16:07:01 +0800 Subject: [PATCH 17/31] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86poiType?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle.properties | 2 +- .../mogo/module/common/entity/MarkerExploreWay.java | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index f2934055d4..25db21eb31 100644 --- a/gradle.properties +++ b/gradle.properties @@ -38,7 +38,7 @@ MOGO_CONNECTION_VERSION=1.1.0.1 MOGO_MODULE_APPS_VERSION=1.1.0.1 MOGO_MODULE_NAVI_VERSION=1.1.0.1 MOGO_MODULE_SHARE_VERSION=1.1.0.1 -MOGO_MODULE_COMMON_VERSION=1.1.0.2 +MOGO_MODULE_COMMON_VERSION=1.1.0.3 MOGO_MODULE_MAIN_VERSION=1.1.0.1 MOGO_MODULE_MAP_VERSION=1.1.0.1 MOGO_MODULE_SERVICE_VERSION=1.1.0.1 diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerExploreWay.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerExploreWay.java index de2d743cca..5fa0fa1798 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerExploreWay.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerExploreWay.java @@ -11,6 +11,10 @@ public class MarkerExploreWay implements Serializable { private String type;//卡片类型, private String infoId; + /** + * @see MarkerPoiTypeEnum + */ + private String poiType; private String sn; private MarkerLocation location;//位置信息 private int direction;//方位角度 @@ -130,11 +134,20 @@ public class MarkerExploreWay implements Serializable { this.infoId = infoId; } + public String getPoiType() { + return poiType; + } + + public void setPoiType(String poiType) { + this.poiType = poiType; + } + @Override public String toString() { return "MarkerExploreWay{" + "type='" + type + '\'' + ", infoId='" + infoId + '\'' + + ", poiType='" + poiType + '\'' + ", sn='" + sn + '\'' + ", location=" + location + ", direction=" + direction + From 958cac170c293e50af115d1ee959ba2492573046 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Wed, 20 May 2020 16:15:20 +0800 Subject: [PATCH 18/31] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=20uploadType?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle.properties | 4 ++-- .../mogo/module/common/entity/MarkerExploreWay.java | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 25db21eb31..f58bd1883f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -24,7 +24,7 @@ SNAPSHOT_REPOSITORY_URL=http://nexus.zhidaoauto.com/repository/maven-snapshots/ USERNAME=xintai PASSWORD=xintai2018 # 编译模式: false - 依赖本地版本, true - 依赖 maven 版本 -RELEASE=false +RELEASE=true # 模块版本 ## 工程内模块 MOGO_COMMONS_VERSION=1.1.0.1 @@ -38,7 +38,7 @@ MOGO_CONNECTION_VERSION=1.1.0.1 MOGO_MODULE_APPS_VERSION=1.1.0.1 MOGO_MODULE_NAVI_VERSION=1.1.0.1 MOGO_MODULE_SHARE_VERSION=1.1.0.1 -MOGO_MODULE_COMMON_VERSION=1.1.0.3 +MOGO_MODULE_COMMON_VERSION=1.1.0.4 MOGO_MODULE_MAIN_VERSION=1.1.0.1 MOGO_MODULE_MAP_VERSION=1.1.0.1 MOGO_MODULE_SERVICE_VERSION=1.1.0.1 diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerExploreWay.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerExploreWay.java index 5fa0fa1798..ad8f297160 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerExploreWay.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerExploreWay.java @@ -26,6 +26,8 @@ public class MarkerExploreWay implements Serializable { private double distance;//距离 private MarkerUserInfo userInfo;//用户信息 private List items;//视频地址和图片地址 + //上报类型:1-用户上报,2-后台上报 3-三方上报 + private String uploadType; public String getAddr() { if (TextUtils.isEmpty(addr)) { @@ -142,6 +144,14 @@ public class MarkerExploreWay implements Serializable { this.poiType = poiType; } + public String getUploadType() { + return uploadType; + } + + public void setUploadType(String uploadType) { + this.uploadType = uploadType; + } + @Override public String toString() { return "MarkerExploreWay{" + @@ -159,6 +169,7 @@ public class MarkerExploreWay implements Serializable { ", distance=" + distance + ", userInfo=" + userInfo + ", items=" + items + + ", uploadType='" + uploadType + '\'' + '}'; } } From 826793a34af5bbe0fb0c489c76d57bb6721b5d71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Wed, 20 May 2020 17:03:13 +0800 Subject: [PATCH 19/31] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E8=AF=B7?= =?UTF-8?q?=E6=B1=82=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle.properties | 2 +- .../main/java/com/mogo/module/service/network/RefreshBody.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index f58bd1883f..8dada86a79 100644 --- a/gradle.properties +++ b/gradle.properties @@ -38,7 +38,7 @@ MOGO_CONNECTION_VERSION=1.1.0.1 MOGO_MODULE_APPS_VERSION=1.1.0.1 MOGO_MODULE_NAVI_VERSION=1.1.0.1 MOGO_MODULE_SHARE_VERSION=1.1.0.1 -MOGO_MODULE_COMMON_VERSION=1.1.0.4 +MOGO_MODULE_COMMON_VERSION=1.1.0.5 MOGO_MODULE_MAIN_VERSION=1.1.0.1 MOGO_MODULE_MAP_VERSION=1.1.0.1 MOGO_MODULE_SERVICE_VERSION=1.1.0.1 diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/network/RefreshBody.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/network/RefreshBody.java index 769aa2c6a1..d1a5384490 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/network/RefreshBody.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/network/RefreshBody.java @@ -19,6 +19,7 @@ public class RefreshBody { public String sn; public boolean onlyFocus; // 是否仅查询已关注的好友 public boolean onlySameCity; // 是否仅查询注册城市相同的同城用户 + public boolean viewPush; // 是否走V2X通道 ,true-401011,false -401001 public static class LatLon { From 060613690a7c0e01611adc7600c2e7443635db19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Wed, 20 May 2020 17:12:14 +0800 Subject: [PATCH 20/31] =?UTF-8?q?=E5=8D=87=E7=BA=A7=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 8dada86a79..085f5f07f4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -41,7 +41,7 @@ MOGO_MODULE_SHARE_VERSION=1.1.0.1 MOGO_MODULE_COMMON_VERSION=1.1.0.5 MOGO_MODULE_MAIN_VERSION=1.1.0.1 MOGO_MODULE_MAP_VERSION=1.1.0.1 -MOGO_MODULE_SERVICE_VERSION=1.1.0.1 +MOGO_MODULE_SERVICE_VERSION=1.1.0.2 MOGO_MODULE_EXTENSIONS_VERSION=1.1.0.1 MOGO_MODULE_SEARCH_VERSION=1.1.0.1 MOGO_MODULE_BACK_VERSION=1.1.0.1 From 4a6c7ffd12c02e6cd53b446f46dfcf87a0dc9e49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Wed, 20 May 2020 17:28:56 +0800 Subject: [PATCH 21/31] =?UTF-8?q?=E5=8D=87=E7=BA=A7=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle.properties | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/gradle.properties b/gradle.properties index 085f5f07f4..cbd1f25a93 100644 --- a/gradle.properties +++ b/gradle.properties @@ -27,29 +27,29 @@ PASSWORD=xintai2018 RELEASE=true # 模块版本 ## 工程内模块 -MOGO_COMMONS_VERSION=1.1.0.1 -MOGO_UTILS_VERSION=1.1.0.1 -MAP_AMAP_VERSION=1.1.0.1 -MOGO_MAP_VERSION=1.1.0.1 -MOGO_MAP_API_VERSION=1.1.0.1 -MOGO_SERVICE_VERSION=1.1.0.1 -MOGO_SERVICE_API_VERSION=1.1.0.1 -MOGO_CONNECTION_VERSION=1.1.0.1 -MOGO_MODULE_APPS_VERSION=1.1.0.1 -MOGO_MODULE_NAVI_VERSION=1.1.0.1 -MOGO_MODULE_SHARE_VERSION=1.1.0.1 +MOGO_COMMONS_VERSION=1.1.0.2 +MOGO_UTILS_VERSION=1.1.0.2 +MAP_AMAP_VERSION=1.1.0.2 +MOGO_MAP_VERSION=1.1.0.2 +MOGO_MAP_API_VERSION=1.1.0.2 +MOGO_SERVICE_VERSION=1.1.0.2 +MOGO_SERVICE_API_VERSION=1.1.0.2 +MOGO_CONNECTION_VERSION=1.1.0.2 +MOGO_MODULE_APPS_VERSION=1.1.0.2 +MOGO_MODULE_NAVI_VERSION=1.1.0.2 +MOGO_MODULE_SHARE_VERSION=1.1.0.2 MOGO_MODULE_COMMON_VERSION=1.1.0.5 -MOGO_MODULE_MAIN_VERSION=1.1.0.1 -MOGO_MODULE_MAP_VERSION=1.1.0.1 -MOGO_MODULE_SERVICE_VERSION=1.1.0.2 -MOGO_MODULE_EXTENSIONS_VERSION=1.1.0.1 -MOGO_MODULE_SEARCH_VERSION=1.1.0.1 -MOGO_MODULE_BACK_VERSION=1.1.0.1 -MOGO_MODULE_GPS_SIMULATOR_VERSION=1.1.0.1 -MOGO_MODULE_GPS_SIMULATOR_DEBUG_VERSION=1.1.0.1 -MOGO_MODULE_GPS_SIMULATOR_NOOP_VERSION=1.1.0.1 -MOGO_MODULE_AUTHORIZE_VERSION=1.1.0.1 -MOGO_MODULE_GUIDE_VERSION=1.1.0.1 +MOGO_MODULE_MAIN_VERSION=1.1.0.2 +MOGO_MODULE_MAP_VERSION=1.1.0.2 +MOGO_MODULE_SERVICE_VERSION=1.1.0.3 +MOGO_MODULE_EXTENSIONS_VERSION=1.1.0.2 +MOGO_MODULE_SEARCH_VERSION=1.1.0.2 +MOGO_MODULE_BACK_VERSION=1.1.0.2 +MOGO_MODULE_GPS_SIMULATOR_VERSION=1.1.0.2 +MOGO_MODULE_GPS_SIMULATOR_DEBUG_VERSION=1.1.0.2 +MOGO_MODULE_GPS_SIMULATOR_NOOP_VERSION=1.1.0.2 +MOGO_MODULE_AUTHORIZE_VERSION=1.1.0.2 +MOGO_MODULE_GUIDE_VERSION=1.1.0.2 ## 工程外部模块 From e1a83c6b8ffe62c488e3c047d700f228fd54afaf Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Thu, 21 May 2020 14:49:30 +0800 Subject: [PATCH 22/31] add product manager --- app/build.gradle | 21 ++- .../com/mogo/launcher/MogoApplication.java | 2 +- gradle.properties | 8 +- .../map/impl/amap/AMapNaviViewWrapper.java | 1 - .../com/mogo/module/apps/AppsFragment.java | 2 +- .../mogo/module/apps/AppsListActivity.java | 9 +- .../mogo/module/apps/model/NavigatorApps.java | 2 + .../apps/receiver/AppInstallReceiver.java | 8 + .../src/main/res/values-ldpi/dimens.xml | 10 +- .../module/back/BackToMainHomeManager.java | 20 +- .../common/entity/MarkerCardResult.java | 5 +- .../common/entity/MarkerExploreWay.java | 16 ++ .../common/entity/MarkerPoiTypeEnum.java | 2 + .../extensions/entrance/EntranceFragment.java | 19 ++ .../module_ext_drawable_weather_bkg.xml | 2 +- .../res/layout/module_ext_layout_entrance.xml | 40 ++-- .../src/main/res/values-ldpi/dimens.xml | 37 ++-- .../src/main/res/values-xhdpi/dimens.xml | 13 ++ .../src/main/res/values/dimens.xml | 3 + .../src/main/res/values-ldpi/dimens.xml | 14 +- .../src/main/res/values-xhdpi/dimens.xml | 2 +- .../src/main/res/values/dimens.xml | 2 +- .../com/mogo/module/map/MapPresenter.java | 17 ++ .../com/mogo/module/service/MogoServices.java | 3 + .../com/mogo/module/service/ServiceConst.java | 2 +- .../service/marker/MapMarkerInfoView.java | 173 +++++++----------- .../service/marker/MapMarkerManager.java | 91 +-------- .../module/service/marker/MapMarkerView.java | 140 ++++++-------- .../module_service_ic_rc_dark_frog2.png | Bin 360 -> 682 bytes .../module_service_ic_rc_freeze2.png | Bin 1488 -> 1385 bytes .../module_service_ic_rc_dark_frog2.png | Bin 551 -> 1912 bytes .../module_service_ic_rc_freeze2.png | Bin 3247 -> 5568 bytes .../service/module/IMogoModuleLifecycle.java | 1 + services/mogo-service/build.gradle | 2 + .../service/impl/adas/MogoADASController.java | 46 ++++- 35 files changed, 360 insertions(+), 353 deletions(-) mode change 100644 => 100755 modules/mogo-module-service/src/main/res/drawable-ldpi/module_service_ic_rc_dark_frog2.png mode change 100644 => 100755 modules/mogo-module-service/src/main/res/drawable-ldpi/module_service_ic_rc_freeze2.png mode change 100644 => 100755 modules/mogo-module-service/src/main/res/drawable-xhdpi/module_service_ic_rc_dark_frog2.png mode change 100644 => 100755 modules/mogo-module-service/src/main/res/drawable-xhdpi/module_service_ic_rc_freeze2.png diff --git a/app/build.gradle b/app/build.gradle index 9172cdd059..cfece5f7c6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -188,10 +188,25 @@ dependencies { } } +//android.applicationVariants.all { variant -> +// variant.outputs.all { //这里修改apk文件名 +// outputFileName = "Launcher2.0_V${android.defaultConfig.versionName}_${getCurrentDate()}_${variant.name}_${getGitCommit()}.apk" +// println outputFileName +// } +//} + android.applicationVariants.all { variant -> - variant.outputs.all { //这里修改apk文件名 - outputFileName = "Launcher2.0_V${android.defaultConfig.versionName}_${getCurrentDate()}_${variant.name}_${getGitCommit()}.apk" - println outputFileName + def buildTime = new Date().format("yyyyMMdd", TimeZone.getTimeZone("GMT+08:00")) + def flavor = variant.productFlavors.collect { it.name }.join('-') + + variant.outputs.all { output -> + outputFileName = [ + rootProject.applicationName, + "v${variant.versionName}", + buildTime, + flavor.length() > 0 ? "[${flavor}]" : "", + variant.buildType.name + ].findAll { it.length() > 0 }.join('_') << ".apk" } } diff --git a/app/src/main/java/com/mogo/launcher/MogoApplication.java b/app/src/main/java/com/mogo/launcher/MogoApplication.java index 3b339d9a2d..b2c9f7f484 100644 --- a/app/src/main/java/com/mogo/launcher/MogoApplication.java +++ b/app/src/main/java/com/mogo/launcher/MogoApplication.java @@ -55,7 +55,7 @@ public class MogoApplication extends AbsMogoApplication { MogoModulePaths.addModule(new MogoModule(AdCardConstants.TAG, AdCardConstants.MODULE_NAME)); MogoModulePaths.addModule(new MogoModule(MediaConstants.TAG, MediaConstants.MODULE_TYPE)); MogoModulePaths.addModule(new MogoModule(CallChatConstant.PROVIDER, CallChatConstant.MODULE_NAME)); - MogoModulePaths.addModule(new MogoModule(TanluConstants.TAG, TanluConstants.MODEL_NAME)); +// MogoModulePaths.addModule(new MogoModule(TanluConstants.TAG, TanluConstants.MODEL_NAME)); MogoModulePaths.addModule(new MogoModule(OnLineCarConstants.TAG, OnLineCarConstants.MODULE_NAME)); MogoModulePaths.addModule(new MogoModule(V2XConst.PATH_V2X_UI, V2XConst.PATH_V2X_UI)); diff --git a/gradle.properties b/gradle.properties index bf7b67a9c8..84350bc66e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -72,4 +72,10 @@ MOGO_MODULE_MEDIA_VERSION=1.0.4.3 # 推送 MOGO_MODULE_PUSH_VERSION=1.0.1 # 广告资源位 -MOGO_MODULE_AD_CARD_VERSION=1.0.1 \ No newline at end of file +MOGO_MODULE_AD_CARD_VERSION=1.0.1 + +## 产品库必备配置 +applicationId=com.mogo.launcer +applicationName=Launcer2.0 +appVersionCode=1 +appVersionName=1.0.0 \ No newline at end of file diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapNaviViewWrapper.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapNaviViewWrapper.java index 5c62d54fd3..341fc8b0c4 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapNaviViewWrapper.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapNaviViewWrapper.java @@ -17,7 +17,6 @@ import android.view.animation.Interpolator; import com.amap.api.maps.AMap; import com.amap.api.maps.AMapUtils; import com.amap.api.maps.CameraUpdateFactory; -import com.amap.api.maps.LocationSource; import com.amap.api.maps.model.BitmapDescriptorFactory; import com.amap.api.maps.model.CameraPosition; import com.amap.api.maps.model.LatLng; diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsFragment.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsFragment.java index 9e7fc0f6ce..ed3de2b4a8 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsFragment.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsFragment.java @@ -50,7 +50,7 @@ public class AppsFragment extends MvpFragment< AppsView, AppsPresenter > impleme mExit.setOnClickListener( view -> { if ( getActivity() != null ) { getActivity().finish(); - getActivity().overridePendingTransition( R.anim.module_apps_anim_enter, R.anim.module_apps_anim_exit); + getActivity().overridePendingTransition( 0, R.anim.module_apps_anim_exit); } } ); // mAppsList = findViewById( R.id.module_apps_id_apps ); diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsListActivity.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsListActivity.java index 82c116ec6f..d72b53e10a 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsListActivity.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsListActivity.java @@ -2,9 +2,11 @@ package com.mogo.module.apps; import android.app.Activity; import android.content.Intent; +import android.os.Bundle; import android.view.View; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.alibaba.android.arouter.launcher.ARouter; import com.google.android.material.bottomsheet.BottomSheetBehavior; @@ -27,7 +29,12 @@ public class AppsListActivity extends MvpActivity< AppsListView, AppsListPresent public static void start( Activity context ) { Intent starter = new Intent( context, AppsListActivity.class ); context.startActivity( starter ); - context.overridePendingTransition( R.anim.module_apps_anim_enter, R.anim.module_apps_anim_exit); + } + + @Override + protected void onCreate( @Nullable Bundle savedInstanceState ) { + overridePendingTransition( R.anim.module_apps_anim_enter, 0); + super.onCreate( savedInstanceState ); } @Override diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/NavigatorApps.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/NavigatorApps.java index 1bb4271c82..1b64ff1bb8 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/NavigatorApps.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/NavigatorApps.java @@ -14,6 +14,7 @@ import java.util.List; public class NavigatorApps { private static AppInfo app = new AppInfo( "导航", "com.mogo.launcher.navi.search", "", 0, null, R.drawable.module_apps_ic_navigator_navi ); + private static AppInfo app_ = new AppInfo( "导航", "com.mogo.launcher.navi.search", "", 0, null, R.drawable.module_apps_ic_navigator_navi_disable ); private static AppInfo app2 = new AppInfo( "音乐", "com.pvetec.musics", "", 0, null, R.drawable.module_apps_ic_navigator_media ); private static AppInfo app3 = new AppInfo( "个人中心", "com.zhidao.auto.personal", "", 0, null, R.drawable.module_apps_ic_navigator_personcenter ); private static AppInfo app4 = new AppInfo( "全部应用", "com.mogo.launcher.applist", "", 0, null, R.drawable.module_apps_ic_navigator_applist ); @@ -29,6 +30,7 @@ public class NavigatorApps { public static List< AppInfo > getAppsWithoutNavigation() { List< AppInfo > sApps = new ArrayList<>(); + sApps.add( app_ ); sApps.add( app2 ); sApps.add( app3 ); sApps.add( app4 ); diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/receiver/AppInstallReceiver.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/receiver/AppInstallReceiver.java index e3e599243f..1ea5fa4216 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/receiver/AppInstallReceiver.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/receiver/AppInstallReceiver.java @@ -4,7 +4,9 @@ package com.mogo.module.apps.receiver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import android.text.TextUtils; +import com.mogo.module.apps.AppServiceHandler; import com.mogo.module.apps.model.AppsModel; public class AppInstallReceiver extends BroadcastReceiver { @@ -14,6 +16,9 @@ public class AppInstallReceiver extends BroadcastReceiver { if ( intent.getAction().equals( Intent.ACTION_PACKAGE_ADDED ) ) { String packageName = intent.getData().getSchemeSpecificPart(); AppsModel.getInstance( context ).appAdded( packageName ); + if ( TextUtils.equals( packageName, "com.zhidao.autopilot" ) ) { + AppServiceHandler.getApis().getAdasControllerApi().showADAS(); + } } if ( intent.getAction().equals( Intent.ACTION_PACKAGE_REMOVED ) ) { String packageName = intent.getData().getSchemeSpecificPart(); @@ -21,6 +26,9 @@ public class AppInstallReceiver extends BroadcastReceiver { } if ( intent.getAction().equals( Intent.ACTION_PACKAGE_REPLACED ) ) { String packageName = intent.getData().getSchemeSpecificPart(); + if ( TextUtils.equals( packageName, "com.zhidao.autopilot" ) ) { + AppServiceHandler.getApis().getAdasControllerApi().showADAS(); + } } if ( intent.getAction().equals( Intent.ACTION_PACKAGE_CHANGED ) ) { String packageName = intent.getData().getSchemeSpecificPart(); diff --git a/modules/mogo-module-apps/src/main/res/values-ldpi/dimens.xml b/modules/mogo-module-apps/src/main/res/values-ldpi/dimens.xml index faac054011..fb55520395 100644 --- a/modules/mogo-module-apps/src/main/res/values-ldpi/dimens.xml +++ b/modules/mogo-module-apps/src/main/res/values-ldpi/dimens.xml @@ -21,9 +21,9 @@ 50px 50px - 140px - 140px - 30px - 64px - 64px + 78px + 78px + 16px + 78px + 78px \ No newline at end of file diff --git a/modules/mogo-module-back/src/main/java/com/mogo/module/back/BackToMainHomeManager.java b/modules/mogo-module-back/src/main/java/com/mogo/module/back/BackToMainHomeManager.java index b356e030de..20818c844d 100644 --- a/modules/mogo-module-back/src/main/java/com/mogo/module/back/BackToMainHomeManager.java +++ b/modules/mogo-module-back/src/main/java/com/mogo/module/back/BackToMainHomeManager.java @@ -72,7 +72,11 @@ public class BackToMainHomeManager { params.x = AbsMogoApplication.getApp().getResources().getDimensionPixelOffset( R.dimen.module_back_main_home_icon_left ); params.y = AbsMogoApplication.getApp().getResources().getDimensionPixelOffset( R.dimen.module_back_main_home_icon_top ); params.gravity = Gravity.LEFT | Gravity.CENTER; - params.type = getFitWindowParamsType(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + params.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; + } else { + params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT; + } params.format = PixelFormat.RGBA_8888; params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON; windowManager.addView( mBackView, params ); @@ -83,18 +87,4 @@ public class BackToMainHomeManager { WindowManagerViewHelper.removeView( mBackView ); } - private static int getFitWindowParamsType() { - int type; - if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1 ) { - // Need request permission. - type = WindowManager.LayoutParams.TYPE_PHONE; - } else if ( Build.MODEL.equalsIgnoreCase( "MI 5" ) ) { - // MI 5 phone not display crawler dot in android 7.0 - type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT; - } else { - // It's will be dismissed automatically 3s after showing in Android 25. - type = WindowManager.LayoutParams.TYPE_TOAST; - } - return type; - } } diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerCardResult.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerCardResult.java index 1a8e044cf8..be7c7bbe23 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerCardResult.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerCardResult.java @@ -9,11 +9,12 @@ public class MarkerCardResult implements Serializable { private List dataType; // 要查询的类型 private List carChat; - private List exploreWay; - private List onlineCar; private List shareMusic; private List noveltyInfo; + private List onlineCar; + private List exploreWay; + public List getCarChat() { return carChat; } diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerExploreWay.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerExploreWay.java index 073c45bee0..00fdbf8552 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerExploreWay.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerExploreWay.java @@ -9,6 +9,7 @@ import java.util.List; @SuppressWarnings("unused") public class MarkerExploreWay implements Serializable { + private String infoId; private String type;//卡片类型, private String sn; private MarkerLocation location;//位置信息 @@ -20,6 +21,7 @@ public class MarkerExploreWay implements Serializable { private String cityName;//:"城市名称", private double distance;//距离 private MarkerUserInfo userInfo;//用户信息 + private String poiType; private List items;//视频地址和图片地址 public String getAddr() { @@ -121,6 +123,20 @@ public class MarkerExploreWay implements Serializable { this.userInfo = userInfo; } + public String getPoiType() { + return poiType; + } + + + public String getInfoId() { + return infoId; + } + + public MarkerExploreWay setInfoId( String infoId ) { + this.infoId = infoId; + return this; + } + @Override public String toString() { return "MarkerExploreWay{" + diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerPoiTypeEnum.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerPoiTypeEnum.java index 6060810e56..e57e3270fe 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerPoiTypeEnum.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerPoiTypeEnum.java @@ -36,4 +36,6 @@ public interface MarkerPoiTypeEnum { public String FOURS_ACCIDENT = "10013"; //身边 public String FOURS_NEALY = "10014"; + //实时路况 + public String FOURS_LIVING = "10015"; } \ No newline at end of file diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java index bc82a3cdc3..34867b8492 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java @@ -50,6 +50,7 @@ import com.mogo.service.statusmanager.IMogoStatusChangedListener; import com.mogo.service.statusmanager.IMogoStatusManager; import com.mogo.service.statusmanager.StatusDescriptor; import com.mogo.utils.ResourcesHelper; +import com.mogo.utils.UiThreadHandler; import com.mogo.utils.logger.Logger; import java.util.HashMap; @@ -162,6 +163,17 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent private Rect mDisplayOverviewBounds; + private Runnable mLockCarRunnable = new Runnable() { + @Override + public void run() { + if ( !mStatusManager.isDisplayOverview() ) { + return; + } + mStatusManager.setDisplayOverview( TAG, false ); + mMApUIController.recoverLockMode(); + } + }; + @Override protected int getLayoutId() { return R.layout.module_ext_layout_entrance; @@ -197,8 +209,11 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent mDisplayOverview.setOnClickListener( view -> { if ( !mStatusManager.isDisplayOverview() ) { mMApUIController.displayOverview( mDisplayOverviewBounds ); + UiThreadHandler.removeCallbacks( mLockCarRunnable ); + UiThreadHandler.postDelayed( mLockCarRunnable, 20_000 ); } else { mMApUIController.recoverLockMode(); + UiThreadHandler.removeCallbacks( mLockCarRunnable ); } mStatusManager.setDisplayOverview( TAG, !mStatusManager.isDisplayOverview() ); } ); @@ -212,6 +227,10 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent mMApUIController.setLockZoom( 16 ); mMApUIController.changeZoom( 16.0f ); } + if ( mStatusManager.isDisplayOverview() ) { + mMogoStatusManager.setDisplayOverview( TAG, false ); + UiThreadHandler.removeCallbacks( mLockCarRunnable ); + } mMogoStatusManager.setUserInteractionStatus( TAG, true, false ); mMApUIController.recoverLockMode(); } diff --git a/modules/mogo-module-extensions/src/main/res/drawable/module_ext_drawable_weather_bkg.xml b/modules/mogo-module-extensions/src/main/res/drawable/module_ext_drawable_weather_bkg.xml index 700b8df8e0..90fb7a2eaf 100644 --- a/modules/mogo-module-extensions/src/main/res/drawable/module_ext_drawable_weather_bkg.xml +++ b/modules/mogo-module-extensions/src/main/res/drawable/module_ext_drawable_weather_bkg.xml @@ -3,7 +3,7 @@ - + \ No newline at end of file diff --git a/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml b/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml index 77d36f91e1..ab7a83b8e4 100644 --- a/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml +++ b/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml @@ -15,9 +15,9 @@ - - - - - + @@ -89,8 +82,8 @@ android:layout_width="@dimen/module_ext_operation_panel_share_width" android:layout_height="@dimen/module_ext_operation_panel_share_height" android:layout_marginBottom="@dimen/module_ext_operation_panel_share_marginBottom" - app:layout_constraintBottom_toTopOf="@+id/module_entrance_id_operation_panel" - app:layout_constraintRight_toRightOf="@+id/module_entrance_id_operation_panel" + app:layout_constraintBottom_toTopOf="@+id/module_entrance_id_move2_current_location" + app:layout_constraintRight_toRightOf="@+id/module_entrance_id_move2_current_location" app:layout_goneMarginBottom="@dimen/module_ext_operation_panel_share_goneMarginBottom"> 20px 1px - 58px + 66px 20px 34.5px 58px @@ -38,16 +38,16 @@ 31.4px 1.2px 58px - 58px - 58px + 66px + 66px 21px 20px 34.5px 20px - 64px - 64px + 66px + 66px 20px 32px 20px @@ -56,7 +56,7 @@ 8px - 64px + 66px 32px 32px @@ -71,14 +71,14 @@ 18.48px 16px 22px - 28px + 16px 15px 15px 11.73px - 1058px - 210px + 544px + 117px 85px 85px 13px @@ -100,16 +100,29 @@ -1px 30px - 40px - 40px + 23px + 23px 15px 15px 5px + 20px + 14px + 20px + 14px + 20px + 14px + 34px + 8px + 8px 534px 100px 68px 32px - 240px + 16px + 142px + 66px + 66px + 16px \ No newline at end of file diff --git a/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml b/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml index b062b26c4a..7b89df54dc 100644 --- a/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml +++ b/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml @@ -101,6 +101,15 @@ 15px 15px 5px + 50px + 37px + 26px + 37px + 26px + 37px + 26px + 15px + 15px 952px @@ -108,5 +117,9 @@ 122px 61px 240px + 30px + 120px + 120px + 30px \ No newline at end of file diff --git a/modules/mogo-module-extensions/src/main/res/values/dimens.xml b/modules/mogo-module-extensions/src/main/res/values/dimens.xml index 65fd20b2ac..e30e6f8ee9 100644 --- a/modules/mogo-module-extensions/src/main/res/values/dimens.xml +++ b/modules/mogo-module-extensions/src/main/res/values/dimens.xml @@ -119,5 +119,8 @@ 61px 30px 240px + 120px + 120px + 30px \ No newline at end of file diff --git a/modules/mogo-module-main/src/main/res/values-ldpi/dimens.xml b/modules/mogo-module-main/src/main/res/values-ldpi/dimens.xml index 410eaa7f32..0ba4ec9f22 100644 --- a/modules/mogo-module-main/src/main/res/values-ldpi/dimens.xml +++ b/modules/mogo-module-main/src/main/res/values-ldpi/dimens.xml @@ -1,7 +1,7 @@ - 200px + 300px 8px 352px 370px @@ -16,11 +16,11 @@ 320px 319px - 200px - 30px - 30px - 830px - 800px - 30px + 110px + 16px + 15px + 460px + 444px + 16px \ No newline at end of file diff --git a/modules/mogo-module-main/src/main/res/values-xhdpi/dimens.xml b/modules/mogo-module-main/src/main/res/values-xhdpi/dimens.xml index 4d1f9fdb5b..ee84bb8039 100644 --- a/modules/mogo-module-main/src/main/res/values-xhdpi/dimens.xml +++ b/modules/mogo-module-main/src/main/res/values-xhdpi/dimens.xml @@ -1,7 +1,7 @@ - 200px + 300px 10px 660px 690px diff --git a/modules/mogo-module-main/src/main/res/values/dimens.xml b/modules/mogo-module-main/src/main/res/values/dimens.xml index 3589fe1e5d..af1335b972 100644 --- a/modules/mogo-module-main/src/main/res/values/dimens.xml +++ b/modules/mogo-module-main/src/main/res/values/dimens.xml @@ -1,7 +1,7 @@ - 200px + 150px 10px 660px 690px diff --git a/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapPresenter.java b/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapPresenter.java index 4b740e501a..f71aceddb0 100644 --- a/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapPresenter.java +++ b/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapPresenter.java @@ -8,6 +8,7 @@ import android.graphics.Rect; import android.text.TextUtils; import androidx.annotation.NonNull; +import androidx.annotation.UiThread; import androidx.lifecycle.LifecycleOwner; import com.alibaba.android.arouter.launcher.ARouter; @@ -63,6 +64,18 @@ public class MapPresenter extends Presenter< MapView > implements private IMogoSettingManager mSettingManager; private Rect mDisplayOverviewBounds; + + private Runnable mLockCarRunnable = new Runnable() { + @Override + public void run() { + if ( !mStatusManager.isDisplayOverview() ) { + return; + } + mStatusManager.setDisplayOverview( TAG, false ); + mView.getUIController().recoverLockMode(); + } + }; + public MapPresenter( MapView view ) { super( view ); initBroadcast(); @@ -221,6 +234,7 @@ public class MapPresenter extends Presenter< MapView > implements mStatusManager.setDisplayOverview( TAG, false ); mView.getUIController().recoverLockMode(); AIAssist.getInstance( getContext() ).speakTTSVoice( "已为您继续导航" ); + UiThreadHandler.removeCallbacks( mLockCarRunnable ); } else { mLauncher.backToLauncher( getContext() ); UiThreadHandler.postDelayed( () -> { @@ -228,6 +242,7 @@ public class MapPresenter extends Presenter< MapView > implements mStatusManager.setDisplayOverview( TAG, false ); mView.getUIController().recoverLockMode(); AIAssist.getInstance( getContext() ).speakTTSVoice( "已为您继续导航" ); + UiThreadHandler.removeCallbacks( mLockCarRunnable ); } catch ( Exception e ) { e.printStackTrace(); } @@ -258,6 +273,8 @@ public class MapPresenter extends Presenter< MapView > implements AIAssist.getInstance( getContext() ).speakTTSVoice( "展示全程路线" ); }, 2_000L ); } + + UiThreadHandler.postDelayed( mLockCarRunnable, 20_000 ); } private void zoomMap( boolean zoomIn ) { diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java index cf67cd97c5..ed01a0a9e2 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java @@ -751,10 +751,13 @@ public class MogoServices implements IMogoMapListener, mStatusManager.setADASUIShow( ServiceConst.TYPE, status == 1 ); } else if ( Intent.ACTION_POWER_CONNECTED.equals( command ) ) { mStatusManager.setAccStatus( ServiceConst.TYPE, true ); + Logger.d( TAG, "acc status: %s", true ); } else if ( Intent.ACTION_POWER_DISCONNECTED.equals( command ) ) { mStatusManager.setAccStatus( ServiceConst.TYPE, false ); + Logger.d( TAG, "acc status: %s", false ); } else if ( MogoReceiver.ACTION_NWD_ACC.equals( command ) ) { int state = intent.getByteExtra( MogoReceiver.PARAM_ACC_STATUS, ( byte ) 0 ); + Logger.d( TAG, "acc status: %s", state == 1 ); mStatusManager.setAccStatus( ServiceConst.TYPE, state == 1 ); } else if ( MogoReceiver.ACTION_VOICE_UI.equals( command ) ) { String val = intent.getStringExtra( MogoReceiver.PARRAM_WAKE_STATUS ); diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/ServiceConst.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/ServiceConst.java index 304c284b98..41282ef6bc 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/ServiceConst.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/ServiceConst.java @@ -85,7 +85,7 @@ public class ServiceConst { /** * 20 s */ - public static final int DEFAULT_AUTO_REFRESH_WHEN_INTERRUPT = 20 * 1_000; + public static final int DEFAULT_AUTO_REFRESH_WHEN_INTERRUPT = 30 * 1_000; /** * 所有卡片显示的每类点的最大数据量 diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerInfoView.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerInfoView.java index d272ae9046..bb991fdae9 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerInfoView.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerInfoView.java @@ -12,6 +12,7 @@ import androidx.annotation.Nullable; import androidx.constraintlayout.widget.ConstraintLayout; import com.mogo.map.marker.MogoMarkerOptions; +import com.mogo.module.common.entity.MarkerExploreWay; import com.mogo.module.common.entity.MarkerNoveltyInfo; import com.mogo.module.common.entity.MarkerOnlineCar; import com.mogo.module.common.entity.MarkerPoiTypeEnum; @@ -36,193 +37,145 @@ public class MapMarkerInfoView extends MapMarkerBaseView { private ConstraintLayout clMarkerContent; private ImageView ivReverseTriangle; - public MapMarkerInfoView(Context context) { - super(context); + public MapMarkerInfoView( Context context ) { + super( context ); } - public MapMarkerInfoView(Context context, @Nullable AttributeSet attrs) { - super(context, attrs); + public MapMarkerInfoView( Context context, @Nullable AttributeSet attrs ) { + super( context, attrs ); } - public MapMarkerInfoView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); + public MapMarkerInfoView( Context context, @Nullable AttributeSet attrs, int defStyleAttr ) { + super( context, attrs, defStyleAttr ); } - public MapMarkerInfoView(Context context, MarkerShowEntity markerShowEntity, MogoMarkerOptions options) { - super(context); + public MapMarkerInfoView( Context context, MarkerShowEntity markerShowEntity, MogoMarkerOptions options ) { + super( context ); mOptions = options; - updateView(markerShowEntity); + updateView( markerShowEntity ); } - protected void initView(Context context) { - LayoutInflater.from(context).inflate(R.layout.view_map_marker_info, this); - ivUserHead = findViewById(R.id.ivUserHead); - ivIcon = findViewById(R.id.ivIcon); - clMarkerContent = findViewById(R.id.clMarkerContent); - ivReverseTriangle = findViewById(R.id.ivReverseTriangle); - ivCar = findViewById(R.id.ivCar); - tvMarkerContent = findViewById(R.id.tvMarkerContent); + protected void initView( Context context ) { + LayoutInflater.from( context ).inflate( R.layout.view_map_marker_info, this ); + ivUserHead = findViewById( R.id.ivUserHead ); + ivIcon = findViewById( R.id.ivIcon ); + clMarkerContent = findViewById( R.id.clMarkerContent ); + ivReverseTriangle = findViewById( R.id.ivReverseTriangle ); + ivCar = findViewById( R.id.ivCar ); + tvMarkerContent = findViewById( R.id.tvMarkerContent ); } - public void updateView(MarkerShowEntity markerShowEntity) { + public void updateView( MarkerShowEntity markerShowEntity ) { try { Object bindObj = markerShowEntity.getBindObj(); - switch (markerShowEntity.getMarkerType()) { + ivCar.setImageResource( R.drawable.icon_map_marker_location_yellow ); + clMarkerContent.setBackgroundResource( R.drawable.bg_map_marker_yellow_info ); + ivReverseTriangle.setImageResource( R.drawable.bg_shape_reverse_yellow ); + switch ( markerShowEntity.getMarkerType() ) { case ServiceConst.CARD_TYPE_CARS_CHATTING: case ServiceConst.CARD_TYPE_USER_DATA: - ivUserHead.setVisibility(View.VISIBLE); - ivIcon.setVisibility(View.INVISIBLE); - loadImageWithMarker(markerShowEntity); - ivCar.setImageResource(R.drawable.icon_map_marker_car_gray); + ivUserHead.setVisibility( View.VISIBLE ); + ivIcon.setVisibility( View.INVISIBLE ); + loadImageWithMarker( markerShowEntity ); + ivCar.setImageResource( R.drawable.icon_map_marker_car_gray ); //ivCar.setRotation(new Random().nextInt(360)); - ivCar.setRotation((float) markerShowEntity.getMarkerLocation().getAngle()); - - if (bindObj instanceof MarkerOnlineCar) { - if (((MarkerOnlineCar) bindObj).getUserInfo().getGenderValue() == 0) { - clMarkerContent.setBackgroundResource(R.drawable.bg_map_marker_blue_info); - ivReverseTriangle.setImageResource(R.drawable.bg_shape_reverse_triangle_blue); - } else { - clMarkerContent.setBackgroundResource(R.drawable.bg_map_marker_purple_info); - ivReverseTriangle.setImageResource(R.drawable.bg_shape_reverse_triangle_purple); - } - } - + ivCar.setRotation( ( float ) markerShowEntity.getMarkerLocation().getAngle() ); break; case ServiceConst.CARD_TYPE_ROAD_CONDITION: - ivUserHead.setVisibility(View.INVISIBLE); - ivIcon.setVisibility(View.VISIBLE); - - ivIcon.setImageResource(R.drawable.icon_map_marker_road_block_up); - clMarkerContent.setBackgroundResource(R.drawable.bg_map_marker_blue_info); - ivReverseTriangle.setImageResource(R.drawable.bg_shape_reverse_triangle_blue); - ivCar.setImageResource(R.drawable.icon_map_marker_location_blue); - break; case ServiceConst.CARD_TYPE_NOVELTY: - ivUserHead.setVisibility(View.INVISIBLE); - ivIcon.setVisibility(View.VISIBLE); - ivCar.setImageResource(R.drawable.icon_map_marker_location_blue); + ivUserHead.setVisibility( View.INVISIBLE ); + ivIcon.setVisibility( View.VISIBLE ); - if (bindObj instanceof MarkerNoveltyInfo) { - switch (((MarkerNoveltyInfo) bindObj).getPoiType()) { + if ( bindObj instanceof MarkerExploreWay ) { + switch ( ( ( MarkerExploreWay ) bindObj ).getPoiType() ) { case MarkerPoiTypeEnum.GAS_STATION: - ivIcon.setImageResource(R.drawable.icon_map_marker_refuel); - clMarkerContent.setBackgroundResource(R.drawable.bg_map_marker_orange_info); - ivReverseTriangle.setImageResource(R.drawable.bg_shape_reverse_triangle_orange); + ivIcon.setImageResource( R.drawable.icon_map_marker_refuel ); break; case MarkerPoiTypeEnum.TRAFFIC_CHECK: - ivIcon.setImageResource(R.drawable.icon_map_marker_road_check); - clMarkerContent.setBackgroundResource(R.drawable.bg_map_marker_green_info); - ivReverseTriangle.setImageResource(R.drawable.bg_shape_reverse_triangle_green); + ivIcon.setImageResource( R.drawable.icon_map_marker_road_check2_light ); break; case MarkerPoiTypeEnum.ROAD_CLOSED: - ivIcon.setImageResource(R.drawable.icon_map_marker_road_block_off); - clMarkerContent.setBackgroundResource(R.drawable.bg_map_marker_dark_blue_info); - ivReverseTriangle.setImageResource(R.drawable.bg_shape_reverse_triangle_dark_blue); + ivIcon.setImageResource( R.drawable.icon_map_marker_road_block_off2_light ); break; case MarkerPoiTypeEnum.SHOP_DISCOUNT: - ivIcon.setImageResource(R.drawable.icon_map_marker_shop_discount); - clMarkerContent.setBackgroundResource(R.drawable.bg_map_marker_red_info); - ivReverseTriangle.setImageResource(R.drawable.bg_shape_reverse_triangle_red); + ivIcon.setImageResource( R.drawable.icon_map_marker_shop_discount ); break; case MarkerPoiTypeEnum.FOURS_4S: - ivIcon.setImageResource(R.drawable.icon_map_marker_4s); - clMarkerContent.setBackgroundResource(R.drawable.bg_map_marker_dark_blue_info); - ivReverseTriangle.setImageResource(R.drawable.bg_shape_reverse_triangle_dark_blue); + ivIcon.setImageResource( R.drawable.icon_map_marker_4s ); break; case MarkerPoiTypeEnum.FOURS_ROAD_WORK: - ivIcon.setImageResource(R.drawable.icon_map_marker_road_work); - clMarkerContent.setBackgroundResource(R.drawable.bg_map_marker_dark_blue_info); - ivReverseTriangle.setImageResource(R.drawable.bg_shape_reverse_triangle_dark_blue); + ivIcon.setImageResource( R.drawable.icon_map_marker_road_work2_light ); break; case MarkerPoiTypeEnum.FOURS_BLOCK_UP: - ivIcon.setImageResource(R.drawable.icon_map_marker_road_block_up); - clMarkerContent.setBackgroundResource(R.drawable.bg_map_marker_blue_info); - ivReverseTriangle.setImageResource(R.drawable.bg_shape_reverse_triangle_blue); + ivIcon.setImageResource( R.drawable.icon_map_marker_road_block_up2_light ); break; case MarkerPoiTypeEnum.FOURS_PONDING: - ivIcon.setImageResource(R.drawable.icon_map_marker_pondingl); - clMarkerContent.setBackgroundResource(R.drawable.bg_map_marker_blue_info); - ivReverseTriangle.setImageResource(R.drawable.bg_shape_reverse_triangle_blue); + ivIcon.setImageResource( R.drawable.icon_map_marker_pondingl2_light ); break; case MarkerPoiTypeEnum.FOURS_SHOP_FREE: - ivIcon.setImageResource(R.drawable.icon_map_marker_shop); - clMarkerContent.setBackgroundResource(R.drawable.bg_map_marker_dark_green_info); - ivReverseTriangle.setImageResource(R.drawable.bg_shape_reverse_triangle_dark_green); + ivIcon.setImageResource( R.drawable.icon_map_marker_shop ); break; case MarkerPoiTypeEnum.FOURS_FOG: - ivIcon.setImageResource(R.drawable.module_service_ic_rc_dark_frog2); - clMarkerContent.setBackgroundResource(R.drawable.bg_map_marker_grey_info); - ivReverseTriangle.setImageResource(R.drawable.bg_shape_reverse_triangle_grey); + ivIcon.setImageResource( R.drawable.module_service_ic_rc_dark_frog2_light ); break; case MarkerPoiTypeEnum.FOURS_ICE: - ivIcon.setImageResource(R.drawable.module_service_ic_rc_freeze2); - clMarkerContent.setBackgroundResource(R.drawable.bg_map_marker_blue_info); - ivReverseTriangle.setImageResource(R.drawable.bg_shape_reverse_triangle_blue); + ivIcon.setImageResource( R.drawable.module_service_ic_rc_freeze2_light ); break; case MarkerPoiTypeEnum.FOURS_PARKING: - ivIcon.setImageResource(R.drawable.module_service_ic_rc_parking2); - clMarkerContent.setBackgroundResource(R.drawable.bg_map_marker_dark_blue_info); - ivReverseTriangle.setImageResource(R.drawable.bg_shape_reverse_triangle_dark_blue); + ivIcon.setImageResource( R.drawable.module_service_ic_rc_parking2 ); break; case MarkerPoiTypeEnum.FOURS_ACCIDENT: - ivIcon.setImageResource(R.drawable.module_service_ic_rc_accident2); - clMarkerContent.setBackgroundResource(R.drawable.bg_map_marker_red_info); - ivReverseTriangle.setImageResource(R.drawable.bg_shape_reverse_triangle_red); + ivIcon.setImageResource( R.drawable.module_service_ic_rc_accident3_light ); break; case MarkerPoiTypeEnum.FOURS_NEALY: - ivIcon.setImageResource(R.drawable.icon_map_marker_shear_news); - clMarkerContent.setBackgroundResource(R.drawable.bg_map_marker_blue_info); - ivReverseTriangle.setImageResource(R.drawable.bg_shape_reverse_triangle_blue); + ivIcon.setImageResource( R.drawable.icon_map_marker_shear_news ); + break; + case MarkerPoiTypeEnum.FOURS_LIVING: + ivIcon.setImageResource( R.drawable.icon_map_marker_living_light ); break; default: - ivIcon.setImageResource(R.drawable.icon_map_marker_shear_news); - clMarkerContent.setBackgroundResource(R.drawable.bg_map_marker_dark_blue_info); - ivReverseTriangle.setImageResource(R.drawable.bg_shape_reverse_triangle_dark_blue); + ivIcon.setImageResource( R.drawable.icon_map_marker_shear_news ); break; } } break; case ServiceConst.CARD_TYPE_SHARE_MUSIC: - ivUserHead.setVisibility(View.INVISIBLE); - ivIcon.setVisibility(View.VISIBLE); + ivUserHead.setVisibility( View.INVISIBLE ); + ivIcon.setVisibility( View.VISIBLE ); - clMarkerContent.setBackgroundResource(R.drawable.bg_map_marker_purple_info); - ivReverseTriangle.setImageResource(R.drawable.bg_shape_reverse_triangle_purple); - ivCar.setImageResource(R.drawable.icon_map_marker_location_blue); - - if (bindObj instanceof MarkerShareMusic) { + if ( bindObj instanceof MarkerShareMusic ) { // 2 为书籍听书,3 为新闻,1 为qq音乐,int - switch (((MarkerShareMusic) bindObj).getShareType()) { + switch ( ( ( MarkerShareMusic ) bindObj ).getShareType() ) { case 1: - ivIcon.setImageResource(R.drawable.icon_map_marker_misic); + ivIcon.setImageResource( R.drawable.icon_map_marker_misic ); break; case 2: - ivIcon.setImageResource(R.drawable.icon_map_marker_book); + ivIcon.setImageResource( R.drawable.icon_map_marker_book ); break; case 3: - ivIcon.setImageResource(R.drawable.icon_map_marker_news); + ivIcon.setImageResource( R.drawable.icon_map_marker_news ); break; default: - ivIcon.setImageResource(R.drawable.icon_map_marker_misic); + ivIcon.setImageResource( R.drawable.icon_map_marker_misic ); break; } } break; } - if (!TextUtils.isEmpty(markerShowEntity.getTextContent())) { + if ( !TextUtils.isEmpty( markerShowEntity.getTextContent() ) ) { String content; - if (markerShowEntity.getTextContent().length() > 8) { - content = markerShowEntity.getTextContent().substring(0, 7) + "..."; + if ( markerShowEntity.getTextContent().length() > 8 ) { + content = markerShowEntity.getTextContent().substring( 0, 7 ) + "..."; } else { content = markerShowEntity.getTextContent(); } - tvMarkerContent.setText(content); + tvMarkerContent.setText( content ); } - } catch (Exception e) { + } catch ( Exception e ) { e.printStackTrace(); } } diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java index b8a97d8206..c67685661c 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java @@ -222,19 +222,6 @@ public class MapMarkerManager implements IMogoMarkerClickListener, trackData( mLastDataResult ); } - /** - * 是否是语音搜索的在线车辆数据:目前根据返回数据判断 - * - * @param markerCardResult - * @return - */ - private boolean isOnlineCarDataOnly( MarkerCardResult markerCardResult ) { - if ( markerCardResult != null && markerCardResult.getDataType() != null && markerCardResult.getDataType().size() == 1 && markerCardResult.getDataType().contains( ServiceConst.CARD_TYPE_USER_DATA ) ) { - return true; - } - return false; - } - /** * 根据类型绘制 * @@ -260,12 +247,8 @@ public class MapMarkerManager implements IMogoMarkerClickListener, */ private void drawAllMarker( MarkerCardResult markerCardResult ) { List< MarkerExploreWay > exploreWayList = markerCardResult.getExploreWay(); -// List< MarkerShareMusic > shareMusicList = markerCardResult.getShareMusic(); - List< MarkerNoveltyInfo > noveltyInfoList = markerCardResult.getNoveltyInfo(); drawRoadConditionMarker( exploreWayList, ServiceConst.MAX_AMOUNT_ALL ); -// drawShareMusicMarker( shareMusicList, ServiceConst.MAX_AMOUNT_ALL ); - drawNoveltyMarker( noveltyInfoList, ServiceConst.MAX_AMOUNT_ALL ); } /** @@ -318,6 +301,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener, } int size = getAppropriateSize( maxAmount, exploreWayList ); Map< String, IMogoMarker > existCarMap = purgeMarkerData( exploreWayList, ModuleNames.CARD_TYPE_ROAD_CONDITION ); + Logger.i( TAG, "existCarMap: size = %d", existCarMap.size() ); for ( int i = 0; i < size; i++ ) { MarkerExploreWay markerExploreWay = exploreWayList.get( i ); if ( !markerExploreWay.getCanLive() ) { @@ -332,6 +316,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener, String sn = getCarSnFromEntity( markerExploreWay ); IMogoMarker mogoMarker = existCarMap.get( sn ); if ( mogoMarker == null ) { + Logger.d( TAG, "draw road condition, sn = %s", sn ); drawMapMarker( markerShowEntity ); } } @@ -453,7 +438,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener, } else if ( entity instanceof MarkerNoveltyInfo ) { return ( ( MarkerNoveltyInfo ) entity ).getSn(); } else if ( entity instanceof MarkerExploreWay ) { - return ( ( MarkerExploreWay ) entity ).getUserInfo().getSn(); + return ( ( MarkerExploreWay ) entity ).getInfoId(); } } catch ( Exception e ) { @@ -494,76 +479,12 @@ public class MapMarkerManager implements IMogoMarkerClickListener, return; } JSONArray array = new JSONArray(); - List< MarkerOnlineCar > onlineCarList = markerCardResult.getOnlineCar(); List< MarkerExploreWay > exploreWayList = markerCardResult.getExploreWay(); - List< MarkerShareMusic > shareMusicList = markerCardResult.getShareMusic(); - List< MarkerNoveltyInfo > noveltyInfoList = markerCardResult.getNoveltyInfo(); - int size = onlineCarList == null ? 0 : onlineCarList.size(); - fillPoiTypeTrackBody( array, ModuleNames.CARD_TYPE_USER_DATA, size ); + int size = 0; size = exploreWayList == null ? 0 : exploreWayList.size(); fillPoiTypeTrackBody( array, ModuleNames.CARD_TYPE_ROAD_CONDITION, size ); - size = noveltyInfoList == null ? 0 : noveltyInfoList.size(); - JSONObject novelty = fillPoiTypeTrackBody( array, ModuleNames.CARD_TYPE_NOVELTY, size ); - if ( noveltyInfoList != null ) { - Map< String, Integer > counter = new HashMap<>(); - for ( MarkerNoveltyInfo markerNoveltyInfo : noveltyInfoList ) { - if ( markerNoveltyInfo == null ) { - continue; - } - String childType = markerNoveltyInfo.getPoiType(); - if ( !counter.containsKey( childType ) ) { - counter.put( childType, 0 ); - } - int s = counter.get( childType ).intValue(); - counter.put( childType, s + 1 ); - } - if ( !counter.isEmpty() ) { - JSONArray onlineCarJsonArray = new JSONArray(); - for ( Map.Entry< String, Integer > entry : counter.entrySet() ) { - fillPoiChildTypeTrackBody( onlineCarJsonArray, entry.getKey(), entry.getValue() ); - } - if ( onlineCarJsonArray.length() > 0 ) { - try { - novelty.put( "content", onlineCarJsonArray ); - } catch ( JSONException e ) { - e.printStackTrace(); - } - } - } - } - - size = shareMusicList == null ? 0 : shareMusicList.size(); - JSONObject shareMusic = fillPoiTypeTrackBody( array, ModuleNames.CARD_TYPE_SHARE_MUSIC, size ); - if ( shareMusicList != null ) { - Map< String, Integer > counter = new HashMap<>(); - for ( MarkerShareMusic markerShareMusic : shareMusicList ) { - if ( markerShareMusic == null ) { - continue; - } - String childType = markerShareMusic.getShareType() + ""; - if ( !counter.containsKey( childType ) ) { - counter.put( childType, 0 ); - } - int s = counter.get( childType ).intValue(); - counter.put( childType, s + 1 ); - } - if ( !counter.isEmpty() ) { - JSONArray shareMusicJsonArray = new JSONArray(); - for ( Map.Entry< String, Integer > entry : counter.entrySet() ) { - fillPoiChildTypeTrackBody( shareMusicJsonArray, entry.getKey(), entry.getValue() ); - } - if ( shareMusicJsonArray.length() > 0 ) { - try { - shareMusic.put( "content", shareMusicJsonArray ); - } catch ( JSONException e ) { - e.printStackTrace(); - } - } - } - } - try { if ( array.length() == 0 ) { return; @@ -585,12 +506,8 @@ public class MapMarkerManager implements IMogoMarkerClickListener, if ( mLastDataResult == null ) { return; } -// List onlineCarList = mLastDataResult.getOnlineCar(); List< MarkerExploreWay > exploreWayList = mLastDataResult.getExploreWay(); - List< MarkerNoveltyInfo > noveltyInfoList = mLastDataResult.getNoveltyInfo(); -// dispatchDataToBis(ServiceConst.CARD_TYPE_USER_DATA, onlineCarList == null ?new ArrayList<>() : onlineCarList); dispatchDataToBis( ServiceConst.CARD_TYPE_ROAD_CONDITION, exploreWayList == null ? new ArrayList<>() : exploreWayList ); - dispatchDataToBis( ServiceConst.CARD_TYPE_NOVELTY, noveltyInfoList == null ? new ArrayList<>() : noveltyInfoList ); } /** diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerView.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerView.java index 7679c23839..6479b123ab 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerView.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerView.java @@ -9,6 +9,7 @@ import android.widget.ImageView; import androidx.annotation.Nullable; import com.mogo.map.marker.MogoMarkerOptions; +import com.mogo.module.common.entity.MarkerExploreWay; import com.mogo.module.common.entity.MarkerNoveltyInfo; import com.mogo.module.common.entity.MarkerOnlineCar; import com.mogo.module.common.entity.MarkerPoiTypeEnum; @@ -31,156 +32,137 @@ public class MapMarkerView extends MapMarkerBaseView { private ImageView ivBg; - public MapMarkerView(Context context) { - super(context); + public MapMarkerView( Context context ) { + super( context ); } - public MapMarkerView(Context context, @Nullable AttributeSet attrs) { - super(context, attrs); + public MapMarkerView( Context context, @Nullable AttributeSet attrs ) { + super( context, attrs ); } - public MapMarkerView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); + public MapMarkerView( Context context, @Nullable AttributeSet attrs, int defStyleAttr ) { + super( context, attrs, defStyleAttr ); } - public MapMarkerView(Context context, MarkerShowEntity markerShowEntity, MogoMarkerOptions options) { - super(context); + public MapMarkerView( Context context, MarkerShowEntity markerShowEntity, MogoMarkerOptions options ) { + super( context ); mOptions = options; - updateView(markerShowEntity); + updateView( markerShowEntity ); } - protected void initView(Context context) { - LayoutInflater.from(context).inflate(R.layout.view_map_marker, this); - ivUserHead = findViewById(R.id.ivUserHead); - ivIcon = findViewById(R.id.ivIcon); - ivCar = findViewById(R.id.ivCar); - ivBg = findViewById(R.id.ivBg); - clMarkerTopView = findViewById(R.id.clMarkerTopView); + protected void initView( Context context ) { + LayoutInflater.from( context ).inflate( R.layout.view_map_marker, this ); + ivUserHead = findViewById( R.id.ivUserHead ); + ivIcon = findViewById( R.id.ivIcon ); + ivCar = findViewById( R.id.ivCar ); + ivBg = findViewById( R.id.ivBg ); + clMarkerTopView = findViewById( R.id.clMarkerTopView ); } - public void updateView(MarkerShowEntity markerShowEntity) { + public void updateView( MarkerShowEntity markerShowEntity ) { try { Object bindObj = markerShowEntity.getBindObj(); - switch (markerShowEntity.getMarkerType()) { + ivBg.setImageResource( R.drawable.bg_map_marker_dark ); + switch ( markerShowEntity.getMarkerType() ) { case ServiceConst.CARD_TYPE_CARS_CHATTING: case ServiceConst.CARD_TYPE_USER_DATA: - ivUserHead.setVisibility(View.VISIBLE); - ivIcon.setVisibility(View.INVISIBLE); - loadImageWithMarker(markerShowEntity); - ivCar.setImageResource(R.drawable.icon_map_marker_car_gray); - ivCar.setRotation((float) markerShowEntity.getMarkerLocation().getAngle()); + ivUserHead.setVisibility( View.VISIBLE ); + ivIcon.setVisibility( View.INVISIBLE ); + loadImageWithMarker( markerShowEntity ); + ivCar.setImageResource( R.drawable.icon_map_marker_car_gray ); + ivCar.setRotation( ( float ) markerShowEntity.getMarkerLocation().getAngle() ); // ivCar.setRotation(new Random().nextInt(360)); - clMarkerTopView.setVisibility(View.GONE); - if (bindObj instanceof MarkerOnlineCar) { - if (((MarkerOnlineCar) bindObj).getUserInfo().getGenderValue() == 0) { - ivBg.setImageResource(R.drawable.bg_map_marker_blue); + clMarkerTopView.setVisibility( View.GONE ); + if ( bindObj instanceof MarkerOnlineCar ) { + if ( ( ( MarkerOnlineCar ) bindObj ).getUserInfo().getGenderValue() == 0 ) { } else { - ivBg.setImageResource(R.drawable.bg_map_marker_purple); } } break; case ServiceConst.CARD_TYPE_ROAD_CONDITION: - ivUserHead.setVisibility(View.INVISIBLE); - ivIcon.setVisibility(View.VISIBLE); - - ivIcon.setImageResource(R.drawable.icon_map_marker_road_block_up); - ivBg.setImageResource(R.drawable.bg_map_marker_blue); - ivCar.setImageResource(R.drawable.icon_map_marker_location_blue); - break; case ServiceConst.CARD_TYPE_NOVELTY: - ivUserHead.setVisibility(View.INVISIBLE); - ivIcon.setVisibility(View.VISIBLE); + ivUserHead.setVisibility( View.INVISIBLE ); + ivIcon.setVisibility( View.VISIBLE ); - ivCar.setImageResource(R.drawable.icon_map_marker_location_blue); + ivCar.setImageResource( R.drawable.icon_map_marker_location_yellow ); - if (bindObj instanceof MarkerNoveltyInfo) { - switch (((MarkerNoveltyInfo) bindObj).getPoiType()) { + if ( bindObj instanceof MarkerExploreWay ) { + switch ( ( ( MarkerExploreWay ) bindObj ).getPoiType() ) { case MarkerPoiTypeEnum.GAS_STATION: - ivIcon.setImageResource(R.drawable.icon_map_marker_refuel); - ivBg.setImageResource(R.drawable.bg_map_marker_oragne); + ivIcon.setImageResource( R.drawable.icon_map_marker_refuel ); break; case MarkerPoiTypeEnum.TRAFFIC_CHECK: - ivIcon.setImageResource(R.drawable.icon_map_marker_road_check); - ivBg.setImageResource(R.drawable.bg_map_marker_green); + ivIcon.setImageResource( R.drawable.icon_map_marker_road_check2 ); break; case MarkerPoiTypeEnum.ROAD_CLOSED: - ivIcon.setImageResource(R.drawable.icon_map_marker_road_block_off); - ivBg.setImageResource(R.drawable.bg_map_marker_blue_dark); + ivIcon.setImageResource( R.drawable.icon_map_marker_road_block_off2 ); break; case MarkerPoiTypeEnum.SHOP_DISCOUNT: - ivIcon.setImageResource(R.drawable.icon_map_marker_shop_discount); - ivBg.setImageResource(R.drawable.bg_map_marker_red); + ivIcon.setImageResource( R.drawable.icon_map_marker_shop_discount ); break; case MarkerPoiTypeEnum.FOURS_4S: - ivIcon.setImageResource(R.drawable.icon_map_marker_4s); - ivBg.setImageResource(R.drawable.bg_map_marker_blue); + ivIcon.setImageResource( R.drawable.icon_map_marker_4s ); break; case MarkerPoiTypeEnum.FOURS_ROAD_WORK: - ivIcon.setImageResource(R.drawable.icon_map_marker_road_work); - ivBg.setImageResource(R.drawable.bg_map_marker_blue_dark); + ivIcon.setImageResource( R.drawable.icon_map_marker_road_work2 ); break; case MarkerPoiTypeEnum.FOURS_BLOCK_UP: - ivIcon.setImageResource(R.drawable.icon_map_marker_road_block_up); - ivBg.setImageResource(R.drawable.bg_map_marker_blue); + ivIcon.setImageResource( R.drawable.icon_map_marker_road_block_up2 ); break; case MarkerPoiTypeEnum.FOURS_PONDING: - ivIcon.setImageResource(R.drawable.icon_map_marker_pondingl); - ivBg.setImageResource(R.drawable.bg_map_marker_blue); + ivIcon.setImageResource( R.drawable.icon_map_marker_pondingl2 ); break; case MarkerPoiTypeEnum.FOURS_SHOP_FREE: - ivIcon.setImageResource(R.drawable.icon_map_marker_shop); - ivBg.setImageResource(R.drawable.bg_map_marker_green_dark); + ivIcon.setImageResource( R.drawable.icon_map_marker_shop ); break; case MarkerPoiTypeEnum.FOURS_FOG: - ivBg.setImageResource(R.drawable.module_service_ic_rc_dark_frog); + ivIcon.setImageResource( R.drawable.module_service_ic_rc_dark_frog2 ); break; case MarkerPoiTypeEnum.FOURS_ICE: - ivBg.setImageResource(R.drawable.module_service_ic_rc_freeze); - break; - case MarkerPoiTypeEnum.FOURS_PARKING: - ivBg.setImageResource(R.drawable.module_service_ic_rc_parking); + ivIcon.setImageResource( R.drawable.module_service_ic_rc_freeze2 ); break; case MarkerPoiTypeEnum.FOURS_ACCIDENT: - ivBg.setImageResource(R.drawable.module_service_ic_rc_accident); + ivIcon.setImageResource( R.drawable.module_service_ic_rc_accident3 ); break; case MarkerPoiTypeEnum.FOURS_NEALY: - ivIcon.setImageResource(R.drawable.icon_map_marker_shear_news); - ivBg.setImageResource(R.drawable.bg_map_marker_blue); + ivIcon.setImageResource( R.drawable.icon_map_marker_shear_news ); break; + case MarkerPoiTypeEnum.FOURS_LIVING: + ivIcon.setImageResource( R.drawable.icon_map_marker_living ); + break; + case MarkerPoiTypeEnum.FOURS_PARKING: default: - ivIcon.setImageResource(R.drawable.icon_map_marker_shear_news); - ivBg.setImageResource(R.drawable.bg_map_marker_blue_dark); + ivIcon.setImageResource( R.drawable.icon_map_marker_shear_news ); break; } } break; case ServiceConst.CARD_TYPE_SHARE_MUSIC: - ivUserHead.setVisibility(View.INVISIBLE); - ivIcon.setVisibility(View.VISIBLE); - ivBg.setImageResource(R.drawable.bg_map_marker_purple); - ivCar.setImageResource(R.drawable.icon_map_marker_location_blue); + ivUserHead.setVisibility( View.INVISIBLE ); + ivIcon.setVisibility( View.VISIBLE ); + ivCar.setImageResource( R.drawable.icon_map_marker_location_yellow ); - if (bindObj instanceof MarkerShareMusic) { + if ( bindObj instanceof MarkerShareMusic ) { // 2 为书籍听书,3 为新闻,1 为qq音乐,int - switch (((MarkerShareMusic) bindObj).getShareType()) { + switch ( ( ( MarkerShareMusic ) bindObj ).getShareType() ) { case 1: - ivIcon.setImageResource(R.drawable.icon_map_marker_misic); + ivIcon.setImageResource( R.drawable.icon_map_marker_misic ); break; case 2: - ivIcon.setImageResource(R.drawable.icon_map_marker_book); + ivIcon.setImageResource( R.drawable.icon_map_marker_book ); break; case 3: - ivIcon.setImageResource(R.drawable.icon_map_marker_news); + ivIcon.setImageResource( R.drawable.icon_map_marker_news ); break; default: - ivIcon.setImageResource(R.drawable.icon_map_marker_misic); + ivIcon.setImageResource( R.drawable.icon_map_marker_misic ); break; } } break; } - } catch (Exception e) { + } catch ( Exception e ) { e.printStackTrace(); } } diff --git a/modules/mogo-module-service/src/main/res/drawable-ldpi/module_service_ic_rc_dark_frog2.png b/modules/mogo-module-service/src/main/res/drawable-ldpi/module_service_ic_rc_dark_frog2.png old mode 100644 new mode 100755 index ad2cfca0c44dbd3827b9383e2b141474433e0d38..1222b2b6c7c8c92829c768c72eac6182be11717f GIT binary patch literal 682 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 literal 551 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8jKx9jP7LeL$-D%zA9}hthGek5 zow?DA*-@aac+xSEu3n9Zh>javN{bZ2esMINPg>gBuV9vx`jYtvgWzkEFgHc9vMfQv zq(5e^8+N?7bN1e`NAW)b^^8BCubFVycJ0+IE)Fc{=z!mX`|sB;$iCvbGMxQza>(}b zHyuY-G`_pI-TL8xN=zb|1T;b(n9@(Y4I=6}?JNzwaqs!+byC%BNYbC+t68 zJF$lK$ES0G)lJ(jEHTv&ifOlc9yx8U+p6V8N(xLs^nX&r&xlQB=Rb&V2 zl}zY*%k%DbUDrgK+q}={MY&(&K6~OASIq~fH=@nkbuA60qYoD_A6=6 z@y%v)UF*Adk7%5@eBfl?(|=#hNMDc+agiqH6e}x>Iw_N#U5C7#xmdKI;Vst0LHcQE&u=k diff --git a/modules/mogo-module-service/src/main/res/drawable-xhdpi/module_service_ic_rc_freeze2.png b/modules/mogo-module-service/src/main/res/drawable-xhdpi/module_service_ic_rc_freeze2.png old mode 100644 new mode 100755 index c7f02cd85212c9220d7a1121592c2903a72ea6c3..d34779845ed9e0d24671e307be510d8af2f65107 GIT binary patch literal 5568 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 diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoModuleLifecycle.java b/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoModuleLifecycle.java index dc2dad5741..7234996fbe 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoModuleLifecycle.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoModuleLifecycle.java @@ -22,4 +22,5 @@ public interface IMogoModuleLifecycle { * accOn 事件回调 */ void accOn(); + } diff --git a/services/mogo-service/build.gradle b/services/mogo-service/build.gradle index 3cd53dffe6..1b26b1e000 100644 --- a/services/mogo-service/build.gradle +++ b/services/mogo-service/build.gradle @@ -48,6 +48,7 @@ dependencies { implementation rootProject.ext.dependencies.mogocommons implementation rootProject.ext.dependencies.mogoserviceapi implementation rootProject.ext.dependencies.mogoconnection + implementation rootProject.ext.dependencies.modulecommon } else { api project(":libraries:mogo-map") implementation project(":libraries:mogo-map-api") @@ -55,6 +56,7 @@ dependencies { implementation project(":foudations:mogo-commons") implementation project(":services:mogo-service-api") implementation project(":foudations:mogo-connection") + implementation project(":modules:mogo-module-common") } } diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java index cadd1e446f..c38edf1b56 100644 --- a/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java +++ b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java @@ -1,13 +1,16 @@ package com.mogo.service.impl.adas; +import android.app.ActivityManager; import android.app.Application; import android.content.Context; import android.content.Intent; +import android.content.pm.ApplicationInfo; import android.os.RemoteException; import com.alibaba.android.arouter.facade.annotation.Route; import com.mogo.commons.AbsMogoApplication; import com.mogo.map.MogoOverlayManager; +import com.mogo.module.common.utils.CarSeries; import com.mogo.service.MogoServicePaths; import com.mogo.service.adas.IMogoADASController; import com.mogo.service.impl.MogoServiceApis; @@ -20,6 +23,8 @@ import com.zhidao.autopilot.support.api.AutopilotServiceManage; import org.json.JSONObject; +import java.util.List; + /** * @author congtaowang * @since 2020-03-10 @@ -61,6 +66,11 @@ public class MogoADASController implements IMogoADASController { public void showADAS() { Logger.d( TAG, "show adas" ); + if ( !isProcessRunning( AbsMogoApplication.getApp(), getPackageUid( AbsMogoApplication.getApp(), "com.zhidiao.autopilot" ) ) ) { + init( AbsMogoApplication.getApp() ); + } + + int delay = CarSeries.getSeries() == CarSeries.CAR_SERIES_F80X ? 0 : 500; UiThreadHandler.postDelayed( () -> { try { @@ -84,7 +94,7 @@ public class MogoADASController implements IMogoADASController { Logger.e( TAG, e1, "error." ); } } - }, 500 ); + }, delay ); } @Override @@ -122,4 +132,38 @@ public class MogoADASController implements IMogoADASController { public void init( Context context ) { AutopilotServiceManage.getInstance().init( context ); } + + //获取已安装应用的 uid,-1 表示未安装此应用或程序异常 + public static int getPackageUid( Context context, String packageName ) { + try { + ApplicationInfo applicationInfo = context.getPackageManager().getApplicationInfo( packageName, 0 ); + if ( applicationInfo != null ) { + return applicationInfo.uid; + } + } catch ( Exception e ) { + return -1; + } + return -1; + } + + /** + * 判断某一 uid 的程序是否有正在运行的进程,即是否存活 + * Created by cafeting on 2017/2/4. + * + * @param context 上下文 + * @param uid 已安装应用的 uid + * @return true 表示正在运行,false 表示没有运行 + */ + public static boolean isProcessRunning( Context context, int uid ) { + ActivityManager am = ( ActivityManager ) context.getSystemService( Context.ACTIVITY_SERVICE ); + List< ActivityManager.RunningServiceInfo > runningServiceInfos = am.getRunningServices( 200 ); + if ( runningServiceInfos.size() > 0 ) { + for ( ActivityManager.RunningServiceInfo appProcess : runningServiceInfos ) { + if ( uid == appProcess.uid ) { + return true; + } + } + } + return false; + } } From d14256839938ccdfb946a3347ae98f1c8cc5e3bb Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Thu, 21 May 2020 14:55:18 +0800 Subject: [PATCH 23/31] opt --- gradle.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index f691bda4a6..fd786cf4e4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -77,5 +77,5 @@ MOGO_MODULE_AD_CARD_VERSION=1.0.1 ## 产品库必备配置 applicationId=com.mogo.launcer applicationName=Launcer2.0 -appVersionCode=1 -appVersionName=1.0.0 \ No newline at end of file +versionCode=1 +versionName=1.0.0 \ No newline at end of file From ef4ab6e39fe906283ca0757987290e4133a8e2ee Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Thu, 21 May 2020 15:02:39 +0800 Subject: [PATCH 24/31] opt --- .idea/misc.xml | 2 +- app/build.gradle | 4 ++-- config.gradle | 1 - gradle.properties | 4 ++-- 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index 707ee6e613..2dc54c489f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index cfece5f7c6..220945510b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ android { defaultConfig { minSdkVersion rootProject.ext.android.minSdkVersion targetSdkVersion rootProject.ext.android.targetSdkVersion - versionCode generateVersionCode() - versionName "${rootProject.ext.android.versionName}.${getMonthAndDay()}" + versionCode rootProject.versionCode as int + versionName rootProject.versionName applicationId rootProject.ext.android.applicationId testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/config.gradle b/config.gradle index eaf710f48d..291ffe3d5b 100644 --- a/config.gradle +++ b/config.gradle @@ -6,7 +6,6 @@ ext { buildToolsVersion : "29.0.2", minSdkVersion : 19, targetSdkVersion : 22, - versionName : "8.0.6", ] dependencies = [ diff --git a/gradle.properties b/gradle.properties index fd786cf4e4..678110b1c6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -77,5 +77,5 @@ MOGO_MODULE_AD_CARD_VERSION=1.0.1 ## 产品库必备配置 applicationId=com.mogo.launcer applicationName=Launcer2.0 -versionCode=1 -versionName=1.0.0 \ No newline at end of file +versionCode=80006 +versionName=8.0.6 \ No newline at end of file From 2c3db70ef37b89d00713a303261d84fcc2d83d5d Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Thu, 21 May 2020 17:22:17 +0800 Subject: [PATCH 25/31] opt --- gradle.properties | 2 +- .../src/main/res/layout/module_ext_layout_entrance.xml | 4 ++-- .../src/main/res/values-ldpi/dimens.xml | 8 +++++--- .../src/main/res/values-xhdpi/dimens.xml | 1 + .../mogo-module-extensions/src/main/res/values/dimens.xml | 2 ++ 5 files changed, 11 insertions(+), 6 deletions(-) diff --git a/gradle.properties b/gradle.properties index 678110b1c6..702b89466c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -24,7 +24,7 @@ SNAPSHOT_REPOSITORY_URL=http://nexus.zhidaoauto.com/repository/maven-snapshots/ USERNAME=xintai PASSWORD=xintai2018 # 编译模式: false - 依赖本地版本, true - 依赖 maven 版本 -RELEASE=true +RELEASE=false # 模块版本 ## 工程内模块 MOGO_COMMONS_VERSION=1.1.0.2 diff --git a/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml b/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml index ab7a83b8e4..61a9d338d0 100644 --- a/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml +++ b/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml @@ -24,7 +24,7 @@ android:paddingTop="@dimen/dp_14" android:text="@string/mode_north_up" android:textColor="@color/white" - android:textSize="@dimen/dp_28" + android:textSize="@dimen/module_ext_north_textSize" app:layout_constraintRight_toRightOf="@+id/module_entrance_id_upload_road_condition" app:layout_constraintTop_toBottomOf="@+id/module_entrance_id_navi_info_panel" app:layout_goneMarginTop="@dimen/module_ext_north_goneMarginTop" /> @@ -57,7 +57,7 @@ android:layout_marginTop="@dimen/dp_7" android:text="全览" android:textColor="@color/white" - android:textSize="@dimen/dp_22" /> + android:textSize="@dimen/module_ext_display_overview_textSize" /> 17px 31.4px 1.2px - 58px + 66px 66px 66px 21px - 20px + 16px 34.5px 20px @@ -52,7 +52,7 @@ 32px 20px 30px - 22px + 16px 8px @@ -125,4 +125,6 @@ 66px 66px 16px + 22px + 14px \ No newline at end of file diff --git a/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml b/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml index 7b89df54dc..624e689985 100644 --- a/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml +++ b/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml @@ -121,5 +121,6 @@ 120px 120px 30px + 28px \ No newline at end of file diff --git a/modules/mogo-module-extensions/src/main/res/values/dimens.xml b/modules/mogo-module-extensions/src/main/res/values/dimens.xml index e30e6f8ee9..4e5e031906 100644 --- a/modules/mogo-module-extensions/src/main/res/values/dimens.xml +++ b/modules/mogo-module-extensions/src/main/res/values/dimens.xml @@ -122,5 +122,7 @@ 120px 120px 30px + 14px + 28px \ No newline at end of file From ded0e5b49350753090547cda10e7d5bb8e97a13e Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Fri, 22 May 2020 10:49:58 +0800 Subject: [PATCH 26/31] opt --- .../module_apps_ic_navigator_applist.png | Bin 2669 -> 4423 bytes .../module_apps_ic_navigator_media.png | Bin 2053 -> 4052 bytes .../module_apps_ic_navigator_navi.png | Bin 2140 -> 4080 bytes .../module_apps_ic_navigator_navi_disable.png | Bin 3951 -> 3926 bytes .../module_apps_ic_navigator_personcenter.png | Bin 2253 -> 4218 bytes .../src/main/res/values-ldpi/dimens.xml | 2 +- .../mogo/module/common/dialog/WMDialog.java | 81 ++---------- .../module/common/wm/WindowManagerView.java | 118 ++++++++++++++++++ .../module_ext_ic_navi_info3.png | Bin 336 -> 717 bytes .../module_map_layout_navi_info_panel.xml | 6 +- .../src/main/res/values-ldpi/dimens.xml | 14 +-- .../src/main/res/values-xhdpi/dimens.xml | 13 +- .../src/main/res/values/dimens.xml | 14 +-- .../service/intent/MockIntentHandler.java | 3 + .../service/adas/IMogoADASController.java | 1 + .../service/impl/adas/MogoADASController.java | 5 + 16 files changed, 163 insertions(+), 94 deletions(-) mode change 100755 => 100644 modules/mogo-module-apps/src/main/res/drawable-ldpi/module_apps_ic_navigator_applist.png mode change 100755 => 100644 modules/mogo-module-apps/src/main/res/drawable-ldpi/module_apps_ic_navigator_media.png mode change 100755 => 100644 modules/mogo-module-apps/src/main/res/drawable-ldpi/module_apps_ic_navigator_navi.png mode change 100755 => 100644 modules/mogo-module-apps/src/main/res/drawable-ldpi/module_apps_ic_navigator_personcenter.png create mode 100644 modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/WindowManagerView.java diff --git a/modules/mogo-module-apps/src/main/res/drawable-ldpi/module_apps_ic_navigator_applist.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/module_apps_ic_navigator_applist.png old mode 100755 new mode 100644 index 205ed11e64e67f89f9c38a93a6960d9e778ddc64..f884758d3d6737321c73d5356116d6fad15f8fe8 GIT binary patch literal 4423 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 diff --git a/modules/mogo-module-apps/src/main/res/drawable-ldpi/module_apps_ic_navigator_media.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/module_apps_ic_navigator_media.png old mode 100755 new mode 100644 index 3f47b7a60b45d23439a74e9670c4f7e2f18e8bea..d9f6df313de0d6867cb24a66fe9ddb6d27940bab GIT binary patch literal 4052 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 diff --git a/modules/mogo-module-apps/src/main/res/drawable-ldpi/module_apps_ic_navigator_navi.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/module_apps_ic_navigator_navi.png old mode 100755 new mode 100644 index 585e128e9a1964bc25114f133605544e0fa83dea..2401ce7c2a9e253bd6daf51dc9ca1c23b6954486 GIT binary patch literal 4080 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 i=uMP4i5W1Q(RX=#>< z5+W+{*kys`vCA$GdF`?bEPF4Y7$7sv6!k}8!Rh?&-Lvc>i?EmzyXVaOhG7=&?C-<( zdw#!j+52;I8^iMVe{mC}AY7}&p_yQzg!j(nfOCPIAUC(W zyaav$8&)k5t~)*f0gWjjN5~a&9v3m8aO1qi_^)Dp@%ak^l-|D2C?0v#D}U-c+=S+83gPGIT!5sq%XXF4z)lzVyh=q%msZXYq4E%Vu1f5P*qEqLJ`yZd_Q%J$xAtIu_=sI<- z6rK4=h0dNYL#Y?kD0HWorQk-0#~$}qV5JSDq^Z!kbT#@ZLxav=EJtTj6@BjR9x@8f zPHYbqu_jRV}FEstIj=?_;e?gM$|2{6$q?jvS!XTdc{c3_~l$)>LVlk-E}| z$}zOcY6e}cWzpp;ir-usT=3f;=?1N-wX!Bwnc13}N?v7EH4Lh*Yelu%HdNoxj+Vc? zO5?KNemIlUJ6r)E*5p-Y;#5{s--_yVZAh!Xh8h~LqZ21nJ6#f7z)PzuKxGzdVwFJw zAl4)*18B7v8mLUCzmD{c9jLMS29Az?FE8&xmjieB$jNT7W>KkGW!BcL2579sn%ahI zNN2c?3{4%V$@nuenmUn*?Lv~oLnfC3=k5K3qM%4OP-I;IDr^e?Z_Rd#H4Rv0%`HEp z7N!d^t=*`#{U)l{w){1D@?@#YfD0ETvKDKOPyj$>daSZWBZg*H8G+W;-h-Nr9sjIa z9a!!X;5&?v8Bq}4;i2Eib{Y1B?PG6;CSgTl2^$qHVZ||t z%)Zzp)1EyM1~-Ag`M|}-A7-r!z_7g;hGt?q`{Ux0nMso-72w~?^YQU5*|GEUCUYTR zKxrH_9OCHxY;$bql8$(3zS zSiU!dMmB73q){Na584W;8JP7oIDpSSyP)**Fmbb(+t-qqeKCmuj*W{?X5teLFbR@_ zEsxEZA$J;ZxiVGnU~krGW6jL0{9oogHCJV&vXQQpJ7vlg`MaC9)?1WDpd}n+B>NAU zUVkIF%2~kW==AOVLkobuvGrC+=xzgkU2aEZcCQBj{rm&UqQvnnJTy*ij0DHWAv?9s z0xmb@+@+gFv&sNkYFcK`EH9r@{F-bODzkgtY11Al2-)$ejzEL2D^~n>H#qOP;-*f0 zuplYJb(lF6!WLQCr)();L?A@r<(_S}^DUWycpC**)Gxhs4u0?)5L6UmMQm StIN^=00002oN9= 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 Q+W-In07*qoM6N<$f)jWjbpQYW literal 2253 zcmV;;2r~DHP);NYXoUebu;7ZcrLew%^2mcMTC)`rqFV(qJOlzE6hcB0AS572*a!}~tGhd* zUAC@{tkt@$R^=I9@)kP0pS9{Xs&= z@X7c4`~A+jIX^eI1za3X(ogBJTt0)9xIc!)dymfIU5jDF_eV1lMqj9)#}Ct)+)f6Q zcRq%}{T(wlF^9$CZ*u!Ft{C=?a5|HBn0VvC7Y@_{B8HjpAtRQb#^G>Yb{HCqwQH3L zn)wYPBDW5QghuqOS{>Z&L-X(S@}_lodcAnz?ent^KmS1enxJ*P8#XZqqUiA>R{v)U zJ$7gOqQNoP{B6W1(MA2iwd-U0i8t&do@#N%aCcwXw&s-ki0bT*F(D-nD_aAOvqxurMnapHA+dgjVp4HKe z_#yZUetv;^1k5&;EnD6a{>B!PPfRRVVGECusDMvw3jgIGf;D&e2Lw@VTd!67Qu`Ak z8MeYF0s>y?LZIeT-?A2}2V^jKi6lBU`|S;AF(d}jjq1apXD>WFyxL7wcZ9>qec25*fAE38HK9ES(9?rh zZM9IVuei8ffo?>LauWWqYW3^g2$21t;4zsy*0~Yuws(#2f)Tt0z>ALExe>ub@DMx% z55ZgFcP^`@6RO?0=3mUj6>Wd-}(J`b*cN<4vs(40bQQ+3Wb}bN%?)3xoK%i^KSZ zk4EtmO;`RM7ET{f$pb-*UaL93GBTCBlM<6V8X z@EnnB#wFnu$aG)Zwd!SCt3q%c-9~V|0~oHZsJrKq@QOW2F+ z2~R4o`-TM9+(&|Ip2MnFT5YY`O@SM_gAa|~#Y@X-?z$vAQGUgJD#tZHV~(>1H!=qB ztnB=oE(vdsARn7m9PC+@0yhruv5EUQlNmSYlJFQT&W#0uBXZoJ8QeX5bR0Z#cVGG& zR?h`IA0OY&a~}*no|WS|=Ff4XFOu*fV)jv)jG$K;0zD&$(vt33JeU=yEHrx56|`s9}YaUwyJfG z8?wrA6gb1oSNQQ0XTC;TQbY)Ii*K8A-1V8+Iqp-7Ri_DXQ-&`etzEmJ2f-tESC+S& zY`XaE>~`dHn;ZufH*@D3T&_^hpv_S0udw?1cQ(J@_8nzaV^zIxqc{lew?|KWfwtl2 z2v1M1c3s`?9}M64?6KLZ1|zufiO(KNB#LQt55wNKFoRz05{ab-ZS9eJHQEM{o-X{< z%gehR-2g&&&k(#Ng$HjJZVF=!^Z5I2?M`{;4mUA-+rtf3Ei?&a;O$M58dbLss?G>63&InXg4{e65E0<=3e+IK zPy-5zDu6^t*+S&%-<3sCk z4tVhbL$b-TP<0SqMy9Rmgiv*2E7cM3Bqqzs6jh|^6eiV`KB+orS+nXIK&|dDpwXNJ z-mek}c%D1st&@_g1HI>Wm&Bmp0D%3TX3P6&$9Ct z3X5fR2b~Ds_JmYJioHT1p07|;%`Oz0xeEoQx`TB`oC%)5VC?Oz3x(0LHie?VqB?8K z&Mp)>TgyJ7ItY&_80}60Z{5b|!Cxndu-$vaSW=1@gH3TtY5^ulE5uSWBv^W85tfl9 z#WICbEL$kYgd#bXlc&H$VkIWdFTwH)%di4T873)GVMWq%Oe$An#R?6kP--w`NhMZN zwjWces<3i(HKx{7V>!9`lkl7vTHB(vErN#v!9(z#A9(2Co+AhM(2>!_9~ni5l^r;& zjE>1Wa7-QzXmDUa0~!tDz-SOOl*XZL*tOpAT9?6aiI}#4vv5$)rW=;E^hds zMS*DSCHbAfg^s~M5 diff --git a/modules/mogo-module-apps/src/main/res/values-ldpi/dimens.xml b/modules/mogo-module-apps/src/main/res/values-ldpi/dimens.xml index fb55520395..5b12d6e39c 100644 --- a/modules/mogo-module-apps/src/main/res/values-ldpi/dimens.xml +++ b/modules/mogo-module-apps/src/main/res/values-ldpi/dimens.xml @@ -23,7 +23,7 @@ 78px 78px - 16px + 17px 78px 78px \ No newline at end of file diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/dialog/WMDialog.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/dialog/WMDialog.java index 097330f871..9dc367585c 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/dialog/WMDialog.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/dialog/WMDialog.java @@ -2,19 +2,12 @@ package com.mogo.module.common.dialog; import android.content.Context; import android.content.DialogInterface; -import android.graphics.PixelFormat; -import android.os.Build; -import android.view.Gravity; -import android.view.LayoutInflater; -import android.view.View; -import android.view.WindowManager; import android.widget.TextView; import androidx.annotation.StringRes; import com.mogo.module.common.R; -import com.mogo.module.common.utils.CarSeries; -import com.mogo.utils.WindowUtils; +import com.mogo.module.common.wm.WindowManagerView; /** * @author congtaowang @@ -25,54 +18,22 @@ import com.mogo.utils.WindowUtils; public class WMDialog implements DialogInterface { private WMDialogParams mParams; - private WindowManager mWindowManager; - private boolean mIsShowing = false; - private View mContentView; - private WindowManager.LayoutParams mLayoutParams; + private WindowManagerView mWindowManagerView; private WMDialog( WMDialogParams params ) { this.mParams = params; + mWindowManagerView = new WindowManagerView.Builder( mParams.mContext ).contentView( R.layout.module_commons_layout_wm_dialog ).build(); + initViews(); } public void show() { - if ( mIsShowing ) { - return; - } - mIsShowing = true; - if ( mWindowManager == null ) { - mWindowManager = ( WindowManager ) mParams.mContext.getApplicationContext().getSystemService( Context.WINDOW_SERVICE ); - } - if ( mContentView == null ) { - mLayoutParams = new WindowManager.LayoutParams(); - if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ) { - mLayoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; - } else { - mLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT; - } - mLayoutParams.format = PixelFormat.TRANSLUCENT; - mLayoutParams.gravity = Gravity.CENTER; - mLayoutParams.flags = WindowManager.LayoutParams.FLAG_DIM_BEHIND | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH; - - if ( CarSeries.getSeries() == CarSeries.CAR_SERIES_F80X ) { - mLayoutParams.width = 1920; - mLayoutParams.height = 1080; - } else { - mLayoutParams.width = WindowUtils.getScreenWidth( mParams.mContext ); - mLayoutParams.height = WindowUtils.getScreenHeight( mParams.mContext ); - } - mLayoutParams.dimAmount = 0.5f; - mLayoutParams.x = 0; - mLayoutParams.y = 0; - mContentView = initViews(); - } - mWindowManager.addView( mContentView, mLayoutParams ); + mWindowManagerView.show(); } - private View initViews() { - View contentView = LayoutInflater.from( mParams.mContext ).inflate( R.layout.module_commons_layout_wm_dialog, null ); - TextView ok = contentView.findViewById( R.id.module_commons_wm_dialog_button_ok ); - TextView cancel = contentView.findViewById( R.id.module_commons_wm_dialog_button_cancel ); - TextView content = contentView.findViewById( R.id.module_commons_wm_dialog_content ); + private void initViews() { + TextView ok = mWindowManagerView.findViewById( R.id.module_commons_wm_dialog_button_ok ); + TextView cancel = mWindowManagerView.findViewById( R.id.module_commons_wm_dialog_button_cancel ); + TextView content = mWindowManagerView.findViewById( R.id.module_commons_wm_dialog_content ); ok.setText( mParams.mOkButtonText ); if ( mParams.mOnOkButtonClickListener != null ) { @@ -92,7 +53,6 @@ public class WMDialog implements DialogInterface { } content.setText( mParams.mContent ); - return contentView; } @Override @@ -102,20 +62,11 @@ public class WMDialog implements DialogInterface { @Override public void dismiss() { - if ( !mIsShowing ) { - return; - } - if ( mContentView != null ) { - mWindowManager.removeViewImmediate( mContentView ); - } - if ( mParams.mOnDialogDismissListener != null ) { - mParams.mOnDialogDismissListener.onDismiss( this ); - } - mIsShowing = false; + mWindowManagerView.dismiss(); } public boolean isShowing() { - return mIsShowing; + return mWindowManagerView.isShowing(); } public static class Builder { @@ -129,16 +80,6 @@ public class WMDialog implements DialogInterface { mParams.mContext = context; } -// public Builder setTitle( CharSequence title ) { -// mParams.mTitle = title; -// return this; -// } -// -// public Builder setTitle( @StringRes int title ) { -// mParams.mTitle = mContext.getString( title ); -// return this; -// } - public Builder setContent( CharSequence content ) { mParams.mContent = content; return this; diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/WindowManagerView.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/WindowManagerView.java new file mode 100644 index 0000000000..29db8cd8fb --- /dev/null +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/WindowManagerView.java @@ -0,0 +1,118 @@ +package com.mogo.module.common.wm; + +import android.content.Context; +import android.graphics.PixelFormat; +import android.os.Build; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.WindowManager; + +import androidx.annotation.IdRes; +import androidx.annotation.LayoutRes; + +import com.mogo.module.common.utils.CarSeries; +import com.mogo.utils.WindowUtils; + +/** + * @author congtaowang + * @since 2020-05-21 + *

+ * 往 window manager 添加view + */ +public class WindowManagerView { + + private WMViewParams mParams; + private boolean mIsShowing; + private WindowManager mWindowManager; + private WindowManager.LayoutParams mLayoutParams; + + private WindowManagerView( WMViewParams params ) { + this.mParams = params; + init(); + } + + private void init() { + mWindowManager = ( WindowManager ) mParams.mContext.getApplicationContext().getSystemService( Context.WINDOW_SERVICE ); + mLayoutParams = new WindowManager.LayoutParams(); + if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ) { + mLayoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; + } else { + mLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT; + } + mLayoutParams.format = PixelFormat.TRANSLUCENT; + mLayoutParams.gravity = Gravity.CENTER; + mLayoutParams.flags = WindowManager.LayoutParams.FLAG_DIM_BEHIND | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH; + + if ( CarSeries.getSeries() == CarSeries.CAR_SERIES_F80X ) { + mLayoutParams.width = 1920; + mLayoutParams.height = 1080; + } else { + mLayoutParams.width = WindowUtils.getScreenWidth( mParams.mContext ); + mLayoutParams.height = WindowUtils.getScreenHeight( mParams.mContext ); + } + mLayoutParams.dimAmount = 0.5f; + mLayoutParams.x = 0; + mLayoutParams.y = 0; + } + + public boolean isShowing() { + return mIsShowing; + } + + public < T extends View > T findViewById( @IdRes int id ) { + return mParams.mContentView.findViewById( id ); + } + + public void show() { + if ( mIsShowing ) { + return; + } + mIsShowing = true; + mWindowManager.addView( mParams.mContentView, mLayoutParams ); + } + + public void dismiss() { + if ( !mIsShowing ) { + return; + } + if ( mParams != null ) { + mWindowManager.removeViewImmediate( mParams.mContentView ); + } + mIsShowing = false; + } + + public static class Builder { + + private WMViewParams mParams = null; + + public Builder( Context context ) { + mParams = new WMViewParams(); + mParams.mContext = context; + } + + public Builder contentView( View contentView ) { + mParams.mContentView = contentView; + return this; + } + + public Builder contentView( @LayoutRes int contentViewId ) { + mParams.mContentView = LayoutInflater.from( mParams.mContext ).inflate( contentViewId, null ); + return this; + } + + public WindowManagerView build() { + if ( mParams.mContentView == null ) { + throw new NullPointerException( "WMViewParams#mContentView must not be null." ); + } + return new WindowManagerView( mParams ); + } + + } + + public static class WMViewParams { + + public View mContentView; + public Context mContext; + } +} diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/module_ext_ic_navi_info3.png b/modules/mogo-module-extensions/src/main/res/drawable-ldpi/module_ext_ic_navi_info3.png index c8580d052c9c25596dea8f882f078ef16190da53..c62dfd068d24e0108ca5ec2f910955dafe56eca4 100755 GIT binary patch literal 717 zcmeAS@N?(olHy`uVBq!ia0vp^k|4~%3?x6Bmj*I0FbW3vgt!8^|6$5Z)oHEuXr+wwu4XZ9hK9Dk^L_qXPJo7y!aasE&D-gno=-k2%*&HS`dQTfkbzr%HGyKJ8SO_y*_ znxA{Lp;*Wu?0f#wZF~$jCSMX_n9pEvsVrBD;gr8&{*M{)|9nMRV)-^6BUC={Gt8qkzHF)z4*}Q$iB}Xy~Ix literal 336 zcmV-W0k8gvP)CU6oX$O!)4><-tJv6Vvvd1A{lKayVar$N;V^Z!Y!FiRxwKP=+(LP zI&t6kzNgM|`aYlM`F0*r@YtRN%D|2CGHmw(E5KT~<3YRE5@LH4SOwOBD$p01egGrC zAhx@JrIgzY(8}mq(&o>A?QLKKr~`v}S4>kU_#Q?WdDvt`i`qz)=vEBsGdawty?3A*mF9ecmKP izyok7>7o!MtI6NLQB05*H(WIU0000 15px - 9px - 9px - 18px - 18px - -1px + 9px + 9px + 18px + 18px + -1px 30px 23px @@ -111,7 +111,7 @@ 14px 20px 14px - 34px + 34px 8px 8px @@ -125,6 +125,6 @@ 66px 66px 16px - 22px + 14px 14px \ No newline at end of file diff --git a/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml b/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml index 624e689985..fc372e59cf 100644 --- a/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml +++ b/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml @@ -89,11 +89,11 @@ 24px 28px - 17px - 17px - 36px - 36px - -2px + 17px + 17px + 36px + 36px + -2px 30px 40px @@ -101,7 +101,7 @@ 15px 15px 5px - 50px + 50px 37px 26px 37px @@ -121,6 +121,7 @@ 120px 120px 30px + 122px 28px \ No newline at end of file diff --git a/modules/mogo-module-extensions/src/main/res/values/dimens.xml b/modules/mogo-module-extensions/src/main/res/values/dimens.xml index 4e5e031906..d4922bc498 100644 --- a/modules/mogo-module-extensions/src/main/res/values/dimens.xml +++ b/modules/mogo-module-extensions/src/main/res/values/dimens.xml @@ -90,11 +90,11 @@ 24px 28px - 17px - 17px - 36px - 36px - -2px + 17px + 17px + 36px + 36px + -2px 30px 40px @@ -108,7 +108,7 @@ 26px 37px 26px - 50px + 50px 15px 15px @@ -122,7 +122,7 @@ 120px 120px 30px - 14px + 22px 28px \ No newline at end of file diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MockIntentHandler.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MockIntentHandler.java index 972aa61212..ff9a355949 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MockIntentHandler.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MockIntentHandler.java @@ -131,6 +131,9 @@ public class MockIntentHandler implements IntentHandler { query.setRadius( 1000 ); geoSearch.getFromLocationAsyn( query ); break; + case 11: + MarkerServiceHandler.getADASController().setSettingStatus( intent.getBooleanExtra( "status", false ) ); + break; } } } diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoADASController.java b/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoADASController.java index 468c965b26..7be4dd6e4e 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoADASController.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoADASController.java @@ -31,4 +31,5 @@ public interface IMogoADASController extends IProvider { */ void killADAS(); + void setSettingStatus(boolean show); } diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java index c38edf1b56..f0602070b2 100644 --- a/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java +++ b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java @@ -166,4 +166,9 @@ public class MogoADASController implements IMogoADASController { } return false; } + + @Override + public void setSettingStatus( boolean show ) { + AutopilotServiceManage.getInstance().setSettingStatus( show ); + } } From 8fc347ede6b8596497a63e1e5b4966a65e791140 Mon Sep 17 00:00:00 2001 From: tongchenfei Date: Fri, 22 May 2020 14:08:55 +0800 Subject: [PATCH 27/31] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=8A=E6=8A=A5?= =?UTF-8?q?=E5=8F=91=E9=80=81=E5=AD=97=E6=AE=B5=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../extensions/entrance/EntrancePresenter.java | 11 +++++++---- .../mogo/module/share/constant/ShareConstants.java | 9 ++++----- .../module/share/dialog/LaucherShareDialog.java | 13 ++++++++++--- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntrancePresenter.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntrancePresenter.java index 602fcf46f3..cec48aab5a 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntrancePresenter.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntrancePresenter.java @@ -38,6 +38,9 @@ import static com.mogo.module.authorize.authprovider.invoke.AuthorizeInvokerCons * 描述 */ public class EntrancePresenter extends Presenter< EntranceView > { + private static final String REPORT_TANLU_BLOCK = "10007"; + private static final String REPORT_TANLU_TRAFFIC_CHECK = "10002"; + private static final String REPORT_TANLU_CLOSURE = "10003"; private Context mContext; private IMogoAnalytics mAnalytics; @@ -286,7 +289,7 @@ public class EntrancePresenter extends Presenter< EntranceView > { mStatusManager.setUploadingStatus( "CARD_TYPE_ROAD_CONDITION", true ); traceTanluData( "2" ); - sendShareReceiver( "1" ); + sendShareReceiver( REPORT_TANLU_BLOCK ); Logger.d( "EntrancePresenter", "mogoIntentListener 上报路况 ----> " ); traceTypeData( "1" ); ShareControl.getInstance( mContext ).dismissDialog(); @@ -294,7 +297,7 @@ public class EntrancePresenter extends Presenter< EntranceView > { private void uploadTrfficCheck() { mStatusManager.setUploadingStatus( "CARD_TYPE_ROAD_CONDITION", true ); - sendShareReceiver( "2" ); + sendShareReceiver( REPORT_TANLU_TRAFFIC_CHECK ); Logger.d( "EntrancePresenter", "mogoIntentListener 分享交通检查 ----> " ); traceTypeData( "3" ); ShareControl.getInstance( mContext ).dismissDialog(); @@ -302,7 +305,7 @@ public class EntrancePresenter extends Presenter< EntranceView > { private void uploadRoadClosed() { mStatusManager.setUploadingStatus( "CARD_TYPE_ROAD_CONDITION", true ); - sendShareReceiver( "3" ); + sendShareReceiver( REPORT_TANLU_CLOSURE ); Logger.d( "EntrancePresenter", "mogoIntentListener 分享封路 ----> " ); traceTypeData( "4" ); ShareControl.getInstance( mContext ).dismissDialog(); @@ -328,7 +331,7 @@ public class EntrancePresenter extends Presenter< EntranceView > { } /** - * 发送广播 1拥堵,2交通检查,3封路 + * 发送广播 上报路况 */ private void sendShareReceiver( String type ) { Logger.d( "EntrancePresenter", "TanluCardViewFragment sendShareReceiver ---->" ); diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/constant/ShareConstants.java b/modules/mogo-module-share/src/main/java/com/mogo/module/share/constant/ShareConstants.java index 36fd5aeb72..30d347f4a6 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/constant/ShareConstants.java +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/constant/ShareConstants.java @@ -25,12 +25,11 @@ public class ShareConstants { /** * 这个是实时路况,不是拥堵,拥堵放在了extention模块里面处理 */ - public static final String VOICE_CMD_PUB_ROAD_CONDITION = "com.zhidao.pathfinder.report" + - ".roadCondition"; + public static final String VOICE_CMD_PUB_ROAD_CONDITION = "com.zhidao.pathfinder.report.roadCondition"; - public static final String TYPE_BLOCK = "1"; - public static final String TYPE_TRAFFIC_CHECK = "2"; - public static final String TYPE_CLOSURE = "3"; + public static final String TYPE_BLOCK = "10007"; + public static final String TYPE_TRAFFIC_CHECK = "10002"; + public static final String TYPE_CLOSURE = "10003"; public static final String TYPE_ACCIDENT = "10013"; public static final String TYPE_REAL_TIME_TRAFFIC = "10015"; public static final String TYPE_SEEK_HELP = "6"; diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/dialog/LaucherShareDialog.java b/modules/mogo-module-share/src/main/java/com/mogo/module/share/dialog/LaucherShareDialog.java index 1e19c2da2f..d876d6c3e2 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/dialog/LaucherShareDialog.java +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/dialog/LaucherShareDialog.java @@ -117,7 +117,7 @@ public class LaucherShareDialog implements View.OnClickListener { if (id == R.id.tvBlock) { //拥堵 traceTanluData("1"); - sendShareReceiver("1"); + sendShareReceiver(ShareConstants.TYPE_BLOCK); traceTypeData("1"); dismiss(); } else if (id == R.id.oil_price_layout) { @@ -131,36 +131,43 @@ public class LaucherShareDialog implements View.OnClickListener { } else if (id == R.id.tvTrafficCheck) { //交通检查 traceData("1"); - sendShareReceiver("2"); + sendShareReceiver(ShareConstants.TYPE_TRAFFIC_CHECK); traceTypeData("3"); dismiss(); } else if (id == R.id.tvClosure) { //封路 traceData("1"); - sendShareReceiver("3"); + sendShareReceiver(ShareConstants.TYPE_CLOSURE); traceTypeData("4"); dismiss(); } else if (id == R.id.tvSeekHelp) { // 故障求助 SeekHelpManager.INSTANCE.seekHelp(mContext,seekListener,true); + dismiss(); } else if (id == R.id.tvAccident) { // 事故 sendShareReceiver(ShareConstants.TYPE_ACCIDENT); + dismiss(); } else if (id == R.id.tvConstruction) { // 道路施工 sendShareReceiver(ShareConstants.TYPE_ROAD_CONSTRUCTION); + dismiss(); } else if (id == R.id.tvRealTimeTraffic) { // 实时路况 sendShareReceiver(ShareConstants.TYPE_REAL_TIME_TRAFFIC); + dismiss(); } else if (id == R.id.tvStagnantWater) { // 道路积水 sendShareReceiver(ShareConstants.TYPE_STAGNANT_WATER); + dismiss(); } else if (id == R.id.tvRoadIcy) { // 道路结冰 sendShareReceiver(ShareConstants.TYPE_ROAD_ICY); + dismiss(); } else if (id == R.id.tvDenseFog) { // 浓雾 sendShareReceiver(ShareConstants.TYPE_DENSE_FOG); + dismiss(); } } From 5107eef2b1c38189f76f68aaa6973afbc24861f9 Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Fri, 22 May 2020 15:47:49 +0800 Subject: [PATCH 28/31] opt --- .../java/com/mogo/module/apps/AppNavigatorPresenter.java | 6 +++++- .../src/main/java/com/mogo/module/apps/AppsConst.java | 1 + .../src/main/java/com/mogo/module/apps/AppsPresenter.java | 6 +++--- .../src/main/java/com/mogo/module/apps/model/AppEnum.java | 6 +++--- .../com/mogo/module/service/marker/MapMarkerManager.java | 2 +- .../service/marker/UserDataMarkerInfoWindowAdapter.java | 5 +++++ .../java/com/mogo/service/impl/adas/MogoADASController.java | 2 +- 7 files changed, 19 insertions(+), 9 deletions(-) diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorPresenter.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorPresenter.java index 1abbfd47cc..24119d559c 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorPresenter.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorPresenter.java @@ -72,10 +72,14 @@ public class AppNavigatorPresenter extends Presenter< AppNavigatorView > impleme return; } try { - AppServiceHandler.getApis().getAdasControllerApi().closeADAS(); JSONObject object = new JSONObject( intent.getStringExtra( "data" ) ); String app = object.optString( "object" ); String operation = object.optString( "operation" ); + + if( !AppsConst.OBJECT_ADAS.equals( app ) ){ + AppServiceHandler.getApis().getAdasControllerApi().closeADAS(); + } + if ( AppsConst.OBJECT_ALL_APPS.equals( app ) ) { if ( AppsConst.OPERATION_OPEN.equals( operation ) ) { mView.openAppsPanel(); diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsConst.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsConst.java index 5809924c22..2c8ca3d7ab 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsConst.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsConst.java @@ -25,6 +25,7 @@ public class AppsConst { public static final String OBJECT_ALL_APPS = "全部应用"; public static final String OBJECT_FAST_SETTINGS = "快捷设置"; + public static final String OBJECT_ADAS = "辅助驾驶"; public static final String OPERATION_OPEN = "打开"; public static final String OPERATION_CLOSE = "关闭"; diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsPresenter.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsPresenter.java index 306c626b83..d7705da71e 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsPresenter.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsPresenter.java @@ -144,9 +144,9 @@ public class AppsPresenter extends Presenter< AppsView > { } } } - growthCapacity( result ); - // 添加介绍入口 - result.get( result.size() - 1 ).add( new AppInfo( GuideShowLauncher.APP_INFO_NAME_GUIDE_SHOW, getContext().getPackageName(), null, 0, null, R.drawable.module_apps_ic_guide_show ) ); +// growthCapacity( result ); +// // 添加介绍入口 +// result.get( result.size() - 1 ).add( new AppInfo( GuideShowLauncher.APP_INFO_NAME_GUIDE_SHOW, getContext().getPackageName(), null, 0, null, R.drawable.module_apps_ic_guide_show ) ); if ( DebugConfig.isDebug() ) { // 添加测试入口 growthCapacity( result ); diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppEnum.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppEnum.java index 7837c2cd77..b0ad31e2b6 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppEnum.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppEnum.java @@ -19,11 +19,11 @@ public enum AppEnum { QQMusic( "QQ音乐", "com.pvetec.musics", R.drawable.module_apps_ic_qq_music ), //"车聊聊", - Im( "车聊聊", "com.zhidao.imdemo", R.drawable.module_apps_ic_im ), +// Im( "车聊聊", "com.zhidao.imdemo", R.drawable.module_apps_ic_im ), //"探路", - RoadCondition( "探路", "com.zhidao.roadcondition", R.drawable.module_apps_ic_road_condition ), - RoadConditionSlit( "探路", "com.zhidao.roadcondition.split", R.drawable.module_apps_ic_road_condition ), +// RoadCondition( "探路", "com.zhidao.roadcondition", R.drawable.module_apps_ic_road_condition ), +// RoadConditionSlit( "探路", "com.zhidao.roadcondition.split", R.drawable.module_apps_ic_road_condition ), //"福利", Welfare( "福利", "com.zhidaohulian.welfare.car", R.drawable.module_apps_ic_welfare ), diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java index c67685661c..9f5a90088b 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java @@ -178,7 +178,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener, } // 在线车辆点击使用infoWindow if ( TextUtils.equals( mogoMarker.getOwner(), ModuleNames.CARD_TYPE_USER_DATA ) ) { -// mogoMarker.hideInfoWindow(); + mogoMarker.hideInfoWindow(); Logger.d( TAG, "关闭info window" ); } else { Object object = mogoMarker.getObject(); diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/UserDataMarkerInfoWindowAdapter.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/UserDataMarkerInfoWindowAdapter.java index 31768b6763..39965debba 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/UserDataMarkerInfoWindowAdapter.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/UserDataMarkerInfoWindowAdapter.java @@ -9,6 +9,7 @@ import android.widget.ImageView; import android.widget.TextView; import com.alibaba.android.arouter.launcher.ARouter; +import com.mogo.commons.debug.DebugConfig; import com.mogo.commons.network.SubscribeImpl; import com.mogo.map.marker.IMogoInfoWindowAdapter; import com.mogo.map.marker.IMogoMarker; @@ -110,6 +111,10 @@ public class UserDataMarkerInfoWindowAdapter implements IMogoInfoWindowAdapter { } mCall.setOnClickListener( view -> { if ( markerShowEntity.getBindObj() instanceof MarkerOnlineCar ) { + if ( DebugConfig.getNetMode() != DebugConfig.NET_MODE_DEMO ) { + callToFactUser( markerShowEntity ); + return; + } sRefreshApiService.getMockUsers().subscribeOn( Schedulers.io() ) .observeOn( AndroidSchedulers.mainThread() ) .subscribe( new SubscribeImpl< DemoUserInfoEntity >( RequestOptions.create( mContext ) ) { diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java index f0602070b2..019e4c91c1 100644 --- a/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java +++ b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java @@ -36,7 +36,7 @@ public class MogoADASController implements IMogoADASController { private static final String TAG = "MogoADASController"; - public static final String ACTION = "com.zhidao.speech.awake.notify"; + public static final String ACTION = "com.zhidao.autopilot.ACTION_BOOT"; public static final String PARAM_COMMAND = "command"; public static final String VAL_COMMAND = "system.application.operation"; public static final String PARAM_DATA = "data"; From 733e6b342b2bf6359ffd90d150efea92178f619b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Fri, 22 May 2020 16:39:45 +0800 Subject: [PATCH 29/31] =?UTF-8?q?=E5=8D=87=E7=BA=A7=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle.properties | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/gradle.properties b/gradle.properties index 702b89466c..d1ff0607a8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -24,32 +24,32 @@ SNAPSHOT_REPOSITORY_URL=http://nexus.zhidaoauto.com/repository/maven-snapshots/ USERNAME=xintai PASSWORD=xintai2018 # 编译模式: false - 依赖本地版本, true - 依赖 maven 版本 -RELEASE=false +RELEASE=true # 模块版本 ## 工程内模块 -MOGO_COMMONS_VERSION=1.1.0.2 -MOGO_UTILS_VERSION=1.1.0.2 -MAP_AMAP_VERSION=1.1.0.2 -MOGO_MAP_VERSION=1.1.0.2 -MOGO_MAP_API_VERSION=1.1.0.2 -MOGO_SERVICE_VERSION=1.1.0.2 -MOGO_SERVICE_API_VERSION=1.1.0.2 -MOGO_CONNECTION_VERSION=1.1.0.2 -MOGO_MODULE_APPS_VERSION=1.1.0.2 -MOGO_MODULE_NAVI_VERSION=1.1.0.2 -MOGO_MODULE_SHARE_VERSION=1.1.0.2 +MOGO_COMMONS_VERSION=1.1.0.3 +MOGO_UTILS_VERSION=1.1.0.3 +MAP_AMAP_VERSION=1.1.0.3 +MOGO_MAP_VERSION=1.1.0.3 +MOGO_MAP_API_VERSION=1.1.0.3 +MOGO_SERVICE_VERSION=1.1.0.3 +MOGO_SERVICE_API_VERSION=1.1.0.3 +MOGO_CONNECTION_VERSION=1.1.0.3 +MOGO_MODULE_APPS_VERSION=1.1.0.3 +MOGO_MODULE_NAVI_VERSION=1.1.0.3 +MOGO_MODULE_SHARE_VERSION=1.1.0.3 MOGO_MODULE_COMMON_VERSION=1.1.0.5 -MOGO_MODULE_MAIN_VERSION=1.1.0.2 -MOGO_MODULE_MAP_VERSION=1.1.0.2 +MOGO_MODULE_MAIN_VERSION=1.1.0.3 +MOGO_MODULE_MAP_VERSION=1.1.0.3 MOGO_MODULE_SERVICE_VERSION=1.1.0.3 -MOGO_MODULE_EXTENSIONS_VERSION=1.1.0.2 -MOGO_MODULE_SEARCH_VERSION=1.1.0.2 -MOGO_MODULE_BACK_VERSION=1.1.0.2 -MOGO_MODULE_GPS_SIMULATOR_VERSION=1.1.0.2 -MOGO_MODULE_GPS_SIMULATOR_DEBUG_VERSION=1.1.0.2 -MOGO_MODULE_GPS_SIMULATOR_NOOP_VERSION=1.1.0.2 -MOGO_MODULE_AUTHORIZE_VERSION=1.1.0.2 -MOGO_MODULE_GUIDE_VERSION=1.1.0.2 +MOGO_MODULE_EXTENSIONS_VERSION=1.1.0.3 +MOGO_MODULE_SEARCH_VERSION=1.1.0.3 +MOGO_MODULE_BACK_VERSION=1.1.0.3 +MOGO_MODULE_GPS_SIMULATOR_VERSION=1.1.0.3 +MOGO_MODULE_GPS_SIMULATOR_DEBUG_VERSION=1.1.0.3 +MOGO_MODULE_GPS_SIMULATOR_NOOP_VERSION=1.1.0.3 +MOGO_MODULE_AUTHORIZE_VERSION=1.1.0.3 +MOGO_MODULE_GUIDE_VERSION=1.1.0.3 ## 工程外部模块 From d3c5fea02145237927d94a20541b9f478d028f99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Fri, 22 May 2020 16:54:10 +0800 Subject: [PATCH 30/31] =?UTF-8?q?=E5=8D=87=E7=BA=A7=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index d1ff0607a8..a4d232ebbc 100644 --- a/gradle.properties +++ b/gradle.properties @@ -24,7 +24,7 @@ SNAPSHOT_REPOSITORY_URL=http://nexus.zhidaoauto.com/repository/maven-snapshots/ USERNAME=xintai PASSWORD=xintai2018 # 编译模式: false - 依赖本地版本, true - 依赖 maven 版本 -RELEASE=true +RELEASE=false # 模块版本 ## 工程内模块 MOGO_COMMONS_VERSION=1.1.0.3 From 63d1d681d5160dc3e52840071f34d8a3495af807 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Fri, 22 May 2020 18:58:03 +0800 Subject: [PATCH 31/31] =?UTF-8?q?=E5=8D=87=E7=BA=A7=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle.properties | 48 +++++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/gradle.properties b/gradle.properties index a4d232ebbc..73a90f4ee9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -24,32 +24,32 @@ SNAPSHOT_REPOSITORY_URL=http://nexus.zhidaoauto.com/repository/maven-snapshots/ USERNAME=xintai PASSWORD=xintai2018 # 编译模式: false - 依赖本地版本, true - 依赖 maven 版本 -RELEASE=false +RELEASE=true # 模块版本 ## 工程内模块 -MOGO_COMMONS_VERSION=1.1.0.3 -MOGO_UTILS_VERSION=1.1.0.3 -MAP_AMAP_VERSION=1.1.0.3 -MOGO_MAP_VERSION=1.1.0.3 -MOGO_MAP_API_VERSION=1.1.0.3 -MOGO_SERVICE_VERSION=1.1.0.3 -MOGO_SERVICE_API_VERSION=1.1.0.3 -MOGO_CONNECTION_VERSION=1.1.0.3 -MOGO_MODULE_APPS_VERSION=1.1.0.3 -MOGO_MODULE_NAVI_VERSION=1.1.0.3 -MOGO_MODULE_SHARE_VERSION=1.1.0.3 -MOGO_MODULE_COMMON_VERSION=1.1.0.5 -MOGO_MODULE_MAIN_VERSION=1.1.0.3 -MOGO_MODULE_MAP_VERSION=1.1.0.3 -MOGO_MODULE_SERVICE_VERSION=1.1.0.3 -MOGO_MODULE_EXTENSIONS_VERSION=1.1.0.3 -MOGO_MODULE_SEARCH_VERSION=1.1.0.3 -MOGO_MODULE_BACK_VERSION=1.1.0.3 -MOGO_MODULE_GPS_SIMULATOR_VERSION=1.1.0.3 -MOGO_MODULE_GPS_SIMULATOR_DEBUG_VERSION=1.1.0.3 -MOGO_MODULE_GPS_SIMULATOR_NOOP_VERSION=1.1.0.3 -MOGO_MODULE_AUTHORIZE_VERSION=1.1.0.3 -MOGO_MODULE_GUIDE_VERSION=1.1.0.3 +MOGO_COMMONS_VERSION=1.1.0.7 +MOGO_UTILS_VERSION=1.1.0.7 +MAP_AMAP_VERSION=1.1.0.7 +MOGO_MAP_VERSION=1.1.0.7 +MOGO_MAP_API_VERSION=1.1.0.7 +MOGO_SERVICE_VERSION=1.1.0.7 +MOGO_SERVICE_API_VERSION=1.1.0.7 +MOGO_CONNECTION_VERSION=1.1.0.7 +MOGO_MODULE_APPS_VERSION=1.1.0.7 +MOGO_MODULE_NAVI_VERSION=1.1.0.7 +MOGO_MODULE_SHARE_VERSION=1.1.0.7 +MOGO_MODULE_COMMON_VERSION=1.1.0.7 +MOGO_MODULE_MAIN_VERSION=1.1.0.7 +MOGO_MODULE_MAP_VERSION=1.1.0.7 +MOGO_MODULE_SERVICE_VERSION=1.1.0.7 +MOGO_MODULE_EXTENSIONS_VERSION=1.1.0.7 +MOGO_MODULE_SEARCH_VERSION=1.1.0.7 +MOGO_MODULE_BACK_VERSION=1.1.0.7 +MOGO_MODULE_GPS_SIMULATOR_VERSION=1.1.0.7 +MOGO_MODULE_GPS_SIMULATOR_DEBUG_VERSION=1.1.0.7 +MOGO_MODULE_GPS_SIMULATOR_NOOP_VERSION=1.1.0.7 +MOGO_MODULE_AUTHORIZE_VERSION=1.1.0.7 +MOGO_MODULE_GUIDE_VERSION=1.1.0.7 ## 工程外部模块

* 描述 */ -public class AppNavigatorPresenter extends Presenter< AppNavigatorView > implements IMogoIntentListener, IMogoVoiceCmdCallBack { +public class AppNavigatorPresenter extends Presenter< AppNavigatorView > implements IMogoIntentListener, + IMogoVoiceCmdCallBack, + IMogoNaviListener2 { private static final String TAG = "AppNavigatorPresenter"; @@ -42,6 +45,7 @@ public class AppNavigatorPresenter extends Presenter< AppNavigatorView > impleme super.onCreate( owner ); mIntentManager = AppServiceHandler.getApis().getIntentManagerApi(); mMogoStatusManager = AppServiceHandler.getApis().getStatusManagerApi(); + AppServiceHandler.getApis().getRegisterCenterApi().registerMogoNaviListener( TAG, this ); // 预加载应用列表,空间换时间 AppsModel.getInstance( getContext() ).load( null ); } @@ -106,26 +110,6 @@ public class AppNavigatorPresenter extends Presenter< AppNavigatorView > impleme } } - @Override - public void onCmdAction( String speakText ) { - - } - - @Override - public void onCmdCancel( String speakText ) { - - } - - @Override - public void onSpeakEnd( String speakText ) { - - } - - @Override - public void onSpeakSelectTimeOut( String speakText ) { - - } - @Override public void onDestroy( @NonNull LifecycleOwner owner ) { if ( mIntentManager != null ) { @@ -133,4 +117,14 @@ public class AppNavigatorPresenter extends Presenter< AppNavigatorView > impleme } super.onDestroy( owner ); } + + @Override + public void onStartNavi() { + mView.hideNavigationEntrance(); + } + + @Override + public void onStopNavi() { + mView.showNavigationEntrance(); + } } diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorView.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorView.java index 00e75e1009..f67673cb2c 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorView.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorView.java @@ -15,4 +15,8 @@ public interface AppNavigatorView extends IView { * 打开全部应用 */ void openAppsPanel(); + + void hideNavigationEntrance(); + + void showNavigationEntrance(); } diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/Anim.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/anim/Anim.java similarity index 76% rename from modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/Anim.java rename to modules/mogo-module-apps/src/main/java/com/mogo/module/apps/anim/Anim.java index 85717028df..e98e07ee8a 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/Anim.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/anim/Anim.java @@ -1,4 +1,4 @@ -package com.mogo.module.extensions.anim; +package com.mogo.module.apps.anim; /** * @author congtaowang diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/AnimRes.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/anim/AnimRes.java similarity index 97% rename from modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/AnimRes.java rename to modules/mogo-module-apps/src/main/java/com/mogo/module/apps/anim/AnimRes.java index 13628228da..e579d0658a 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/AnimRes.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/anim/AnimRes.java @@ -1,6 +1,7 @@ -package com.mogo.module.extensions.anim; +package com.mogo.module.apps.anim; -import com.mogo.module.extensions.R; + +import com.mogo.module.apps.R; /** * @author congtaowang diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/AnimWrapper.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/anim/AnimWrapper.java similarity index 95% rename from modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/AnimWrapper.java rename to modules/mogo-module-apps/src/main/java/com/mogo/module/apps/anim/AnimWrapper.java index 3ff87e8e4e..bf38719907 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/AnimWrapper.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/anim/AnimWrapper.java @@ -1,10 +1,10 @@ -package com.mogo.module.extensions.anim; +package com.mogo.module.apps.anim; import android.graphics.drawable.AnimationDrawable; import android.widget.ImageView; +import com.mogo.module.apps.R; import com.mogo.module.common.utils.CarSeries; -import com.mogo.module.extensions.R; import com.mogo.utils.ThreadPoolService; import com.mogo.utils.UiThreadHandler; import com.mogo.utils.logger.Logger; diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/JSurfaceView.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/anim/JSurfaceView.java similarity index 98% rename from modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/JSurfaceView.java rename to modules/mogo-module-apps/src/main/java/com/mogo/module/apps/anim/JSurfaceView.java index 5d89ecdddc..b70218743b 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/JSurfaceView.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/anim/JSurfaceView.java @@ -1,4 +1,4 @@ -package com.mogo.module.extensions.anim; +package com.mogo.module.apps.anim; import android.content.Context; import android.graphics.Bitmap; @@ -13,7 +13,6 @@ import android.util.AttributeSet; import android.view.SurfaceHolder; import android.view.SurfaceView; -import com.mogo.utils.ThreadPoolService; import com.mogo.utils.logger.Logger; import java.lang.ref.WeakReference; diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/KitkatAnim.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/anim/KitkatAnim.java similarity index 83% rename from modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/KitkatAnim.java rename to modules/mogo-module-apps/src/main/java/com/mogo/module/apps/anim/KitkatAnim.java index 9043265a2f..2f3f864367 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/KitkatAnim.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/anim/KitkatAnim.java @@ -1,4 +1,4 @@ -package com.mogo.module.extensions.anim; +package com.mogo.module.apps.anim; /** * @author congtaowang diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/OthersAnim.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/anim/OthersAnim.java similarity index 93% rename from modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/OthersAnim.java rename to modules/mogo-module-apps/src/main/java/com/mogo/module/apps/anim/OthersAnim.java index 57adffda3a..13156b1e7c 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/OthersAnim.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/anim/OthersAnim.java @@ -1,4 +1,4 @@ -package com.mogo.module.extensions.anim; +package com.mogo.module.apps.anim; import android.graphics.drawable.AnimationDrawable; diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/NavigatorApps.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/NavigatorApps.java index 9e5a98be45..1bb4271c82 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/NavigatorApps.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/NavigatorApps.java @@ -13,15 +13,25 @@ import java.util.List; */ public class NavigatorApps { - private static List< AppInfo > sApps = new ArrayList<>(); + private static AppInfo app = new AppInfo( "导航", "com.mogo.launcher.navi.search", "", 0, null, R.drawable.module_apps_ic_navigator_navi ); + private static AppInfo app2 = new AppInfo( "音乐", "com.pvetec.musics", "", 0, null, R.drawable.module_apps_ic_navigator_media ); + private static AppInfo app3 = new AppInfo( "个人中心", "com.zhidao.auto.personal", "", 0, null, R.drawable.module_apps_ic_navigator_personcenter ); + private static AppInfo app4 = new AppInfo( "全部应用", "com.mogo.launcher.applist", "", 0, null, R.drawable.module_apps_ic_navigator_applist ); public static List< AppInfo > getApps() { - if ( sApps.isEmpty() ) { - sApps.add( new AppInfo( "导航", "com.mogo.launcher.navi.search", "", 0, null, R.drawable.module_apps_ic_apps ) ); - sApps.add( new AppInfo( "音乐", "com.pvetec.musics", "", 0, null, R.drawable.module_apps_ic_apps ) ); - sApps.add( new AppInfo( "个人中心", "com.zhidao.auto.personal", "", 0, null, R.drawable.module_apps_ic_apps ) ); - sApps.add( new AppInfo( "全部应用", "com.mogo.launcher.applist", "", 0, null, R.drawable.module_apps_ic_apps ) ); - } + List< AppInfo > sApps = new ArrayList<>(); + sApps.add( app ); + sApps.add( app2 ); + sApps.add( app3 ); + sApps.add( app4 ); + return sApps; + } + + public static List< AppInfo > getAppsWithoutNavigation() { + List< AppInfo > sApps = new ArrayList<>(); + sApps.add( app2 ); + sApps.add( app3 ); + sApps.add( app4 ); return sApps; } } diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00000.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00000.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00000.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00000.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00001.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00001.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00001.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00001.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00002.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00002.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00002.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00002.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00003.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00003.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00003.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00003.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00004.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00004.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00004.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00004.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00005.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00005.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00005.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00005.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00006.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00006.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00006.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00006.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00007.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00007.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00007.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00007.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00008.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00008.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00008.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00008.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00009.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00009.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00009.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00009.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00010.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00010.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00010.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00010.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00011.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00011.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00011.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00011.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00012.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00012.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00012.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00012.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00013.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00013.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00013.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00013.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00014.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00014.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00014.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00014.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00015.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00015.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00015.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00015.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00016.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00016.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00016.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00016.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00017.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00017.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00017.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00017.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00018.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00018.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00018.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00018.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00019.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00019.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00019.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00019.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00020.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00020.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00020.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00020.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00021.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00021.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00021.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00021.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00022.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00022.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00022.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00022.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00023.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00023.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00023.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00023.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00024.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00024.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00024.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00024.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00025.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00025.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00025.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00025.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00026.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00026.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00026.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00026.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00027.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00027.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00027.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00027.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00028.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00028.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00028.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00028.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00029.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00029.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00029.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00029.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00030.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00030.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00030.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00030.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00031.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00031.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00031.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00031.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00032.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00032.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00032.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00032.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00033.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00033.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00033.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00033.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00034.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00034.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00034.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00034.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00035.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00035.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00035.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00035.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00036.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00036.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00036.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00036.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00037.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00037.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00037.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00037.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00038.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00038.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00038.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00038.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00039.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00039.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00039.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00039.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00040.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00040.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00040.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00040.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00041.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00041.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00041.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00041.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00042.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00042.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00042.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00042.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00043.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00043.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00043.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00043.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00044.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00044.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00044.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00044.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00045.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00045.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00045.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00045.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00046.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00046.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00046.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00046.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00047.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00047.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00047.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00047.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00048.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00048.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00048.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00048.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00049.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00049.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00049.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00049.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00050.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00050.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00050.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00050.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00051.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00051.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00051.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00051.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00052.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00052.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00052.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00052.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00053.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00053.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00053.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00053.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00054.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00054.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00054.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00054.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00055.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00055.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00055.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00055.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00056.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00056.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00056.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00056.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00057.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00057.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00057.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00057.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00058.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00058.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00058.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00058.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00059.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00059.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00059.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00059.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00060.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00060.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00060.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00060.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00061.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00061.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00061.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00061.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00062.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00062.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00062.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00062.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00063.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00063.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00063.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00063.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00064.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00064.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00064.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00064.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00065.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00065.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00065.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00065.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00066.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00066.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00066.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00066.png diff --git a/modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00067.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00067.png similarity index 100% rename from modules/mogo-module-extensions/src/main/res/drawable-ldpi/mogo_tts_icon_00067.png rename to modules/mogo-module-apps/src/main/res/drawable-ldpi/mogo_tts_icon_00067.png diff --git a/modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_ai_assist.png b/modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_ai_assist.png new file mode 100755 index 0000000000000000000000000000000000000000..45e7c7fc5e2f19b8fffdd094eff6145e8380546b GIT binary patch literal 32785 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 M07*qoM6N<$f2><{9 literal 0 HcmV?d00001 diff --git a/modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_ai_assist_bkg.png b/modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_ai_assist_bkg.png new file mode 100644 index 0000000000000000000000000000000000000000..e86c3454df79fb5ff10cf7c1be387e86e46f319e GIT binary patch literal 4091 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 literal 0 HcmV?d00001 diff --git a/modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_navigator_applist.png b/modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_navigator_applist.png new file mode 100755 index 0000000000000000000000000000000000000000..b95bc4576fff6adf812f78067a30a765de103db3 GIT binary patch literal 13351 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 literal 0 HcmV?d00001 diff --git a/modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_navigator_media.png b/modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_navigator_media.png new file mode 100755 index 0000000000000000000000000000000000000000..bcfdb9cfa94ed7502335c6b6b48ee19e5f1cfed0 GIT binary patch literal 10330 zcmZv?cRba9^f>-fLPomeUMty3T$}89?LEr4Mi<%AMT$aYUuEW&oh_@2=$eszZL&vk zuVh9>_V?xe`Fwwm?;pQE?s&W&uQQ%!pXWKz#)evS)U4D10MO}ZYnTE68T0vviUNER z`Q~>l0Nmu#(NHyiGPRyT>1Sav)_DU{s*%W4Wy~0+$_#n&(+r{}M@=0OA0|Fjwr}&)<-6#D`o3r~Hjhi*Rd1sr}&2JBQ zQ#NOOgFQBV_a?`kK3+6>q7mk}AFo>WtbS*GXi~uEQ(Q=ww*A@QEv4WV6FVhUT;|-1 z%b9jBiZdGQdQj}-*{t0;cx~UrCH_8>;POgYJzwmSXrFWH2)}~GnGgFo=beAEDN3h} zc3X5*EYp($H#UV{Eppfp6NJ@B{@&21&zc@@#_VS2Tz<3eskvlj1_{bJT$kVP@*1C$uX_4d+Rgj*tQk8yJEQ0$ zRoj?VcUrCX9rswMWtxrK!jaR9Q;#xo8 zjXbh*DnESI_NessTzE_qlJZ`nyy4Z*>8<8ceuEoE{(gQh%>jo&>uf1ikK7AG`s`(W zQ^=9|uQJ&K@+9HKhbK;*w6J@%y!tnR(GQ?}^Bcw?uCG(wrxD!3V! zj9nkj$gt&t0zJUFq)9qiu4TiiWlZR&8~9HJYl(L~tTw(GMBvA%s>jFD&e`h6Zgk_lUHM0Zfn?I@)o^s5 zO|_2tb86tN`NNS<_Z7-;m3ao$5pKfcpSt*Zu_v9*tZ~+LPW5%th8?^>_Vx!*zU8z- z`ut_TSsC%k2zd3Pfko_-Ex`PG^-|B1sbs751X_}Z<_I_S$nqM82wUjNtFi2%09|5zB6TtBfOd z$M?gcNII0vILHVa%YHwJW}^gIM3a)hPUjB?Mo;Bfcsx#;{5x`$GBu}=rf)gzt^%KL z@GvzK!;Xd*$KzQ2*zSm_9Vi3-zpP&*B=NcP+Hv6re_h$BJ2UH#z+iyUMw-OBBe7mO zrbFHsti5q^X8W?-9Xl$(pWb@<@WvCG7(pzuuCk()#SI!B43ZoQ7WedGbF=>bS;0PD za$EMEU(UsBZ*`BEE*E#gW1&8!Os~91xE%oa-{4UU?q-R&w7AG7e(#|p>>e3Vqes%&