diff --git a/.idea/misc.xml b/.idea/misc.xml index 21e99e2dc0..cd77a1f062 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -4,7 +4,7 @@ - + \ No newline at end of file diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/MogoBaseMapView.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/MogoBaseMapView.java index e51e933608..9137677d96 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/MogoBaseMapView.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/MogoBaseMapView.java @@ -86,6 +86,7 @@ public abstract class MogoBaseMapView extends FrameLayout implements ILifeCycle if ( mMapView != null ) { mMapView.onDestroy(); } + MogoMap.getInstance().clear(); } @Override diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/MogoMap.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/MogoMap.java index b2c5986293..3aae71ad09 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/MogoMap.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/MogoMap.java @@ -46,4 +46,9 @@ public class MogoMap { public IMogoMap getMogoMap() { return mMap; } + + public void clear(){ + mContext = null; + mMap = null; + } } 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 c9de4dc5cb..e6579f2e41 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 @@ -147,6 +147,8 @@ public class EntranceFragment extends MvpFragment 200) { - showSlideMapVoiceGuide(); + if (isShowGuide && isGreaterThanOneDay()) { + if (motionEvent.getX() > 200) { + showSlideMapVoiceGuide(); + } } + break; case MotionEvent.ACTION_MOVE: @@ -582,6 +606,7 @@ public class EntranceFragment extends MvpFragment impleme @Override protected void onDestroy() { super.onDestroy(); + mMogoMapService.getHostListenerRegister().unregisterMarkerClickListener(); mMogoStatusManager.setMainPageLaunchedStatus( TAG, false ); mMogoMapService = null; mMogoMapUIController = null; @@ -359,5 +360,8 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme mServiceApis.getOnlineCarPanelApi().clear(); ContextHolderUtil.releaseContext(); MogoModulesManager.getInstance().onDestroy(); + SchemeIntent.getInstance().clear(); + FloatingViewHandler.clear(); + mServiceApis.getShareManager().releaseContext(); } } 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 10f1d86738..4280feba01 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 @@ -55,16 +55,23 @@ public class SchemeIntent implements IMogoStatusChangedListener { } } - private SchemeIntent() { - // private constructor + private static volatile SchemeIntent sInstance; + + private SchemeIntent(){} + + public static SchemeIntent getInstance(){ + if( sInstance == null ){ + synchronized( SchemeIntent.class ) { + if( sInstance == null ){ + sInstance = new SchemeIntent(); + } + } + } + return sInstance; } - private static final class InstanceHolder { - private static final SchemeIntent INSTANCE = new SchemeIntent(); - } - - public static SchemeIntent getInstance() { - return InstanceHolder.INSTANCE; + public synchronized void release(){ + sInstance = null; } public void init( Context context, IMogoServiceApis apis ) { @@ -73,9 +80,11 @@ public class SchemeIntent implements IMogoStatusChangedListener { mApis.getStatusManagerApi().registerStatusChangedListener( TAG, StatusDescriptor.MAIN_PAGE_RESUME, this ); } - private Object readResolve() { - // 阻止反序列化,必须实现 Serializable 接口 - return InstanceHolder.INSTANCE; + public void clear(){ + mApis.getStatusManagerApi().unregisterStatusChangedListener( TAG, StatusDescriptor.MAIN_PAGE_RESUME, this ); + mContext = null; + mApis = null; + } public void handle( Intent intent ) { diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/windowview/FloatingViewHandler.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/windowview/FloatingViewHandler.java index 5485f4778d..a1c8afd276 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/windowview/FloatingViewHandler.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/windowview/FloatingViewHandler.java @@ -41,6 +41,10 @@ public class FloatingViewHandler { sFloatingLayout = frameLayout; } + public static void clear(){ + sFloatingLayout = null; + } + /** * 添加任意view到布局,不考虑优先级 * 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 6339b4f7f8..89a0c1fb74 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 @@ -338,6 +338,13 @@ public class MockIntentHandler implements IntentHandler { case 30: MarkerServiceHandler.getMapService().getMapUIController().forceRender(); break; + case 31: + Intent intent3 = new Intent(); + intent3.setAction( "AUTONAVI_STANDARD_BROADCAST_RECV" ); + intent3.putExtra( "KEY_TYPE", 12404 ); + intent3.putExtra( "EXTRA_REQUEST_AUTO_STATE", 0 ); + context.sendBroadcast( intent3 ); + break; } } diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/launchercard/LauncherCardRefresher.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/launchercard/LauncherCardRefresher.java index 786ef46225..42614860ee 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/launchercard/LauncherCardRefresher.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/launchercard/LauncherCardRefresher.java @@ -67,7 +67,7 @@ class LauncherCardRefresher { public static final long ONE_MINUTE = 60 * 1000L; public static final long ONE_DAY = 24 * 60 * ONE_MINUTE; private String mLaunchTTSText; - private long mDefaultTTSPlayInterval = 2 * ONE_MINUTE; + private long mDefaultTTSPlayInterval = 60 * ONE_MINUTE; private LauncherCardAdvertisementData.LauncherCardAdvertisement mDefaultLauncherCardConfig; private List< LauncherCardAdvertisementData.LauncherCardAdvertisement > mAdvertisements; @@ -156,7 +156,7 @@ class LauncherCardRefresher { private ZhidaoRefreshModel mZhidaoRefreshModel; private LauncherCardRefreshStrategy mExplorerWayOrOnlineCarDataStrategy = new LauncherCardRefreshStrategy( - 1 * ONE_MINUTE, null, MSG_EXPLORER_WAY_OR_ONLINE_CAR_DATA + 40 * ONE_MINUTE, null, MSG_EXPLORER_WAY_OR_ONLINE_CAR_DATA ); private LauncherCardRefreshStrategy mInduceStrategy = new LauncherCardRefreshStrategy( 3 * ONE_MINUTE, mExplorerWayOrOnlineCarDataStrategy, MSG_INDUCE 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 5b524654c0..a8f411f093 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 @@ -131,6 +131,11 @@ public class ShareControl implements IMogoShareManager, IMogoIntentListener, mContext = context; } + @Override + public void releaseContext() { + mContext = mContext.getApplicationContext(); + } + private void realShowDialog() { if (mShareDialog == null) { Logger.d(TAG, "realShowDialog context : " + mContext); diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/SeekHelpManager.kt b/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/SeekHelpManager.kt index 83282b97f4..e55988e46c 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/SeekHelpManager.kt +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/SeekHelpManager.kt @@ -82,7 +82,7 @@ object SeekHelpManager { if(!isSeeking) { isSeeking = true if (this.context == null) { - this.context = context + this.context = context.applicationContext } aiAssist = AIAssist.getInstance(context) diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/fragment/V2XEventPanelFragment.kt b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/fragment/V2XEventPanelFragment.kt index fd51aa6146..c0deed1c08 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/fragment/V2XEventPanelFragment.kt +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/fragment/V2XEventPanelFragment.kt @@ -53,9 +53,16 @@ class V2XEventPanelFragment : MvpFragment diff --git a/modules/mogo-module-v2x/src/main/res/layout/window_fault_help.xml b/modules/mogo-module-v2x/src/main/res/layout/window_fault_help.xml index e96d3e9056..04ffc5cd62 100644 --- a/modules/mogo-module-v2x/src/main/res/layout/window_fault_help.xml +++ b/modules/mogo-module-v2x/src/main/res/layout/window_fault_help.xml @@ -7,6 +7,7 @@ android:layout_height="@dimen/module_v2x_fatigue_driving_window_height_ground" android:orientation="vertical" android:overScrollMode="never" + android:padding="@dimen/module_v2x_widow_top_gaps" tools:itemCount="1" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" tools:listitem="@layout/item_v2x_fault_help" /> diff --git a/modules/mogo-module-v2x/src/main/res/layout/window_road_event_detail.xml b/modules/mogo-module-v2x/src/main/res/layout/window_road_event_detail.xml index 380e53446b..cb599e80c8 100644 --- a/modules/mogo-module-v2x/src/main/res/layout/window_road_event_detail.xml +++ b/modules/mogo-module-v2x/src/main/res/layout/window_road_event_detail.xml @@ -12,6 +12,7 @@ android:minHeight="@dimen/module_v2x_event_window_height" android:orientation="horizontal" android:overScrollMode="never" + android:padding="@dimen/module_v2x_widow_top_gaps" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" diff --git a/modules/mogo-module-v2x/src/main/res/values-ldpi/dimens.xml b/modules/mogo-module-v2x/src/main/res/values-ldpi/dimens.xml index c99bf31c73..e0a9f57de8 100644 --- a/modules/mogo-module-v2x/src/main/res/values-ldpi/dimens.xml +++ b/modules/mogo-module-v2x/src/main/res/values-ldpi/dimens.xml @@ -79,4 +79,5 @@ 16px 20px + 6px diff --git a/modules/mogo-module-v2x/src/main/res/values-mdpi/dimens.xml b/modules/mogo-module-v2x/src/main/res/values-mdpi/dimens.xml index c99bf31c73..a3d322e698 100644 --- a/modules/mogo-module-v2x/src/main/res/values-mdpi/dimens.xml +++ b/modules/mogo-module-v2x/src/main/res/values-mdpi/dimens.xml @@ -79,4 +79,5 @@ 16px 20px + 3px diff --git a/modules/mogo-module-v2x/src/main/res/values-xhdpi/dimens.xml b/modules/mogo-module-v2x/src/main/res/values-xhdpi/dimens.xml index 53a5cae3b8..16f90b3823 100644 --- a/modules/mogo-module-v2x/src/main/res/values-xhdpi/dimens.xml +++ b/modules/mogo-module-v2x/src/main/res/values-xhdpi/dimens.xml @@ -77,6 +77,6 @@ 158px 26px 25px - + 2px diff --git a/modules/mogo-module-widgets/src/main/java/com/mogo/module/widgets/AutoNaviIntentHandler.java b/modules/mogo-module-widgets/src/main/java/com/mogo/module/widgets/AutoNaviIntentHandler.java index 120e4e90ed..d0c1562a48 100644 --- a/modules/mogo-module-widgets/src/main/java/com/mogo/module/widgets/AutoNaviIntentHandler.java +++ b/modules/mogo-module-widgets/src/main/java/com/mogo/module/widgets/AutoNaviIntentHandler.java @@ -23,6 +23,7 @@ import com.mogo.utils.CommonUtils; import com.mogo.utils.LaunchUtils; import com.mogo.utils.ResourcesHelper; import com.mogo.utils.TipToast; +import com.mogo.utils.UiThreadHandler; import com.mogo.utils.logger.Logger; import java.util.HashMap; @@ -40,6 +41,9 @@ class AutoNaviIntentHandler implements IMogoVoiceCmdCallBack { private static final String TAG = "AutoNaviIntentHandler"; public static final String OPEN = "OPEN_APP"; + // 显示浮窗时,同步状态时间间隔 + public static final long SYNC_INTERVAL = 60_000L; + private static volatile AutoNaviIntentHandler sInstance; private AutoNaviIntentHandler() { @@ -70,27 +74,33 @@ class AutoNaviIntentHandler implements IMogoVoiceCmdCallBack { sInstance = null; } + private Runnable mAutoNaviSyncRunnable = () -> { + if ( mWindowManagerView != null && mWindowManagerView.isShowing() ) { + syncAutoNaviForgroundStatus( AbsMogoApplication.getApp() ); + } + }; + public void handle( Context context, Intent intent ) { int keyType = intent.getIntExtra( "KEY_TYPE", 0 ); + Logger.d( TAG, "KEY_TYPE = " + keyType ); switch ( keyType ) { case 10021: closeEntrance(); break; case 10019: int extraState = intent.getIntExtra( "EXTRA_STATE", -1 ); + Logger.d( TAG, "EXTRA_STATE = " + extraState ); switch ( extraState ) { - case 3: + case 3: // 前台 syncAutoNaviNavingStatus( context ); break; - case 4: + case 4: // 后台 + case 9: // 非导航 closeEntrance(); break; - case 8: + case 8: // 导航 showEntrance( context ); break; - case 9: - closeEntrance(); - break; } break; } @@ -106,6 +116,7 @@ class AutoNaviIntentHandler implements IMogoVoiceCmdCallBack { } private void showEntrance( Context context ) { + if ( mWindowManagerView == null ) { mWindowManagerView = new WindowManagerView.Builder( AbsMogoApplication.getApp() ) .contentView( R.layout.module_widgets_app_entrance ) @@ -125,9 +136,16 @@ class AutoNaviIntentHandler implements IMogoVoiceCmdCallBack { if ( mWindowManagerView.isShowing() ) { return; } + if ( MogoApisHandler.getInstance() + .getApis() + .getStatusManagerApi() + .isMainPageOnResume() ) { + return; + } mWindowManagerView.show(); MogoWidgetManger.getInstance().getApis().getAnalyticsApi().track( "NAVI_button_show", null ); AIAssist.getInstance( context ).registerUnWakeupCommand( OPEN, new String[]{"切换到辅助驾驶模式"}, this ); + UiThreadHandler.postDelayed( mAutoNaviSyncRunnable, SYNC_INTERVAL ); } catch ( Exception e ) { Logger.e( TAG, e, "error." ); } @@ -221,6 +239,7 @@ class AutoNaviIntentHandler implements IMogoVoiceCmdCallBack { } public void closeEntrance() { + UiThreadHandler.removeCallbacks( mAutoNaviSyncRunnable ); if ( mWindowManagerView == null ) { return; } @@ -233,6 +252,7 @@ class AutoNaviIntentHandler implements IMogoVoiceCmdCallBack { } public void syncAutoNaviForgroundStatus( Context context ) { + Logger.d( TAG, "查询高德前后台状态" ); Intent intent = new Intent(); intent.setAction( "AUTONAVI_STANDARD_BROADCAST_RECV" ); intent.putExtra( "KEY_TYPE", 12404 ); @@ -241,6 +261,7 @@ class AutoNaviIntentHandler implements IMogoVoiceCmdCallBack { } public void syncAutoNaviNavingStatus( Context context ) { + Logger.d( TAG, "查询高德导航状态" ); Intent intent = new Intent(); intent.setAction( "AUTONAVI_STANDARD_BROADCAST_RECV" ); intent.putExtra( "KEY_TYPE", 12404 ); diff --git a/modules/mogo-module-widgets/src/main/java/com/mogo/module/widgets/MogoWidgetManger.java b/modules/mogo-module-widgets/src/main/java/com/mogo/module/widgets/MogoWidgetManger.java index 0032be1ef0..8d1e7d41bc 100644 --- a/modules/mogo-module-widgets/src/main/java/com/mogo/module/widgets/MogoWidgetManger.java +++ b/modules/mogo-module-widgets/src/main/java/com/mogo/module/widgets/MogoWidgetManger.java @@ -10,6 +10,7 @@ import com.mogo.service.IMogoServiceApis; import com.mogo.service.intent.IMogoIntentListener; import com.mogo.service.statusmanager.IMogoStatusChangedListener; import com.mogo.service.statusmanager.StatusDescriptor; +import com.mogo.utils.UiThreadHandler; public /** @@ -65,7 +66,9 @@ class MogoWidgetManger implements IMogoNaviListener2, IMogoIntentListener, IMogo initMapStatusListener(); initStatusListener(); initIntentListener(); - AutoNaviIntentHandler.getInstance().syncAutoNaviForgroundStatus( mContext ); + UiThreadHandler.postDelayed( ()->{ + AutoNaviIntentHandler.getInstance().syncAutoNaviForgroundStatus( mContext ); + }, 1_000L ); } private void initMapStatusListener() { diff --git a/modules/mogo-module-widgets/src/main/java/com/mogo/module/widgets/MogoWidgetsProvider.java b/modules/mogo-module-widgets/src/main/java/com/mogo/module/widgets/MogoWidgetsProvider.java index 6cc91544a3..a4985601b7 100644 --- a/modules/mogo-module-widgets/src/main/java/com/mogo/module/widgets/MogoWidgetsProvider.java +++ b/modules/mogo-module-widgets/src/main/java/com/mogo/module/widgets/MogoWidgetsProvider.java @@ -94,6 +94,6 @@ class MogoWidgetsProvider implements IMogoModuleProvider { Logger.d( TAG, "init." ); UiThreadHandler.postDelayed( () -> { MogoWidgetManger.getInstance().init( context ); - }, 5500 ); + }, 6_000L ); } } 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 17a29d3455..ca0285449c 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 @@ -25,4 +25,6 @@ public interface IMogoShareManager extends IProvider { * @param context 待重置的上下文 */ void resetContext(Context context); + + void releaseContext(); } diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/fragmentmanager/FragmentStack.java b/services/mogo-service/src/main/java/com/mogo/service/impl/fragmentmanager/FragmentStack.java index 083ea0ddd8..41eeb123b8 100644 --- a/services/mogo-service/src/main/java/com/mogo/service/impl/fragmentmanager/FragmentStack.java +++ b/services/mogo-service/src/main/java/com/mogo/service/impl/fragmentmanager/FragmentStack.java @@ -30,7 +30,6 @@ public class FragmentStack { private FragmentManager mFragmentManager; //private FragmentTransaction mFragmentTransaction; private int mContainerId; - private Activity mActivity; private FragmentDescriptor mCurrentFragment; private FragmentStackTransactionListener mFragmentStackTransactionListener; @@ -56,7 +55,6 @@ public class FragmentStack { } public void init( AppCompatActivity activity, int containerId ) { - mActivity = activity; mFragmentManager = activity.getSupportFragmentManager(); mContainerId = containerId; }