208 lines
9.1 KiB
Java
208 lines
9.1 KiB
Java
package com.mogo.launcher;
|
||
|
||
import android.content.Context;
|
||
import android.content.Intent;
|
||
import android.text.TextUtils;
|
||
import android.util.AttributeSet;
|
||
import android.util.Log;
|
||
import android.view.View;
|
||
|
||
import androidx.annotation.NonNull;
|
||
|
||
import com.alibaba.android.arouter.launcher.ARouter;
|
||
import com.auto.zhidao.logsdk.CrashSystem;
|
||
import com.bytedance.boost_multidex.BoostMultiDex;
|
||
import com.mogo.commons.AbsMogoApplication;
|
||
import com.mogo.commons.debug.DebugConfig;
|
||
import com.mogo.commons.network.Utils;
|
||
import com.mogo.module.authorize.authprovider.invoke.AuthorizeConstant;
|
||
import com.mogo.module.back.BackToLauncherConst;
|
||
import com.mogo.module.carchatting.card.CallChatConstant;
|
||
import com.mogo.module.common.MogoModule;
|
||
import com.mogo.module.common.MogoModulePaths;
|
||
import com.mogo.module.main.service.MogoMainService;
|
||
import com.mogo.module.media.MediaConstants;
|
||
import com.mogo.module.push.base.PushUIConstants;
|
||
import com.mogo.module.service.ServiceConst;
|
||
import com.mogo.module.tanlu.constant.TanluConstants;
|
||
import com.mogo.module.v2x.V2XConst;
|
||
import com.mogo.module.widgets.MogoWidgetsProvider;
|
||
import com.mogo.service.IMogoServiceApis;
|
||
import com.mogo.service.MogoServicePaths;
|
||
import com.mogo.service.passport.IMogoTicketCallback;
|
||
import com.mogo.utils.UiThreadHandler;
|
||
import com.mogo.utils.logger.LogLevel;
|
||
import com.mogo.utils.logger.Logger;
|
||
import com.zhidao.boot.persistent.lib.PersistentManager;
|
||
import com.zhidao.mogo.module.left.panel.LeftPanelConst;
|
||
import com.zhidao.mogo.tanlu.api.TanluApiConst;
|
||
|
||
import java.lang.reflect.Constructor;
|
||
|
||
import skin.support.SkinCompatManager;
|
||
import skin.support.app.SkinAppCompatViewInflater;
|
||
import skin.support.app.SkinCardViewInflater;
|
||
import skin.support.app.SkinLayoutInflater;
|
||
import skin.support.constraint.app.SkinConstraintViewInflater;
|
||
import skin.support.design.app.SkinMaterialViewInflater;
|
||
|
||
/**
|
||
* @author congtaowang
|
||
* @since 2019-12-18
|
||
* <p>
|
||
* Launcher application
|
||
*/
|
||
public class MogoApplication extends AbsMogoApplication {
|
||
|
||
private static final String TAG = "MogoApplication";
|
||
|
||
@Override
|
||
public void onCreate() {
|
||
initDebugConfig();
|
||
super.onCreate();
|
||
// Crash 日志收集
|
||
final long start = System.currentTimeMillis();
|
||
CrashSystem crashSystem = CrashSystem.getInstance( this );
|
||
crashSystem.init();
|
||
//设置debug模式,日志不上传
|
||
crashSystem.setDebug( BuildConfig.DEBUG );
|
||
Logger.init( BuildConfig.DEBUG ? LogLevel.DEBUG : LogLevel.OFF );
|
||
|
||
// MogoModulePaths.addModule(new MogoModule(PATH_GUIDE_FRAGMENT, PATH_GUIDE_MODULE_NAME));
|
||
MogoModulePaths.addModule( new MogoModule( MogoServicePaths.PATH_AGREEMENT, AuthorizeConstant.PATH_AGREEMENT_MODULE_NAME ) );
|
||
|
||
if ( DebugConfig.isLauncher() ) {
|
||
MogoModulePaths.addModule( new MogoModule( BackToLauncherConst.MODULE_PATH, BackToLauncherConst.MODULE_NAME ) );
|
||
MogoModulePaths.addModule( new MogoModule( MediaConstants.TAG, MediaConstants.MODULE_TYPE ) );
|
||
} else {
|
||
MogoModulePaths.addBaseModule( new MogoModule( MogoWidgetsProvider.PATH, MogoWidgetsProvider.NAME ) );
|
||
}
|
||
if ( DebugConfig.getCarMachineType() != DebugConfig.CAR_MACHINE_TYPE_BYD ) {
|
||
MogoModulePaths.addModule( new MogoModule( CallChatConstant.PROVIDER, CallChatConstant.MODULE_NAME ) );
|
||
}
|
||
MogoModulePaths.addModule( new MogoModule( TanluApiConst.MODULE_PATH, TanluApiConst.MODULE_NAME ) );
|
||
MogoModulePaths.addModule( new MogoModule( TanluConstants.TAG, TanluConstants.MODEL_NAME ) );
|
||
MogoModulePaths.addModule( new MogoModule( MogoServicePaths.PATH_SHARE, "ShareControl" ) );
|
||
|
||
MogoModulePaths.addModule( new MogoModule( LeftPanelConst.PATH_NAME, LeftPanelConst.MODULE_NAME ) );
|
||
|
||
MogoModulePaths.addBaseModule( new MogoModule( ServiceConst.PATH_REFRESH_STRATEGY, ServiceConst.PATH_REFRESH_STRATEGY ) );
|
||
MogoModulePaths.addBaseModule( new MogoModule( V2XConst.PATH_V2X_UI, V2XConst.MODULE_NAME ) );
|
||
MogoModulePaths.addBaseModule(new MogoModule( MogoServicePaths.PATH_STRATEGY_SHARE,"StrategyShare"));
|
||
MogoModulePaths.addBaseModule(new MogoModule(MogoServicePaths.PATH_MOGO_MONITOR, "MogoMonitor"));
|
||
MogoModulePaths.addModule( new MogoModule( V2XConst.PATH_EVENT_PANEL, V2XConst.MODULE_NAME_EVENT_PANEL ) );
|
||
MogoModulePaths.addModule( new MogoModule( PushUIConstants.PATH, PushUIConstants.NAME ) );
|
||
|
||
if ( !DebugConfig.isLauncher() ) {
|
||
PersistentManager.getInstance().initManager( this );
|
||
Intent intent = new Intent( this, MogoMainService.class );
|
||
startService( intent );
|
||
}
|
||
|
||
initSkinStrategy();
|
||
Log.i( "timer", "cost " + ( System.currentTimeMillis() - start ) + "ms" );
|
||
}
|
||
|
||
private void initDebugConfig() {
|
||
DebugConfig.setNetMode( BuildConfig.NET_ENV );
|
||
DebugConfig.setDebug( BuildConfig.DEBUG );
|
||
DebugConfig.setAIType( BuildConfig.AIType );
|
||
DebugConfig.setLaunchLocationService( BuildConfig.LAUNCH_LOCATION_SERVICE );
|
||
DebugConfig.setUseCustomNavi( BuildConfig.USE_CUSTOM_NAVI );
|
||
DebugConfig.setLauncher( BuildConfig.IS_LAUNCHER );
|
||
DebugConfig.setActiveAIAssistFlag( BuildConfig.AI_ASSIST_ACTIVE_STAUTS );
|
||
DebugConfig.setCarMachineType( BuildConfig.CAR_MACHINE_TYPE );
|
||
DebugConfig.setProductFlavor( BuildConfig.FLAVOR_product );
|
||
DebugConfig.setSocketAppId( BuildConfig.SOCKET_APP_ID );
|
||
DebugConfig.setRoadEventAnimated( BuildConfig.ROAD_EVENT_ANIMATED );
|
||
}
|
||
|
||
@Override
|
||
protected void asyncInitImpl() {
|
||
super.asyncInitImpl();
|
||
}
|
||
|
||
private void initSkinStrategy(){
|
||
SkinCompatManager.withoutActivity(this)
|
||
.addInflater(new SkinAppCompatViewInflater()) // 基础控件换肤初始化
|
||
.addInflater(new SkinMaterialViewInflater()) // material design 控件换肤初始化[可选]
|
||
.addInflater(new SkinConstraintViewInflater()) // ConstraintLayout 控件换肤初始化[可选]
|
||
.addInflater(new SkinCardViewInflater()) // CardView v7 控件换肤初始化[可选]
|
||
.addInflater( ( context, name, attrs ) -> {
|
||
View view = null;
|
||
try {
|
||
Class clazz = Class.forName( name );
|
||
Constructor<View> constructor = clazz.getConstructor( Context.class, AttributeSet.class );
|
||
constructor.setAccessible( true );
|
||
view = constructor.newInstance( constructor, attrs );
|
||
} catch ( Exception e ) {
|
||
e.printStackTrace();
|
||
}
|
||
return view;
|
||
} )
|
||
.setSkinAllActivityEnable(true)
|
||
.setSkinStatusBarColorEnable(false) // 关闭状态栏换肤,默认打开[可选]
|
||
.setSkinWindowBackgroundEnable(false) // 关闭windowBackground换肤,默认打开[可选]
|
||
.loadSkin();
|
||
}
|
||
|
||
@Override
|
||
protected void init() {
|
||
super.init();
|
||
prepareBaseService( 2_000L );
|
||
}
|
||
|
||
/**
|
||
* 基础服务:passport、location、socket
|
||
*/
|
||
private void prepareBaseService( long delay ) {
|
||
UiThreadHandler.postDelayed( () -> {
|
||
final IMogoServiceApis apis = ARouter.getInstance().navigation( IMogoServiceApis.class );
|
||
// 第三方平台的sn是服务端生成的,所以必须在返回后才能开启
|
||
if ( TextUtils.isEmpty( Utils.getSn() ) ) {
|
||
preparePassportEnvironment( apis, () -> {
|
||
prepareSocketAndLocationServices( apis );
|
||
} );
|
||
} else {
|
||
preparePassportEnvironment( apis, null );
|
||
prepareSocketAndLocationServices( apis );
|
||
}
|
||
}, delay );
|
||
}
|
||
|
||
private void preparePassportEnvironment( IMogoServiceApis apis, Runnable after ) {
|
||
apis.getPassportManagerApi().requestTicket( new IMogoTicketCallback() {
|
||
@Override
|
||
public void onTicketGot( String ticket ) {
|
||
Logger.d( TAG, "ticket = %s", ticket );
|
||
}
|
||
|
||
@Override
|
||
public void onError( int code, String msg ) {
|
||
Logger.w( TAG, "code = %s, msg = %s", code, msg );
|
||
}
|
||
|
||
@Override
|
||
public void onLoginSuccess( String token, String sn ) {
|
||
if ( after != null ) {
|
||
after.run();
|
||
}
|
||
}
|
||
} );
|
||
}
|
||
|
||
private void prepareSocketAndLocationServices( IMogoServiceApis apis ) {
|
||
apis.getSocketManagerApi( getApplicationContext() ).init( getApplicationContext(), DebugConfig.getSocketAppId() );
|
||
apis.getLocationInfoApi().start();
|
||
apis.getMapServiceApi().getSingletonLocationClient( getApplicationContext() ).addLocationListener( location -> {
|
||
apis.getLocationInfoApi().provideLocation( location );
|
||
} );
|
||
}
|
||
|
||
@Override
|
||
protected void attachBaseContext( Context base ) {
|
||
super.attachBaseContext( base );
|
||
BoostMultiDex.install( base );
|
||
}
|
||
}
|