Merge branch 'feature/v1.0.2' of http://gitlab.zhidaoauto.com/ecos/yycp-service/Launcher into feature/v1.0.2

This commit is contained in:
zhongchao
2020-03-18 21:45:04 +08:00
20 changed files with 308 additions and 41 deletions

View File

@@ -21,10 +21,10 @@ android {
multiDexEnabled true
externalNativeBuild {
ndk {
// 设置支持的SO库架构
abiFilters 'armeabi-v7a'
}
// ndk {
// // 设置支持的SO库架构
// abiFilters 'armeabi-v7a'
// }
}
}
signingConfigs {
@@ -165,3 +165,4 @@ def getGitCommit() {
assert !gitCommit.isEmpty()
gitCommit
}

View File

@@ -42,6 +42,7 @@ public class AIAssist implements VoiceClient.VoiceCmdCallBack {
}
public synchronized void release() {
Logger.d( TAG, "release" );
if ( mCmdMap != null && !mCmdMap.isEmpty() && mVoiceClient != null ) {
for ( String cmd : mCmdMap.keySet() ) {
mVoiceClient.unRegisterCustomWakeupCmd( cmd );
@@ -235,10 +236,9 @@ public class AIAssist implements VoiceClient.VoiceCmdCallBack {
if ( mHasFlush ) {
mVoiceClient.registerCustomWakeupCmd( cmd, cmdWords );
mCacheUnWakeupCommands.remove( cmd );
} else {
Logger.i( TAG, "cache un wakeup command2. %s", cmd );
mCacheUnWakeupCommands.put( cmd, cmdWords );
}
Logger.i( TAG, "cache un wakeup command2. %s", cmd );
mCacheUnWakeupCommands.put( cmd, cmdWords );
}
/**
@@ -251,10 +251,9 @@ public class AIAssist implements VoiceClient.VoiceCmdCallBack {
if ( mHasFlush ) {
mVoiceClient.registerCustomWakeupCmd( cmd, cmdWords );
mCacheUnWakeupCommands.remove( cmd );
} else {
Logger.i( TAG, "cache un wakeup command. %s", cmd );
mCacheUnWakeupCommands.put( cmd, cmdWords );
}
Logger.i( TAG, "cache un wakeup command. %s", cmd );
mCacheUnWakeupCommands.put( cmd, cmdWords );
}
/**
@@ -287,12 +286,14 @@ public class AIAssist implements VoiceClient.VoiceCmdCallBack {
* @param cmd
*/
public synchronized void unregisterUnWakeupCommand( String cmd, IMogoVoiceCmdCallBack callBack ) {
mCacheUnWakeupCommands.remove( cmd );
if ( mCmdMap.containsKey( cmd ) ) {
List< IMogoVoiceCmdCallBack > callBacks = mCmdMap.get( cmd );
if ( callBacks != null ) {
callBacks.remove( callBack );
}
if ( callBacks.isEmpty() ) {
mCacheUnWakeupCommands.remove( cmd );
}
}
}
@@ -314,7 +315,6 @@ public class AIAssist implements VoiceClient.VoiceCmdCallBack {
for ( String cmd : mCacheUnWakeupCommands.keySet() ) {
registerUnWakeupCommand( cmd, mCacheUnWakeupCommands.get( cmd ) );
}
mCacheUnWakeupCommands.clear();
}
private boolean isVoiceServiceReady( Context context ) {

View File

@@ -50,7 +50,7 @@ public class NaviClient implements IMogoNavi {
private NaviClient( Context context ) {
mAMapNavi = AMapNavi.getInstance( context );
//mAMapNavi.setEmulatorNaviSpeed( 120 );
mAMapNavi.setEmulatorNaviSpeed( 120 );
mAMapNavi.setUseInnerVoice( true );
mAMapNaviListener = new NaviListenerAdapter( context, mAMapNavi, this );
mAimlessModeListener = new AimlessModeListenerAdapter() {

View File

@@ -4,6 +4,7 @@ import com.amap.api.maps.model.LatLng;
import com.amap.api.maps.model.LatLngBounds;
import com.mogo.map.MogoLatLng;
import com.mogo.map.exception.MogoMapException;
import com.mogo.utils.logger.Logger;
import java.util.List;
@@ -15,6 +16,8 @@ import java.util.List;
*/
public class MogoMapUtils {
private static final String TAG = "MogoMapUtils";
public static LatLngBounds getLatLngBounds( MogoLatLng carPosition, List< MogoLatLng > lonLats, boolean lockCarPosition ) throws Exception {
if ( lonLats == null || lonLats.isEmpty() ) {
@@ -74,6 +77,21 @@ public class MogoMapUtils {
return null;
}
if ( east < west ) {
double tmp = east;
east = west;
west = tmp;
}
if( north < south ){
double tmp = north;
north = south;
south = tmp;
}
Logger.d( TAG, "west = %s, east = %s, north = %s, south = %s", west, east, north, south );
return new LatLngBounds.Builder().include( new LatLng( east, north ) ).include( new LatLng( west, south ) ).build();
}
}

View File

@@ -8,5 +8,5 @@
android:id="@+id/map_amap_id_cursor"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_1" />
android:src="@drawable/map_api_ic_current_location2_cursor" />
</LinearLayout>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

View File

@@ -17,7 +17,7 @@
<dimen name="module_apps_navigation_icon_container_height">174px</dimen>
<dimen name="apps_id_scroller_width">523px</dimen>
<dimen name="apps_margin_top">18px</dimen>
<dimen name="apps_margin_left">37px</dimen>
<dimen name="module_apps_all_icon_width">120px</dimen>
<dimen name="module_apps_all_icon_height">120px</dimen>
<dimen name="apps_margin_left">35px</dimen>
<dimen name="module_apps_all_icon_width">94px</dimen>
<dimen name="module_apps_all_icon_height">94px</dimen>
</resources>

View File

@@ -18,8 +18,10 @@ import com.mogo.map.location.IMogoLocationClient;
import com.mogo.map.location.MogoLocation;
import com.mogo.map.marker.IMogoMarkerManager;
import com.mogo.map.model.MogoPoi;
import com.mogo.map.navi.IMogoAimlessModeListener;
import com.mogo.map.navi.IMogoNavi;
import com.mogo.map.navi.IMogoNaviListener;
import com.mogo.map.navi.MogoCongestionInfo;
import com.mogo.map.navi.MogoNaviInfo;
import com.mogo.map.navi.MogoTraffic;
import com.mogo.map.overlay.IMogoPolyline;
@@ -57,7 +59,9 @@ import java.util.Map;
*/
public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresenter >
implements EntranceView,
IMogoNaviListener, IMogoMapListener {
IMogoNaviListener,
IMogoMapListener,
IMogoAimlessModeListener {
private static final String TAG = "EntranceFragment";
@@ -214,6 +218,7 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent
mMogoRegisterCenter.registerMogoNaviListener( ExtensionsModuleConst.TYPE_ENTRANCE, this );
mMogoRegisterCenter.registerMogoMapListener( ExtensionsModuleConst.TYPE_ENTRANCE, this );
mMogoRegisterCenter.registerMogoAimlessModeListener( TAG, this );
mMogoMarkerManager = mService.getMarkerManager( getContext() );
}
@@ -265,6 +270,10 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent
@Override
public void onUpdateTraffic( MogoTraffic traffic ) {
}
@Override
public void onUpdateTraffic2( MogoTraffic traffic ) {
if ( traffic == null ) {
return;
}
@@ -277,6 +286,11 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent
}
}
@Override
public void onUpdateCongestion( MogoCongestionInfo info ) {
}
@Override
public void onMapLoaded() {

View File

@@ -14,7 +14,7 @@
android:stateNotNeeded="true"
android:taskAffinity=""
android:theme="@style/Main"
android:windowSoftInputMode="adjustPan">
android:windowSoftInputMode="adjustPan|stateHidden">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<!--调试用暂时开启LAUNCHER这个属性-->

View File

@@ -24,6 +24,7 @@ import com.mogo.module.common.MogoModule;
import com.mogo.module.common.MogoModulePaths;
import com.mogo.module.main.assist.MapBroadCastHelper;
import com.mogo.module.main.cards.CardModulesAdapter;
import com.mogo.module.main.cards.HorizentalStackTransformer;
import com.mogo.module.main.cards.MogoModulesHandler;
import com.mogo.module.main.cards.MogoModulesManager;
import com.mogo.module.main.cards.OnPageChangeListenerAdapter;
@@ -70,7 +71,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
private IMogoStatusManager mMogoStatusManager;
private OrientedViewPager mCardsContainer;
//private VerticalStackTransformer mTransformer;
private HorizentalStackTransformer mTransformer;
private CardModulesAdapter mCardModulesAdapter;
private View mHeader;
@@ -102,7 +103,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
protected void initViews() {
mCardsContainer = findViewById( R.id.module_main_id_cards_container );
mCardsContainer.setOrientation( OrientedViewPager.Orientation.HORIZONTAL );
//mTransformer = new VerticalStackTransformer( this );
mTransformer = new HorizentalStackTransformer( this );
mCardsContainer.setOnPageChangeListener( mOnPageChangeListener = new OnPageChangeListenerAdapter() {
private boolean mIsLast = true;
private boolean mCardFlipStatus = false;
@@ -139,7 +140,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
}
} else if ( state == ViewPager.SCROLL_STATE_IDLE ) {
mCardFlipStatus = false;
//mTransformer.resetOffsetScroll();
mTransformer.resetOffsetScroll();
}
int cardSize = mCardModulesAdapter.getCount();
@@ -164,7 +165,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
int positionOffsetPixels ) {
super.onPageScrolled( position, positionOffset, positionOffsetPixels );
Logger.d( TAG, "pageScrolled : offset --- " + positionOffset );
//mTransformer.offsetScrollChanged( positionOffset );
mTransformer.offsetScrollChanged( positionOffset );
}
} );
@@ -305,7 +306,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
List< IMogoModuleProvider > providers = mMogoModuleHandler.loadCardsModule();
mCardModulesAdapter = new CardModulesAdapter( this, providers );
mCardsContainer.setOffscreenPageLimit( providers.size() );
//mCardsContainer.setPageTransformer( true, mTransformer );
mCardsContainer.setPageTransformer( true, mTransformer );
mCardsContainer.setAdapter( mCardModulesAdapter );
}

View File

@@ -2,14 +2,18 @@ package com.mogo.module.main.assist;
import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;
import android.util.Log;
import com.mogo.map.navi.MogoNaviInfo;
import com.mogo.module.service.receiver.MogoReceiver;
import com.mogo.service.impl.intent.IntentManager;
import com.mogo.service.intent.IMogoIntentListener;
/**
* @author zyz
* 2020-01-17.
*/
public class MapBroadCastHelper {
public class MapBroadCastHelper implements IMogoIntentListener {
private static volatile MapBroadCastHelper sInstance;
private static final String ACTION_NAV_SEND = "AUTONAVI_STANDARD_BROADCAST_SEND";
@@ -21,6 +25,8 @@ public class MapBroadCastHelper {
private MapBroadCastHelper(Context context) {
this.context = context;
IntentManager.getInstance().registerIntentListener(MogoReceiver.ACTION_VOICE_READY,this);
}
public static MapBroadCastHelper getInstance( Context context ) {
@@ -71,6 +77,9 @@ public class MapBroadCastHelper {
notifyXizhiNavStatus(STATUS_NAV_STOP);
}
@Override public void onIntentReceived(String intentStr, Intent intent) {
if (TextUtils.equals(intentStr, MogoReceiver.ACTION_VOICE_READY)) {
mapFrount();
}
}
}

View File

@@ -0,0 +1,110 @@
package com.mogo.module.main.cards;
import android.view.View;
import androidx.viewpager.widget.ViewPager;
/**
* Created by Nate on 2016/7/22.
*/
public abstract class HorizentalBaseTransformer implements ViewPager.PageTransformer {
/**
* Called each {@link #transformPage(View, float)}.
*
* @param page Apply the transformation to this page
* @param position Position of page relative to the current front-and-center position of the pager. 0 is front and
* center. 1 is one full page position to the right, and -1 is one page position to the left.
*/
protected abstract void onTransform(View page, float position);
/**
* Apply a property transformation to the given page. For most use cases, this method should not be overridden.
* Instead use {@link #transformPage(View, float)} to perform typical transformations.
*
* @param page Apply the transformation to this page
* @param position Position of page relative to the current front-and-center position of the pager. 0 is front and
* center. 1 is one full page position to the right, and -1 is one page position to the left.
*/
@Override
public void transformPage(View page, float position) {
onPreTransform(page, position);
onTransform(page, position);
onPostTransform(page, position);
}
/**
* If the position offset of a fragment is less than negative one or greater than one, returning true will set the
* fragment alpha to 0f. Otherwise fragment alpha is always defaulted to 1f.
*
* @return
*/
protected boolean hideOffscreenPages() {
return true;
}
/**
* Indicates if the default animations of the view pager should be used.
*
* @return
*/
protected boolean isPagingEnabled() {
return false;
}
/**
* Called each {@link #transformPage(View, float)} before {{@link #onTransform(View, float)}.
* <p/>
* The default implementation attempts to reset all view properties. This is useful when toggling transforms that do
* not modify the same page properties. For instance changing from a transformation that applies rotation to a
* transformation that fades can inadvertently leave a fragment stuck with a rotation or with some degree of applied
* alpha.
*
* @param page Apply the transformation to this page
* @param position Position of page relative to the current front-and-center position of the pager. 0 is front and
* center. 1 is one full page position to the right, and -1 is one page position to the left.
*/
protected void onPreTransform(View page, float position) {
final float width = page.getWidth();
//final float height = page.getHeight();
page.setRotationX(0);
page.setRotationY(0);
page.setRotation(0);
page.setScaleX(1);
page.setScaleY(1);
page.setPivotX(0);
page.setPivotY(0);
page.setTranslationY(0);
page.setTranslationX(isPagingEnabled() ? 0f : -width * position);
if (hideOffscreenPages()) {
page.setAlpha(position <= -1f || position >= 1f ? 0f : 1f);
} else {
page.setAlpha(1f);
}
/*final float normalizedposition = Math.abs(Math.abs(position) - 1);
page.setAlpha(normalizedposition);*/
}
/**
* Called each {@link #transformPage(View, float)} after {@link #onTransform(View, float)}.
*
* @param page Apply the transformation to this page
* @param position Position of page relative to the current front-and-center position of the pager. 0 is front and
* center. 1 is one full page position to the right, and -1 is one page position to the left.
*/
protected void onPostTransform(View page, float position) {
}
/**
* Same as {@link Math#min(double, double)} without double casting, zero closest to infinity handling, or NaN support.
*
* @param val
* @param min
* @return
*/
protected static final float min(float val, float min) {
return val < min ? min : val;
}
}

View File

@@ -0,0 +1,73 @@
package com.mogo.module.main.cards;
import android.content.Context;
import android.view.View;
import com.mogo.module.main.R;
import com.mogo.utils.logger.Logger;
public class HorizentalStackTransformer extends HorizentalBaseTransformer {
private Context context;
private int spaceBetweenFirAndSecWith;//第一张卡片和第二张卡片宽度差
private int spaceBetweenFirAndSecHeight;//第一张卡片和第二张卡片高度差
private float offsetScroll = 0.0f;//ViewPager滑动时变化幅度
public HorizentalStackTransformer( Context context ) {
this.context = context;
spaceBetweenFirAndSecHeight = 0;
spaceBetweenFirAndSecWith = context.getResources().getDimensionPixelSize( R.dimen.module_main_card_card_shadow_width_div );
}
public HorizentalStackTransformer( Context context, int spaceBetweenFirAndSecWith, int spaceBetweenFirAndSecHeight ) {
this.context = context;
this.spaceBetweenFirAndSecWith = spaceBetweenFirAndSecWith;
this.spaceBetweenFirAndSecHeight = spaceBetweenFirAndSecHeight;
}
public void offsetScrollChanged(float offset){
if(offset ==0){
return;
}
offsetScroll = offset;
}
public void resetOffsetScroll(){
offsetScroll = 0.0f;
}
@Override
protected void onTransform( View page, float position ) {
if ( position == 0.0f ) {
page.setAlpha( 1.0f );
page.setTranslationX( 0f );
//控制停止滑动切换的时候,只有最上面的一张卡片可以点击
page.setClickable( true );
} else if(position>0){
float scale = ( float ) ( page.getWidth() - spaceBetweenFirAndSecWith * position ) / ( float ) ( page.getWidth() );
Logger.d("VerticalStackTransformer","scale :" + scale);
//控制下面卡片的可见度
page.setAlpha( 1.0f );
//控制停止滑动切换的时候,只有最上面的一张卡片可以点击
page.setClickable( false );
page.setPivotX( page.getWidth() / 2f );
page.setPivotY( page.getHeight() / 2f );
page.setScaleX( scale );
page.setScaleY( scale );
page.setTranslationX( -page.getHeight() * position + ( page.getHeight() * 0.5f ) * ( 1 - scale ) + spaceBetweenFirAndSecHeight * position );
}else{
float currentPage;
if(offsetScroll > 0.2f){
currentPage = 0.2f;
}else{
currentPage = offsetScroll;
}
page.setAlpha( 1 );
page.setScaleX(1-currentPage);
page.setScaleY(1-currentPage);
page.setPivotX( page.getWidth() / 2f );
page.setPivotY( page.getHeight() / 2f );
page.setTranslationX( 0f );
page.setClickable( false );
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 68 KiB

View File

@@ -82,9 +82,14 @@ public class MapPresenter extends Presenter<MapView> implements
mView.getUIController().changeMapMode(EnumMapUI.CarUp_2D);
} else if (opera_type == 1) {
mView.getUIController().changeMapMode(EnumMapUI.NorthUP_2D);
AIAssist.getInstance(getContext()).speakTTSVoice("已切换", null);
} else if (opera_type == 2) {
mView.getUIController().changeMapMode(EnumMapUI.CarUp_3D);
AIAssist.getInstance(getContext()).speakTTSVoice("已切换", null);
}
}
} else if (key_type == 10048) {
//* @param type 0:自动; 1白天; 2黑夜
@@ -111,11 +116,11 @@ public class MapPresenter extends Presenter<MapView> implements
int extra_is_show = intent.getIntExtra("EXTRA_IS_SHOW", 0);
if (extra_is_show == 0) {
mView.getUIController().displayOverview();
} else {
mView.getUIController().recoverLockMode();
}
//if (extra_is_show == 0) {
// mView.getUIController().displayOverview();
//} else {
// mView.getUIController().recoverLockMode();
//}
}else if (key_type == 10005){
int navi_route_prefer = intent.getIntExtra("NAVI_ROUTE_PREFER", type);
@@ -247,11 +252,15 @@ public class MapPresenter extends Presenter<MapView> implements
AIAssist.getInstance(getContext()).speakTTSVoice("已切换", null);
case VoiceConstants.CMD_MAP_NORTH_UP_MODE:
mView.getUIController().changeMapMode(EnumMapUI.NorthUP_2D);
AIAssist.getInstance(getContext()).speakTTSVoice("已切换", null);
break;
case VoiceConstants.CMD_MAP_3D_UN_WAKEUP:
AIAssist.getInstance(getContext()).speakTTSVoice("已切换", null);
case VoiceConstants.CMD_MAP_3D:
mView.getUIController().changeMapMode(EnumMapUI.CarUp_3D);
AIAssist.getInstance(getContext()).speakTTSVoice("已切换", null);
break;
case VoiceConstants.CMD_MAP_DAY_TIME_MODE_UN_WAKEUP:
AIAssist.getInstance(getContext()).speakTTSVoice("已切换", null);

View File

@@ -134,15 +134,7 @@ public class SearchFragment extends BaseSearchFragment
mPoiAdapter.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
MogoTip tag = (MogoTip) v.getTag(R.id.tag_position);
SearchPoi searchPoi = EntityConvertUtils.tipToPoi(tag);
if (tag.getPoint() == null) {
goCategory(tag.getName());
} else {
mSearchPresenter.insert(searchPoi);
SearchServiceHolder.INSTANCE.push(
ChoosePathFragment.Companion.newInstance(tag.getPoint()),
MogoModulePaths.PATH_FRAGMENT_CHOOSE_PAHT);
}
goResult(tag);
}
});
@@ -190,6 +182,18 @@ public class SearchFragment extends BaseSearchFragment
registerVoidCmd();
}
private void goResult(MogoTip tag) {
SearchPoi searchPoi = EntityConvertUtils.tipToPoi(tag);
if (tag.getPoint() == null) {
goCategory(tag.getName());
} else {
mSearchPresenter.insert(searchPoi);
SearchServiceHolder.INSTANCE.push(
ChoosePathFragment.Companion.newInstance(tag.getPoint()),
MogoModulePaths.PATH_FRAGMENT_CHOOSE_PAHT);
}
}
private void goSetting() {
SearchServiceHolder.INSTANCE.getAnalyticsManager()
.track("Navigation_button_setting", new HashMap<String, Object>());
@@ -331,6 +335,7 @@ public class SearchFragment extends BaseSearchFragment
}
showResult();
mPoiAdapter.setDatas(datums);
registerResult();
}
@Override public void showHistory(List<SearchPoi> datums) {
@@ -358,6 +363,21 @@ public class SearchFragment extends BaseSearchFragment
}
}
private void registerResult() {
List<MogoTip> datums = mPoiAdapter.getList();
for (int i = 0; i < datums.size(); i++) {
String s = StringUtils.int2String(i + 1);
AIAssist.getInstance(getContext())
.registerUnWakeupCommand("history" + i,
new String[] { "" + s + "", "" + s + "" }, this);
if (cmds.contains("history" + i)) {
continue;
}
cmds.add("history" + i);
}
}
private List<String> cmds = new ArrayList<String>();
@Override
@@ -470,6 +490,10 @@ public class SearchFragment extends BaseSearchFragment
tvEmpty.setVisibility(View.VISIBLE);
}
private boolean isHistory(){
return rlHistory.getVisibility()==View.VISIBLE;
}
/**
* 类别
*/
@@ -552,10 +576,18 @@ public class SearchFragment extends BaseSearchFragment
if (!TextUtils.isEmpty(cmd) && cmd.startsWith("history")) {
String index = cmd.substring(7);
Integer integer = Integer.valueOf(index);
if (isHistory()){
if (integer < mHistoryAdapter.getItemCount()) {
SearchPoi item = mHistoryAdapter.getItem(integer);
goHistory(item);
}
}else {
if (integer < mPoiAdapter.getItemCount()) {
MogoTip item = mPoiAdapter.getItem(integer);
goResult(item);
}
}
return;
}
switch (cmd) {