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 10755e1ff9..0b687b65a1 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 @@ -1,6 +1,8 @@ package com.mogo.module.main; +import android.content.Intent; import android.os.Bundle; +import android.text.TextUtils; import android.util.Log; import android.view.View; import android.widget.FrameLayout; @@ -10,6 +12,7 @@ import androidx.annotation.Nullable; import androidx.viewpager.widget.ViewPager; import com.alibaba.android.arouter.launcher.ARouter; +import com.google.gson.JsonObject; import com.mogo.commons.mvp.MvpActivity; import com.mogo.commons.voice.AIAssist; import com.mogo.map.location.IMogoLocationClient; @@ -27,16 +30,21 @@ 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.cards.VerticalStackTransformer; +import com.mogo.module.main.constants.VoiceConstants; import com.mogo.module.main.windowview.WindowViewHandler; import com.mogo.module.service.ServiceConst; import com.mogo.service.MogoServicePaths; import com.mogo.service.cardmanager.IMogoCardManager; import com.mogo.service.fragmentmanager.IMogoFragmentManager; +import com.mogo.service.intent.IMogoIntentListener; +import com.mogo.service.intent.IMogoIntentManager; import com.mogo.service.map.IMogoMapService; import com.mogo.service.module.IMogoModuleProvider; import com.mogo.utils.logger.Logger; import java.util.List; +import org.json.JSONException; +import org.json.JSONObject; /** * @author congtaowang @@ -44,9 +52,9 @@ import java.util.List; *

* 描述:加载各个模块 */ -public class MainActivity extends MvpActivity< MainView, MainPresenter > implements MainView, - IMogoLocationListener, - IMogoMarkerClickListener { +public class MainActivity extends MvpActivity implements MainView, + IMogoLocationListener, + IMogoMarkerClickListener, IMogoIntentListener { private static final String TAG = "MainActivity"; @@ -78,6 +86,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme private int mCurrentPosition = 0; private ViewPager.OnPageChangeListener mOnPageChangeListener; + private IMogoIntentManager mMogoIntentManager; @Override protected int getLayoutId() { @@ -86,259 +95,285 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme @Override protected void initViews() { - mCardsContainer = findViewById( R.id.module_main_id_cards_container ); - mCardsContainer.setOrientation( OrientedViewPager.Orientation.VERTICAL ); - mTransformer = new VerticalStackTransformer( this ); - mCardsContainer.setOnPageChangeListener( mOnPageChangeListener = new OnPageChangeListenerAdapter() { - private boolean mIsLast = true; - private boolean mCardFlipStatus = false; + mCardsContainer = findViewById(R.id.module_main_id_cards_container); + mCardsContainer.setOrientation(OrientedViewPager.Orientation.VERTICAL); + mTransformer = new VerticalStackTransformer(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 ); - mPresenter.postTrackLastCardShowEvent( provider ); - mCurrentPosition = position; - provider = mCardModulesAdapter.getProvider( mCurrentPosition ); - mMogoModuleHandler.setModuleEnable( provider.getModuleName() ); - mMogoCardManager.invoke( position, mMogoModuleHandler.getCurrentModuleName() ); - } 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); + @Override + public void onPageSelected(int position) { + final long start = System.currentTimeMillis(); + try { + IMogoModuleProvider provider = + mCardModulesAdapter.getProvider(mCurrentPosition); + mPresenter.postTrackLastCardShowEvent(provider); + mCurrentPosition = position; + provider = mCardModulesAdapter.getProvider(mCurrentPosition); + mMogoModuleHandler.setModuleEnable(provider.getModuleName()); + mMogoCardManager.invoke(position, + mMogoModuleHandler.getCurrentModuleName()); + } catch (Exception e) { + e.printStackTrace(); } - } else if ( state == ViewPager.SCROLL_STATE_IDLE ) { - mCardFlipStatus = false; - mTransformer.resetOffsetScroll(); + Logger.i(TAG, + "onPageSelected cost " + (System.currentTimeMillis() - start) + "ms"); } - 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 ); + @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(); } - } else { - mIsLast = true; + + 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"); } - 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); - } - } ); + @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 ); - 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 ); - mCardCoverUpBottomLayout = findViewById( R.id.module_main_id_card_cover_up_bottom ); + 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); + 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); + mCardCoverUpBottomLayout = findViewById(R.id.module_main_id_card_cover_up_bottom); - WindowViewHandler.init( mFloatingLayout ); + WindowViewHandler.init(mFloatingLayout); } // 隐藏布局 private void hideLayout() { - mHeader.setVisibility( View.GONE ); - mCards.setVisibility( View.GONE ); - mApps.setVisibility( View.GONE ); - mEntrance.setVisibility( View.GONE ); - mFloatingLayout.setVisibility( View.GONE ); - mLeftShadowFrame.setVisibility( View.GONE ); - mCardCoverUpBottomLayout.setVisibility( View.GONE ); + mHeader.setVisibility(View.GONE); + mCards.setVisibility(View.GONE); + mApps.setVisibility(View.GONE); + mEntrance.setVisibility(View.GONE); + mFloatingLayout.setVisibility(View.GONE); + mLeftShadowFrame.setVisibility(View.GONE); + mCardCoverUpBottomLayout.setVisibility(View.GONE); } // 显示布局 private void showLayout() { - mHeader.setVisibility( View.VISIBLE ); - mCards.setVisibility( View.VISIBLE ); - mApps.setVisibility( View.VISIBLE ); - mEntrance.setVisibility( View.VISIBLE ); - mFloatingLayout.setVisibility( View.VISIBLE ); - mLeftShadowFrame.setVisibility( View.VISIBLE ); - mCardCoverUpBottomLayout.setVisibility( View.VISIBLE ); + mHeader.setVisibility(View.VISIBLE); + mCards.setVisibility(View.VISIBLE); + mApps.setVisibility(View.VISIBLE); + mEntrance.setVisibility(View.VISIBLE); + mFloatingLayout.setVisibility(View.VISIBLE); + mLeftShadowFrame.setVisibility(View.VISIBLE); + mCardCoverUpBottomLayout.setVisibility(View.VISIBLE); } @Override - protected void onCreate( @Nullable Bundle savedInstanceState ) { + protected void onCreate(@Nullable Bundle savedInstanceState) { final long start = System.currentTimeMillis(); - super.onCreate( savedInstanceState ); + super.onCreate(savedInstanceState); - MogoModulePaths.addModule( new MogoModule( ServiceConst.PATH_REFRESH_STRATEGY, ServiceConst.PATH_REFRESH_STRATEGY ) ); + MogoModulePaths.addModule( + new MogoModule(ServiceConst.PATH_REFRESH_STRATEGY, ServiceConst.PATH_REFRESH_STRATEGY)); - mMogoModuleHandler = new MogoModulesManager( this ); - mMogoMapService = ( IMogoMapService ) ARouter.getInstance().build( MogoServicePaths.PATH_SERVICES_MAP ).navigation(); - if ( mMogoMapService != null ) { - mMogoMapService.getHostListenerRegister().registerHostMapListener( mMogoModuleHandler ); - mMogoMapService.getHostListenerRegister().registerHostNaviListener( mMogoModuleHandler ); - mMogoMapService.getHostListenerRegister().registerMarkerClickListener( this ); + mMogoModuleHandler = new MogoModulesManager(this); + mMogoMapService = (IMogoMapService) ARouter.getInstance() + .build(MogoServicePaths.PATH_SERVICES_MAP) + .navigation(); + if (mMogoMapService != null) { + mMogoMapService.getHostListenerRegister().registerHostMapListener(mMogoModuleHandler); + mMogoMapService.getHostListenerRegister().registerHostNaviListener(mMogoModuleHandler); + mMogoMapService.getHostListenerRegister().registerMarkerClickListener(this); } - mMogoModuleHandler.setMapLoadedCallback( () -> { - Logger.d( TAG, "map loaded." + Thread.currentThread().getName() ); + mMogoModuleHandler.setMapLoadedCallback(() -> { + Logger.d(TAG, "map loaded." + Thread.currentThread().getName()); // 加载地图,触发地图加载完毕回调,在初始化其他卡片模块,保证卡片模块可以正确获取地图相关服务。 loadContainerModules(); mMogoModuleHandler.loadModules(); mPresenter.delayOperations(); // 显示左边遮罩 - mLeftShadowFrame.setVisibility( View.VISIBLE ); - mTopShadowFrame.setVisibility( View.VISIBLE ); + mLeftShadowFrame.setVisibility(View.VISIBLE); + mTopShadowFrame.setVisibility(View.VISIBLE); // 右移地图中心点 mMogoMapUIController = mMogoMapService.getMapUIController(); - mMogoMapUIController.setPointToCenter( 0.66145, 0.590688 ); + mMogoMapUIController.setPointToCenter(0.66145, 0.590688); // 开启定位 startLocation(); - } ); - mMogoModuleHandler.loadMapModule( R.id.module_main_id_map_fragment_container ); + }); + mMogoModuleHandler.loadMapModule(R.id.module_main_id_map_fragment_container); - mMogoCardManager = ( IMogoCardManager ) ARouter.getInstance().build( MogoServicePaths.PATH_CARD_MANAGER ).navigation( this ); + mMogoCardManager = (IMogoCardManager) ARouter.getInstance() + .build(MogoServicePaths.PATH_CARD_MANAGER) + .navigation(this); - mMogoFragmentManager = ( IMogoFragmentManager ) ARouter.getInstance().build( MogoServicePaths.PATH_FRAGMENT_MANAGER ).navigation( this ); - mMogoFragmentManager.init( this, R.id.module_main_id_search_fragment ); - mMogoFragmentManager.registerMainFragmentStackTransactionListener( ( size ) -> { - if ( size == 0 ) { + mMogoFragmentManager = (IMogoFragmentManager) ARouter.getInstance() + .build(MogoServicePaths.PATH_FRAGMENT_MANAGER) + .navigation(this); + mMogoFragmentManager.init(this, R.id.module_main_id_search_fragment); + mMogoFragmentManager.registerMainFragmentStackTransactionListener((size) -> { + if (size == 0) { showLayout(); - } else if ( size == 1 ) { + } else if (size == 1) { hideLayout(); } - } ); + }); + + mMogoIntentManager = (IMogoIntentManager) ARouter.getInstance() + .build(MogoServicePaths.PATH_INTENT_MANAGER) + .navigation(getContext()); + registerVoiceCmd(); Log.i("timer", "cost " + (System.currentTimeMillis() - start) + "ms"); } + private void registerVoiceCmd() { + + for (String cmd : VoiceConstants.sCmds) { + mMogoIntentManager.registerIntentListener(cmd, this); + } + } + private void startLocation() { - mLocationClient = mMogoMapService.getSingletonLocationClient( getApplicationContext() ); - mLocationClient.addLocationListener( this ); + mLocationClient = mMogoMapService.getSingletonLocationClient(getApplicationContext()); + mLocationClient.addLocationListener(this); mLocationClient.start(2_000L); } private void loadContainerModules() { - mMogoModuleHandler.loadAppsListModule( R.id.module_main_id_apps_fragment_container ); - mMogoModuleHandler.loadExtensionsModule( R.id.module_main_id_header_fragment_container ); - mMogoModuleHandler.loadEntrancesModule( R.id.module_main_id_entrance_fragment_container ); + mMogoModuleHandler.loadAppsListModule(R.id.module_main_id_apps_fragment_container); + mMogoModuleHandler.loadExtensionsModule(R.id.module_main_id_header_fragment_container); + mMogoModuleHandler.loadEntrancesModule(R.id.module_main_id_entrance_fragment_container); } @Override public void postPickFirstCardEvent() { - if ( mOnPageChangeListener != null ) { + if (mOnPageChangeListener != null) { // 默认触发第一个卡片 - mOnPageChangeListener.onPageSelected( 0 ); + mOnPageChangeListener.onPageSelected(0); } } @Override public void hideCoverUpLayout() { - mCoverUpLayout.setVisibility( View.GONE ); + mCoverUpLayout.setVisibility(View.GONE); } @Override public void loadCardModules() { - List< IMogoModuleProvider > providers = mMogoModuleHandler.loadCardsModule(); - mCardModulesAdapter = new CardModulesAdapter( this, providers ); - mCardsContainer.setOffscreenPageLimit( providers.size() ); - mCardsContainer.setPageTransformer( true, mTransformer ); - mCardsContainer.setAdapter( mCardModulesAdapter ); + List providers = mMogoModuleHandler.loadCardsModule(); + mCardModulesAdapter = new CardModulesAdapter(this, providers); + mCardsContainer.setOffscreenPageLimit(providers.size()); + mCardsContainer.setPageTransformer(true, mTransformer); + mCardsContainer.setAdapter(mCardModulesAdapter); mCardCoverUpBottomLayout.setVisibility(View.VISIBLE); } - @NonNull @Override protected MainPresenter createPresenter() { - return new MainPresenter( this ); + return new MainPresenter(this); } @Override - public void onLocationChanged( MogoLocation location ) { - if ( mMogoModuleHandler != null ) { - mMogoModuleHandler.onLocationChanged( location ); + public void onLocationChanged(MogoLocation location) { + if (mMogoModuleHandler != null) { + mMogoModuleHandler.onLocationChanged(location); } } @Override - public boolean onMarkerClicked( IMogoMarker marker ) { - switch2Card( marker.getOwner() ); - if ( mMogoModuleHandler != null ) { - mMogoModuleHandler.onMarkerClicked( marker ); + public boolean onMarkerClicked(IMogoMarker marker) { + switch2Card(marker.getOwner()); + if (mMogoModuleHandler != null) { + mMogoModuleHandler.onMarkerClicked(marker); } return false; } @Override - public void switch2Card( String cardType ) { - if ( mCardModulesAdapter != null ) { + public void switch2Card(String cardType) { + if (mCardModulesAdapter != null) { - int position = mCardModulesAdapter.getProviderPosition( cardType ); - if ( position != -1 ) { - int lastFactPosition = mCardModulesAdapter.getFactPosition( mCurrentPosition ); - mCardsContainer.setCurrentItem( mCurrentPosition + position - lastFactPosition, Math.abs( lastFactPosition - position ) == 1 ); + 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 ); + Logger.e(TAG, "Can't find type of %s's position", cardType); } } } @Override protected void onResume() { - MapBroadCastHelper.getInstance( this ).mapFrount(); + MapBroadCastHelper.getInstance(this).mapFrount(); super.onResume(); } @Override protected void onPause() { - MapBroadCastHelper.getInstance( this ).mapBackground(); + MapBroadCastHelper.getInstance(this).mapBackground(); super.onPause(); } @Override public void onBackPressed() { - if ( mMogoFragmentManager.getStackSize() == 0 ) { + if (mMogoFragmentManager.getStackSize() == 0) { return; } - if ( mMogoFragmentManager != null ) { + if (mMogoFragmentManager != null) { mMogoFragmentManager.pop(); } } - @Override protected void onDestroy() { super.onDestroy(); - if ( mLocationClient != null ) { - mLocationClient.removeLocationListener( this ); + if (mLocationClient != null) { + mLocationClient.removeLocationListener(this); mLocationClient.destroy(); } mLocationClient = null; - if ( mMogoModuleHandler != null ) { + if (mMogoModuleHandler != null) { mMogoModuleHandler.destroy(); } mMogoModuleHandler = null; @@ -346,6 +381,59 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme mMogoMapUIController = null; mMogoCardManager = null; mMogoFragmentManager = null; - AIAssist.getInstance( this ).release(); + AIAssist.getInstance(this).release(); + } + + @Override public void onIntentReceived(String intentStr, Intent intent) { + if (TextUtils.isEmpty(intentStr)) { + return; + } + int currentItem = mCardsContainer.getCurrentItem(); + int cardSize = mCardModulesAdapter.getCount(); + + switch (intentStr) { + case VoiceConstants.COMMAND_ZHIDAO_SWITCHCARD: + + String data = intent.getStringExtra("data"); + + try { + JSONObject jsonObject = new JSONObject(data); + + String card = jsonObject.getString("card"); + + if (TextUtils.equals("多媒体",card)) { + mCardsContainer.setCurrentItem(1); + + }else if (TextUtils.equals("探路",card)){ + mCardsContainer.setCurrentItem(3); + + + }else if (TextUtils.equals("在线车辆",card)){ + mCardsContainer.setCurrentItem(5); + + } + } catch (JSONException e) { + e.printStackTrace(); + } + + break; + + case VoiceConstants.COMMAND_ZHIDAO_SWITCHCARD_NEXT: + currentItem++; + mCardsContainer.setCurrentItem(currentItem / cardSize); + + break; + + case VoiceConstants.COMMAND_ZHIDAO_SWITCHCARD_PREVIOUS: + currentItem--; + if (currentItem < 0) { + currentItem += cardSize; + } + mCardsContainer.setCurrentItem(currentItem / cardSize); + + break; + default: + break; + } } } diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/constants/VoiceConstants.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/constants/VoiceConstants.java new file mode 100644 index 0000000000..d14b06381d --- /dev/null +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/constants/VoiceConstants.java @@ -0,0 +1,33 @@ +package com.mogo.module.main.constants; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author zyz + * 2020-03-02. + */ +public class VoiceConstants { + /** + * 切换上一张卡片 + */ + public static final String COMMAND_ZHIDAO_SWITCHCARD_PREVIOUS = "com.zhidao.desk.switchCard.previous"; + /** + * 切换下一张卡片 + */ + public static final String COMMAND_ZHIDAO_SWITCHCARD_NEXT = "com.zhidao.desk.switchCard.next"; + /** + * 查看多媒体卡片、探路卡片 + */ + public static final String COMMAND_ZHIDAO_SWITCHCARD = "com.zhidao.desk.switchCard"; + + + + public static ArrayList sCmds=new ArrayList<>(); + + static { + sCmds.add(COMMAND_ZHIDAO_SWITCHCARD_PREVIOUS); + sCmds.add(COMMAND_ZHIDAO_SWITCHCARD_NEXT); + sCmds.add(COMMAND_ZHIDAO_SWITCHCARD); + } +}