From a4b6783fc0988dea0c532db1acdaf5b70084e649 Mon Sep 17 00:00:00 2001 From: tongchenfei Date: Tue, 8 Sep 2020 17:23:33 +0800 Subject: [PATCH 1/8] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=88=86=E4=BA=AB?= =?UTF-8?q?=E6=A1=86=E8=AE=BE=E7=BD=AE=E6=9C=8D=E5=8A=A1=E7=AB=AF=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E6=94=AF=E6=8C=81=EF=BC=8C=E5=BE=85=E8=81=94=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mogo/module/share/ShareControl.java | 171 ++++++++++-------- .../module/share/adapter/ShareBtnAdapter.kt | 2 +- .../mogo/module/share/bean/FixableButton.kt | 9 +- .../module/share/bean/ShareConfigRequest.kt | 9 + .../module/share/constant/ShareConstants.java | 5 + .../module/share/dialog/FixableShareDialog.kt | 140 -------------- .../share/dialog/GridFixableShareDialog.kt | 8 +- .../module/share/manager/GridBtnManager.kt | 44 +++-- .../mogo/module/share/net/ShareApiService.kt | 9 + .../launcher_dialog_share_with_gride.xml | 37 ---- .../mogo/service/share/IMogoShareManager.java | 3 +- 11 files changed, 169 insertions(+), 268 deletions(-) create mode 100644 modules/mogo-module-share/src/main/java/com/mogo/module/share/bean/ShareConfigRequest.kt delete mode 100644 modules/mogo-module-share/src/main/java/com/mogo/module/share/dialog/FixableShareDialog.kt delete mode 100644 modules/mogo-module-share/src/main/res/layout/launcher_dialog_share_with_gride.xml diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareControl.java b/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareControl.java index f9e0479657..b5e29e66bc 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareControl.java +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareControl.java @@ -3,56 +3,60 @@ package com.mogo.module.share; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.os.Bundle; -import android.view.View; - -import androidx.annotation.NonNull; -import androidx.fragment.app.Fragment; +import android.os.Handler; +import android.os.Message; +import android.util.ArrayMap; import com.alibaba.android.arouter.facade.annotation.Route; import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.commons.debug.DebugConfig; +import com.mogo.commons.network.SubscribeImpl; +import com.mogo.commons.network.Utils; import com.mogo.commons.voice.AIAssist; import com.mogo.commons.voice.IMogoVoiceCmdCallBack; -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.map.location.MogoLocation; import com.mogo.module.authorize.authprovider.invoke.AuthorizeConstant; import com.mogo.module.authorize.authprovider.invoke.AuthorizeInvokerConstant; import com.mogo.module.authorize.authprovider.module.IMogoAcquireAuthorizeListener; import com.mogo.module.authorize.authprovider.module.IMogoAuthorizeModuleManager; import com.mogo.module.common.dialog.BaseFloatDialog; +import com.mogo.module.share.bean.FixableButton; +import com.mogo.module.share.bean.ShareButtonConfigResponse; +import com.mogo.module.share.bean.ShareConfigRequest; import com.mogo.module.share.bean.StepAfterAuth; +import com.mogo.module.share.constant.HttpConstant; import com.mogo.module.share.constant.ShareConstants; -import com.mogo.module.share.dialog.FixableShareDialog; import com.mogo.module.share.dialog.GridFixableShareDialog; -import com.mogo.module.share.dialog.LaucherShareDialog; import com.mogo.module.share.manager.ServiceApisManager; import com.mogo.module.share.manager.UploadHelper; +import com.mogo.module.share.net.ShareApiService; import com.mogo.service.MogoServicePaths; import com.mogo.service.intent.IMogoIntentListener; import com.mogo.service.intent.IMogoIntentManager; -import com.mogo.service.module.IMogoModuleLifecycle; import com.mogo.service.share.IMogoShareManager; import com.mogo.service.statusmanager.IMogoStatusChangedListener; import com.mogo.service.statusmanager.StatusDescriptor; import com.mogo.service.tanlu.IMogoTanluProvider; import com.mogo.service.tanlu.TanluUploadParams; +import com.mogo.utils.NetworkUtils; import com.mogo.utils.TipToast; import com.mogo.utils.logger.Logger; +import com.mogo.utils.network.RequestOptions; +import com.mogo.utils.network.utils.GsonUtil; +import com.mogo.utils.storage.SharedPrefsMgr; import org.jetbrains.annotations.NotNull; import org.json.JSONObject; +import java.util.List; +import java.util.Map; + +import io.reactivex.schedulers.Schedulers; + import static com.mogo.module.share.bean.StepAfterAuthKt.STEP_AFTER_AUTH_TYPE_SEEK_HELP; import static com.mogo.module.share.bean.StepAfterAuthKt.STEP_AFTER_AUTH_TYPE_SHOW_DIALOG; import static com.mogo.module.share.bean.StepAfterAuthKt.STEP_AFTER_AUTH_TYPE_UPLOAD; -import static com.mogo.module.share.constant.ShareConstants.CMD_CANCEL_SHARE; -import static com.mogo.module.share.constant.ShareConstants.CMD_ROAD_CLOSURE; -import static com.mogo.module.share.constant.ShareConstants.CMD_TRAFFIC_CHECK; -import static com.mogo.module.share.constant.ShareConstants.CMD_UPLOAD_ACCIDENT; -import static com.mogo.module.share.constant.ShareConstants.CMD_UPLOAD_BLOCK; +import static com.mogo.module.share.constant.ShareConstants.KEY_SHARE_CONFIG; import static com.mogo.module.share.constant.ShareConstants.UNWAKE_CANCEL_SHARE; import static com.mogo.module.share.constant.ShareConstants.UNWAKE_UPLOAD_ACCIDENT; import static com.mogo.module.share.constant.ShareConstants.UNWAKE_UPLOAD_DENSE_FOG; @@ -65,12 +69,7 @@ import static com.mogo.module.share.constant.ShareConstants.UNWAKE_UPLOAD_ROAD_I import static com.mogo.module.share.constant.ShareConstants.UNWAKE_UPLOAD_SEEK_HELP; import static com.mogo.module.share.constant.ShareConstants.UNWAKE_UPLOAD_STAGNANT_WATER; import static com.mogo.module.share.constant.ShareConstants.UNWAKE_UPLOAD_TRAFFIC_CHECK; -import static com.mogo.module.share.constant.ShareConstants.UPLOAD_DENSE_FOG; import static com.mogo.module.share.constant.ShareConstants.UPLOAD_REAL_TIME_TRAFFIC; -import static com.mogo.module.share.constant.ShareConstants.UPLOAD_ROAD_CONSTRUCTION; -import static com.mogo.module.share.constant.ShareConstants.UPLOAD_ROAD_ICY; -import static com.mogo.module.share.constant.ShareConstants.UPLOAD_SEEK_HELP; -import static com.mogo.module.share.constant.ShareConstants.UPLOAD_STAGNANT_WATER; import static com.mogo.module.share.constant.ShareConstants.VOICE_CMD_GO_TO_SHARE; import static com.mogo.module.share.constant.ShareConstants.VOICE_CMD_NO_REPLY_SHARE_DIALOG_CLOSE; import static com.mogo.module.share.constant.ShareConstants.VOICE_CMD_PUB_ROAD_CONDITION; @@ -94,7 +93,7 @@ import static com.mogo.service.tanlu.IMogoTanluProvider.TYPE_TRAFFIC_CHECK; * @since 2020-01-10 */ @Route(path = MogoServicePaths.PATH_SHARE) -public class ShareControl implements IMogoShareManager, IMogoIntentListener, IMogoVoiceCmdCallBack { +public class ShareControl implements IMogoShareManager, IMogoIntentListener, IMogoVoiceCmdCallBack, Handler.Callback { private static final String TAG = "ShareControl"; private Context mContext; @@ -204,6 +203,20 @@ public class ShareControl implements IMogoShareManager, IMogoIntentListener, IMo } }); } + + ServiceApisManager.serviceApis.getStatusManagerApi().registerStatusChangedListener(TAG, StatusDescriptor.ACC_STATUS, new IMogoStatusChangedListener() { + @Override + public void onStatusChanged(StatusDescriptor descriptor, boolean isTrue) { + if (isTrue) { + queryShareConfigRetryTime = 0; + queryShareButtonConfig(); + } + } + }); + + // 获取分享框配置信息 + queryShareConfigRetryTime = 0; + queryShareButtonConfig(); Logger.d(TAG,"init over===="); } @@ -438,59 +451,73 @@ public class ShareControl implements IMogoShareManager, IMogoIntentListener, IMo authorizeModuleManager.invokeAuthorization(AuthorizeInvokerConstant.AUTHORIZE_TYPE_LAUNCHER_SHARE); } - @Override - public Fragment createFragment(Context context, Bundle data) { - return null; + private void queryShareButtonConfig(){ + if (NetworkUtils.isConnected(mContext)) { + // 有网,直接请求 + MogoLocation location = ServiceApisManager.serviceApis.getMapServiceApi().getSingletonLocationClient(mContext).getLastKnowLocation(); + Map params = new ArrayMap<>(); + ShareConfigRequest request = new ShareConfigRequest(Utils.getSn(), location.getAdCode()); + params.put("data", request.toJson()); + ServiceApisManager.serviceApis.getNetworkApi().create(ShareApiService.class, + HttpConstant.Companion.getNetHost()).queryShareButtonConfig(params).subscribeOn(Schedulers.io()).observeOn(Schedulers.io()).subscribe(new SubscribeImpl(RequestOptions.create(mContext)) { + @Override + public void onSuccess(ShareButtonConfigResponse o) { + super.onSuccess(o); + String config = ""; + if (o.getDetailMsg() != null) { + List btnList = o.getDetailMsg().getData(); + if(btnList != null&&!btnList.isEmpty()) { + config = GsonUtil.jsonFromObject(o.getDetailMsg().getData()); + Logger.d(TAG, "获取分享框成功:" + config); + }else { + Logger.d(TAG, "获取分享框成功,但是data没有内容"); + } + }else{ + Logger.d(TAG,"获取分享框成功,但是detailMsg没有内容"); + } + Logger.d(TAG, "获取分享框配置成功: " + config); + SharedPrefsMgr.getInstance(mContext).putString(KEY_SHARE_CONFIG, config); + } + + @Override + public void onError(Throwable e) { + super.onError(e); + Logger.d(TAG, "获取分享框配置失败: " + e.getMessage()); + retryQueryShareConfig(); + } + + @Override + public void onError(String message, int code) { + super.onError(message, code); + Logger.d(TAG, "获取分享框配置失败: " + code + ", " + message); + retryQueryShareConfig(); + } + }); + }else{ + // 重试 + retryQueryShareConfig(); + } + queryShareConfigRetryTime++; } - @Override - public View createView(Context context) { - return null; - } - - @NonNull - @Override - public String getModuleName() { - return "ShareControl"; + private static final int MSG_QUERY_SHARE_CONFIG_RETRY = 1001; + private int queryShareConfigRetryTime = 0; + private static final int QUERY_SHARE_CONFIG_RETRY_TIME_THRESHOLD = 10; + private void retryQueryShareConfig(){ + if(queryShareConfigRetryTime > QUERY_SHARE_CONFIG_RETRY_TIME_THRESHOLD){ + // 重试次数超过QUERY_SHARE_CONFIG_RETRY_TIME_THRESHOLD,不再重试 + return; + } + handler.sendEmptyMessageDelayed(MSG_QUERY_SHARE_CONFIG_RETRY, 3000); } + private Handler handler = new Handler(this); @Override - public IMogoModuleLifecycle getCardLifecycle() { - return null; - } - - @Override - public IMogoMapListener getMapListener() { - return null; - } - - @Override - public int getType() { - return 0; - } - - @Override - public IMogoNaviListener getNaviListener() { - return null; - } - - @Override - public IMogoLocationListener getLocationListener() { - return null; - } - - @Override - public IMogoMarkerClickListener getMarkerClickListener() { - return null; - } - - @Override - public String getAppPackage() { - return ""; - } - - @Override - public String getAppName() { - return ""; + public boolean handleMessage(Message msg) { + if (msg.what == MSG_QUERY_SHARE_CONFIG_RETRY) { + queryShareButtonConfig(); + return true; + } + return false; } } 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 index bb720041a5..a0fa5d68ab 100644 --- 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 @@ -38,7 +38,7 @@ class ShareBtnAdapter(val context:Context): RecyclerView.Adapter) \ No newline at end of file diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/bean/ShareConfigRequest.kt b/modules/mogo-module-share/src/main/java/com/mogo/module/share/bean/ShareConfigRequest.kt new file mode 100644 index 0000000000..7eb289d236 --- /dev/null +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/bean/ShareConfigRequest.kt @@ -0,0 +1,9 @@ +package com.mogo.module.share.bean + +import com.mogo.utils.network.utils.GsonUtil + +class ShareConfigRequest(val sn:String,val adCode:String) { + fun toJson():String{ + return GsonUtil.jsonFromObject(this) + } +} \ No newline at end of file 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 580a25a8f4..e55fcb61c9 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 @@ -81,4 +81,9 @@ public class ShareConstants { * 这个是实时路况,不是拥堵,拥堵放在了extention模块里面处理 */ public static final String VOICE_CMD_PUB_ROAD_CONDITION = "com.zhidao.pathfinder.report.roadCondition"; + + /** + * 分享框配置本地缓存的key + */ + public static final String KEY_SHARE_CONFIG = "SHARE_BUTTON_CONFIG"; } diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/dialog/FixableShareDialog.kt b/modules/mogo-module-share/src/main/java/com/mogo/module/share/dialog/FixableShareDialog.kt deleted file mode 100644 index 0148f6fe3a..0000000000 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/dialog/FixableShareDialog.kt +++ /dev/null @@ -1,140 +0,0 @@ -package com.mogo.module.share.dialog - -import android.content.Context -import androidx.recyclerview.widget.GridLayoutManager -import androidx.recyclerview.widget.RecyclerView -import com.alibaba.android.arouter.launcher.ARouter -import com.mogo.commons.debug.DebugConfig -import com.mogo.module.common.dialog.BaseFloatDialog -import com.mogo.module.common.utils.CarSeries -import com.mogo.module.share.R -import com.mogo.module.share.adapter.ShareBtnAdapter -import com.mogo.module.share.bean.FixableButton -import com.mogo.module.share.manager.ISeekHelpListener -import com.mogo.module.share.manager.SeekHelpManager.removeSeekHelpListener -import com.mogo.module.share.manager.UploadHelper.upload -import com.mogo.service.IMogoServiceApis -import com.mogo.service.MogoServicePaths -import com.mogo.service.analytics.IMogoAnalytics -import com.mogo.service.statusmanager.IMogoStatusManager -import com.mogo.service.tanlu.IMogoTanluProvider -import com.mogo.service.tanlu.TanluUploadParams -import com.mogo.utils.logger.Logger -import kotlin.random.Random - - -/** - * 可动态设置内容的Dialog - * 由于和左侧Adas冲突,改成了windowManager方式实现,这种实现方式的问题是,无法监测back键的事件 - * @since 2020-01-10 - * @author tongchenfei - */ -class FixableShareDialog(private val mContext: Context) : BaseFloatDialog(mContext) { - private val isShown = false - private val mAnalytics: IMogoAnalytics - private val mStatusManager: IMogoStatusManager - private val mApis: IMogoServiceApis - private lateinit var btnRecycler: RecyclerView - private lateinit var btnAdapter:ShareBtnAdapter - - private fun setWrapContent() { - val window = window - if (DebugConfig.getCarMachineType() != DebugConfig.CAR_MACHINE_TYPE_BYD) { - if (window != null) { - val lp = window.attributes - lp.width = 1024 - lp.height = 600 - window.attributes = lp - } - } else if (CarSeries.getSeries() == CarSeries.CAR_SERIES_F80X) { - if (window != null) { - val lp = window.attributes - lp.width = 1920 - lp.height = 1080 - window.attributes = lp - } - } else { - if (window != null) { - val lp = window.attributes - lp.width = 1024 - lp.height = 600 - window.attributes = lp - } - } - } - - private fun initView() { - Logger.d(TAG, "test-------3") - setContentView(R.layout.launcher_dialog_share_with_gride) - setWrapContent() - - btnRecycler = findViewById(R.id.moduleShareBtnRecyclerView) - val manager = GridLayoutManager(mContext, 5, GridLayoutManager.VERTICAL, false) - manager.isAutoMeasureEnabled = true - btnAdapter = ShareBtnAdapter(mContext) - btnRecycler.adapter = btnAdapter - btnAdapter.btnClickListener = { - Logger.d(TAG, "btn click: $it") - randomGenerateBtn() - } - randomGenerateBtn() - } - - private fun randomGenerateBtn(){ - val random = Random.nextInt(1, 10) - val list = ArrayList() - for (i in 0 until random) { - list.add(FixableButton()) - } - btnAdapter.setFixableButtonList(list) - } - - private val seekListener: ISeekHelpListener = object : ISeekHelpListener { - override fun onSeekHelpSuccess() { - Logger.d(TAG, "上报求助完成,成功") - removeSeekHelpListener(this) - dismiss() - } - - override fun onSeekHelpFail() { - Logger.d(TAG, "上报求助完成,失败") - removeSeekHelpListener(this) - dismiss() - } - } - - /** - * 发送广播 1拥堵,2交通检查,3封路 - */ - private fun sendShareReceiver(type: String) { - val params = TanluUploadParams(type, IMogoTanluProvider.UPLOAD_FROM_USER) - upload(mContext, params, true) - } - - override fun show() { - Logger.d(TAG, "onShow====") - if (!DebugConfig.isLauncher()) { - mApis.adasControllerApi.closeADAS() - } - super.show() - } - - override fun dismiss() { - Logger.d(TAG, "onDismiss=====") - if (!DebugConfig.isLauncher() && mApis.statusManagerApi.isMainPageOnResume) { - mApis.adasControllerApi.showADAS() - } - super.dismiss() - } - - companion object { - private const val TAG = "FixableShareDialog" - } - - init { - mApis = ARouter.getInstance().build(MogoServicePaths.PATH_SERVICE_APIS).navigation(mContext) as IMogoServiceApis - mAnalytics = mApis.analyticsApi - mStatusManager = mApis.statusManagerApi - initView() - } -} \ No newline at end of file diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/dialog/GridFixableShareDialog.kt b/modules/mogo-module-share/src/main/java/com/mogo/module/share/dialog/GridFixableShareDialog.kt index fbbef80697..fa3b868954 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/dialog/GridFixableShareDialog.kt +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/dialog/GridFixableShareDialog.kt @@ -22,6 +22,11 @@ import com.mogo.service.tanlu.TanluUploadParams import com.mogo.utils.logger.Logger import kotlin.random.Random +/** + * 可动态配置的分享对话框 + * + * @author tongchenfei + */ class GridFixableShareDialog(context:Context):BaseFloatDialog(context) { private val isShown = false private val mAnalytics: IMogoAnalytics @@ -73,8 +78,6 @@ class GridFixableShareDialog(context:Context):BaseFloatDialog(context) { dismiss() } findViewById(R.id.flShareDialogContainer).setOnClickListener { dismiss() } - - gridBtnManager.showDefaultBtns() } private fun randomGenerateBtn(){ @@ -112,6 +115,7 @@ class GridFixableShareDialog(context:Context):BaseFloatDialog(context) { if (!DebugConfig.isLauncher()) { mApis.adasControllerApi.closeADAS() } + gridBtnManager.showShareButton() super.show() } diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/GridBtnManager.kt b/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/GridBtnManager.kt index 65dd00d2da..f3c21f45b0 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/GridBtnManager.kt +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/GridBtnManager.kt @@ -3,19 +3,25 @@ package com.mogo.module.share.manager import android.content.Context import android.view.LayoutInflater import android.view.View -import android.view.ViewGroup import android.widget.GridLayout import android.widget.ImageView import android.widget.TextView import com.mogo.module.share.R import com.mogo.module.share.bean.FixableButton +import com.mogo.module.share.constant.ShareConstants import com.mogo.service.tanlu.IMogoTanluProvider import com.mogo.utils.glide.GlideApp +import com.mogo.utils.logger.Logger +import com.mogo.utils.network.utils.GsonUtil +import com.mogo.utils.storage.SharedPrefsMgr /** * 用来管理生成对应的分享按钮 */ -class GridBtnManager(val context: Context, val container: GridLayout) { +class GridBtnManager(val context: Context,private val container: GridLayout) { + companion object{ + const val TAG = "GridBtnManager" + } private val inflater = LayoutInflater.from(context) fun resetContainer() { @@ -32,7 +38,7 @@ class GridBtnManager(val context: Context, val container: GridLayout) { } else { GlideApp.with(context).load(button.iconRes).centerInside().into(img) } - content.text = button.content + content.text = button.title view.setOnClickListener { btnClickListener?.invoke(button) } @@ -40,18 +46,28 @@ class GridBtnManager(val context: Context, val container: GridLayout) { return view } - fun showDefaultBtns() { + fun showShareButton() { resetContainer() - generateShareButton(FixableButton(poiType = IMogoTanluProvider.TYPE_BLOCK, iconRes = R.drawable.share_block_up, content = "拥堵")) - generateShareButton(FixableButton(poiType = IMogoTanluProvider.TYPE_TRAFFIC_CHECK, iconRes = R.drawable.share_traffic_check, content = "交通检查")) - generateShareButton(FixableButton(poiType = IMogoTanluProvider.TYPE_CLOSURE, iconRes = R.drawable.share_road_closure, content = "封路")) - generateShareButton(FixableButton(poiType = IMogoTanluProvider.TYPE_ACCIDENT, iconRes = R.drawable.share_accident, content = "事故")) - generateShareButton(FixableButton(poiType = IMogoTanluProvider.TYPE_ROAD_CONSTRUCTION, iconRes = R.drawable.share_road_construction, content = "道路施工")) - generateShareButton(FixableButton(poiType = IMogoTanluProvider.TYPE_REAL_TIME_TRAFFIC, iconRes = R.drawable.share_real_time_traffic, content = "实时路况")) - generateShareButton(FixableButton(poiType = IMogoTanluProvider.TYPE_SEEK_HELP, iconRes = R.drawable.share_seek_help, content = "故障求助")) - generateShareButton(FixableButton(poiType = IMogoTanluProvider.TYPE_STAGNANT_WATER, iconRes = R.drawable.share_stagnant_water, content = "道路积水")) - generateShareButton(FixableButton(poiType = IMogoTanluProvider.TYPE_ROAD_ICY, iconRes = R.drawable.share_road_icy, content = "道路结冰")) - generateShareButton(FixableButton(poiType = IMogoTanluProvider.TYPE_DENSE_FOG, iconRes = R.drawable.share_dense_fog, content = "浓雾")) + val config = SharedPrefsMgr.getInstance(context).getString(ShareConstants.KEY_SHARE_CONFIG) + Logger.d(TAG, "showDefaultBtns: $config") + if(config.isEmpty()) { + // 默认的全部十个按钮 + generateShareButton(FixableButton(poiType = IMogoTanluProvider.TYPE_BLOCK, iconRes = R.drawable.share_block_up, title = "拥堵")) + generateShareButton(FixableButton(poiType = IMogoTanluProvider.TYPE_TRAFFIC_CHECK, iconRes = R.drawable.share_traffic_check, title = "交通检查")) + generateShareButton(FixableButton(poiType = IMogoTanluProvider.TYPE_CLOSURE, iconRes = R.drawable.share_road_closure, title = "封路")) + generateShareButton(FixableButton(poiType = IMogoTanluProvider.TYPE_ACCIDENT, iconRes = R.drawable.share_accident, title = "事故")) + generateShareButton(FixableButton(poiType = IMogoTanluProvider.TYPE_ROAD_CONSTRUCTION, iconRes = R.drawable.share_road_construction, title = "道路施工")) + generateShareButton(FixableButton(poiType = IMogoTanluProvider.TYPE_REAL_TIME_TRAFFIC, iconRes = R.drawable.share_real_time_traffic, title = "实时路况")) + generateShareButton(FixableButton(poiType = IMogoTanluProvider.TYPE_SEEK_HELP, iconRes = R.drawable.share_seek_help, title = "故障求助")) + generateShareButton(FixableButton(poiType = IMogoTanluProvider.TYPE_STAGNANT_WATER, iconRes = R.drawable.share_stagnant_water, title = "道路积水")) + generateShareButton(FixableButton(poiType = IMogoTanluProvider.TYPE_ROAD_ICY, iconRes = R.drawable.share_road_icy, title = "道路结冰")) + generateShareButton(FixableButton(poiType = IMogoTanluProvider.TYPE_DENSE_FOG, iconRes = R.drawable.share_dense_fog, title = "浓雾")) + }else{ + val btnList = GsonUtil.arrayFromJson(config, FixableButton::class.java) + btnList.forEach {btn-> + generateShareButton(btn) + } + } } private var btnClickListener: ((fixableButton: FixableButton) -> Unit)? = null diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/net/ShareApiService.kt b/modules/mogo-module-share/src/main/java/com/mogo/module/share/net/ShareApiService.kt index a0cf947886..0919a94738 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/net/ShareApiService.kt +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/net/ShareApiService.kt @@ -2,7 +2,9 @@ package com.mogo.module.share.net import com.mogo.commons.data.BaseData import com.mogo.module.share.bean.AverateSpeedResponse +import com.mogo.module.share.bean.ShareButtonConfigResponse import io.reactivex.Observable +import io.reactivex.Single import okhttp3.RequestBody import retrofit2.http.* @@ -23,4 +25,11 @@ interface ShareApiService { @Headers("Content-type:application/json;charset=UTF-8") @POST("/deva/car/path/no/poiStrategyCheck/v1") fun sendAverageSpeedForBlockStrategy(@Body request:RequestBody,@Query("sn") sn:String):Observable + + /** + * 获取分享框服务端配置 + */ + @FormUrlEncoded + @POST("/yycp-geoIndex-preSearch-service/car/search/no/searchNearbyInformation/v1") + fun queryShareButtonConfig(@FieldMap param: Map):Observable } \ No newline at end of file diff --git a/modules/mogo-module-share/src/main/res/layout/launcher_dialog_share_with_gride.xml b/modules/mogo-module-share/src/main/res/layout/launcher_dialog_share_with_gride.xml deleted file mode 100644 index e98f899a4a..0000000000 --- a/modules/mogo-module-share/src/main/res/layout/launcher_dialog_share_with_gride.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/share/IMogoShareManager.java b/services/mogo-service-api/src/main/java/com/mogo/service/share/IMogoShareManager.java index f74b14b110..17a29d3455 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/share/IMogoShareManager.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/share/IMogoShareManager.java @@ -2,13 +2,14 @@ package com.mogo.service.share; import android.content.Context; +import com.alibaba.android.arouter.facade.template.IProvider; import com.mogo.service.module.IMogoModuleProvider; /** * 分享框管理接口 * @author tongchenfei */ -public interface IMogoShareManager extends IMogoModuleProvider { +public interface IMogoShareManager extends IProvider { /** * 显示分享框 */ From d4d0399b27942c13ece722e6bb62050dfae63352 Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Wed, 9 Sep 2020 10:05:25 +0800 Subject: [PATCH 2/8] =?UTF-8?q?1.=20=E8=A7=A3=E5=86=B3app=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E5=86=85=E5=AD=98=E6=B3=84=E6=BC=8F=E9=97=AE=E9=A2=98?= =?UTF-8?q?=202.=20=E7=8B=AC=E7=AB=8BAPP=E5=9C=A8onPause=E6=97=B6=E4=B8=8D?= =?UTF-8?q?=E5=85=B3=E9=97=ADadas=E7=AE=97=E6=B3=95=203.=20=E8=A7=A3?= =?UTF-8?q?=E5=86=B3npe=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config.gradle | 2 +- .../map/impl/amap/AMapNaviViewWrapper.java | 1 + .../mogo/map/impl/amap/AMapViewWrapper.java | 12 +++++++++ .../impl/amap/message/AMapMessageManager.java | 6 +++++ .../independent/MainIndependentActivity.java | 2 +- .../module/apps/AppsListChangedLiveData.java | 27 +++++++++++-------- .../com/mogo/module/apps/AppsPresenter.java | 6 +++++ .../applaunch/InternalFunctionLauncher.java | 1 + .../com/mogo/module/apps/model/AppsModel.java | 2 +- .../service/marker/MapMarkerManager.java | 5 +++- 10 files changed, 49 insertions(+), 15 deletions(-) diff --git a/config.gradle b/config.gradle index 8a952748cd..0cdac5de2e 100644 --- a/config.gradle +++ b/config.gradle @@ -160,7 +160,7 @@ targetSdkVersion : 22, gpssimulatornoop : "com.mogo.module:module-gps-simulator-noop:${MOGO_MODULE_GPS_SIMULATOR_NOOP_VERSION}", adasapi : "com.zhidao.autopilot.support:adas:1.0.1", - adasconfigapi : "com.zhidao.adasconfig:adasconfig:1.0.9", + adasconfigapi : "com.zhidao.adasconfig:adasconfig:1.1.4", // 个人中心的SDK personalsdk : "com.zhidaoauto.person.info:data:1.0.1", 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 832fd10301..24f557de14 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 @@ -185,6 +185,7 @@ public class AMapNaviViewWrapper implements IMogoMapView, aMap.setOnCameraChangeListener( this ); aMap.setOnMyLocationChangeListener( this ); } + AMapMessageManager.getInstance().clear(); AMapMessageManager.getInstance().registerAMapMessageListener( this ); } diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapViewWrapper.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapViewWrapper.java index 922690857b..f5cf1dfd7f 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapViewWrapper.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapViewWrapper.java @@ -70,6 +70,8 @@ public class AMapViewWrapper implements IMogoMapView, AMap.OnCameraChangeListener, AMap.OnMyLocationChangeListener { + private static boolean sIsCreated = false; + private static final String TAG = "AMapViewWrapper"; private final MapView mMapView; @@ -200,6 +202,13 @@ public class AMapViewWrapper implements IMogoMapView, @Override public void onCreate( Bundle bundle ) { + if ( sIsCreated ) { + initMapView(); + initListeners(); + initMyLocation(); + return; + } + sIsCreated = true; if ( mMapView != null ) { mMapView.onCreate( bundle ); Logger.d( TAG, "map onCreate" ); @@ -227,6 +236,7 @@ public class AMapViewWrapper implements IMogoMapView, @Override public void onDestroy() { + sIsCreated = false; if ( mMapView != null ) { mMapView.onDestroy(); Logger.d( TAG, "map onDestroy" ); @@ -362,6 +372,8 @@ public class AMapViewWrapper implements IMogoMapView, mMapView.getMap().moveCamera( CameraUpdateFactory.changeTilt( 60 ) ); break; case NorthUP_2D: + mMapView.getMap().moveCamera( CameraUpdateFactory.changeTilt( 0 ) ); + break; case CarUp_2D: mMapView.getMap().moveCamera( CameraUpdateFactory.changeTilt( 0 ) ); break; diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/message/AMapMessageManager.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/message/AMapMessageManager.java index dc3782aadc..caccdd97b0 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/message/AMapMessageManager.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/message/AMapMessageManager.java @@ -47,6 +47,12 @@ public class AMapMessageManager { } } + public synchronized void clear(){ + if ( mListeners != null ) { + mListeners.clear(); + } + } + public synchronized void unregisterAMapMessageListener( AMapMessageListener listener ) { mListeners.remove( listener ); } diff --git a/main-extensions/mogo-module-main-independent/src/main/java/com/zhidao/mogo/module/main/independent/MainIndependentActivity.java b/main-extensions/mogo-module-main-independent/src/main/java/com/zhidao/mogo/module/main/independent/MainIndependentActivity.java index 5e8642fa01..6cb5363e2d 100644 --- a/main-extensions/mogo-module-main-independent/src/main/java/com/zhidao/mogo/module/main/independent/MainIndependentActivity.java +++ b/main-extensions/mogo-module-main-independent/src/main/java/com/zhidao/mogo/module/main/independent/MainIndependentActivity.java @@ -65,7 +65,7 @@ public class MainIndependentActivity extends MainActivity { @Override protected void onPause() { super.onPause(); - mServiceApis.getAdasControllerApi().setUseAlgorithm( false ); + mServiceApis.getAdasControllerApi().setUseAlgorithm( true ); } @Override diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsListChangedLiveData.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsListChangedLiveData.java index 46ff541f23..225c7167c9 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsListChangedLiveData.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsListChangedLiveData.java @@ -14,21 +14,24 @@ public class AppsListChangedLiveData extends MutableLiveData { private Observer mObserver; - private AppsListChangedLiveData(){ - // private constructor - } + private static volatile AppsListChangedLiveData sInstance; - private static final class InstanceHolder{ - private static final AppsListChangedLiveData INSTANCE = new AppsListChangedLiveData(); - } + private AppsListChangedLiveData(){} public static AppsListChangedLiveData getInstance(){ - return InstanceHolder.INSTANCE; + if( sInstance == null ){ + synchronized( AppsListChangedLiveData.class ) { + if( sInstance == null ){ + sInstance = new AppsListChangedLiveData(); + } + } + } + return sInstance; } - private Object readResolve(){ - // 阻止反序列化,必须实现 Serializable 接口 - return InstanceHolder.INSTANCE; + private Object readResolve() { + // 阻止反序列化,必须实现 Serializable 接口 + return sInstance; } @Override @@ -37,7 +40,9 @@ public class AppsListChangedLiveData extends MutableLiveData { mObserver = observer; } - public void release(){ + public synchronized void release(){ removeObserver( mObserver ); + mObserver = null; + sInstance = null; } } 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 4c16eafb4b..85628ad78b 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 @@ -216,6 +216,12 @@ public class AppsPresenter extends Presenter< AppsView > { AppsListChangedLiveData.getInstance().release(); mView = null; mLauncher.destroy(); +` mAnalytics = null; + mCardManager = null; + if ( mLauncher != null ) { + mLauncher.destroy(); + } + mLauncher = null; } public void exit() { 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 index 75af6c4455..8a948631fb 100644 --- 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 @@ -103,6 +103,7 @@ public class InternalFunctionLauncher extends BaseAppLauncher { public void destroy() { if ( getNext() != null ) { getNext().destroy(); + setNext( null ); } } } diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppsModel.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppsModel.java index 4463a9e69c..7bf13bcf63 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppsModel.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppsModel.java @@ -36,7 +36,7 @@ public class AppsModel { private Map< Integer, List< AppInfo > > mPagedApps = new HashMap<>(); private AppsModel( Context context ) { - mContext = context; + mContext = context.getApplicationContext(); } public static AppsModel getInstance( Context context ) { 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 b291ee015f..26e612592d 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 @@ -703,7 +703,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener, } ); } - public void onSyncMarkerResponse(MarkerResponse response){ + public void onSyncMarkerResponse( MarkerResponse response ) { if ( ignoreDrawRequest() ) { return; } @@ -862,6 +862,9 @@ public class MapMarkerManager implements IMogoMarkerClickListener, // 平滑移动 private void startSmooth( IMogoMarker iMogoMarker, MarkerOnlineCar markerOnlineCar, MarkerLocation markerLocation ) { + if ( iMogoMarker == null ) { + return; + } List< MarkerCarPois > poiList = markerOnlineCar.getPois(); if ( filterErrorPoint( poiList ) ) { return; From ef677ae4b84e671025a7c05ca547bb80fb98239f Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Wed, 9 Sep 2020 10:08:21 +0800 Subject: [PATCH 3/8] opt --- .../src/main/java/com/mogo/module/apps/AppsPresenter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 85628ad78b..ed8d6d9ca8 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 @@ -216,7 +216,7 @@ public class AppsPresenter extends Presenter< AppsView > { AppsListChangedLiveData.getInstance().release(); mView = null; mLauncher.destroy(); -` mAnalytics = null; + mAnalytics = null; mCardManager = null; if ( mLauncher != null ) { mLauncher.destroy(); From e3eed35123052a0b8b6857e9b84d5302dacd4376 Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Wed, 9 Sep 2020 14:43:03 +0800 Subject: [PATCH 4/8] =?UTF-8?q?=E6=96=B0=E5=A2=9Ebugly?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/gradle.xml | 4 ++ app/build.gradle | 1 + app/functions/crashreport.gradle | 13 ++++ app/functions/skin.gradle | 40 +++++------ .../com/mogo/launcher/MogoApplication.java | 6 ++ config.gradle | 6 +- gradle.properties | 4 ++ .../mogo/map/impl/amap/AMapViewWrapper.java | 36 +++++----- .../module/main/cards/MogoModulesManager.java | 2 +- settings.gradle | 4 ++ test/crashreport-bugly/.gitignore | 1 + test/crashreport-bugly/build.gradle | 58 ++++++++++++++++ test/crashreport-bugly/consumer-rules.pro | 0 test/crashreport-bugly/gradle.properties | 3 + test/crashreport-bugly/proguard-rules.pro | 21 ++++++ .../src/main/AndroidManifest.xml | 5 ++ .../bugly/BuglyCrashReportProvider.java | 67 +++++++++++++++++++ test/crashreport-noop/.gitignore | 1 + test/crashreport-noop/build.gradle | 58 ++++++++++++++++ test/crashreport-noop/consumer-rules.pro | 0 test/crashreport-noop/gradle.properties | 3 + test/crashreport-noop/proguard-rules.pro | 21 ++++++ .../src/main/AndroidManifest.xml | 5 ++ .../noop/NoopCrashReportProvider.java | 26 +++++++ test/crashreport/.gitignore | 1 + test/crashreport/build.gradle | 46 +++++++++++++ test/crashreport/consumer-rules.pro | 0 test/crashreport/gradle.properties | 3 + test/crashreport/proguard-rules.pro | 21 ++++++ test/crashreport/src/main/AndroidManifest.xml | 5 ++ .../crashreport/CrashReportConstants.java | 15 +++++ .../crashreport/ITestCrashReportProvider.java | 14 ++++ 32 files changed, 451 insertions(+), 39 deletions(-) create mode 100644 app/functions/crashreport.gradle create mode 100644 test/crashreport-bugly/.gitignore create mode 100644 test/crashreport-bugly/build.gradle create mode 100644 test/crashreport-bugly/consumer-rules.pro create mode 100644 test/crashreport-bugly/gradle.properties create mode 100644 test/crashreport-bugly/proguard-rules.pro create mode 100644 test/crashreport-bugly/src/main/AndroidManifest.xml create mode 100644 test/crashreport-bugly/src/main/java/com/mogo/test/crashreport/bugly/BuglyCrashReportProvider.java create mode 100644 test/crashreport-noop/.gitignore create mode 100644 test/crashreport-noop/build.gradle create mode 100644 test/crashreport-noop/consumer-rules.pro create mode 100644 test/crashreport-noop/gradle.properties create mode 100644 test/crashreport-noop/proguard-rules.pro create mode 100644 test/crashreport-noop/src/main/AndroidManifest.xml create mode 100644 test/crashreport-noop/src/main/java/com/mogo/test/crashreport/noop/NoopCrashReportProvider.java create mode 100644 test/crashreport/.gitignore create mode 100644 test/crashreport/build.gradle create mode 100644 test/crashreport/consumer-rules.pro create mode 100644 test/crashreport/gradle.properties create mode 100644 test/crashreport/proguard-rules.pro create mode 100644 test/crashreport/src/main/AndroidManifest.xml create mode 100644 test/crashreport/src/main/java/com/mogo/test/crashreport/CrashReportConstants.java create mode 100644 test/crashreport/src/main/java/com/mogo/test/crashreport/ITestCrashReportProvider.java diff --git a/.idea/gradle.xml b/.idea/gradle.xml index cb58b5cb2b..116359f324 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -67,6 +67,10 @@