Merge branch 'dev_arch_opt_3.0' into dev_robobus-m1-p-app-module_1.0.0_230112_1.0.0

# Conflicts:
#	app/productFlavors/fMultiDisplayOchBus.gradle
#	app/productFlavors/fMultiDisplayOchTaxi.gradle
#	app/productFlavors/fOchBus.gradle
#	app/productFlavors/fOchBusPassengerM1.gradle
#	app/productFlavors/fOchSweeper.gradle
#	app/productFlavors/fOchTaxi.gradle
#	app/productFlavors/fOchTaxiPassenger.gradle
This commit is contained in:
wangmingjun
2023-02-09 16:04:05 +08:00
16 changed files with 194 additions and 36 deletions

View File

@@ -20,7 +20,12 @@ project.android.productFlavors {
// 车机类型主要用于区分自研车机还是别人家的车机自研车机类型为0
buildConfigField 'int', 'CAR_MACHINE_TYPE', '2'
//高德地图鉴权信息
manifestPlaceholders = [AMAP_API_VALUE: rootProject.ext.android.fLauncherAmapApiValue, CHANNEL_VALUE: "fOchBus",ACTIVITY_ROOT:true]
manifestPlaceholders = [
AMAP_API_VALUE : rootProject.ext.android.fLauncherAmapApiValue,
CHANNEL_VALUE : "fOchBus",
ACTIVITY_ROOT : true,
SCREEN_ORIENTATION: "landscape"
]
// 是否需要实时上报坐标
buildConfigField 'boolean', 'IS_NEED_UPLOAD_COORDINATES_IN_TIME', 'true'

View File

@@ -17,8 +17,17 @@ project.android.productFlavors {
// 车机类型主要用于区分自研车机还是别人家的车机自研车机类型为0
buildConfigField 'int', 'CAR_MACHINE_TYPE', '2'
//高德地图鉴权信息
manifestPlaceholders = [AMAP_API_VALUE: rootProject.ext.android.fLauncherAmapApiValue, CHANNEL_VALUE: "fOchTaxi",ACTIVITY_ROOT:true]
// 配置AndroidManifest.xml中用到的参数
manifestPlaceholders = [
// 高德地图鉴权信息
AMAP_API_VALUE : rootProject.ext.android.fLauncherAmapApiValue,
// BUGLY_APP_CHANNEL
CHANNEL_VALUE : "fOchTaxi",
// 在启动的时候把Task给清空
ACTIVITY_ROOT : true,
// Activity的朝向
SCREEN_ORIENTATION: "landscape"
]
// 是否需要实时上报坐标
buildConfigField 'boolean', 'IS_NEED_UPLOAD_COORDINATES_IN_TIME', 'true'

View File

@@ -18,8 +18,17 @@ project.android.productFlavors {
// 车机类型主要用于区分自研车机还是别人家的车机自研车机类型为0
buildConfigField 'int', 'CAR_MACHINE_TYPE', '2'
//高德地图鉴权信息
manifestPlaceholders = [AMAP_API_VALUE: rootProject.ext.android.fLauncherAmapApiValue, CHANNEL_VALUE: "fOchBus",ACTIVITY_ROOT:true]
// 配置AndroidManifest.xml中用到的参数
manifestPlaceholders = [
// 高德地图鉴权信息
AMAP_API_VALUE : rootProject.ext.android.fLauncherAmapApiValue,
// BUGLY_APP_CHANNEL
CHANNEL_VALUE : "fOchBus",
// 在启动的时候把Task给清空
ACTIVITY_ROOT : true,
// Activity的朝向
SCREEN_ORIENTATION: "landscape"
]
// 是否需要实时上报坐标
buildConfigField 'boolean', 'IS_NEED_UPLOAD_COORDINATES_IN_TIME', 'true'

View File

@@ -17,8 +17,18 @@ project.android.productFlavors {
// 车机类型主要用于区分自研车机还是别人家的车机自研车机类型为0
buildConfigField 'int', 'CAR_MACHINE_TYPE', '2'
//高德地图鉴权信息
manifestPlaceholders = [AMAP_API_VALUE: rootProject.ext.android.fLauncherAmapApiValue, CHANNEL_VALUE: "fOchBusPassenger",ACTIVITY_ROOT:true]
// 配置AndroidManifest.xml中用到的参数
manifestPlaceholders = [
// 高德地图鉴权信息
AMAP_API_VALUE : rootProject.ext.android.fLauncherAmapApiValue,
// BUGLY_APP_CHANNEL
CHANNEL_VALUE : "fOchBusPassenger",
// 在启动的时候把Task给清空
ACTIVITY_ROOT : true,
// Activity的朝向
SCREEN_ORIENTATION: "landscape"
]
// 是否需要实时上报坐标
buildConfigField 'boolean', 'IS_NEED_UPLOAD_COORDINATES_IN_TIME', 'true'

View File

@@ -17,8 +17,18 @@ project.android.productFlavors {
// 车机类型主要用于区分自研车机还是别人家的车机自研车机类型为0
buildConfigField 'int', 'CAR_MACHINE_TYPE', '2'
//高德地图鉴权信息
manifestPlaceholders = [AMAP_API_VALUE: rootProject.ext.android.fLauncherAmapApiValue, CHANNEL_VALUE: "fOchSweeper",ACTIVITY_ROOT:true]
// 配置AndroidManifest.xml中用到的参数
manifestPlaceholders = [
// 高德地图鉴权信息
AMAP_API_VALUE : rootProject.ext.android.fLauncherAmapApiValue,
// BUGLY_APP_CHANNEL
CHANNEL_VALUE : "fOchSweeper",
// 在启动的时候把Task给清空
ACTIVITY_ROOT : true,
// Activity的朝向
SCREEN_ORIENTATION: "landscape"
]
// 是否需要实时上报坐标
buildConfigField 'boolean', 'IS_NEED_UPLOAD_COORDINATES_IN_TIME', 'true'

View File

@@ -18,8 +18,18 @@ project.android.productFlavors {
// 车机类型主要用于区分自研车机还是别人家的车机自研车机类型为0
buildConfigField 'int', 'CAR_MACHINE_TYPE', '2'
//高德地图鉴权信息
manifestPlaceholders = [AMAP_API_VALUE: rootProject.ext.android.fLauncherAmapApiValue, CHANNEL_VALUE: "fOchTaxi",ACTIVITY_ROOT:true]
// 配置AndroidManifest.xml中用到的参数
manifestPlaceholders = [
// 高德地图鉴权信息
AMAP_API_VALUE : rootProject.ext.android.fLauncherAmapApiValue,
// BUGLY_APP_CHANNEL
CHANNEL_VALUE : "fOchTaxi",
// 在启动的时候把Task给清空
ACTIVITY_ROOT : true,
// Activity的朝向
SCREEN_ORIENTATION: "landscape"
]
// 是否需要实时上报坐标
buildConfigField 'boolean', 'IS_NEED_UPLOAD_COORDINATES_IN_TIME', 'true'

View File

@@ -17,8 +17,18 @@ project.android.productFlavors {
// 车机类型主要用于区分自研车机还是别人家的车机自研车机类型为0
buildConfigField 'int', 'CAR_MACHINE_TYPE', '2'
//高德地图鉴权信息
manifestPlaceholders = [AMAP_API_VALUE: rootProject.ext.android.fLauncherAmapApiValue, CHANNEL_VALUE: "fOchTaxiPassenger",ACTIVITY_ROOT:false]
// 配置AndroidManifest.xml中用到的参数
manifestPlaceholders = [
// 高德地图鉴权信息
AMAP_API_VALUE : rootProject.ext.android.fLauncherAmapApiValue,
// BUGLY_APP_CHANNEL
CHANNEL_VALUE : "fOchTaxiPassenger",
// 在启动的时候把Task给清空
ACTIVITY_ROOT : false,
// Activity的朝向
SCREEN_ORIENTATION: "landscape"
]
// 是否需要实时上报坐标
buildConfigField 'boolean', 'IS_NEED_UPLOAD_COORDINATES_IN_TIME', 'true'

View File

@@ -4,7 +4,7 @@ project.android.productFlavors {
externalNativeBuild {
ndk {
// 设置支持的SO库架构
abiFilters "armeabi-v7a", "arm64-v8a"
abiFilters "armeabi-v7a", "arm64-v8a"
}
}
minSdkVersion rootProject.ext.android.minSdkVersionPadLenovo
@@ -15,8 +15,17 @@ project.android.productFlavors {
// 车机类型主要用于区分自研车机还是别人家的车机自研车机类型为0
buildConfigField 'int', 'CAR_MACHINE_TYPE', '2'
// 高德地图鉴权信息
manifestPlaceholders = [AMAP_API_VALUE: rootProject.ext.android.fLauncherAmapApiValue, CHANNEL_VALUE: "fPadLenovo",ACTIVITY_ROOT:true]
// 配置AndroidManifest.xml中用到的参数
manifestPlaceholders = [
// 高德地图鉴权信息
AMAP_API_VALUE : rootProject.ext.android.fLauncherAmapApiValue,
// BUGLY_APP_CHANNEL
CHANNEL_VALUE : "fPadLenovo",
// 在启动的时候把Task给清空
ACTIVITY_ROOT : true,
// Activity的朝向
SCREEN_ORIENTATION: "landscape"
]
// 是否需要实时上报坐标
buildConfigField 'boolean', 'IS_NEED_UPLOAD_COORDINATES_IN_TIME', 'true'

View File

@@ -24,3 +24,4 @@
- mogo-core-res程序中涉及到的图片及布局资源同一管理并通过设置不同的目录指定是那个模块的资源这里只存放公共资源图片布局动画等
- mogo-core-utils基于成熟的工具类开源框架下沉的这里可以增添针对我们业务上的一些工具类
- MultiDisplayUtils :多屏幕管理工具

View File

@@ -0,0 +1,16 @@
## 多屏幕场景
```java
// 在第二个屏幕启动页面
MultiDisplayUtils.INSTANCE.startActWithSecond(
context,
VideoAdAtc.class);
```
```java
// 在指定屏幕启动页面
MultiDisplayUtils.INSTANCE.startActWithProcess(
1,
context,
VideoAdAtc.class);
```

View File

@@ -16,10 +16,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02Lis
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager
import com.mogo.eagle.core.function.call.obu.CallerObuLocationWGS84ListenerManager
import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr
import com.mogo.eagle.core.utilcode.util.CoordinateTransform
import com.mogo.eagle.core.utilcode.util.FileUtils
import com.mogo.eagle.core.utilcode.util.TimeUtils
import com.mogo.eagle.core.utilcode.util.Utils
import com.mogo.eagle.core.utilcode.util.*
import com.mogo.support.obu.model.MogoObuHvBasicsData
import mogo.telematics.pad.MessagePad

View File

@@ -42,7 +42,7 @@
android:launchMode="singleTop"
android:resizeableActivity="false"
android:resumeWhilePausing="true"
android:screenOrientation="landscape"
android:screenOrientation="${SCREEN_ORIENTATION}"
android:stateNotNeeded="true"
android:theme="@style/Main"
android:windowSoftInputMode="adjustPan|stateHidden">
@@ -67,7 +67,6 @@
<activity
android:name="com.mogo.eagle.core.function.main.PassengerLauncherActivity"
android:clearTaskOnLaunch="${ACTIVITY_ROOT}"
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|screenLayout|fontScale|uiMode|orientation|screenSize|smallestScreenSize"
android:enabled="true"
android:exported="true"
@@ -99,7 +98,6 @@
<activity
android:name="com.mogo.eagle.core.function.main.VideoAdAtc"
android:clearTaskOnLaunch="${ACTIVITY_ROOT}"
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|screenLayout|fontScale|uiMode|orientation|screenSize|smallestScreenSize"
android:enabled="true"
android:exported="true"

View File

@@ -45,7 +45,7 @@ import java.util.Timer;
import java.util.TimerTask;
/**
* 针对作为Launcher的情况做个性化操作
* 针对作为Launcher的情况做个性化操作 TODO 测试用的,可删除
*
* @author tongchenfei
*/

View File

@@ -7,7 +7,7 @@ import com.mogo.eagle.core.utilcode.util.BarUtils
import com.mogo.eagle.core.widget.TextureVideoView
/**
* 视频广告
* 视频广告 TODO 测试用的,可删除
*/
class VideoAdAtc : AppCompatActivity() {

View File

@@ -17,11 +17,16 @@ import android.os.Build;
import android.provider.Settings;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.Log;
import androidx.annotation.RequiresApi;
import androidx.annotation.RequiresPermission;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.Method;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
@@ -547,17 +552,85 @@ public final class DeviceUtils {
/**
* 中科创达 EB5获取SN的方法
* getprop persist.device.sn
* ZTS46S10009S
* 获取设备SN的方法
*
* @return 当前EB5设备SN
* @return 通过读取 getprop 的方式
*/
public static String getEB5DevicesSN() {
ShellUtils.CommandResult result = UtilsBridge.execCmd("adb shell getprop persist.device.sn", false);
if (result.result == 0) {
LogUtils.d("", result.toString());
public static String getSerialNumber() {
String serial = "";
try {
Class<?> c = Class.forName("android.os.SystemProperties");
Method get = c.getMethod("get", String.class);
// 获取序列号大多数机器在不root情况下获取不到
serial = (String) get.invoke(c, "ro.serialno");
if (TextUtils.isEmpty(serial)) {
serial = (String) get.invoke(c, "ro.boot.serialno");
}
if (TextUtils.isEmpty(serial)) {
// 分体机 SN
serial = (String) get.invoke(c, "gsm.serial");
}
if (TextUtils.isEmpty(serial)) {
// 中科创达 EB5获取SN
serial = (String) get.invoke(c, "persist.device.sn");
}
if (TextUtils.isEmpty(serial)) {
// 联想PAD 获取SN
serial = (String) get.invoke(c, "ro.odm.lenovo.gsn");
}
} catch (Exception e) {
e.printStackTrace();
}
return "02:00:00:00:00:00";
return serial;
}
/**
* 获取 机器型号
*
* @return 机器型号
*/
public static String getProductModel() {
String productModel = "null";
try {
Class<?> c = Class.forName("android.os.SystemProperties");
Method get = c.getMethod("get", String.class);
// 获取序列号大多数机器在不root情况下获取不到
productModel = (String) get.invoke(c, "ro.product.model");
if (TextUtils.isEmpty(productModel)) {
productModel = (String) get.invoke(c, "ro.product.odm.model");
}
if (TextUtils.isEmpty(productModel)) {
productModel = (String) get.invoke(c, "ro.product.vendor.model");
}
} catch (Exception e) {
e.printStackTrace();
}
return productModel;
}
private static String getSerialnoNumbers() {
final String serialnoStr = "[ro.boot.serialno]";
try {
Process p = Runtime.getRuntime().exec("getprop");
p.waitFor();
BufferedReader stdInput = new BufferedReader(new InputStreamReader(
p.getInputStream()));
String temp = "";
while ((temp = stdInput.readLine()) != null) {
Log.i("getSerialnoNumbers", temp);
if (temp.contains(serialnoStr)) {
temp.replaceAll(" ", "");
int index = temp.indexOf(serialnoStr);
temp = temp.substring(index + 20);
temp = temp.substring(1, temp.length() - 1);
Log.d("getSerialnoNumbers", temp);
return temp;
}
}
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
return serialnoStr;
}
}

View File

@@ -27,14 +27,14 @@ object MultiDisplayUtils {
fun getMultiDisplay(context: Context): Array<out Display> {
// 多次创建副屏 则副屏的id都是增加的所以不一定是1这里还是获取一下
val displayManager =
context.getSystemService(AppCompatActivity.DISPLAY_SERVICE) as DisplayManager
context.getSystemService(AppCompatActivity.DISPLAY_SERVICE) as DisplayManager
return displayManager.displays
}
/**
* 在指定ID的屏幕打开Activity当前应用的当前进程
* @param context
* @param launchDisplayId 指定屏幕ID
* @param activity 要在第二个屏幕启动的页面
*/
fun startActWithSecond(context: Context, activity: Class<*>) {
val launchDisplayId: Int
@@ -60,6 +60,7 @@ object MultiDisplayUtils {
* 在指定ID的屏幕打开Activity当前应用的当前进程
* @param context
* @param launchDisplayId 指定屏幕ID
* @param activity 要在副屏幕启动的页面
*/
fun startActWithProcess(context: Context, launchDisplayId: Int, activity: Class<*>) {
// 要加上Intent.FLAG_ACTIVITY_NEW_TASK