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 4a3fc0c2ff..88bc8aad06 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,102 +95,110 @@ 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
@@ -204,73 +221,89 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
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);
}
@@ -278,71 +311,71 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
@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;
@@ -350,6 +383,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);
+ }
+}