This commit is contained in:
wangcongtao
2020-03-10 10:18:30 +08:00
parent 237c351533
commit 53902601da
25 changed files with 823 additions and 466 deletions

View File

@@ -40,6 +40,7 @@ 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.service.statusmanager.IMogoStatusManager;
import com.mogo.utils.logger.Logger;
import org.json.JSONException;
@@ -65,6 +66,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
private MogoModulesHandler mMogoModuleHandler;
private IMogoCardManager mMogoCardManager;
private IMogoFragmentManager mMogoFragmentManager;
private IMogoStatusManager mMogoStatusManager;
private OrientedViewPager mCardsContainer;
private VerticalStackTransformer mTransformer;
@@ -100,73 +102,66 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
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.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 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 );
}
} else if ( state == ViewPager.SCROLL_STATE_IDLE ) {
mCardFlipStatus = false;
mTransformer.resetOffsetScroll();
}
@Override
public void onPageScrollStateChanged( int state ) {
final long start = System.currentTimeMillis();
super.onPageScrollStateChanged( state );
if ( state == ViewPager.SCROLL_STATE_DRAGGING ) {
if ( !mCardFlipStatus ) {
mCardFlipStatus = true;
final IMogoModuleProvider provider =
mCardModulesAdapter.getProvider( mCurrentPosition );
mPresenter.postTrackCardFlipEvent( provider );
}
} else if ( state == ViewPager.SCROLL_STATE_IDLE ) {
mCardFlipStatus = false;
mTransformer.resetOffsetScroll();
}
int cardSize = mCardModulesAdapter.getCount();
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" );
if ( state == ViewPager.SCROLL_STATE_SETTLING ) {
mIsLast = false;
} else if ( state == ViewPager.SCROLL_STATE_IDLE && mIsLast ) {
//此处为你需要的情况,再加入当前页码判断可知道是第一页还是最后一页
if ( cardSize != 1 && mCurrentPosition == ( cardSize - 1 ) ) {
mCardsContainer.setCurrentItem( 0, false );
} else if ( cardSize != 1 && mCurrentPosition == 0 ) {
mCardsContainer.setCurrentItem( cardSize - 1, false );
}
} else {
mIsLast = true;
}
Logger.i( TAG, "onPageScrollStateChanged cost " + ( System.currentTimeMillis() - start ) + "ms" );
}
@Override
public void onPageScrolled( int position, float positionOffset,
int positionOffsetPixels ) {
super.onPageScrolled( position, positionOffset, positionOffsetPixels );
Logger.d( TAG, "pageScrolled : offset --- " + positionOffset );
mTransformer.offsetScrollChanged( positionOffset );
}
} );
@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 );
@@ -261,6 +256,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
} );
mMogoIntentManager = mServiceApis.getIntentManagerApi();
mMogoStatusManager = mServiceApis.getStatusManagerApi();
registerVoiceCmd();
Log.i( "timer", "cost " + ( System.currentTimeMillis() - start ) + "ms" );
}
@@ -324,7 +320,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
@Override
public boolean onMarkerClicked( IMogoMarker marker ) {
switch2Card( marker.getOwner() );
switch2Card( marker.getOwner(), false );
if ( mMogoModuleHandler != null ) {
mMogoModuleHandler.onMarkerClicked( marker );
}
@@ -332,17 +328,23 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
}
@Override
public void switch2Card( String cardType ) {
if ( mCardModulesAdapter != null ) {
public void switch2Card( String cardType, boolean lockCar ) {
if ( mCardModulesAdapter == null ) {
return;
}
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 );
}
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 );
}
if ( lockCar ) {
mMogoStatusManager.setUserInteractionStatus( TAG, true, false );
mMogoMapUIController.recoverLockMode();
}
}

View File

@@ -67,11 +67,11 @@ public class MainPresenter extends Presenter< MainView > {
@Override
public void onCreate( @NonNull LifecycleOwner owner ) {
super.onCreate( owner );
CardSwitchLiveData.getInstance().observeForever( to -> {
if ( TextUtils.isEmpty( to ) ) {
CardSwitchLiveData.getInstance().observeForever( cardInfo -> {
if ( TextUtils.isEmpty( cardInfo.mCardName ) ) {
return;
}
mView.switch2Card( to );
mView.switch2Card( cardInfo.mCardName, true );
} );
mAnalytics = ( IMogoAnalytics ) ARouter.getInstance().build( MogoServicePaths.PATH_UTILS_ANALYTICS ).navigation( getContext() );
mCardStartShowTime = System.currentTimeMillis();

View File

@@ -15,7 +15,7 @@ public interface MainView extends IView {
*
* @param cardType
*/
void switch2Card( String cardType );
void switch2Card( String cardType, boolean lockCar );
/**
* 加载卡片

View File

@@ -3,6 +3,7 @@ package com.mogo.module.main;
import android.content.Context;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.mogo.module.main.livedata.CardInfo;
import com.mogo.module.main.livedata.CardSwitchLiveData;
import com.mogo.service.MogoServicePaths;
import com.mogo.service.cardmanager.IMogoCardChangedListener;
@@ -25,7 +26,7 @@ public class MogoCardManager implements IMogoCardManager {
@Override
public void switch2( String cardType ) {
CardSwitchLiveData.getInstance().postValue( cardType );
CardSwitchLiveData.getInstance().postValue( new CardInfo( cardType, false ) );
}
@Override
@@ -51,6 +52,11 @@ public class MogoCardManager implements IMogoCardManager {
}
}
@Override
public void switch2( String cardType, boolean lockCar ) {
CardSwitchLiveData.getInstance().postValue( new CardInfo( cardType, lockCar ) );
}
@Override
public void init( Context context ) {

View File

@@ -148,7 +148,8 @@ public class MogoModulesManager implements MogoModulesHandler,
providers.add( provider );
}
}
return sort( providers );
return providers;
// return sort( providers ); v2.0.2暂不支持变顺序
}
private List< IMogoModuleProvider > sort( List< IMogoModuleProvider > modules ) {

View File

@@ -0,0 +1,49 @@
package com.mogo.module.main.livedata;
import android.os.Parcel;
import android.os.Parcelable;
/**
* @author congtaowang
* @since 2020-03-09
* <p>
* 描述
*/
public class CardInfo implements Parcelable {
public String mCardName;
public boolean mLockCar;
public CardInfo( String cardName, boolean lockCar ) {
this.mCardName = cardName;
this.mLockCar = lockCar;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel( Parcel dest, int flags ) {
dest.writeString( this.mCardName );
dest.writeByte( this.mLockCar ? ( byte ) 1 : ( byte ) 0 );
}
protected CardInfo( Parcel in ) {
this.mCardName = in.readString();
this.mLockCar = in.readByte() != 0;
}
public static final Parcelable.Creator< CardInfo > CREATOR = new Parcelable.Creator< CardInfo >() {
@Override
public CardInfo createFromParcel( Parcel source ) {
return new CardInfo( source );
}
@Override
public CardInfo[] newArray( int size ) {
return new CardInfo[size];
}
};
}

View File

@@ -8,7 +8,7 @@ import androidx.lifecycle.MutableLiveData;
* <p>
* 切换卡片
*/
public class CardSwitchLiveData extends MutableLiveData< String > {
public class CardSwitchLiveData extends MutableLiveData< CardInfo > {
private CardSwitchLiveData() {
// private constructor