diff --git a/config.gradle b/config.gradle index bd3882e0ed..a155fbea65 100644 --- a/config.gradle +++ b/config.gradle @@ -87,6 +87,7 @@ ext { modulecommon : "com.mogo.module:module-common:${MOGO_MODULE_COMMON_VERSION}", modulemain : "com.mogo.module:module-main:${MOGO_MODULE_MAIN_VERSION}", modulemap : "com.mogo.module:module-map:${MOGO_MODULE_MAP_VERSION}", + moduleservice : "com.mogo.module:module-service:${MOGO_MODULE_SERVICE_VERSION}", mogoservice : "com.mogo.service:mogo-service:${MOGO_SERVICE_VERSION}", mogoserviceapi : "com.mogo.service:mogo-service-api:${MOGO_SERVICE_API_VERSION}", moduleapps : "com.mogo.module:module-apps:${MOGO_MODULE_APPS_VERSION}", @@ -99,5 +100,8 @@ ext { // jetbrainsannotationsjava5: "org.jetbrains:annotations-java5:15.0", + + // 统一登录 + accountsdk : "com.zhidao.accountservice:account-sdk:1.0.0.1@aar", ] } \ No newline at end of file diff --git a/foudations/mogo-commons/build.gradle b/foudations/mogo-commons/build.gradle index c91181acd7..6c6637eaae 100644 --- a/foudations/mogo-commons/build.gradle +++ b/foudations/mogo-commons/build.gradle @@ -38,8 +38,10 @@ dependencies { annotationProcessor rootProject.ext.dependencies.aroutercompiler if (Boolean.valueOf(RELEASE)) { implementation rootProject.ext.dependencies.mogoutils + compileOnly rootProject.ext.dependencies.mogomapapi } else { implementation project(":foudations:mogo-utils") + compileOnly project(":libraries:mogo-map-api") } } diff --git a/foudations/mogo-commons/src/main/java/com/mogo/commons/AbsMogoApplication.java b/foudations/mogo-commons/src/main/java/com/mogo/commons/AbsMogoApplication.java index c858cac83c..9cf98fe8b0 100644 --- a/foudations/mogo-commons/src/main/java/com/mogo/commons/AbsMogoApplication.java +++ b/foudations/mogo-commons/src/main/java/com/mogo/commons/AbsMogoApplication.java @@ -1,12 +1,28 @@ package com.mogo.commons; import android.app.Application; +import android.content.Context; import com.alibaba.android.arouter.launcher.ARouter; +import com.bumptech.glide.load.model.GlideUrl; import com.elegant.analytics.Analytics; import com.elegant.analytics.AnalyticsConfig; import com.mogo.commons.debug.DebugConfig; +import com.mogo.commons.network.AllAllowedHostnameVerifier; +import com.mogo.commons.network.Constants; +import com.mogo.commons.network.ParamsUtil; +import com.mogo.commons.network.X509TrustManagerImpl; import com.mogo.utils.TipToast; +import com.mogo.utils.glide.GlideApp; +import com.mogo.utils.network.NetConfig; + +import java.io.InputStream; +import java.security.SecureRandom; + +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; + +import okhttp3.OkHttpClient; /** * @author congtaowang @@ -48,6 +64,39 @@ public class AbsMogoApplication extends Application { // 初始化toast TipToast.init( sApp, null ); + + initNetConfig(); + initAccountSdk(); } + private static void initNetConfig() { + + try { + SSLContext sc = getSslContext(); + NetConfig.instance().setSslContext( sc ); + } catch ( Exception e ) { + } + + NetConfig.instance().setSignaturePrefix( Constants.SIGN_PREFIX ) + .setPublicParams( ParamsUtil.getStaticParams() ) + .setHostnameVerifier( new AllAllowedHostnameVerifier() ) + .setLoggable( DebugConfig.isDebug() ); + } + + /** + * 忽略 https 验证 + * + * @return + * @throws Exception + */ + private static SSLContext getSslContext() throws Exception { + SSLContext sc = null; + sc = SSLContext.getInstance( "SSL" ); + sc.init( null, new TrustManager[]{new X509TrustManagerImpl()}, new SecureRandom() ); + return sc; + } + + private static void initAccountSdk(){ +// AccountClientManager.init(context,businessType,appId); + } } diff --git a/foudations/mogo-commons/src/main/java/com/mogo/commons/analytics/AnalyticsUtils.java b/foudations/mogo-commons/src/main/java/com/mogo/commons/analytics/AnalyticsUtils.java index 9471ea7619..599f0271ae 100644 --- a/foudations/mogo-commons/src/main/java/com/mogo/commons/analytics/AnalyticsUtils.java +++ b/foudations/mogo-commons/src/main/java/com/mogo/commons/analytics/AnalyticsUtils.java @@ -1,7 +1,7 @@ package com.mogo.commons.analytics; import com.elegant.analytics.Analytics; -import com.mogo.commons.network.ParamUtils; +import com.mogo.commons.network.ParamsUtil; import java.util.Map; @@ -20,7 +20,7 @@ public class AnalyticsUtils { * @param properties 事件参数 */ public static void track( String event, Map< String, Object > properties ) { - Analytics.getInstance().setCustomParams( ParamUtils.getAnalyticsParameters() ); + Analytics.getInstance().setCustomParams( ParamsUtil.getAnalyticsCustomParams() ); Analytics.getInstance().track( event, properties ); } } diff --git a/foudations/mogo-commons/src/main/java/com/mogo/commons/network/Constants.java b/foudations/mogo-commons/src/main/java/com/mogo/commons/network/Constants.java new file mode 100644 index 0000000000..9597a405b2 --- /dev/null +++ b/foudations/mogo-commons/src/main/java/com/mogo/commons/network/Constants.java @@ -0,0 +1,27 @@ +package com.mogo.commons.network; + +public interface Constants { + + String UTF_8 = "UTF-8"; + + String KEY_PHONE = "user_phone"; + String KEY_TOKEN = "user_token "; + String KEY_USER_ID = "userId"; + String KEY_DISPLAY_NAME = "displayName"; + String KEY_SN = "sn"; + + String OS = "Android-Car"; + + String KEY_SOURCE = ServerParam.SOURCE; + String DEFAULT_SOURCE = "appLauncher"; + + // 车机已绑定状态 + int STATUS_BIND = 1; + + String KEY_TICKET = "ticket"; + + /** + * sign,salt + */ + String SIGN_PREFIX = "JGjZx6"; +} diff --git a/foudations/mogo-commons/src/main/java/com/mogo/commons/network/HttpParamsEx.java b/foudations/mogo-commons/src/main/java/com/mogo/commons/network/HttpParamsEx.java new file mode 100644 index 0000000000..59d3043332 --- /dev/null +++ b/foudations/mogo-commons/src/main/java/com/mogo/commons/network/HttpParamsEx.java @@ -0,0 +1,27 @@ +package com.mogo.commons.network; + +import android.text.TextUtils; + +import com.mogo.utils.logger.Logger; +import com.mogo.utils.network.BaseParams; +import com.mogo.utils.network.HttpParams; + + +/** + * Created by congtaowang on 2018/10/21. + */ +public class HttpParamsEx extends HttpParams { + + private static final String TAG = "HttpParamsEx"; + + @Override + public BaseParams put( String key, Object value ) { + + if ( !TextUtils.isEmpty( key ) ) { + if ( value == null ) { + Logger.e( TAG, "%s with illegal value", key ); + } + } + return super.put( key, value ); + } +} diff --git a/foudations/mogo-commons/src/main/java/com/mogo/commons/network/LocationHelper.java b/foudations/mogo-commons/src/main/java/com/mogo/commons/network/LocationHelper.java new file mode 100644 index 0000000000..0e7cebcdff --- /dev/null +++ b/foudations/mogo-commons/src/main/java/com/mogo/commons/network/LocationHelper.java @@ -0,0 +1,42 @@ +package com.mogo.commons.network; + +import com.mogo.map.location.MogoLocation; + +/** + * @author congtaowang + * @since 2020-01-02 + *
+ * 缓存当前经纬度位置,便于接口请求 + */ +public class LocationHelper { + + private static volatile LocationHelper sInstance; + + private LocationHelper() { + } + + public static LocationHelper getInstance() { + if ( sInstance == null ) { + synchronized ( LocationHelper.class ) { + if ( sInstance == null ) { + sInstance = new LocationHelper(); + } + } + } + return sInstance; + } + + public synchronized void release() { + sInstance = null; + } + + private MogoLocation mMogoLocation; + + public MogoLocation getMogoLocation() { + return mMogoLocation; + } + + public void setMogoLocation( MogoLocation mogoLocation ) { + this.mMogoLocation = mogoLocation; + } +} diff --git a/foudations/mogo-commons/src/main/java/com/mogo/commons/network/ParamUtils.java b/foudations/mogo-commons/src/main/java/com/mogo/commons/network/ParamUtils.java deleted file mode 100644 index f4544ed960..0000000000 --- a/foudations/mogo-commons/src/main/java/com/mogo/commons/network/ParamUtils.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.mogo.commons.network; - -import java.util.Map; - -/** - * @author congtaowang - * @since 2019-12-23 - *
- * 描述
- */
-public class ParamUtils {
-
- public static Map< String, Object > getAnalyticsParameters() {
- return null;
- }
-}
diff --git a/foudations/mogo-commons/src/main/java/com/mogo/commons/network/ParamsProvider.java b/foudations/mogo-commons/src/main/java/com/mogo/commons/network/ParamsProvider.java
new file mode 100644
index 0000000000..c09ad6d2f1
--- /dev/null
+++ b/foudations/mogo-commons/src/main/java/com/mogo/commons/network/ParamsProvider.java
@@ -0,0 +1,72 @@
+package com.mogo.commons.network;
+
+import android.content.Context;
+
+import com.mogo.utils.CheckUtils;
+import com.mogo.utils.network.HttpParams;
+import com.mogo.utils.network.NetConfig;
+import com.mogo.utils.network.ServerParam;
+import com.mogo.utils.network.utils.SignUtil;
+
+import java.util.Map;
+import java.util.Set;
+
+public class ParamsProvider {
+
+ private static Map< String, Object > getParams( Context context ) {
+ return getParams( context, new HttpParams(), Constants.SIGN_PREFIX );
+ }
+
+ private static Map< String, Object > getParams( Context context, HttpParams httpParams, String salt ) {
+ final Map< String, Object > publicParams = NetConfig.instance().getPublicParams();
+ if ( !CheckUtils.isEmpty( publicParams ) ) {
+ for ( Map.Entry< String, Object > entry : publicParams.entrySet() ) {
+ httpParams.put( entry.getKey(), entry.getValue() );
+ }
+ }
+
+ final Map< String, Object > dynamicParams = ParamsUtil.getDynamicParams();
+ if ( !CheckUtils.isEmpty( dynamicParams ) ) {
+ for ( Map.Entry< String, Object > entry : dynamicParams.entrySet() ) {
+ httpParams.put( entry.getKey(), entry.getValue() );
+ }
+ }
+
+ httpParams.put( ServerParam.SIGNATURE, SignUtil.createSign( httpParams.getParamsMap(), salt ) );
+ return httpParams.getParamsMap();
+ }
+
+ public static final class Builder {
+ private HttpParams mHttpParams;
+ private Context mContext;
+
+ public Builder( Context context ) {
+ this.mHttpParams = new HttpParamsEx();
+ this.mContext = context;
+ }
+
+ public Builder append( String key, Object value ) {
+ mHttpParams.put( key, value );
+ return this;
+ }
+
+ public Builder append( Map< String, Object > keyValuePairs ) {
+ if ( keyValuePairs != null && !keyValuePairs.isEmpty() ) {
+ final Set< Map.Entry< String, Object > > entries = keyValuePairs.entrySet();
+ for ( Map.Entry< String, Object > entry : entries ) {
+ this.append( entry.getKey(), entry.getValue() );
+ }
+ }
+ return this;
+ }
+
+ public Map< String, Object > build() {
+ return build( Constants.SIGN_PREFIX );
+ }
+
+ public Map< String, Object > build( String salt ) {
+ return getParams( mContext, mHttpParams, salt );
+ }
+ }
+
+}
diff --git a/foudations/mogo-commons/src/main/java/com/mogo/commons/network/ParamsUtil.java b/foudations/mogo-commons/src/main/java/com/mogo/commons/network/ParamsUtil.java
new file mode 100644
index 0000000000..31bf55578a
--- /dev/null
+++ b/foudations/mogo-commons/src/main/java/com/mogo/commons/network/ParamsUtil.java
@@ -0,0 +1,153 @@
+package com.mogo.commons.network;
+
+import android.os.Build;
+import android.text.TextUtils;
+
+import androidx.annotation.NonNull;
+import androidx.collection.ArrayMap;
+
+import com.mogo.commons.AbsMogoApplication;
+import com.mogo.commons.debug.DebugConfig;
+import com.mogo.map.location.MogoLocation;
+import com.mogo.utils.CommonUtils;
+import com.mogo.utils.DeviceIdUtils;
+import com.mogo.utils.WindowUtils;
+import com.mogo.utils.logger.Logger;
+import com.mogo.utils.network.utils.GsonUtil;
+import com.zhidao.auto.platform.util.DeviceUtil;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.util.Map;
+import java.util.Set;
+
+import okhttp3.RequestBody;
+
+public class ParamsUtil {
+
+ private static final String TAG = "ParamsUtil";
+
+ public static Map< String, Object > getDynamicParams() {
+ Map< String, Object > params = new ArrayMap();
+
+ final MogoLocation location = LocationHelper.getInstance().getMogoLocation();
+ if ( location != null ) {
+ params.put( ServerParam.CITY_CODE, location.getCityCode() );
+ params.put( ServerParam.AD_CODE, location.getAdCode() );
+ params.put( ServerParam.LAT, location.getLatitude() );
+ params.put( ServerParam.LNG, location.getLongitude() );
+ }
+ params.put( ServerParam.NET_TYPE, CommonUtils.getNetworkType( AbsMogoApplication.getApp() ) );
+ params.put( ServerParam.CELL_ID, Utils.getCellId( AbsMogoApplication.getApp() ) );
+
+ params.put( ServerParam.DISPLAY_ID, DeviceUtil.getSystemVersion() );
+ params.put( ServerParam.SN, Utils.getSn() );
+
+ return params;
+ }
+
+ private static final Map< String, Object > STATIC_PARAMS = new ArrayMap<>();
+
+ static {
+ STATIC_PARAMS.put( ServerParam.BRAND, Build.BRAND );
+ STATIC_PARAMS.put( ServerParam.MANUFACTURER, Build.MANUFACTURER );
+ STATIC_PARAMS.put( ServerParam.MODEL, Build.MODEL );
+ STATIC_PARAMS.put( ServerParam.PRODUCT, Build.PRODUCT );
+ STATIC_PARAMS.put( ServerParam.OS, Constants.OS );
+ STATIC_PARAMS.put( ServerParam.OS_VERSION, Build.VERSION.RELEASE );
+ STATIC_PARAMS.put( ServerParam.MOBILE_MODEL, CommonUtils.getModel() );
+ STATIC_PARAMS.put( ServerParam.VERSION_CODE, CommonUtils.getVersionCode( AbsMogoApplication.getApp() ) );
+ STATIC_PARAMS.put( ServerParam.VERSION_NAME, CommonUtils.getVersionName( AbsMogoApplication.getApp() ) );
+ STATIC_PARAMS.put( ServerParam.SCREEN_PIXELS, WindowUtils.getScreenPixels( AbsMogoApplication.getApp() ) );
+ STATIC_PARAMS.put( ServerParam.ANDROID_ID, CommonUtils.getAndroidID( AbsMogoApplication.getApp() ) );
+ STATIC_PARAMS.put( ServerParam.DEVICE_ID, DeviceIdUtils.getDeviceId( AbsMogoApplication.getApp() ) );
+ STATIC_PARAMS.put( ServerParam.IMEI, CommonUtils.getIMEI( AbsMogoApplication.getApp() ) );
+ STATIC_PARAMS.put( ServerParam.IMSI, CommonUtils.getIMSI( AbsMogoApplication.getApp() ) );
+ STATIC_PARAMS.put( ServerParam.END_POINT, ServerParam.END_POINT_CAR );
+ }
+
+ public static Map< String, Object > getStaticParams() {
+ return STATIC_PARAMS;
+ }
+
+ public static Map< String, Object > getAnalyticsCustomParams() {
+ Map< String, Object > map = new ArrayMap<>();
+ map.put( "debug", DebugConfig.isDebug() ? 1 : 0 );
+ return map;
+ }
+
+ public static RequestBody convert( Map< String, Object > map ) {
+ String json = GsonUtil.getGson().toJson( map );
+ Logger.d( TAG, "request params: %s", json );
+ RequestBody requestBody = RequestBody.create( okhttp3.MediaType.parse( "application/json; charset=utf-8" ), json );
+ return requestBody;
+ }
+
+ /**
+ * post 请求only
+ *
+ * @param url 地址
+ * @param params 参数 (公共+业务+签名)
+ * @param businessParams query 串中不需要保留的参数,一般为业务参数
+ * @return
+ */
+ public static String toQueryUrl( @NonNull String url, Map< String, Object > params, Map< String, Object > businessParams ) {
+
+ if ( TextUtils.isEmpty( url ) ) {
+ return url;
+ }
+
+ params = diff( params, businessParams );
+ if ( params == null || params.isEmpty() ) {
+ return url;
+ }
+ final Set< String > keys = params.keySet();
+ StringBuilder builder = new StringBuilder();
+ for ( String key : keys ) {
+ if ( TextUtils.isEmpty( key ) ) {
+ Logger.w( TAG, "key is illegal" );
+ continue;
+ }
+
+ final Object value = params.get( key );
+ if ( value == null ) {
+ Logger.w( TAG, "%s - value is illegal", key );
+ continue;
+ }
+ String targetValue = value.toString();
+ try {
+ targetValue = URLEncoder.encode( targetValue, "utf-8" );
+ } catch ( UnsupportedEncodingException e ) {
+ targetValue = value.toString();
+ }
+ builder.append( key ).append( "=" ).append( targetValue ).append( "&" );
+ }
+ String queryString = builder.toString();
+ if ( queryString.endsWith( "&" ) ) {
+ queryString = queryString.substring( 0, queryString.length() - 1 );
+ }
+
+ if ( !url.endsWith( "?" ) ) {
+ url += "?";
+ }
+ return url + queryString;
+ }
+
+ /**
+ * @param parent 全部参数
+ * @param child 业务参数
+ * @return
+ */
+ public static Map< String, Object > diff( Map< String, Object > parent, Map< String, Object > child ) {
+ if ( parent == null || parent.isEmpty() || child == null || child.isEmpty() ) {
+ return parent;
+ }
+ for ( String key : child.keySet() ) {
+ if ( TextUtils.isEmpty( key ) || TextUtils.equals( "extra_id", key ) ) {
+ continue;
+ }
+ parent.remove( key );
+ }
+ return parent;
+ }
+}
diff --git a/foudations/mogo-commons/src/main/java/com/mogo/commons/network/ServerParam.java b/foudations/mogo-commons/src/main/java/com/mogo/commons/network/ServerParam.java
new file mode 100644
index 0000000000..b7f699f297
--- /dev/null
+++ b/foudations/mogo-commons/src/main/java/com/mogo/commons/network/ServerParam.java
@@ -0,0 +1,45 @@
+package com.mogo.commons.network;
+
+class ServerParam {
+
+ public static final String LAT = "lat";
+ public static final String LNG = "lng";
+ public static final String CITY_CODE = "cityCode";
+ public static final String AD_CODE = "adCode";
+ public static final String SELECTED_AD_CODE = "selectedAdCode";
+
+ // 用户名
+ public static final String DISPLAY_NAME = "displayName";
+
+ public static final String OS = "os";
+ public static final String BRAND = "brand";
+ public static final String MANUFACTURER = "manufacturer";
+ public static final String MODEL = "model";
+ public static final String OS_VERSION = "osVersion";
+ public static final String PRODUCT = "product";
+ // 系统版本号
+ public static final String DISPLAY_ID = "displayId";
+
+ public static final String MOBILE_MODEL = "hardWareModel";
+ public static final String CELL_ID = "cellId";
+ public static final String IMEI = "imei";
+ public static final String IMSI = "imsi";
+ public static final String SOURCE = "source";
+ public static final String NET_TYPE = "netType";
+ public static final String VERSION_CODE = "appVersionCode";
+ public static final String VERSION_NAME = "appVersion";
+ public static final String SCREEN_PIXELS = "pixels";
+ public static final String ANDROID_ID = "androidId";
+ public static final String DEVICE_ID = "deviceId";
+ public static final String SN = "sn";
+ public static final String CHANNEL = "channel";
+
+ public static final String USER_ID = "userId";
+ public static final String FILE = "file";
+ public static final String END_POINT = "endPoint";
+ public static final String END_POINT_CAR = "CAR";
+
+ public static final String PHONE = "phone";
+ public static final String TICKET = "ticket";
+
+}
diff --git a/foudations/mogo-commons/src/main/java/com/mogo/commons/network/SubscribeImpl.java b/foudations/mogo-commons/src/main/java/com/mogo/commons/network/SubscribeImpl.java
new file mode 100644
index 0000000000..e57855aa12
--- /dev/null
+++ b/foudations/mogo-commons/src/main/java/com/mogo/commons/network/SubscribeImpl.java
@@ -0,0 +1,91 @@
+package com.mogo.commons.network;
+
+import android.content.Context;
+
+import com.mogo.commons.data.BaseData;
+import com.mogo.utils.logger.Logger;
+import com.mogo.utils.network.RequestOptions;
+import com.mogo.utils.network.utils.GsonUtil;
+import com.mogo.utils.network.utils.Util;
+
+import rx.Subscriber;
+
+/**
+ * Created by congtaowang on 2018/10/14.
+ */
+public abstract class SubscribeImpl< T extends BaseData > extends Subscriber< T > {
+
+ protected final RequestOptions mRequestOptions;
+
+ private static final String TAG = "SubscribeImpl";
+ private boolean mAutoTipMsg = true;
+
+ public SubscribeImpl( RequestOptions requestOptions ) {
+ mRequestOptions = requestOptions;
+ }
+
+ public SubscribeImpl( RequestOptions requestOptions, boolean autoTipMsg ) {
+ this( requestOptions );
+ mAutoTipMsg = autoTipMsg;
+ }
+
+ @Override
+ public void onStart() {
+ super.onStart();
+ if ( !Util.checkAlive( mRequestOptions.getCaller() ) ) {
+ unsubscribe();
+ return;
+ }
+ final Context context = Util.getContext( mRequestOptions.getCaller() );
+ }
+
+ @Override
+ public void onCompleted() {
+ onFinish();
+ }
+
+ private void onFinish() {
+ onUnsubscribe();
+ if ( !Util.checkAlive( mRequestOptions.getCaller() ) ) {
+ unsubscribe();
+ }
+ }
+
+ private void onUnsubscribe() {
+ final Context context = Util.getContext( mRequestOptions.getCaller() );
+ }
+
+ @Override
+ public void onError( Throwable e ) {
+ onFinish();
+ Logger.e( TAG, e, "occur when net request." );
+ }
+
+ @Override
+ public void onNext( T o ) {
+ if ( o != null ) {
+ if ( o.code != 0 ) {
+ onError( o.msg, o.code );
+ } else {
+ onSuccess( o );
+ }
+ } else {
+ onError( "", -1 );
+ }
+ }
+
+ public void onSuccess( T o ) {
+ Logger.e( TAG, GsonUtil.jsonFromObject( o ) );
+ }
+
+ public void onError( String message, int code ) {
+
+ Logger.e( TAG, "%d - %s", code, message );
+ }
+
+ private static boolean isTicketUpdated = false;
+
+ private void onUpdateTicket() {
+
+ }
+}
diff --git a/foudations/mogo-commons/src/main/java/com/mogo/commons/network/Utils.java b/foudations/mogo-commons/src/main/java/com/mogo/commons/network/Utils.java
new file mode 100644
index 0000000000..7d6ec4242a
--- /dev/null
+++ b/foudations/mogo-commons/src/main/java/com/mogo/commons/network/Utils.java
@@ -0,0 +1,79 @@
+package com.mogo.commons.network;
+
+import android.Manifest;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.telephony.CellLocation;
+import android.telephony.TelephonyManager;
+import android.telephony.cdma.CdmaCellLocation;
+import android.telephony.gsm.GsmCellLocation;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+/**
+ * Created by congtaowang on 2018/3/29.
+ */
+
+class Utils {
+
+ public static String getCellId( Context context ) {
+ TelephonyManager tm = ( TelephonyManager ) context.getSystemService( Context.TELEPHONY_SERVICE );
+ if ( tm == null ) {
+ return "";
+ }
+
+ PackageManager pm = context.getPackageManager();
+ boolean accessCoarseLocationPermission = ( PackageManager.PERMISSION_GRANTED ==
+ pm.checkPermission( Manifest.permission.ACCESS_COARSE_LOCATION, context.getPackageName() ) );
+ boolean accessFineLocationPermission = ( PackageManager.PERMISSION_GRANTED ==
+ pm.checkPermission( Manifest.permission.ACCESS_FINE_LOCATION, context.getPackageName() ) );
+ if ( !accessCoarseLocationPermission || !accessFineLocationPermission )
+ return "noPermission";
+
+ CellLocation location = null;
+ try {
+ location = tm.getCellLocation();
+ } catch ( Exception e ) {
+ e.printStackTrace();
+ }
+ if ( location != null ) {
+ // Gsm网络 , 联通移动的网络属于这一套
+ if ( location instanceof GsmCellLocation ) {
+ GsmCellLocation gsmLoc = ( GsmCellLocation ) location;
+ int cellid = gsmLoc.getCid();
+ return String.valueOf( cellid );
+ // Cdma网络 , 电信网络属于这一种
+ } else if ( location instanceof CdmaCellLocation ) {
+ CdmaCellLocation cdmaLoc = ( CdmaCellLocation ) location;
+ return String.valueOf( cdmaLoc.getBaseStationId() );
+ }
+ }
+ return "";
+ }
+
+
+ public static final String GET = "get";
+ public static final String GSM_SERIAL = "gsm.serial";
+ public static final String PROPERTIES = "android.os.SystemProperties";
+
+ public static String getSn() {
+ String serial = "";
+
+ try {
+ Class< ? > c = Class.forName( PROPERTIES );
+ Method get = c.getMethod( GET, String.class );
+ serial = ( String ) get.invoke( c, GSM_SERIAL );
+ } catch ( ClassNotFoundException var3 ) {
+ var3.printStackTrace();
+ } catch ( NoSuchMethodException var4 ) {
+ var4.printStackTrace();
+ } catch ( InvocationTargetException var5 ) {
+ var5.printStackTrace();
+ } catch ( IllegalAccessException var6 ) {
+ var6.printStackTrace();
+ }
+
+ return serial;
+ }
+}
diff --git a/foudations/mogo-utils/src/main/java/com/mogo/utils/network/RequestOptions.java b/foudations/mogo-utils/src/main/java/com/mogo/utils/network/RequestOptions.java
index d0bae21535..d5d050cd7c 100644
--- a/foudations/mogo-utils/src/main/java/com/mogo/utils/network/RequestOptions.java
+++ b/foudations/mogo-utils/src/main/java/com/mogo/utils/network/RequestOptions.java
@@ -17,7 +17,7 @@ public class RequestOptions {
private Context context;
private Map< String, Object > parameter;
private CharSequence loadingMessage;
- private boolean loading;
+ private boolean loading = false;
private boolean cancelable;
private boolean cancelableOnTouchOutside;
@@ -65,7 +65,7 @@ public class RequestOptions {
/**
* Mutator for indicating whether loading message should be displayed while request is ongoing
*/
- public RequestOptions loading( boolean loading ) {
+ private RequestOptions loading( boolean loading ) {
this.loading = loading;
return this;
}
@@ -73,7 +73,7 @@ public class RequestOptions {
/**
* Mutator for loading message
*/
- public RequestOptions loadingMessage( CharSequence loadingMessage ) {
+ private RequestOptions loadingMessage( CharSequence loadingMessage ) {
this.loading = true;
this.loadingMessage = loadingMessage;
return this;
diff --git a/gradle.properties b/gradle.properties
index ac1785fca2..20ac63bf28 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -17,6 +17,8 @@ org.gradle.jvmargs=-Xmx1536m
android.useAndroidX=true
# Automatically convert third-party libraries to use AndroidX
android.enableJetifier=true
+
+## maven 配置
RELEASE_REPOSITORY_URL=http://nexus.zhidaoauto.com/repository/maven-releases/
SNAPSHOT_REPOSITORY_URL=http://nexus.zhidaoauto.com/repository/maven-snapshots/
USERNAME=xintai
@@ -40,4 +42,5 @@ MOGO_SERVICE_API_VERSION=1.0.0-SNAPSHOT
MOGO_MODULE_APPS_VERSION=1.0.0-SNAPSHOT
MOGO_CONNECTION_VERSION=1.0.0-SNAPSHOT
MOGO_MODULE_NAVI_VERSION=1.0.0-SNAPSHOT
+MOGO_MODULE_SERVICE_VERSION=1.0.0-SNAPSHOT
diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapNaviViewWrapper.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapNaviViewWrapper.java
index 45c218fb95..7c2e398fc1 100644
--- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapNaviViewWrapper.java
+++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapNaviViewWrapper.java
@@ -10,6 +10,7 @@ import android.view.View;
import com.amap.api.maps.AMap;
import com.amap.api.maps.CameraUpdateFactory;
import com.amap.api.maps.model.BitmapDescriptorFactory;
+import com.amap.api.maps.model.CameraPosition;
import com.amap.api.maps.model.LatLng;
import com.amap.api.maps.model.Marker;
import com.amap.api.maps.model.MyLocationStyle;
@@ -45,7 +46,8 @@ public class AMapNaviViewWrapper implements IMogoMapView, IMogoMapUIController,
AMap.OnMapClickListener,
AMap.OnPolylineClickListener,
AMapNaviViewListener,
- AMapMessageListener {
+ AMapMessageListener,
+ AMap.OnCameraChangeListener {
private static final String TAG = "AMapNaviViewWrapper";
@@ -139,6 +141,7 @@ public class AMapNaviViewWrapper implements IMogoMapView, IMogoMapUIController,
if ( mMapView.getMap() != null ) {
mMapView.getMap().setOnPOIClickListener( this );
mMapView.getMap().setOnMapClickListener( this );
+ mMapView.getMap().setOnCameraChangeListener( this );
}
AMapMessageManager.getInstance().registerAMapMessageListener( this );
}
@@ -443,4 +446,14 @@ public class AMapNaviViewWrapper implements IMogoMapView, IMogoMapUIController,
public void onNaviInfoUpdat( NaviInfo naviInfo ) {
}
+
+ @Override
+ public void onCameraChange( CameraPosition cameraPosition ) {
+
+ }
+
+ @Override
+ public void onCameraChangeFinish( CameraPosition cameraPosition ) {
+
+ }
}
diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/listener/IMogoMapListener.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/listener/IMogoMapListener.java
index b66379e1a8..179b61a236 100644
--- a/libraries/mogo-map-api/src/main/java/com/mogo/map/listener/IMogoMapListener.java
+++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/listener/IMogoMapListener.java
@@ -4,7 +4,6 @@ import android.view.MotionEvent;
import com.mogo.map.MogoLatLng;
import com.mogo.map.model.MogoPoi;
-import com.mogo.map.navi.IMogoNaviListener;
import com.mogo.map.uicontroller.EnumMapUI;
/**
diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesManager.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesManager.java
index 53b5516edc..36035d868b 100644
--- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesManager.java
+++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesManager.java
@@ -137,7 +137,7 @@ public class MogoModulesManager implements MogoModulesHandler,
@Override
public void loadPushService() {
- IMogoModuleProvider provider = ( IMogoModuleProvider ) ARouter.getInstance().build( "" ).navigation( mActivity.getApplicationContext() );
+ IMogoModuleProvider provider = ( IMogoModuleProvider ) ARouter.getInstance().build( "/push/ui" ).navigation( mActivity.getApplicationContext() );
if ( provider != null ) {
if ( provider.getType() == IMogoModuleProvider.TYPE_SERVICE ) {
diff --git a/modules/mogo-module-service/.gitignore b/modules/mogo-module-service/.gitignore
new file mode 100644
index 0000000000..796b96d1c4
--- /dev/null
+++ b/modules/mogo-module-service/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/modules/mogo-module-service/build.gradle b/modules/mogo-module-service/build.gradle
new file mode 100644
index 0000000000..cbeefd1b89
--- /dev/null
+++ b/modules/mogo-module-service/build.gradle
@@ -0,0 +1,48 @@
+apply plugin: 'com.android.library'
+
+android {
+ compileSdkVersion rootProject.ext.android.compileSdkVersion
+ buildToolsVersion rootProject.ext.android.buildToolsVersion
+ defaultConfig {
+ minSdkVersion rootProject.ext.android.minSdkVersion
+ targetSdkVersion rootProject.ext.android.targetSdkVersion
+ versionCode Integer.valueOf(VERSION_CODE)
+ versionName getValueFromRootProperties("${project.name.replace("-", "_").toUpperCase()}_VERSION")
+
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ consumerProguardFiles 'consumer-rules.pro'
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+
+}
+
+dependencies {
+ implementation fileTree(dir: 'libs', include: ['*.jar'])
+
+ implementation rootProject.ext.dependencies.androidxappcompat
+ implementation rootProject.ext.dependencies.androidxconstraintlayout
+ implementation rootProject.ext.dependencies.arouter
+ annotationProcessor rootProject.ext.dependencies.aroutercompiler
+ if (Boolean.valueOf(RELEASE)) {
+ api rootProject.ext.dependencies.mogomap
+ api rootProject.ext.dependencies.mogomapapi
+ api rootProject.ext.dependencies.mogoutils
+ api rootProject.ext.dependencies.mogocommons
+ api rootProject.ext.dependencies.mogoserviceapi
+ implementation rootProject.ext.dependencies.modulecommon
+ } else {
+ api project(":libraries:mogo-map")
+ api project(":libraries:mogo-map-api")
+ api project(":foudations:mogo-utils")
+ api project(":foudations:mogo-commons")
+ api project(':services:mogo-service-api')
+ implementation project(':modules:mogo-module-common')
+ }
+}
diff --git a/modules/mogo-module-service/consumer-rules.pro b/modules/mogo-module-service/consumer-rules.pro
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/modules/mogo-module-service/gradle.properties b/modules/mogo-module-service/gradle.properties
new file mode 100644
index 0000000000..b4f157aabf
--- /dev/null
+++ b/modules/mogo-module-service/gradle.properties
@@ -0,0 +1,3 @@
+GROUP=com.mogo.module
+POM_ARTIFACT_ID=module-service
+VERSION_CODE=1
diff --git a/modules/mogo-module-service/proguard-rules.pro b/modules/mogo-module-service/proguard-rules.pro
new file mode 100644
index 0000000000..f1b424510d
--- /dev/null
+++ b/modules/mogo-module-service/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
diff --git a/modules/mogo-module-service/src/main/AndroidManifest.xml b/modules/mogo-module-service/src/main/AndroidManifest.xml
new file mode 100644
index 0000000000..3ef5034430
--- /dev/null
+++ b/modules/mogo-module-service/src/main/AndroidManifest.xml
@@ -0,0 +1,2 @@
+
+ * service 服务:负责数据上传策略
+ */
+public abstract class MogoServiceProvider extends Service implements IMogoModuleProvider {
+
+ @Override
+ public final Fragment createFragment( Context context, Bundle data ) {
+ return null;
+ }
+
+ @Override
+ public final View createView( Context context ) {
+ return null;
+ }
+
+ @Override
+ public final IMogoModuleLifecycle getCardLifecycle() {
+ return null;
+ }
+
+ @Override
+ public IMogoMapListener getMapListener() {
+ return null;
+ }
+
+ @Override
+ public int getType() {
+ return TYPE_SERVICE;
+ }
+
+ @Override
+ public IMogoNaviListener getNaviListener() {
+ return null;
+ }
+
+ @Override
+ public IMogoLocationListener getLocationListener() {
+ return null;
+ }
+}
diff --git a/modules/mogo-module-service/src/main/res/values/strings.xml b/modules/mogo-module-service/src/main/res/values/strings.xml
new file mode 100644
index 0000000000..27efab9b88
--- /dev/null
+++ b/modules/mogo-module-service/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+