From f19c3c2ca69a038cc386b2711b8d669e4cdef734 Mon Sep 17 00:00:00 2001 From: wangmingjun Date: Tue, 30 Aug 2022 14:43:32 +0800 Subject: [PATCH 01/22] =?UTF-8?q?[2.10.0]=20=E5=8F=B8=E6=9C=BA=E7=AB=AF?= =?UTF-8?q?=E5=87=BA=E8=BD=A6/=E6=94=B6=E8=BD=A6=E7=82=B9=E5=87=BB?= =?UTF-8?q?=E6=95=88=E6=9E=9C=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../function/hmi/ui/tools/BusOperationView.kt | 4 ++-- .../icon_bus_operation_status.png | Bin 0 -> 16880 bytes .../icon_bus_operation_status_un.png | Bin 0 -> 20471 bytes .../icon_bus_operation_status.png | Bin 0 -> 16880 bytes .../icon_bus_operation_status_un.png | Bin 0 -> 20471 bytes .../icon_bus_operation_status.png | Bin 0 -> 16880 bytes .../icon_bus_operation_status_un.png | Bin 0 -> 20471 bytes .../res/drawable/bus_operation_status_bg.xml | 13 ------------- .../main/res/layout/view_och_bus_operation.xml | 7 ++++--- 9 files changed, 6 insertions(+), 18 deletions(-) create mode 100755 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi-2560x1440/icon_bus_operation_status.png create mode 100755 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi-2560x1440/icon_bus_operation_status_un.png create mode 100755 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_bus_operation_status.png create mode 100755 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_bus_operation_status_un.png create mode 100755 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_bus_operation_status.png create mode 100755 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_bus_operation_status_un.png delete mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bus_operation_status_bg.xml diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/BusOperationView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/BusOperationView.kt index 69c93a4e25..bfc83e98b9 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/BusOperationView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/BusOperationView.kt @@ -31,9 +31,9 @@ class BusOperationView @JvmOverloads constructor( override fun changerOperationStatus(isOut: Boolean) { if (isOut){ - ochBusOperationStatusCTV.setText("收车") + ochBusOperationStatusCTV.text = "收车" }else{ - ochBusOperationStatusCTV.setText("出车") + ochBusOperationStatusCTV.text = "出车" } } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi-2560x1440/icon_bus_operation_status.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi-2560x1440/icon_bus_operation_status.png new file mode 100755 index 0000000000000000000000000000000000000000..3bb32ec0aaf6e86056f31df56bde177ac07763ef GIT binary patch literal 16880 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 literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi-2560x1440/icon_bus_operation_status_un.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi-2560x1440/icon_bus_operation_status_un.png new file mode 100755 index 0000000000000000000000000000000000000000..de0935fe4dc5014344a553327023890b4644b07b GIT binary patch literal 20471 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 literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_bus_operation_status_un.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_bus_operation_status_un.png new file mode 100755 index 0000000000000000000000000000000000000000..de0935fe4dc5014344a553327023890b4644b07b GIT binary patch literal 20471 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 literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_bus_operation_status_un.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_bus_operation_status_un.png new file mode 100755 index 0000000000000000000000000000000000000000..de0935fe4dc5014344a553327023890b4644b07b GIT binary patch literal 20471 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 - - - - \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_och_bus_operation.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_och_bus_operation.xml index 34d3091b0b..267d9a844a 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_och_bus_operation.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_och_bus_operation.xml @@ -7,6 +7,7 @@ android:layout_marginTop="40px" android:paddingBottom="40px" android:visibility="gone" + tools:visibility="visible" tools:ignore="DuplicateIds"> @@ -33,12 +35,11 @@ android:layout_below="@+id/tv_bus_operation_title" android:layout_marginStart="113px" android:layout_marginTop="40px" - android:background="@drawable/bus_operation_status_bg" - android:elevation="@dimen/dp_10" + android:background="@drawable/bus_operation_status_bg_selector1" android:gravity="center" android:text="出车" android:textAlignment="center" - android:textColor="@drawable/bus_autopilot_text_color_selector" + android:textColor="@color/bus_autopilot_text_color_normal" android:textSize="@dimen/module_mogo_och_autopilot_status_text_size" android:textStyle="bold" /> \ No newline at end of file From af500160ca6477e809997419ad1847e0eb1d9215 Mon Sep 17 00:00:00 2001 From: wangmingjun Date: Tue, 30 Aug 2022 14:45:03 +0800 Subject: [PATCH 02/22] =?UTF-8?q?[2.10.0]=20=E5=8F=B8=E6=9C=BA=E7=AB=AF?= =?UTF-8?q?=E5=87=BA=E8=BD=A6/=E6=94=B6=E8=BD=A6=E7=82=B9=E5=87=BB?= =?UTF-8?q?=E6=95=88=E6=9E=9C=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../res/drawable/bus_operation_status_bg_selector1.xml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100755 core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bus_operation_status_bg_selector1.xml diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bus_operation_status_bg_selector1.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bus_operation_status_bg_selector1.xml new file mode 100755 index 0000000000..6553f76cc4 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bus_operation_status_bg_selector1.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file From 6d6b14f36e1d0515f6b9c428ee2b077400802dc2 Mon Sep 17 00:00:00 2001 From: zhongchao Date: Tue, 30 Aug 2022 14:59:16 +0800 Subject: [PATCH 03/22] fix bug of httpdns init twice --- .../mogo/launcher/stageone/HttpDnsStartUp.kt | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/mogo/launcher/stageone/HttpDnsStartUp.kt b/app/src/main/java/com/mogo/launcher/stageone/HttpDnsStartUp.kt index d381a07a1d..6b4cd129b3 100644 --- a/app/src/main/java/com/mogo/launcher/stageone/HttpDnsStartUp.kt +++ b/app/src/main/java/com/mogo/launcher/stageone/HttpDnsStartUp.kt @@ -61,6 +61,8 @@ class HttpDnsStartUp : AndroidStartup() { private var context: Context? = null + private var gotToken = false + override fun callCreateOnMainThread() = true override fun waitOnMainThread() = false @@ -198,15 +200,19 @@ class HttpDnsStartUp : AndroidStartup() { MoGoAiCloudClient.getInstance().init(context, clientConfig).addTokenCallbacks( object : IMoGoTokenCallback { override fun onTokenGot(token: String, sn: String) { - CallerLogger.d(SceneConstant.M_HMI + TAG, "onTokenGot ") clientConfig.token = token - CallerCloudListenerManager.invokeCloudTokenGot(token) - // 异步初始化NetConfig - asyncInit() - // HttpDns ttl回调 --- socketTTL - registerSocketHttpDnsTTL(HostConst.SOCKET_CENTER_DOMAIN) - // 开启每5s/次定位上报 - uploadLocPerFiveSecond() + // 由于存在token过期问题,在更新后会回调至此处,增加二次判定 + if(!gotToken){ + CallerLogger.d(SceneConstant.M_MAP + TAG, "onTokenGot ") + CallerCloudListenerManager.invokeCloudTokenGot(token) + // 异步初始化NetConfig + asyncInit() + // HttpDns ttl回调 --- socketTTL + registerSocketHttpDnsTTL(HostConst.SOCKET_CENTER_DOMAIN) + // 开启每5s/次定位上报 + uploadLocPerFiveSecond() + gotToken = true + } } override fun onError(code: Int, msg: String) { From 437535837ee1aeea8302a2ec60a28db4752f2ca2 Mon Sep 17 00:00:00 2001 From: chenfufeng Date: Thu, 25 Aug 2022 17:04:40 +0800 Subject: [PATCH 04/22] =?UTF-8?q?[Feat]=E6=96=B0=E5=A2=9E=E6=80=A7?= =?UTF-8?q?=E8=83=BD=E7=9B=91=E6=8E=A7=E5=B7=A5=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 3 + app/src/main/AndroidManifest.xml | 9 + .../com/mogo/launcher/MogoApplication.java | 5 - config.gradle | 6 +- .../mogo-core-function-devatools/build.gradle | 1 - .../DevaToolsProvider.kt | 10 + .../monitor/CpuMonitor.kt | 109 +++++++ .../monitor/MemMonitor.kt | 121 +++++++ .../monitor/MonitorManager.kt | 64 ++++ .../monitor/db/CpuInfo.kt | 18 ++ .../monitor/db/MemInfo.kt | 27 ++ .../monitor/db/MonitorDao.kt | 24 ++ .../monitor/db/MonitorDb.kt | 27 ++ .../monitor/remote/IUserInterface.java | 17 + .../monitor/remote/RemoteUserServiceImp.java | 141 ++++++++ .../monitor/remote/UserServiceManager.kt | 182 +++++++++++ .../monitor/utils/CpuUtils.java | 298 +++++++++++++++++ .../monitor/utils/DoubleUtils.kt | 44 +++ .../monitor/utils/FileUtil.kt | 304 ++++++++++++++++++ .../monitor/utils/HookUtils.java | 54 ++++ .../monitor/utils/MemUtils.java | 180 +++++++++++ .../core/function/hmi/ui/MoGoHmiFragment.kt | 15 +- .../function/main/MainMoGoApplication.java | 17 + .../api/devatools/IDevaToolsProvider.kt | 4 + .../call/devatools/CallerDevaToolsManager.kt | 8 + 25 files changed, 1678 insertions(+), 10 deletions(-) create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/CpuMonitor.kt create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/MemMonitor.kt create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/MonitorManager.kt create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/db/CpuInfo.kt create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/db/MemInfo.kt create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/db/MonitorDao.kt create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/db/MonitorDb.kt create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/remote/IUserInterface.java create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/remote/RemoteUserServiceImp.java create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/remote/UserServiceManager.kt create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/utils/CpuUtils.java create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/utils/DoubleUtils.kt create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/utils/FileUtil.kt create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/utils/HookUtils.java create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/utils/MemUtils.java diff --git a/app/build.gradle b/app/build.gradle index ead027397f..ba5a04b45f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -243,6 +243,9 @@ dependencies { debugImplementation rootProject.ext.dependencies.debugleakcanary releaseImplementation rootProject.ext.dependencies.releaseleakcanary implementation rootProject.ext.dependencies.android_start_up + +// // 暂不使用Shizuku-API +// implementation rootProject.ext.dependencies.shizuku_provider if (Boolean.valueOf(USE_MAVEN_PACKAGE)) { implementation rootProject.ext.dependencies.ttspad implementation rootProject.ext.dependencies.mogo_core_function_hmi diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6b757d0af8..f4b753b2c2 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -31,6 +31,15 @@ android:value="android.startup.provider.config" /> + + + + + + + + + () + } + + private val dateFormat by lazy { + SimpleDateFormat("yyyy-MM-dd HH:mm:ss") + } + + companion object { + private const val TAG = "CpuMonitor" + const val INTERVAL_PERF = 1000L + + @SuppressLint("StaticFieldLeak") + @Volatile + private var sInstance: CpuMonitor? = null + fun getInstance(context: Context): CpuMonitor? { + if (sInstance == null) { + synchronized(CpuMonitor::class.java) { + if (sInstance == null) { + sInstance = CpuMonitor(context) + } + } + } + return sInstance + } + } + + /** + * 请先运行Shizuku的服务 + */ + @Synchronized + fun startRun() { + if (!isRunning) { + Thread(CpuRunnable()).start() + isRunning = true + } + } + + @Synchronized + fun isStarted() = isRunning + + @Synchronized + fun stop() { + isRunning = false + } + + fun saveCpuInfos() { + synchronized(this) { + MonitorDb.getDb(context).monitorDao().saveAllCpuInfos(*cpuInfoList.toTypedArray()) + cpuInfoList.clear() + } + } + + private fun getCpuValue(): Double { + var value = 0.0 + try { + // 应用获取当前进程CPU使用时间,Binder服务端获取系统CPU时间,中间用耗时,不如使用top命令 +// value = UserServiceManager.getCpuUsage(Process.myPid()) + value = CpuUtils.getCpuUsageForO() + return value + } catch (e: Exception) { + Log.e(TAG, e.message ?: "未知异常!") + } + return value + } + + inner class CpuRunnable : Runnable { + override fun run() { + while (isRunning) { + val cpu = getCpuValue() + if (cpu > 0) { + synchronized(this@CpuMonitor) { + cpuInfoList.add( + CpuInfo( + saveTime = dateFormat.format(System.currentTimeMillis()), + cpuPercent = cpu + ) + ) + } + } + try { + Thread.sleep(INTERVAL_PERF) + } catch (e: InterruptedException) { + e.printStackTrace() + } + } + } + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/MemMonitor.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/MemMonitor.kt new file mode 100644 index 0000000000..d712cfc73b --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/MemMonitor.kt @@ -0,0 +1,121 @@ +package com.zhjt.mogo_core_function_devatools.monitor + +import android.annotation.SuppressLint +import android.content.Context +import android.os.Process.myPid +import android.util.Log +import com.zhjt.mogo_core_function_devatools.monitor.db.MemInfo +import com.zhjt.mogo_core_function_devatools.monitor.db.MonitorDb +import com.zhjt.mogo_core_function_devatools.monitor.utils.HookUtils +import com.zhjt.mogo_core_function_devatools.monitor.utils.MemUtils +import java.text.SimpleDateFormat + +class MemMonitor private constructor(var context: Context) { + + var isRunning = false + + private val memInfoList by lazy { + ArrayList() + } + + private val dateFormat by lazy { + SimpleDateFormat("yyyy-MM-dd HH:mm:ss") + } + + companion object { + private const val TAG = "MemMonitor" + const val INTERVAL_PERF = 1000L + + @SuppressLint("StaticFieldLeak") + @Volatile + private var sInstance: MemMonitor? = null + fun getInstance(context: Context): MemMonitor? { + if (sInstance == null) { + synchronized(MemMonitor::class.java) { + if (sInstance == null) { + sInstance = MemMonitor(context) + } + } + } + return sInstance + } + } + + @Synchronized + fun startRun() { + if (!isRunning) { + Thread(MemoryRunnable()).start() + isRunning = true + } + } + + @Synchronized + fun isStarted() = isRunning + + @Synchronized + fun stop() { + isRunning = false + } + + fun saveMemInfos() { + synchronized(this) { + MonitorDb.getDb(context).monitorDao().saveAllMemInfos(*memInfoList.toTypedArray()) + memInfoList.clear() + } + } + + /** + * 单位MB + */ + private fun getMemoryValue(): Double { + var value = 0.0 + try { + value = MemUtils.getPssMemValue(context, intArrayOf(myPid())) + return value + } catch (e: Exception) { + Log.e(TAG, e.message ?: "未知异常!") + } + return value + } + + /** + * 单位MB + */ + private fun getMemoryArray(): DoubleArray { + var value = doubleArrayOf() + try { + value = MemUtils.getPssArray(context, intArrayOf(myPid())) + return value + } catch (e: Exception) { + Log.e(TAG, e.message ?: "未知异常!") + } + return value + } + + inner class MemoryRunnable : Runnable { + override fun run() { + while (isRunning) { + // 0: 总PSS,1: dalvik总Pss, 2: native总Pss, 3: other总Pss + val pssArray = getMemoryArray() + if (pssArray[0] > 0) { + synchronized(this@MemMonitor) { + memInfoList.add( + MemInfo( + saveTime = dateFormat.format(System.currentTimeMillis()), + totalPss = pssArray[0], + dalvikPss = pssArray[1], + nativePss = pssArray[2], + otherPss = pssArray[3] + ) + ) + } + } + try { + Thread.sleep(INTERVAL_PERF) + } catch (e: InterruptedException) { + e.printStackTrace() + } + } + } + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/MonitorManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/MonitorManager.kt new file mode 100644 index 0000000000..6e8564140a --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/MonitorManager.kt @@ -0,0 +1,64 @@ +package com.zhjt.mogo_core_function_devatools.monitor + +import android.annotation.SuppressLint +import android.content.Context +import android.os.Looper +import com.mogo.eagle.core.utilcode.util.ToastUtils +import java.util.* + +class MonitorManager private constructor(var context: Context) { + + private var timer: Timer? = null + + private var isStarted = false + + companion object { + @SuppressLint("StaticFieldLeak") + @Volatile + private var sInstance: MonitorManager? = null + fun getInstance(context: Context): MonitorManager? { + if (sInstance == null) { + synchronized(MonitorManager::class.java) { + if (sInstance == null) { + sInstance = MonitorManager(context) + } + } + } + return sInstance + } + } + + /** + * 主线程中执行 + */ + fun startMonitor() { + if (Thread.currentThread() == Looper.getMainLooper().thread) { + if (!isStarted) { + CpuMonitor.getInstance(context)?.startRun() + MemMonitor.getInstance(context)?.startRun() + if (timer == null) { + timer = Timer() + } + timer!!.schedule(object : TimerTask() { + override fun run() { + CpuMonitor.getInstance(context)?.saveCpuInfos() + MemMonitor.getInstance(context)?.saveMemInfos() + } + }, 1000, 60000) + isStarted = true + ToastUtils.showShort("性能监控启动成功!") + } else { + ToastUtils.showShort("性能监控已启动,请勿重复启动!") + } + } + } + + fun stopMonitor() { + CpuMonitor.getInstance(context)?.stop() + MemMonitor.getInstance(context)?.stop() + timer?.cancel() + timer = null + isStarted = false + ToastUtils.showShort("性能监控停止成功!") + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/db/CpuInfo.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/db/CpuInfo.kt new file mode 100644 index 0000000000..8a1c0aac96 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/db/CpuInfo.kt @@ -0,0 +1,18 @@ +package com.zhjt.mogo_core_function_devatools.monitor.db + +import androidx.room.ColumnInfo +import androidx.room.Entity +import androidx.room.PrimaryKey + +@Entity(tableName = "t_cpu") +data class CpuInfo( + @PrimaryKey(autoGenerate = true) + @ColumnInfo(name = "id") + val uuid: Long = 0, + + @ColumnInfo(name = "save_time") + val saveTime: String?, + + @ColumnInfo(name = "cpu_percent") + val cpuPercent: Double +) \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/db/MemInfo.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/db/MemInfo.kt new file mode 100644 index 0000000000..4861c56c47 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/db/MemInfo.kt @@ -0,0 +1,27 @@ +package com.zhjt.mogo_core_function_devatools.monitor.db + +import androidx.room.ColumnInfo +import androidx.room.Entity +import androidx.room.PrimaryKey + +@Entity(tableName = "t_memory") +data class MemInfo( + @PrimaryKey(autoGenerate = true) + @ColumnInfo(name = "id") + val uuid: Long = 0, + + @ColumnInfo(name = "save_time") + val saveTime: String, + + @ColumnInfo(name = "total_pss") + val totalPss: Double, + + @ColumnInfo(name = "dalvik_pss") + val dalvikPss: Double, + + @ColumnInfo(name = "native_pss") + val nativePss: Double, + + @ColumnInfo(name = "other_pss") + val otherPss: Double +) \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/db/MonitorDao.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/db/MonitorDao.kt new file mode 100644 index 0000000000..6eed72b029 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/db/MonitorDao.kt @@ -0,0 +1,24 @@ +package com.zhjt.mogo_core_function_devatools.monitor.db + +import androidx.room.* + +@Dao +interface MonitorDao { + @Insert(onConflict = OnConflictStrategy.REPLACE) + fun saveCpu(info: CpuInfo) + + @Insert(onConflict = OnConflictStrategy.REPLACE) + fun saveAllCpuInfos(vararg cpuInfo: CpuInfo) + + @Insert(onConflict = OnConflictStrategy.REPLACE) + fun saveMemory(info: MemInfo) + + @Insert(onConflict = OnConflictStrategy.REPLACE) + fun saveAllMemInfos(vararg memInfo: MemInfo) + + @Query("SELECT * FROM t_cpu WHERE id =:id") + fun getAllCPUById(id: Long): List + + @Query("SELECT * FROM t_memory WHERE id =:id") + fun getAllMemById(id: Long): List +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/db/MonitorDb.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/db/MonitorDb.kt new file mode 100644 index 0000000000..600198148a --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/db/MonitorDb.kt @@ -0,0 +1,27 @@ +package com.zhjt.mogo_core_function_devatools.monitor.db + +import android.content.Context +import androidx.room.Database +import androidx.room.Room +import androidx.room.RoomDatabase + +@Database(entities = [CpuInfo::class, MemInfo::class], version = 1, exportSchema = false) +abstract class MonitorDb: RoomDatabase() { + abstract fun monitorDao(): MonitorDao + + companion object { + const val INTERNAL_DB_NAME = "mogo_monitor.db" + + private var db: MonitorDb? = null + + @JvmStatic + fun getDb(context: Context): MonitorDb { + if (db == null) { + db = Room.databaseBuilder(context.applicationContext, MonitorDb::class.java, INTERNAL_DB_NAME) + .fallbackToDestructiveMigration() + .build() + } + return db!! + } + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/remote/IUserInterface.java b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/remote/IUserInterface.java new file mode 100644 index 0000000000..488228b6a2 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/remote/IUserInterface.java @@ -0,0 +1,17 @@ +package com.zhjt.mogo_core_function_devatools.monitor.remote; + +import android.os.IBinder; +import android.os.IInterface; +import android.os.RemoteException; + +public interface IUserInterface extends IInterface { + + String DESCRIPTOR = "rikka.shizuku.demo.IUserInterface"; + + int TRANSACTION_exec = IBinder.FIRST_CALL_TRANSACTION; + int TRANSACTION_getCpuUsage = IBinder.FIRST_CALL_TRANSACTION + 1; + + String exec(String cmd) throws RemoteException; + + double getCpuUsage(int pid) throws RemoteException; +} diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/remote/RemoteUserServiceImp.java b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/remote/RemoteUserServiceImp.java new file mode 100644 index 0000000000..d9f1d3487a --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/remote/RemoteUserServiceImp.java @@ -0,0 +1,141 @@ +package com.zhjt.mogo_core_function_devatools.monitor.remote; + +import android.os.Binder; +import android.os.IBinder; +import android.os.IInterface; +import android.os.Parcel; +import android.os.RemoteException; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.zhjt.mogo_core_function_devatools.monitor.utils.CpuUtils; + +/** + * Server端Binder类 + */ +public class RemoteUserServiceImp extends Binder implements IUserInterface { + + public RemoteUserServiceImp() { + attachInterface(this, DESCRIPTOR); + } + + public static IUserInterface asInterface(IBinder obj) { + if ((obj == null)) { + return null; + } + IInterface iin = obj.queryLocalInterface(DESCRIPTOR); + if (iin instanceof IUserInterface) { + return ((IUserInterface) iin); + } + return new Proxy(obj); + } + + @Override + public String exec(String cmd) throws RemoteException { + return ""; + } + + @Override + public double getCpuUsage(int pid) throws RemoteException { + return CpuUtils.getCpuUsagePercentWithPid(pid); + } + + /** + * 处理Client端请求 + * + * @param code + * @param data + * @param reply + * @param flags + * @return + * @throws RemoteException + */ + @Override + protected boolean onTransact(int code, @NonNull Parcel data, @Nullable Parcel reply, int flags) throws RemoteException { + final String descriptor = DESCRIPTOR; + switch (code) { + case TRANSACTION_exec: + data.enforceInterface(descriptor); + String _arg0; + _arg0 = data.readString(); + String _result = this.exec(_arg0); + reply.writeNoException(); + reply.writeString(_result); + return true; + default: + return super.onTransact(code, data, reply, flags); + } + } + + @Nullable + @Override + public String getInterfaceDescriptor() { + return super.getInterfaceDescriptor(); + } + + /** + * 返回给Client端并被封装成BinderProxy + * + * @return + */ + @Override + public IBinder asBinder() { + return this; + } + + public static class Proxy implements IUserInterface { + private IBinder mRemote; + + public Proxy(IBinder remote) { + mRemote = remote; + } + + public String getInterfaceDescriptor() { + return DESCRIPTOR; + } + + @Override + public IBinder asBinder() { + // 返回Server端Binder对象 + return mRemote; + } + + @Override + public String exec(String cmd) throws RemoteException { + // 参数传递给Server端并挂起当前线程,等待Server端执行完返回结果 + Parcel _data = Parcel.obtain(); + Parcel _reply = Parcel.obtain(); + String _result; + try { + _data.writeInterfaceToken(DESCRIPTOR); + _data.writeString(cmd); + mRemote.transact(TRANSACTION_exec, _data, _reply, 0); + _reply.readException(); + _result = _reply.readString(); + } finally { + _reply.recycle(); + _data.recycle(); + } + return _result; + } + + @Override + public double getCpuUsage(int pid) throws RemoteException { + Parcel _data = Parcel.obtain(); + Parcel _reply = Parcel.obtain(); + double _result; + try { + _data.writeInterfaceToken(DESCRIPTOR); + _data.writeInt(pid); + mRemote.transact(TRANSACTION_getCpuUsage, _data, _reply, 0); + _reply.readException(); + _result = _reply.readDouble(); + } finally { + _reply.recycle(); + _data.recycle(); + } + return _result; + } + } +} diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/remote/UserServiceManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/remote/UserServiceManager.kt new file mode 100644 index 0000000000..7eaf674df2 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/remote/UserServiceManager.kt @@ -0,0 +1,182 @@ +package com.zhjt.mogo_core_function_devatools.monitor.remote + +import rikka.shizuku.Shizuku +import android.content.ServiceConnection +import android.content.ComponentName +import android.os.IBinder +import rikka.shizuku.Shizuku.UserServiceArgs +import android.content.pm.PackageManager +import android.util.Log +import com.mogo.eagle.core.utilcode.util.AppUtils +import com.mogo.eagle.core.utilcode.util.ToastUtils +import rikka.shizuku.Shizuku.OnBinderReceivedListener +import rikka.shizuku.Shizuku.OnBinderDeadListener +import rikka.shizuku.Shizuku.OnRequestPermissionResultListener +import java.lang.StringBuilder + +object UserServiceManager { + + private const val TAG = "UserServiceManager" + private const val REQUEST_CODE_BIND = 1 + private const val REQUEST_CODE_UNBIND = 2 + + private var userServiceProxy: IUserInterface? = null + private var isFirst = true + + fun init() { + if (isFirst) { + addListener() + isFirst = false + } + bindUserService() + } + + fun stopService() { + removeListener() + unbindUserService() + } + + fun isServiceActive(): Boolean { + var isActive = false + val service = userServiceProxy + if (service != null && service is IBinder && service.isBinderAlive) { + isActive = true + } + return isActive + } + + private fun addListener() { + Shizuku.addBinderReceivedListenerSticky(BINDER_RECEIVED_LISTENER) + Shizuku.addBinderDeadListener(BINDER_DEAD_LISTENER) + Shizuku.addRequestPermissionResultListener(REQUEST_PERMISSION_RESULT_LISTENER) + } + + private fun removeListener() { + Shizuku.removeBinderReceivedListener(BINDER_RECEIVED_LISTENER) + Shizuku.removeBinderDeadListener(BINDER_DEAD_LISTENER) + Shizuku.removeRequestPermissionResultListener(REQUEST_PERMISSION_RESULT_LISTENER) + } + + private fun bindUserService() { + if (checkPermission(REQUEST_CODE_BIND)) { + val res = StringBuilder() + try { + if (Shizuku.getVersion() < 10) { + res.append("requires Shizuku API 10") + } else { + Shizuku.bindUserService(userServiceArgs, userServiceConnection) + } + } catch (tr: Throwable) { + tr.printStackTrace() + res.append(tr.toString()) + } + } + } + + private fun unbindUserService() { + if (checkPermission(REQUEST_CODE_UNBIND)) { + val res = StringBuilder() + try { + if (Shizuku.getVersion() < 10) { + res.append("requires Shizuku API 10") + } else { + Shizuku.unbindUserService(userServiceArgs, userServiceConnection, true) + } + } catch (tr: Throwable) { + tr.printStackTrace() + res.append(tr.toString()) + } + } + } + + fun exec(cmd: String): String { + return userServiceProxy?.exec(cmd) ?: "" + } + + /** + * 单位:%,保留1位小数 + */ + fun getCpuUsage(pid: Int): Double { + return userServiceProxy?.getCpuUsage(pid) ?: -1.0 + } + + private val userServiceConnection: ServiceConnection = object : ServiceConnection { + override fun onServiceConnected(componentName: ComponentName, binder: IBinder?) { + if (binder != null && binder.pingBinder()) { + val service = RemoteUserServiceImp.asInterface(binder) + userServiceProxy = service + ToastUtils.showShort("监控权限获取成功!") + } + } + + override fun onServiceDisconnected(componentName: ComponentName) {} + } + + private val userServiceArgs by lazy { + val appInfo = AppUtils.getAppInfo() + UserServiceArgs( + ComponentName( + appInfo?.packageName ?: "com.mogo.launcher.f", + RemoteUserServiceImp::class.java.name + ) + ) + .daemon(false) + .processNameSuffix("service") + .debuggable(true) + .version(appInfo?.versionCode ?: 1) + } + + private fun checkPermission(code: Int): Boolean { + if (Shizuku.isPreV11()) { + Log.w(TAG, "Version is preV11!") + return false + } + try { + return if (Shizuku.checkSelfPermission() == PackageManager.PERMISSION_GRANTED) { + true + } else if (Shizuku.shouldShowRequestPermissionRationale()) { + Log.e(TAG, "User denied permission (shouldShowRequestPermissionRationale=true)") + false + } else { + Shizuku.requestPermission(code) + false + } + } catch (e: Throwable) { + Log.e(TAG, Log.getStackTraceString(e)) + ToastUtils.showLong("请先打开Shizuku并启动它!") + } + return false + } + + private fun onRequestPermissionsResult(requestCode: Int, grantResult: Int) { + if (grantResult == PackageManager.PERMISSION_GRANTED) { + when (requestCode) { + REQUEST_CODE_BIND -> { + bindUserService() + } + REQUEST_CODE_UNBIND -> { + unbindUserService() + } + else -> {} + } + } else { + Log.e(TAG, "User denied permission") + } + } + + private val BINDER_RECEIVED_LISTENER = OnBinderReceivedListener { + if (Shizuku.isPreV11()) { + Log.w(TAG, "Shizuku pre-v11 is not supported") + } else { + Log.d(TAG, "Binder received") + } + } + private val BINDER_DEAD_LISTENER = OnBinderDeadListener { Log.w(TAG, "Binder dead") } + private val REQUEST_PERMISSION_RESULT_LISTENER = + OnRequestPermissionResultListener { requestCode: Int, grantResult: Int -> + onRequestPermissionsResult( + requestCode, + grantResult + ) + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/utils/CpuUtils.java b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/utils/CpuUtils.java new file mode 100644 index 0000000000..394c77892c --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/utils/CpuUtils.java @@ -0,0 +1,298 @@ +package com.zhjt.mogo_core_function_devatools.monitor.utils; + +import android.os.Process; +import android.text.TextUtils; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.RandomAccessFile; + +/** + * CPU相关工具类。 + */ +public class CpuUtils { + private static boolean initCpu = true; + private static double oCpu = 0.0; + private static double oIdle = 0.0; + + private static double pJif = 0.0; + private static double pCpu = 0.0; + private static double aCpu = 0.0; + private static double opCpu = 0.0; + private static double oaCpu = 0.0; + + /** + * 8.0以上获取cpu的方式 + * + * @return + */ + public static double getCpuUsageForO() { + java.lang.Process process = null; + try { + process = Runtime.getRuntime().exec("top -n 1"); + BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); + String line; + int cpuIndex = -1; + while ((line = reader.readLine()) != null) { + line = line.trim(); + if (TextUtils.isEmpty(line)) { + continue; + } + int tempIndex = getCPUIndex(line); + if (tempIndex != -1) { + cpuIndex = tempIndex; + continue; + } + if (line.startsWith(String.valueOf(Process.myPid()))) { + if (cpuIndex == -1) { + continue; + } + String[] param = line.split("\\s+"); + if (param.length <= cpuIndex) { + continue; + } + String cpu = param[cpuIndex]; + if (cpu.endsWith("%")) { + cpu = cpu.substring(0, cpu.lastIndexOf("%")); + } + return Double.parseDouble(cpu) / Runtime.getRuntime().availableProcessors(); + } + } + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (process != null) { + process.destroy(); + } + } + return 0; + } + + private static int getCPUIndex(String line) { + if (line.contains("CPU")) { + String[] titles = line.split("\\s+"); + for (int i = 0; i < titles.length; i++) { + if (titles[i].contains("CPU")) { + return i; + } + } + } + return -1; + } + + /** + * 获取应用的CPU占用率,单位:%,保留1位小数 + * @param pid + * @return + */ + public static double getCpuUsagePercentWithPid(int pid) { + double usage = 0.0; + String[] result1; + String[] result2; + if (pid >= 0) { + result1 = getCpuWithPid(pid); + if (null != result1) { + pCpu = Double.parseDouble(result1[1]) + + Double.parseDouble(result1[2]); + } + result2 = getSystemCpu(); + if (null != result2) { + aCpu = 0.0; + for (int i = 2; i < result2.length; i++) { + if (result2[i] != null) { + aCpu += Double.parseDouble(result2[i]); + } + } + } + if ((aCpu - oaCpu) != 0) { + usage = DoubleUtils.div(((pCpu - opCpu) * 100.00), + (aCpu - oaCpu), 1); + if (usage < 0) { + usage = 0; + } + else if (usage > 100) + { + usage = 100; + } + + } + opCpu = pCpu; + oaCpu = aCpu; + } + pJif = pCpu; + return usage; + } + + /** + * 获取CPU使用率 + * + * @return CPU使用率,单位:% + */ + public static double getSysCpuUsagePercent() { + double usage = 0.0; + if (initCpu) { + initCpu = false; + RandomAccessFile reader = null; + try { + reader = new RandomAccessFile("/proc/stat", + "r"); + String load; + load = reader.readLine(); + String[] toks = load.split(" "); + oIdle = Double.parseDouble(toks[5]); + oCpu = Double.parseDouble(toks[2]) + + Double.parseDouble(toks[3]) + + Double.parseDouble(toks[4]) + + Double.parseDouble(toks[6]) + + Double.parseDouble(toks[8]) + + Double.parseDouble(toks[7]); + + } catch (IOException e) { + e.printStackTrace(); + } + finally + { + FileUtil.closeRandomAccessFile(reader); + } + } else { + RandomAccessFile reader = null; + try { + reader = new RandomAccessFile("/proc/stat", "r"); + String load; + load = reader.readLine(); + String[] toks = load.split(" "); + double cIdle = Double.parseDouble(toks[5]); + double cCpu = Double.parseDouble(toks[2]) + + Double.parseDouble(toks[3]) + + Double.parseDouble(toks[4]) + + Double.parseDouble(toks[6]) + + Double.parseDouble(toks[8]) + + Double.parseDouble(toks[7]); + if (0 != ((cCpu + cIdle) - (oCpu + oIdle))) { + usage = DoubleUtils.div((100.00 * ((cCpu - oCpu))), + ((cCpu + cIdle) - (oCpu + oIdle)), 1); + if (usage < 0) { + usage = 0; + } + else if (usage > 100) + { + usage = 100; + } + } + oCpu = cCpu; + oIdle = cIdle; + } catch (IOException e) { + e.printStackTrace(); + } finally { + FileUtil.closeRandomAccessFile(reader); + } + } + return usage; + } + + private static String[] getCpuWithPid(int pid) { + String cpuPath = "/proc/" + pid + "/stat"; + String cpu = ""; + String[] result = new String[3]; + + File f = new File(cpuPath); + // 部分进程信息无法读取 + if (!f.exists() || !f.canRead()) + { + return result; + } + + FileReader fr = null; + BufferedReader localBufferedReader = null; + + try { + fr = new FileReader(f); + localBufferedReader = new BufferedReader(fr, 8192); + cpu = localBufferedReader.readLine(); + if (null != cpu) { + String[] cpuSplit = cpu.split(" "); + result[0] = cpuSplit[1]; + result[1] = cpuSplit[13]; + result[2] = cpuSplit[14]; + } + }catch (IOException e) { + e.printStackTrace(); + } + FileUtil.closeReader(localBufferedReader); + return result; + } + + private static String[] getSystemCpu() { + String cpuPath = "/proc/stat"; + String cpu = ""; + String[] result = new String[7]; + + File f = new File(cpuPath); + if (!f.exists() || !f.canRead()) + { + return result; + } + + FileReader fr = null; + BufferedReader localBufferedReader = null; + + try { + fr = new FileReader(f); + localBufferedReader = new BufferedReader(fr, 8192); + cpu = localBufferedReader.readLine(); + if (null != cpu) { + result = cpu.split(" "); + + } + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + FileUtil.closeReader(localBufferedReader); + return result; + } + + public static String getCpuUsageByCmd() { + java.lang.Process process; + StringBuilder sb = new StringBuilder(); + String line; + String cmd = "dumpsys cpuinfo"; + try { + process = Runtime.getRuntime().exec( + new String[] { "sh", "-c", cmd }); + BufferedReader br = new BufferedReader(new InputStreamReader( + process.getInputStream())); + while (((line = br.readLine()) != null)) { + // 去掉空白行数据 + line = line.trim(); + if (line.equals("")) { + continue; + } + sb.append(line); + sb.append("\r\n"); + } + try { + process.waitFor(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } catch (IOException e) { + e.printStackTrace(); + } + return sb.toString(); + } + + /** + * 获取进程的CPU使用时间片 + * + * @return 进程的CPU使用时间片 + */ + public long getJif() { + return (long)pJif; + } +} diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/utils/DoubleUtils.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/utils/DoubleUtils.kt new file mode 100644 index 0000000000..895889d781 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/utils/DoubleUtils.kt @@ -0,0 +1,44 @@ +package com.zhjt.mogo_core_function_devatools.monitor.utils + +import java.lang.Exception +import java.math.BigDecimal + + +object DoubleUtils { + + fun mul(d1: Double, d2: Double): Double { + val bd1 = BigDecimal(d1.toString()) + val bd2 = BigDecimal(d2.toString()) + return try { + bd1.multiply(bd2).toDouble() + } catch (e: Exception) { + e.printStackTrace() + 0.0 + } + } + + @JvmStatic + fun div(d1: Double, d2: Double, scale: Int): Double { + val bd1 = BigDecimal(d1.toString()) + val bd2 = BigDecimal(d2.toString()) + return try { + // 直接向下取整 + bd1.divide(bd2, scale, BigDecimal.ROUND_DOWN).toDouble() + } catch (e: Exception) { + e.printStackTrace() + 0.0 + } + } + + /** + * 四舍五入 + * scale:保留多少个小数位 + */ + @JvmStatic + fun keepDecimal(v: Double, scale: Int = 1): Double { + if (scale < 0) { + throw IllegalArgumentException("The scale must be a positive integer or zero") + } + return BigDecimal(v).setScale(scale, BigDecimal.ROUND_HALF_UP).toDouble() + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/utils/FileUtil.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/utils/FileUtil.kt new file mode 100644 index 0000000000..eceb12ec16 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/utils/FileUtil.kt @@ -0,0 +1,304 @@ +package com.zhjt.mogo_core_function_devatools.monitor.utils + +import android.net.LocalSocket +import android.util.Log +import java.io.* +import java.lang.Exception +import java.net.Socket +import java.nio.channels.FileChannel + +object FileUtil { + private const val TAG = "FileUtil" + const val separator = "/" + fun isPathStringValid(path: String?): Boolean { + if (null == path || path.isEmpty()) { + return false + } + if (path.contains(":") || path.contains("*") || path.contains("?") + || path.contains("\"") || path.contains("<") + || path.contains(">") || path.contains("|") + ) { + Log.w(TAG, "filename can not contains:*:?\"<>|") + return false + } + return true + } + + fun isPath(path: String): Boolean { + return path.contains(separator) || path.contains("\\") + } + + fun getPath(path: String): String { + val la = path.lastIndexOf(separator) + return path.substring(0, la) + } + + fun convertValidFilePath(path: String, defPosfix: String): String { + var filePath = path + if (path.contains(separator) || path.contains("\\")) { + val la = filePath.lastIndexOf(".") + if (la < 0) { + filePath = path + defPosfix + } else { + val temp = filePath.substring(la) + if (temp.contains(separator) || temp.contains("\\")) { + // "."是目录名的一部分而不是后缀名的情况 + filePath = path + defPosfix + } + // else fileName = fileName + } + } else { + if (!path.contains(".")) // 没有有后缀 + { + filePath = filePath + defPosfix + } + } + return filePath + } + + fun isFileExists(file: String?): Boolean { + try { + val f = File(file) + if (!f.exists()) { + return false + } + } catch (e: Exception) { + e.printStackTrace() + return false + } + return true + } + + fun isFileValid(f: File): Boolean { + if (!f.exists()) { + try { + f.createNewFile() + } catch (e: IOException) { + return false + } + f.delete() + } + return true + } + + fun isFileValid(parent: File?, name: String?): Boolean { + val f = File(parent, name) + return isFileValid(f) + } + + /** + * 删除存在的文件 + * + * @param filePath + */ + fun delExistFile(filePath: String?) { + val f = File(filePath) + if (f.exists()) f.delete() + } + + /** + * 关闭bufferReader + * + * @param br + */ + @JvmStatic + fun closeReader(br: Reader?) { + if (br != null) { + try { + br.close() + } catch (e: IOException) { + e.printStackTrace() + } + } + } + + /** + * 关闭Writer + * + * @param wr + */ + fun closeWriter(wr: Writer?) { + if (wr != null) { + try { + wr.close() + } catch (e: IOException) { + e.printStackTrace() + } + } + } + + /** + * flush Writer + * + * @param wr + */ + fun flushWriter(wr: Writer?) { + if (wr != null) { + try { + wr.flush() + } catch (e: IOException) { + e.printStackTrace() + } + } + } + + /** + * 输入流的关闭 + * + * @param in + */ + fun closeInputStream(`in`: InputStream?) { + if (`in` != null) { + try { + `in`.close() + } catch (e: IOException) { + e.printStackTrace() + } + } + } + + /** + * 输出流的关闭 + * + * @param out + */ + fun closeOutputStream(out: OutputStream?) { + if (out != null) { + try { + out.close() + } catch (e: IOException) { + e.printStackTrace() + } + } + } + + /** + * 文件管道的关闭 + * + * @param chl + */ + fun closeFileChannel(chl: FileChannel?) { + if (chl != null) { + try { + chl.close() + } catch (e: IOException) { + e.printStackTrace() + } + } + } + + /** + * RandomAccessFile的关闭 + * + * @param f RandomAccessFile对象 + */ + @JvmStatic + fun closeRandomAccessFile(f: RandomAccessFile?) { + if (f != null) { + try { + f.close() + } catch (e: IOException) { + e.printStackTrace() + } + } + } + + /** + * Socket的关闭 + * + * @param s Socket对象 + */ + fun colseSocket(s: Socket?) { + if (s != null) { + try { + s.close() + } catch (e: IOException) { + e.printStackTrace() + } + } + } + + /** + * LocalSocket的关闭 + * + * @param s Socket对象 + */ + fun colseLocalSocket(s: LocalSocket?) { + if (s != null) { + try { + s.close() + } catch (e: IOException) { + e.printStackTrace() + } + } + } + + fun deleteFile(file: File) { + if (file.exists()) { // 判断文件是否存在 + if (file.isFile) { // 判断是否是文件 + file.delete() // delete()方法 你应该知道 是删除的意思; + } else if (file.isDirectory) { // 否则如果它是一个目录 + val files = file.listFiles() // 声明目录下所有的文件 files[]; + for (i in files.indices) { // 遍历目录下所有的文件 + deleteFile(files[i]) // 把每个文件 用这个方法进行迭代 + } + } + file.delete() + } else { + Log.e(TAG, "文件不存在!" + "n") + } + } + + /** + * 拷贝文件 + * + * @param s 源文件 + * @param t 目标文件 + */ + fun copyFile(s: File?, t: File) { + var fi: FileInputStream? = null + var fo: FileOutputStream? = null + var `in`: FileChannel? = null + var out: FileChannel? = null + try { + if (!t.exists()) { + t.createNewFile() + } + fi = FileInputStream(s) + fo = FileOutputStream(t) + `in` = fi.channel + out = fo.channel + // 连接两个通道,并且从in通道读取,然后写入out通道 + `in`.transferTo(0, `in`.size(), out) + } catch (e: IOException) { + e.printStackTrace() + } finally { + closeOutputStream(fo) + closeInputStream(fi) + closeFileChannel(`in`) + closeFileChannel(out) + } + } + + fun copyInputToFile(`in`: InputStream?, path: String?) { + var bis: BufferedInputStream? = null + var fos: FileOutputStream? = null + try { + val buffer = ByteArray(10 * 1024) + bis = BufferedInputStream(`in`) + fos = FileOutputStream(path) + var a = bis.read(buffer, 0, buffer.size) + while (a != -1) { + fos.write(buffer, 0, a) + fos.flush() + a = bis.read(buffer, 0, buffer.size) + } + } catch (e: Exception) { + e.printStackTrace() + } finally { + closeOutputStream(fos) + closeInputStream(bis) + closeInputStream(`in`) + } + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/utils/HookUtils.java b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/utils/HookUtils.java new file mode 100644 index 0000000000..bb1f53f2e4 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/utils/HookUtils.java @@ -0,0 +1,54 @@ +package com.zhjt.mogo_core_function_devatools.monitor.utils; + +import android.os.Debug; +import android.util.Log; + +import java.lang.reflect.Field; + +public class HookUtils { + private static final String TAG = "HookUtils"; + + /** + * 单位为MB + * 0: 总PSS,1: dalvik总Pss, 2: native总Pss, 3: other总Pss + * @param memoryInfo + * @return + */ + public static double[] getPssArray(Debug.MemoryInfo memoryInfo) { + double[] pssArray = new double[4]; + if (memoryInfo != null) { + double totalPss = DoubleUtils.keepDecimal(memoryInfo.getTotalPss() / 1024.0, 3); +// Log.d(TAG, "===========Hook PSS 开始:===========\n"); +// Log.d(TAG, "总PSS内存为:" + totalPss); + pssArray[0] = totalPss; + try { + Field dalvikField = memoryInfo.getClass().getField("dalvikSwappedOutPss"); + double dalvikPss = DoubleUtils.keepDecimal(memoryInfo.dalvikPss / 1024.0, 3); + double dalvikSwappedOutPss = DoubleUtils.keepDecimal((int) dalvikField.get(memoryInfo) / 1024.0, 3); + pssArray[1] = dalvikPss + dalvikSwappedOutPss; +// Log.d(TAG, "dalvikPss is:" + dalvikSwappedOutPss); +// Log.d(TAG, "dalvikSwappedOutPss is:" + dalvikPss + "\n\n"); + + Field nativeField = memoryInfo.getClass().getField("nativeSwappedOutPss"); + double nativePss = DoubleUtils.keepDecimal(memoryInfo.nativePss / 1024.0, 3); + double nativeSwappedOutPss = DoubleUtils.keepDecimal((int) nativeField.get(memoryInfo) / 1024.0, 3); + pssArray[2] = nativePss + nativeSwappedOutPss; +// Log.d(TAG, "nativePss is:" + nativePss); +// Log.d(TAG, "nativeSwappedOutPss is:" + nativeSwappedOutPss + "\n\n"); + + Field otherField = memoryInfo.getClass().getField("otherSwappedOutPss"); + double otherPss = DoubleUtils.keepDecimal(memoryInfo.otherPss / 1024.0, 3); + double otherSwappedOutPss = DoubleUtils.keepDecimal((int) otherField.get(memoryInfo) / 1024.0, 3); + pssArray[3] = otherPss + otherSwappedOutPss; +// Log.d(TAG, "otherPss is:" + otherPss); +// Log.d(TAG, "otherSwappedOutPss is:" + otherSwappedOutPss + "\n\n"); +// +// Log.d(TAG, "===========Hook PSS 结束!===========\n"); + } catch (Exception e) { + e.printStackTrace(); + Log.e(TAG, e.getMessage()); + } + } + return pssArray; + } +} diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/utils/MemUtils.java b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/utils/MemUtils.java new file mode 100644 index 0000000000..438aea064e --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/utils/MemUtils.java @@ -0,0 +1,180 @@ +package com.zhjt.mogo_core_function_devatools.monitor.utils; + +import android.app.ActivityManager; +import android.content.Context; +import android.os.Debug; + +import java.lang.reflect.Method; + +/** + * 内存信息工具类。 + */ +public class MemUtils { + + public static double[] getPssArray(Context context, int[] pids) { + Debug.MemoryInfo[] memoryArray = getMemoryInfo(context, pids); + if (memoryArray.length > 0) { + return HookUtils.getPssArray(memoryArray[0]); + } else { + return new double[4]; + } + } + + /** + * 单位MB + */ + public static double getPssMemValue(Context context, int[] pids) { + double value = 0.0; + Debug.MemoryInfo[] memoryArray = getMemoryInfo(context, pids); + if (memoryArray.length > 0) { + value = DoubleUtils.keepDecimal(memoryArray[0].getTotalPss() / 1024.0, 1); + } + return value; + } + + /** + * 只能获取本应用的PSS内存占系统百分比:单位%,保留1位小数 + * @return + */ + public static double getPidMemPercent() { + double percent = 0.0; + Debug.MemoryInfo memInfo = new Debug.MemoryInfo(); + Debug.getMemoryInfo(memInfo); + int pidTotalPss = memInfo.getTotalPss(); + long systemTotalMem = getTotalMem(); + percent = DoubleUtils.keepDecimal(pidTotalPss * 100.0 / systemTotalMem, 1); + return percent; + } + + /** + * 获取本应用进程总pss内存,单位MB + */ + public static double getPssMem() { + Debug.MemoryInfo memInfo = new Debug.MemoryInfo(); + Debug.getMemoryInfo(memInfo); + return DoubleUtils.keepDecimal(memInfo.getTotalPss() / 1024.0, 1); + } + + /** + * 获取系统空闲内存占用百分比: 单位% + * @return + */ + public static double getSystemMemPercent() { + double percent = 0.0; + long[] memInfo = getMemInfo(); + long free = memInfo[1] + memInfo[2] + memInfo[3]; + long total = memInfo[0]; + percent = DoubleUtils.keepDecimal(free * 100.0 / total, 1); + return percent; + } + + /** + * 获取空闲内存 + * + * @return 空闲内存,单位KB + */ + public static long getFreeMem() { + long[] memInfo = getMemInfo(); + return memInfo[1] + memInfo[2] + memInfo[3]; + } + + /** + * 获取总内存 + * + * @return 总内存,单位KB + */ + public static long getTotalMem() { + long[] memInfo = getMemInfo(); + return memInfo[0]; + } + + /** + * 获取内存信息:total、free、buffers、cached,单位KB + * + * @return 内存信息 + */ + public static long[] getMemInfo() { + long memInfo[] = new long[4]; + try { + Class procClazz = Class.forName("android.os.Process"); + Class paramTypes[] = new Class[] { String.class, String[].class, + long[].class }; + Method readProclines = procClazz.getMethod("readProcLines", + paramTypes); + Object args[] = new Object[3]; + final String[] memInfoFields = new String[] { "MemTotal:", + "MemFree:", "Buffers:", "Cached:" }; + long[] memInfoSizes = new long[memInfoFields.length]; + memInfoSizes[0] = 30; + memInfoSizes[1] = -30; + args[0] = "/proc/meminfo"; + args[1] = memInfoFields; + args[2] = memInfoSizes; + if (null != readProclines) { + readProclines.invoke(null, args); + for (int i = 0; i < memInfoSizes.length; i++) { + memInfo[i] = memInfoSizes[i]; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + return memInfo; + } + + public static long[] getHeapNative() { + int Native_HeapSize = 0; + int Native_HeapAlloc = 1; + long[] value = new long[2]; + value[Native_HeapSize] = Debug.getNativeHeapSize() >> 10; + value[Native_HeapAlloc] = Debug.getNativeHeapAllocatedSize() >> 10; + return value; + } + + public static long[] getHeapDalvik() { + int Total_HeapSize = 0; + int Total_HeapAlloc = 1; + + long[] value_total = new long[2]; + value_total[Total_HeapSize] = Runtime.getRuntime().totalMemory() >> 10; + value_total[Total_HeapAlloc] = (Runtime.getRuntime().totalMemory() - Runtime + .getRuntime().freeMemory()) >> 10; + + long[] value_native = getHeapNative(); + + int Dalvik_HeapSize = 0; + int Dalvik_HeapAlloc = 1; + long[] value_dalvik = new long[2]; + value_dalvik[Dalvik_HeapSize] = value_total[Total_HeapSize] + - value_native[0]; + value_dalvik[Dalvik_HeapAlloc] = value_total[Total_HeapAlloc] + - value_native[1]; + + return value_dalvik; + } + + /** + * 获取堆内存数据,精确到KB Get VM Heap Size by calling: + * Runtime.getRuntime().totalMemory(); Get Allocated VM Memory by calling: + * Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory(); + * Get VM Heap Size Limit by calling: Runtime.getRuntime().maxMemory() Get + * Native Allocated Memory by calling: Debug.getNativeHeapAllocatedSize(); + */ + public static long[] getVM() { + long[] value = new long[5]; + value[0] = (Runtime.getRuntime().totalMemory() - Runtime.getRuntime() + .freeMemory()) >> 10; + value[1] = Runtime.getRuntime().totalMemory() >> 10; + + value[2] = Debug.getNativeHeapAllocatedSize() >> 10; + value[3] = Debug.getNativeHeapSize() >> 10; + value[4] = Debug.getGlobalAllocSize() >> 10; + return value; + } + + private static Debug.MemoryInfo[] getMemoryInfo(Context context, int[] pids) { + ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); + return am.getProcessMemoryInfo(pids); + } +} diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt index c43b31c32f..25f91f0723 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt @@ -160,6 +160,8 @@ import java.util.* private var busOperationStatus: IOchBusView? = null + private var isStarted = false + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) } @@ -182,10 +184,17 @@ import java.util.* } } - /*ivCameraIcon?.setOnLongClickListener { - activity?.let { it1 -> CarcorderPreviewView.show(it1) } + ivCameraIcon?.setOnLongClickListener { + if (!isStarted) { + CallerDevaToolsManager.startMonitor() + isStarted = true + } else { + CallerDevaToolsManager.stopMonitor() + isStarted = false + } +// activity?.let { it1 -> CarcorderPreviewView.show(it1) } true - }*/ + } ivToolsIcon?.setOnClickListener { if (toolsViewFloat == null) { diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainMoGoApplication.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainMoGoApplication.java index b8e0c0560f..fb1ee3827d 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainMoGoApplication.java +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainMoGoApplication.java @@ -28,8 +28,12 @@ import com.mogo.module.common.MogoModule; import com.mogo.module.common.MogoModulePaths; import com.mogo.module.service.ServiceConst; import com.zhidao.support.obu.ami.AmiClientManager; +import com.zhjt.mogo_core_function_devatools.monitor.db.CpuInfo; +import com.zhjt.mogo_core_function_devatools.monitor.db.MemInfo; +import com.zhjt.mogo_core_function_devatools.monitor.db.MonitorDb; import java.lang.reflect.Field; +import java.util.List; /** * 默认初始化一些基础服务配置 @@ -58,6 +62,7 @@ public abstract class MainMoGoApplication extends AbsMogoApplication { //查询是否有版本的更新 queryAppUpgrade(); + checkMonitorDb(); } @Override @@ -75,6 +80,18 @@ public abstract class MainMoGoApplication extends AbsMogoApplication { },5000); } + private void checkMonitorDb() { + new Thread(() -> { + long limitId = 50001; + List cpuList = MonitorDb.getDb(this).monitorDao().getAllCPUById(limitId); + List memList = MonitorDb.getDb(this).monitorDao().getAllMemById(limitId); + // 大于5w条清除 + if (cpuList.size() > 0 || memList.size() > 0) { + this.deleteDatabase(MonitorDb.INTERNAL_DB_NAME); + } + }).start(); + } + /** * 初始化异常采集配置 */ diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IDevaToolsProvider.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IDevaToolsProvider.kt index b5f425ca00..4f4bd4b9da 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IDevaToolsProvider.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IDevaToolsProvider.kt @@ -113,4 +113,8 @@ interface IDevaToolsProvider : IProvider { * 隐藏状态栏 */ fun hideStatusBar() + + fun startMonitor() + + fun stopMonitor() } \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsManager.kt index 79041199d0..ddf0921a3d 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsManager.kt @@ -164,4 +164,12 @@ object CallerDevaToolsManager { devaToolsProviderApi?.hideStatusBar() } } + + fun startMonitor() { + devaToolsProviderApi?.startMonitor() + } + + fun stopMonitor() { + devaToolsProviderApi?.stopMonitor() + } } \ No newline at end of file From c920f9bdc46ce3619b4b68878b2308aef6e64ee8 Mon Sep 17 00:00:00 2001 From: zhongchao Date: Tue, 30 Aug 2022 18:08:12 +0800 Subject: [PATCH 05/22] add roadarrow type --- .../com/mogo/eagle/core/data/trafficlight/RoadArrow.kt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/trafficlight/RoadArrow.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/trafficlight/RoadArrow.kt index 765824cbd7..a1f91ed67d 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/trafficlight/RoadArrow.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/trafficlight/RoadArrow.kt @@ -12,18 +12,20 @@ class RoadArrow { private const val TURN_LEFT_OR_U_TURN = 206 //左转或转向 private const val TURN_RIGHT = 208 //右转 private const val TURN_LEFT_OR_RIGHT = 210 //左右转向 - const val U_TURN = 211 //转向 + private const val U_TURN = 211 //转向 + private const val STRAIGHT_OR_LEFT_OR_RIGHT = 215 //直行或左转或右转 + private const val TURN_RIGHT_OR_U_TURN = 217 //右转或转向 fun isLeft(arrowId: Int): Boolean { return arrowId == STRAIGHT_OR_LEFT || arrowId == TURN_LEFT || arrowId == TURN_LEFT_OR_U_TURN || arrowId == TURN_LEFT_OR_RIGHT } fun isStraight(arrowId: Int): Boolean { - return arrowId == STRAIGHT_AHEAD || arrowId == STRAIGHT_OR_RIGHT || arrowId == STRAIGHT_OR_U_TURN + return arrowId == STRAIGHT_AHEAD || arrowId == STRAIGHT_OR_RIGHT || arrowId == STRAIGHT_OR_U_TURN || arrowId == STRAIGHT_OR_LEFT_OR_RIGHT } fun isRight(arrowId: Int): Boolean { - return arrowId == TURN_RIGHT || arrowId == STRAIGHT_OR_RIGHT || arrowId == TURN_LEFT_OR_RIGHT + return arrowId == STRAIGHT_OR_RIGHT || arrowId == TURN_RIGHT || arrowId == TURN_RIGHT_OR_U_TURN || arrowId == TURN_LEFT_OR_RIGHT } fun isOnlyRight(arrowId: Int): Boolean { From 557b31fba1dc6da6144fc5b42842adc9ba5c3833 Mon Sep 17 00:00:00 2001 From: yangyakun Date: Tue, 30 Aug 2022 18:35:49 +0800 Subject: [PATCH 06/22] =?UTF-8?q?[2.10.0]=20=E4=B9=98=E5=AE=A2=E7=AB=AF?= =?UTF-8?q?=E5=9B=BE=E7=89=87=E6=9B=BF=E6=8D=A2=E3=80=81dialogFragment=20c?= =?UTF-8?q?ommit=E6=9B=BF=E6=8D=A2=E3=80=81=E9=AA=8C=E8=AF=81=E7=A0=81?= =?UTF-8?q?=E9=95=BF=E5=BA=A6=E9=AA=8C=E8=AF=81=E3=80=81=E7=BD=91=E7=BB=9C?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=E6=98=AF=E8=BD=AE=E8=AE=AD=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E7=8A=B6=E6=80=81=E6=8C=81=E7=BB=AD=E5=9C=A8?= =?UTF-8?q?=E7=BD=91=E7=BA=A6=E8=BD=A6=E7=95=8C=E9=9D=A2=E3=80=81=E5=BF=AB?= =?UTF-8?q?=E9=80=9F=E7=99=BB=E5=BD=95=201s=E7=82=B9=E5=87=BB4=E4=B8=8B?= =?UTF-8?q?=E6=AC=A2=E8=BF=8E=E6=82=A8=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../taxi_p_mogo_consult_title_icon.png | Bin 4974 -> 5396 bytes .../taxi_p_mogo_movies_title_icon.png | Bin 13319 -> 13331 bytes .../taxi_p_mogo_consult_title_icon.png | Bin 4974 -> 5396 bytes .../taxi_p_mogo_movies_title_icon.png | Bin 13319 -> 13331 bytes .../com/mogo/och/taxi/model/TaxiModel.java | 4 - .../och/taxi/presenter/TaxiLoginPresenter.kt | 4 + .../och/taxi/presenter/TaxiPresenter.java | 7 ++ .../com/mogo/och/taxi/ui/TaxiFragment.java | 7 +- .../och/taxi/ui/TaxiLoginDialogFragment.kt | 75 +++++++++++++----- .../res/drawable-xhdpi/taxi_ic_login_bg.webp | Bin 0 -> 44568 bytes .../src/main/res/layout/taxi_login_view.xml | 8 -- .../src/main/res/values/strings.xml | 1 + 12 files changed, 72 insertions(+), 34 deletions(-) mode change 100755 => 100644 OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_mogo_movies_title_icon.png mode change 100755 => 100644 OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_mogo_movies_title_icon.png create mode 100644 OCH/mogo-och-taxi/src/main/res/drawable-xhdpi/taxi_ic_login_bg.webp diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_mogo_consult_title_icon.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_mogo_consult_title_icon.png index 1efa8c1b0379441c3141b981d4484b7e60cb0b90..56452fe2564def669d27b6a3c62f1b22cc2240f2 100644 GIT binary patch literal 5396 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 delta 4949 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 TK3^8600000NkvXXu0mjfnIM+G diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_mogo_movies_title_icon.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_mogo_movies_title_icon.png old mode 100755 new mode 100644 index 0768e35563d8c9e9bb401f563bba530c49020220..72dc087fd492bf0e708d79f6cd69955ee9347493 GIT binary patch literal 13331 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 R{_jJMq8voF@`Gu}{{aD6mCpbG literal 13319 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 PCmaPi71>&8lhFSM=WLwd diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_mogo_consult_title_icon.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_mogo_consult_title_icon.png index 1efa8c1b0379441c3141b981d4484b7e60cb0b90..56452fe2564def669d27b6a3c62f1b22cc2240f2 100644 GIT binary patch literal 5396 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 delta 4949 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 TK3^8600000NkvXXu0mjfnIM+G diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_mogo_movies_title_icon.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_mogo_movies_title_icon.png old mode 100755 new mode 100644 index 0768e35563d8c9e9bb401f563bba530c49020220..72dc087fd492bf0e708d79f6cd69955ee9347493 GIT binary patch literal 13331 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 R{_jJMq8voF@`Gu}{{aD6mCpbG literal 13319 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 PCmaPi71>&8lhFSM=WLwd diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java index 0fefa65502..002a14dc61 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java @@ -305,10 +305,6 @@ public class TaxiModel { subscribe = Observable.timer(5, TimeUnit.SECONDS).subscribe(aLong -> { queryCarStatus(); }); - - if(mCarStatusCallback!=null) { - mCarStatusCallback.onCarLoginStatusChange(StatusManager.isLogin()); - } } @Override diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/presenter/TaxiLoginPresenter.kt b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/presenter/TaxiLoginPresenter.kt index a44dc70275..fa5191bf3d 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/presenter/TaxiLoginPresenter.kt +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/presenter/TaxiLoginPresenter.kt @@ -96,6 +96,10 @@ class TaxiLoginPresenter(view: TaxiLoginDialogFragment?) : mView?.inputPhoneError() return } + if(code.isBlank()||code.length<4){ + ToastUtils.showShort(R.string.module_och_taxi_login_code_error) + return + } mView?.closeSoftInput() TaxiLoginModel.gotoLogin(phone,code) } diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/presenter/TaxiPresenter.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/presenter/TaxiPresenter.java index 751b54db4d..056ae96298 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/presenter/TaxiPresenter.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/presenter/TaxiPresenter.java @@ -112,6 +112,13 @@ public class TaxiPresenter extends Presenter implements ITaxiADASS TaxiModel.getInstance().jumpPassengerCheckDone(); } + /** + * 登录成功后查询登录状态 + */ + public void queryLoginStatus() { + TaxiModel.getInstance().queryCarStatus(); + } + /** * 司机确认车辆环境可开启自动驾驶 */ diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiFragment.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiFragment.java index 636fc4c8be..e7a86c035c 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiFragment.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiFragment.java @@ -2,6 +2,7 @@ package com.mogo.och.taxi.ui; import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI; +import android.content.DialogInterface; import android.os.Build; import android.os.Bundle; import android.text.TextUtils; @@ -410,9 +411,13 @@ public class TaxiFragment extends BaseTaxiTabFragment { + mPresenter.queryLoginStatus(); + taxiLoginDialogFragment.clear(); + }); } } public void hideLoginDialogFragment(){ diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiLoginDialogFragment.kt b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiLoginDialogFragment.kt index c71d37594e..a1ccc2ec62 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiLoginDialogFragment.kt +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiLoginDialogFragment.kt @@ -3,6 +3,8 @@ package com.mogo.och.taxi.ui import android.content.DialogInterface import android.graphics.Rect import android.os.Bundle +import android.os.SystemClock +import android.util.Log import android.view.* import androidx.appcompat.widget.AppCompatButton import androidx.appcompat.widget.AppCompatEditText @@ -10,6 +12,8 @@ import androidx.appcompat.widget.AppCompatTextView import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.content.ContextCompat import androidx.core.widget.addTextChangedListener +import androidx.fragment.app.FragmentManager +import androidx.fragment.app.FragmentTransaction import com.mogo.commons.mvp.MvpDialogFragment import com.mogo.eagle.core.utilcode.kotlin.onClick import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger @@ -18,12 +22,6 @@ import com.mogo.eagle.core.utilcode.util.BarUtils import com.mogo.eagle.core.utilcode.util.KeyboardUtils import com.mogo.och.taxi.R import com.mogo.och.taxi.presenter.TaxiLoginPresenter -import io.reactivex.Observable -import io.reactivex.Observer -import io.reactivex.android.schedulers.AndroidSchedulers -import io.reactivex.disposables.Disposable -import io.reactivex.schedulers.Schedulers -import java.util.concurrent.TimeUnit /** @@ -38,6 +36,9 @@ class TaxiLoginDialogFragment : MvpDialogFragment(R.id.module_och_taxi_order_list_close_iv)!!.setOnClickListener { v: View? -> dismissAllowingStateLoss() } clMain = mRootView.findViewById(R.id.cl_main) acbtnLogin = mRootView.findViewById(R.id.acbtn_login) actvLoginGetCode = mRootView.findViewById(R.id.actv_login_get_code) aceLoginPhoneValue = mRootView.findViewById(R.id.ace_login_phone_value) acetPhoneCodeValue = mRootView.findViewById(R.id.acet_phone_code_value) + actvWelcomeLoginTitle = mRootView.findViewById(R.id.actv_welcome_login_title) inputPhoneNormal() initListener() dialog?.window?.let { @@ -94,6 +95,9 @@ class TaxiLoginDialogFragment : MvpDialogFragment= (SystemClock.uptimeMillis() - DURATION)) { + mHits = LongArray(COUNTS) //重新初始化数组 + mPresenter?.gotoLogin("13288888888","8888") + } } override fun onKey(dialog: DialogInterface, keyCode: Int, event: KeyEvent): Boolean { @@ -186,6 +188,37 @@ class TaxiLoginDialogFragment : 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ම{4EGY^_h6bs7t5vjtr`t_) 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 BRHFa@ literal 0 HcmV?d00001 diff --git a/OCH/mogo-och-taxi/src/main/res/layout/taxi_login_view.xml b/OCH/mogo-och-taxi/src/main/res/layout/taxi_login_view.xml index 827df3dc76..2409717dab 100644 --- a/OCH/mogo-och-taxi/src/main/res/layout/taxi_login_view.xml +++ b/OCH/mogo-och-taxi/src/main/res/layout/taxi_login_view.xml @@ -115,13 +115,5 @@ android:layout_width="760px" android:layout_height="136px"/> - diff --git a/OCH/mogo-och-taxi/src/main/res/values/strings.xml b/OCH/mogo-och-taxi/src/main/res/values/strings.xml index 7defd4e933..b24bdb28d8 100644 --- a/OCH/mogo-och-taxi/src/main/res/values/strings.xml +++ b/OCH/mogo-och-taxi/src/main/res/values/strings.xml @@ -37,6 +37,7 @@ 获取验证码成功 登录成功 请输入正确的手机号 + 请输入正确的验证码 请输入手机号 请输入手机号 From 9fab56a9c8c504369b8f1b3d9f623a27ee79b5c6 Mon Sep 17 00:00:00 2001 From: chenfufeng Date: Tue, 30 Aug 2022 19:19:05 +0800 Subject: [PATCH 07/22] =?UTF-8?q?[Fix]=E5=A4=9A=E4=BD=99=E7=9A=84=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E6=B3=A8=E9=87=8A=E6=8E=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DevaToolsProvider.kt | 1 - .../monitor/CpuMonitor.kt | 1 - .../monitor/remote/UserServiceManager.kt | 352 +++++++++--------- 3 files changed, 176 insertions(+), 178 deletions(-) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt index 15e30d28b6..39cd282e7b 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt @@ -13,7 +13,6 @@ import com.mogo.eagle.core.function.api.devatools.IDevaToolsProvider import com.zhjt.mogo_core_function_devatools.badcase.BadCaseManager import com.zhjt.mogo_core_function_devatools.logcatch.MogoLogCatchManager import com.zhjt.mogo_core_function_devatools.monitor.MonitorManager -import com.zhjt.mogo_core_function_devatools.monitor.remote.UserServiceManager import com.zhjt.mogo_core_function_devatools.scene.SceneManager.Companion.sceneManager import com.zhjt.mogo_core_function_devatools.status.* import com.zhjt.mogo_core_function_devatools.trace.TraceManager.Companion.traceManager diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/CpuMonitor.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/CpuMonitor.kt index a8bd77a025..964c876fae 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/CpuMonitor.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/CpuMonitor.kt @@ -6,7 +6,6 @@ import android.os.Process import android.util.Log import com.zhjt.mogo_core_function_devatools.monitor.db.CpuInfo import com.zhjt.mogo_core_function_devatools.monitor.db.MonitorDb -import com.zhjt.mogo_core_function_devatools.monitor.remote.UserServiceManager import com.zhjt.mogo_core_function_devatools.monitor.utils.CpuUtils import java.text.SimpleDateFormat diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/remote/UserServiceManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/remote/UserServiceManager.kt index 7eaf674df2..a5ae332d30 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/remote/UserServiceManager.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/monitor/remote/UserServiceManager.kt @@ -1,182 +1,182 @@ package com.zhjt.mogo_core_function_devatools.monitor.remote -import rikka.shizuku.Shizuku -import android.content.ServiceConnection -import android.content.ComponentName -import android.os.IBinder -import rikka.shizuku.Shizuku.UserServiceArgs -import android.content.pm.PackageManager -import android.util.Log -import com.mogo.eagle.core.utilcode.util.AppUtils -import com.mogo.eagle.core.utilcode.util.ToastUtils -import rikka.shizuku.Shizuku.OnBinderReceivedListener -import rikka.shizuku.Shizuku.OnBinderDeadListener -import rikka.shizuku.Shizuku.OnRequestPermissionResultListener -import java.lang.StringBuilder +//import rikka.shizuku.Shizuku +//import android.content.ServiceConnection +//import android.content.ComponentName +//import android.os.IBinder +//import rikka.shizuku.Shizuku.UserServiceArgs +//import android.content.pm.PackageManager +//import android.util.Log +//import com.mogo.eagle.core.utilcode.util.AppUtils +//import com.mogo.eagle.core.utilcode.util.ToastUtils +//import rikka.shizuku.Shizuku.OnBinderReceivedListener +//import rikka.shizuku.Shizuku.OnBinderDeadListener +//import rikka.shizuku.Shizuku.OnRequestPermissionResultListener +//import java.lang.StringBuilder object UserServiceManager { - private const val TAG = "UserServiceManager" - private const val REQUEST_CODE_BIND = 1 - private const val REQUEST_CODE_UNBIND = 2 - - private var userServiceProxy: IUserInterface? = null - private var isFirst = true - - fun init() { - if (isFirst) { - addListener() - isFirst = false - } - bindUserService() - } - - fun stopService() { - removeListener() - unbindUserService() - } - - fun isServiceActive(): Boolean { - var isActive = false - val service = userServiceProxy - if (service != null && service is IBinder && service.isBinderAlive) { - isActive = true - } - return isActive - } - - private fun addListener() { - Shizuku.addBinderReceivedListenerSticky(BINDER_RECEIVED_LISTENER) - Shizuku.addBinderDeadListener(BINDER_DEAD_LISTENER) - Shizuku.addRequestPermissionResultListener(REQUEST_PERMISSION_RESULT_LISTENER) - } - - private fun removeListener() { - Shizuku.removeBinderReceivedListener(BINDER_RECEIVED_LISTENER) - Shizuku.removeBinderDeadListener(BINDER_DEAD_LISTENER) - Shizuku.removeRequestPermissionResultListener(REQUEST_PERMISSION_RESULT_LISTENER) - } - - private fun bindUserService() { - if (checkPermission(REQUEST_CODE_BIND)) { - val res = StringBuilder() - try { - if (Shizuku.getVersion() < 10) { - res.append("requires Shizuku API 10") - } else { - Shizuku.bindUserService(userServiceArgs, userServiceConnection) - } - } catch (tr: Throwable) { - tr.printStackTrace() - res.append(tr.toString()) - } - } - } - - private fun unbindUserService() { - if (checkPermission(REQUEST_CODE_UNBIND)) { - val res = StringBuilder() - try { - if (Shizuku.getVersion() < 10) { - res.append("requires Shizuku API 10") - } else { - Shizuku.unbindUserService(userServiceArgs, userServiceConnection, true) - } - } catch (tr: Throwable) { - tr.printStackTrace() - res.append(tr.toString()) - } - } - } - - fun exec(cmd: String): String { - return userServiceProxy?.exec(cmd) ?: "" - } - - /** - * 单位:%,保留1位小数 - */ - fun getCpuUsage(pid: Int): Double { - return userServiceProxy?.getCpuUsage(pid) ?: -1.0 - } - - private val userServiceConnection: ServiceConnection = object : ServiceConnection { - override fun onServiceConnected(componentName: ComponentName, binder: IBinder?) { - if (binder != null && binder.pingBinder()) { - val service = RemoteUserServiceImp.asInterface(binder) - userServiceProxy = service - ToastUtils.showShort("监控权限获取成功!") - } - } - - override fun onServiceDisconnected(componentName: ComponentName) {} - } - - private val userServiceArgs by lazy { - val appInfo = AppUtils.getAppInfo() - UserServiceArgs( - ComponentName( - appInfo?.packageName ?: "com.mogo.launcher.f", - RemoteUserServiceImp::class.java.name - ) - ) - .daemon(false) - .processNameSuffix("service") - .debuggable(true) - .version(appInfo?.versionCode ?: 1) - } - - private fun checkPermission(code: Int): Boolean { - if (Shizuku.isPreV11()) { - Log.w(TAG, "Version is preV11!") - return false - } - try { - return if (Shizuku.checkSelfPermission() == PackageManager.PERMISSION_GRANTED) { - true - } else if (Shizuku.shouldShowRequestPermissionRationale()) { - Log.e(TAG, "User denied permission (shouldShowRequestPermissionRationale=true)") - false - } else { - Shizuku.requestPermission(code) - false - } - } catch (e: Throwable) { - Log.e(TAG, Log.getStackTraceString(e)) - ToastUtils.showLong("请先打开Shizuku并启动它!") - } - return false - } - - private fun onRequestPermissionsResult(requestCode: Int, grantResult: Int) { - if (grantResult == PackageManager.PERMISSION_GRANTED) { - when (requestCode) { - REQUEST_CODE_BIND -> { - bindUserService() - } - REQUEST_CODE_UNBIND -> { - unbindUserService() - } - else -> {} - } - } else { - Log.e(TAG, "User denied permission") - } - } - - private val BINDER_RECEIVED_LISTENER = OnBinderReceivedListener { - if (Shizuku.isPreV11()) { - Log.w(TAG, "Shizuku pre-v11 is not supported") - } else { - Log.d(TAG, "Binder received") - } - } - private val BINDER_DEAD_LISTENER = OnBinderDeadListener { Log.w(TAG, "Binder dead") } - private val REQUEST_PERMISSION_RESULT_LISTENER = - OnRequestPermissionResultListener { requestCode: Int, grantResult: Int -> - onRequestPermissionsResult( - requestCode, - grantResult - ) - } +// private const val TAG = "UserServiceManager" +// private const val REQUEST_CODE_BIND = 1 +// private const val REQUEST_CODE_UNBIND = 2 +// +// private var userServiceProxy: IUserInterface? = null +// private var isFirst = true +// +// fun init() { +// if (isFirst) { +// addListener() +// isFirst = false +// } +// bindUserService() +// } +// +// fun stopService() { +// removeListener() +// unbindUserService() +// } +// +// fun isServiceActive(): Boolean { +// var isActive = false +// val service = userServiceProxy +// if (service != null && service is IBinder && service.isBinderAlive) { +// isActive = true +// } +// return isActive +// } +// +// private fun addListener() { +// Shizuku.addBinderReceivedListenerSticky(BINDER_RECEIVED_LISTENER) +// Shizuku.addBinderDeadListener(BINDER_DEAD_LISTENER) +// Shizuku.addRequestPermissionResultListener(REQUEST_PERMISSION_RESULT_LISTENER) +// } +// +// private fun removeListener() { +// Shizuku.removeBinderReceivedListener(BINDER_RECEIVED_LISTENER) +// Shizuku.removeBinderDeadListener(BINDER_DEAD_LISTENER) +// Shizuku.removeRequestPermissionResultListener(REQUEST_PERMISSION_RESULT_LISTENER) +// } +// +// private fun bindUserService() { +// if (checkPermission(REQUEST_CODE_BIND)) { +// val res = StringBuilder() +// try { +// if (Shizuku.getVersion() < 10) { +// res.append("requires Shizuku API 10") +// } else { +// Shizuku.bindUserService(userServiceArgs, userServiceConnection) +// } +// } catch (tr: Throwable) { +// tr.printStackTrace() +// res.append(tr.toString()) +// } +// } +// } +// +// private fun unbindUserService() { +// if (checkPermission(REQUEST_CODE_UNBIND)) { +// val res = StringBuilder() +// try { +// if (Shizuku.getVersion() < 10) { +// res.append("requires Shizuku API 10") +// } else { +// Shizuku.unbindUserService(userServiceArgs, userServiceConnection, true) +// } +// } catch (tr: Throwable) { +// tr.printStackTrace() +// res.append(tr.toString()) +// } +// } +// } +// +// fun exec(cmd: String): String { +// return userServiceProxy?.exec(cmd) ?: "" +// } +// +// /** +// * 单位:%,保留1位小数 +// */ +// fun getCpuUsage(pid: Int): Double { +// return userServiceProxy?.getCpuUsage(pid) ?: -1.0 +// } +// +// private val userServiceConnection: ServiceConnection = object : ServiceConnection { +// override fun onServiceConnected(componentName: ComponentName, binder: IBinder?) { +// if (binder != null && binder.pingBinder()) { +// val service = RemoteUserServiceImp.asInterface(binder) +// userServiceProxy = service +// ToastUtils.showShort("监控权限获取成功!") +// } +// } +// +// override fun onServiceDisconnected(componentName: ComponentName) {} +// } +// +// private val userServiceArgs by lazy { +// val appInfo = AppUtils.getAppInfo() +// UserServiceArgs( +// ComponentName( +// appInfo?.packageName ?: "com.mogo.launcher.f", +// RemoteUserServiceImp::class.java.name +// ) +// ) +// .daemon(false) +// .processNameSuffix("service") +// .debuggable(true) +// .version(appInfo?.versionCode ?: 1) +// } +// +// private fun checkPermission(code: Int): Boolean { +// if (Shizuku.isPreV11()) { +// Log.w(TAG, "Version is preV11!") +// return false +// } +// try { +// return if (Shizuku.checkSelfPermission() == PackageManager.PERMISSION_GRANTED) { +// true +// } else if (Shizuku.shouldShowRequestPermissionRationale()) { +// Log.e(TAG, "User denied permission (shouldShowRequestPermissionRationale=true)") +// false +// } else { +// Shizuku.requestPermission(code) +// false +// } +// } catch (e: Throwable) { +// Log.e(TAG, Log.getStackTraceString(e)) +// ToastUtils.showLong("请先打开Shizuku并启动它!") +// } +// return false +// } +// +// private fun onRequestPermissionsResult(requestCode: Int, grantResult: Int) { +// if (grantResult == PackageManager.PERMISSION_GRANTED) { +// when (requestCode) { +// REQUEST_CODE_BIND -> { +// bindUserService() +// } +// REQUEST_CODE_UNBIND -> { +// unbindUserService() +// } +// else -> {} +// } +// } else { +// Log.e(TAG, "User denied permission") +// } +// } +// +// private val BINDER_RECEIVED_LISTENER = OnBinderReceivedListener { +// if (Shizuku.isPreV11()) { +// Log.w(TAG, "Shizuku pre-v11 is not supported") +// } else { +// Log.d(TAG, "Binder received") +// } +// } +// private val BINDER_DEAD_LISTENER = OnBinderDeadListener { Log.w(TAG, "Binder dead") } +// private val REQUEST_PERMISSION_RESULT_LISTENER = +// OnRequestPermissionResultListener { requestCode: Int, grantResult: Int -> +// onRequestPermissionsResult( +// requestCode, +// grantResult +// ) +// } } \ No newline at end of file From ee141ee5cf42262520ae49444428708ac853b9d4 Mon Sep 17 00:00:00 2001 From: chenfufeng Date: Tue, 30 Aug 2022 19:48:26 +0800 Subject: [PATCH 08/22] =?UTF-8?q?[Feat]=E6=B7=BB=E5=8A=A0=E6=80=A7?= =?UTF-8?q?=E8=83=BD=E7=9B=91=E6=B5=8B=E5=BC=80=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../passenger/ui/TaxiPassengerBaseFragment.java | 7 ------- .../eagle/core/function/hmi/ui/MoGoHmiFragment.kt | 15 +++------------ .../function/hmi/ui/setting/DebugSettingView.kt | 13 +++++++++++++ 3 files changed, 16 insertions(+), 19 deletions(-) diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.java index b98ff00c16..d47490d697 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.java @@ -143,13 +143,6 @@ public class TaxiPassengerBaseFragment extends MvpFragment { - OverlayLeftViewUtils.INSTANCE.showOverlayView(getActivity(),0,true,-1,true); - //showOrHideArrivedEndLayout(true, "北京北京北京", "1527481606997577728"); - //showOrHidePressengerCheckPager(true, "开始站点开", "开始站点开始站点开始", "2", "京A888888", "18811539480"); - //OCHFloatWindowManager.getInstance().ShowFloatWindow(getContext()); - }); } private void initArrivedView(){ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt index 25f91f0723..754ec01701 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt @@ -160,8 +160,6 @@ import java.util.* private var busOperationStatus: IOchBusView? = null - private var isStarted = false - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) } @@ -184,17 +182,10 @@ import java.util.* } } - ivCameraIcon?.setOnLongClickListener { - if (!isStarted) { - CallerDevaToolsManager.startMonitor() - isStarted = true - } else { - CallerDevaToolsManager.stopMonitor() - isStarted = false - } -// activity?.let { it1 -> CarcorderPreviewView.show(it1) } + /**ivCameraIcon?.setOnLongClickListener { + activity?.let { it1 -> CarcorderPreviewView.show(it1) } true - } + }*/ ivToolsIcon?.setOnClickListener { if (toolsViewFloat == null) { diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt index dae516b0ca..ab02d53085 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt @@ -152,6 +152,8 @@ class DebugSettingView @JvmOverloads constructor( SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS") } + private var isStarted = false + init { LayoutInflater.from(context).inflate(R.layout.view_debug_setting, this, true) initView() @@ -853,6 +855,17 @@ class DebugSettingView @JvmOverloads constructor( } } + btnBrakeThreshold.setOnLongClickListener { + if (!isStarted) { + CallerDevaToolsManager.startMonitor() + isStarted = true + } else { + CallerDevaToolsManager.stopMonitor() + isStarted = false + } + true + } + //设置连接司机屏IP btnConnectServerIp.setOnClickListener { val ip = etConnectServerIp.text.toString() From a2c5a46a9686af1a621da7d344122e8bdf8bd5d5 Mon Sep 17 00:00:00 2001 From: yangyakun Date: Wed, 31 Aug 2022 16:24:21 +0800 Subject: [PATCH 09/22] =?UTF-8?q?[2.10.0]=20toast=E6=8E=A7=E5=88=B6cod?= =?UTF-8?q?=E3=80=81=E8=AE=BE=E7=BD=AEdialogfragment=20=E6=98=BE=E7=A4=BAA?= =?UTF-8?q?ndroidx=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../och/common/module/utils/ToastUtilsOch.java | 17 +++++++++++++++++ .../com/mogo/och/taxi/model/TaxiModel.java | 18 +++++++++--------- .../och/taxi/ui/TaxiLoginDialogFragment.kt | 12 +++++++++++- 3 files changed, 37 insertions(+), 10 deletions(-) create mode 100644 OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/ToastUtilsOch.java diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/ToastUtilsOch.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/ToastUtilsOch.java new file mode 100644 index 0000000000..829093f3a7 --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/ToastUtilsOch.java @@ -0,0 +1,17 @@ +package com.mogo.och.common.module.utils; + +import com.mogo.commons.debug.DebugConfig; +import com.mogo.eagle.core.utilcode.util.ToastUtils; + +public class ToastUtilsOch { + public static void showWithCodeMessage(int code,String message){ + if(message==null){ + return; + } + if (DebugConfig.isDebug()) { + ToastUtils.showShort(code+","+message); + }else { + ToastUtils.showShort(message); + } + } +} diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java index 002a14dc61..a173d00020 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java @@ -36,6 +36,7 @@ import com.mogo.map.navi.IMogoCarLocationChangedListener2; import com.mogo.module.common.MogoApisHandler; import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil; import com.mogo.och.common.module.utils.PinYinUtil; +import com.mogo.och.common.module.utils.ToastUtilsOch; import com.mogo.och.taxi.R; import com.mogo.och.taxi.bean.DriverServiceDataRespBean; import com.mogo.och.taxi.bean.DriverStatusQueryRespBean; @@ -309,7 +310,7 @@ public class TaxiModel { @Override public void onFail(int code, String msg) { - ToastUtils.showShort(code + "," + msg); + ToastUtilsOch.showWithCodeMessage(code,msg); if(mCarStatusCallback!=null) { mCarStatusCallback.onCarLoginStatusChange(StatusManager.isLogin()); } @@ -344,7 +345,7 @@ public class TaxiModel { @Override public void onFail(int code, String msg) { - ToastUtils.showShort(code + "," + msg); + ToastUtilsOch.showWithCodeMessage(code, msg); } }); @@ -490,7 +491,7 @@ public class TaxiModel { @Override public void onFail(int code, String msg) { - ToastUtils.showShort(code + "," + msg); + ToastUtilsOch.showWithCodeMessage(code,msg); } }); } @@ -519,7 +520,7 @@ public class TaxiModel { @Override public void onFail(int code, String msg) { - ToastUtils.showShort(code + "," + msg); + ToastUtilsOch.showWithCodeMessage(code,msg); } }); } @@ -573,7 +574,7 @@ public class TaxiModel { @Override public void onFail(int code, String msg) { - ToastUtils.showShort(code + "," + msg); + ToastUtilsOch.showWithCodeMessage(code,msg); } }); } @@ -667,7 +668,7 @@ public class TaxiModel { @Override public void onFail(int code, String msg) { - ToastUtils.showShort(code + "," + msg); + ToastUtilsOch.showWithCodeMessage(code,msg); } }); } @@ -761,7 +762,7 @@ public class TaxiModel { @Override public void onFail(int code, String msg) { - ToastUtils.showShort(code + "," + msg); + ToastUtilsOch.showWithCodeMessage(code,msg); } }); } @@ -1578,7 +1579,6 @@ public class TaxiModel { @Override public void onError() { - mCarStatusCallback.onCarLoginStatusChange(false); if (!NetworkUtils.isConnected(mContext)) { ToastUtils.showShort(mContext.getString(R.string.network_error_tip)); } else { @@ -1588,7 +1588,7 @@ public class TaxiModel { @Override public void onFail(int code, String msg) { - ToastUtils.showShort(code + "," + msg); + ToastUtilsOch.showWithCodeMessage(code,msg); } }); } diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiLoginDialogFragment.kt b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiLoginDialogFragment.kt index a1ccc2ec62..e9cd5ce680 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiLoginDialogFragment.kt +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiLoginDialogFragment.kt @@ -12,6 +12,7 @@ import androidx.appcompat.widget.AppCompatTextView import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.content.ContextCompat import androidx.core.widget.addTextChangedListener +import androidx.fragment.app.DialogFragment import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentTransaction import com.mogo.commons.mvp.MvpDialogFragment @@ -203,7 +204,16 @@ class TaxiLoginDialogFragment : MvpDialogFragment Date: Wed, 31 Aug 2022 19:01:03 +0800 Subject: [PATCH 10/22] =?UTF-8?q?[fix]=20=E6=B7=BB=E5=8A=A0=E8=BD=AE?= =?UTF-8?q?=E8=AF=A2=E5=88=A4=E6=96=AD=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/mogo/och/taxi/model/TaxiModel.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java index a173d00020..58818e76ee 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java @@ -279,7 +279,7 @@ public class TaxiModel { StatusManager.setOpenOrderStatus(data.data.servingStatus); //更新view CallerLogger.INSTANCE.d(M_TAXI + TAG, "changeCarStatus:" + StatusManager.getLoginStatus()); - startOrStopOrderLoop(StatusManager.isLogin()); + startOrStopOrderLoop(StatusManager.isLogin()&&StatusManager.isOpeningOrderStatus()); if(mCarStatusCallback!=null) { mCarStatusCallback.onCarLoginStatusChange(StatusManager.isLogin()); } @@ -993,7 +993,7 @@ public class TaxiModel { CallerLogger.INSTANCE.d(M_TAXI + TAG, "onIntentReceived = %s", intentStr); if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intentStr)) { if (NetworkUtils.isConnected(mContext)) { - startOrStopOrderLoop(StatusManager.isLogin()); + startOrStopOrderLoop(StatusManager.isLogin()&&StatusManager.isOpeningOrderStatus()); queryCarStatus(); } } From ed772b8fbfc38aef5c0084086fc935e959d6194f Mon Sep 17 00:00:00 2001 From: renwj Date: Wed, 31 Aug 2022 23:33:13 +0800 Subject: [PATCH 11/22] =?UTF-8?q?[=E7=BA=BF=E7=A8=8B=E4=BC=98=E5=8C=96]?= =?UTF-8?q?=E5=8D=87=E7=BA=A7=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 786e3623ae..f676cc3b18 100644 --- a/build.gradle +++ b/build.gradle @@ -32,7 +32,7 @@ buildscript { classpath "com.bytedance.android.byteX:base-plugin:0.3.0" classpath "com.mogo.cloud:hook:${HOOK_LOG_VERSION}" classpath 'com.volcengine:apm_insight_plugin:1.4.1' - classpath 'com.mogo.thread.opt:plg:2.1.0' + classpath 'com.mogo.thread.opt:plg:2.1.2' classpath 'com.mogo.cloud:systrace:1.0.1' classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.18' From cc5b9f9babafd5e0c794f4f81e62839d868a2789 Mon Sep 17 00:00:00 2001 From: yangyakun Date: Thu, 1 Sep 2022 14:40:14 +0800 Subject: [PATCH 12/22] =?UTF-8?q?[fix]=20token=E8=8E=B7=E5=8F=96=E4=B8=AD?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=8E=A5=E5=8F=A3=E6=9A=82=E5=81=9C3s?= =?UTF-8?q?=E5=90=8E=E9=87=8D=E6=96=B0=E8=8E=B7=E5=8F=96=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E3=80=81=E4=BF=AE=E6=94=B9=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../taxi/bean/DriverStatusQueryRespBean.java | 6 ++-- .../taxi/bean/DriverStatusUpdateReqBean.java | 6 ++-- .../taxi/callback/ITaxiCarStatusCallback.java | 2 +- .../com/mogo/och/taxi/constant/TaxiConst.kt | 2 ++ .../com/mogo/och/taxi/model/TaxiModel.java | 16 +++++++--- .../och/taxi/network/TaxiServiceApiNew.java | 24 +------------- .../och/taxi/network/TaxiServiceManager.java | 32 +++++++------------ .../och/taxi/presenter/TaxiPresenter.java | 2 +- .../mogo/och/taxi/ui/BaseTaxiTabFragment.java | 1 - .../com/mogo/och/taxi/ui/TaxiFragment.java | 3 +- .../main/res/layout/taxi_base_fragment.xml | 2 +- 11 files changed, 34 insertions(+), 62 deletions(-) diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/bean/DriverStatusQueryRespBean.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/bean/DriverStatusQueryRespBean.java index bb65c2efc8..ac630c9ecf 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/bean/DriverStatusQueryRespBean.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/bean/DriverStatusQueryRespBean.java @@ -5,14 +5,14 @@ import com.mogo.eagle.core.data.BaseData; /** * Created by pangfan on 2021/8/19 * - * 收车/出车状态查询返回数据结构 + * 状态查询返回数据结构 */ public class DriverStatusQueryRespBean extends BaseData { public Result data; public static class Result { - public int servingStatus; //0收车,1出车 - public int driverStatus; //0收车,1出车 + public int servingStatus; //1接单,1暂停接单 + public int driverStatus; //1登录,0登出 public String orderNo; public int purpose; // 1 运营, 2 测试, 3演示 } diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/bean/DriverStatusUpdateReqBean.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/bean/DriverStatusUpdateReqBean.java index 73481aa296..cb018309d7 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/bean/DriverStatusUpdateReqBean.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/bean/DriverStatusUpdateReqBean.java @@ -3,14 +3,12 @@ package com.mogo.och.taxi.bean; /** * Created by pangfan on 2021/8/19 * - * 收车/出车状态更新请求数据结构 + * 状态更新请求数据结构 */ public class DriverStatusUpdateReqBean { public String sn; - public int status; //0收车,1出车 - public DriverStatusUpdateReqBean(String sn, int status) { + public DriverStatusUpdateReqBean(String sn) { this.sn = sn; - this.status = status; } } diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/callback/ITaxiCarStatusCallback.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/callback/ITaxiCarStatusCallback.java index f6fd4d6810..ac0eddc08a 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/callback/ITaxiCarStatusCallback.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/callback/ITaxiCarStatusCallback.java @@ -3,7 +3,7 @@ package com.mogo.och.taxi.callback; /** * Created on 2021/9/8 * - * Model->Presenter回调:出车/收车状态变更 + * Model->Presenter回调:接单车状态变更 登录状态变更 */ public interface ITaxiCarStatusCallback { void onCarStatusChanged(boolean inOperation,String role); diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/constant/TaxiConst.kt b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/constant/TaxiConst.kt index cd34ecc455..41a1280592 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/constant/TaxiConst.kt +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/constant/TaxiConst.kt @@ -80,5 +80,7 @@ class TaxiConst { const val TYPE_MARKER_TAXI_ORDER = "TYPE_MARKER_TAXI_ORDER" const val TIMER_START_AUTOPILOT_INTERVAL = 20 * 1000L + + const val WAIT_TAKEN = 100046 } } \ No newline at end of file diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java index 58818e76ee..f09f6d1d4f 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java @@ -116,7 +116,7 @@ public class TaxiModel { private volatile List mWaitServiceList = Collections.emptyList(); //待服务订单 private ITaxiADASStatusCallback mADASStatusCallback; //Model->Presenter:自动驾驶状态相关 - private ITaxiCarStatusCallback mCarStatusCallback; //Model->Presenter:出车/收车状态 + private ITaxiCarStatusCallback mCarStatusCallback; //Model->Presenter:接单状态、登录状态和司机今日接单状态 private ITaxiControllerStatusCallback mControllerStatusCallback; //Model->Presenter:VR mode等 private ITaxiOrderStatusCallback mOrderStatusCallback; //Model->Presenter:订单变更 private Disposable subscribe; @@ -262,7 +262,7 @@ public class TaxiModel { } /** - * 查询出车/收车状态 + * 接单状态和登录状态查询 * 1、初始化查下状态 * 2、点击更新接单状态 如果是初始化状态就查下状态 * 3、点击更新接单状态后 查询状态 @@ -311,14 +311,20 @@ public class TaxiModel { @Override public void onFail(int code, String msg) { ToastUtilsOch.showWithCodeMessage(code,msg); - if(mCarStatusCallback!=null) { - mCarStatusCallback.onCarLoginStatusChange(StatusManager.isLogin()); + if(code==TaxiConst.WAIT_TAKEN){ + subscribe = Observable.timer(3, TimeUnit.SECONDS).subscribe(aLong -> { + queryCarStatus(); + }); + }else { + if (mCarStatusCallback != null) { + mCarStatusCallback.onCarLoginStatusChange(StatusManager.isLogin()); + } } } }); } - //更新出车收车状态 + //更新接单状态 public void updateCarStatus() { if(!StatusManager.isLogin()){ queryCarStatus(); diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/network/TaxiServiceApiNew.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/network/TaxiServiceApiNew.java index fc156d38d2..8b29d4039d 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/network/TaxiServiceApiNew.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/network/TaxiServiceApiNew.java @@ -154,28 +154,6 @@ interface TaxiServiceApiNew { Observable updateOrderStatus(@Header ("appId") String appId,@Header("ticket") String ticket ,@Body OrderStatusUpdateReqBean data); - /** - * 收车/出车状态更新 - * @param data - * @return - */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) -// @POST( "/autopilot-car-hailing/api/v1/driver/serviceStatus/update" ) - @POST( "/autopilot-car-hailing/car/v2/driver/taxi/serviceStatus/update" ) - Observable updateDriverServiceStatus(@Header ("appId") String appId,@Header("ticket") String ticket - ,@Body DriverStatusUpdateReqBean data); - - /** - * 收车/出车状态查询 - * @param sn - * @return - */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) -// @GET( "/autopilot-car-hailing/api/v1/driver/serviceStatus/query" ) - @GET( "/autopilot-car-hailing/car/v2/driver/taxi/serviceStatus/query" ) - Observable queryDriverServiceStatus(@Header ("appId") String appId - ,@Header("ticket") String ticket,@Query("sn") String sn); - /** * 车机端上传心跳数据(只在出车状态时上传):包含高德坐标系经纬度 * @param data @@ -362,7 +340,7 @@ interface TaxiServiceApiNew { Observable resetOrderServing(@Header ("appId") String appId,@Header("ticket") String ticket ,@Body DriverStatusUpdateReqBean data); /** - * 收车/出车状态和登录状态查询 + * 接单状态和登录状态查询 * @param sn * @return */ diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/network/TaxiServiceManager.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/network/TaxiServiceManager.java index 4e2750299a..333ca64fd9 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/network/TaxiServiceManager.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/network/TaxiServiceManager.java @@ -4,6 +4,7 @@ import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAX import android.content.Context; +import com.mogo.cloud.passport.MoGoAiCloudClient; import com.mogo.cloud.passport.MoGoAiCloudClientConfig; import com.mogo.eagle.core.data.BaseData; import com.mogo.eagle.core.network.MoGoRetrofitFactory; @@ -237,22 +238,6 @@ public class TaxiServiceManager { .subscribe(getSubscribeImpl(context, callback, "updateOrderStatus")); } -// /** -// * 收车/出车状态更新 -// * @param context -// * @param status -// * @param callback -// */ -// public void updateDriverServiceStatus(Context context, int status, -// TaxiServiceCallback callback) { -// mOCHTaxiServiceApi.updateDriverServiceStatus(MoGoAiCloudClientConfig.getInstance().getServiceAppId() -// ,MoGoAiCloudClientConfig.getInstance().getToken() -// ,new DriverStatusUpdateReqBean( -// MoGoAiCloudClientConfig.getInstance().getSn(), status)) -// .subscribeOn(Schedulers.io()) -// .observeOn(AndroidSchedulers.mainThread()) -// .subscribe(getSubscribeImpl(context, callback, "updateDriverServiceStatus")); -// } /** * 暂停接单 @@ -266,12 +251,12 @@ public class TaxiServiceManager { baseDataObservable = mOCHTaxiServiceApi.stopOrderServing(MoGoAiCloudClientConfig.getInstance().getServiceAppId() , MoGoAiCloudClientConfig.getInstance().getToken() , new DriverStatusUpdateReqBean( - MoGoAiCloudClientConfig.getInstance().getSn(), 0)); + MoGoAiCloudClientConfig.getInstance().getSn())); }else {// 没有接单去接单 baseDataObservable = mOCHTaxiServiceApi.resetOrderServing(MoGoAiCloudClientConfig.getInstance().getServiceAppId() , MoGoAiCloudClientConfig.getInstance().getToken() , new DriverStatusUpdateReqBean( - MoGoAiCloudClientConfig.getInstance().getSn(), 0)); + MoGoAiCloudClientConfig.getInstance().getSn())); } baseDataObservable.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) @@ -279,12 +264,17 @@ public class TaxiServiceManager { } /** - * 收车/出车状态查询 + * 接单状态和登录状态查询 * @param context * @param callback */ public void queryDriverServiceStatus(Context context, TaxiServiceCallback callback) { + if(MoGoAiCloudClientConfig.getInstance().getToken().isEmpty()){ + callback.onFail(TaxiConst.WAIT_TAKEN,"等待令牌中请稍等"); + MoGoAiCloudClient.getInstance().refreshToken(); + return; + } mOCHTaxiServiceApi.queryDriverServiceStatusAndLoginStatus(MoGoAiCloudClientConfig.getInstance().getServiceAppId() ,MoGoAiCloudClientConfig.getInstance().getToken() ,MoGoAiCloudClientConfig.getInstance().getSn()) @@ -466,7 +456,7 @@ public class TaxiServiceManager { } /** - * 收车/出车状态查询 + * 获取手机验证码 * @param context * @param callback */ @@ -480,7 +470,7 @@ public class TaxiServiceManager { .subscribe(getSubscribeImpl(context, callback, "getPhoneCode")); } /** - * 收车/出车状态查询 + * 通过验证码登录 * @param context * @param callback */ diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/presenter/TaxiPresenter.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/presenter/TaxiPresenter.java index 056ae96298..242054397e 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/presenter/TaxiPresenter.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/presenter/TaxiPresenter.java @@ -126,7 +126,7 @@ public class TaxiPresenter extends Presenter implements ITaxiADASS TaxiModel.getInstance().confirmAutopilotConditionByDriver(); } - // 更新出车/收车状态 + // 更新接单状态 public void updateCarStatus() { TaxiModel.getInstance().updateCarStatus(); } diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/BaseTaxiTabFragment.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/BaseTaxiTabFragment.java index 8639133655..00f38adf8b 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/BaseTaxiTabFragment.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/BaseTaxiTabFragment.java @@ -65,7 +65,6 @@ public abstract class BaseTaxiTabFragment Date: Thu, 1 Sep 2022 17:27:34 +0800 Subject: [PATCH 13/22] =?UTF-8?q?=E5=8F=AA=E5=9C=A8=E5=8F=B8=E6=9C=BA?= =?UTF-8?q?=E7=AB=AF=E8=AE=BE=E7=BD=AE=E7=BE=8E=E5=8C=96=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=E5=BC=80=E5=85=B3=E5=8A=9F=E8=83=BD,=E4=B9=98=E5=AE=A2?= =?UTF-8?q?=E5=B1=8F=E9=9A=90=E8=97=8F=E8=AE=BE=E7=BD=AE=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eagle/core/function/hmi/ui/setting/DebugSettingView.kt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt index ab02d53085..8777d24345 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt @@ -573,6 +573,11 @@ class DebugSettingView @JvmOverloads constructor( } } + //只在司机端设置美化模式开关功能 + if(AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)){ + tbIsDemoMode.visibility = View.GONE + } + // 雨天模式,上一次勾选的数据 tbIsRainMode.isChecked = FunctionBuildConfig.isRainMode //雨天模式 From b18cae9677fba4618365e3022c7af0260e851c2d Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Tue, 30 Aug 2022 15:10:28 +0800 Subject: [PATCH 14/22] opt --- .../core/function/autopilot/MoGoAutopilotProvider.kt | 10 +++++----- .../eagle/core/function/main/MainLauncherActivity.java | 7 ------- 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt index 4b2f8680b7..eb426b94f2 100644 --- a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt +++ b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt @@ -433,15 +433,15 @@ class MoGoAutopilotProvider : */ override fun sendOperatorChangeLaneLeft() { // Log.d("liyz", "MoGoAutopilotProvider sendOperatorChangeLaneLeft -------> ") -// AdasManager.getInstance().sendOperatorCmdChangeLaneLeft() + AdasManager.getInstance().sendOperatorCmdChangeLaneLeft() } /** * 向右变道 */ override fun sendOperatorChangeLaneRight() { - Log.d("liyz", "MoGoAutopilotProvider sendOperatorChangeLaneRight -------> ") -// AdasManager.getInstance().sendOperatorCmdChangeLaneRight() +// Log.d("liyz", "MoGoAutopilotProvider sendOperatorChangeLaneRight -------> ") + AdasManager.getInstance().sendOperatorCmdChangeLaneRight() } /** @@ -449,7 +449,7 @@ class MoGoAutopilotProvider : */ override fun sendOperatorSetAcceleratedSpeed(cc: Double) { // Log.d("liyz", "MoGoAutopilotProvider sendOperatorSetAcceleratedSpeed cc $cc ") -// AdasManager.getInstance().sendOperatorCmdSetAcceleratedSpeed(cc) + AdasManager.getInstance().sendOperatorCmdSetAcceleratedSpeed(cc) } /** @@ -457,7 +457,7 @@ class MoGoAutopilotProvider : */ override fun sendOperatorSetHorn(value: Double) { // Log.d("liyz", "MoGoAutopilotProvider sendOperatorSetHorn value $value ") -// AdasManager.getInstance().sendOperatorCmdSetHorn(value) + AdasManager.getInstance().sendOperatorCmdSetHorn(value) } /** diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainLauncherActivity.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainLauncherActivity.java index 010768e236..d3dc6ecefb 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainLauncherActivity.java +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainLauncherActivity.java @@ -271,12 +271,6 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis } return super.dispatchTouchEvent(event); - -// if (SharedPrefsMgr.getInstance(getContext()).getBoolean("BLUETOOTH", false)) { -// return false; -// } else { -// return super.dispatchTouchEvent(event); -// } } @Override @@ -380,7 +374,6 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis connectBluetooth(); //主动连接一次 }, 4000L); } - } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { From 7ecb84db586bf18a90874877e1aed69768dcc190 Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Wed, 31 Aug 2022 12:35:39 +0800 Subject: [PATCH 15/22] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=AD=94=E6=96=B9?= =?UTF-8?q?=E6=8E=A7=E5=88=B6=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../function/main/MainLauncherActivity.java | 168 ++++++++++++++---- 1 file changed, 131 insertions(+), 37 deletions(-) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainLauncherActivity.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainLauncherActivity.java index d3dc6ecefb..2935613a99 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainLauncherActivity.java +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainLauncherActivity.java @@ -75,6 +75,16 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis private BluetoothMonitorReceiver mBluetoothReceiver = null; private BluetoothAdapter mBluetoothAdapter; private List mAreadlyConnectedList = new ArrayList<>();//已连接设备集合 + private int numberA = 0; + private boolean isLongPressA = false; + private int numberB = 0; + private boolean isLongPressB = false; + private int numberC = 0; + private boolean isLongPressC = false; + private int numberD = 0; + private boolean isLongPressD = false; + private int numberE = 0; + private boolean isLongPressE = false; @Override @@ -226,15 +236,128 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis } return true; } + + Log.e("liyz", "onKeyDown keyCode = " + keyCode + "--action = " + event.getAction() + "---" + event); return super.onKeyDown(keyCode, event); } + + @Override + public boolean dispatchKeyEvent(KeyEvent event) { +// Log.d("liyz", "dispatchKeyEvent code = " + event.getKeyCode() + "--action = " + event.getAction() + "----" + event); + if (event.getKeyCode() == KeyEvent.KEYCODE_A) { //单击向左变道,长按-1 + if (event.getAction() == KeyEvent.ACTION_DOWN) { + numberA++; + Log.e("liyz", "numberA --1-- = " + numberA); + if (numberA > 2) { + if (!isLongPressA) { + ToastUtils.showShort("方块 长按A -1 "); + sendAcc(true, -1); + isLongPressA = true; + } + } + } else if (event.getAction() == KeyEvent.ACTION_UP) { + if (numberA == 1) { + ToastUtils.showShort("方块 单击A ← 向左变道 "); + CallerAutoPilotManager.INSTANCE.sendOperatorChangeLaneLeft(); + } + numberA = 0; + isLongPressA = false; + } + return true; + } else if (event.getKeyCode() == KeyEvent.KEYCODE_B) { //单击向右变道,长按-2 + if (event.getAction() == KeyEvent.ACTION_DOWN) { + numberB++; + if (numberB > 2) { + if (!isLongPressB) { + ToastUtils.showShort("方块 长按B -2 "); + sendAcc(true, -2); + isLongPressB = true; + } + } + } else if (event.getAction() == KeyEvent.ACTION_UP) { + if (numberB == 1) { + ToastUtils.showShort("方块 单击B → 向右变道 "); + CallerAutoPilotManager.INSTANCE.sendOperatorChangeLaneRight(); + } + numberB = 0; + isLongPressB = false; + } + return true; + } else if (event.getKeyCode() == KeyEvent.KEYCODE_C) { //单击鸣笛, + if (event.getAction() == KeyEvent.ACTION_DOWN) { + numberC++; + if (numberC > 2) { + if (!isLongPressC) { + ToastUtils.showShort("方块 长按 C "); + isLongPressC = true; + } + } + } else if (event.getAction() == KeyEvent.ACTION_UP) { + if (numberC == 1) { + ToastUtils.showShort("方块 单击C 单击鸣笛 "); + CallerAutoPilotManager.INSTANCE.sendOperatorSetHorn(1); + if (timerHorn == null) { + timerHorn = new Timer(); + } + timerHorn.schedule(new TimerTask() { + @Override + public void run() { + CallerAutoPilotManager.INSTANCE.sendOperatorSetHorn(2); + timerHorn = null; + } + }, 500); + } + numberC = 0; + isLongPressC = false; + } + return true; + } else if (event.getKeyCode() == KeyEvent.KEYCODE_D) { //单击开启自动驾驶, + if (event.getAction() == KeyEvent.ACTION_DOWN) { + numberD++; + if (numberD > 2) { + if (!isLongPressD) { + ToastUtils.showShort("方块 长按 D "); + isLongPressD = true; + } + } + } else if (event.getAction() == KeyEvent.ACTION_UP) { + if (numberD == 1) { + ToastUtils.showShort("方块 单击D 开启自动驾驶 "); + CallerAutoPilotManager.INSTANCE.setControlAutopilotCarAuto(true); + } + numberD = 0; + isLongPressD = false; + } + return true; + } else if (event.getKeyCode() == KeyEvent.KEYCODE_E) { //单击复原, + if (event.getAction() == KeyEvent.ACTION_DOWN) { + numberE++; + if (numberE > 2) { + if (!isLongPressE) { + ToastUtils.showShort("方块 长按 E "); + isLongPressE = true; + } + } + } else if (event.getAction() == KeyEvent.ACTION_UP) { + if (numberE == 1) { + ToastUtils.showShort("方块 单击E 复原 "); + sendAcc(false, 0.0); + } + numberE = 0; + isLongPressE = false; + } + return true; + } + + return super.dispatchKeyEvent(event); + } + @Override public boolean dispatchTouchEvent(MotionEvent event) { -// Log.d("liyz", "dispatchTouchEvent event.getX() = " + event.getX() + "--event.getY() = " + event.getY() + "--action = " + event.getAction()); + Log.d("liyz", "dispatchTouchEvent event.getX() = " + event.getX() + "--event.getY() = " + event.getY() + "--action = " + event.getAction()); if (event.getX() == -1469.6875 && event.getY() == 530.0) { //向左变道 // ToastUtils.showShort("← 向左变道"); -// MogoMapUIController.getInstance().setLockMode( true ); CallerAutoPilotManager.INSTANCE.sendOperatorChangeLaneLeft(); return true; @@ -273,36 +396,6 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis return super.dispatchTouchEvent(event); } - @Override - public boolean onTouchEvent(MotionEvent event) { - - //← x:-1469.6875 y:530.0 - //↑ x:-1096.25 y:132.5 - //→ x:-863.4375 y: 690.0 - //↓ x:-1096.25 y:1099.0 - //O x:-1096.25 y:690.0 -// Log.d("liyz", "onTouchEvent event.getX() = " + event.getX() + "--event.getY() = " + event.getY()); - - if (event.getX() == -1469.6875 && event.getY() == 530.0) { -// ToastUtils.showShort("←"); - return true; - } else if (event.getX() == -1096.25 && event.getY() == 132.5) { -// ToastUtils.showShort("↑"); - return true; - } else if (event.getX() == -863.4375 && event.getY() == 690.0) { -// ToastUtils.showShort("→"); - return true; - } else if (event.getX() == -1096.25 && event.getY() == 1099.0) { -// ToastUtils.showShort("↓"); - return true; - } else if (event.getX() == -1096.25 && event.getY() == 690.0) { -// ToastUtils.showShort("O"); - return true; - } - return super.onTouchEvent(event); - } - - @Override public void onSkinModeChange(int skinMode) { if (skinMode == 0) { @@ -366,12 +459,12 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis boolean isConnected = (boolean) isConnectedMethod.invoke(device, (Object[]) null); // Log.e("liyz", "showBondedDevice Name:" + device.getName() + " Mac:" + device.getAddress() + "---isConnected = " + isConnected); mAreadlyConnectedList.add(device); - if (device.getName().equals("JX-05")) { - SharedPrefsMgr.getInstance(getContext()).putString("BT_MAC", device.getAddress()); - } +// if (device.getName().equals("JX-05")) { //TODO +// SharedPrefsMgr.getInstance(getContext()).putString("BT_MAC", device.getAddress()); +// } if (!isConnected) { UiThreadHandler.postDelayed(() -> { - connectBluetooth(); //主动连接一次 +// connectBluetooth(); //主动连接一次 }, 4000L); } } catch (NoSuchMethodException e) { @@ -387,7 +480,7 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis @Subscribe(threadMode = ThreadMode.MAIN) public void onAutoConnection(ConnectBluetoothEvent event) { - connectBluetooth(); +// connectBluetooth(); } /** @@ -405,6 +498,7 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis pos = i; } } + // Log.d("liyz", "connectBluetooth macAddress = " + macAddress + "---pos = " + pos); if (mAreadlyConnectedList.size() > pos && (pos >= 0)) { method.invoke(mAreadlyConnectedList.get(pos)); From e3fb040649903b3700b42441542ce549faa16234 Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Wed, 31 Aug 2022 14:03:33 +0800 Subject: [PATCH 16/22] delete log --- .../mogo/eagle/core/function/main/MainLauncherActivity.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainLauncherActivity.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainLauncherActivity.java index 2935613a99..27845db14b 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainLauncherActivity.java +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainLauncherActivity.java @@ -248,7 +248,6 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis if (event.getKeyCode() == KeyEvent.KEYCODE_A) { //单击向左变道,长按-1 if (event.getAction() == KeyEvent.ACTION_DOWN) { numberA++; - Log.e("liyz", "numberA --1-- = " + numberA); if (numberA > 2) { if (!isLongPressA) { ToastUtils.showShort("方块 长按A -1 "); @@ -355,7 +354,7 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis @Override public boolean dispatchTouchEvent(MotionEvent event) { - Log.d("liyz", "dispatchTouchEvent event.getX() = " + event.getX() + "--event.getY() = " + event.getY() + "--action = " + event.getAction()); +// Log.d("liyz", "dispatchTouchEvent event.getX() = " + event.getX() + "--event.getY() = " + event.getY() + "--action = " + event.getAction()); if (event.getX() == -1469.6875 && event.getY() == 530.0) { //向左变道 // ToastUtils.showShort("← 向左变道"); CallerAutoPilotManager.INSTANCE.sendOperatorChangeLaneLeft(); From e5fe556c92c225763ef7737c05a372a2ecf16eee Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Thu, 1 Sep 2022 10:10:14 +0800 Subject: [PATCH 17/22] opt --- .../core/function/main/MainLauncherActivity.java | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainLauncherActivity.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainLauncherActivity.java index 27845db14b..47171e28c0 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainLauncherActivity.java +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainLauncherActivity.java @@ -4,7 +4,6 @@ import static com.mogo.eagle.core.data.deva.chain.ChainConstant.CHAIN_ALIAS_CODE import static com.mogo.eagle.core.data.deva.chain.ChainConstant.CHAIN_LINK_INIT; import static com.mogo.eagle.core.data.deva.chain.ChainConstant.CHAIN_LINK_LOG_CONNECT_STATUS; import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_HMI; -import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_MAP; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; @@ -24,10 +23,8 @@ import androidx.annotation.Nullable; import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.commons.debug.DebugConfig; import com.mogo.eagle.core.data.config.FunctionBuildConfig; -import com.mogo.eagle.core.data.config.HdMapBuildConfig; import com.mogo.eagle.core.function.api.base.IMoGoFunctionProvider; import com.mogo.eagle.core.function.api.setting.IMoGoSkinModeChangeListener; -import com.mogo.eagle.core.function.call.analytics.AnalyticsManager; import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotManager; import com.mogo.eagle.core.function.call.setting.CallerSkinModeListenerManager; import com.mogo.eagle.core.function.hmi.R; @@ -39,7 +36,6 @@ import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr; import com.mogo.eagle.core.utilcode.util.BarUtils; import com.mogo.eagle.core.utilcode.util.ToastUtils; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; -import com.mogo.map.MogoMapUIController; import com.mogo.service.intent.IMogoIntentListener; import com.rousetime.android_startup.model.CostTimesModel; import com.zhjt.service.chain.ChainLog; @@ -458,12 +454,12 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis boolean isConnected = (boolean) isConnectedMethod.invoke(device, (Object[]) null); // Log.e("liyz", "showBondedDevice Name:" + device.getName() + " Mac:" + device.getAddress() + "---isConnected = " + isConnected); mAreadlyConnectedList.add(device); -// if (device.getName().equals("JX-05")) { //TODO -// SharedPrefsMgr.getInstance(getContext()).putString("BT_MAC", device.getAddress()); -// } + if (device.getName().equals("JX-05")) { //后面魔戒可能不使用了 + SharedPrefsMgr.getInstance(getContext()).putString("BT_MAC", device.getAddress()); + } if (!isConnected) { UiThreadHandler.postDelayed(() -> { -// connectBluetooth(); //主动连接一次 + connectBluetooth(); //主动连接一次 }, 4000L); } } catch (NoSuchMethodException e) { From 3cda59195c7fe4b83980b729efaca3cea62572ca Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Thu, 1 Sep 2022 17:45:33 +0800 Subject: [PATCH 18/22] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8C=89=E9=92=AE?= =?UTF-8?q?=E6=8E=A7=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../function/main/MainLauncherActivity.java | 56 +++++++++---------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainLauncherActivity.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainLauncherActivity.java index 47171e28c0..57a75e5d82 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainLauncherActivity.java +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainLauncherActivity.java @@ -233,7 +233,7 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis return true; } - Log.e("liyz", "onKeyDown keyCode = " + keyCode + "--action = " + event.getAction() + "---" + event); +// Log.e("liyz", "onKeyDown keyCode = " + keyCode + "--action = " + event.getAction() + "---" + event); return super.onKeyDown(keyCode, event); } @@ -246,15 +246,15 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis numberA++; if (numberA > 2) { if (!isLongPressA) { - ToastUtils.showShort("方块 长按A -1 "); - sendAcc(true, -1); +// ToastUtils.showShort("方块 长按A -2 "); + sendAcc(true, -2); isLongPressA = true; } } } else if (event.getAction() == KeyEvent.ACTION_UP) { if (numberA == 1) { - ToastUtils.showShort("方块 单击A ← 向左变道 "); - CallerAutoPilotManager.INSTANCE.sendOperatorChangeLaneLeft(); +// ToastUtils.showShort("方块 点击A -1 "); + sendAcc(true, -1); } numberA = 0; isLongPressA = false; @@ -265,15 +265,14 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis numberB++; if (numberB > 2) { if (!isLongPressB) { - ToastUtils.showShort("方块 长按B -2 "); - sendAcc(true, -2); +// ToastUtils.showShort("方块 长按B 无操作 "); isLongPressB = true; } } } else if (event.getAction() == KeyEvent.ACTION_UP) { if (numberB == 1) { - ToastUtils.showShort("方块 单击B → 向右变道 "); - CallerAutoPilotManager.INSTANCE.sendOperatorChangeLaneRight(); +// ToastUtils.showShort("方块 单击B 复原 "); + sendAcc(false, 0.0); } numberB = 0; isLongPressB = false; @@ -284,24 +283,14 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis numberC++; if (numberC > 2) { if (!isLongPressC) { - ToastUtils.showShort("方块 长按 C "); +// ToastUtils.showShort("方块 长按C 无操作"); isLongPressC = true; } } } else if (event.getAction() == KeyEvent.ACTION_UP) { if (numberC == 1) { - ToastUtils.showShort("方块 单击C 单击鸣笛 "); - CallerAutoPilotManager.INSTANCE.sendOperatorSetHorn(1); - if (timerHorn == null) { - timerHorn = new Timer(); - } - timerHorn.schedule(new TimerTask() { - @Override - public void run() { - CallerAutoPilotManager.INSTANCE.sendOperatorSetHorn(2); - timerHorn = null; - } - }, 500); +// ToastUtils.showShort("方块 单击C ← 向左变道 "); + CallerAutoPilotManager.INSTANCE.sendOperatorChangeLaneLeft(); } numberC = 0; isLongPressC = false; @@ -312,14 +301,14 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis numberD++; if (numberD > 2) { if (!isLongPressD) { - ToastUtils.showShort("方块 长按 D "); +// ToastUtils.showShort("方块 长按D 无操作"); isLongPressD = true; } } } else if (event.getAction() == KeyEvent.ACTION_UP) { if (numberD == 1) { - ToastUtils.showShort("方块 单击D 开启自动驾驶 "); - CallerAutoPilotManager.INSTANCE.setControlAutopilotCarAuto(true); +// ToastUtils.showShort("方块 单击D → 向右变道 "); + CallerAutoPilotManager.INSTANCE.sendOperatorChangeLaneRight(); } numberD = 0; isLongPressD = false; @@ -330,14 +319,25 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis numberE++; if (numberE > 2) { if (!isLongPressE) { - ToastUtils.showShort("方块 长按 E "); +// ToastUtils.showShort("方块 长按E 鸣笛 "); + CallerAutoPilotManager.INSTANCE.sendOperatorSetHorn(1); + if (timerHorn == null) { + timerHorn = new Timer(); + } + timerHorn.schedule(new TimerTask() { + @Override + public void run() { + CallerAutoPilotManager.INSTANCE.sendOperatorSetHorn(2); + timerHorn = null; + } + }, 500); isLongPressE = true; } } } else if (event.getAction() == KeyEvent.ACTION_UP) { if (numberE == 1) { - ToastUtils.showShort("方块 单击E 复原 "); - sendAcc(false, 0.0); +// ToastUtils.showShort("方块 单击E 开启自动驾驶 "); + CallerAutoPilotManager.INSTANCE.setControlAutopilotCarAuto(true); } numberE = 0; isLongPressE = false; From 3209529c537685cfef807903bca84732b9d55f5c Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Thu, 1 Sep 2022 18:07:29 +0800 Subject: [PATCH 19/22] =?UTF-8?q?=E5=8E=BB=E6=8E=89=E5=9C=B0=E5=9B=BE?= =?UTF-8?q?=E6=BB=91=E5=8A=A8=E9=99=90=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java b/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java index 309dd058e4..456e388c08 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java @@ -171,7 +171,7 @@ public class AMapViewWrapper implements IMogoMapView, //设置手势是否可以缩放 isCanZoom true 可缩放 false 不可缩放 options.setZoomGesturesEnabled(true); options.setScaleVRMode(true); - options.setAllGesturesEnabled(false); //禁止全部手势 +// options.setAllGesturesEnabled(false); //禁止全部手势 if (options.getMyLocationStyle() != null) { options.getMyLocationStyle().setDisplayAnimEnable(true); } From 771e4a702d8ba1f2c51f8bcb7f6bffe270440091 Mon Sep 17 00:00:00 2001 From: wangmingjun Date: Thu, 1 Sep 2022 21:01:56 +0800 Subject: [PATCH 20/22] =?UTF-8?q?[2.10.0]=20=E7=82=B9=E5=87=BB=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E9=A9=BE=E9=A9=B6=E6=8C=89=E9=92=AE=E5=8E=BB=E6=8E=89?= =?UTF-8?q?=E4=B8=BA0=E6=8B=A6=E6=88=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/mogo/och/bus/fragment/BaseBusTabFragment.java | 6 +----- .../main/java/com/mogo/och/taxi/ui/BaseTaxiTabFragment.java | 3 --- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BaseBusTabFragment.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BaseBusTabFragment.java index 2230cdcfa2..f42de596bc 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BaseBusTabFragment.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BaseBusTabFragment.java @@ -171,11 +171,7 @@ public abstract class BaseBusTabFragment @Override public void onClickImpl(View v) { - if (CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState() != IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE){ - restartAutopilot(); - }else { - ToastUtils.showShort(getResources().getString(R.string.bus_auto_disable_tip)); - } + restartAutopilot(); } }); diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/BaseTaxiTabFragment.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/BaseTaxiTabFragment.java index 8639133655..fdf4f0d427 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/BaseTaxiTabFragment.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/BaseTaxiTabFragment.java @@ -232,9 +232,6 @@ public abstract class BaseTaxiTabFragment Date: Fri, 2 Sep 2022 11:52:37 +0800 Subject: [PATCH 21/22] =?UTF-8?q?[2.10.0]=20taxi=E5=8F=B8=E6=9C=BA?= =?UTF-8?q?=E7=AB=AF=E4=B8=AA=E4=BA=BA=E4=B8=AD=E5=BF=83=E5=81=B6=E7=8E=B0?= =?UTF-8?q?=E5=86=85=E5=AD=98=E6=B3=84=E6=BC=8F=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mogo/och/taxi/ui/TaxiFragment.java | 18 ------- .../taxi/ui/TaxiOperationDatasFragment.java | 6 +++ .../taxi/ui/TaxiPersonalDialogFragment.java | 37 ++++++++----- .../och/taxi/ui/base/AvoidLeakDialog.java | 54 +++++++++++++++++++ 4 files changed, 83 insertions(+), 32 deletions(-) create mode 100644 OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/base/AvoidLeakDialog.java diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiFragment.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiFragment.java index a19ec5a511..319bcc9533 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiFragment.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiFragment.java @@ -2,7 +2,6 @@ package com.mogo.och.taxi.ui; import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI; -import android.content.DialogInterface; import android.os.Build; import android.os.Bundle; import android.text.TextUtils; @@ -203,23 +202,6 @@ public class TaxiFragment extends BaseTaxiTabFragment routeList) { -// if (routeList == null ) return; -// double distance = calculateTravelDistance(mogoLocation,routeList); -// if ( MogoOCHTaxiModel.getInstance().checkCurrentOCHOrder() ) { -// MogoOCHTaxiModel.getInstance().getCurrentOCHOrder().decreaseTravelDistance( distance ); -// updateOrderBaseStatusInfo(); -// } -// CallerLogger.INSTANCE.d(M_TAXI + "lianglihui","routeResult 剩余导航距离:"+distance); -// if (routeList != null && routeList.size() >0){ -// CallerLogger.INSTANCE.d(M_TAXI + "lianglihui","routeResult:"+routeList.size()); -// //adas回调导航路径 绘制引导线 -// if ( ochTaxiOverlayManager == null){ -// ochTaxiOverlayManager = new TaxiOverlayManager(this.getContext()); -// } -// ochTaxiOverlayManager.draw(mogoLocation,routeList); -// } -// } @Override public void onMapLoaded() { } diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiOperationDatasFragment.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiOperationDatasFragment.java index 81a3ebc07c..a6e5bbb3e4 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiOperationDatasFragment.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiOperationDatasFragment.java @@ -15,6 +15,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.mogo.och.common.module.utils.DateTimeUtil; import com.mogo.och.taxi.R; +import com.mogo.och.taxi.model.TaxiModel; import java.util.ArrayList; import java.util.List; @@ -53,6 +54,11 @@ public class TaxiOperationDatasFragment extends BaseTaxiUIFragment { mRecyclerView.setLayoutManager(new LinearLayoutManager(mContext)); mAdapter = new OperationDataAdapter(mContext, mData); mRecyclerView.setAdapter(mAdapter); + initDatas(); + } + + private void initDatas() { + TaxiModel.getInstance().queryDriverServiceData(); } public void setmType(int type) { diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiPersonalDialogFragment.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiPersonalDialogFragment.java index 0578000d65..1b2df283a0 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiPersonalDialogFragment.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiPersonalDialogFragment.java @@ -1,5 +1,6 @@ package com.mogo.och.taxi.ui; +import android.app.Dialog; import android.content.Context; import android.graphics.Color; import android.graphics.Point; @@ -36,6 +37,7 @@ import com.mogo.och.taxi.constant.TaxiOrderStatusEnum; import com.mogo.och.taxi.R; import com.mogo.och.taxi.bean.OrderQueryRespBean; import com.mogo.och.taxi.constant.TaxiOrderTypeEnum; +import com.mogo.och.taxi.ui.base.AvoidLeakDialog; import java.util.ArrayList; import java.util.Calendar; @@ -74,6 +76,15 @@ public class TaxiPersonalDialogFragment extends DialogFragment implements View.O public TaxiPersonalDialogFragment(TaxiFragment taxiFragment){ mTaxiFragment = taxiFragment; } + + @NonNull + @Override + public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { + AvoidLeakDialog dialog = new AvoidLeakDialog(getContext()); + dialog.setHostFragmentReference(this); + return dialog; + } + @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { @@ -82,6 +93,11 @@ public class TaxiPersonalDialogFragment extends DialogFragment implements View.O return view; } + @Override + public void dismissAllowingStateLoss() { + super.dismissAllowingStateLoss(); + } + @Override public void onStart() { super.onStart(); @@ -182,14 +198,15 @@ public class TaxiPersonalDialogFragment extends DialogFragment implements View.O public void onPageScrollStateChanged(int state) { } }); - mOperationViewPager.setAdapter(new OrdersOperationFragmentAdapter(getChildFragmentManager(), FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT)); + mOperationViewPager.setAdapter(new OrdersOperationFragmentAdapter( + getChildFragmentManager(), FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT)); fragments.get(0).setmType(0); - if (mTaxiFragment == null){ - dismiss(); - }else { - mTaxiFragment.queryDriverServiceData(); - } +// if (mTaxiFragment == null){ +// dismiss(); +// }else { +// mTaxiFragment.queryDriverServiceData(); +// } } public void onServiceDataUpdate(long dailyTimeDuration, long dailyOrderNum){ @@ -430,14 +447,6 @@ public class TaxiPersonalDialogFragment extends DialogFragment implements View.O orderTypeBt = itemView.findViewById(R.id.order_type_bt); dividerLine = itemView.findViewById(R.id.module_och_taxi_order_divider); mBootNoDataView = itemView.findViewById(R.id.boot_refresh_no_data_view); - - //orderId已经换成orderNo,所以显示 -// if (DebugConfig.isDebug()){ -// -// orderNumTv.setVisibility(View.GONE); -// }else { -// orderNumTv.setVisibility(View.GONE); -// } } } diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/base/AvoidLeakDialog.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/base/AvoidLeakDialog.java new file mode 100644 index 0000000000..e332766931 --- /dev/null +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/base/AvoidLeakDialog.java @@ -0,0 +1,54 @@ +package com.mogo.och.taxi.ui.base; + +import android.app.Dialog; +import android.content.Context; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.DialogFragment; +import java.lang.ref.WeakReference; + +/** + * @author: wangmingjun + * @date: 2022/9/1 + */ +public class AvoidLeakDialog extends Dialog { + + private WeakReference hostFragmentReference; + + public void setHostFragmentReference(DialogFragment hostFragment) { + this.hostFragmentReference = new WeakReference<>(hostFragment); + } + + public AvoidLeakDialog(@NonNull Context context) { + super(context); + } + + public AvoidLeakDialog(@NonNull Context context, int themeResId) { + super(context, themeResId); + } + + protected AvoidLeakDialog(@NonNull Context context, boolean cancelable, @Nullable OnCancelListener cancelListener) { + super(context, cancelable, cancelListener); + } + + @Override + public void setOnCancelListener(@Nullable OnCancelListener listener) { + } + + @Override + public void setOnDismissListener(@Nullable OnDismissListener listener) { + } + + @Override + public void setOnShowListener(@Nullable OnShowListener listener) { + } + + @Override + public void dismiss() { + super.dismiss(); + if (null != hostFragmentReference && null != hostFragmentReference.get()) { + hostFragmentReference.get().dismissAllowingStateLoss(); + } + } +} From 234cf4ed345f7f3e632b50d576e6074d9377b861 Mon Sep 17 00:00:00 2001 From: yangyakun Date: Fri, 2 Sep 2022 14:28:26 +0800 Subject: [PATCH 22/22] =?UTF-8?q?[fix]=20=E6=B7=BB=E5=8A=A0=E5=88=A4?= =?UTF-8?q?=E7=A9=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/mogo/och/taxi/ui/TaxiOperationDatasFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiOperationDatasFragment.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiOperationDatasFragment.java index a6e5bbb3e4..aaea75f515 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiOperationDatasFragment.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiOperationDatasFragment.java @@ -79,7 +79,7 @@ public class TaxiOperationDatasFragment extends BaseTaxiUIFragment { mDurationData.add(dailyTimeDuration); mOrderNumData.add(dailyOrderNum); mData.addAll(mDurationData); - mAdapter.notifyDataSetChanged(); + if (mAdapter != null) mAdapter.notifyDataSetChanged(); } class OperationDataAdapter extends RecyclerView.Adapter {